@kungfu-tech/buildchain 2.14.2 → 2.14.3-alpha.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/dist/site/agent-index.json +2 -0
- package/dist/site/artifact-schemas.json +4 -0
- package/dist/site/badge-endpoint-registry.json +320 -0
- package/dist/site/badges/v1/kfd-5/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-5/declared.json +14 -0
- package/dist/site/badges/v1/kfd-5/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-5/draft.json +14 -0
- package/dist/site/badges/v1/kfd-5/failed.json +14 -0
- package/dist/site/badges/v1/kfd-5/missing.json +14 -0
- package/dist/site/badges/v1/kfd-5/passed.json +14 -0
- package/dist/site/badges/v1/kfd-5/planned.json +14 -0
- package/dist/site/badges/v1/kfd-6/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-6/declared.json +14 -0
- package/dist/site/badges/v1/kfd-6/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-6/draft.json +14 -0
- package/dist/site/badges/v1/kfd-6/failed.json +14 -0
- package/dist/site/badges/v1/kfd-6/missing.json +14 -0
- package/dist/site/badges/v1/kfd-6/passed.json +14 -0
- package/dist/site/badges/v1/kfd-6/planned.json +14 -0
- package/dist/site/buildchain-contract.json +149 -28
- package/dist/site/buildchain-site.json +25 -23
- package/dist/site/capability-registry.json +2 -2
- package/dist/site/controller-registry.json +61 -5
- package/dist/site/kfd-claims.json +129 -11
- package/dist/site/kfd-upstream-aggregate.json +12 -12
- package/dist/site/manual-registry.json +6 -6
- package/dist/site/node-api-registry.json +20 -7
- package/dist/site/page-registry.json +12 -12
- package/dist/site/public-surface-audit.json +134 -8
- package/dist/site/publication-authority-registry.json +26 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-model.json +3 -1
- package/dist/site/release-passport-check-manifest.json +167 -0
- package/dist/site/release-provenance.json +3 -0
- package/dist/site/schemas/release-passport-v1.schema.json +198 -0
- package/dist/site/site-manifest.json +10 -10
- package/dist/site/workflow-registry.json +128 -4
- package/docs/migration-inventory.md +8 -0
- package/docs/release-candidate.md +3 -0
- package/docs/release-governance.md +5 -4
- package/docs/release-passport.md +19 -0
- package/docs/release-propagation.md +19 -7
- package/docs/reusable-build-surface.md +26 -1
- package/package.json +5 -2
- package/packages/core/buildchain-contract.js +41 -0
- package/packages/core/buildchain-kfd-claims.js +4 -0
- package/packages/core/buildchain-publication-authority.js +1 -0
- package/packages/core/controller-evidence.js +1 -1
- package/packages/core/index.js +9 -0
- package/packages/core/package-manager.js +32 -0
- package/packages/core/release-passport-contract.js +249 -0
- package/packages/core/release-passport.js +39 -0
- package/scripts/check-inventory.mjs +37 -3
- package/scripts/generate-channel-promotion-workflow.mjs +331 -0
- package/scripts/generate-site-bundle.mjs +15 -0
- package/scripts/promotion-channel-router.mjs +132 -0
- package/scripts/validate-package-manager-contract.mjs +24 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://buildchain.libkungfu.dev/schemas/release-passport-v1.schema.json",
|
|
4
|
+
"title": "Buildchain Release Passport v1",
|
|
5
|
+
"description": "Standalone structural schema for the Buildchain-owned release-passport envelope. KFD subsection semantics remain owned by their canonical KFD schemas.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"contract",
|
|
10
|
+
"product",
|
|
11
|
+
"release",
|
|
12
|
+
"artifacts",
|
|
13
|
+
"evidence",
|
|
14
|
+
"recovery"
|
|
15
|
+
],
|
|
16
|
+
"properties": {
|
|
17
|
+
"schemaVersion": {
|
|
18
|
+
"const": 1
|
|
19
|
+
},
|
|
20
|
+
"contract": {
|
|
21
|
+
"const": "kungfu-buildchain-release-passport"
|
|
22
|
+
},
|
|
23
|
+
"generatedAt": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"format": "date-time"
|
|
26
|
+
},
|
|
27
|
+
"product": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"required": [
|
|
30
|
+
"name",
|
|
31
|
+
"repository",
|
|
32
|
+
"mechanism"
|
|
33
|
+
],
|
|
34
|
+
"properties": {
|
|
35
|
+
"name": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"minLength": 1
|
|
38
|
+
},
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"minLength": 1
|
|
42
|
+
},
|
|
43
|
+
"mechanism": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"minLength": 1
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"additionalProperties": true
|
|
49
|
+
},
|
|
50
|
+
"release": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"required": [
|
|
53
|
+
"tag"
|
|
54
|
+
],
|
|
55
|
+
"properties": {
|
|
56
|
+
"tag": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"minLength": 1
|
|
59
|
+
},
|
|
60
|
+
"sourceSha": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
},
|
|
63
|
+
"releaseSha": {
|
|
64
|
+
"type": "string"
|
|
65
|
+
},
|
|
66
|
+
"releaseMaterialSha": {
|
|
67
|
+
"type": "string"
|
|
68
|
+
},
|
|
69
|
+
"targetRef": {
|
|
70
|
+
"type": "string"
|
|
71
|
+
},
|
|
72
|
+
"channel": {
|
|
73
|
+
"type": "string"
|
|
74
|
+
},
|
|
75
|
+
"line": {
|
|
76
|
+
"type": "string"
|
|
77
|
+
},
|
|
78
|
+
"package": {
|
|
79
|
+
"type": "object"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"additionalProperties": true
|
|
83
|
+
},
|
|
84
|
+
"artifacts": {
|
|
85
|
+
"type": "array",
|
|
86
|
+
"minItems": 1,
|
|
87
|
+
"items": {
|
|
88
|
+
"type": "object",
|
|
89
|
+
"required": [
|
|
90
|
+
"name"
|
|
91
|
+
],
|
|
92
|
+
"properties": {
|
|
93
|
+
"name": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"minLength": 1
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"additionalProperties": true
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"evidence": {
|
|
102
|
+
"type": "object",
|
|
103
|
+
"required": [
|
|
104
|
+
"artifactEvidence",
|
|
105
|
+
"impact",
|
|
106
|
+
"agentIndex"
|
|
107
|
+
],
|
|
108
|
+
"properties": {
|
|
109
|
+
"artifactEvidence": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"minLength": 1
|
|
112
|
+
},
|
|
113
|
+
"impact": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"minLength": 1
|
|
116
|
+
},
|
|
117
|
+
"agentIndex": {
|
|
118
|
+
"type": "string",
|
|
119
|
+
"minLength": 1
|
|
120
|
+
},
|
|
121
|
+
"publishEvidence": {
|
|
122
|
+
"type": "string"
|
|
123
|
+
},
|
|
124
|
+
"transactionState": {
|
|
125
|
+
"type": "string"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"additionalProperties": true
|
|
129
|
+
},
|
|
130
|
+
"recovery": {
|
|
131
|
+
"type": "object"
|
|
132
|
+
},
|
|
133
|
+
"workflow": {
|
|
134
|
+
"type": "object"
|
|
135
|
+
},
|
|
136
|
+
"runnerPolicy": {
|
|
137
|
+
"type": "object"
|
|
138
|
+
},
|
|
139
|
+
"versionImpact": {
|
|
140
|
+
"type": "object"
|
|
141
|
+
},
|
|
142
|
+
"surfaceImpacts": {
|
|
143
|
+
"type": "array",
|
|
144
|
+
"items": {
|
|
145
|
+
"type": "object"
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"packageSet": {
|
|
149
|
+
"type": "object"
|
|
150
|
+
},
|
|
151
|
+
"anchorManifest": {
|
|
152
|
+
"type": "object"
|
|
153
|
+
},
|
|
154
|
+
"trustedPublishing": {
|
|
155
|
+
"type": "object"
|
|
156
|
+
},
|
|
157
|
+
"transaction": {
|
|
158
|
+
"type": "object"
|
|
159
|
+
},
|
|
160
|
+
"surfaceTimestampPolicy": {
|
|
161
|
+
"type": "object"
|
|
162
|
+
},
|
|
163
|
+
"buildFacts": {
|
|
164
|
+
"type": "array",
|
|
165
|
+
"items": {
|
|
166
|
+
"type": "object"
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
"buildSummary": {
|
|
170
|
+
"type": "object"
|
|
171
|
+
},
|
|
172
|
+
"platformArtifactManifests": {
|
|
173
|
+
"type": "array",
|
|
174
|
+
"items": {
|
|
175
|
+
"type": "object"
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"distTagPromotion": {
|
|
179
|
+
"type": "object"
|
|
180
|
+
},
|
|
181
|
+
"controllerReceipts": {
|
|
182
|
+
"type": "array",
|
|
183
|
+
"items": {
|
|
184
|
+
"type": "object"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"kfd-1": {
|
|
188
|
+
"type": "object"
|
|
189
|
+
},
|
|
190
|
+
"kfd-2": {
|
|
191
|
+
"type": "object"
|
|
192
|
+
},
|
|
193
|
+
"kfd-3": {
|
|
194
|
+
"type": "object"
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
"additionalProperties": true
|
|
198
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-manifest",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-19T00:00:09.045Z",
|
|
5
|
+
"publishedAt": "2026-07-19T00:00:09.045Z",
|
|
6
6
|
"reproducible": true,
|
|
7
7
|
"timestampPolicy": "ci-injected",
|
|
8
8
|
"deterministicInputs": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"declared Buildchain surface manifest contract"
|
|
20
20
|
],
|
|
21
21
|
"sourceDateEpoch": "0",
|
|
22
|
-
"sourceRevision": "
|
|
22
|
+
"sourceRevision": "cb4ea966786d561d5f6e9c53d55bba5e951bdb24",
|
|
23
23
|
"timestampPolicyDetails": {
|
|
24
24
|
"contract": "kungfu-buildchain-surface-timestamp-policy",
|
|
25
25
|
"timestampFields": [
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"package": {
|
|
39
39
|
"name": "@kungfu-tech/buildchain",
|
|
40
|
-
"version": "2.14.
|
|
40
|
+
"version": "2.14.3-alpha.1",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"path": "docs/release-passport.md",
|
|
70
70
|
"plane": "verify",
|
|
71
71
|
"exists": true,
|
|
72
|
-
"digest": "sha256:
|
|
72
|
+
"digest": "sha256:0029014ffab7d7228a12d8b92326b78cf6757a41f481b661c5997e2cef06d3cc"
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
"id": "controller-evidence",
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"path": "docs/release-candidate.md",
|
|
94
94
|
"plane": "verify",
|
|
95
95
|
"exists": true,
|
|
96
|
-
"digest": "sha256:
|
|
96
|
+
"digest": "sha256:81463a74dfe3d337768797b5b47f8cb3a22389312a917447f9b0e6096ab4f90a"
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
"id": "release-propagation",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"path": "docs/release-propagation.md",
|
|
102
102
|
"plane": "use",
|
|
103
103
|
"exists": true,
|
|
104
|
-
"digest": "sha256:
|
|
104
|
+
"digest": "sha256:fc2b743e3d76c4f90cdd8c6560cf9d619ad25d74c15c074be96db7bcb6cc2a29"
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
"id": "readme-badges",
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
"path": "docs/migration-inventory.md",
|
|
166
166
|
"plane": "verify",
|
|
167
167
|
"exists": true,
|
|
168
|
-
"digest": "sha256:
|
|
168
|
+
"digest": "sha256:08daa7d0b42543c1d1dacf1f56f461f0e7a7ca9e25d0859e39599ceb97054ee0"
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
171
|
"id": "ownership",
|
|
@@ -221,7 +221,7 @@
|
|
|
221
221
|
"path": "docs/reusable-build-surface.md",
|
|
222
222
|
"plane": "use",
|
|
223
223
|
"exists": true,
|
|
224
|
-
"digest": "sha256:
|
|
224
|
+
"digest": "sha256:7b745037fedafa1bc2f8ce65f32bb7e887988df2bfe2439694da418d482f6929"
|
|
225
225
|
},
|
|
226
226
|
{
|
|
227
227
|
"id": "publish-transaction",
|
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
"path": "docs/release-governance.md",
|
|
238
238
|
"plane": "why",
|
|
239
239
|
"exists": true,
|
|
240
|
-
"digest": "sha256:
|
|
240
|
+
"digest": "sha256:d25a2ceb6cdc1a1db321e7d2a6aa8a454fb4d7a10560177604f8ecb5801a6e66"
|
|
241
241
|
},
|
|
242
242
|
{
|
|
243
243
|
"id": "release-flow",
|
|
@@ -263,6 +263,111 @@
|
|
|
263
263
|
"capabilityGroup": "api-cli-reference",
|
|
264
264
|
"status": "active"
|
|
265
265
|
},
|
|
266
|
+
{
|
|
267
|
+
"id": ".release-candidate-promote",
|
|
268
|
+
"path": ".github/workflows/.release-candidate-promote.yml",
|
|
269
|
+
"reusable": true,
|
|
270
|
+
"inputs": [
|
|
271
|
+
"allow-repository",
|
|
272
|
+
"artifact-name",
|
|
273
|
+
"artifact-patterns",
|
|
274
|
+
"branch-protection-bypass-apps",
|
|
275
|
+
"branch-protection-bypass-teams",
|
|
276
|
+
"branch-protection-bypass-users",
|
|
277
|
+
"buildchain-contract-compatibility-policy",
|
|
278
|
+
"buildchain-contract-drift-issue-mode",
|
|
279
|
+
"buildchain-contract-lock-path",
|
|
280
|
+
"buildchain-ref",
|
|
281
|
+
"buildchain-repository",
|
|
282
|
+
"channel",
|
|
283
|
+
"dry-run",
|
|
284
|
+
"github-release",
|
|
285
|
+
"github-release-notes",
|
|
286
|
+
"github-release-title",
|
|
287
|
+
"package-manager",
|
|
288
|
+
"promotion-contract-lock-digest",
|
|
289
|
+
"promotion-contract-lock-path",
|
|
290
|
+
"promotion-override-used",
|
|
291
|
+
"promotion-publication-channel",
|
|
292
|
+
"promotion-router-ref",
|
|
293
|
+
"promotion-router-sha",
|
|
294
|
+
"promotion-runtime-ref",
|
|
295
|
+
"promotion-runtime-sha",
|
|
296
|
+
"promotion-shell-ref",
|
|
297
|
+
"promotion-shell-sha",
|
|
298
|
+
"promotion-target-ref",
|
|
299
|
+
"publication-admission-json",
|
|
300
|
+
"publication-auto-admission",
|
|
301
|
+
"publication-auto-no-gate",
|
|
302
|
+
"publication-consumer-predicate-id",
|
|
303
|
+
"publication-consumer-qualification-command",
|
|
304
|
+
"publication-control-plane-audit-json",
|
|
305
|
+
"publication-expected-json",
|
|
306
|
+
"publication-gate-aggregate-json",
|
|
307
|
+
"publication-package-name",
|
|
308
|
+
"publication-product",
|
|
309
|
+
"publication-publisher-workflow-path",
|
|
310
|
+
"publication-runner-provenance-json",
|
|
311
|
+
"publication-target",
|
|
312
|
+
"publication-used-nonces-json",
|
|
313
|
+
"publication-used-qualification-nonces-json",
|
|
314
|
+
"publish-artifact-kind",
|
|
315
|
+
"publish-command",
|
|
316
|
+
"publish-dist-tag",
|
|
317
|
+
"publish-mode",
|
|
318
|
+
"publish-package-main",
|
|
319
|
+
"publish-package-set-order",
|
|
320
|
+
"publish-required-artifacts-json",
|
|
321
|
+
"publish-target",
|
|
322
|
+
"release-candidate-workflow-file",
|
|
323
|
+
"release-candidate-workflow-name",
|
|
324
|
+
"release-passport",
|
|
325
|
+
"release-passport-buildchain-self-kfd",
|
|
326
|
+
"release-passport-impact-json",
|
|
327
|
+
"release-passport-kfd-1-witness-jsons",
|
|
328
|
+
"release-passport-kfd-2-claim-jsons",
|
|
329
|
+
"release-passport-kfd-3-artifact-verify-command",
|
|
330
|
+
"release-passport-kfd-3-artifact-witness-jsons",
|
|
331
|
+
"release-passport-kfd-3-prebuild-witness-jsons",
|
|
332
|
+
"release-passport-output-dir",
|
|
333
|
+
"release-passport-platform-manifest-paths",
|
|
334
|
+
"release-passport-product-name",
|
|
335
|
+
"required-artifact-count",
|
|
336
|
+
"required-status-check",
|
|
337
|
+
"runner-preset",
|
|
338
|
+
"target-ref",
|
|
339
|
+
"target-sha",
|
|
340
|
+
"trusted-publishing"
|
|
341
|
+
],
|
|
342
|
+
"inputCount": 70,
|
|
343
|
+
"secrets": [
|
|
344
|
+
"BUILDCHAIN_ISSUE_APP_ID",
|
|
345
|
+
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
346
|
+
"BUILDCHAIN_ISSUE_TOKEN",
|
|
347
|
+
"BUILDCHAIN_PROMOTION_TOKEN",
|
|
348
|
+
"buildchain-issue-app-id",
|
|
349
|
+
"buildchain-issue-app-private-key",
|
|
350
|
+
"buildchain-issue-token"
|
|
351
|
+
],
|
|
352
|
+
"secretCount": 7,
|
|
353
|
+
"outputs": [
|
|
354
|
+
"built-source-sha",
|
|
355
|
+
"controller-plan-artifact",
|
|
356
|
+
"controller-plan-digest",
|
|
357
|
+
"controller-plan-json",
|
|
358
|
+
"controller-receipt-artifact",
|
|
359
|
+
"controller-receipt-digest",
|
|
360
|
+
"controller-receipt-json",
|
|
361
|
+
"controller-receipt-status",
|
|
362
|
+
"promoted-sha",
|
|
363
|
+
"publication-capability-digest",
|
|
364
|
+
"release-candidate-artifact"
|
|
365
|
+
],
|
|
366
|
+
"outputCount": 11,
|
|
367
|
+
"surface": "reusable-workflow",
|
|
368
|
+
"capabilityGroup": "api-cli-reference",
|
|
369
|
+
"status": "active"
|
|
370
|
+
},
|
|
266
371
|
{
|
|
267
372
|
"id": ".release-docker",
|
|
268
373
|
"path": ".github/workflows/.release-docker.yml",
|
|
@@ -1324,11 +1429,14 @@
|
|
|
1324
1429
|
"branch-protection-bypass-apps",
|
|
1325
1430
|
"branch-protection-bypass-teams",
|
|
1326
1431
|
"branch-protection-bypass-users",
|
|
1432
|
+
"buildchain-alpha-contract-lock-path",
|
|
1433
|
+
"buildchain-channel",
|
|
1327
1434
|
"buildchain-contract-compatibility-policy",
|
|
1328
1435
|
"buildchain-contract-drift-issue-mode",
|
|
1329
1436
|
"buildchain-contract-lock-path",
|
|
1330
1437
|
"buildchain-ref",
|
|
1331
1438
|
"buildchain-repository",
|
|
1439
|
+
"buildchain-stable-contract-lock-path",
|
|
1332
1440
|
"channel",
|
|
1333
1441
|
"dry-run",
|
|
1334
1442
|
"github-release",
|
|
@@ -1378,7 +1486,7 @@
|
|
|
1378
1486
|
"target-sha",
|
|
1379
1487
|
"trusted-publishing"
|
|
1380
1488
|
],
|
|
1381
|
-
"inputCount":
|
|
1489
|
+
"inputCount": 62,
|
|
1382
1490
|
"secrets": [
|
|
1383
1491
|
"BUILDCHAIN_ISSUE_APP_ID",
|
|
1384
1492
|
"BUILDCHAIN_ISSUE_APP_PRIVATE_KEY",
|
|
@@ -1390,6 +1498,7 @@
|
|
|
1390
1498
|
],
|
|
1391
1499
|
"secretCount": 7,
|
|
1392
1500
|
"outputs": [
|
|
1501
|
+
"buildchain-channel",
|
|
1393
1502
|
"built-source-sha",
|
|
1394
1503
|
"controller-plan-artifact",
|
|
1395
1504
|
"controller-plan-digest",
|
|
@@ -1399,10 +1508,21 @@
|
|
|
1399
1508
|
"controller-receipt-json",
|
|
1400
1509
|
"controller-receipt-status",
|
|
1401
1510
|
"promoted-sha",
|
|
1511
|
+
"promotion-contract-lock-digest",
|
|
1512
|
+
"promotion-contract-lock-path",
|
|
1513
|
+
"promotion-override-used",
|
|
1514
|
+
"promotion-publication-channel",
|
|
1515
|
+
"promotion-router-ref",
|
|
1516
|
+
"promotion-router-sha",
|
|
1517
|
+
"promotion-runtime-ref",
|
|
1518
|
+
"promotion-runtime-sha",
|
|
1519
|
+
"promotion-shell-ref",
|
|
1520
|
+
"promotion-shell-sha",
|
|
1521
|
+
"promotion-target-ref",
|
|
1402
1522
|
"publication-capability-digest",
|
|
1403
1523
|
"release-candidate-artifact"
|
|
1404
1524
|
],
|
|
1405
|
-
"outputCount":
|
|
1525
|
+
"outputCount": 23,
|
|
1406
1526
|
"surface": "release-governance",
|
|
1407
1527
|
"capabilityGroup": "reusable-build",
|
|
1408
1528
|
"status": "active"
|
|
@@ -1444,17 +1564,20 @@
|
|
|
1444
1564
|
"buildchain-repository",
|
|
1445
1565
|
"downstream-base-ref",
|
|
1446
1566
|
"downstream-branch",
|
|
1567
|
+
"downstream-prepare-command",
|
|
1447
1568
|
"downstream-repository",
|
|
1448
1569
|
"downstream-target",
|
|
1570
|
+
"downstream-verify-command",
|
|
1449
1571
|
"dry-run",
|
|
1450
1572
|
"graph-json",
|
|
1451
1573
|
"lock-path",
|
|
1452
1574
|
"pr-body",
|
|
1453
1575
|
"pr-title",
|
|
1576
|
+
"refresh-managed-readme-badges",
|
|
1454
1577
|
"source-node",
|
|
1455
1578
|
"upstream-release-json"
|
|
1456
1579
|
],
|
|
1457
|
-
"inputCount":
|
|
1580
|
+
"inputCount": 16,
|
|
1458
1581
|
"secrets": [
|
|
1459
1582
|
"propagation-token"
|
|
1460
1583
|
],
|
|
@@ -1624,6 +1747,7 @@
|
|
|
1624
1747
|
"release-passport-output-dir",
|
|
1625
1748
|
"release-passport-platform-manifest-paths",
|
|
1626
1749
|
"release-passport-product-name",
|
|
1750
|
+
"release-passport-promotion-routing-json",
|
|
1627
1751
|
"require-governance",
|
|
1628
1752
|
"require-publication-qualification",
|
|
1629
1753
|
"require-publish-source-lock",
|
|
@@ -1636,7 +1760,7 @@
|
|
|
1636
1760
|
"transaction-state-path",
|
|
1637
1761
|
"verification-command"
|
|
1638
1762
|
],
|
|
1639
|
-
"inputCount":
|
|
1763
|
+
"inputCount": 60,
|
|
1640
1764
|
"capabilityGroup": "release-passport-trust",
|
|
1641
1765
|
"status": "active"
|
|
1642
1766
|
},
|
|
@@ -37,6 +37,14 @@ migrate to `release-candidate-promote.yml@v2` or a project-owned
|
|
|
37
37
|
`lifecycle.publish` command behind a publish-gate source lock, so floating
|
|
38
38
|
`@v2` consumers cannot bypass source-lock drift protection.
|
|
39
39
|
|
|
40
|
+
The public promotion workflow is now a generated dual-channel router. Existing
|
|
41
|
+
callers remain source-compatible, while callers that want alpha workflow-shell
|
|
42
|
+
fixes before stable promotion should add `buildchain-channel: auto` plus
|
|
43
|
+
`buildchain-alpha-contract-lock-path` and
|
|
44
|
+
`buildchain-stable-contract-lock-path`. Keep one common promotion declaration;
|
|
45
|
+
do not duplicate alpha and stable jobs or call
|
|
46
|
+
`.release-candidate-promote.yml` directly.
|
|
47
|
+
|
|
40
48
|
## Migrated Actions
|
|
41
49
|
|
|
42
50
|
No standalone `action-*` repository is shipped as a Buildchain action anymore.
|
|
@@ -108,6 +108,9 @@ jobs:
|
|
|
108
108
|
promote:
|
|
109
109
|
uses: kungfu-systems/buildchain/.github/workflows/release-candidate-promote.yml@v2
|
|
110
110
|
with:
|
|
111
|
+
buildchain-channel: auto
|
|
112
|
+
buildchain-alpha-contract-lock-path: .buildchain/alpha-contract-lock.json
|
|
113
|
+
buildchain-stable-contract-lock-path: .buildchain/contract-lock.json
|
|
111
114
|
channel: alpha
|
|
112
115
|
artifact-name: libnode
|
|
113
116
|
release-passport-kfd-1-witness-jsons: .buildchain/kfd/kfd-1/standard-contract.witness.json
|
|
@@ -729,7 +729,7 @@ but does not read, create, or move that ref.
|
|
|
729
729
|
|
|
730
730
|
Semver GitHub Release publication is owned by `promote-buildchain-ref`, not by
|
|
731
731
|
consumer shell glue. Consumers normally use the `release-candidate-promote.yml`
|
|
732
|
-
|
|
732
|
+
generated channel router, where GitHub Release publication is enabled by default and can be
|
|
733
733
|
disabled with `github-release: false`; the wrapper passes that declaration to
|
|
734
734
|
the action. After the publish transaction reaches `complete`, Buildchain creates
|
|
735
735
|
or updates the public GitHub Release and uploads the generated
|
|
@@ -764,9 +764,10 @@ When debugging or extending release behavior, read in this order:
|
|
|
764
764
|
2. `.github/workflows/release-verify.yml`
|
|
765
765
|
3. `.github/workflows/buildchain-ref-promotion.yml`
|
|
766
766
|
4. `.github/workflows/release-candidate-promote.yml`
|
|
767
|
-
5.
|
|
768
|
-
6. `actions/promote-buildchain-ref/
|
|
769
|
-
7. `
|
|
767
|
+
5. `.github/workflows/.release-candidate-promote.yml`
|
|
768
|
+
6. `actions/promote-buildchain-ref/README.md`
|
|
769
|
+
7. `actions/promote-buildchain-ref/src/`
|
|
770
|
+
8. `docs/migration-inventory.md`
|
|
770
771
|
|
|
771
772
|
That path gives the policy first, the workflow trigger second, and the action
|
|
772
773
|
implementation last.
|
package/docs/release-passport.md
CHANGED
|
@@ -19,6 +19,25 @@ do not infer execution evidence from a green job. See
|
|
|
19
19
|
The release passport surface is a welded contract. Additive fields are allowed;
|
|
20
20
|
breaking semantic changes require a new major line.
|
|
21
21
|
|
|
22
|
+
Independent verifiers can pin two package-owned, standalone files without
|
|
23
|
+
scraping this implementation:
|
|
24
|
+
|
|
25
|
+
- `dist/site/schemas/release-passport-v1.schema.json` is the self-contained
|
|
26
|
+
JSON Schema for the Buildchain-owned envelope;
|
|
27
|
+
- `dist/site/release-passport-check-manifest.json` names the normative checker,
|
|
28
|
+
required and conditional sibling evidence, local-resolution rules,
|
|
29
|
+
Buildchain aggregation fields, canonical KFD subsection schema authorities,
|
|
30
|
+
and forward-compatibility policy.
|
|
31
|
+
|
|
32
|
+
The same files are exported as
|
|
33
|
+
`@kungfu-tech/buildchain/site/schemas/release-passport-v1.schema.json` and
|
|
34
|
+
`@kungfu-tech/buildchain/site/release-passport-check-manifest.json`. The schema
|
|
35
|
+
checks the envelope shape. `buildchain verify release-passport` remains the
|
|
36
|
+
normative semantic checker: it resolves sibling evidence relative to the
|
|
37
|
+
passport and fails closed on missing evidence, digest drift, or inconsistent
|
|
38
|
+
release facts. Buildchain owns envelope aggregation; KFD retains schema and
|
|
39
|
+
compatibility authority for the `kfd-1`, `kfd-2`, and `kfd-3` subsections.
|
|
40
|
+
|
|
22
41
|
P0 protocol artifacts:
|
|
23
42
|
|
|
24
43
|
- `product-mechanism.json`
|
|
@@ -182,6 +182,8 @@ jobs:
|
|
|
182
182
|
downstream-target: site-libkungfu-dev
|
|
183
183
|
downstream-repository: kungfu-systems/site-libkungfu-dev
|
|
184
184
|
downstream-base-ref: dev/v2/v2.7
|
|
185
|
+
downstream-prepare-command: pnpm install --frozen-lockfile --ignore-scripts
|
|
186
|
+
downstream-verify-command: pnpm run check
|
|
185
187
|
dry-run: false
|
|
186
188
|
secrets:
|
|
187
189
|
propagation-token: ${{ secrets.BUILDCHAIN_PROMOTION_TOKEN }}
|
|
@@ -199,13 +201,23 @@ open PR.
|
|
|
199
201
|
The workflow checks out the Buildchain runtime selected by
|
|
200
202
|
`buildchain-repository` and `buildchain-ref` into `.buildchain/runtime`, invokes
|
|
201
203
|
that runtime for the propagation plan and lock write, then checks out the
|
|
202
|
-
downstream repository
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
204
|
+
downstream repository and writes the exact lock. A consumer that must pin the
|
|
205
|
+
exact upstream package or regenerate deterministic files declares
|
|
206
|
+
`downstream-prepare-command`. The command receives
|
|
207
|
+
`BUILDCHAIN_UPSTREAM_PACKAGE_NAME`, `BUILDCHAIN_UPSTREAM_PACKAGE_VERSION`, and
|
|
208
|
+
`BUILDCHAIN_UPSTREAM_RELEASE_LOCK`. After preparation, Buildchain refreshes an
|
|
209
|
+
existing `<!-- buildchain:badges:start -->` README block by default. Consumers
|
|
210
|
+
can disable that step with `refresh-managed-readme-badges: false`.
|
|
211
|
+
|
|
212
|
+
`downstream-verify-command` runs against the final tree before any commit or
|
|
213
|
+
push, so consumers can use the same check as their PR workflow. Preparation,
|
|
214
|
+
badge refresh, and verification failures all fail closed. The workflow stages
|
|
215
|
+
the complete deterministic result, signs the propagation commit with DCO, and
|
|
216
|
+
then opens or updates the PR. It does not publish the downstream release
|
|
217
|
+
directly. The downstream repository keeps its normal Buildchain governance: the
|
|
218
|
+
PR updates source-of-truth facts, then downstream alpha or release publication
|
|
219
|
+
runs through its own protected channel. A byte-identical rerun is an explicit
|
|
220
|
+
successful no-op.
|
|
209
221
|
For unreleased runtime validation, keep the caller's reusable workflow reference
|
|
210
222
|
on `@v2` and pass a temporary train ref through `buildchain-ref`.
|
|
211
223
|
|
|
@@ -743,6 +743,23 @@ It does not call `.build.yml`, does not create a matrix, and must fail before
|
|
|
743
743
|
publish if the RC evidence, payload set, or source-lock ref is missing or
|
|
744
744
|
ambiguous.
|
|
745
745
|
|
|
746
|
+
The public `release-candidate-promote.yml` is a generated channel router. It
|
|
747
|
+
derives the publication lane from `target-ref`, then selects the matching
|
|
748
|
+
advanced workflow shell, runtime, and consumer lock before the advanced
|
|
749
|
+
promotion starts:
|
|
750
|
+
|
|
751
|
+
- alpha targets use `.release-candidate-promote.yml@vN-alpha`, runtime
|
|
752
|
+
`vN-alpha`, and `buildchain-alpha-contract-lock-path`;
|
|
753
|
+
- release and major targets use `.release-candidate-promote.yml@vN`, runtime
|
|
754
|
+
`vN`, and `buildchain-stable-contract-lock-path`.
|
|
755
|
+
|
|
756
|
+
The router resolves immutable SHAs and the selected lock digest before candidate
|
|
757
|
+
download. The advanced shell verifies the same router, shell, runtime, lock,
|
|
758
|
+
channel, and target binding again. Train and exact-SHA runtime overrides remain
|
|
759
|
+
restricted to trusted `workflow_dispatch` actors with write, maintain, or admin
|
|
760
|
+
permission. Promotion controller evidence, the promotion copy of the release
|
|
761
|
+
candidate passport, and the final release passport record these identities.
|
|
762
|
+
|
|
746
763
|
```yaml
|
|
747
764
|
jobs:
|
|
748
765
|
promote:
|
|
@@ -751,6 +768,9 @@ jobs:
|
|
|
751
768
|
buildchain-issue-app-id: ${{ secrets.BUILDCHAIN_ISSUE_APP_ID }}
|
|
752
769
|
buildchain-issue-app-private-key: ${{ secrets.BUILDCHAIN_ISSUE_APP_PRIVATE_KEY }}
|
|
753
770
|
with:
|
|
771
|
+
buildchain-channel: auto
|
|
772
|
+
buildchain-alpha-contract-lock-path: .buildchain/alpha-contract-lock.json
|
|
773
|
+
buildchain-stable-contract-lock-path: .buildchain/contract-lock.json
|
|
754
774
|
channel: alpha
|
|
755
775
|
target-ref: alpha/v22/v22.22
|
|
756
776
|
artifact-name: libnode
|
|
@@ -769,10 +789,15 @@ jobs:
|
|
|
769
789
|
publish-package-set-order: platforms-first-main-last
|
|
770
790
|
publish-package-main: "@kungfu-tech/libnode"
|
|
771
791
|
release-passport-product-name: Libnode
|
|
772
|
-
buildchain-contract-lock-path: .buildchain/contract-lock.json
|
|
773
792
|
buildchain-contract-drift-issue-mode: compatible-and-breaking
|
|
774
793
|
```
|
|
775
794
|
|
|
795
|
+
Existing callers may keep `buildchain-contract-lock-path`; a non-empty explicit
|
|
796
|
+
path overrides channel-specific selection for compatibility. Migration only
|
|
797
|
+
requires adding the two channel lock inputs and may retain the remaining common
|
|
798
|
+
promotion declaration unchanged. Consumers must not call the dot-prefixed
|
|
799
|
+
advanced workflow directly.
|
|
800
|
+
|
|
776
801
|
`buildchain-issue-app-id` and `buildchain-issue-app-private-key` are optional
|
|
777
802
|
but recommended for cross-repository consumers. They should identify a GitHub
|
|
778
803
|
App installation with `issues: write` on `kungfu-systems/buildchain`; the
|