-
Notifications
You must be signed in to change notification settings - Fork 33
260 lines (197 loc) · 6.76 KB
/
ci.yml
File metadata and controls
260 lines (197 loc) · 6.76 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
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
test:
name: Test on Node.js ${{ matrix.node-version }}
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x, 22.x]
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ matrix.node-version }}
cache: npm
- name: Install dependencies
run: npm ci
- name: Repository hygiene check
run: npm run clean:repo:check
- name: Security audit (CI policy)
run: npm run audit:ci
- name: Lockfile floor guard
run: npm run test -- test/lockfile-version-floor.test.ts
- name: Security audit (full dependency tree, non-blocking)
continue-on-error: true
run: npm run audit:all
- name: Run type check
run: npm run typecheck
- name: Run tests with coverage
run: npm run coverage
- name: Build
run: npm run build
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
release-harness:
name: Release Harness
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Typecheck scripts
run: npm run typecheck:scripts
- name: Pack budget check
run: npm run pack:check
- name: Verify vendor provenance
run: npm run vendor:verify
scripts-windows:
name: Script Typecheck (Windows)
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Typecheck scripts
run: npm run typecheck:scripts
codex-compat:
name: Codex Compatibility Smoke
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Run Codex compatibility tests
run: npm run test -- test/codex.test.ts test/host-codex-prompt.test.ts test/request-transformer.test.ts test/fetch-helpers.test.ts
validate:
name: PR Validation
# tests-ci-05: PR-only gate — runs coverage so the 80% threshold blocks the
# PR itself, not only the post-merge push-to-main run of the test matrix.
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Security audit (CI policy)
run: npm run audit:ci
- name: Lockfile floor guard
run: npm run test -- test/lockfile-version-floor.test.ts
- name: Repository hygiene check
run: npm run clean:repo:check
- name: Run type check
run: npm run typecheck
- name: Run ESLint
run: npm run lint
- name: Run tests with coverage
# tests-ci-05: run coverage on PRs so the 80% threshold gates the PR,
# not only the post-merge push-to-main run of the test matrix.
run: npm run coverage
- name: Build
run: npm run build
- name: Typecheck scripts
run: npm run typecheck:scripts
- name: Pack budget check
run: npm run pack:check
- name: Verify vendor provenance
run: npm run vendor:verify
build-package:
name: Build Package Tarball
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Pack tarball
run: npm pack
- name: Upload package tarball
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: npm-package
path: codex-multi-auth-*.tgz
if-no-files-found: error
retention-days: 1
node18-smoke:
name: Node 18 Runtime Smoke
# Issue #523: validate the package.json engines floor (node >=18) by
# installing the packed tarball on the oldest supported runtime and
# smoke-running the published CLI entrypoints. No repo checkout and no
# devDependencies — only what a real `npm install -g` consumer gets.
needs: build-package
runs-on: ubuntu-latest
# CI=1 must cover the install step too: postinstall.js runs during
# `npm install -g`, and local runners like act do not auto-inject CI.
env:
CI: 1
steps:
- name: Setup Node.js 18.17.x
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 18.17.x
- name: Download package tarball
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: npm-package
- name: Install package globally from tarball
run: npm install -g ./codex-multi-auth-*.tgz
- name: Smoke-run CLI entrypoints
run: |
node --version
codex-multi-auth --version
codex-multi-auth --help