diff --git a/.github/workflows/rust-compile.yml b/.github/workflows/rust-compile.yml index f3a5173..8a3746a 100644 --- a/.github/workflows/rust-compile.yml +++ b/.github/workflows/rust-compile.yml @@ -1,72 +1,75 @@ on: - push: - branches: + push: + branches: - "main" - pull_request: - + pull_request: + name: Rust - + concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + env: - RUST_LOG: info - RUST_BACKTRACE: 1 - RUSTFLAGS: "-D warnings" - CARGO_TERM_COLOR: always - + RUST_LOG: info + RUST_BACKTRACE: 1 + RUSTFLAGS: "-D warnings" + CARGO_TERM_COLOR: always + jobs: - check-rustdoc-links: - name: Check intra-doc links - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions-rust-lang/setup-rust-toolchain@v1 - - run: | - for package in $(cargo metadata --no-deps --format-version=1 | jq -r '.packages[] | .name'); do - cargo rustdoc -p "$package" --all-features -- -D warnings -W unreachable-pub - done - - format_and_lint: - name: Format and Lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - components: clippy, rustfmt - - name: Run rustfmt - uses: actions-rust-lang/rustfmt@v1 - - name: Run clippy - run: cargo clippy --all-targets - - test: - name: Test - runs-on: ubuntu-latest - needs: [ format_and_lint ] - steps: - - name: Checkout source code - uses: actions/checkout@v4 + check-rustdoc-links: + name: Check intra-doc links + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + - shell: bash + run: > + ./intra-doc-links.bash + format_and_lint: + name: Format and Lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + components: clippy, rustfmt + - name: Run rustfmt + uses: actions-rust-lang/rustfmt@v1 + - name: Run clippy + run: cargo clippy --all-targets + + test: + name: Test + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + needs: [format_and_lint] + steps: + - name: Checkout source code + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + components: rustfmt + cache: false + + - uses: Swatinem/rust-cache@v2 + + - name: Install cargo nextest + uses: taiki-e/install-action@v2 + with: + tool: cargo-nextest - - name: Install Rust toolchain - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - components: rustfmt - cache: false + - name: Run tests + run: > + cargo nextest run --workspace - - name: Install cargo nextest - uses: taiki-e/install-action@v2 - with: - tool: cargo-nextest - - - name: Run tests - run: > - cargo nextest run --workspace - - - name: Run doctests - run: > - cargo test --doc - \ No newline at end of file + - name: Run doctests + run: > + cargo test --doc diff --git a/intra-doc-links.bash b/intra-doc-links.bash new file mode 100755 index 0000000..4b4b687 --- /dev/null +++ b/intra-doc-links.bash @@ -0,0 +1,22 @@ +#!/bin/bash +cargo metadata --no-deps --format-version=1 \ +| jq -r '.packages[] | .name as $pname | .targets[] | [$pname, .kind[], .name] | @tsv' \ +| while IFS=$'\t' read -r package kind name; do + case "$kind" in + lib) + cargo rustdoc -p "$package" --lib --all-features -- -D warnings -W unreachable-pub + ;; + bin) + cargo rustdoc -p "$package" --bin "$name" --all-features -- -D warnings -W unreachable-pub + ;; + example) + cargo rustdoc -p "$package" --example "$name" --all-features -- -D warnings -W unreachable-pub + ;; + test) + cargo rustdoc -p "$package" --test "$name" --all-features -- -D warnings -W unreachable-pub + ;; + bench) + cargo rustdoc -p "$package" --bench "$name" --all-features -- -D warnings -W unreachable-pub + ;; + esac +done