code-foundry 1.45.2 → 1.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/validation-billing.yml +198 -242
- package/CHANGELOG.md +15 -20
- package/package.json +1 -1
- package/src/lib/consumer-qualification.mjs +10 -2
|
@@ -183,6 +183,72 @@ jobs:
|
|
|
183
183
|
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
184
184
|
BEFORE_SHA: ${{ github.event.before }}
|
|
185
185
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run format >> "$GITHUB_OUTPUT"
|
|
186
|
+
# --- Build lane (mirror of ci.yml build) ---
|
|
187
|
+
- name: Detect build
|
|
188
|
+
id: build_applicability
|
|
189
|
+
if: ${{ !cancelled() }}
|
|
190
|
+
env:
|
|
191
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
192
|
+
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
193
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
194
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
195
|
+
BEFORE_SHA: ${{ github.event.before }}
|
|
196
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run build >> "$GITHUB_OUTPUT"
|
|
197
|
+
# --- Performance lane (mirror of test.yml performance; audit tier only) ---
|
|
198
|
+
- name: Detect performance
|
|
199
|
+
id: performance_applicability
|
|
200
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' }}
|
|
201
|
+
env:
|
|
202
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
203
|
+
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
204
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
205
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
206
|
+
BEFORE_SHA: ${{ github.event.before }}
|
|
207
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci task_profile performance >> "$GITHUB_OUTPUT"
|
|
208
|
+
# --- Smoke lane (mirror of test.yml smoke; audit tier only) ---
|
|
209
|
+
- name: Detect smoke
|
|
210
|
+
id: smoke_applicability
|
|
211
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' }}
|
|
212
|
+
env:
|
|
213
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
214
|
+
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
215
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
216
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
217
|
+
BEFORE_SHA: ${{ github.event.before }}
|
|
218
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci task_profile smoke >> "$GITHUB_OUTPUT"
|
|
219
|
+
# --- Eval lane (mirror of eval.yml; audit tier only) ---
|
|
220
|
+
- name: Detect eval
|
|
221
|
+
id: eval_applicability
|
|
222
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' }}
|
|
223
|
+
env:
|
|
224
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
225
|
+
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
226
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
227
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
228
|
+
BEFORE_SHA: ${{ github.event.before }}
|
|
229
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run eval >> "$GITHUB_OUTPUT"
|
|
230
|
+
# --- Lint lane (mirror of ci.yml lint) ---
|
|
231
|
+
- name: Detect lint
|
|
232
|
+
id: lint_applicability
|
|
233
|
+
if: ${{ !cancelled() }}
|
|
234
|
+
env:
|
|
235
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
236
|
+
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
237
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
238
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
239
|
+
BEFORE_SHA: ${{ github.event.before }}
|
|
240
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run lint >> "$GITHUB_OUTPUT"
|
|
241
|
+
# --- Integration lane (mirror of test.yml integration; audit tier only) ---
|
|
242
|
+
- name: Detect integration
|
|
243
|
+
id: integration_applicability
|
|
244
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' }}
|
|
245
|
+
env:
|
|
246
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
247
|
+
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
248
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
249
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
250
|
+
BEFORE_SHA: ${{ github.event.before }}
|
|
251
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci task_profile integration >> "$GITHUB_OUTPUT"
|
|
186
252
|
- name: Setup format
|
|
187
253
|
if: steps.format_applicability.outputs.applicable == 'true' && steps.format_applicability.outputs.affected != 'false'
|
|
188
254
|
uses: ./.github/actions/setup
|
|
@@ -195,34 +261,6 @@ jobs:
|
|
|
195
261
|
cache-lint: 'false'
|
|
196
262
|
cache-build: 'false'
|
|
197
263
|
task: format
|
|
198
|
-
- name: Format
|
|
199
|
-
id: format_execute
|
|
200
|
-
if: steps.format_applicability.outputs.applicable == 'true' && steps.format_applicability.outputs.affected != 'false'
|
|
201
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci format
|
|
202
|
-
- name: Retain format task receipt
|
|
203
|
-
if: >-
|
|
204
|
-
always() &&
|
|
205
|
-
(steps.format_execute.outcome == 'success' || steps.format_execute.outcome == 'failure' ||
|
|
206
|
-
steps.format_applicability.outputs.applicable == 'false' || steps.format_applicability.outputs.affected == 'false') &&
|
|
207
|
-
hashFiles('.code-foundry/results/format.json') != ''
|
|
208
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
209
|
-
with:
|
|
210
|
-
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-format
|
|
211
|
-
path: .code-foundry/results/format.json
|
|
212
|
-
include-hidden-files: true
|
|
213
|
-
if-no-files-found: error
|
|
214
|
-
retention-days: 14
|
|
215
|
-
# --- Build lane (mirror of ci.yml build) ---
|
|
216
|
-
- name: Detect build
|
|
217
|
-
id: build_applicability
|
|
218
|
-
if: ${{ !cancelled() }}
|
|
219
|
-
env:
|
|
220
|
-
EVENT_NAME: ${{ github.event_name }}
|
|
221
|
-
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
222
|
-
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
223
|
-
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
224
|
-
BEFORE_SHA: ${{ github.event.before }}
|
|
225
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run build >> "$GITHUB_OUTPUT"
|
|
226
264
|
- name: Setup build
|
|
227
265
|
if: ${{ !cancelled() && steps.build_applicability.outputs.applicable == 'true' && steps.build_applicability.outputs.affected != 'false' }}
|
|
228
266
|
uses: ./.github/actions/setup
|
|
@@ -235,36 +273,6 @@ jobs:
|
|
|
235
273
|
# time. Consumers can provide the real value; the fallback is
|
|
236
274
|
# intentionally CI-only and must never be used at runtime.
|
|
237
275
|
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET || 'code-foundry-ci-placeholder-0123456789' }}
|
|
238
|
-
- name: Build
|
|
239
|
-
id: build_execute
|
|
240
|
-
if: ${{ !cancelled() && steps.build_applicability.outputs.applicable == 'true' && steps.build_applicability.outputs.affected != 'false' }}
|
|
241
|
-
env:
|
|
242
|
-
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET || 'code-foundry-ci-placeholder-0123456789' }}
|
|
243
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci build
|
|
244
|
-
- name: Retain build task receipt
|
|
245
|
-
if: >-
|
|
246
|
-
always() &&
|
|
247
|
-
(steps.build_execute.outcome == 'success' || steps.build_execute.outcome == 'failure' ||
|
|
248
|
-
steps.build_applicability.outputs.applicable == 'false' || steps.build_applicability.outputs.affected == 'false') &&
|
|
249
|
-
hashFiles('.code-foundry/results/build.json') != ''
|
|
250
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
251
|
-
with:
|
|
252
|
-
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-build
|
|
253
|
-
path: .code-foundry/results/build.json
|
|
254
|
-
include-hidden-files: true
|
|
255
|
-
if-no-files-found: error
|
|
256
|
-
retention-days: 14
|
|
257
|
-
# --- Performance lane (mirror of test.yml performance; audit tier only) ---
|
|
258
|
-
- name: Detect performance
|
|
259
|
-
id: performance_applicability
|
|
260
|
-
if: ${{ !cancelled() && inputs.mode == 'audit' }}
|
|
261
|
-
env:
|
|
262
|
-
EVENT_NAME: ${{ github.event_name }}
|
|
263
|
-
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
264
|
-
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
265
|
-
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
266
|
-
BEFORE_SHA: ${{ github.event.before }}
|
|
267
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci task_profile performance >> "$GITHUB_OUTPUT"
|
|
268
276
|
- name: Setup performance
|
|
269
277
|
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.performance_applicability.outputs.applicable == 'true' && steps.performance_applicability.outputs.affected != 'false' }}
|
|
270
278
|
uses: ./.github/actions/setup
|
|
@@ -281,10 +289,118 @@ jobs:
|
|
|
281
289
|
task-javascript: ${{ steps.performance_applicability.outputs.javascript }}
|
|
282
290
|
task-python: ${{ steps.performance_applicability.outputs.python }}
|
|
283
291
|
task-rust: ${{ steps.performance_applicability.outputs.rust }}
|
|
284
|
-
- name:
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
292
|
+
- name: Setup smoke
|
|
293
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.smoke_applicability.outputs.applicable == 'true' && steps.smoke_applicability.outputs.affected != 'false' }}
|
|
294
|
+
uses: ./.github/actions/setup
|
|
295
|
+
with:
|
|
296
|
+
install: true
|
|
297
|
+
install-javascript: ${{ steps.smoke_applicability.outputs.javascript == 'true' }}
|
|
298
|
+
install-python: ${{ steps.smoke_applicability.outputs.python == 'true' }}
|
|
299
|
+
install-rust: ${{ steps.smoke_applicability.outputs.rust == 'true' }}
|
|
300
|
+
cache-build: false
|
|
301
|
+
cache-environment: false
|
|
302
|
+
cache-save: ${{ github.event_name == 'push' }}
|
|
303
|
+
cache-packages: ${{ vars.REPO_FOUNDRY_CACHE_PACKAGES || 'auto' }}
|
|
304
|
+
task: smoke
|
|
305
|
+
task-javascript: ${{ steps.smoke_applicability.outputs.javascript }}
|
|
306
|
+
task-python: ${{ steps.smoke_applicability.outputs.python }}
|
|
307
|
+
task-rust: ${{ steps.smoke_applicability.outputs.rust }}
|
|
308
|
+
- name: Setup eval
|
|
309
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.eval_applicability.outputs.applicable == 'true' && steps.eval_applicability.outputs.affected != 'false' }}
|
|
310
|
+
uses: ./.github/actions/setup
|
|
311
|
+
with:
|
|
312
|
+
# Eval harnesses run through the repository's own package scripts and
|
|
313
|
+
# need their dependencies installed before the task executes.
|
|
314
|
+
install: 'true'
|
|
315
|
+
cache-build: 'true'
|
|
316
|
+
task: eval
|
|
317
|
+
- name: Setup lint
|
|
318
|
+
if: ${{ !cancelled() && steps.lint_applicability.outputs.applicable == 'true' && steps.lint_applicability.outputs.affected != 'false' }}
|
|
319
|
+
uses: ./.github/actions/setup
|
|
320
|
+
with:
|
|
321
|
+
install: 'true'
|
|
322
|
+
cache-lint: 'true'
|
|
323
|
+
task: lint
|
|
324
|
+
- name: Setup integration
|
|
325
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.integration_applicability.outputs.applicable == 'true' && steps.integration_applicability.outputs.affected != 'false' }}
|
|
326
|
+
uses: ./.github/actions/setup
|
|
327
|
+
with:
|
|
328
|
+
install: true
|
|
329
|
+
install-javascript: ${{ steps.integration_applicability.outputs.javascript == 'true' }}
|
|
330
|
+
install-python: ${{ steps.integration_applicability.outputs.python == 'true' }}
|
|
331
|
+
install-rust: ${{ steps.integration_applicability.outputs.rust == 'true' }}
|
|
332
|
+
cache-build: ${{ steps.integration_applicability.outputs.rust == 'true' }}
|
|
333
|
+
cache-environment: false
|
|
334
|
+
cache-save: ${{ github.event_name == 'push' }}
|
|
335
|
+
cache-packages: ${{ vars.REPO_FOUNDRY_CACHE_PACKAGES || 'auto' }}
|
|
336
|
+
task: integration
|
|
337
|
+
task-javascript: ${{ steps.integration_applicability.outputs.javascript }}
|
|
338
|
+
task-python: ${{ steps.integration_applicability.outputs.python }}
|
|
339
|
+
task-rust: ${{ steps.integration_applicability.outputs.rust }}
|
|
340
|
+
- parallel:
|
|
341
|
+
# --- Format execute ---
|
|
342
|
+
- name: Format
|
|
343
|
+
id: format_execute
|
|
344
|
+
if: steps.format_applicability.outputs.applicable == 'true' && steps.format_applicability.outputs.affected != 'false'
|
|
345
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci format
|
|
346
|
+
# --- Build execute ---
|
|
347
|
+
- name: Build
|
|
348
|
+
id: build_execute
|
|
349
|
+
if: ${{ !cancelled() && steps.build_applicability.outputs.applicable == 'true' && steps.build_applicability.outputs.affected != 'false' }}
|
|
350
|
+
env:
|
|
351
|
+
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET || 'code-foundry-ci-placeholder-0123456789' }}
|
|
352
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci build
|
|
353
|
+
# --- Performance execute ---
|
|
354
|
+
- name: Performance
|
|
355
|
+
id: performance_execute
|
|
356
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.performance_applicability.outputs.applicable == 'true' && steps.performance_applicability.outputs.affected != 'false' }}
|
|
357
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci performance
|
|
358
|
+
# --- Smoke execute ---
|
|
359
|
+
- name: Smoke
|
|
360
|
+
id: smoke_execute
|
|
361
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.smoke_applicability.outputs.applicable == 'true' && steps.smoke_applicability.outputs.affected != 'false' }}
|
|
362
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci smoke
|
|
363
|
+
# --- Eval execute ---
|
|
364
|
+
- name: Eval
|
|
365
|
+
id: eval_execute
|
|
366
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.eval_applicability.outputs.applicable == 'true' && steps.eval_applicability.outputs.affected != 'false' }}
|
|
367
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci eval
|
|
368
|
+
# --- Lint execute ---
|
|
369
|
+
- name: Lint
|
|
370
|
+
id: lint_execute
|
|
371
|
+
if: ${{ !cancelled() && steps.lint_applicability.outputs.applicable == 'true' && steps.lint_applicability.outputs.affected != 'false' }}
|
|
372
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci lint
|
|
373
|
+
# --- Integration execute ---
|
|
374
|
+
- name: Integration
|
|
375
|
+
id: integration_execute
|
|
376
|
+
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.integration_applicability.outputs.applicable == 'true' && steps.integration_applicability.outputs.affected != 'false' }}
|
|
377
|
+
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci integration
|
|
378
|
+
- name: Retain format task receipt
|
|
379
|
+
if: >-
|
|
380
|
+
always() &&
|
|
381
|
+
(steps.format_execute.outcome == 'success' || steps.format_execute.outcome == 'failure' ||
|
|
382
|
+
steps.format_applicability.outputs.applicable == 'false' || steps.format_applicability.outputs.affected == 'false') &&
|
|
383
|
+
hashFiles('.code-foundry/results/format.json') != ''
|
|
384
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
385
|
+
with:
|
|
386
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-format
|
|
387
|
+
path: .code-foundry/results/format.json
|
|
388
|
+
include-hidden-files: true
|
|
389
|
+
if-no-files-found: error
|
|
390
|
+
retention-days: 14
|
|
391
|
+
- name: Retain build task receipt
|
|
392
|
+
if: >-
|
|
393
|
+
always() &&
|
|
394
|
+
(steps.build_execute.outcome == 'success' || steps.build_execute.outcome == 'failure' ||
|
|
395
|
+
steps.build_applicability.outputs.applicable == 'false' || steps.build_applicability.outputs.affected == 'false') &&
|
|
396
|
+
hashFiles('.code-foundry/results/build.json') != ''
|
|
397
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
398
|
+
with:
|
|
399
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-build
|
|
400
|
+
path: .code-foundry/results/build.json
|
|
401
|
+
include-hidden-files: true
|
|
402
|
+
if-no-files-found: error
|
|
403
|
+
retention-days: 14
|
|
288
404
|
- name: Retain performance task receipt
|
|
289
405
|
if: >-
|
|
290
406
|
always() &&
|
|
@@ -315,37 +431,6 @@ jobs:
|
|
|
315
431
|
compression-level: 1
|
|
316
432
|
if-no-files-found: ignore
|
|
317
433
|
retention-days: 14
|
|
318
|
-
# --- Smoke lane (mirror of test.yml smoke; audit tier only) ---
|
|
319
|
-
- name: Detect smoke
|
|
320
|
-
id: smoke_applicability
|
|
321
|
-
if: ${{ !cancelled() && inputs.mode == 'audit' }}
|
|
322
|
-
env:
|
|
323
|
-
EVENT_NAME: ${{ github.event_name }}
|
|
324
|
-
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
325
|
-
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
326
|
-
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
327
|
-
BEFORE_SHA: ${{ github.event.before }}
|
|
328
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci task_profile smoke >> "$GITHUB_OUTPUT"
|
|
329
|
-
- name: Setup smoke
|
|
330
|
-
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.smoke_applicability.outputs.applicable == 'true' && steps.smoke_applicability.outputs.affected != 'false' }}
|
|
331
|
-
uses: ./.github/actions/setup
|
|
332
|
-
with:
|
|
333
|
-
install: true
|
|
334
|
-
install-javascript: ${{ steps.smoke_applicability.outputs.javascript == 'true' }}
|
|
335
|
-
install-python: ${{ steps.smoke_applicability.outputs.python == 'true' }}
|
|
336
|
-
install-rust: ${{ steps.smoke_applicability.outputs.rust == 'true' }}
|
|
337
|
-
cache-build: false
|
|
338
|
-
cache-environment: false
|
|
339
|
-
cache-save: ${{ github.event_name == 'push' }}
|
|
340
|
-
cache-packages: ${{ vars.REPO_FOUNDRY_CACHE_PACKAGES || 'auto' }}
|
|
341
|
-
task: smoke
|
|
342
|
-
task-javascript: ${{ steps.smoke_applicability.outputs.javascript }}
|
|
343
|
-
task-python: ${{ steps.smoke_applicability.outputs.python }}
|
|
344
|
-
task-rust: ${{ steps.smoke_applicability.outputs.rust }}
|
|
345
|
-
- name: Smoke
|
|
346
|
-
id: smoke_execute
|
|
347
|
-
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.smoke_applicability.outputs.applicable == 'true' && steps.smoke_applicability.outputs.affected != 'false' }}
|
|
348
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci smoke
|
|
349
434
|
- name: Retain smoke task receipt
|
|
350
435
|
if: >-
|
|
351
436
|
always() &&
|
|
@@ -360,30 +445,6 @@ jobs:
|
|
|
360
445
|
include-hidden-files: true
|
|
361
446
|
if-no-files-found: error
|
|
362
447
|
retention-days: 14
|
|
363
|
-
# --- Eval lane (mirror of eval.yml; audit tier only) ---
|
|
364
|
-
- name: Detect eval
|
|
365
|
-
id: eval_applicability
|
|
366
|
-
if: ${{ !cancelled() && inputs.mode == 'audit' }}
|
|
367
|
-
env:
|
|
368
|
-
EVENT_NAME: ${{ github.event_name }}
|
|
369
|
-
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
370
|
-
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
371
|
-
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
372
|
-
BEFORE_SHA: ${{ github.event.before }}
|
|
373
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run eval >> "$GITHUB_OUTPUT"
|
|
374
|
-
- name: Setup eval
|
|
375
|
-
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.eval_applicability.outputs.applicable == 'true' && steps.eval_applicability.outputs.affected != 'false' }}
|
|
376
|
-
uses: ./.github/actions/setup
|
|
377
|
-
with:
|
|
378
|
-
# Eval harnesses run through the repository's own package scripts and
|
|
379
|
-
# need their dependencies installed before the task executes.
|
|
380
|
-
install: 'true'
|
|
381
|
-
cache-build: 'true'
|
|
382
|
-
task: eval
|
|
383
|
-
- name: Eval
|
|
384
|
-
id: eval_execute
|
|
385
|
-
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.eval_applicability.outputs.applicable == 'true' && steps.eval_applicability.outputs.affected != 'false' }}
|
|
386
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci eval
|
|
387
448
|
- name: Retain eval task receipt
|
|
388
449
|
if: >-
|
|
389
450
|
always() &&
|
|
@@ -412,59 +473,11 @@ jobs:
|
|
|
412
473
|
eval-results/summary.json
|
|
413
474
|
if-no-files-found: error
|
|
414
475
|
retention-days: 14
|
|
415
|
-
|
|
416
|
-
lint:
|
|
417
|
-
name: Lint
|
|
418
|
-
if: vars.CI_BILLING_PAUSED != 'true'
|
|
419
|
-
runs-on: ${{ inputs.ci-runner }}
|
|
420
|
-
timeout-minutes: 30
|
|
421
|
-
steps:
|
|
422
|
-
- name: Checkout
|
|
423
|
-
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
424
|
-
with:
|
|
425
|
-
persist-credentials: false
|
|
426
|
-
- name: Runtime
|
|
427
|
-
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
428
|
-
with:
|
|
429
|
-
persist-credentials: false
|
|
430
|
-
repository: ${{ inputs.runtime-repository }}
|
|
431
|
-
ref: ${{ inputs.runtime-ref }}
|
|
432
|
-
path: .github/.code-foundry
|
|
433
|
-
sparse-checkout: |
|
|
434
|
-
.github/actions
|
|
435
|
-
src/lib
|
|
436
|
-
src/runtime-core.mjs
|
|
437
|
-
src/runtime.mjs
|
|
438
|
-
- name: Install runtime
|
|
439
|
-
run: |
|
|
440
|
-
mkdir -p .github/actions
|
|
441
|
-
mv .github/.code-foundry "$RUNNER_TEMP/code-foundry"
|
|
442
|
-
cp -R "$RUNNER_TEMP/code-foundry/.github/actions/." .github/actions/
|
|
443
|
-
- name: Detect
|
|
444
|
-
id: applicability
|
|
445
|
-
env:
|
|
446
|
-
EVENT_NAME: ${{ github.event_name }}
|
|
447
|
-
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
448
|
-
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
449
|
-
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
450
|
-
BEFORE_SHA: ${{ github.event.before }}
|
|
451
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci should_run lint >> "$GITHUB_OUTPUT"
|
|
452
|
-
- name: Setup
|
|
453
|
-
if: steps.applicability.outputs.applicable == 'true' && steps.applicability.outputs.affected != 'false'
|
|
454
|
-
uses: ./.github/actions/setup
|
|
455
|
-
with:
|
|
456
|
-
install: 'true'
|
|
457
|
-
cache-lint: 'true'
|
|
458
|
-
task: lint
|
|
459
|
-
- name: Lint
|
|
460
|
-
id: execute
|
|
461
|
-
if: steps.applicability.outputs.applicable == 'true' && steps.applicability.outputs.affected != 'false'
|
|
462
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci lint
|
|
463
|
-
- name: Retain task receipt
|
|
476
|
+
- name: Retain lint task receipt
|
|
464
477
|
if: >-
|
|
465
478
|
always() &&
|
|
466
|
-
(steps.
|
|
467
|
-
steps.
|
|
479
|
+
(steps.lint_execute.outcome == 'success' || steps.lint_execute.outcome == 'failure' ||
|
|
480
|
+
steps.lint_applicability.outputs.applicable == 'false' || steps.lint_applicability.outputs.affected == 'false') &&
|
|
468
481
|
hashFiles('.code-foundry/results/lint.json') != ''
|
|
469
482
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
470
483
|
with:
|
|
@@ -473,7 +486,20 @@ jobs:
|
|
|
473
486
|
include-hidden-files: true
|
|
474
487
|
if-no-files-found: error
|
|
475
488
|
retention-days: 14
|
|
476
|
-
|
|
489
|
+
- name: Retain integration task receipt
|
|
490
|
+
if: >-
|
|
491
|
+
always() &&
|
|
492
|
+
inputs.mode == 'audit' &&
|
|
493
|
+
(steps.integration_execute.outcome == 'success' || steps.integration_execute.outcome == 'failure' ||
|
|
494
|
+
steps.integration_applicability.outputs.applicable == 'false' || steps.integration_applicability.outputs.affected == 'false') &&
|
|
495
|
+
hashFiles('.code-foundry/results/integration.json') != ''
|
|
496
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
497
|
+
with:
|
|
498
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-integration
|
|
499
|
+
path: .code-foundry/results/integration.json
|
|
500
|
+
include-hidden-files: true
|
|
501
|
+
if-no-files-found: error
|
|
502
|
+
retention-days: 14
|
|
477
503
|
type-check:
|
|
478
504
|
name: Type-Check
|
|
479
505
|
if: vars.CI_BILLING_PAUSED != 'true'
|
|
@@ -621,76 +647,6 @@ jobs:
|
|
|
621
647
|
if-no-files-found: ignore
|
|
622
648
|
retention-days: 14
|
|
623
649
|
|
|
624
|
-
integration:
|
|
625
|
-
name: Integration
|
|
626
|
-
if: vars.CI_BILLING_PAUSED != 'true' && inputs.mode == 'audit'
|
|
627
|
-
runs-on: ${{ inputs.test-runner }}
|
|
628
|
-
timeout-minutes: 30
|
|
629
|
-
steps:
|
|
630
|
-
- name: Checkout
|
|
631
|
-
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
632
|
-
with:
|
|
633
|
-
persist-credentials: false
|
|
634
|
-
fetch-depth: 2
|
|
635
|
-
- name: Runtime
|
|
636
|
-
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
637
|
-
with:
|
|
638
|
-
persist-credentials: false
|
|
639
|
-
repository: ${{ inputs.runtime-repository }}
|
|
640
|
-
ref: ${{ inputs.runtime-ref }}
|
|
641
|
-
path: .github/.code-foundry
|
|
642
|
-
sparse-checkout: |
|
|
643
|
-
.github/actions
|
|
644
|
-
src/lib
|
|
645
|
-
src/runtime-core.mjs
|
|
646
|
-
src/runtime.mjs
|
|
647
|
-
- name: Install runtime
|
|
648
|
-
run: |
|
|
649
|
-
mkdir -p .github/actions
|
|
650
|
-
mv .github/.code-foundry "$RUNNER_TEMP/code-foundry"
|
|
651
|
-
cp -R "$RUNNER_TEMP/code-foundry/.github/actions/." .github/actions/
|
|
652
|
-
- name: Detect
|
|
653
|
-
id: applicability
|
|
654
|
-
env:
|
|
655
|
-
EVENT_NAME: ${{ github.event_name }}
|
|
656
|
-
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
657
|
-
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
658
|
-
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
659
|
-
BEFORE_SHA: ${{ github.event.before }}
|
|
660
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci task_profile integration >> "$GITHUB_OUTPUT"
|
|
661
|
-
- name: Setup
|
|
662
|
-
if: steps.applicability.outputs.applicable == 'true' && steps.applicability.outputs.affected != 'false'
|
|
663
|
-
uses: ./.github/actions/setup
|
|
664
|
-
with:
|
|
665
|
-
install: true
|
|
666
|
-
install-javascript: ${{ steps.applicability.outputs.javascript == 'true' }}
|
|
667
|
-
install-python: ${{ steps.applicability.outputs.python == 'true' }}
|
|
668
|
-
install-rust: ${{ steps.applicability.outputs.rust == 'true' }}
|
|
669
|
-
cache-build: ${{ steps.applicability.outputs.rust == 'true' }}
|
|
670
|
-
cache-environment: false
|
|
671
|
-
cache-save: ${{ github.event_name == 'push' }}
|
|
672
|
-
task: integration
|
|
673
|
-
task-javascript: ${{ steps.applicability.outputs.javascript }}
|
|
674
|
-
task-python: ${{ steps.applicability.outputs.python }}
|
|
675
|
-
task-rust: ${{ steps.applicability.outputs.rust }}
|
|
676
|
-
- name: Integration
|
|
677
|
-
id: execute
|
|
678
|
-
if: steps.applicability.outputs.applicable == 'true' && steps.applicability.outputs.affected != 'false'
|
|
679
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci integration
|
|
680
|
-
- name: Retain task receipt
|
|
681
|
-
if: >-
|
|
682
|
-
always() &&
|
|
683
|
-
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
684
|
-
steps.applicability.outputs.applicable == 'false' || steps.applicability.outputs.affected == 'false') &&
|
|
685
|
-
hashFiles('.code-foundry/results/integration.json') != ''
|
|
686
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
687
|
-
with:
|
|
688
|
-
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-integration
|
|
689
|
-
path: .code-foundry/results/integration.json
|
|
690
|
-
include-hidden-files: true
|
|
691
|
-
if-no-files-found: error
|
|
692
|
-
retention-days: 14
|
|
693
|
-
|
|
694
650
|
e2e:
|
|
695
651
|
name: E2E
|
|
696
652
|
if: vars.CI_BILLING_PAUSED != 'true' && inputs.mode == 'audit'
|
|
@@ -1113,7 +1069,7 @@ jobs:
|
|
|
1113
1069
|
# evaluateValidationGate's mode truth table is reused unchanged.
|
|
1114
1070
|
gate:
|
|
1115
1071
|
name: Gate
|
|
1116
|
-
needs: [fast-lanes,
|
|
1072
|
+
needs: [fast-lanes, type-check, unit, e2e, audit, codeql]
|
|
1117
1073
|
if: vars.CI_BILLING_PAUSED != 'true' && always()
|
|
1118
1074
|
runs-on: ubuntu-slim
|
|
1119
1075
|
timeout-minutes: 10
|
|
@@ -1121,12 +1077,12 @@ jobs:
|
|
|
1121
1077
|
FOUNDRY_MODE: ${{ inputs.mode }}
|
|
1122
1078
|
# CI category: lint and type-check always run; the merged fast-lanes job
|
|
1123
1079
|
# carries the format and build lanes.
|
|
1124
|
-
FOUNDRY_CI: ${{ (needs.
|
|
1080
|
+
FOUNDRY_CI: ${{ (needs.type-check.result != 'success' && needs.type-check.result) || (needs.fast-lanes.result != 'success' && needs.fast-lanes.result) || 'success' }}
|
|
1125
1081
|
# Test category: unit always runs and must succeed; integration and e2e
|
|
1126
1082
|
# are audit-tier jobs whose expected skip on fast/release is not a
|
|
1127
1083
|
# failure; the merged fast-lanes job carries performance, smoke, and
|
|
1128
1084
|
# eval-mode lanes, so its result joins the category too.
|
|
1129
|
-
FOUNDRY_TEST: ${{ needs.unit.result == 'success' && needs.fast-lanes.result == 'success' && (needs.
|
|
1085
|
+
FOUNDRY_TEST: ${{ needs.unit.result == 'success' && needs.fast-lanes.result == 'success' && (needs.e2e.result == 'success' || needs.e2e.result == 'skipped') && 'success' || ((needs.e2e.result != 'success' && needs.e2e.result != 'skipped' && needs.e2e.result) || (needs.unit.result != 'success' && needs.unit.result) || (needs.fast-lanes.result != 'success' && needs.fast-lanes.result) || 'failure') }}
|
|
1130
1086
|
FOUNDRY_SECURITY: ${{ needs.audit.result }}
|
|
1131
1087
|
# This orchestrator runs CodeQL only when the consumer's canonical
|
|
1132
1088
|
# configuration enables it; otherwise the unavailability decision is
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.46.1](https://github.com/0xPlayerOne/code-foundry/compare/v1.46.0...v1.46.1) (2026-10-07)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **qualification:** skip parallel-syntax files until actionlint supports them ([#740](https://github.com/0xPlayerOne/code-foundry/issues/740)) ([db98c7f](https://github.com/0xPlayerOne/code-foundry/commit/db98c7f40cae080cdc9dcab7baac4976e5e0656e))
|
|
9
|
+
|
|
10
|
+
## [1.46.0](https://github.com/0xPlayerOne/code-foundry/compare/v1.45.2...v1.46.0) (2026-10-07)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **billing:** run fast-lane executes concurrently ([#738](https://github.com/0xPlayerOne/code-foundry/issues/738)) ([b40e82a](https://github.com/0xPlayerOne/code-foundry/commit/b40e82a0709b288a8be46998cfdc8b909f92c23c))
|
|
16
|
+
|
|
3
17
|
## [1.45.2](https://github.com/0xPlayerOne/code-foundry/compare/v1.45.1...v1.45.2) (2026-10-06)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -126,28 +140,9 @@
|
|
|
126
140
|
|
|
127
141
|
* release-batching ([#700](https://github.com/0xPlayerOne/code-foundry/issues/700)) ([3dd5c5f](https://github.com/0xPlayerOne/code-foundry/commit/3dd5c5fd50883608baa3e2f9daef6b8aa83f269f))
|
|
128
142
|
|
|
129
|
-
## [1.42.0](https://github.com/0xPlayerOne/code-foundry/compare/v1.41.0...v1.42.0) (2026-10-02)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
### Features
|
|
133
|
-
|
|
134
|
-
* **validation:** shard the managed E2E lane via e2e_shards ([#697](https://github.com/0xPlayerOne/code-foundry/issues/697)) ([edb20b4](https://github.com/0xPlayerOne/code-foundry/commit/edb20b4e32e2055bf22e6f6f94b51f234a24687d))
|
|
135
|
-
|
|
136
|
-
## [1.41.0](https://github.com/0xPlayerOne/code-foundry/compare/v1.40.0...v1.41.0) (2026-10-02)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
### Features
|
|
140
|
-
|
|
141
|
-
* **validation:** skip default-branch CodeQL on release-please merges ([#694](https://github.com/0xPlayerOne/code-foundry/issues/694)) ([25fc22e](https://github.com/0xPlayerOne/code-foundry/commit/25fc22e6d4b76f0b7e06601f6dc420085949f127))
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
### Bug Fixes
|
|
145
|
-
|
|
146
|
-
* give the release artifact budgets several releases of headroom ([#696](https://github.com/0xPlayerOne/code-foundry/issues/696)) ([a504607](https://github.com/0xPlayerOne/code-foundry/commit/a504607e16f097a5075191fd24cb26953b06a340))
|
|
147
|
-
|
|
148
143
|
<!-- code-foundry: packaged changelog -->
|
|
149
144
|
|
|
150
145
|
---
|
|
151
146
|
|
|
152
|
-
This packaged changelog lists the 20 most recent releases;
|
|
147
|
+
This packaged changelog lists the 20 most recent releases; 236 older releases are omitted to keep the package small.
|
|
153
148
|
See the [full changelog](https://github.com/0xPlayerOne/code-foundry/blob/main/CHANGELOG.md) for the complete history.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "code-foundry",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.46.1",
|
|
4
4
|
"description": "A fast, language-aware repository factory for agent-ready workflows, testing, security, and release automation.",
|
|
5
5
|
"homepage": "https://github.com/0xPlayerOne/code-foundry#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -157,8 +157,16 @@ function lintContracts(consumer, candidate, destination, actionlint, version) {
|
|
|
157
157
|
paths.push(target)
|
|
158
158
|
}
|
|
159
159
|
// Check all candidate callees as well as rendered callers, without executing them.
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
// actionlint v1.7.12 (still the latest release as of 2026-10-07) predates
|
|
161
|
+
// the June 2026 step parallelism keywords (background/wait/wait-all/
|
|
162
|
+
// cancel/parallel), so files using them are excluded from this pass until
|
|
163
|
+
// actionlint ships support — GitHub's own loader accepts the syntax, which
|
|
164
|
+
// is verified by live runs and pinned in test/billing-lanes.test.mjs.
|
|
165
|
+
// Restore the removal of this exclusion when rhysd/actionlint releases
|
|
166
|
+
// post-parallel support.
|
|
167
|
+
const actionlintPendingParallelSyntax = new Set(['validation-billing.yml'])
|
|
168
|
+
const workflows = readdirSync(join(destination, '.github/workflows')).filter(
|
|
169
|
+
(name) => /\.ya?ml$/.test(name) && !actionlintPendingParallelSyntax.has(name)
|
|
162
170
|
)
|
|
163
171
|
run(
|
|
164
172
|
actionlint,
|