code-foundry 1.20.1 → 1.20.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/ci.yml
CHANGED
|
@@ -18,6 +18,11 @@ on:
|
|
|
18
18
|
required: false
|
|
19
19
|
type: string
|
|
20
20
|
default: ubuntu-latest
|
|
21
|
+
artifact-prefix:
|
|
22
|
+
description: Prefix for task receipts; use a unique value when calling this workflow more than once.
|
|
23
|
+
required: false
|
|
24
|
+
type: string
|
|
25
|
+
default: task-result
|
|
21
26
|
secrets:
|
|
22
27
|
TURBO_TOKEN:
|
|
23
28
|
required: false
|
|
@@ -86,8 +91,22 @@ jobs:
|
|
|
86
91
|
cache-build: 'false'
|
|
87
92
|
task: format
|
|
88
93
|
- name: Format
|
|
94
|
+
id: execute
|
|
89
95
|
if: steps.applicability.outputs.applicable == 'true'
|
|
90
96
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci format
|
|
97
|
+
- name: Retain task receipt
|
|
98
|
+
if: >-
|
|
99
|
+
always() &&
|
|
100
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
101
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
102
|
+
hashFiles('.code-foundry/results/format.json') != ''
|
|
103
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
104
|
+
with:
|
|
105
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-format
|
|
106
|
+
path: .code-foundry/results/format.json
|
|
107
|
+
include-hidden-files: true
|
|
108
|
+
if-no-files-found: error
|
|
109
|
+
retention-days: 14
|
|
91
110
|
|
|
92
111
|
lint:
|
|
93
112
|
name: Lint
|
|
@@ -126,8 +145,22 @@ jobs:
|
|
|
126
145
|
cache-lint: 'true'
|
|
127
146
|
task: lint
|
|
128
147
|
- name: Lint
|
|
148
|
+
id: execute
|
|
129
149
|
if: steps.applicability.outputs.applicable == 'true'
|
|
130
150
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci lint
|
|
151
|
+
- name: Retain task receipt
|
|
152
|
+
if: >-
|
|
153
|
+
always() &&
|
|
154
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
155
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
156
|
+
hashFiles('.code-foundry/results/lint.json') != ''
|
|
157
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
158
|
+
with:
|
|
159
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-lint
|
|
160
|
+
path: .code-foundry/results/lint.json
|
|
161
|
+
include-hidden-files: true
|
|
162
|
+
if-no-files-found: error
|
|
163
|
+
retention-days: 14
|
|
131
164
|
|
|
132
165
|
type-check:
|
|
133
166
|
name: Type-Check
|
|
@@ -166,8 +199,22 @@ jobs:
|
|
|
166
199
|
cache-build: 'true'
|
|
167
200
|
task: type_check
|
|
168
201
|
- name: Type-Check
|
|
202
|
+
id: execute
|
|
169
203
|
if: steps.applicability.outputs.applicable == 'true'
|
|
170
204
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci type_check
|
|
205
|
+
- name: Retain task receipt
|
|
206
|
+
if: >-
|
|
207
|
+
always() &&
|
|
208
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
209
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
210
|
+
hashFiles('.code-foundry/results/type_check.json') != ''
|
|
211
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
212
|
+
with:
|
|
213
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-type_check
|
|
214
|
+
path: .code-foundry/results/type_check.json
|
|
215
|
+
include-hidden-files: true
|
|
216
|
+
if-no-files-found: error
|
|
217
|
+
retention-days: 14
|
|
171
218
|
|
|
172
219
|
build:
|
|
173
220
|
name: Build
|
|
@@ -211,5 +258,19 @@ jobs:
|
|
|
211
258
|
cache-build: 'true'
|
|
212
259
|
task: build
|
|
213
260
|
- name: Build
|
|
261
|
+
id: execute
|
|
214
262
|
if: steps.applicability.outputs.applicable == 'true'
|
|
215
263
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci build
|
|
264
|
+
- name: Retain task receipt
|
|
265
|
+
if: >-
|
|
266
|
+
always() &&
|
|
267
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
268
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
269
|
+
hashFiles('.code-foundry/results/build.json') != ''
|
|
270
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
271
|
+
with:
|
|
272
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-build
|
|
273
|
+
path: .code-foundry/results/build.json
|
|
274
|
+
include-hidden-files: true
|
|
275
|
+
if-no-files-found: error
|
|
276
|
+
retention-days: 14
|
|
@@ -33,6 +33,11 @@ on:
|
|
|
33
33
|
required: false
|
|
34
34
|
type: boolean
|
|
35
35
|
default: false
|
|
36
|
+
artifact-prefix:
|
|
37
|
+
description: Prefix for task receipts; use a unique value when calling this workflow more than once.
|
|
38
|
+
required: false
|
|
39
|
+
type: string
|
|
40
|
+
default: task-result
|
|
36
41
|
secrets:
|
|
37
42
|
TURBO_TOKEN:
|
|
38
43
|
required: false
|
|
@@ -104,8 +109,22 @@ jobs:
|
|
|
104
109
|
task-python: ${{ steps.applicability.outputs.python }}
|
|
105
110
|
task-rust: ${{ steps.applicability.outputs.rust }}
|
|
106
111
|
- name: Unit
|
|
112
|
+
id: execute
|
|
107
113
|
if: steps.applicability.outputs.applicable == 'true'
|
|
108
114
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci unit
|
|
115
|
+
- name: Retain task receipt
|
|
116
|
+
if: >-
|
|
117
|
+
always() &&
|
|
118
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
119
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
120
|
+
hashFiles('.code-foundry/results/unit.json') != ''
|
|
121
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
122
|
+
with:
|
|
123
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-unit
|
|
124
|
+
path: .code-foundry/results/unit.json
|
|
125
|
+
include-hidden-files: true
|
|
126
|
+
if-no-files-found: error
|
|
127
|
+
retention-days: 14
|
|
109
128
|
- name: Upload coverage
|
|
110
129
|
if: >-
|
|
111
130
|
always() &&
|
|
@@ -171,8 +190,22 @@ jobs:
|
|
|
171
190
|
task-python: ${{ steps.applicability.outputs.python }}
|
|
172
191
|
task-rust: ${{ steps.applicability.outputs.rust }}
|
|
173
192
|
- name: Performance
|
|
193
|
+
id: execute
|
|
174
194
|
if: steps.applicability.outputs.applicable == 'true'
|
|
175
195
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci performance
|
|
196
|
+
- name: Retain task receipt
|
|
197
|
+
if: >-
|
|
198
|
+
always() &&
|
|
199
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
200
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
201
|
+
hashFiles('.code-foundry/results/performance.json') != ''
|
|
202
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
203
|
+
with:
|
|
204
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-performance
|
|
205
|
+
path: .code-foundry/results/performance.json
|
|
206
|
+
include-hidden-files: true
|
|
207
|
+
if-no-files-found: error
|
|
208
|
+
retention-days: 14
|
|
176
209
|
- name: Upload performance results
|
|
177
210
|
if: >-
|
|
178
211
|
always() &&
|
|
@@ -236,8 +269,22 @@ jobs:
|
|
|
236
269
|
task-python: ${{ steps.applicability.outputs.python }}
|
|
237
270
|
task-rust: ${{ steps.applicability.outputs.rust }}
|
|
238
271
|
- name: Integration
|
|
272
|
+
id: execute
|
|
239
273
|
if: steps.applicability.outputs.applicable == 'true'
|
|
240
274
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci integration
|
|
275
|
+
- name: Retain task receipt
|
|
276
|
+
if: >-
|
|
277
|
+
always() &&
|
|
278
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
279
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
280
|
+
hashFiles('.code-foundry/results/integration.json') != ''
|
|
281
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
282
|
+
with:
|
|
283
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-integration
|
|
284
|
+
path: .code-foundry/results/integration.json
|
|
285
|
+
include-hidden-files: true
|
|
286
|
+
if-no-files-found: error
|
|
287
|
+
retention-days: 14
|
|
241
288
|
|
|
242
289
|
e2e:
|
|
243
290
|
name: E2E
|
|
@@ -298,8 +345,22 @@ jobs:
|
|
|
298
345
|
task-python: ${{ steps.applicability.outputs.python }}
|
|
299
346
|
task-rust: ${{ steps.applicability.outputs.rust }}
|
|
300
347
|
- name: E2E
|
|
348
|
+
id: execute
|
|
301
349
|
if: steps.applicability.outputs.applicable == 'true'
|
|
302
350
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci e2e
|
|
351
|
+
- name: Retain task receipt
|
|
352
|
+
if: >-
|
|
353
|
+
always() &&
|
|
354
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
355
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
356
|
+
hashFiles('.code-foundry/results/e2e.json') != ''
|
|
357
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
358
|
+
with:
|
|
359
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-e2e
|
|
360
|
+
path: .code-foundry/results/e2e.json
|
|
361
|
+
include-hidden-files: true
|
|
362
|
+
if-no-files-found: error
|
|
363
|
+
retention-days: 14
|
|
303
364
|
|
|
304
365
|
smoke:
|
|
305
366
|
name: Smoke
|
|
@@ -348,5 +409,19 @@ jobs:
|
|
|
348
409
|
task-python: ${{ steps.applicability.outputs.python }}
|
|
349
410
|
task-rust: ${{ steps.applicability.outputs.rust }}
|
|
350
411
|
- name: Smoke
|
|
412
|
+
id: execute
|
|
351
413
|
if: steps.applicability.outputs.applicable == 'true'
|
|
352
414
|
run: node "$RUNNER_TEMP/code-foundry/src/runtime.mjs" ci smoke
|
|
415
|
+
- name: Retain task receipt
|
|
416
|
+
if: >-
|
|
417
|
+
always() &&
|
|
418
|
+
(steps.execute.outcome == 'success' || steps.execute.outcome == 'failure' ||
|
|
419
|
+
steps.applicability.outputs.applicable == 'false') &&
|
|
420
|
+
hashFiles('.code-foundry/results/smoke.json') != ''
|
|
421
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
422
|
+
with:
|
|
423
|
+
name: ${{ inputs.artifact-prefix }}-${{ github.run_id }}-${{ github.run_attempt }}-smoke
|
|
424
|
+
path: .code-foundry/results/smoke.json
|
|
425
|
+
include-hidden-files: true
|
|
426
|
+
if-no-files-found: error
|
|
427
|
+
retention-days: 14
|
|
@@ -62,6 +62,11 @@ on:
|
|
|
62
62
|
required: false
|
|
63
63
|
type: number
|
|
64
64
|
default: 1
|
|
65
|
+
artifact-prefix:
|
|
66
|
+
description: Prefix for task receipts; use a unique value when calling this workflow more than once.
|
|
67
|
+
required: false
|
|
68
|
+
type: string
|
|
69
|
+
default: task-result
|
|
65
70
|
secrets:
|
|
66
71
|
TURBO_TOKEN:
|
|
67
72
|
required: false
|
|
@@ -86,6 +91,7 @@ jobs:
|
|
|
86
91
|
runtime-repository: ${{ inputs.runtime-repository }}
|
|
87
92
|
runtime-ref: ${{ inputs.runtime-ref }}
|
|
88
93
|
runner: ${{ inputs.ci-runner }}
|
|
94
|
+
artifact-prefix: ${{ inputs.artifact-prefix }}
|
|
89
95
|
secrets:
|
|
90
96
|
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
91
97
|
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }}
|
|
@@ -101,6 +107,7 @@ jobs:
|
|
|
101
107
|
unit-runner: ${{ inputs.unit-runner }}
|
|
102
108
|
performance-runner: ${{ inputs.performance-runner }}
|
|
103
109
|
unit-only: ${{ inputs.mode == 'fast' }}
|
|
110
|
+
artifact-prefix: ${{ inputs.artifact-prefix }}
|
|
104
111
|
secrets:
|
|
105
112
|
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
106
113
|
|
|
@@ -62,6 +62,11 @@ on:
|
|
|
62
62
|
required: false
|
|
63
63
|
type: number
|
|
64
64
|
default: 1
|
|
65
|
+
artifact-prefix:
|
|
66
|
+
description: Prefix for task receipts; use a unique value when calling this workflow more than once.
|
|
67
|
+
required: false
|
|
68
|
+
type: string
|
|
69
|
+
default: task-result
|
|
65
70
|
secrets:
|
|
66
71
|
TURBO_TOKEN:
|
|
67
72
|
required: false
|
|
@@ -86,6 +91,7 @@ jobs:
|
|
|
86
91
|
runtime-repository: ${{ inputs.runtime-repository }}
|
|
87
92
|
runtime-ref: ${{ inputs.runtime-ref }}
|
|
88
93
|
runner: ${{ inputs.ci-runner }}
|
|
94
|
+
artifact-prefix: ${{ inputs.artifact-prefix }}
|
|
89
95
|
secrets:
|
|
90
96
|
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
91
97
|
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }}
|
|
@@ -101,6 +107,7 @@ jobs:
|
|
|
101
107
|
unit-runner: ${{ inputs.unit-runner }}
|
|
102
108
|
performance-runner: ${{ inputs.performance-runner }}
|
|
103
109
|
unit-only: ${{ inputs.mode == 'fast' }}
|
|
110
|
+
artifact-prefix: ${{ inputs.artifact-prefix }}
|
|
104
111
|
secrets:
|
|
105
112
|
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
106
113
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.20.2](https://github.com/0xPlayerOne/code-foundry/compare/v1.20.1...v1.20.2) (2026-09-09)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **ci:** retain scoped task receipts across success and failure ([#557](https://github.com/0xPlayerOne/code-foundry/issues/557)) ([ee0fe45](https://github.com/0xPlayerOne/code-foundry/commit/ee0fe45e821621e3193831d70a533077b7bcf8a9))
|
|
9
|
+
|
|
3
10
|
## [1.20.1](https://github.com/0xPlayerOne/code-foundry/compare/v1.20.0...v1.20.1) (2026-09-09)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -60,9 +60,29 @@ appear in the GitHub job summary when `GITHUB_STEP_SUMMARY` is available.
|
|
|
60
60
|
The recorded command is the delegated executor invocation, not a transcript of
|
|
61
61
|
all nested package scripts. No environment variables or captured command output
|
|
62
62
|
are copied into the report. Repository scripts remain responsible for sanitizing
|
|
63
|
-
their own logs.
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
their own logs and command arguments. Receipts are diagnostics, not signatures,
|
|
64
|
+
attestations, or authorization to publish or merge.
|
|
65
|
+
|
|
66
|
+
The shared CI and Test workflows retain each executed task's receipt, including
|
|
67
|
+
failure, and discovery receipts for explicitly skipped optional tasks. Each upload
|
|
68
|
+
selects exactly `.code-foundry/results/<task>.json`, not the broader hidden
|
|
69
|
+
directory. The artifact name is `task-result-RUN_ID-ATTEMPT-TASK` and retention is
|
|
70
|
+
14 days. The optional `artifact-prefix` input is exposed by CI, Test, and both
|
|
71
|
+
validation orchestrators; it disambiguates multiple invocations in the same run
|
|
72
|
+
when forwarded to the leaf workflows. Use a different prefix for each such
|
|
73
|
+
invocation. Existing coverage/performance artifact uploads are unchanged.
|
|
74
|
+
|
|
75
|
+
Missing receipts from an older runtime, a discovery/setup failure, or termination
|
|
76
|
+
before the runtime writes its report do not create an artifact. Missing evidence
|
|
77
|
+
is not success: inspect the task's actual outcome and the validation gate. Uploads
|
|
78
|
+
run after success or failure and do not suppress a failing task exit. When an
|
|
79
|
+
existing receipt disappears during upload, the upload itself fails. A job skipped
|
|
80
|
+
by the workflow's tier or billing policy cannot create a receipt.
|
|
81
|
+
|
|
82
|
+
These files describe repository-controlled execution and can include paths and
|
|
83
|
+
script-derived reasons. Do not put credentials in command arguments. Artifact
|
|
84
|
+
access follows repository/Actions visibility; receipt retention does not provide
|
|
85
|
+
a sandbox or independently validate repository-authored evidence.
|
|
66
86
|
|
|
67
87
|
`node src/runtime.mjs ci plan` prints a JSON discovery plan without executing
|
|
68
88
|
checks. Discovery validates every required task before reusable workflows select
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "code-foundry",
|
|
3
|
-
"version": "1.20.
|
|
3
|
+
"version": "1.20.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": {
|