-
Notifications
You must be signed in to change notification settings - Fork 8
156 lines (124 loc) · 3.75 KB
/
ci.yml
File metadata and controls
156 lines (124 loc) · 3.75 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
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
- name: Check formatting
run: npm run format:check
typecheck:
name: Type Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run TypeScript type check
run: npm run typecheck
test:
name: Test (Node ${{ matrix.node-version }})
runs-on: ubuntu-latest
strategy:
matrix:
# Node 22 minimum: the codesys-importer's browser-safe unzip
# path uses `DecompressionStream("deflate-raw")`, whose
# `deflate-raw` format string is only accepted from Node 21.2+.
# Drop 18 / 20 entirely; 22 is current LTS.
node-version: [22]
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Run tests with coverage
run: npm run test:coverage -- --run
extension:
name: Extension Build & Test
runs-on: ubuntu-latest
needs: [lint, typecheck, test]
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install compiler dependencies and build
run: npm ci && npm run build
- name: Install extension dependencies
run: cd vscode-extension && npm ci
- name: Run extension unit tests
run: cd vscode-extension && npx vitest run
- name: Verify extension bundle
run: cd vscode-extension && npm run bundle
build:
name: Build
runs-on: ubuntu-latest
needs: [lint, typecheck, test]
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
retention-days: 7
binary-smoke:
# Build the standalone binary the way `release.yml` does and actually run
# it. Catches the issue #132 class of bug (binary ships a different
# Node/ICU build than dev/CI and crashes at startup) on every PR, instead
# of only discovering it after a release. One target is enough here; the
# full 5-target + Windows matrix runs in release.yml.
name: Binary Smoke Test
runs-on: ubuntu-latest
needs: [test]
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Bundle
run: npm run build:bundle
- name: Build standalone binary
run: npx pkg dist/strucpp-bundle.cjs --no-bytecode --public-packages "*" --public --target node22-linux-x64 --output dist/bin/strucpp --compress GZip
- name: Smoke-test binary
run: node scripts/smoke-test.mjs dist/bin/strucpp