Repository navigation
292 lines (235 loc) · 9.28 KB
/
Copy pathtest.yml
File metadata and controls
292 lines (235 loc) · 9.28 KB
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
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
name: Tests
on:
pull_request:
push:
branches: [main]
jobs:
unit:
name: Unit Tests
runs-on: ubuntu-latest
# Healthy runs finish in ~2-3 min; bound well above that so a stall fails
# visibly instead of pending for GitHub's 6-hour default (see #1502).
timeout-minutes: 15
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build sdk package
working-directory: packages/sdk
run: pnpm build
- name: Build core package
working-directory: packages/core
run: pnpm build
- name: Build types package
working-directory: packages/types
run: pnpm build
# The wire-contract guards under packages/types/type-tests/ live outside src/ so they
# are never published, which also means `pnpm build` above does not check them. They are
# compile-time-only tests (the package has no test runner), so this step is the only
# thing that makes them able to fail a build.
- name: Type-check types package contracts
working-directory: packages/types
run: pnpm check-types:tests
- name: Build artifact-canvas package (+ build-smoke)
working-directory: packages/artifact-canvas
run: pnpm build && pnpm build:smoke
- name: Run sdk unit tests
working-directory: packages/sdk
run: pnpm test
- name: Run core unit tests
working-directory: packages/core
run: pnpm test
- name: Run artifact-canvas unit tests
working-directory: packages/artifact-canvas
run: pnpm test
- name: Copy skeleton for unit tests
working-directory: packages/codev
run: pnpm copy-skeleton
- name: Run unit tests with coverage
working-directory: packages/codev
run: |
# Enable pipefail so a vitest failure is not masked by tee's exit code.
# (GitHub Actions' default Linux shell is `bash -e {0}` without pipefail,
# so without this line the pipeline exits with tee's status — always 0 —
# and failing tests silently pass CI.)
set -o pipefail
# Vitest forks pool has a known issue where the worker process crashes
# during cleanup after all tests pass (native module teardown).
# Capture the output and check if all test files passed.
pnpm exec vitest run --coverage 2>&1 | tee /tmp/vitest-output.txt; VITEST_EXIT=$?
if [ $VITEST_EXIT -ne 0 ]; then
# Check if all test files actually passed despite the exit code
if grep -q "Test Files.*passed" /tmp/vitest-output.txt && ! grep -q "failed" /tmp/vitest-output.txt; then
echo "::warning::Vitest worker crashed during cleanup but all tests passed"
else
exit $VITEST_EXIT
fi
fi
- name: Run web unit tests
working-directory: apps/web
run: pnpm test
- name: Type-check vscode extension
working-directory: apps/vscode
run: pnpm check-types
- name: Run vscode unit tests
working-directory: apps/vscode
run: pnpm test:unit
# Streamdeck check-types resolves the sdk's dist .d.ts — the "Build sdk
# package" step above must stay ahead of these.
- name: Type-check streamdeck plugin
working-directory: apps/streamdeck
run: pnpm check-types
- name: Run streamdeck unit tests
working-directory: apps/streamdeck
run: pnpm test
- name: Build + validate streamdeck plugin
working-directory: apps/streamdeck
run: pnpm build && pnpm validate
canvas-browser:
name: Artifact-Canvas Browser Tests
runs-on: ubuntu-latest
# Backstop for #1502. The stall's root cause is removed below (see the install
# step), but every job stays bounded regardless: an unbounded job conceals its
# own failure, which is #1502's real lesson. Healthy runs finish in ~4 min.
timeout-minutes: 15
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
# Root cause of #1502: `--with-deps` runs `apt-get update` to install Chromium's
# system libraries, and that apt index fetch intermittently stalls indefinitely
# (the fast azure.archive.ubuntu.com mirror is Ign-ored, and apt has no network
# timeout on the fallback to archive.ubuntu.com). Those libraries are already
# present on the ubuntu-latest image: the sibling dashboard-e2e workflow installs
# Chromium the same way without `--with-deps` and launches it successfully on
# every scheduled run. Dropping the flag removes the stalling apt phase entirely.
- name: Install Playwright Chromium
working-directory: packages/artifact-canvas
run: pnpm exec playwright install chromium
# Real-browser fragmentation regression suite (spec 1380): jsdom cannot express CSS
# multi-column fragmentation, so the spike-derived invariants run against Chromium here.
- name: Run artifact-canvas browser tests
working-directory: packages/artifact-canvas
run: pnpm test:browser
integration:
name: Tower Integration Tests
runs-on: ubuntu-latest
# Healthy runs finish in ~2 min; bound above that so a stall fails visibly (#1502).
timeout-minutes: 10
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build sdk package
working-directory: packages/sdk
run: pnpm build
- name: Build core package
working-directory: packages/core
run: pnpm build
- name: Build package
working-directory: packages/codev
run: pnpm build
- name: Run tower integration tests
working-directory: packages/codev
run: pnpm exec vitest run --config vitest.e2e.config.ts --exclude 'src/commands/porch/__tests__/e2e/**'
cli:
name: CLI Integration Tests
runs-on: ubuntu-latest
# Healthy runs finish in ~1 min; bound above that so a stall fails visibly (#1502).
timeout-minutes: 10
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build sdk package
working-directory: packages/sdk
run: pnpm build
- name: Build core package
working-directory: packages/core
run: pnpm build
- name: Build package
working-directory: packages/codev
run: pnpm build
- name: Run CLI integration tests
working-directory: packages/codev
run: pnpm exec vitest run --config vitest.cli.config.ts
package:
name: Package Install Verification
runs-on: ubuntu-latest
# Healthy runs finish in ~2 min; bound above that so a stall fails visibly (#1502).
timeout-minutes: 10
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build sdk package
working-directory: packages/sdk
run: pnpm build
- name: Build core package
working-directory: packages/core
run: pnpm build
# codev-types is a runtime dependency of codev (server-utils imports its
# wire constants at module load), so the install-verification install must
# include its tarball too — else `afx --help` crashes at boot with
# "Cannot find module '@cluesmith/codev-types'".
- name: Build types package
working-directory: packages/types
run: pnpm build
- name: Build package
working-directory: packages/codev
run: pnpm build
- name: Pack core tarball
working-directory: packages/core
run: pnpm pack
- name: Pack sdk tarball
working-directory: packages/sdk
run: pnpm pack
- name: Pack types tarball
working-directory: packages/types
run: pnpm pack
- name: Pack tarball
working-directory: packages/codev
run: pnpm pack
- name: Verify install from tarball
working-directory: packages/codev
run: node scripts/verify-install.mjs cluesmith-codev-*.tgz ../core/cluesmith-codev-core-*.tgz ../sdk/cluesmith-codev-sdk-*.tgz ../types/cluesmith-codev-types-*.tgz