-
Notifications
You must be signed in to change notification settings - Fork 0
151 lines (140 loc) · 4.57 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
name: CI
on:
push:
branches: [main]
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
accept:
name: Accept
runs-on: ubuntu-latest
needs: [test, feature-checks, clippy, docs, fmt]
steps:
- name: Accept
run: "true"
test:
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
rust: ["stable", "beta", "nightly", "1.65"] # MSRV
flags: ["--no-default-features", "", "--all-features"]
exclude:
# Skip because some features have higher MSRV.
- rust: "1.65" # MSRV
flags: "--all-features"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- name: exclude nightly features
if: ${{ matrix.rust }} != 'nightly'
run: |
sed -i 's/nightly = \[\]//g' Cargo.toml
sed -i 's/generic_const_exprs = \["nightly"\]//g' Cargo.toml
- uses: Swatinem/rust-cache@v2
# Only run tests on latest stable and above
- name: Check
if: ${{ matrix.rust == '1.65' }} # MSRV
run: cargo check ${{ matrix.flags }}
# Cargo doc test is not included in `--all-targets` so we call it separately.
# See <https://github.com/rust-lang/cargo/issues/6669>
# Cargo doc test also doesn't support `--no-run`, so we run it but
# have it just print `--help`.
- name: Build tests
if: ${{ matrix.rust != '1.65' }} # MSRV
run: |
cargo test --workspace ${{ matrix.flags }} --all-targets --no-run
cargo test --workspace ${{ matrix.flags }} --doc -- --help
- name: Run tests
if: ${{ matrix.rust != '1.65' }} # MSRV
run: |
cargo test --workspace ${{ matrix.flags }} --all-targets -- --nocapture
cargo test --workspace ${{ matrix.flags }} --doc -- --nocapture
feature-checks:
name: Feature checks
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/install-action@cargo-hack
- uses: Swatinem/rust-cache@v2
- name: cargo hack
run: |
cargo hack check \
--feature-powerset --exclude-features nightly,generic_const_exprs \
--depth 1
codecov:
# See <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/source-based-code-coverage.html>
name: Coverage
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: llvm-tools-preview
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@cargo-llvm-cov
- name: Generate code coverage
env:
# Covered tests are slower, so reduce the test load. (We also shouldn't
# depend too much on case generation for coverage).
PROPTEST_CASES: 5
run: |
# Generate profiles, but do not merge them
cargo llvm-cov --no-report --workspace --all-features --all-targets -- --nocapture
cargo llvm-cov --no-report --workspace --all-features --doc -- --nocapture
- name: Merge profiles
run: cargo llvm-cov --no-run --lcov --output-path lcov.info
- name: Submit to codecov.io
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }} # Optional for public repos
files: lcov.info
fail_ci_if_error: true
verbose: true
clippy:
name: Clippy
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@clippy
- run: cargo clippy --workspace --all-features
env:
RUSTFLAGS: -Dwarnings
docs:
name: Docs
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: rust-docs
- run: cargo doc --workspace --all-features --no-deps --document-private-items
env:
RUSTDOCFLAGS: "--cfg doc_cfg -D warnings"
fmt:
name: Fmt
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- run: cargo fmt --all --check
cargo-deny:
name: Cargo deny check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v2
with:
command: check all