feat(ci): build integration tests binary once and reuse it

This commit is contained in:
Daniil Polyakov 2026-05-22 19:38:47 +03:00
parent adf0d241c8
commit ac2d01e1b4

View File

@ -144,48 +144,10 @@ jobs:
RUST_LOG: "info" RUST_LOG: "info"
run: cargo nextest run --workspace --exclude integration_tests --all-features run: cargo nextest run --workspace --exclude integration_tests --all-features
integration-test-targets: integration-tests-prebuild:
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs: outputs:
targets: ${{ steps.discover.outputs.targets }} targets: ${{ steps.discover-targets.outputs.targets }}
steps:
- uses: actions/checkout@v5
with:
ref: ${{ github.event.pull_request.head.sha || github.head_ref }}
- name: Discover integration test targets
id: discover
run: |
declare -a targets=()
for path in integration_tests/tests/*; do
if [[ -f "$path" && "$path" == *.rs ]]; then
targets+=("$(basename "$path" .rs)")
elif [[ -d "$path" && -f "$path/main.rs" ]]; then
targets+=("$(basename "$path")")
fi
done
if [[ "${#targets[@]}" -eq 0 ]]; then
echo "No integration test targets were discovered." >&2
exit 1
fi
mapfile -t targets < <(printf '%s\n' "${targets[@]}" | sort -u)
targets_json="$(printf '%s\n' "${targets[@]}" | jq -R . | jq -cs .)"
echo "targets=$targets_json" >> "$GITHUB_OUTPUT"
echo "Discovered integration targets: $targets_json"
integration-tests:
needs: integration-test-targets
runs-on: ubuntu-latest
timeout-minutes: 90 # TODO: Apply CI cache to speed this up
strategy:
fail-fast: false
matrix:
target: ${{ fromJson(needs.integration-test-targets.outputs.targets) }}
name: integration-tests (${{ matrix.target }})
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
with: with:
@ -211,16 +173,74 @@ jobs:
- name: Install nextest - name: Install nextest
run: cargo install --locked cargo-nextest run: cargo install --locked cargo-nextest
- name: Build integration test archive
env:
RISC0_DEV_MODE: "1"
run: cargo nextest archive -p integration_tests --archive-file integration-tests.tar.zst --no-pager
- name: Upload integration test archive
uses: actions/upload-artifact@v4
with:
name: integration-tests-archive
path: integration-tests.tar.zst
- name: Discover integration test targets from archive
id: discover-targets
run: |
cargo nextest list \
--archive-file integration-tests.tar.zst \
--list-type binaries-only \
--message-format json \
--no-pager > integration-tests-binaries.json
targets_json="$(jq -c '[."rust-binaries" | to_entries[] | select(.value.kind == "test" and .value."binary-name" != "tps") | .value."binary-name"] | sort | unique' integration-tests-binaries.json)"
if [[ "$targets_json" == "[]" ]]; then
echo "No integration test targets were discovered." >&2
exit 1
fi
echo "targets=$targets_json" >> "$GITHUB_OUTPUT"
echo "Discovered integration targets: $targets_json"
integration-tests:
needs: integration-tests-prebuild
runs-on: ubuntu-latest
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
target: ${{ fromJson(needs.integration-tests-prebuild.outputs.targets) }}
name: integration-tests (${{ matrix.target }})
steps:
- uses: actions/checkout@v5
with:
ref: ${{ github.event.pull_request.head.sha || github.head_ref }}
- uses: ./.github/actions/install-system-deps
- uses: ./.github/actions/install-risc0
- uses: ./.github/actions/install-logos-blockchain-circuits
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install active toolchain
run: rustup install
- name: Download integration test archive
uses: actions/download-artifact@v4
with:
name: integration-tests-archive
- name: Install nextest
run: cargo install --locked cargo-nextest
- name: Run tests - name: Run tests
env: env:
RISC0_DEV_MODE: "1" RISC0_DEV_MODE: "1"
RUST_LOG: "info" RUST_LOG: "info"
run: | run: cargo nextest run --archive-file integration-tests.tar.zst -E "binary(${{ matrix.target }})"
if [[ "${{ matrix.target }}" == "tps" ]]; then
cargo nextest run -p integration_tests --test "${{ matrix.target }}" -- --skip tps_test
else
cargo nextest run -p integration_tests --test "${{ matrix.target }}"
fi
valid-proof-test: valid-proof-test:
runs-on: ubuntu-latest runs-on: ubuntu-latest