Files

216 lines
7.7 KiB
YAML

on:
pull_request:
merge_group:
types: [ checks_requested ]
push:
branches: [ master ]
name: Code checks
concurrency:
group: ${{ github.workflow }}@${{ github.ref }}
cancel-in-progress: true
jobs:
formatting:
name: Check formatting
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2 # Version 4.2.2
- name: Install nightly toolchain
uses: actions-rs/toolchain@88dc2356392166efad76775c878094f4e83ff746 # Version 1.0.6
with:
# The same version must be used in the `.pre-commit-config.yaml` file
toolchain: nightly-2026-07-05
profile: minimal
components: rustfmt
override: true
- name: Run cargo fmt
uses: actions-rs/cargo@9e120dd99b0fbad1c065f686657e914e76bd7b72 # Version 1.0.1
with:
command: fmt
args: --all --check
- name: Install taplo CLI
run: cargo install taplo-cli --locked --version 0.10.0
- name: Run taplo lint
run: taplo lint
- name: Run taplo fmt
run: taplo fmt --check
cargo-deny:
name: Check cargo-deny rules
# `cargo-deny` action is only supported on Linux
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2 # Version 4.2.2
- name: Install Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
# `cargo-deny`'s action is compiled and run using `musl` but we generally use `gnu` in our local machines.
# Thus, results may differ from local runs.
# To avoid this, we install and run `cargo-deny` manually.
- name: Install cargo-deny
run: cargo install cargo-deny --locked --version 0.19.0
- name: Run cargo-deny
run: CARGO_BUILD_WARNINGS=deny cargo-deny --locked --all-features check --hide-inclusion-graph -c .cargo-deny.toml --show-stats
workspace-deps:
name: Check for correctly declared dependencies in the workspace
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2 # Version 4.2.2
- name: Run workspace dependency policies check
run: scripts/check-workspace-dependency-policies.sh
unused-deps:
name: Check for unused dependencies
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macos-latest ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2 # Version 4.2.2
- name: Install cargo-machete
uses: bnjbvr/cargo-machete@9f0895d780783da0089162cae9668f6ec6e896c4 # Version 0.8.0
# This step also runs `cargo-machete` without the `--with-metadata` flag, which can trigger more false positives.
# We ignore errors and run `cargo-machete` with the `--with-metadata` flag for the actual result.
continue-on-error: true
- name: Run cargo-machete
run: cargo machete --with-metadata
lints:
name: Check Rust lints
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macos-latest ]
runs-on: ${{ matrix.os }}
env:
CARGO_BUILD_WARNINGS: deny
steps:
- name: Checkout repository
uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2 # Version 4.2.2
- name: Set up Cargo cache
uses: ./.github/actions/setup-cargo-cache
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
key-prefix: code-check/lints/${{ matrix.os }}
- name: Run cargo clippy on workspace
uses: actions-rs/cargo@9e120dd99b0fbad1c065f686657e914e76bd7b72 # Version 1.0.1
with:
command: clippy
args: --locked --workspace --all-targets --all-features
- name: Update Cargo cache
if: success() || failure()
uses: ./.github/actions/update-cargo-cache
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
key-prefix: code-check/lints/${{ matrix.os }}
tests:
name: Run test suite
if: >-
${{
github.event_name == 'pull_request' &&
!startsWith(github.event.pull_request.title, '[WIP]') &&
!contains(github.event.pull_request.labels.*.name, 'DO NOT MERGE')
}}
strategy:
fail-fast: false # all OSes should be tested even if one fails (default: true)
matrix:
os:
# Using self-hosted runners because we were running out of memory on GitHub-hosted runners
- [ self-hosted, Linux ]
- [ self-hosted, macOS ]
runs-on: ${{ matrix.os }}
steps:
- name: Disable rustup override
run: rustup override unset || true
- name: Checkout repository
uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2 # Version 4.2.2
# Prune before any builds.
- name: Prune disk space (cache-aware, self-hosted)
uses: ./.github/actions/prune-disk-space
- name: Run the node binary with the testing feature to check the one-node config files validity
uses: actions-rs/cargo@9e120dd99b0fbad1c065f686657e914e76bd7b72 # Version 1.0.1
with:
command: run
args: >-
--locked -p logos-blockchain-node --features testing
-- nodes/node/standalone-node-config.yaml --check-config --deployment nodes/node/standalone-deployment-config.yaml
- name: Install cargo-nextest
if: ${{ !cancelled() }}
uses: taiki-e/install-action@13608cbb45b01feb47ef444ab1a42dc41ad56f1a # Version 2.79.11
with:
tool: cargo-nextest
- name: Cargo test all except end-to-end integration tests
timeout-minutes: 90
uses: actions-rs/cargo@9e120dd99b0fbad1c065f686657e914e76bd7b72 # Version 1.0.1
with:
command: nextest
# - We don't test benches as they take 6h+, leading to a timeout
# - We also do not test end-to-end integration tests here as those are run in a dedicated step below
args: >-
run --workspace --locked --lib --bins --examples --tests --retries 2
--all-features --no-fail-fast --exclude logos-blockchain-tests
- name: Clean up build artifacts
if: success() || failure()
uses: actions-rs/cargo@9e120dd99b0fbad1c065f686657e914e76bd7b72 # Version 1.0.1
with:
command: clean
- name: Upload integration tests results
uses: actions/upload-artifact@6027e3dd177782cd8ab9af838c04fd81a07f1d47 # Version 4.6.2
if: failure()
with:
name: integration-test-artifacts-${{ runner.os }}-${{ github.sha }}
include-hidden-files: true
path: tests/.run_*
# Stable required check for nextest unit tests.
#
# On pull requests and pushes to master, this job succeeds only when both
# self-hosted nextest unit tests matrix jobs succeeded.
#
# On merge_group, the real nextest unit tests matrix is skipped and this lightweight
# check succeeds because nextest unit tests was already required before queue admission.
nextest-unit-tests-result:
name: Nextest unit tests result
needs: tests
if: ${{ always() && github.event_name != 'push' }}
runs-on: ubuntu-latest
steps:
- name: Check nextest unit tests result
env:
EVENT_NAME: ${{ github.event_name }}
TESTS_RESULT: ${{ needs.tests.result }}
run: |
if [ "$EVENT_NAME" = "merge_group" ]; then
echo "Nextest unit tests already passed before merge-queue admission"
exit 0
fi
if [ "$TESTS_RESULT" = "success" ]; then
exit 0
fi
echo "Nextest unit tests did not pass: $TESTS_RESULT"
exit 1