Publish Clusterflux release candidate 6e83783

This commit is contained in:
Clusterflux release 2026-07-20 19:32:05 +02:00
parent 4d75257c6e
commit f3640643bd
16 changed files with 4667 additions and 106 deletions

View file

@ -513,6 +513,24 @@ function reuseCandidateHostedBinary(candidate, releaseName) {
return archive;
}
function reuseCandidateExtension(candidate) {
assertCandidateManifest(candidate);
const asset = candidate.assets.find((entry) => entry.name.endsWith(".vsix"));
if (!asset || !fs.existsSync(asset.file)) {
throw new Error("release candidate VSIX is missing");
}
const digest = sha256File(asset.file);
if (
digest !== asset.sha256 ||
digest !== candidate.release_candidate.extension_sha256
) {
throw new Error("release candidate VSIX digest changed after candidate creation");
}
const archive = path.join(assetsDir, asset.name);
fs.copyFileSync(asset.file, archive);
return archive;
}
function assertCandidateManifest(candidate) {
if (candidate.kind !== "clusterflux-public-release") {
throw new Error("release candidate manifest has the wrong kind");
@ -529,6 +547,9 @@ function assertCandidateManifest(candidate) {
if (!candidate.release_candidate.hosted_binary_archive_sha256) {
throw new Error("release candidate omitted the hosted service archive digest");
}
if (!candidate.release_candidate.extension_sha256) {
throw new Error("release candidate omitted the VSIX digest");
}
}
function stageEvidenceAsset(
@ -735,26 +756,30 @@ function stageSourceAsset(releaseName) {
}
function stageExtensionAsset() {
const extensionRoot = path.join(publicTree, "vscode-extension");
const packageJson = JSON.parse(
fs.readFileSync(path.join(publicTree, "vscode-extension/package.json"), "utf8")
fs.readFileSync(path.join(extensionRoot, "package.json"), "utf8")
);
const archive = path.join(
assetsDir,
`${packageJson.name}-${packageJson.version}.vsix`
);
run("npm", ["ci", "--ignore-scripts", "--no-audit", "--no-fund"], {
cwd: extensionRoot,
});
run(
"npx",
path.join(extensionRoot, "node_modules", ".bin", "vsce"),
[
"--yes",
"@vscode/vsce",
"package",
"--allow-missing-repository",
"--skip-license",
"--out",
archive,
],
{ cwd: path.join(publicTree, "vscode-extension") }
{ cwd: extensionRoot }
);
run("node", ["scripts/vscode-extension-smoke.js"], { cwd: publicTree });
run("node", ["scripts/vscode-f5-smoke.js"], { cwd: publicTree });
return archive;
}
@ -1087,11 +1112,13 @@ function main() {
: publishPublicTree(releaseName, sourceCommit, publicTreeIdentity);
let binaryArchive;
let hostedBinaryArchive;
let extensionArchive;
let binaryDigests;
let candidateBinding;
if (candidate) {
binaryArchive = reuseCandidateBinaries(candidate, releaseName);
hostedBinaryArchive = reuseCandidateHostedBinary(candidate, releaseName);
extensionArchive = reuseCandidateExtension(candidate);
binaryDigests = candidate.binary_digests;
candidateBinding = {
mode: "finalized-exact",
@ -1099,17 +1126,20 @@ function main() {
manifest_sha256: sha256File(candidateManifestPath),
binary_archive_sha256: sha256File(binaryArchive),
hosted_binary_archive_sha256: sha256File(hostedBinaryArchive),
extension_sha256: sha256File(extensionArchive),
};
} else {
buildPublicBinaries();
buildHostedBinary();
binaryArchive = stageBinaryAssets(releaseName);
hostedBinaryArchive = stageHostedBinaryAsset(releaseName);
extensionArchive = stageExtensionAsset();
binaryDigests = candidateBinaryDigests();
candidateBinding = {
mode: "built-once",
binary_archive_sha256: sha256File(binaryArchive),
hosted_binary_archive_sha256: sha256File(hostedBinaryArchive),
extension_sha256: sha256File(extensionArchive),
};
}
const candidateConfigurationIdentity =
@ -1131,7 +1161,6 @@ function main() {
candidateProxyConfigurationIdentity
);
const evidenceArchive = evidence.archive;
const extensionArchive = stageExtensionAsset();
const resolution = resolverInstructions();
const gettingStarted = writeGettingStartedAsset(
releaseName,