@kungfu-tech/buildchain 2.14.3-alpha.2 → 2.14.3-alpha.4
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/buildchain-contract.json +3 -3
- package/dist/site/buildchain-site.json +4 -4
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/site-manifest.json +4 -4
- package/package.json +1 -1
- package/scripts/generate-channel-promotion-workflow.mjs +38 -26
- package/scripts/promotion-channel-router.mjs +0 -7
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"product": {
|
|
5
5
|
"name": "Buildchain",
|
|
6
6
|
"package": "@kungfu-tech/buildchain",
|
|
7
|
-
"version": "2.14.3-alpha.
|
|
7
|
+
"version": "2.14.3-alpha.4",
|
|
8
8
|
"repository": "https://github.com/kungfu-systems/buildchain"
|
|
9
9
|
},
|
|
10
10
|
"majorLine": "v2",
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
"GitHub Release passport and evidence publication is delegated to promote-buildchain-ref after the semver release transaction completes"
|
|
169
169
|
],
|
|
170
170
|
"breakingDigest": "sha256:1f476fb9a4854b362c4b24cef89a3c7675d7d63baf3bc828d7b8ae7d2787cead",
|
|
171
|
-
"auditDigest": "sha256:
|
|
171
|
+
"auditDigest": "sha256:1cdf90721ff2432378b5628347627824affb25fed3372573969cd16603858864"
|
|
172
172
|
},
|
|
173
173
|
{
|
|
174
174
|
"contractVersion": 1,
|
|
@@ -2830,5 +2830,5 @@
|
|
|
2830
2830
|
}
|
|
2831
2831
|
],
|
|
2832
2832
|
"compatibilityDigest": "sha256:edc3653e5cb34efd97065a6941db16140bbf375a565bbcf329d9d795bb07676f",
|
|
2833
|
-
"contractDigest": "sha256:
|
|
2833
|
+
"contractDigest": "sha256:987bc72ade39901213c2d5fac48c5b33adf1305380f242cb1489184817b54d28"
|
|
2834
2834
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-site-bundle",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-19T02:24:48.794Z",
|
|
5
|
+
"publishedAt": "2026-07-19T02:24:48.794Z",
|
|
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": "69483d6a1017af223c248ee1642053fdfcc27fb6",
|
|
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.3-alpha.
|
|
40
|
+
"version": "2.14.3-alpha.4",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"source": {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"contract": "kungfu-buildchain-publication-release-registry",
|
|
4
|
-
"generatedAt": "2026-07-
|
|
5
|
-
"publishedAt": "2026-07-
|
|
4
|
+
"generatedAt": "2026-07-19T02:24:48.794Z",
|
|
5
|
+
"publishedAt": "2026-07-19T02:24:48.794Z",
|
|
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": "69483d6a1017af223c248ee1642053fdfcc27fb6",
|
|
23
23
|
"timestampPolicyDetails": {
|
|
24
24
|
"contract": "kungfu-buildchain-surface-timestamp-policy",
|
|
25
25
|
"timestampFields": [
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"package": {
|
|
34
34
|
"name": "@kungfu-tech/buildchain",
|
|
35
|
-
"version": "2.14.3-alpha.
|
|
35
|
+
"version": "2.14.3-alpha.4",
|
|
36
36
|
"versionSource": "package.json#version"
|
|
37
37
|
},
|
|
38
38
|
"sourceKind": "package-site-bundle",
|
|
@@ -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-19T02:24:48.794Z",
|
|
5
|
+
"publishedAt": "2026-07-19T02:24:48.794Z",
|
|
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": "69483d6a1017af223c248ee1642053fdfcc27fb6",
|
|
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.3-alpha.
|
|
40
|
+
"version": "2.14.3-alpha.4",
|
|
41
41
|
"versionSource": "package.json#version"
|
|
42
42
|
},
|
|
43
43
|
"entrypoint": "buildchain-site.json",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "2.14.3-alpha.
|
|
3
|
+
"version": "2.14.3-alpha.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Buildchain Release Passport, release governance, CLI toolkit, and site facts.",
|
|
6
6
|
"repository": "https://github.com/kungfu-systems/buildchain",
|
|
@@ -90,29 +90,31 @@ function publicOutputs(outputBlock) {
|
|
|
90
90
|
return [...routed, ...forwarded].join("\n");
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
function forwardedInputs(inputNames) {
|
|
94
|
-
return inputNames
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
93
|
+
function forwardedInputs(inputNames, { includeInternal = true } = {}) {
|
|
94
|
+
return inputNames
|
|
95
|
+
.filter((name) => includeInternal || !internalInputs.has(name))
|
|
96
|
+
.map((name) => {
|
|
97
|
+
const routed = {
|
|
98
|
+
"buildchain-ref": "runtime-ref",
|
|
99
|
+
"buildchain-contract-lock-path": "contract-lock-path",
|
|
100
|
+
channel: "publication-channel",
|
|
101
|
+
"target-ref": "target-ref",
|
|
102
|
+
"promotion-router-ref": "router-ref",
|
|
103
|
+
"promotion-router-sha": "router-sha",
|
|
104
|
+
"promotion-shell-ref": "shell-ref",
|
|
105
|
+
"promotion-shell-sha": "shell-sha",
|
|
106
|
+
"promotion-runtime-ref": "runtime-ref",
|
|
107
|
+
"promotion-runtime-sha": "runtime-sha",
|
|
108
|
+
"promotion-contract-lock-path": "contract-lock-path",
|
|
109
|
+
"promotion-contract-lock-digest": "contract-lock-digest",
|
|
110
|
+
"promotion-publication-channel": "publication-channel",
|
|
111
|
+
"promotion-target-ref": "target-ref",
|
|
112
|
+
"promotion-override-used": "override-used",
|
|
113
|
+
}[name];
|
|
114
|
+
return routed
|
|
115
|
+
? ` ${name}: \${{ needs.resolve-promotion.outputs.${routed} }}`
|
|
116
|
+
: ` ${name}: \${{ inputs.${name} }}`;
|
|
117
|
+
}).join("\n");
|
|
116
118
|
}
|
|
117
119
|
|
|
118
120
|
function validateWorkflowRoute(name, route, expectedLogicalRef) {
|
|
@@ -126,6 +128,9 @@ function validateWorkflowRoute(name, route, expectedLogicalRef) {
|
|
|
126
128
|
if (!/^(?:v[0-9]+(?:-alpha)?|[0-9a-f]{40})$/.test(route.callRef || "")) {
|
|
127
129
|
throw new Error(`promotion shell ${name} callRef must be an official channel ref or exact SHA`);
|
|
128
130
|
}
|
|
131
|
+
if (typeof route.forwardInternalInputs !== "boolean") {
|
|
132
|
+
throw new Error(`promotion shell ${name} forwardInternalInputs must be boolean`);
|
|
133
|
+
}
|
|
129
134
|
return { ...route };
|
|
130
135
|
}
|
|
131
136
|
|
|
@@ -145,11 +150,13 @@ export function generateChannelPromotionWorkflow(source, { major = 2, shellRouti
|
|
|
145
150
|
logicalRef: `v${major}-alpha`,
|
|
146
151
|
callRef: `v${major}-alpha`,
|
|
147
152
|
workflowPath: ".github/workflows/.release-candidate-promote.yml",
|
|
153
|
+
forwardInternalInputs: true,
|
|
148
154
|
},
|
|
149
155
|
stable: {
|
|
150
156
|
logicalRef: `v${major}`,
|
|
151
157
|
callRef: `v${major}`,
|
|
152
158
|
workflowPath: ".github/workflows/.release-candidate-promote.yml",
|
|
159
|
+
forwardInternalInputs: true,
|
|
153
160
|
},
|
|
154
161
|
};
|
|
155
162
|
const alphaRoute = validateWorkflowRoute("alpha", routes.alpha, `v${major}-alpha`);
|
|
@@ -161,7 +168,12 @@ export function generateChannelPromotionWorkflow(source, { major = 2, shellRouti
|
|
|
161
168
|
for (const required of ["buildchain-ref", "buildchain-contract-lock-path", "channel", "target-ref", ...internalInputs]) {
|
|
162
169
|
if (!inputNames.includes(required)) throw new Error(`advanced promotion workflow missing input: ${required}`);
|
|
163
170
|
}
|
|
164
|
-
const
|
|
171
|
+
const alphaForwarded = forwardedInputs(inputNames, {
|
|
172
|
+
includeInternal: alphaRoute.forwardInternalInputs,
|
|
173
|
+
});
|
|
174
|
+
const stableForwarded = forwardedInputs(inputNames, {
|
|
175
|
+
includeInternal: stableRoute.forwardInternalInputs,
|
|
176
|
+
});
|
|
165
177
|
return `# Generated by scripts/generate-channel-promotion-workflow.mjs. Do not edit directly.
|
|
166
178
|
name: Release Candidate Promote
|
|
167
179
|
|
|
@@ -356,7 +368,7 @@ jobs:
|
|
|
356
368
|
id-token: write
|
|
357
369
|
issues: write
|
|
358
370
|
with:
|
|
359
|
-
${
|
|
371
|
+
${alphaForwarded}
|
|
360
372
|
secrets: inherit
|
|
361
373
|
|
|
362
374
|
stable:
|
|
@@ -371,7 +383,7 @@ ${forwarded}
|
|
|
371
383
|
id-token: write
|
|
372
384
|
issues: write
|
|
373
385
|
with:
|
|
374
|
-
${
|
|
386
|
+
${stableForwarded}
|
|
375
387
|
secrets: inherit
|
|
376
388
|
`;
|
|
377
389
|
}
|
|
@@ -23,12 +23,10 @@ function targetIntent(targetRef, requestedPublicationChannel = "") {
|
|
|
23
23
|
if (requested && requested !== target.publicationChannel) {
|
|
24
24
|
throw new Error(`promotion channel ${requested} does not match target ref ${ref} (${target.publicationChannel})`);
|
|
25
25
|
}
|
|
26
|
-
const match = ref.match(target.pattern);
|
|
27
26
|
return {
|
|
28
27
|
targetRef: ref,
|
|
29
28
|
publicationChannel: target.publicationChannel,
|
|
30
29
|
shellChannel: target.shellChannel,
|
|
31
|
-
targetMajor: match?.[1] ? Number(match[1]) : undefined,
|
|
32
30
|
};
|
|
33
31
|
}
|
|
34
32
|
|
|
@@ -55,11 +53,6 @@ export function resolvePromotionChannel({
|
|
|
55
53
|
`promotion target ${intent.targetRef} requires ${intent.shellChannel} shell/runtime, got ${selected.channel}`,
|
|
56
54
|
);
|
|
57
55
|
}
|
|
58
|
-
if (Number.isInteger(intent.targetMajor) && selected.major !== intent.targetMajor) {
|
|
59
|
-
throw new Error(
|
|
60
|
-
`promotion target ${intent.targetRef} requires Buildchain v${intent.targetMajor}, got v${selected.major}`,
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
56
|
const shellRef = intent.shellChannel === "alpha" ? `v${selected.major}-alpha` : `v${selected.major}`;
|
|
64
57
|
return {
|
|
65
58
|
targetRef: intent.targetRef,
|