From 0320f823eaf913ac827bd8aab92d9ac7b6c3d523 Mon Sep 17 00:00:00 2001 From: BenjaminBrienen Date: Mon, 24 Feb 2025 00:36:19 +0100 Subject: [PATCH] ci --- .github/workflows/ci.yaml | 234 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 36259c7..095a3b0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -3,6 +3,11 @@ on: pull_request: push: branches: ["master", "staging", "trying"] + merge_group: + +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: ${{github.event_name == 'pull_request'}} env: CARGO_INCREMENTAL: 0 @@ -11,6 +16,9 @@ env: RUST_BACKTRACE: short RUSTFLAGS: -D warnings RUSTUP_MAX_RETRIES: 10 + CARGO_TERM_COLOR: always + # If nightly is breaking CI, modify this variable to target a specific nightly version. + NIGHTLY_TOOLCHAIN: nightly jobs: test: @@ -30,3 +38,229 @@ jobs: - run: cargo run -p xtask -- ci env: CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} + + build: + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-build-stable-${{ hashFiles('**/Cargo.toml') }} + - uses: dtolnay/rust-toolchain@stable + - name: Build & run tests + run: cargo test --workspace --lib --bins --tests --benches + env: + CARGO_INCREMENTAL: 0 + RUSTFLAGS: "-C debuginfo=0 -D warnings" + + lint: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-ci-${{ hashFiles('**/Cargo.toml') }} + - uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + - name: Check formatting + run: cargo fmt --all -- --check + - name: Clippy + run: cargo clippy --workspace --all-targets --all-features -- -Dwarnings + + miri: + # Explicitly use macOS 14 to take advantage of M1 chip. + runs-on: macos-14 + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-miri-${{ hashFiles('**/Cargo.toml') }} + - uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ env.NIGHTLY_TOOLCHAIN }} + components: miri + - name: CI job + run: cargo miri test + env: + RUSTFLAGS: -Zrandomize-layout + + check-compiles: + runs-on: ubuntu-latest + timeout-minutes: 30 + needs: lint + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-check-compiles-${{ hashFiles('**/Cargo.toml') }} + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + - name: Check Compile + run: | + cargo test --target-dir ../../../target + # cargo check --benches --target-dir ../target --manifest-path ./benches/Cargo.toml + cargo check --workspace --examples + cargo check --workspace + cargo check --workspace --tests + + check-compiles-no-default-features: + runs-on: ubuntu-latest + timeout-minutes: 30 + needs: lint + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-check-compiles-no-std-${{ hashFiles('**/Cargo.toml') }} + - uses: dtolnay/rust-toolchain@stable + with: + targets: x86_64-unknown-none + - name: Check Compile + run: cargo check --no-default-features + + markdownlint: + runs-on: ubuntu-latest + timeout-minutes: 30 + if: always() + steps: + - uses: actions/checkout@v4 + with: + # Full git history is needed to get a proper list of changed files within `super-linter` + fetch-depth: 0 + - name: Run Markdown Lint + uses: docker://ghcr.io/github/super-linter:slim-v4 + env: + MULTI_STATUS: false + VALIDATE_ALL_CODEBASE: false + VALIDATE_MARKDOWN: true + DEFAULT_BRANCH: main + + toml: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - name: Install taplo + run: cargo install taplo-cli --locked + - name: Run Taplo + id: taplo + run: taplo fmt --check --diff + - name: Taplo info + if: failure() + run: | + echo 'To fix toml fmt, please run `taplo fmt`.' + echo 'To check for a diff, run `taplo fmt --check --diff`.' + echo 'You can find taplo here: https://taplo.tamasfe.dev/.' + echo 'Also use the `Even Better Toml` extension.' + echo 'You can find the extension here: https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml' + + typos: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - name: Check for typos + uses: crate-ci/typos@v1.29.7 + - name: Typos info + if: failure() + run: | + echo 'To fix typos, please run `typos -w`' + echo 'To check for a diff, run `typos`' + echo 'You can find typos here: https://crates.io/crates/typos' + echo 'if you use VS Code, you can also install `Typos Spell Checker' + echo 'You can find the extension here: https://marketplace.visualstudio.com/items?itemName=tekumara.typos-vscode' + + check-doc: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-check-doc-${{ hashFiles('**/Cargo.toml') }} + - uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ env.NIGHTLY_TOOLCHAIN }} + - name: Build doc + run: cargo doc --workspace --all-features --no-deps --document-private-items --keep-going + env: + CARGO_INCREMENTAL: 0 + RUSTFLAGS: "-C debuginfo=0 --cfg docsrs_dep" + - name: Check doc + run: cargo test --workspace --doc + env: + CARGO_INCREMENTAL: 0 + RUSTFLAGS: "-C debuginfo=0 --cfg docsrs_dep" + - name: Installs cargo-deadlinks + run: cargo install --force cargo-deadlinks + - name: Checks dead links + run: cargo deadlinks --dir target/doc + continue-on-error: true + + check-unused-dependencies: + if: ${{ github.event_name == 'pull_request' }} + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-check-unused-dependencies-${{ hashFiles('**/Cargo.toml') }} + - uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ env.NIGHTLY_TOOLCHAIN }} + - name: Installs cargo-udeps + run: cargo install --force cargo-udeps + - name: Run cargo udeps + run: cargo udeps