name: CI
on:
pull_request:
merge_group: { types: [checks_requested] }
push: { branches: [main] }
schedule: [cron: "40 1 */2 * *"]
permissions:
contents: read
jobs:
read_msrv:
name: Read MSRV
uses: actions-rust-lang/msrv/.github/workflows/msrv.yml@v0.1.0
test:
name: Test Rust (${{ matrix.rust.name }})
needs: read_msrv
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
rust:
- { name: nightly, toolchain: nightly, expect_failure: true }
- { name: beta, toolchain: beta, expect_failure: true }
- { name: stable, toolchain: stable, expect_failure: true }
- { name: msrv, toolchain: "${{ needs.read_msrv.outputs.msrv }}", expect_failure: false }
steps:
- uses: actions/checkout@v4
- name: Install Rust (${{ matrix.rust.toolchain }})
uses: actions-rust-lang/setup-rust-toolchain@v1.9.0
with:
toolchain: ${{ matrix.rust.toolchain }}
- name: Enable type layout randomization
run: echo RUSTFLAGS=${RUSTFLAGS}\ -Zrandomize-layout >> $GITHUB_ENV
if: matrix.rust.toolchain == 'nightly'
- run: |
cargo update -p=trybuild --precise=1.0.89
- name: Test
shell: bash
env:
EXPECT_FAILURE: ${{ matrix.rust.expect_failure }}
run: |
set +e
cargo test --test=msrv
xc="$?"
echo "exit code = $xc"
if [[ "$EXPECT_FAILURE" == "true" ]]; then
if [[ "$xc" == "0" ]]; then
echo "Expected failure, got exit code = $xc"
exit 1
fi
else
if [[ "$xc" != "0" ]]; then
echo "Expected success, got exit code = $xc"
exit 1
fi
fi
doc:
name: Documentation
runs-on: ubuntu-latest
timeout-minutes: 45
env:
RUSTDOCFLAGS: -Dwarnings
steps:
- uses: actions/checkout@v4
- name: Install Rust (nightly)
uses: actions-rust-lang/setup-rust-toolchain@v1.9.0
with:
toolchain: nightly
- uses: dtolnay/install@cargo-docs-rs
- run: cargo docs-rs
clippy:
name: Clippy
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
- name: Install Rust (stable)
uses: actions-rust-lang/setup-rust-toolchain@v1.9.0
with:
components: clippy
- run: cargo clippy --tests -- -Dclippy::todo