Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: build test binaries #15249

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions .github/workflows/cache-test-binaries.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Test Binary Caching

# Run on key branches to make sure integration is good, otherwise run on all PR's
on:
pull_request:


jobs:

build-test-binaries-concurrent:
runs-on: ubuntu22.04-32cores-128GB

Check failure on line 11 in .github/workflows/cache-test-binaries.yml

View workflow job for this annotation

GitHub Actions / Validate Workflow Changes

1. This Ubuntu runner is 8-16 more expensive than a base Ubuntu runner. Consider using a smaller Ubuntu runner. (runner-ubuntu / error)
strategy:
fail-fast: false
matrix:
type:
- concurrency: 4
- concurrency: 8
- concurrency: 16
- concurrency: 32
name: Build Test Binaries (${{ matrix.type.concurrency }})
env:
# We explicitly have this env var not be "CL_DATABASE_URL" to avoid having it be used by core related tests
# when they should not be using it, while still allowing us to DRY up the setup
DB_URL: postgresql://postgres:postgres@localhost:5432/chainlink_test?sslmode=disable
steps:
- name: Checkout the repo
uses: actions/[email protected]

- name: Change Modtime of Files (cache optimization)
shell: bash
run: |
find . -type f,d -exec touch -r {} -d '1970-01-01T00:00:01' {} \; || true

- name: Setup Go
uses: ./.github/actions/setup-go
with:
restore-build-cache-only: true
# piggy back on go_core_tests for caching
build-cache-version: 'go_core_tests'

- name: Build Test Binaries
shell: bash
env:
CL_DATABASE_URL: ${{ env.DB_URL }}
BUILD_CONCURRENCY: ${{ matrix.type.concurrency }}
run: |
./tools/bin/build-test-binaries-with-concurrency

- name: Debug testsout
shell: bash
run: |
# ls -lah ./testsout
# du -ch ./testsout
# Hash each file in the output directory and print the filename and hash
echo "Hashing compiled test binaries:"
for file in testsout/*; do
if [[ -f "$file" ]]; then
hash=$(sha256sum "$file" | awk '{ print $1 }')
echo "File: $file, SHA256 Hash: $hash"
fi
done
24 changes: 24 additions & 0 deletions tools/bin/build-test-binaries
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash

# Directory to store compiled test binaries
mkdir -p testsout

TOOLS_PATH=${TOOLS_PATH:-"./tools"}
GO_LDFLAGS=$(bash ${TOOLS_PATH}/bin/ldflags)

# Find all packages with tests recursively
testable_packages=$(go list ./... | grep -vE '/vendor|/testsout')

# Compile test binaries for each package and handle naming conflicts
for pkg in $testable_packages; do
output_file="testsout/$(echo $pkg | tr '/' '-')-test" # Transform pkg path to a unique filename

# Compile test binary
echo "Compiling test for package $pkg"
go test -c -o "$output_file" -ldflags "$GO_LDFLAGS" -tags integration -vet=off "$pkg"
done

# for binary in testsout/*-test; do
# echo "Running $binary"
# $binary -test.run . || exit 1 # Exit on failure
# done
52 changes: 52 additions & 0 deletions tools/bin/build-test-binaries-with-concurrency
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/bin/bash

# Directory to store compiled test binaries
mkdir -p testsout

# Find all packages with tests recursively
testable_packages=$(go list ./... | grep -vE '/vendor|/testsout')

# Set the concurrency limits
BUILD_CONCURRENCY=${BUILD_CONCURRENCY:-"4"}
# run_concurrency=4
build_jobs=0
# run_jobs=0

# Compile test binaries for each package with controlled concurrency
for pkg in $testable_packages; do
output_file="testsout/$(echo $pkg | tr '/' '-')-test" # Transform pkg path to a unique filename

# Compile test binary in the background
echo "Compiling test for package $pkg"
go test -c -o "$output_file" -vet=off "$pkg" &

# Increment the build job count
build_jobs=$((build_jobs + 1))

# If we've reached the build concurrency limit, wait for any job to finish
if [[ $build_jobs -ge $BUILD_CONCURRENCY ]]; then
wait -n
build_jobs=$((build_jobs - 1))
fi
done

# Wait for all remaining build jobs to complete
wait

# Run all compiled test binaries with controlled concurrency
# for binary in testsout/*-test; do
# echo "Running $binary"
# $binary -test.run . || exit 1 &

# Increment the run job count
# run_jobs=$((run_jobs + 1))

# If we've reached the run concurrency limit, wait for any job to finish
# if [[ $run_jobs -ge $run_concurrency ]]; then
# wait -n
# run_jobs=$((run_jobs - 1))
# fi
# done

# Wait for all remaining run jobs to complete
wait
Loading