-
Notifications
You must be signed in to change notification settings - Fork 24
151 lines (136 loc) · 4.56 KB
/
test.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: test
# This is the main CI workflow that runs the test suite on all pushes to main
# and all pull requests. It runs the following jobs:
# - required: runs the test suite on ubuntu with stable and beta rust
# toolchains.
# - os-check: runs the test suite on mac and windows.
# - coverage: runs the test suite and collects coverage information.
# See `check.yml` for information about how the concurrency cancellation and
# workflow triggering works.
permissions:
contents: read
on:
push:
branches: [main, release/*]
paths-ignore:
- "**.md"
- "**.adoc"
pull_request:
paths-ignore:
- "**.md"
- "**.adoc"
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
required:
runs-on: ubuntu-latest
name: ubuntu / ${{ matrix.toolchain }}
strategy:
matrix:
# Run on stable and beta to ensure that tests won't break on the next
# version of the rust toolchain.
toolchain: [stable, beta]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install rust ${{ matrix.toolchain }}
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
rustflags: ""
- name: "Install nextest"
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest
- name: Cargo generate-lockfile
# Enable this ci template to run regardless of whether the lockfile is
# checked in or not.
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
# https://twitter.com/jonhoo/status/1571290371124260865
- name: Run unit tests
run: cargo nextest run --locked --features std --all-targets
# https://github.com/rust-lang/cargo/issues/6669
- name: Run doc tests
run: cargo test --locked --features std --doc
os-check:
# Run cargo test on MacOS and Windows.
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }} / stable
strategy:
fail-fast: false
matrix:
os: [macos-latest]
# Windows fails because of `stylus-proc`.
# os: [macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
rustflags: ""
- name: "Install nextest"
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest
- name: Cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- name: Run unit tests
run: cargo nextest run --locked --features std --all-targets
coverage:
# Use llvm-cov to build and collect coverage and outputs in a format that
# is compatible with codecov.io.
#
# Note that codecov as of v4 requires that CODECOV_TOKEN from
#
# https://app.codecov.io/gh/<user or org>/<project>/settings
#
# is set in two places on your repo:
#
# - https://github.com/jonhoo/guardian/settings/secrets/actions
# - https://github.com/jonhoo/guardian/settings/secrets/dependabot
#
# (the former is needed for codecov uploads to work with Dependabot PRs)
#
# PRs coming from forks of your repo will not have access to the token, but
# for those, codecov allows uploading coverage reports without a token.
# it's all a little weird and inconvenient. see
#
# https://github.com/codecov/feedback/issues/112
#
# for lots of more discussion.
runs-on: ubuntu-latest
name: ubuntu / stable / coverage
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
components: llvm-tools-preview
rustflags: ""
- name: Cargo install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: Cargo generate-lockfile
if: hashFiles('Cargo.lock') == ''
run: cargo generate-lockfile
- name: Cargo llvm-cov
run: cargo llvm-cov --locked --features std --lcov --output-path lcov.info
- name: Record Rust version
run: echo "RUST=$(rustc --version)" >> "$GITHUB_ENV"
- name: Upload to codecov.io
uses: codecov/codecov-action@v5
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
env_vars: OS,RUST