Skip to content

fix(bindings): refcount Pool to fix teardown panic #1386

fix(bindings): refcount Pool to fix teardown panic

fix(bindings): refcount Pool to fix teardown panic #1386

Workflow file for this run

name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-ci
cancel-in-progress: true
env:
ZIG_VERSION: "0.16.0"
NODE_VERSION: "24"
jobs:
build-test:
name: build & test (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- ubuntu-24.04-arm
- macos-latest
# - macos-13 # skip because hashtree does not support macos x64 yet
# - windows-latest # TODO: https://github.com/ChainSafe/state-transition-z/issues/10
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ${{ matrix.os }}-${{ env.ZIG_VERSION }}
# Zig fmt is failing on windows and is redundant to run all platforms. So we run only on linux.
- name: Check formatting
if: matrix.os == 'ubuntu-latest'
run: zig fmt --check .
- name: Run hashing tests
run: |
zig build test:hashing
- name: Run persistent_merkle_tree tests
run: |
zig build test:persistent_merkle_tree
- name: Run ssz tests
run: |
zig build test:ssz
- name: Run hex tests
run: |
zig build test:hex
- name: Run config tests
run: |
zig build test:config
- name: Run constants tests
run: |
zig build test:constants
- name: Run consensus-type tests
run: |
zig build test:consensus_types
- name: Run fork_types tests
run: |
zig build test:fork_types
- name: Run era tests
run: |
zig build test:era
- name: Run preset tests
run: |
zig build test:preset
- name: Run bls tests
run: |
zig build test:bls
- name: Run state-transition tests
run: |
zig build test:state_transition
- name: Build benchmarks
run: |
zig build build-exe:bench_hashing build-exe:bench_merkle_gindex build-exe:bench_merkle_node build-exe:bench_ssz_attestation build-exe:bench_ssz_block build-exe:bench_ssz_state build-exe:bench_process_block build-exe:bench_process_epoch
build-test-slow:
name: slow tests
# It takes time to download and run these tests, so we only run them on ubuntu-latest
runs-on: ubuntu-latest
needs: build-test
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Restore spec tests cache
uses: actions/cache@v4
with:
path: fixtures/era
key: era-files-${{ hashFiles('build.zig') }} # downloaded era files defined in build.zig
- name: Download era files
run: |
zig build run:download_era_files
- name: Run slow int tests
run: |
zig build test:int
spec-test-prep:
name: spec tests - prepare
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Restore spec tests cache
uses: actions/cache@v4
with:
path: test/spec/spec_tests
key: spec-test-data-${{ hashFiles('build.zig') }} # spec test version is defined in build.zig
- name: Download spec tests
run: |
zig build run:download_spec_tests
- name: Write spec tests
run: |
zig build run:write_spec_tests
- name: Write ssz_generic spec tests
run: |
zig build run:write_ssz_generic_spec_tests
- name: Write ssz_static spec tests
run: |
zig build run:write_ssz_static_spec_tests
- name: Write BLS spec tests
run: |
zig build run:write_bls_spec_tests
- name: Upload generated test files
uses: actions/upload-artifact@v4
with:
name: spec-test-generated
path: |
test/spec/root*.zig
test/spec/test_case/
test/spec/ssz/generic_tests.zig
test/spec/ssz/static_tests.zig
test/spec/bls/spec_tests.zig
retention-days: 1
spec-test-ssz-generic:
name: spec tests - ssz generic
runs-on: ubuntu-latest
needs: [build-test, spec-test-prep]
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Restore spec tests cache
uses: actions/cache@v4
with:
path: test/spec/spec_tests
key: spec-test-data-${{ hashFiles('build.zig') }}
- name: Download generated test files
uses: actions/download-artifact@v4
with:
name: spec-test-generated
path: test/spec
- name: Run ssz_generic spec tests
run: |
zig build test:ssz_generic_spec_tests
spec-test-ssz-static-minimal:
name: spec tests - ssz static minimal
runs-on: ubuntu-latest
needs: [build-test, spec-test-prep]
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Restore spec tests cache
uses: actions/cache@v4
with:
path: test/spec/spec_tests
key: spec-test-data-${{ hashFiles('build.zig') }}
- name: Download generated test files
uses: actions/download-artifact@v4
with:
name: spec-test-generated
path: test/spec
- name: Run minimal ssz_static spec tests
run: |
zig build test:ssz_static_spec_tests -Dpreset=minimal -Doptimize=ReleaseSafe
spec-test-ssz-static-mainnet:
name: spec tests - ssz static mainnet
runs-on: ubuntu-latest
needs: [build-test, spec-test-prep]
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Restore spec tests cache
uses: actions/cache@v4
with:
path: test/spec/spec_tests
key: spec-test-data-${{ hashFiles('build.zig') }}
- name: Download generated test files
uses: actions/download-artifact@v4
with:
name: spec-test-generated
path: test/spec
- name: Run mainnet ssz_static spec tests
run: |
zig build test:ssz_static_spec_tests -Dpreset=mainnet
spec-test-bls:
name: spec tests - bls
runs-on: ubuntu-latest
needs: [build-test, spec-test-prep]
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Restore spec tests cache
uses: actions/cache@v4
with:
path: test/spec/spec_tests
key: spec-test-data-${{ hashFiles('build.zig') }}
- name: Download generated test files
uses: actions/download-artifact@v4
with:
name: spec-test-generated
path: test/spec
- name: Run BLS spec tests
run: |
zig build test:bls_spec_tests
spec-test-minimal:
name: spec tests - minimal (${{ matrix.runner }})
runs-on: ubuntu-latest
needs: [build-test, spec-test-prep]
strategy:
fail-fast: false
matrix:
runner:
- operations
- epoch_processing
- sanity
- rewards
- transition
- random
- fork
- finality
- merkle_proof
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Restore spec tests cache
uses: actions/cache@v4
with:
path: test/spec/spec_tests
key: spec-test-data-${{ hashFiles('build.zig') }}
- name: Download generated test files
uses: actions/download-artifact@v4
with:
name: spec-test-generated
path: test/spec
- name: Run spec tests - minimal (${{ matrix.runner }})
run: |
zig build test:spec_tests -Dpreset=minimal -Dspec_tests.filters=${{ matrix.runner }}
spec-test-mainnet:
name: spec tests - mainnet (${{ matrix.runner }})
runs-on: ubuntu-latest
needs: [build-test, spec-test-prep]
strategy:
fail-fast: false
matrix:
runner:
- operations
- epoch_processing
- sanity
- rewards
- transition
- random
- fork
- finality
- merkle_proof
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Restore spec tests cache
uses: actions/cache@v4
with:
path: test/spec/spec_tests
key: spec-test-data-${{ hashFiles('build.zig') }}
- name: Download generated test files
uses: actions/download-artifact@v4
with:
name: spec-test-generated
path: test/spec
- name: Run spec tests - mainnet (${{ matrix.runner }})
run: |
zig build test:spec_tests -Dpreset=mainnet -Doptimize=ReleaseSafe -Dspec_tests.filters=${{ matrix.runner }}
build-fuzz:
name: build fuzz harnesses
runs-on: ubuntu-latest
needs: build-test
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Install AFL++ and LLVM
run: |
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y afl++ llvm
- name: Verify AFL++ and LLVM are available
run: |
afl-cc --version
if command -v llvm-config >/dev/null 2>&1; then
llvm-config --version
else
llvm-config-18 --version
fi
- name: Build fuzz harnesses
# Build in ReleaseFast so Zig 0.16's Debug `sanitize_c = .full`
# doesn't emit `__ubsan_handle_*` calls into blst's C objects that
# `afl-cc` can't resolve without `libubsan`. Fuzzers want throughput
# anyway; devs can still use `zig build` in Debug locally.
run: |
cd test/fuzz && zig build -Doptimize=ReleaseFast
bindings-test:
name: bindings - test
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
- name: Install Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}
cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
- name: Install dependencies
run: |
pnpm install
- name: Run bindings formatter
run: |
pnpm biome ci
- name: Build bindings
run: |
zig build build-lib:bindings -Doptimize=ReleaseSafe
- name: Restore era files cache
uses: actions/cache@v4
with:
path: fixtures/era
key: era-files-${{ hashFiles('build.zig') }} # downloaded era files defined in build.zig
- name: Download era files
run: |
zig build run:download_era_files
- name: Test bindings
run: |
pnpm test
# metrics_stf depends on httpz, which is temporarily disabled for Zig 0.16 migration
# build-examples:
# name: build-examples
# runs-on: ubuntu-latest
# steps:
# - name: Checkout Repository
# uses: actions/checkout@v4
# - name: Install Zig
# uses: mlugg/setup-zig@v2
# with:
# version: ${{ env.ZIG_VERSION }}
# cache-key: ubuntu-latest-${{ env.ZIG_VERSION }}
# - name: Build metrics example
# run: |
# zig build build-exe:metrics_stf