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