-
Notifications
You must be signed in to change notification settings - Fork 252
265 lines (225 loc) · 7.46 KB
/
ci.yaml
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
name: CI
on:
push:
branches:
- main
- release/*
pull_request:
branches:
- main
- release/*
jobs:
lint:
runs-on: ubuntu-22.04
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-lint-${{ hashFiles('**/Cargo.lock') }}
- name: Setup | Disable rustup self-update
# workaround for: https://github.com/rust-lang/rustup/issues/3709
run: |
rustup set auto-self-update disable
- name: Setup | Toolchain (clippy)
run: |
rustup toolchain install stable --component clippy
rustup default stable
- name: Build | Clippy
run: |
cargo clippy --all-targets --all-features -- -D warnings
- name: Build | Rustfmt
run: cargo fmt -- --check
docs:
uses: ./.github/workflows/docs.yaml
check:
runs-on: ubuntu-22.04
strategy:
matrix:
rust:
- stable
- 1.77.0 # MSRV
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Cache Cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-check-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }}
- name: Setup | Disable rustup self-update
# workaround for: https://github.com/rust-lang/rustup/issues/3709
run: |
rustup set auto-self-update disable
- name: Setup | Rust
run: |
rustup toolchain install ${{ matrix.rust }}
rustup default ${{ matrix.rust }}
- name: Build | Check
run: cargo check --all
- name: Setup | binstall
run: |
curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
- name: Setup | check-all-features
run: |
cargo binstall -y cargo-all-features
- name: Build | Check all features
run: |
cargo check-all-features
test:
needs: check # Ensure check is run first.
strategy:
fail-fast: false
matrix:
os: [ ubuntu-22.04, macos-14, windows-2022 ]
include:
- os: ubuntu-22.04
binPath: target/debug/trunk
install: |
sudo apt install -y libssl-dev
- os: macos-14
binPath: target/debug/trunk
- os: windows-2022
binPath: target/debug/trunk.exe
install: |
echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append
vcpkg install openssl:x64-windows-static-md
runs-on: ${{ matrix.os }}
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Cache Cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-test-${{ hashFiles('**/Cargo.lock') }}
- name: Setup | Export GitHub Actions cache environment variables
uses: actions/github-script@v7
if: runner.os == 'Windows'
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite');
- name: Setup | Install dependencies
run: ${{ matrix.install }}
- name: Build | Test
run: cargo test
# Run the CLI to ensure we don't have any subtle runtime issues.
- name: Build | Run
run: cargo run -- -h
# Upload the debug binary for testing examples later
- name: Upload | For testing
uses: actions/upload-artifact@v4
with:
name: test-cli-${{ matrix.os }}
path: ${{ matrix.binPath }}
if-no-files-found: error
test-examples:
needs: test # Ensure test is run first.
strategy:
fail-fast: false
max-parallel: 32
matrix:
os: [ ubuntu-22.04, macos-14, windows-2022 ]
example:
- cargo-manifest
- cdylib
- hooks
- initializer
- leptos
- no-rust
- proxy
- seed
- target-path
- vanilla
- webworker
- webworker-gloo
- webworker-module
- wasm_threads
- yew
- yew-tailwindcss
- yew-tls
runs-on: ${{ matrix.os }}
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Disable rustup self-update
# workaround for: https://github.com/rust-lang/rustup/issues/3709
run: |
rustup set auto-self-update disable
- name: Setup | Rust
run: |
rustup toolchain install stable --target wasm32-unknown-unknown
rustup default stable
- name: Setup | Download CLI
uses: actions/download-artifact@v4
with:
name: test-cli-${{ matrix.os }}
- name: Setup | Make executable
if: ${{ !contains(matrix.os, 'windows') }}
run: chmod a+x $GITHUB_WORKSPACE/trunk
- name: Setup | Cache | Example ${{ matrix.example }} on ${{ matrix.os }}
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
examples/${{ matrix.example }}/target
key: wasm32-example-${{ matrix.example }}-${{ matrix.os }}-${{ hashFiles('**/Cargo.lock') }}
- name: Build | Examples | ${{ matrix.example }} on ${{ matrix.os }}
shell: bash
env:
# for the CI we need to disable those checks, as we may run with a pre-release version, which would force us to
# replace all version requirements with pre-release requirements for this version.
TRUNK_REQUIRED_VERSION: '*'
run: |
$GITHUB_WORKSPACE/trunk --config=examples/${{ matrix.example }} build
examples:
runs-on: ubuntu-22.04
needs:
- test-examples
if: always()
steps:
- name: Success
if: ${{ !(contains(needs.*.result, 'failure')) }}
run: exit 0
- name: Failure
if: ${{ contains(needs.*.result, 'failure') }}
run: exit 1
uncommitted:
runs-on: ubuntu-22.04
needs:
- test
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Download CLI
uses: actions/download-artifact@v4
with:
name: test-cli-ubuntu-22.04
- name: Setup | Make executable
run: chmod a+x $GITHUB_WORKSPACE/trunk
- name: Generate | Config Schema
run: |
$GITHUB_WORKSPACE/trunk config generate-schema schemas/config.json
- name: Diff | Config Schema
run: |
if ! git diff --quiet schemas/config.json; then
echo "::error::Uncommitted changes for schemas/config.json (run 'cargo run -- config generate-schema schemas/config.json' after making changes to the configuration model)"
exit 1
fi