Skip to content

chore(deps): bump alloy-rpc-client from 1.8.3 to 2.0.0 #2955

chore(deps): bump alloy-rpc-client from 1.8.3 to 2.0.0

chore(deps): bump alloy-rpc-client from 1.8.3 to 2.0.0 #2955

Workflow file for this run

name: CI
on:
pull_request:
branches: [main]
push:
branches: [main]
workflow_dispatch:
concurrency:
group: rust-validation-${{ github.head_ref }}
cancel-in-progress: true
env:
RUST_BACKTRACE: full
CARGO_TERM_COLOR: always
IN_CI: "true"
TNT_CORE_PATH: ${{ github.workspace }}/../tnt-core
RUSTFMT_NIGHTLY: nightly-2026-02-24
jobs:
formatting:
name: Rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
rust-toolchain: ${{ env.RUSTFMT_NIGHTLY }}
components: rustfmt
cache: "false"
sccache: "false"
foundry: "false"
- name: Check Formatting
run: cargo +${RUSTFMT_NIGHTLY} fmt -- --check
linting:
timeout-minutes: 120
name: cargo clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/free-disk-space
- uses: ./.github/actions/setup-build-env
- name: Run Clippy
run: cargo clippy --workspace --tests --examples -- -D warnings
generate-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
cache: "false"
foundry: "false"
- name: Detect changed crates (PRs only)
id: changed
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
git fetch origin ${{ github.base_ref }} --depth=1
CHANGED=$(./scripts/ci/changed-crates.sh origin/${{ github.base_ref }})
echo "crates=$CHANGED" >> $GITHUB_OUTPUT
echo "Changed crates: $CHANGED" >&2
else
echo 'crates=[]' >> $GITHUB_OUTPUT
fi
- name: Generate test matrix (grouped)
id: set-matrix
run: |
CHANGED='${{ steps.changed.outputs.crates }}'
# On push to main or if changed-crates returned empty (meaning "test all"),
# test all workspace packages
if [ "${{ github.event_name }}" != "pull_request" ] || [ "$CHANGED" = "[]" ]; then
ALL_PKGS=$(cargo metadata --format-version 1 --no-deps | jq -r '[.packages[] | .name] | sort | .[]')
else
# On PRs, only test changed crates + dependents
ALL_PKGS=$(echo "$CHANGED" | jq -r '.[]' | sort)
if [ -z "$ALL_PKGS" ]; then
echo "No crates to test"
echo 'matrix=[]' >> $GITHUB_OUTPUT
exit 0
fi
fi
# Serial crates that need test-threads=1
SERIAL="blueprint-tangle-extra blueprint-client-tangle blueprint-client-evm blueprint-networking blueprint-qos cargo-tangle blueprint-manager"
# Group crates into bundles of ~8 for parallel execution
BUNDLE_SIZE=8
BUNDLES="[]"
CURRENT_BUNDLE="[]"
COUNT=0
for pkg in $ALL_PKGS; do
# Serial crates get their own job
if echo "$SERIAL" | grep -qw "$pkg"; then
BUNDLES=$(echo "$BUNDLES" | jq --arg p "$pkg" --arg s "true" '. + [{"packages": [$p], "serial": $s}]')
continue
fi
CURRENT_BUNDLE=$(echo "$CURRENT_BUNDLE" | jq --arg p "$pkg" '. + [$p]')
COUNT=$((COUNT + 1))
if [ "$COUNT" -ge "$BUNDLE_SIZE" ]; then
BUNDLES=$(echo "$BUNDLES" | jq --argjson b "$CURRENT_BUNDLE" '. + [{"packages": $b, "serial": "false"}]')
CURRENT_BUNDLE="[]"
COUNT=0
fi
done
# Flush remaining
if [ "$(echo "$CURRENT_BUNDLE" | jq length)" -gt 0 ]; then
BUNDLES=$(echo "$BUNDLES" | jq --argjson b "$CURRENT_BUNDLE" '. + [{"packages": $b, "serial": "false"}]')
fi
echo "Generated $(echo "$BUNDLES" | jq length) test bundles"
echo "matrix=$(echo "$BUNDLES" | jq -c .)" >> $GITHUB_OUTPUT
testing:
needs: [generate-matrix]
if: ${{ needs.generate-matrix.outputs.matrix != '[]' && needs.generate-matrix.outputs.matrix != '' }}
# 90 minutes, not 45: the biggest bundles (cargo-tangle and the
# blueprint-client-core group of 8) take ~46-48 minutes to fresh-
# compile + test on shared GH runners, which hit the old 45min
# ceiling on every cold-cache run (including main's own CI runs
# 24052887535 and 24047749608). Doubling the budget gives worst-
# case runners real headroom without changing the time-to-signal
# on a warm-cache run (which stays well under the old 45min).
timeout-minutes: 90
# The matrix entries are already parsed JSON objects (we did
# `fromJSON(needs.generate-matrix.outputs.matrix)` in `matrix.bundle`
# below), so `matrix.bundle.packages` is *already* an array. Calling
# `fromJSON()` on it here would error and silently kill the matrix
# fan-out (which is what was happening on main: only 6 jobs ran
# instead of the 6 + ~15 test bundles intended by the rewrite).
name: cargo test (${{ join(matrix.bundle.packages, ', ') }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
bundle: ${{ fromJSON(needs.generate-matrix.outputs.matrix) }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/free-disk-space
- uses: ./.github/actions/setup-build-env
with:
nextest: "true"
- name: Run tests
run: |
PACKAGES='${{ toJSON(matrix.bundle.packages) }}'
IS_SERIAL='${{ matrix.bundle.serial }}'
PROFILE="ci"
EXTRA_ARGS=""
if [ "$IS_SERIAL" = "true" ]; then
PROFILE="serial"
fi
for PKG in $(echo "$PACKAGES" | jq -r '.[]'); do
echo "========================================="
echo "Testing: $PKG"
echo "========================================="
# Check if crate has a lib target (for doc tests)
HAS_LIB=$(cargo metadata --no-deps --format-version 1 | python3 -c "
import json, sys
meta = json.load(sys.stdin)
pkg = next((p for p in meta['packages'] if p['name'] == '$PKG'), None)
if pkg:
has_lib = any(t['kind'] == ['lib'] for t in pkg.get('targets', []))
print('true' if has_lib else 'false')
else:
print('false')
")
if [ "$PKG" = "blueprint-manager" ]; then
cargo nextest run --test-threads=1 --no-tests pass --package "$PKG" --profile "$PROFILE"
else
cargo nextest run --no-tests pass --package "$PKG" --profile "$PROFILE"
fi
if [ "$HAS_LIB" = "true" ]; then
cargo test --package "$PKG" --doc
fi
done
integration:
name: Integration Tests
runs-on: ubuntu-latest
timeout-minutes: 60
env:
RUST_LOG: info
RUN_TNT_E2E: "1"
BLUEPRINT_ANVIL_LOGS: "1"
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/free-disk-space
- uses: ./.github/actions/setup-build-env
- name: Warm up Foundry image
run: docker pull ghcr.io/foundry-rs/foundry:latest
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Tangle integration tests
run: |
cargo test -p blueprint-pricing-engine --features pricing-engine-e2e-tests --test evm_listener -- --nocapture
cargo test -p blueprint-manager --test tangle_runner -- --nocapture
cargo test -p hello-tangle-blueprint --test anvil -- --nocapture
cargo test -p blueprint-client-tangle --test anvil -- --nocapture --test-threads=1
cargo test -p blueprint-tangle-extra --test anvil_integration -- --nocapture --test-threads=1
- name: QoS integration tests
run: |
cargo test -p blueprint-qos --test qos_metrics_demo_test -- --nocapture --test-threads=1
cargo test -p blueprint-qos --test blueprint_integration_test -- --nocapture --test-threads=1
- name: CLI integration tests
run: |
cargo test -p cargo-tangle --test '*' -- --nocapture --test-threads=1
- name: Container spawn tests
run: |
cargo test -p blueprint-manager container --lib -- --nocapture --test-threads=1
cargo test -p blueprint-manager sources --lib -- --nocapture --test-threads=1
eigenlayer-integration:
name: EigenLayer Integration
runs-on: ubuntu-latest
timeout-minutes: 45
env:
RUST_LOG: info
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/free-disk-space
- uses: ./.github/actions/setup-build-env
with:
tnt-core: "false"
- name: Run EigenLayer tests
run: |
cargo test -p blueprint-client-eigenlayer --lib -- --nocapture
cargo test -p blueprint-runner --features eigenlayer --lib -- --nocapture
testnet-smoke-test:
name: Testnet Smoke Test
runs-on: ubuntu-latest
timeout-minutes: 30
if: github.event_name == 'workflow_dispatch'
env:
RUST_LOG: info
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
with:
foundry: "false"
- name: Build CLI
run: cargo build -p cargo-tangle --release
- name: Smoke test
env:
TANGLE_RPC_URL: ${{ secrets.TANGLE_TESTNET_RPC_URL }}
if: env.TANGLE_RPC_URL != ''
run: |
./target/release/cargo-tangle tangle blueprint list blueprints --network testnet || echo "Testnet query failed (expected if no testnet access)"