Repository navigation
559 lines (546 loc) · 23.5 KB
/
Copy pathci.yml
File metadata and controls
559 lines (546 loc) · 23.5 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
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
workflow_call:
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
XLINGS_NON_INTERACTIVE: '1'
NODE_VERSION: 22
jobs:
# The backend on each system the editors run on: build every program (the backend, the mock mcpp,
# the dev tool), run the tests -- the protocol against its schema and the fixtures against mcpp's
# contract among them -- and check the translations. The `pack` leg then packs the backend as the
# editor packages carry it (mcpp design 2026-10-28 part 2 §15): the ok-image bundle, and the
# universal self-contained package (both images; okrun for Linux, macOS and Windows, each built
# over the platform's hosted arrangement) whose okrun the packages take. The `host-platform` row
# builds and tests with the build programs (build.mcpp, the spec/ generators) as ok images run by
# okrun.
backend:
name: backend (${{ matrix.platform }}${{ matrix.host-platform && format(', host platform {0}', matrix.host-platform) || '' }})
runs-on: ${{ matrix.os }}
timeout-minutes: 75
strategy:
fail-fast: false
matrix:
include:
- { os: ubuntu-24.04, platform: linux-x64, llvm: 'false', pack: true }
- { os: ubuntu-24.04-arm, platform: linux-arm64, llvm: 'false' }
- { os: macos-15, platform: darwin-arm64, llvm: 'true' }
- { os: windows-2022, platform: win32-x64, llvm: 'true' }
- { os: ubuntu-24.04, platform: linux-x64, llvm: 'false', host-platform: 'openkal-platform@0.23.3' }
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-mcpp
with:
llvm: ${{ matrix.llvm }}
- name: The host graph's platform
if: matrix.host-platform
run: echo "MCPP_HOST_PLATFORM=${{ matrix.host-platform }}" >> "$GITHUB_ENV"
- name: Build
run: mcpp build
- name: Test
run: mcpp test
- name: Every string has its translation
run: mcpp run mcpp-ide-dev -- check-i18n
- name: The backend as the editor packages carry it
if: matrix.pack
run: |
set -euo pipefail
version="$(sed -n 's/^version *= *"\(.*\)"/\1/p' mcpp.toml | head -1)"
mcpp pack mcpp-ide --target openkal --mode self-contained --systems all --pkg-format tar,okb -o target/dist/
# The tree's name carries the mode (`mcpp-ide-<version>-openkal-bundle-all`, mcpp SPEC-014).
tarball="$(ls target/dist/mcpp-ide-"$version"-openkal*.tar.gz)"
package="$(basename "$tarball" .tar.gz)"
mkdir -p backend unpacked
cp "target/dist/$package.tar.gz" backend/
cp "target/dist/mcpp-ide-$version.okb" backend/mcpp-ide.okb
tar -xzf "backend/$package.tar.gz" -C unpacked
cp -R "unpacked/$package/libexec/okrun" backend/okrun
python3 - "unpacked/$package/mcpp-package.json" <<'PY'
import json, sys
d = json.load(open(sys.argv[1]))
print("legs", d["legs"], "runs_on", d["runs_on"])
want = {"linux-x86_64", "linux-aarch64", "macos-aarch64", "windows-x86_64"}
assert want <= set(d["runs_on"]["self"]), d["runs_on"]
PY
"unpacked/$package/bin/mcpp-ide" --version
backend/okrun/linux-x86_64/okrun backend/mcpp-ide.okb --version
ls -lR backend
- uses: actions/upload-artifact@v5
if: matrix.pack
with:
name: backend
path: backend
# The VS Code extension (mide-plugins/vscode), mcpp-vscode 0.9.0 over the backend. Its gates
# (the registry, the translations, the unit suite) on the three desktop systems; the manifest
# generated from spec/ with no drift, and the snapshots generated from mcpp's source; the parity
# gates against 0.9.0; the package with the bundle and every system's okrun; the Extension Host
# suite against every mcppls variant on the three systems, over the bundled backend; an isolated
# install that resolves the language service; the graph page in Chromium.
vscode-gates:
name: VS Code gates (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-15, windows-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
defaults:
run:
working-directory: mide-plugins/vscode
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: mide-plugins/vscode/package-lock.json
- run: npm ci
- name: Registry, translation and unit gates
run: npm test
vscode-drift:
name: VS Code manifest and settings documentation
runs-on: ubuntu-24.04
timeout-minutes: 45
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-mcpp
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: mide-plugins/vscode/package-lock.json
- name: The manifest, its strings and the settings registry are spec/'s
run: |
mcpp run mcpp-ide-dev -- gen vscode
git diff --exit-code -- mide-plugins/vscode spec
- run: npm ci
working-directory: mide-plugins/vscode
- name: The settings documentation matches the registry
working-directory: mide-plugins/vscode
run: |
npm run gen:docs
git diff --exit-code docs/settings.md
vscode:
name: VS Code extension
needs: backend
runs-on: ubuntu-24.04
timeout-minutes: 45
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-mcpp
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: mide-plugins/vscode/package-lock.json
- uses: actions/download-artifact@v5
with:
name: backend
path: backend
- name: Build the backend and its test programs
run: |
chmod +x backend/okrun/*/okrun*
mcpp build
{
echo "MCPP_IDE_OKB=$GITHUB_WORKSPACE/backend/mcpp-ide.okb"
echo "MCPP_IDE_OKRUN=$GITHUB_WORKSPACE/backend/okrun"
} >> "$GITHUB_ENV"
- run: npm ci
working-directory: mide-plugins/vscode
- name: Unit tests, with the backend built here
working-directory: mide-plugins/vscode
run: npm test
- name: Parity with 0.9.0 (the manifest and strings, every page's document)
working-directory: mide-plugins/vscode
run: npm run test:parity
- name: Package, with the bundle and every system's okrun
working-directory: mide-plugins/vscode
run: npm run package
- name: Verify the VSIX archive
working-directory: mide-plugins/vscode
run: unzip -t mcpp-vscode-*.vsix
- name: The manifest keeps its promises
working-directory: mide-plugins/vscode
run: |
node -e '
const p = require("./package.json");
const fail = (message) => { console.error(message); process.exit(1); };
if (p.extensionDependencies?.[0] !== "sunrisepeak.mcpp-language-server") fail("the dependency moved");
if (p.extensionDependencies.some((id) => id.includes("clangd"))) fail("clangd is back in the dependency list");
// The language client of the backend is bundled into dist/vendor; nothing is a runtime dependency.
if (Object.keys(p.dependencies ?? {}).length) fail("a runtime dependency crept in: the VSIX carries no node_modules");
if ((p.activationEvents ?? []).some((event) => event.startsWith("onCommand:"))) fail("onCommand activations are derived since 1.74");
if (!p.contributes?.viewsContainers?.activitybar?.length) fail("the view container disappeared");
console.log("manifest ok");
'
- name: The VSIX carries the runtime artefacts and the backend
working-directory: mide-plugins/vscode
run: |
set -euo pipefail
VSIX=$(ls mcpp-vscode-*.vsix)
for entry in \
extension/l10n/bundle.l10n.zh-cn.json \
extension/package.nls.json \
extension/package.nls.zh-cn.json \
extension/dist/data/config-registry.json \
extension/media/settings.css \
extension/backend/mcpp-ide.okb \
extension/backend/okrun/linux-x86_64/okrun \
extension/backend/okrun/linux-aarch64/okrun \
extension/backend/okrun/macos-aarch64/okrun \
extension/backend/okrun/windows-x86_64/okrun.exe; do
unzip -l "$VSIX" | grep -q "$entry" || { echo "missing from the VSIX: $entry"; exit 1; }
done
echo "VSIX contents ok"
- name: The VSIX stays small and free of local state
working-directory: mide-plugins/vscode
run: |
set -euo pipefail
VSIX=$(ls mcpp-vscode-*.vsix)
SIZE=$(stat -c %s "$VSIX")
COUNT=$(unzip -l "$VSIX" | tail -1 | awk '{print $2}')
echo "VSIX: $COUNT files, $((SIZE / 1024)) KiB"
if [ "$COUNT" -gt 220 ]; then echo "the VSIX has $COUNT files; something local leaked in"; exit 1; fi
# Offline Mermaid, the pinned official tests, the backend bundle (two images) and four okruns.
if [ "$SIZE" -gt 12582912 ]; then echo "the VSIX is over 12 MiB ($SIZE bytes)"; exit 1; fi
for required in dist/vendor/mermaid.js dist/vendor/MERMAID-LICENSE dist/data/library-examples.json; do
unzip -p "$VSIX" "extension/$required" > /dev/null
done
for forbidden in .dev-profile/ .agents/ .agnets/ test/ tools/ src/ node_modules/; do
if unzip -l "$VSIX" | grep -q "extension/$forbidden"; then
echo "leaked into the VSIX: $forbidden"
exit 1
fi
done
- name: One language client, the backend's, bundled
working-directory: mide-plugins/vscode
run: |
test ! -e dist/src/languageClient.js
! grep -rqsE "require\(['\"]vscode-languageclient['\"]\)|from ['\"]vscode-languageclient['\"]" dist/src package.json
test "$(grep -rlE "vendor/languageclient" dist/src)" = "dist/src/ide/session.js"
test -s dist/vendor/languageclient.js
- uses: actions/upload-artifact@v5
with:
name: mcpp-vscode-vsix
path: mide-plugins/vscode/mcpp-vscode-*.vsix
if-no-files-found: error
# One Extension Host run per mcppls variant, on the three desktop systems, over the backend the
# package carries (staged into the extension): the spawn and path handling the suite exercises is
# exactly what differs between them.
vscode-e2e:
name: VS Code Extension Host (${{ matrix.os }})
needs: backend
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-15, windows-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 45
defaults:
run:
shell: bash
working-directory: mide-plugins/vscode
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: mide-plugins/vscode/package-lock.json
- uses: actions/download-artifact@v5
with:
name: backend
path: backend
- run: npm ci
- run: npm run compile
- name: The backend the package carries
run: MCPP_IDE_OKB="$GITHUB_WORKSPACE/backend/mcpp-ide.okb" MCPP_IDE_OKRUN="$GITHUB_WORKSPACE/backend/okrun" npm run stage:backend
- name: Cache the pinned VS Code download
uses: actions/cache@v5
with:
path: mide-plugins/vscode/.vscode-test
key: vscode-1.91.0-${{ runner.os }}-${{ runner.arch }}
- name: Extension Host smoke tests against every mcppls variant
run: |
if [ "$(uname)" = "Linux" ]; then
xvfb-run -a npm run test:e2e:one
else
npm run test:e2e:one
fi
# The declared degraded mode (part 2 §8, F15): the bundle without a runner for this system,
# as on a platform okrun does not cover.
- name: Extension Host without its backend
env:
MCPP_E2E_NO_BACKEND: "1"
run: |
if [ "$(uname)" = "Linux" ]; then
xvfb-run -a npm run test:e2e:one
else
npm run test:e2e:one
fi
# The only check that proves the dependency resolves end to end: install the packed VSIX into a
# private profile and let VS Code pull the platform build of the language service.
vscode-isolated-install:
name: VS Code isolated install (${{ matrix.os }})
needs: vscode
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-15, windows-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
defaults:
run:
shell: bash
working-directory: mide-plugins/vscode
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: mide-plugins/vscode/package-lock.json
- run: npm ci
- uses: actions/download-artifact@v5
with:
name: mcpp-vscode-vsix
path: mide-plugins/vscode
- name: Cache the pinned VS Code download
uses: actions/cache@v5
with:
path: mide-plugins/vscode/.vscode-test
key: vscode-1.91.0-${{ runner.os }}-${{ runner.arch }}
- name: Download the VS Code CLI
run: |
set -euo pipefail
CODE=$(node tools/ci-vscode-cli.mjs | tr '\\' '/')
"$CODE" --version
echo "CODE=$CODE" >> "$GITHUB_ENV"
- name: Install into a private profile
run: |
set -euo pipefail
"$CODE" --extensions-dir "$PWD/.ci-extensions" --user-data-dir "$PWD/.ci-user" \
--install-extension mcpp-vscode-*.vsix --force
"$CODE" --extensions-dir "$PWD/.ci-extensions" --user-data-dir "$PWD/.ci-user" \
--install-extension sunrisepeak.mcpp-language-server
- name: The dependency resolved, with a version
run: |
set -euo pipefail
LIST=$("$CODE" --extensions-dir "$PWD/.ci-extensions" --user-data-dir "$PWD/.ci-user" \
--list-extensions --show-versions | tr -d '\r')
echo "$LIST"
echo "$LIST" | grep -q "^mcpp-community.mcpp-vscode@" || { echo "the extension is missing"; exit 1; }
echo "$LIST" | grep -q "^sunrisepeak.mcpp-language-server@" || { echo "the dependency did not resolve"; exit 1; }
VERSION=$(printf '%s\n' "$LIST" | sed -n 's/^sunrisepeak\.mcpp-language-server@//p')
echo "resolved mcppls $VERSION"
echo "resolved mcppls \`$VERSION\`" >> "$GITHUB_STEP_SUMMARY"
vscode-graph-browser:
name: VS Code graph page in Chromium
runs-on: ubuntu-latest
timeout-minutes: 30
defaults:
run:
working-directory: mide-plugins/vscode
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: mide-plugins/vscode/package-lock.json
- run: npm ci
- run: npx playwright install --with-deps chromium
- name: Render and interact with the shipped graph in Chromium
run: npm run test:graphs-ui
- uses: actions/upload-artifact@v5
if: always()
with:
name: graph-browser-evidence
path: mide-plugins/vscode/.dev-profile/graph-ui-artifacts
if-no-files-found: warn
# The CLion plugin (mide-plugins/clion; the protocol's editor `jetbrains`, the IntelliJ platform):
# its tests (the wire and a session over the mock mcpp), the workbench it shows (mcpp-vscode's pages,
# bundled by the extension's tools) in Chromium over the backend built here, the archive carrying
# the workbench, the bundle and every system's okrun, and the Plugin Verifier against the oldest
# CLion it claims (2026.1) and the one it is built on.
clion:
name: CLion plugin
needs: backend
runs-on: ubuntu-24.04
timeout-minutes: 90
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-mcpp
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: mide-plugins/vscode/package-lock.json
- name: The extension's dependencies (the workbench's bundler)
working-directory: mide-plugins/vscode
run: npm ci
- name: Gradle (xim:gradle brings its JDK)
run: xlings install gradle -y -g
- uses: actions/cache@v5
with:
path: ~/.gradle/caches/modules-2
key: gradle-clion-${{ hashFiles('mide-plugins/clion/gradle.properties', 'mide-plugins/clion/build.gradle.kts', 'mide-plugins/clion/settings.gradle.kts') }}
- uses: actions/download-artifact@v5
with:
name: backend
path: backend
- name: Build the backend and its test programs
run: |
chmod +x backend/okrun/*/okrun*
mcpp build
# Every Gradle run of this job packages the same plugin: the variables hold for all of them.
bin="$(cd "$(dirname "$(ls -t target/*/*/bin/mcpp-ide | head -1)")" && pwd)"
{
echo "MCPP_IDE_DEV=$bin/mcpp-ide-dev"
echo "MCPP_IDE_BACKEND=$bin/mcpp-ide"
echo "MCPP_IDE_MOCK_MCPP=$bin/mcpp-ide-mock-mcpp"
echo "MCPP_IDE_OKB=$GITHUB_WORKSPACE/backend/mcpp-ide.okb"
echo "MCPP_IDE_OKRUN=$GITHUB_WORKSPACE/backend/okrun"
} >> "$GITHUB_ENV"
- name: The graph page in Chromium, over the backend
working-directory: mide-plugins/vscode
run: |
npx playwright install --with-deps chromium
npm run test:webui
- name: Test and package
working-directory: mide-plugins/clion
run: gradle --no-daemon test buildPlugin
- name: Plugin Verifier
working-directory: mide-plugins/clion
run: gradle --no-daemon verifyPlugin
- name: The archive carries the bundle and every system's okrun
working-directory: mide-plugins/clion
run: |
unzip -l build/distributions/mcpp-clion-*.zip | tee files.txt
grep -q "mcpp-clion/backend/mcpp-ide.okb" files.txt
for p in linux-x86_64/okrun linux-aarch64/okrun macos-aarch64/okrun windows-x86_64/okrun.exe; do grep -q "mcpp-clion/backend/okrun/$p" files.txt; done
[ "$(grep -c '\.okb$' files.txt)" = 1 ]
jar="$(grep -o 'mcpp-clion/lib/mcpp-clion-[^ ]*\.jar' files.txt | head -1)"
unzip -p build/distributions/mcpp-clion-*.zip "$jar" > plugin.jar
unzip -l plugin.jar | tee jar.txt | grep -q "webui/files.txt"
for f in $(unzip -p plugin.jar webui/files.txt); do grep -q " webui/$f$" jar.txt; done
ls -l build/distributions/*.zip
# The plugin's icon and its tool window's are the mcpp logo, an embedded image (design 2026-10-29
# §10.4), not text; the VS Code extension's logo is mcpp-vscode 0.9.0's, byte for byte.
- name: The icons are the mcpp logo
run: |
[ "$(md5sum < mide-plugins/vscode/media/logo.png | cut -d' ' -f1)" = f94579030616a45ca26694120daba050 ] \
|| { echo "::error::media/logo.png is not the mcpp logo"; exit 1; }
cd mide-plugins/clion
for f in META-INF/pluginIcon.svg icons/mcpp.svg; do
svg="$(unzip -p plugin.jar "$f")"
grep -q 'data:image/png;base64,' <<< "$svg" || { echo "::error::$f embeds no image of the logo"; exit 1; }
! grep -q '<text' <<< "$svg" || { echo "::error::$f is text, not the logo"; exit 1; }
done
- uses: actions/upload-artifact@v5
with:
name: mcpp-clion-zip
path: mide-plugins/clion/build/distributions/*.zip
# The Neovim plugin (mide-plugins/nvim) in a headless Neovim, against the backend built here: over
# the mock mcpp on the oldest and the newest Neovim it supports, then over the real mcpp, which
# builds the test's project. Neovim comes from xlings (`nvim` in xim-pkgindex), each version
# installed and selected with `xlings use`, as mcppls's CI provisions it.
nvim:
name: Neovim plugin
runs-on: ubuntu-24.04
timeout-minutes: 45
env:
NVIM_VERSIONS: 0.10.4 0.12.5
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-mcpp
- name: Build the backend and the mock mcpp
run: mcpp build
- name: Neovim from xlings
run: |
set -euo pipefail
for version in $NVIM_VERSIONS; do
for attempt in 1 2 3; do
if xlings install "nvim@$version" -y -g; then break; fi
[ "$attempt" = 3 ] && { echo "::error::nvim@$version could not be installed"; exit 1; }
sleep 30
done
done
# Neovim runs outside the repository: inside it, xlings resolves tools through the project's
# own subos (.xlings.json), which holds mcpp only. The suite finds the backend by its own path.
- name: The plugin on each Neovim, over the mock mcpp
working-directory: ${{ runner.temp }}
run: |
set -euo pipefail
failed=''
for version in $NVIM_VERSIONS; do
xlings use nvim "$version"
nvim --version | head -1 | tee said.txt
grep -qF "v$version" said.txt
echo "::group::Neovim $version"
nvim --headless --clean -l "$GITHUB_WORKSPACE/mide-plugins/nvim/tests/smoke.lua" || failed="$failed $version"
echo "::endgroup::"
done
if [ -n "$failed" ]; then echo "::error::the Neovim plugin failed on:$failed"; exit 1; fi
- name: The plugin over the real mcpp
working-directory: ${{ runner.temp }}
run: MCPP_NVIM_MCPP="$(command -v mcpp)" nvim --headless --clean -l "$GITHUB_WORKSPACE/mide-plugins/nvim/tests/smoke.lua"
# The packages, opened on every system they serve: the one bundle each editor package carries,
# started by the okrun it carries for that system (scripts/check-package.sh), and the backend's own
# universal package started by its launcher.
packages:
name: packages on ${{ matrix.os }}
needs: [vscode, clion]
runs-on: ${{ matrix.os }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, ubuntu-24.04-arm, macos-15, windows-2022]
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v5
- uses: actions/download-artifact@v5
with:
pattern: mcpp-*
path: packages
merge-multiple: true
- uses: actions/download-artifact@v5
with:
name: backend
path: backend
- name: The VS Code extension
run: .github/scripts/check-package.sh packages/mcpp-vscode-*.vsix extension
- name: The CLion plugin
run: .github/scripts/check-package.sh packages/mcpp-clion-*.zip mcpp-clion
- name: The backend's universal package
run: |
set -euo pipefail
dir="$(mktemp -d)"
tar -xzf backend/mcpp-ide-*-openkal*.tar.gz -C "$dir"
root="$(echo "$dir"/mcpp-ide-*-openkal*)"
"$root/bin/mcpp-ide" --version | tee said.txt
grep -q '^mcpp-ide ' said.txt