Skip to content

feat(infra): USDT OFT warp route deployment + SDK fix for unproxied contracts #25918

feat(infra): USDT OFT warp route deployment + SDK fix for unproxied contracts

feat(infra): USDT OFT warp route deployment + SDK fix for unproxied contracts #25918

Workflow file for this run

name: rust
on:
# Triggers the workflow on pushes to main branch
push:
branches: [main]
# Triggers on pull requests
pull_request:
branches:
- '*'
merge_group:
workflow_dispatch:
concurrency:
group: rust-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: full
MIN_LANDERCOVERAGE_PERCENTAGE: 15
RUSTC_WRAPPER: sccache
jobs:
ts-only:
runs-on: ubuntu-latest
outputs:
skip_rust: ${{ steps.decide.outputs.skip_rust }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Check CI context
id: context
uses: ./.github/actions/ci-context-check
- name: Decide whether to skip rust jobs
id: decide
run: |
echo "Context: ${{ steps.context.outputs.reason }}"
if [[ "${{ steps.context.outputs.should_skip }}" == "true" ]]; then
echo "skip_rust=true" >> $GITHUB_OUTPUT
exit 0
fi
if [[ "${{ steps.context.outputs.must_run }}" == "true" ]]; then
echo "skip_rust=false" >> $GITHUB_OUTPUT
exit 0
fi
# Check path changes for PRs
BASE_REF="${{ github.base_ref }}"
if [[ -z "$BASE_REF" ]]; then
BASE_REF="HEAD~1"
else
BASE_REF="origin/$BASE_REF"
fi
if ! CHANGED_FILES=$(git diff --name-only "$BASE_REF"...HEAD); then
echo "::warning::Git diff failed, defaulting to run rust tests"
echo "skip_rust=false" >> $GITHUB_OUTPUT
exit 0
fi
# Filter out sealevel deployment config paths that don't affect build/tests
RUST_CODE_CHANGES=$(echo "$CHANGED_FILES" | grep -vE '^rust/sealevel/(environments/(mainnet3|testnet4)/|\.vscode/)' || true)
if echo "$RUST_CODE_CHANGES" | grep -qE '^(rust/|\.github/workflows/(rust\.|test\.yml|test-rust)|\.github/actions/)'; then
echo "skip_rust=false" >> $GITHUB_OUTPUT
else
echo "skip_rust=true" >> $GITHUB_OUTPUT
fi
lander-coverage-run:
needs: [ts-only]
if: needs.ts-only.outputs.skip_rust != 'true'
runs-on: depot-ubuntu-24.04-8
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: dtolnay/rust-toolchain@stable
- name: Free disk space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Setup sccache
uses: ./.github/actions/setup-sccache
- name: Install cargo-llvm-cov
run: |
cargo install cargo-llvm-cov@0.5.39 --locked
rustup component add llvm-tools-preview
- name: Generate coverage for lander package
run: cargo llvm-cov --package lander --features aleo,integration_test --json --output-path coverage.json
working-directory: ./rust/main
- name: Check coverage threshold
run: |
COVERAGE=$(cat coverage.json | jq -r '.data[0].totals.lines.percent')
echo "Coverage: $COVERAGE%"
if (( $(echo "$COVERAGE < $MIN_LANDERCOVERAGE_PERCENTAGE" | bc -l) )); then
echo "Code coverage is below minimum threshold of $MIN_LANDERCOVERAGE_PERCENTAGE percent"
exit 1
fi
working-directory: ./rust/main
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: coverage.json
flags: ./rust/main/lander
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
test-rs-run:
needs: [ts-only]
if: needs.ts-only.outputs.skip_rust != 'true'
runs-on: depot-ubuntu-24.04-8
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: dtolnay/rust-toolchain@stable
- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libudev-dev
- name: Free disk space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Install mold linker
uses: rui314/setup-mold@v1
- name: Setup sccache
uses: ./.github/actions/setup-sccache
- name: Run tests for main workspace
run: cargo test --all-targets --features aleo,integration_test
working-directory: ./rust/main
- name: Run tests for sealevel workspace
run: cargo test
working-directory: ./rust/sealevel
lint-rs-run:
needs: [ts-only]
if: needs.ts-only.outputs.skip_rust != 'true'
runs-on: depot-ubuntu-24.04-8
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
target: wasm32-unknown-unknown
- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libudev-dev
- name: Free disk space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Setup sccache
uses: ./.github/actions/setup-sccache
- name: Check for main workspace
run: cargo check --release --all-features --all-targets
working-directory: ./rust/main
- name: Check for sealevel workspace
run: cargo check --release --all-features --all-targets
working-directory: ./rust/sealevel
- name: Check Cargo.lock files are up to date
run: |
CHANGES=$(git status -s --ignore-submodules -- rust/main/Cargo.lock rust/sealevel/Cargo.lock)
if [[ ! -z $CHANGES ]]; then
echo "❌ Cargo.lock files are out of sync with Cargo.toml files"
echo ""
echo "$CHANGES" | while read status file; do
echo "::group::$file changes"
git diff "$file"
echo "::endgroup::"
if [[ "$file" == *"main"* ]]; then
echo "- $file needs to be updated"
echo " Run: cd rust/main && cargo build"
elif [[ "$file" == *"sealevel"* ]]; then
echo "- $file needs to be updated"
echo " Run: cd rust/sealevel && cargo build"
fi
done
echo ""
echo "Please commit the updated Cargo.lock file(s)"
exit 1
fi
- name: Rustfmt for main workspace
run: cargo fmt --all -- --check
working-directory: ./rust/main
- name: Rustfmt for sealevel workspace
run: cargo fmt --all --check
working-directory: ./rust/sealevel
- name: Clippy for main workspace
run: cargo clippy --features aleo,integration_test -- -D warnings
working-directory: ./rust/main
- name: Clippy for sealevel workspace
run: cargo clippy -- -D warnings
working-directory: ./rust/sealevel
- name: Setup WASM for main workspace
run: rustup target add wasm32-unknown-unknown
working-directory: ./rust/main
- name: Check WASM for hyperlane-core
run: cargo check --release -p hyperlane-core --features=strum,test-utils --target wasm32-unknown-unknown
working-directory: ./rust/main
# Wrapper jobs for required status checks (report success when skipped)
lander-coverage:
runs-on: ubuntu-latest
needs: [lander-coverage-run]
if: always()
steps:
- uses: actions/checkout@v6
- name: Check lander-coverage status
uses: ./.github/actions/check-job-status
with:
job_name: 'Lander Coverage'
result: ${{ needs.lander-coverage-run.result }}
test-rs:
runs-on: ubuntu-latest
needs: [test-rs-run]
if: always()
steps:
- uses: actions/checkout@v6
- name: Check test-rs status
uses: ./.github/actions/check-job-status
with:
job_name: 'Rust Tests'
result: ${{ needs.test-rs-run.result }}
lint-rs:
runs-on: ubuntu-latest
needs: [lint-rs-run]
if: always()
steps:
- uses: actions/checkout@v6
- name: Check lint-rs status
uses: ./.github/actions/check-job-status
with:
job_name: 'Rust Lint'
result: ${{ needs.lint-rs-run.result }}