@kungfu-tech/buildchain 3.0.6 → 3.0.7-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/README.md +4 -2
- package/actions/promote-buildchain-ref/README.md +10 -0
- package/actions/release-tail/README.md +17 -0
- package/bin/buildchain.mjs +11 -0
- package/bin/internal/command-registry.mjs +2 -0
- package/contracts/auditable-demo-scenario-v1.schema.json +1 -1
- package/contracts/engineering-housekeeper-v1.schema.json +143 -0
- package/contracts/fixtures/engineering-housekeeper-v1/cases.json +68 -0
- package/contracts/fixtures/release-tail-capabilities-v1/kungfu-alpha.json +273 -0
- package/contracts/publication-rehearsal-capsule-v1.schema.json +173 -0
- package/contracts/release-tail-capabilities-v1.schema.json +199 -0
- package/contracts/release-tail-provider-bindings-v1.schema.json +56 -0
- package/dist/site/agent-index.json +3 -0
- package/dist/site/artifact-schemas.json +6 -0
- package/dist/site/buildchain-contract.json +42 -27
- package/dist/site/buildchain-site.json +384 -33
- package/dist/site/capability-registry.json +15 -12
- package/dist/site/cli-registry.json +102 -0
- package/dist/site/controller-registry.json +19 -3
- package/dist/site/kfd-claims.json +359 -17
- package/dist/site/kfd-upstream-aggregate.json +1 -1
- package/dist/site/manual-registry.json +53 -7
- package/dist/site/node-api-registry.json +5882 -3605
- package/dist/site/page-registry.json +348 -21
- package/dist/site/public-surface-audit.json +396 -16
- package/dist/site/publication-authority-registry.json +106 -1
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-provenance.json +7 -0
- package/dist/site/schemas/publication-rehearsal-capsule-v1.schema.json +269 -0
- package/dist/site/schemas/release-tail-capabilities-v1.schema.json +353 -0
- package/dist/site/schemas/release-tail-provider-bindings-v1.schema.json +94 -0
- package/dist/site/site-manifest.json +35 -11
- package/dist/site/workflow-registry.json +204 -10
- package/docs/MAP.md +6 -2
- package/docs/auditable-demo.md +2 -2
- package/docs/cli-reference.md +136 -0
- package/docs/dev-delivery-warrant.md +49 -4
- package/docs/engineering-housekeeper.md +138 -0
- package/docs/lifecycle-protocol.md +4 -2
- package/docs/node-api-reference.md +495 -281
- package/docs/publication-rehearsal.md +94 -0
- package/docs/release-governance.md +17 -2
- package/docs/release-tail-contract.md +160 -0
- package/docs/release-tail-provider-plane.md +120 -0
- package/docs/reusable-build-surface.md +11 -0
- package/package.json +11 -3
- package/packages/core/artifact-signing.js +61 -0
- package/packages/core/buildchain-agent-manuals.js +3 -0
- package/packages/core/buildchain-config.js +66 -6
- package/packages/core/buildchain-kfd-claims.js +1 -1
- package/packages/core/buildchain-publication-authority.js +5 -0
- package/packages/core/controller-evidence.js +2 -1
- package/packages/core/dev-delivery-warrant-cancellation.js +1 -0
- package/packages/core/dev-delivery-warrant-shadow.js +502 -0
- package/packages/core/dev-delivery-warrant.js +15 -6
- package/packages/core/diagnostics.js +8 -3
- package/packages/core/engineering-housekeeper-github-client.js +222 -0
- package/packages/core/engineering-housekeeper-github.js +501 -0
- package/packages/core/engineering-housekeeper.js +259 -0
- package/packages/core/index.js +42 -0
- package/packages/core/kfd-gate.js +45 -15
- package/packages/core/paper-agent-entry.js +11 -5
- package/packages/core/paper-repository.js +1 -0
- package/packages/core/paper-scaffold-content.js +21 -0
- package/packages/core/paper.js +28 -2
- package/packages/core/publication-rehearsal-projection.js +173 -0
- package/packages/core/publication-rehearsal-runtime.js +921 -0
- package/packages/core/release-passport.js +130 -20
- package/packages/core/release-tail-compatibility.js +60 -0
- package/packages/core/release-tail-provider-adapters.js +461 -0
- package/packages/core/release-tail-provider-plane.js +1228 -0
- package/scripts/assemble-publication-artifact-admission.mjs +1 -1
- package/scripts/assemble-self-publication-admission.mjs +2 -2
- package/scripts/audit-publication-control-plane.mjs +1 -1
- package/scripts/auditable-demo-bundle-verification.mjs +2 -3
- package/scripts/auditable-demo-platform.mjs +2 -2
- package/scripts/auditable-demo-renditions.mjs +1 -1
- package/scripts/auditable-demo.mjs +2 -2
- package/scripts/build-contract-core.mjs +8 -3
- package/scripts/build-standalone-binary.mjs +14 -3
- package/scripts/buildchain-cli-help.mjs +13 -0
- package/scripts/check-core-mechanism-inventory.mjs +347 -0
- package/scripts/check-inventory.mjs +10 -8
- package/scripts/check-maintainability.mjs +9 -2
- package/scripts/check-release-tail-contract.mjs +435 -0
- package/scripts/dev-delivery-warrant.mjs +31 -4
- package/scripts/dev-pr-auto-merge.mjs +30 -4
- package/scripts/dev-pr-delivery-warrant.mjs +50 -0
- package/scripts/engineering-housekeeper-workflow.mjs +394 -0
- package/scripts/generate-channel-promotion-workflow.mjs +10 -8
- package/scripts/generate-site-bundle.mjs +47 -4
- package/scripts/init-repo.mjs +26 -2
- package/scripts/inspect-artifact-signing-requests.mjs +6 -0
- package/scripts/materialize-self-release-candidate-version.mjs +137 -0
- package/scripts/publication-commit-evidence.mjs +69 -23
- package/scripts/release-candidate-resolver.mjs +16 -10
- package/scripts/release-tail.mjs +159 -0
- package/scripts/resume-from-candidate-run.mjs +123 -9
- package/scripts/seal-artifact-signing-requests.mjs +6 -0
- package/scripts/site-capability-metadata.mjs +13 -0
- package/scripts/v4-architecture.mjs +600 -0
- package/scripts/web-surface-core.mjs +8 -2
- package/scripts/workflow-call-contract.mjs +184 -5
package/README.md
CHANGED
|
@@ -278,13 +278,14 @@ plus fail-closed product-evidence gates for KFD-4, KFD-5, and KFD-7. These
|
|
|
278
278
|
gates preserve product-owned qualification and support decisions; they do not
|
|
279
279
|
turn a schema-valid record into certification or shipped support.
|
|
280
280
|
|
|
281
|
-
Buildchain's action registry currently contains
|
|
281
|
+
Buildchain's action registry currently contains seven active entries. Five are
|
|
282
282
|
direct consumer integration actions:
|
|
283
283
|
|
|
284
284
|
- `actions/validate-config`
|
|
285
285
|
- `actions/run-lifecycle`
|
|
286
286
|
- `actions/promote-buildchain-ref`
|
|
287
287
|
- `actions/report-buildchain-issue`
|
|
288
|
+
- `actions/release-tail`
|
|
288
289
|
|
|
289
290
|
Two additional release-authority components are also registered and versioned:
|
|
290
291
|
|
|
@@ -292,7 +293,7 @@ Two additional release-authority components are also registered and versioned:
|
|
|
292
293
|
- `actions/macos-credential-island`
|
|
293
294
|
|
|
294
295
|
`dist/site/workflow-registry.json#actions` is the machine-readable inventory;
|
|
295
|
-
this split keeps the older four-action consumer
|
|
296
|
+
this split keeps the older four-action consumer snapshot from being mistaken for
|
|
296
297
|
the complete current registry.
|
|
297
298
|
|
|
298
299
|
The active reusable workflow surfaces are:
|
|
@@ -457,4 +458,5 @@ npm pack --dry-run --json --registry=https://registry.npmjs.org/
|
|
|
457
458
|
- [Release candidate passport](docs/release-candidate.md)
|
|
458
459
|
- [Consumer issue reporting](docs/consumer-issue-reporting.md)
|
|
459
460
|
- [Publish transaction](docs/publish-transaction.md)
|
|
461
|
+
- [Declarative release-tail contract](docs/release-tail-contract.md)
|
|
460
462
|
- [Release governance](docs/release-governance.md)
|
|
@@ -328,6 +328,7 @@ BUILDCHAIN_SEALED_NPM_TARBALL
|
|
|
328
328
|
BUILDCHAIN_SEALED_NPM_INTEGRITY
|
|
329
329
|
BUILDCHAIN_SEALED_NPM_SHA256
|
|
330
330
|
BUILDCHAIN_REQUIRED_ARTIFACTS
|
|
331
|
+
BUILDCHAIN_PUBLISH_REQUIRED_ARTIFACTS_PATH
|
|
331
332
|
```
|
|
332
333
|
|
|
333
334
|
`BUILDCHAIN_REQUIRED_ARTIFACTS` is the normalized requirement array after the
|
|
@@ -337,6 +338,10 @@ declared provenance to the current release coordinate. Template expansion
|
|
|
337
338
|
happens after exact version selection; ambiguous or unsupported templates fail
|
|
338
339
|
before `lifecycle.publish`. Requirement descriptors may omit `digest`; final
|
|
339
340
|
publish evidence may not.
|
|
341
|
+
The action also writes that normalized array to
|
|
342
|
+
`BUILDCHAIN_PUBLISH_REQUIRED_ARTIFACTS_PATH`. To stay below operating-system
|
|
343
|
+
process environment limits, large arrays are available through the file path
|
|
344
|
+
only; small arrays retain the inline variable for compatibility.
|
|
340
345
|
|
|
341
346
|
The action outputs `transaction-id`, `transaction-state`,
|
|
342
347
|
`transaction-publication-state`, `transaction-sealed-bundle-root`,
|
|
@@ -494,6 +499,11 @@ governance semantics:
|
|
|
494
499
|
- alpha promotion must come from a merged same-repository PR
|
|
495
500
|
`dev/vN/vN.M -> alpha/vN/vN.M`, or from a strict same-line
|
|
496
501
|
`publish-gate/alpha/vN/vN.M/<version> -> alpha/vN/vN.M` source-lock PR;
|
|
502
|
+
an immutable recovery receipt may instead admit the exact current alpha
|
|
503
|
+
channel SHA only when its sealed candidate tree is byte-equivalent and its
|
|
504
|
+
publication version is bound by that receipt; when administrative protection
|
|
505
|
+
details are hidden, the provider-visible protected head and required check
|
|
506
|
+
must still match that exact recovered SHA;
|
|
497
507
|
- release promotion must come from a merged same-repository PR
|
|
498
508
|
`alpha/vN/vN.M -> release/vN/vN.M`, or from a strict same-line
|
|
499
509
|
`publish-gate/release/vN/vN.M/<version> -> release/vN/vN.M` source-lock PR;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Declarative Release Tail
|
|
2
|
+
|
|
3
|
+
This Action restores one content-addressed
|
|
4
|
+
`kungfu.buildchain.publication-rehearsal-capsule/v1` and invokes the same public
|
|
5
|
+
rehearsal runtime used by the local CLI. The capsule binds the versioned
|
|
6
|
+
`buildchain.release-tail/v1` declaration, candidate files, policies, Passport,
|
|
7
|
+
transaction, data-only provider bindings and observations. It does not accept
|
|
8
|
+
a command, script, executable path, plugin, repository callback, implicit
|
|
9
|
+
workspace or GitHub runner semantic input.
|
|
10
|
+
|
|
11
|
+
Every mutation is preceded and followed by provider readback. Buildchain core,
|
|
12
|
+
not the adapter, compares the observed subject and target roots, owns retry and
|
|
13
|
+
terminal classification, checkpoints state and emits the standardized receipt.
|
|
14
|
+
Tokens remain Action inputs and are never written to the transaction or
|
|
15
|
+
receipt. The wrapper contributes only credentials, GitHub/HTTPS transport and
|
|
16
|
+
real provider observations. The rooted provider transcript and rehearsal
|
|
17
|
+
evidence are retained with the transaction state.
|
package/bin/buildchain.mjs
CHANGED
|
@@ -9,6 +9,7 @@ import { npmPublishDryRun } from "../scripts/npm-publish-dry-run.mjs";
|
|
|
9
9
|
import { runLifecycle } from "../scripts/run-lifecycle-core.mjs";
|
|
10
10
|
import { runReleasePropagationCli } from "../scripts/release-propagation.mjs";
|
|
11
11
|
import { runReleaseGovernanceCli } from "../scripts/reconcile-release-governance.mjs";
|
|
12
|
+
import { runReleaseTailCli } from "../scripts/release-tail.mjs";
|
|
12
13
|
import { runPublicationArtifactCli } from "../scripts/publication-artifact.mjs";
|
|
13
14
|
import { runPublicationPackageCli } from "../scripts/publication-package.mjs";
|
|
14
15
|
import { runPublicationReproducibilityCli } from "../scripts/publication-reproducibility.mjs";
|
|
@@ -1646,6 +1647,10 @@ async function handleReleaseGovernanceCommand(args) {
|
|
|
1646
1647
|
|
|
1647
1648
|
}
|
|
1648
1649
|
|
|
1650
|
+
async function handleReleaseTailCommand(args) {
|
|
1651
|
+
await runReleaseTailCli(args);
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1649
1654
|
async function handleGitHubGovernanceCommand(args) {
|
|
1650
1655
|
runScript("reconcile-github-governance.mjs", args);
|
|
1651
1656
|
return;
|
|
@@ -1706,6 +1711,10 @@ async function handlePublishSourceCommand(args) {
|
|
|
1706
1711
|
|
|
1707
1712
|
}
|
|
1708
1713
|
|
|
1714
|
+
async function handleArchitectureCommand(args) {
|
|
1715
|
+
runScript("v4-architecture.mjs", args);
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1709
1718
|
const BUILDCHAIN_COMMAND_HANDLERS = Object.freeze({
|
|
1710
1719
|
"help": handleHelpCommand,
|
|
1711
1720
|
"version": handleVersionCommand,
|
|
@@ -1737,11 +1746,13 @@ const BUILDCHAIN_COMMAND_HANDLERS = Object.freeze({
|
|
|
1737
1746
|
"paper": handlePaperCommand,
|
|
1738
1747
|
"release-propagation": handleReleasePropagationCommand,
|
|
1739
1748
|
"release-governance": handleReleaseGovernanceCommand,
|
|
1749
|
+
"release-tail": handleReleaseTailCommand,
|
|
1740
1750
|
"github-governance": handleGitHubGovernanceCommand,
|
|
1741
1751
|
"badges": handleBadgesCommand,
|
|
1742
1752
|
"homebrew": handleHomebrewCommand,
|
|
1743
1753
|
"build-contract": handleBuildContractCommand,
|
|
1744
1754
|
"publish-source": handlePublishSourceCommand,
|
|
1755
|
+
"architecture": handleArchitectureCommand,
|
|
1745
1756
|
});
|
|
1746
1757
|
|
|
1747
1758
|
async function main(argv = process.argv.slice(2)) {
|
|
@@ -32,11 +32,13 @@ const BUILDCHAIN_COMMAND_REGISTRY = Object.freeze([
|
|
|
32
32
|
{ id: "paper", aliases: [] },
|
|
33
33
|
{ id: "release-propagation", aliases: [] },
|
|
34
34
|
{ id: "release-governance", aliases: [] },
|
|
35
|
+
{ id: "release-tail", aliases: [] },
|
|
35
36
|
{ id: "github-governance", aliases: [] },
|
|
36
37
|
{ id: "badges", aliases: [] },
|
|
37
38
|
{ id: "homebrew", aliases: [] },
|
|
38
39
|
{ id: "build-contract", aliases: [] },
|
|
39
40
|
{ id: "publish-source", aliases: [] },
|
|
41
|
+
{ id: "architecture", aliases: [] },
|
|
40
42
|
]);
|
|
41
43
|
|
|
42
44
|
function buildCommandLookup(registry = BUILDCHAIN_COMMAND_REGISTRY) {
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"renditions": {
|
|
113
113
|
"const": [
|
|
114
114
|
{"id": "1080p", "role": "primary", "columns": 150, "rows": 36, "width": 1920, "height": 1080},
|
|
115
|
-
{"id": "720p", "role": "responsive", "columns":
|
|
115
|
+
{"id": "720p", "role": "responsive", "columns": 150, "rows": 28, "width": 1280, "height": 720}
|
|
116
116
|
]
|
|
117
117
|
},
|
|
118
118
|
"demos": {
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://buildchain.kungfu.ai/contracts/engineering-housekeeper-v1.schema.json",
|
|
4
|
+
"title": "Buildchain Engineering Housekeeper contract",
|
|
5
|
+
"oneOf": [{ "$ref": "#/$defs/plan" }, { "$ref": "#/$defs/receipt" }],
|
|
6
|
+
"$defs": {
|
|
7
|
+
"root": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
|
|
8
|
+
"oid": { "type": "string", "pattern": "^[0-9a-f]{40,64}$" },
|
|
9
|
+
"target": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"required": ["name", "headOid"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"name": { "type": "string", "minLength": 1 },
|
|
14
|
+
"headOid": { "$ref": "#/$defs/oid" }
|
|
15
|
+
},
|
|
16
|
+
"additionalProperties": false
|
|
17
|
+
},
|
|
18
|
+
"policy": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"required": ["protectedPatterns", "retainedPatterns", "pullRequests"],
|
|
21
|
+
"properties": {
|
|
22
|
+
"protectedPatterns": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": { "type": "string" },
|
|
25
|
+
"uniqueItems": true
|
|
26
|
+
},
|
|
27
|
+
"retainedPatterns": {
|
|
28
|
+
"type": "array",
|
|
29
|
+
"items": { "type": "string" },
|
|
30
|
+
"uniqueItems": true
|
|
31
|
+
},
|
|
32
|
+
"pullRequests": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"required": ["reportStale", "label", "autoClose"],
|
|
35
|
+
"properties": {
|
|
36
|
+
"reportStale": { "type": "boolean" },
|
|
37
|
+
"label": { "type": "string" },
|
|
38
|
+
"autoClose": { "const": false }
|
|
39
|
+
},
|
|
40
|
+
"additionalProperties": false
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"additionalProperties": false
|
|
44
|
+
},
|
|
45
|
+
"inventory": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"required": ["kind", "repository", "headOid", "reasonCodes"],
|
|
48
|
+
"properties": {
|
|
49
|
+
"kind": { "enum": ["branch", "pull-request"] },
|
|
50
|
+
"repository": { "type": "string", "pattern": "^[^/]+/[^/]+$" },
|
|
51
|
+
"name": { "type": "string" },
|
|
52
|
+
"number": { "type": "integer", "minimum": 1 },
|
|
53
|
+
"headRepository": { "type": "string" },
|
|
54
|
+
"headRef": { "type": "string" },
|
|
55
|
+
"headOid": { "$ref": "#/$defs/oid" },
|
|
56
|
+
"target": { "$ref": "#/$defs/target" },
|
|
57
|
+
"eligible": { "type": "boolean" },
|
|
58
|
+
"decision": { "enum": ["delete", "retain"] },
|
|
59
|
+
"state": { "enum": ["open", "draft", "closed", "merged"] },
|
|
60
|
+
"actions": {
|
|
61
|
+
"type": "array",
|
|
62
|
+
"items": { "enum": ["report", "label"] },
|
|
63
|
+
"uniqueItems": true
|
|
64
|
+
},
|
|
65
|
+
"reasonCodes": {
|
|
66
|
+
"type": "array",
|
|
67
|
+
"minItems": 1,
|
|
68
|
+
"items": { "type": "string" },
|
|
69
|
+
"uniqueItems": true
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"additionalProperties": false
|
|
73
|
+
},
|
|
74
|
+
"action": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"required": ["kind"],
|
|
77
|
+
"properties": {
|
|
78
|
+
"kind": {
|
|
79
|
+
"enum": ["delete-branch", "report-pull-request", "label-pull-request"]
|
|
80
|
+
},
|
|
81
|
+
"name": { "type": "string", "minLength": 1 },
|
|
82
|
+
"number": { "type": "integer", "minimum": 1 },
|
|
83
|
+
"expectedHeadOid": { "$ref": "#/$defs/oid" },
|
|
84
|
+
"targetName": { "type": "string", "minLength": 1 },
|
|
85
|
+
"expectedTargetHeadOid": { "$ref": "#/$defs/oid" }
|
|
86
|
+
},
|
|
87
|
+
"additionalProperties": false
|
|
88
|
+
},
|
|
89
|
+
"plan": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"required": [
|
|
92
|
+
"contract",
|
|
93
|
+
"schemaVersion",
|
|
94
|
+
"mode",
|
|
95
|
+
"repository",
|
|
96
|
+
"target",
|
|
97
|
+
"observedAt",
|
|
98
|
+
"policy",
|
|
99
|
+
"inventory",
|
|
100
|
+
"actions",
|
|
101
|
+
"planRoot"
|
|
102
|
+
],
|
|
103
|
+
"properties": {
|
|
104
|
+
"contract": { "const": "kungfu-buildchain-engineering-housekeeper/v1" },
|
|
105
|
+
"schemaVersion": { "const": 1 },
|
|
106
|
+
"mode": { "const": "plan" },
|
|
107
|
+
"repository": { "type": "string", "pattern": "^[^/]+/[^/]+$" },
|
|
108
|
+
"target": { "$ref": "#/$defs/target" },
|
|
109
|
+
"observedAt": { "type": "string", "format": "date-time" },
|
|
110
|
+
"policy": { "$ref": "#/$defs/policy" },
|
|
111
|
+
"inventory": {
|
|
112
|
+
"type": "array",
|
|
113
|
+
"items": { "$ref": "#/$defs/inventory" }
|
|
114
|
+
},
|
|
115
|
+
"actions": { "type": "array", "items": { "$ref": "#/$defs/action" } },
|
|
116
|
+
"planRoot": { "$ref": "#/$defs/root" }
|
|
117
|
+
},
|
|
118
|
+
"additionalProperties": false
|
|
119
|
+
},
|
|
120
|
+
"receipt": {
|
|
121
|
+
"type": "object",
|
|
122
|
+
"required": [
|
|
123
|
+
"contract",
|
|
124
|
+
"schemaVersion",
|
|
125
|
+
"mode",
|
|
126
|
+
"planRoot",
|
|
127
|
+
"appliedAt",
|
|
128
|
+
"outcomes",
|
|
129
|
+
"receiptRoot"
|
|
130
|
+
],
|
|
131
|
+
"properties": {
|
|
132
|
+
"contract": { "const": "kungfu-buildchain-engineering-housekeeper/v1" },
|
|
133
|
+
"schemaVersion": { "const": 1 },
|
|
134
|
+
"mode": { "const": "receipt" },
|
|
135
|
+
"planRoot": { "$ref": "#/$defs/root" },
|
|
136
|
+
"appliedAt": { "type": "string", "format": "date-time" },
|
|
137
|
+
"outcomes": { "type": "array", "items": { "type": "object" } },
|
|
138
|
+
"receiptRoot": { "$ref": "#/$defs/root" }
|
|
139
|
+
},
|
|
140
|
+
"additionalProperties": false
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract": "kungfu-buildchain-engineering-housekeeper-fixtures/v1",
|
|
3
|
+
"cases": [
|
|
4
|
+
{
|
|
5
|
+
"id": "active",
|
|
6
|
+
"branch": {
|
|
7
|
+
"name": "feature/active",
|
|
8
|
+
"ancestry": "ancestor",
|
|
9
|
+
"openPullRequestNumbers": [11]
|
|
10
|
+
},
|
|
11
|
+
"eligible": false,
|
|
12
|
+
"reason": "branch.open-pr-head"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "merged",
|
|
16
|
+
"branch": {
|
|
17
|
+
"name": "feature/merged",
|
|
18
|
+
"ancestry": "ancestor",
|
|
19
|
+
"openPullRequestNumbers": []
|
|
20
|
+
},
|
|
21
|
+
"eligible": true,
|
|
22
|
+
"reason": "eligible.merged-branch"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "stale",
|
|
26
|
+
"branch": {
|
|
27
|
+
"name": "feature/stale",
|
|
28
|
+
"ancestry": "diverged",
|
|
29
|
+
"openPullRequestNumbers": []
|
|
30
|
+
},
|
|
31
|
+
"eligible": false,
|
|
32
|
+
"reason": "branch.not-merged"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "advanced",
|
|
36
|
+
"revalidation": "head",
|
|
37
|
+
"reason": "branch.head-advanced"
|
|
38
|
+
},
|
|
39
|
+
{ "id": "renamed", "revalidation": "name", "reason": "branch.renamed" },
|
|
40
|
+
{
|
|
41
|
+
"id": "protected",
|
|
42
|
+
"branch": {
|
|
43
|
+
"name": "dev/v3/v3.0",
|
|
44
|
+
"ancestry": "ancestor",
|
|
45
|
+
"openPullRequestNumbers": []
|
|
46
|
+
},
|
|
47
|
+
"eligible": false,
|
|
48
|
+
"reason": "branch.protected"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "forked",
|
|
52
|
+
"branch": {
|
|
53
|
+
"name": "feature/forked",
|
|
54
|
+
"ancestry": "ancestor",
|
|
55
|
+
"openPullRequestNumbers": [],
|
|
56
|
+
"sourceRepository": "fork/buildchain"
|
|
57
|
+
},
|
|
58
|
+
"eligible": false,
|
|
59
|
+
"reason": "branch.cross-repository"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "permission-denied",
|
|
63
|
+
"outcome": "denied",
|
|
64
|
+
"reason": "branch.permission-denied"
|
|
65
|
+
},
|
|
66
|
+
{ "id": "repeated", "replay": true, "reason": "replay.already-applied" }
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract": "kungfu-buildchain-release-tail-capabilities",
|
|
3
|
+
"schemaVersion": 1,
|
|
4
|
+
"transactionPolicy": "buildchain.release-tail/v1",
|
|
5
|
+
"subject": {
|
|
6
|
+
"repository": "kungfu-systems/kungfu",
|
|
7
|
+
"sourceSha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
8
|
+
"version": "4.0.0-alpha.1",
|
|
9
|
+
"tag": "v4.0.0-alpha.1",
|
|
10
|
+
"channel": "alpha"
|
|
11
|
+
},
|
|
12
|
+
"capabilities": [
|
|
13
|
+
{
|
|
14
|
+
"id": "artifact.publish",
|
|
15
|
+
"executor": "provider-adapter",
|
|
16
|
+
"adapter": "github-release-assets",
|
|
17
|
+
"artifactRoles": [
|
|
18
|
+
{
|
|
19
|
+
"role": "installable-product",
|
|
20
|
+
"root": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"role": "release-passport",
|
|
24
|
+
"root": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"destination": {
|
|
28
|
+
"kind": "github-release",
|
|
29
|
+
"locator": "github-release:kungfu-systems/kungfu@v4.0.0-alpha.1"
|
|
30
|
+
},
|
|
31
|
+
"channelPolicy": {
|
|
32
|
+
"channel": "alpha",
|
|
33
|
+
"tagPattern": "^v4\\.0\\.0-alpha\\.[0-9]+$",
|
|
34
|
+
"authorityMove": "verified-ref"
|
|
35
|
+
},
|
|
36
|
+
"activationPolicy": { "mode": "none", "environment": "none" },
|
|
37
|
+
"readbackPredicates": [
|
|
38
|
+
{
|
|
39
|
+
"id": "release-assets-match-roots",
|
|
40
|
+
"kind": "provider-assets",
|
|
41
|
+
"expected": "all declared artifact roots are publicly readable"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"effect": {
|
|
45
|
+
"kind": "artifact-publication",
|
|
46
|
+
"schema": "kungfu.buildchain.release-tail.effect/v1"
|
|
47
|
+
},
|
|
48
|
+
"observation": {
|
|
49
|
+
"kind": "artifact-publication-readback",
|
|
50
|
+
"schema": "kungfu.buildchain.release-tail.observation/v1"
|
|
51
|
+
},
|
|
52
|
+
"receipt": {
|
|
53
|
+
"kind": "artifact-publication",
|
|
54
|
+
"schema": "kungfu.buildchain.release-tail.receipt/v1"
|
|
55
|
+
},
|
|
56
|
+
"operationIdentity": {
|
|
57
|
+
"transactionRoot": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
58
|
+
"capabilityId": "artifact.publish",
|
|
59
|
+
"subjectRoot": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
|
|
60
|
+
"targetRoot": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
|
|
61
|
+
"attemptKey": "artifact.publish/1"
|
|
62
|
+
},
|
|
63
|
+
"idempotency": {
|
|
64
|
+
"scope": "subject-target",
|
|
65
|
+
"duplicate": "readback-before-retry"
|
|
66
|
+
},
|
|
67
|
+
"retry": {
|
|
68
|
+
"class": "provider-transient",
|
|
69
|
+
"localAttempts": 2,
|
|
70
|
+
"exhausted": "repair-required"
|
|
71
|
+
},
|
|
72
|
+
"evidenceRequirements": [
|
|
73
|
+
"kungfu-buildchain-publish-evidence",
|
|
74
|
+
"kungfu-buildchain-release-passport"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "signed-channel.commit",
|
|
79
|
+
"executor": "provider-adapter",
|
|
80
|
+
"adapter": "signed-static-channel",
|
|
81
|
+
"artifactRoles": [
|
|
82
|
+
{
|
|
83
|
+
"role": "signed-channel-index",
|
|
84
|
+
"root": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"role": "installer-publication-bundle",
|
|
88
|
+
"root": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"destination": {
|
|
92
|
+
"kind": "well-known-signed-channel",
|
|
93
|
+
"locator": "https://kungfu.tech/.well-known/kungfu/alpha.json"
|
|
94
|
+
},
|
|
95
|
+
"channelPolicy": {
|
|
96
|
+
"channel": "alpha",
|
|
97
|
+
"tagPattern": "^v4\\.0\\.0-alpha\\.[0-9]+$",
|
|
98
|
+
"authorityMove": "signed-cas"
|
|
99
|
+
},
|
|
100
|
+
"activationPolicy": { "mode": "none", "environment": "none" },
|
|
101
|
+
"readbackPredicates": [
|
|
102
|
+
{
|
|
103
|
+
"id": "signed-channel-root",
|
|
104
|
+
"kind": "public-signed-document",
|
|
105
|
+
"expected": "signature, payload root, source SHA, tag, and previous authority match"
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"effect": {
|
|
109
|
+
"kind": "signed-channel-commit",
|
|
110
|
+
"schema": "kungfu.buildchain.release-tail.effect/v1"
|
|
111
|
+
},
|
|
112
|
+
"observation": {
|
|
113
|
+
"kind": "signed-channel-readback",
|
|
114
|
+
"schema": "kungfu.buildchain.release-tail.observation/v1"
|
|
115
|
+
},
|
|
116
|
+
"receipt": {
|
|
117
|
+
"kind": "publication-commit",
|
|
118
|
+
"schema": "kungfu.buildchain.release-tail.receipt/v1"
|
|
119
|
+
},
|
|
120
|
+
"operationIdentity": {
|
|
121
|
+
"transactionRoot": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
122
|
+
"capabilityId": "signed-channel.commit",
|
|
123
|
+
"subjectRoot": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
|
|
124
|
+
"targetRoot": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
|
|
125
|
+
"attemptKey": "signed-channel.commit/1"
|
|
126
|
+
},
|
|
127
|
+
"idempotency": {
|
|
128
|
+
"scope": "subject-target",
|
|
129
|
+
"duplicate": "return-observed-receipt"
|
|
130
|
+
},
|
|
131
|
+
"retry": {
|
|
132
|
+
"class": "readback",
|
|
133
|
+
"localAttempts": 2,
|
|
134
|
+
"exhausted": "repair-required"
|
|
135
|
+
},
|
|
136
|
+
"evidenceRequirements": [
|
|
137
|
+
"kungfu-buildchain-publication-commit-evidence/v1"
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "release.activate",
|
|
142
|
+
"executor": "provider-adapter",
|
|
143
|
+
"adapter": "site-release-activation",
|
|
144
|
+
"artifactRoles": [
|
|
145
|
+
{
|
|
146
|
+
"role": "activation-receipt-set",
|
|
147
|
+
"root": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"destination": {
|
|
151
|
+
"kind": "production-site",
|
|
152
|
+
"locator": "https://kungfu.tech/.well-known/kungfu-release-status.json"
|
|
153
|
+
},
|
|
154
|
+
"channelPolicy": {
|
|
155
|
+
"channel": "alpha",
|
|
156
|
+
"tagPattern": "^v4\\.0\\.0-alpha\\.[0-9]+$",
|
|
157
|
+
"authorityMove": "verified-ref"
|
|
158
|
+
},
|
|
159
|
+
"activationPolicy": {
|
|
160
|
+
"mode": "receipt-set",
|
|
161
|
+
"environment": "production"
|
|
162
|
+
},
|
|
163
|
+
"readbackPredicates": [
|
|
164
|
+
{
|
|
165
|
+
"id": "release-status-current",
|
|
166
|
+
"kind": "public-json",
|
|
167
|
+
"expected": "source, site source, version, tag, channel, and Passport roots match"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "installable-product-qualified",
|
|
171
|
+
"kind": "public-product-qualification",
|
|
172
|
+
"expected": "a public qualification asset matches an admitted artifact root"
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"effect": {
|
|
176
|
+
"kind": "release-activation",
|
|
177
|
+
"schema": "kungfu.buildchain.release-tail.effect/v1"
|
|
178
|
+
},
|
|
179
|
+
"observation": {
|
|
180
|
+
"kind": "production-readback",
|
|
181
|
+
"schema": "kungfu.buildchain.release-tail.observation/v1"
|
|
182
|
+
},
|
|
183
|
+
"receipt": {
|
|
184
|
+
"kind": "activation-receipt-set",
|
|
185
|
+
"schema": "kungfu.buildchain.release-tail.receipt/v1"
|
|
186
|
+
},
|
|
187
|
+
"operationIdentity": {
|
|
188
|
+
"transactionRoot": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
189
|
+
"capabilityId": "release.activate",
|
|
190
|
+
"subjectRoot": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
191
|
+
"targetRoot": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
192
|
+
"attemptKey": "release.activate/1"
|
|
193
|
+
},
|
|
194
|
+
"idempotency": {
|
|
195
|
+
"scope": "operation",
|
|
196
|
+
"duplicate": "readback-before-retry"
|
|
197
|
+
},
|
|
198
|
+
"retry": {
|
|
199
|
+
"class": "provider-transient",
|
|
200
|
+
"localAttempts": 2,
|
|
201
|
+
"exhausted": "blocked"
|
|
202
|
+
},
|
|
203
|
+
"evidenceRequirements": [
|
|
204
|
+
"kungfu-buildchain-release-activation-receipt-set/v1",
|
|
205
|
+
"kungfu.release-public-readback/v1",
|
|
206
|
+
"kungfu.cli-installed-product-qualification/v1"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"id": "released-evidence.synthesize",
|
|
211
|
+
"executor": "buildchain-core",
|
|
212
|
+
"adapter": "activation-receipt-projector",
|
|
213
|
+
"artifactRoles": [
|
|
214
|
+
{
|
|
215
|
+
"role": "activation-receipt-set",
|
|
216
|
+
"root": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
|
|
217
|
+
}
|
|
218
|
+
],
|
|
219
|
+
"destination": {
|
|
220
|
+
"kind": "release-passport-attachment",
|
|
221
|
+
"locator": ".buildchain/release-evidence/ungfu-public-use.json"
|
|
222
|
+
},
|
|
223
|
+
"channelPolicy": {
|
|
224
|
+
"channel": "alpha",
|
|
225
|
+
"tagPattern": "^v4\\.0\\.0-alpha\\.[0-9]+$",
|
|
226
|
+
"authorityMove": "none"
|
|
227
|
+
},
|
|
228
|
+
"activationPolicy": {
|
|
229
|
+
"mode": "receipt-only",
|
|
230
|
+
"environment": "production"
|
|
231
|
+
},
|
|
232
|
+
"readbackPredicates": [
|
|
233
|
+
{
|
|
234
|
+
"id": "five-canonical-receipts",
|
|
235
|
+
"kind": "rooted-receipt-set",
|
|
236
|
+
"expected": "artifact, Passport, site, public readback, and product qualification receipts share one binding root"
|
|
237
|
+
}
|
|
238
|
+
],
|
|
239
|
+
"effect": {
|
|
240
|
+
"kind": "released-evidence-projection",
|
|
241
|
+
"schema": "kungfu.buildchain.release-tail.effect/v1"
|
|
242
|
+
},
|
|
243
|
+
"observation": {
|
|
244
|
+
"kind": "released-evidence-validation",
|
|
245
|
+
"schema": "kungfu.buildchain.release-tail.observation/v1"
|
|
246
|
+
},
|
|
247
|
+
"receipt": {
|
|
248
|
+
"kind": "released-evidence",
|
|
249
|
+
"schema": "kungfu.buildchain.release-tail.receipt/v1"
|
|
250
|
+
},
|
|
251
|
+
"operationIdentity": {
|
|
252
|
+
"transactionRoot": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
|
253
|
+
"capabilityId": "released-evidence.synthesize",
|
|
254
|
+
"subjectRoot": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
|
255
|
+
"targetRoot": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
|
256
|
+
"attemptKey": "released-evidence.synthesize/1"
|
|
257
|
+
},
|
|
258
|
+
"idempotency": {
|
|
259
|
+
"scope": "operation",
|
|
260
|
+
"duplicate": "return-observed-receipt"
|
|
261
|
+
},
|
|
262
|
+
"retry": {
|
|
263
|
+
"class": "never",
|
|
264
|
+
"localAttempts": 0,
|
|
265
|
+
"exhausted": "terminal-failure"
|
|
266
|
+
},
|
|
267
|
+
"evidenceRequirements": [
|
|
268
|
+
"kungfu-buildchain-release-activation-receipt-set/v1",
|
|
269
|
+
"kungfu-ungfu-release-evidence-index"
|
|
270
|
+
]
|
|
271
|
+
}
|
|
272
|
+
]
|
|
273
|
+
}
|