refactor(cli): merge argument parsing and command execution #6080
Workflow file for this run
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: Test | |
env: | |
CI: true | |
RUSTFLAGS: "-D warnings -D unreachable-pub --cfg tokio_unstable" | |
# This must match the entry in rust-toolchain.toml at the repository root | |
RUSTUP_TOOLCHAIN: "1.81.0" | |
on: | |
pull_request: | |
merge_group: | |
push: | |
branches: | |
- "main" | |
workflow_dispatch: | |
jobs: | |
run_checker: | |
uses: ./.github/workflows/reusable-run-checker.yml | |
protos-compiled: | |
runs-on: ubuntu-22.04 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install `buf` protobuf manager | |
uses: bufbuild/buf-setup-action@v1 | |
with: | |
version: "1.32.0" | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "buildjet" | |
- name: Install just | |
uses: taiki-e/install-action@just | |
- name: Check if protobuf specs compile to commited Rust sources | |
run: | | |
just compile-protos | |
modified=$(git status --porcelain) | |
if [[ -n "$modified" ]]; then | |
echo "ERROR: protobuf specs are out of sync with the commited Rust sources" | |
echo "Recompile locally with \`just compile-protos\` and commit to the repository." | |
echo "Files that reported differences:" | |
echo "$modified" | |
exit 1 | |
fi | |
solidity-contracts-compiled: | |
runs-on: ubuntu-22.04 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "buildjet" | |
- name: Install just | |
uses: taiki-e/install-action@just | |
- name: Check if protobuf specs compile to commited Rust sources | |
run: | | |
just compile-solidity-contracts | |
modified=$(git status --porcelain) | |
if [[ -n "$modified" ]]; then | |
echo "ERROR: solidity contracts are out of sync with the commited Rust sources" | |
echo "Recompile locally with \`just compile-solidity-contracts\` and commit to the repository." | |
echo "Files that reported differences:" | |
echo "$modified" | |
exit 1 | |
fi | |
compiles: | |
runs-on: buildjet-4vcpu-ubuntu-2204 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
- uses: taiki-e/[email protected] | |
with: | |
tool: [email protected] | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "buildjet" | |
- uses: arduino/setup-protoc@v3 | |
with: | |
version: "24.4" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Check that each crate compiles individually (circumventing workspace wide dependency resolution) | |
run: | | |
: # exclude all lints because cargo-hack ignores default-members and operates on all workspace members | |
cargo hack check --workspace --all-targets --all-features \ | |
--exclude tracing_debug_field | |
lockfile: | |
runs-on: ubuntu-22.04 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "github" | |
- name: Check that the lockfile is updated | |
run: cargo fetch --locked | |
audit: | |
runs-on: ubuntu-22.04 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_audit == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
- uses: rustsec/[email protected] | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
rust: | |
runs-on: buildjet-8vcpu-ubuntu-2204 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "buildjet" | |
- name: Install nextest | |
uses: taiki-e/install-action@nextest | |
- uses: arduino/setup-protoc@v3 | |
with: | |
version: "24.4" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build tests | |
run: | | |
cargo nextest archive --archive-file=archive.tar.zst --release \ | |
--all-features \ | |
--all-targets | |
- name: Run tests | |
timeout-minutes: 20 | |
run: | | |
cargo nextest run --archive-file=archive.tar.zst | |
rust-ethereum: | |
runs-on: buildjet-8vcpu-ubuntu-2204 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "buildjet" | |
- name: Install nextest | |
uses: taiki-e/install-action@nextest | |
- uses: arduino/setup-protoc@v3 | |
with: | |
version: "24.4" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
- name: Run tests | |
timeout-minutes: 20 | |
run: | | |
cargo nextest run --package astria-bridge-withdrawer -- --include-ignored | |
doctest: | |
runs-on: buildjet-8vcpu-ubuntu-2204 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "buildjet" | |
- uses: arduino/setup-protoc@v3 | |
with: | |
version: "24.4" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: run doctests | |
run: cargo test --doc --all-features | |
clippy: | |
runs-on: buildjet-8vcpu-ubuntu-2204 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' && needs.run_checker.outputs.run_lint_rust == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ env.RUSTUP_TOOLCHAIN }} | |
components: clippy | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "buildjet" | |
- uses: arduino/setup-protoc@v3 | |
with: | |
version: "24.4" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: run pedantic clippy on workspace crates | |
run: | | |
cargo clippy --all-targets --all-features \ | |
-- --warn clippy::pedantic --warn clippy::arithmetic-side-effects \ | |
--warn clippy::allow_attributes --warn clippy::allow_attributes_without_reason \ | |
--deny warnings | |
- name: run pedantic clippy on tools/protobuf-compiler | |
run: | | |
cargo clippy --manifest-path tools/protobuf-compiler/Cargo.toml \ | |
--all-targets --all-features \ | |
-- --warn clippy::pedantic --deny warnings | |
custom-lints: | |
runs-on: buildjet-8vcpu-ubuntu-2204 | |
needs: run_checker | |
if: needs.run_checker.outputs.run_tests == 'true' && needs.run_checker.outputs.run_lint_rust == 'true' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
# This has to match `rust-toolchain` in the rust-toolchain file of the dylint lints | |
toolchain: nightly-2024-09-05 | |
components: "clippy, llvm-tools-preview, rustc-dev, rust-src" | |
- uses: Swatinem/[email protected] | |
with: | |
cache-provider: "buildjet" | |
- name: install cargo-dylint and dylint-link | |
run: cargo install [email protected] [email protected] --locked | |
- uses: arduino/setup-protoc@v3 | |
with: | |
version: "24.4" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: run clippy against custom lints | |
run: | | |
: # list all lint packages here to have clippy explicitly test them | |
: # uses the same nightly installed above to work around the entry in rust-toolchain.toml | |
cargo +nightly-2024-09-05 clippy --all-targets --all-features \ | |
-p tracing_debug_field \ | |
-- --warn clippy::pedantic --deny warnings | |
- name: run dylint clippy on workspace crates | |
env: | |
# set the dylint driver path to the target/ directory so that it's hopefully cached by rust-cache | |
DYLINT_DRIVER_PATH: ${{ github.workspace }}/target/dylint_drivers/ | |
DYLINT_RUSTFLAGS: "-D warnings" | |
run: | | |
mkdir -p "$DYLINT_DRIVER_PATH" | |
cargo dylint --all --workspace | |
test: | |
if: ${{ always() && !cancelled() }} | |
needs: [compiles, protos-compiled, solidity-contracts-compiled, rust, doctest, clippy, lockfile, custom-lints] | |
uses: ./.github/workflows/reusable-success.yml | |
with: | |
success: ${{ !contains(needs.*.result, 'failure') }} |