• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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