Public release release-e47f9c27bbeb
Source commit: e47f9c27bbebe6759f6b6fe7b12fd00bb20d116d Public tree identity: sha256:4c1af1dfd67d3f2b5088531ea8727b11124b013d2251a4d5088f51a6424c0196
This commit is contained in:
parent
3a4d4fa7ae
commit
9223c54939
30 changed files with 4195 additions and 434 deletions
|
|
@ -632,10 +632,22 @@ function stageEvidenceAsset(
|
|||
}
|
||||
if (
|
||||
!Array.isArray(liveResult.named_scenarios) ||
|
||||
liveResult.named_scenarios.length !== 25 ||
|
||||
liveResult.named_scenarios.some((scenario) => scenario.status !== "passed")
|
||||
!Array.isArray(liveResult.strict_requirement_ledger) ||
|
||||
liveResult.named_scenarios.length !==
|
||||
liveResult.strict_requirement_ledger.length ||
|
||||
liveResult.named_scenarios.length < 29 ||
|
||||
liveResult.named_scenarios.some(
|
||||
(scenario) =>
|
||||
scenario.status !== "passed" ||
|
||||
!Number.isFinite(scenario.duration_ms) ||
|
||||
scenario.duration_ms <= 0
|
||||
) ||
|
||||
new Set(liveResult.named_scenarios.map((scenario) => scenario.id))
|
||||
.size !== liveResult.named_scenarios.length
|
||||
) {
|
||||
throw new Error("all twenty-five named final live checks must pass");
|
||||
throw new Error(
|
||||
"every named final live check must be unique, measured, and passed"
|
||||
);
|
||||
}
|
||||
if (
|
||||
!liveResult.release_binding?.deployment ||
|
||||
|
|
@ -649,7 +661,17 @@ function stageEvidenceAsset(
|
|||
if (
|
||||
!Array.isArray(liveResult.strict_requirement_ledger) ||
|
||||
!liveResult.strict_requirement_ledger.length ||
|
||||
liveResult.strict_requirement_ledger.some((requirement) => requirement.passed !== true)
|
||||
liveResult.strict_requirement_ledger.some(
|
||||
(requirement) =>
|
||||
requirement.passed !== true ||
|
||||
!Number.isFinite(requirement.duration_ms) ||
|
||||
requirement.duration_ms <= 0 ||
|
||||
!requirement.evidence
|
||||
) ||
|
||||
liveResult.strict_requirement_ledger.some(
|
||||
(requirement, index) =>
|
||||
requirement.id !== liveResult.named_scenarios[index].id
|
||||
)
|
||||
) {
|
||||
throw new Error("the strict final requirement ledger must be complete and passed");
|
||||
}
|
||||
|
|
@ -685,8 +707,7 @@ function stageEvidenceAsset(
|
|||
evidence_packaged_at: packagedAt,
|
||||
},
|
||||
release_commands: [
|
||||
"nix develop -c ./scripts/acceptance-private.sh",
|
||||
"nix develop -c ./scripts/acceptance-public.sh",
|
||||
"nix develop -c node scripts/release-quality-gates.js",
|
||||
"node scripts/cli-happy-path-live-smoke.js (strict production-shaped environment)",
|
||||
],
|
||||
};
|
||||
|
|
@ -827,7 +848,7 @@ ${resolution}
|
|||
|
||||
## Install
|
||||
|
||||
1. Download the binary archive for your platform from the Forgejo release.
|
||||
1. Download the binary archive for your platform from the manually published GitHub release.
|
||||
2. Check the archive against \`SHA256SUMS\`.
|
||||
3. Extract it and put \`bin/\` on your \`PATH\`.
|
||||
4. Install \`clusterflux-vscode-*.vsix\` when you want the VS Code debugger:
|
||||
|
|
@ -880,8 +901,8 @@ function writeReleaseNotesAsset(releaseName, publicTreeIdentity, resolution) {
|
|||
process.env.CLUSTERFLUX_PUBLIC_REPO_URL ||
|
||||
"https://git.michelpaulissen.com/michel/clusterflux-public";
|
||||
const releaseUrl =
|
||||
process.env.CLUSTERFLUX_FORGEJO_RELEASE_URL ||
|
||||
"the Forgejo release attached to the public repository";
|
||||
process.env.CLUSTERFLUX_GITHUB_RELEASE_URL ||
|
||||
"the manually published GitHub release";
|
||||
fs.writeFileSync(
|
||||
file,
|
||||
`# Clusterflux Release Notes
|
||||
|
|
@ -1200,7 +1221,8 @@ function main() {
|
|||
public_repo_remote:
|
||||
process.env.CLUSTERFLUX_PUBLIC_REPO_REMOTE || candidate?.public_repo_remote || null,
|
||||
public_tree_publish: publicTreePublish,
|
||||
forgejo_release_url: process.env.CLUSTERFLUX_FORGEJO_RELEASE_URL || null,
|
||||
github_release_url: process.env.CLUSTERFLUX_GITHUB_RELEASE_URL || null,
|
||||
forgejo_release_url: null,
|
||||
default_hosted_coordinator_endpoint: defaultHostedCoordinatorEndpoint,
|
||||
dns_publication_state:
|
||||
process.env.CLUSTERFLUX_DNS_PUBLICATION_STATE || "published",
|
||||
|
|
@ -1239,10 +1261,18 @@ function main() {
|
|||
name: path.basename(asset),
|
||||
sha256: sha256File(asset),
|
||||
})),
|
||||
notes: [
|
||||
"Upload the assets to the Forgejo Release for the filtered public repository.",
|
||||
"The real service deployment and full e2e release remain separate acceptance evidence.",
|
||||
],
|
||||
notes:
|
||||
releaseStage === "final"
|
||||
? [
|
||||
"Publish manually to GitHub from the prepared manual release directory.",
|
||||
"The manifest embeds the exact production-shaped validation evidence and candidate binding.",
|
||||
"Forgejo release publication is not launch authority.",
|
||||
]
|
||||
: [
|
||||
"This is a validation candidate, not a published release.",
|
||||
"GitHub publication remains manual after final production-shaped validation.",
|
||||
"Forgejo release publication is not launch authority.",
|
||||
],
|
||||
};
|
||||
|
||||
const manifestPath = path.join(outputRoot, "public-release-manifest.json");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue