code-foundry 1.45.2 → 1.46.2
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 +253 -292
- package/CHANGELOG.md +22 -27
- 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,51 +289,6 @@ 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: Performance
|
|
285
|
-
id: performance_execute
|
|
286
|
-
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.performance_applicability.outputs.applicable == 'true' && steps.performance_applicability.outputs.affected != 'false' }}
|
|
287
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci performance
|
|
288
|
-
- name: Retain performance task receipt
|
|
289
|
-
if: >-
|
|
290
|
-
always() &&
|
|
291
|
-
inputs.mode == 'audit' &&
|
|
292
|
-
(steps.performance_execute.outcome == 'success' || steps.performance_execute.outcome == 'failure' ||
|
|
293
|
-
steps.performance_applicability.outputs.applicable == 'false' || steps.performance_applicability.outputs.affected == 'false') &&
|
|
294
|
-
hashFiles('.code-foundry/results/performance.json') != ''
|
|
295
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
296
|
-
with:
|
|
297
|
-
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-performance
|
|
298
|
-
path: .code-foundry/results/performance.json
|
|
299
|
-
include-hidden-files: true
|
|
300
|
-
if-no-files-found: error
|
|
301
|
-
retention-days: 14
|
|
302
|
-
- name: Upload performance results
|
|
303
|
-
if: >-
|
|
304
|
-
always() &&
|
|
305
|
-
inputs.mode == 'audit' &&
|
|
306
|
-
steps.performance_applicability.outputs.applicable == 'true' &&
|
|
307
|
-
hashFiles('artifacts/performance/**', 'performance-results.json', 'performance-results/**') != ''
|
|
308
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
309
|
-
with:
|
|
310
|
-
name: performance-${{ github.run_id }}
|
|
311
|
-
path: |
|
|
312
|
-
artifacts/performance/**
|
|
313
|
-
performance-results.json
|
|
314
|
-
performance-results/**
|
|
315
|
-
compression-level: 1
|
|
316
|
-
if-no-files-found: ignore
|
|
317
|
-
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
292
|
- name: Setup smoke
|
|
330
293
|
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.smoke_applicability.outputs.applicable == 'true' && steps.smoke_applicability.outputs.affected != 'false' }}
|
|
331
294
|
uses: ./.github/actions/setup
|
|
@@ -342,35 +305,6 @@ jobs:
|
|
|
342
305
|
task-javascript: ${{ steps.smoke_applicability.outputs.javascript }}
|
|
343
306
|
task-python: ${{ steps.smoke_applicability.outputs.python }}
|
|
344
307
|
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
|
-
- name: Retain smoke task receipt
|
|
350
|
-
if: >-
|
|
351
|
-
always() &&
|
|
352
|
-
inputs.mode == 'audit' &&
|
|
353
|
-
(steps.smoke_execute.outcome == 'success' || steps.smoke_execute.outcome == 'failure' ||
|
|
354
|
-
steps.smoke_applicability.outputs.applicable == 'false' || steps.smoke_applicability.outputs.affected == 'false') &&
|
|
355
|
-
hashFiles('.code-foundry/results/smoke.json') != ''
|
|
356
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
357
|
-
with:
|
|
358
|
-
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-smoke
|
|
359
|
-
path: .code-foundry/results/smoke.json
|
|
360
|
-
include-hidden-files: true
|
|
361
|
-
if-no-files-found: error
|
|
362
|
-
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
308
|
- name: Setup eval
|
|
375
309
|
if: ${{ !cancelled() && inputs.mode == 'audit' && steps.eval_applicability.outputs.applicable == 'true' && steps.eval_applicability.outputs.affected != 'false' }}
|
|
376
310
|
uses: ./.github/actions/setup
|
|
@@ -380,99 +314,196 @@ jobs:
|
|
|
380
314
|
install: 'true'
|
|
381
315
|
cache-build: 'true'
|
|
382
316
|
task: eval
|
|
383
|
-
- name:
|
|
384
|
-
|
|
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
|
-
- name: Retain eval task receipt
|
|
388
|
-
if: >-
|
|
389
|
-
always() &&
|
|
390
|
-
inputs.mode == 'audit' &&
|
|
391
|
-
(steps.eval_execute.outcome == 'success' || steps.eval_execute.outcome == 'failure' ||
|
|
392
|
-
steps.eval_applicability.outputs.applicable == 'false' || steps.eval_applicability.outputs.affected == 'false') &&
|
|
393
|
-
hashFiles('.code-foundry/results/eval.json') != ''
|
|
394
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
395
|
-
with:
|
|
396
|
-
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-eval
|
|
397
|
-
path: .code-foundry/results/eval.json
|
|
398
|
-
include-hidden-files: true
|
|
399
|
-
if-no-files-found: error
|
|
400
|
-
retention-days: 14
|
|
401
|
-
- name: Retain eval report
|
|
402
|
-
if: >-
|
|
403
|
-
always() &&
|
|
404
|
-
inputs.mode == 'audit' &&
|
|
405
|
-
steps.eval_execute.outcome == 'failure' &&
|
|
406
|
-
hashFiles('eval-results/result.json') != ''
|
|
407
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
408
|
-
with:
|
|
409
|
-
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-eval-report
|
|
410
|
-
path: |
|
|
411
|
-
eval-results/result.json
|
|
412
|
-
eval-results/summary.json
|
|
413
|
-
if-no-files-found: error
|
|
414
|
-
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'
|
|
317
|
+
- name: Setup lint
|
|
318
|
+
if: ${{ !cancelled() && steps.lint_applicability.outputs.applicable == 'true' && steps.lint_applicability.outputs.affected != 'false' }}
|
|
454
319
|
uses: ./.github/actions/setup
|
|
455
320
|
with:
|
|
456
321
|
install: 'true'
|
|
457
322
|
cache-lint: 'true'
|
|
458
323
|
task: lint
|
|
459
|
-
- name:
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci lint
|
|
463
|
-
- name: Retain task receipt
|
|
464
|
-
if: >-
|
|
465
|
-
always() &&
|
|
466
|
-
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
467
|
-
steps.applicability.outputs.applicable == 'false' || steps.applicability.outputs.affected == 'false') &&
|
|
468
|
-
hashFiles('.code-foundry/results/lint.json') != ''
|
|
469
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
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
|
|
470
327
|
with:
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
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
|
+
# Receipts are independent artifact uploads; a second parallel
|
|
379
|
+
# group joins them instead of serializing 8+ uploads after the
|
|
380
|
+
# executes.
|
|
381
|
+
- parallel:
|
|
382
|
+
- name: Retain format task receipt
|
|
383
|
+
if: >-
|
|
384
|
+
always() &&
|
|
385
|
+
(steps.format_execute.outcome == 'success' || steps.format_execute.outcome == 'failure' ||
|
|
386
|
+
steps.format_applicability.outputs.applicable == 'false' || steps.format_applicability.outputs.affected == 'false') &&
|
|
387
|
+
hashFiles('.code-foundry/results/format.json') != ''
|
|
388
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
389
|
+
with:
|
|
390
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-format
|
|
391
|
+
path: .code-foundry/results/format.json
|
|
392
|
+
include-hidden-files: true
|
|
393
|
+
if-no-files-found: error
|
|
394
|
+
retention-days: 14
|
|
395
|
+
- name: Retain build task receipt
|
|
396
|
+
if: >-
|
|
397
|
+
always() &&
|
|
398
|
+
(steps.build_execute.outcome == 'success' || steps.build_execute.outcome == 'failure' ||
|
|
399
|
+
steps.build_applicability.outputs.applicable == 'false' || steps.build_applicability.outputs.affected == 'false') &&
|
|
400
|
+
hashFiles('.code-foundry/results/build.json') != ''
|
|
401
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
402
|
+
with:
|
|
403
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-build
|
|
404
|
+
path: .code-foundry/results/build.json
|
|
405
|
+
include-hidden-files: true
|
|
406
|
+
if-no-files-found: error
|
|
407
|
+
retention-days: 14
|
|
408
|
+
- name: Retain performance task receipt
|
|
409
|
+
if: >-
|
|
410
|
+
always() &&
|
|
411
|
+
inputs.mode == 'audit' &&
|
|
412
|
+
(steps.performance_execute.outcome == 'success' || steps.performance_execute.outcome == 'failure' ||
|
|
413
|
+
steps.performance_applicability.outputs.applicable == 'false' || steps.performance_applicability.outputs.affected == 'false') &&
|
|
414
|
+
hashFiles('.code-foundry/results/performance.json') != ''
|
|
415
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
416
|
+
with:
|
|
417
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-performance
|
|
418
|
+
path: .code-foundry/results/performance.json
|
|
419
|
+
include-hidden-files: true
|
|
420
|
+
if-no-files-found: error
|
|
421
|
+
retention-days: 14
|
|
422
|
+
- name: Upload performance results
|
|
423
|
+
if: >-
|
|
424
|
+
always() &&
|
|
425
|
+
inputs.mode == 'audit' &&
|
|
426
|
+
steps.performance_applicability.outputs.applicable == 'true' &&
|
|
427
|
+
hashFiles('artifacts/performance/**', 'performance-results.json', 'performance-results/**') != ''
|
|
428
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
429
|
+
with:
|
|
430
|
+
name: performance-${{ github.run_id }}
|
|
431
|
+
path: |
|
|
432
|
+
artifacts/performance/**
|
|
433
|
+
performance-results.json
|
|
434
|
+
performance-results/**
|
|
435
|
+
compression-level: 1
|
|
436
|
+
if-no-files-found: ignore
|
|
437
|
+
retention-days: 14
|
|
438
|
+
- name: Retain smoke task receipt
|
|
439
|
+
if: >-
|
|
440
|
+
always() &&
|
|
441
|
+
inputs.mode == 'audit' &&
|
|
442
|
+
(steps.smoke_execute.outcome == 'success' || steps.smoke_execute.outcome == 'failure' ||
|
|
443
|
+
steps.smoke_applicability.outputs.applicable == 'false' || steps.smoke_applicability.outputs.affected == 'false') &&
|
|
444
|
+
hashFiles('.code-foundry/results/smoke.json') != ''
|
|
445
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
446
|
+
with:
|
|
447
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-smoke
|
|
448
|
+
path: .code-foundry/results/smoke.json
|
|
449
|
+
include-hidden-files: true
|
|
450
|
+
if-no-files-found: error
|
|
451
|
+
retention-days: 14
|
|
452
|
+
- name: Retain eval task receipt
|
|
453
|
+
if: >-
|
|
454
|
+
always() &&
|
|
455
|
+
inputs.mode == 'audit' &&
|
|
456
|
+
(steps.eval_execute.outcome == 'success' || steps.eval_execute.outcome == 'failure' ||
|
|
457
|
+
steps.eval_applicability.outputs.applicable == 'false' || steps.eval_applicability.outputs.affected == 'false') &&
|
|
458
|
+
hashFiles('.code-foundry/results/eval.json') != ''
|
|
459
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
460
|
+
with:
|
|
461
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-eval
|
|
462
|
+
path: .code-foundry/results/eval.json
|
|
463
|
+
include-hidden-files: true
|
|
464
|
+
if-no-files-found: error
|
|
465
|
+
retention-days: 14
|
|
466
|
+
- name: Retain eval report
|
|
467
|
+
if: >-
|
|
468
|
+
always() &&
|
|
469
|
+
inputs.mode == 'audit' &&
|
|
470
|
+
steps.eval_execute.outcome == 'failure' &&
|
|
471
|
+
hashFiles('eval-results/result.json') != ''
|
|
472
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
473
|
+
with:
|
|
474
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-eval-report
|
|
475
|
+
path: |
|
|
476
|
+
eval-results/result.json
|
|
477
|
+
eval-results/summary.json
|
|
478
|
+
if-no-files-found: error
|
|
479
|
+
retention-days: 14
|
|
480
|
+
- name: Retain lint task receipt
|
|
481
|
+
if: >-
|
|
482
|
+
always() &&
|
|
483
|
+
(steps.lint_execute.outcome == 'success' || steps.lint_execute.outcome == 'failure' ||
|
|
484
|
+
steps.lint_applicability.outputs.applicable == 'false' || steps.lint_applicability.outputs.affected == 'false') &&
|
|
485
|
+
hashFiles('.code-foundry/results/lint.json') != ''
|
|
486
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
487
|
+
with:
|
|
488
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-lint
|
|
489
|
+
path: .code-foundry/results/lint.json
|
|
490
|
+
include-hidden-files: true
|
|
491
|
+
if-no-files-found: error
|
|
492
|
+
retention-days: 14
|
|
493
|
+
- name: Retain integration task receipt
|
|
494
|
+
if: >-
|
|
495
|
+
always() &&
|
|
496
|
+
inputs.mode == 'audit' &&
|
|
497
|
+
(steps.integration_execute.outcome == 'success' || steps.integration_execute.outcome == 'failure' ||
|
|
498
|
+
steps.integration_applicability.outputs.applicable == 'false' || steps.integration_applicability.outputs.affected == 'false') &&
|
|
499
|
+
hashFiles('.code-foundry/results/integration.json') != ''
|
|
500
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
501
|
+
with:
|
|
502
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-integration
|
|
503
|
+
path: .code-foundry/results/integration.json
|
|
504
|
+
include-hidden-files: true
|
|
505
|
+
if-no-files-found: error
|
|
506
|
+
retention-days: 14
|
|
476
507
|
|
|
477
508
|
type-check:
|
|
478
509
|
name: Type-Check
|
|
@@ -621,76 +652,6 @@ jobs:
|
|
|
621
652
|
if-no-files-found: ignore
|
|
622
653
|
retention-days: 14
|
|
623
654
|
|
|
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
655
|
e2e:
|
|
695
656
|
name: E2E
|
|
696
657
|
if: vars.CI_BILLING_PAUSED != 'true' && inputs.mode == 'audit'
|
|
@@ -1113,7 +1074,7 @@ jobs:
|
|
|
1113
1074
|
# evaluateValidationGate's mode truth table is reused unchanged.
|
|
1114
1075
|
gate:
|
|
1115
1076
|
name: Gate
|
|
1116
|
-
needs: [fast-lanes,
|
|
1077
|
+
needs: [fast-lanes, type-check, unit, e2e, audit, codeql]
|
|
1117
1078
|
if: vars.CI_BILLING_PAUSED != 'true' && always()
|
|
1118
1079
|
runs-on: ubuntu-slim
|
|
1119
1080
|
timeout-minutes: 10
|
|
@@ -1121,12 +1082,12 @@ jobs:
|
|
|
1121
1082
|
FOUNDRY_MODE: ${{ inputs.mode }}
|
|
1122
1083
|
# CI category: lint and type-check always run; the merged fast-lanes job
|
|
1123
1084
|
# carries the format and build lanes.
|
|
1124
|
-
FOUNDRY_CI: ${{ (needs.
|
|
1085
|
+
FOUNDRY_CI: ${{ (needs.type-check.result != 'success' && needs.type-check.result) || (needs.fast-lanes.result != 'success' && needs.fast-lanes.result) || 'success' }}
|
|
1125
1086
|
# Test category: unit always runs and must succeed; integration and e2e
|
|
1126
1087
|
# are audit-tier jobs whose expected skip on fast/release is not a
|
|
1127
1088
|
# failure; the merged fast-lanes job carries performance, smoke, and
|
|
1128
1089
|
# eval-mode lanes, so its result joins the category too.
|
|
1129
|
-
FOUNDRY_TEST: ${{ needs.unit.result == 'success' && needs.fast-lanes.result == 'success' && (needs.
|
|
1090
|
+
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
1091
|
FOUNDRY_SECURITY: ${{ needs.audit.result }}
|
|
1131
1092
|
# This orchestrator runs CodeQL only when the consumer's canonical
|
|
1132
1093
|
# configuration enables it; otherwise the unavailability decision is
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.46.2](https://github.com/0xPlayerOne/code-foundry/compare/v1.46.1...v1.46.2) (2026-10-07)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **billing:** join fast-lane receipts in a second parallel group ([#742](https://github.com/0xPlayerOne/code-foundry/issues/742)) ([c63a39c](https://github.com/0xPlayerOne/code-foundry/commit/c63a39cf5e236d6747bd85cf10b04bd10f690b11))
|
|
9
|
+
|
|
10
|
+
## [1.46.1](https://github.com/0xPlayerOne/code-foundry/compare/v1.46.0...v1.46.1) (2026-10-07)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **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))
|
|
16
|
+
|
|
17
|
+
## [1.46.0](https://github.com/0xPlayerOne/code-foundry/compare/v1.45.2...v1.46.0) (2026-10-07)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* **billing:** run fast-lane executes concurrently ([#738](https://github.com/0xPlayerOne/code-foundry/issues/738)) ([b40e82a](https://github.com/0xPlayerOne/code-foundry/commit/b40e82a0709b288a8be46998cfdc8b909f92c23c))
|
|
23
|
+
|
|
3
24
|
## [1.45.2](https://github.com/0xPlayerOne/code-foundry/compare/v1.45.1...v1.45.2) (2026-10-06)
|
|
4
25
|
|
|
5
26
|
|
|
@@ -119,35 +140,9 @@
|
|
|
119
140
|
|
|
120
141
|
* **release:** make batched publication and stable promotion reliable ([#703](https://github.com/0xPlayerOne/code-foundry/issues/703)) ([271731d](https://github.com/0xPlayerOne/code-foundry/commit/271731d8fac3bff42a99b3d5f4a774eccc0a7788))
|
|
121
142
|
|
|
122
|
-
## [1.43.0](https://github.com/0xPlayerOne/code-foundry/compare/v1.42.0...v1.43.0) (2026-10-03)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
### Features
|
|
126
|
-
|
|
127
|
-
* release-batching ([#700](https://github.com/0xPlayerOne/code-foundry/issues/700)) ([3dd5c5f](https://github.com/0xPlayerOne/code-foundry/commit/3dd5c5fd50883608baa3e2f9daef6b8aa83f269f))
|
|
128
|
-
|
|
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; 237 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.2",
|
|
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,
|