Go tests CI triggered from @profMagija of #13
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Go tests CI | |
run-name: Go tests CI triggered from @${{ github.actor }} of ${{ github.head_ref }} | |
on: | |
workflow_dispatch: | |
merge_group: | |
pull_request: | |
push: | |
branches: | |
- master | |
- develop | |
jobs: | |
test: | |
name: Go Tests | |
runs-on: ubuntu-8 | |
# Creates a redis container for redis tests | |
services: | |
redis: | |
image: redis | |
ports: | |
- 6379:6379 | |
strategy: | |
fail-fast: false | |
matrix: | |
test-mode: [defaults, race, challenge, stylus, long] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install dependencies | |
run: sudo apt update && sudo apt install -y wabt gotestsum | |
- name: Setup nodejs | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '18' | |
cache: 'yarn' | |
cache-dependency-path: '**/yarn.lock' | |
- name: Install go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: 1.21.x | |
- name: Install wasm-ld | |
run: | | |
sudo apt-get update && sudo apt-get install -y lld-14 | |
sudo ln -s /usr/bin/wasm-ld-14 /usr/local/bin/wasm-ld | |
- name: Install rust stable | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: 'stable' | |
targets: 'wasm32-wasi, wasm32-unknown-unknown' | |
components: 'llvm-tools-preview, rustfmt, clippy' | |
- name: Install rust nightly | |
uses: dtolnay/rust-toolchain@nightly | |
id: install-rust-nightly | |
with: | |
toolchain: 'nightly-2024-08-06' | |
targets: 'wasm32-wasi, wasm32-unknown-unknown' | |
components: 'rust-src, rustfmt, clippy' | |
- name: Set STYLUS_NIGHTLY_VER environment variable | |
run: echo "STYLUS_NIGHTLY_VER=+$(rustup toolchain list | grep '^nightly' | head -n1 | cut -d' ' -f1)" >> "$GITHUB_ENV" | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
- name: Cache Build Products | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/go/pkg/mod | |
~/.cache/go-build | |
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}-${{ matrix.test-mode }} | |
restore-keys: ${{ runner.os }}-go- | |
- name: Cache Rust Build Products | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/registry/ | |
~/.cargo/git/ | |
arbitrator/target/ | |
arbitrator/wasm-libraries/target/ | |
arbitrator/wasm-libraries/soft-float/SoftFloat/build | |
target/etc/initial-machine-cache/ | |
key: ${{ runner.os }}-cargo-${{ steps.install-rust.outputs.rustc_hash }}-min-${{ hashFiles('arbitrator/Cargo.lock') }}-${{ matrix.test-mode }} | |
restore-keys: ${{ runner.os }}-cargo-${{ steps.install-rust.outputs.rustc_hash }}- | |
- name: Cache cbrotli | |
uses: actions/cache@v3 | |
id: cache-cbrotli | |
with: | |
path: | | |
target/include/brotli/ | |
target/lib-wasm/ | |
target/lib/libbrotlicommon-static.a | |
target/lib/libbrotlienc-static.a | |
target/lib/libbrotlidec-static.a | |
key: ${{ runner.os }}-brotli-${{ hashFiles('scripts/build-brotli.sh') }}-${{ hashFiles('.github/workflows/arbitrator-ci.yaml') }}-${{ matrix.test-mode }} | |
restore-keys: ${{ runner.os }}-brotli- | |
- name: Build cbrotli-local | |
if: steps.cache-cbrotli.outputs.cache-hit != 'true' | |
run: ./scripts/build-brotli.sh -l | |
- name: Build cbrotli-wasm in docker | |
if: steps.cache-cbrotli.outputs.cache-hit != 'true' | |
run: ./scripts/build-brotli.sh -w -d | |
- name: Build | |
run: make build test-go-deps -j | |
- name: Build all lint dependencies | |
run: make -j build-node-deps | |
- name: Lint | |
uses: golangci/golangci-lint-action@v3 | |
with: | |
version: latest | |
skip-pkg-cache: true | |
- name: Custom Lint | |
run: | | |
go run ./linters ./... | |
- name: Set environment variables | |
run: | | |
mkdir -p target/tmp/deadbeefbee | |
echo "TMPDIR=$(pwd)/target/tmp/deadbeefbee" >> "$GITHUB_ENV" | |
echo "GOMEMLIMIT=6GiB" >> "$GITHUB_ENV" | |
echo "GOGC=80" >> "$GITHUB_ENV" | |
echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> "$GITHUB_ENV" | |
- name: run tests without race detection and path state scheme | |
if: matrix.test-mode == 'defaults' | |
env: | |
TEST_STATE_SCHEME: path | |
run: | | |
packages=`go list ./...` | |
for package in $packages; do | |
echo running tests for $package | |
if ! stdbuf -oL gotestsum --format short-verbose --packages="$package" --rerun-fails=2 --no-color=false -- -coverprofile=coverage.txt -covermode=atomic -coverpkg=./...,./go-ethereum/... -timeout 20m -tags=cionly > >(stdbuf -oL tee -a full.log | grep -vE "INFO|seal"); then | |
exit 1 | |
fi | |
done | |
- name: run tests without race detection and hash state scheme | |
if: matrix.test-mode == 'defaults' | |
env: | |
TEST_STATE_SCHEME: hash | |
run: | | |
packages=`go list ./...` | |
for package in $packages; do | |
echo running tests for $package | |
if ! stdbuf -oL gotestsum --format short-verbose --packages="$package" --rerun-fails=2 --no-color=false -- -timeout 20m -tags=cionly; then | |
exit 1 | |
fi | |
done | |
- name: run tests with race detection and path state scheme | |
if: matrix.test-mode == 'race' | |
env: | |
TEST_STATE_SCHEME: path | |
run: | | |
packages=`go list ./...` | |
for package in $packages; do | |
echo running tests for $package | |
if ! stdbuf -oL gotestsum --format short-verbose --packages="$package" --rerun-fails=2 --no-color=false -- -race -timeout 30m > >(stdbuf -oL tee -a full.log | grep -vE "INFO|seal"); then | |
exit 1 | |
fi | |
done | |
- name: run tests with race detection and hash state scheme | |
if: matrix.test-mode == 'race' | |
env: | |
TEST_STATE_SCHEME: hash | |
run: | | |
packages=`go list ./...` | |
for package in $packages; do | |
echo running tests for $package | |
if ! stdbuf -oL gotestsum --format short-verbose --packages="$package" --rerun-fails=2 --no-color=false -- -race -timeout 30m; then | |
exit 1 | |
fi | |
done | |
- name: run redis tests | |
if: matrix.test-mode == 'defaults' | |
run: TEST_REDIS=redis://localhost:6379/0 gotestsum --format short-verbose -- -p 1 -run TestRedis ./arbnode/... ./system_tests/... -coverprofile=coverage-redis.txt -covermode=atomic -coverpkg=./... | |
- name: run challenge tests | |
if: matrix.test-mode == 'challenge' | |
run: | | |
packages=`go list ./...` | |
for package in $packages; do | |
echo running tests for $package | |
if ! stdbuf -oL gotestsum --format short-verbose --packages="$package" --rerun-fails=2 --no-color=false -- -coverprofile=coverage.txt -covermode=atomic -coverpkg=./...,./go-ethereum/... -tags=challengetest -run=TestChallenge > >(stdbuf -oL tee -a full.log | grep -vE "INFO|seal"); then | |
exit 1 | |
fi | |
done | |
- name: run stylus tests | |
if: matrix.test-mode == 'stylus' | |
run: | | |
packages=`go list ./...` | |
for package in $packages; do | |
echo running tests for $package | |
if ! stdbuf -oL gotestsum --format short-verbose --packages="$package" --rerun-fails=2 --no-color=false -- -timeout 60m -coverprofile=coverage.txt -covermode=atomic -coverpkg=./...,./go-ethereum/... -tags=stylustest -run="TestProgramArbitrator" > >(stdbuf -oL tee -a full.log | grep -vE "INFO|seal"); then | |
exit 1 | |
fi | |
done | |
- name: run long stylus tests | |
if: matrix.test-mode == 'long' | |
run: | | |
packages=`go list ./...` | |
for package in $packages; do | |
echo running tests for $package | |
if ! stdbuf -oL gotestsum --format short-verbose --packages="$package" --rerun-fails=2 --no-color=false -- -timeout 60m -coverprofile=coverage.txt -covermode=atomic -coverpkg=./...,./go-ethereum/... -tags=stylustest -run="TestProgramLong" > >(stdbuf -oL tee -a full.log | grep -vE "INFO|seal"); then | |
exit 1 | |
fi | |
done | |
- name: Archive detailed run log | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.test-mode }}-full.log | |
path: full.log | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v2 | |
if: matrix.test-mode == 'defaults' | |
with: | |
fail_ci_if_error: false | |
files: ./coverage.txt,./coverage-redis.txt | |
verbose: false | |
token: ${{ secrets.CODECOV_TOKEN }} |