1name: CI 2 3on: 4 push: 5 pull_request: 6 workflow_dispatch: 7 schedule: [cron: "40 1 * * *"] 8 9permissions: 10 contents: read 11 12env: 13 RUSTFLAGS: -Dwarnings 14 15jobs: 16 pre_ci: 17 uses: dtolnay/.github/.github/workflows/pre_ci.yml@master 18 19 test: 20 name: Rust ${{matrix.rust}} 21 needs: pre_ci 22 if: needs.pre_ci.outputs.continue 23 runs-on: ubuntu-latest 24 strategy: 25 fail-fast: false 26 matrix: 27 rust: [nightly, stable, beta, 1.56.0] 28 timeout-minutes: 45 29 steps: 30 - uses: actions/checkout@v4 31 - uses: dtolnay/rust-toolchain@master 32 with: 33 toolchain: ${{matrix.rust}} 34 components: rust-src 35 - name: Enable type layout randomization 36 run: echo RUSTFLAGS=${RUSTFLAGS}\ -Zrandomize-layout >> $GITHUB_ENV 37 if: matrix.rust == 'nightly' 38 - run: cargo test 39 - run: cargo run --manifest-path benches/Cargo.toml 40 41 minimal: 42 name: Minimal versions 43 needs: pre_ci 44 if: needs.pre_ci.outputs.continue 45 runs-on: ubuntu-latest 46 timeout-minutes: 45 47 steps: 48 - uses: actions/checkout@v4 49 - uses: dtolnay/rust-toolchain@nightly 50 - run: cargo generate-lockfile -Z minimal-versions 51 - run: cargo check --locked 52 53 doc: 54 name: Documentation 55 needs: pre_ci 56 if: needs.pre_ci.outputs.continue 57 runs-on: ubuntu-latest 58 timeout-minutes: 45 59 env: 60 RUSTDOCFLAGS: -Dwarnings 61 steps: 62 - uses: actions/checkout@v4 63 - uses: dtolnay/rust-toolchain@nightly 64 with: 65 components: rust-src 66 - uses: dtolnay/install@cargo-docs-rs 67 - run: cargo docs-rs 68 69 clippy: 70 name: Clippy 71 runs-on: ubuntu-latest 72 if: github.event_name != 'pull_request' 73 timeout-minutes: 45 74 steps: 75 - uses: actions/checkout@v4 76 - uses: dtolnay/rust-toolchain@nightly 77 with: 78 components: clippy, rust-src 79 - run: cargo clippy --tests --workspace -- -Dclippy::all -Dclippy::pedantic 80 81 miri: 82 name: Miri 83 needs: pre_ci 84 if: needs.pre_ci.outputs.continue 85 runs-on: ubuntu-latest 86 timeout-minutes: 45 87 steps: 88 - uses: actions/checkout@v4 89 - uses: dtolnay/rust-toolchain@miri 90 - run: cargo miri setup 91 - run: cargo miri test 92 env: 93 MIRIFLAGS: -Zmiri-strict-provenance 94 95 outdated: 96 name: Outdated 97 runs-on: ubuntu-latest 98 if: github.event_name != 'pull_request' 99 timeout-minutes: 45 100 steps: 101 - uses: actions/checkout@v4 102 - uses: dtolnay/install@cargo-outdated 103 - run: cargo outdated --workspace --exit-code 1 104