clusterflux-public/scripts/flagship-demo-smoke.js
Clusterflux release 8ded2b6a42 Public release release-98d969b26488
Source commit: 98d969b26488b4cda8b2381fa870276a00ca98ea

Public tree identity: sha256:d02dd1e8d3547a489bb300741bed544bdc60bb8fe0bd541fd43ce9bfa7129a3e
2026-07-16 15:49:35 +02:00

148 lines
4.4 KiB
JavaScript

#!/usr/bin/env node
const assert = require("assert");
const cp = require("child_process");
const crypto = require("crypto");
const fs = require("fs");
const path = require("path");
const extension = require("../vscode-extension/extension");
const repo = path.resolve(__dirname, "..");
const project = path.join(repo, "examples/launch-build-demo");
const source = fs.readFileSync(path.join(project, "src/build.rs"), "utf8");
const forbiddenSourceAssumptions =
/\b(?:std::fs|std::process|git|podman|docker|localhost|127\.0\.0\.1)|\/home\/|\/Users\/|C:\\Users\\/i;
const envs = extension.discoverEnvironmentNames(project);
assert.deepStrictEqual(envs, ["linux", "windows"]);
assert.deepStrictEqual(extension.diagnoseEnvReferences(source, envs), []);
assert.doesNotMatch(
source,
forbiddenSourceAssumptions,
"flagship build source must not bypass Clusterflux host capabilities or rely on coordinator-side filesystem, Git, container, or machine-local assumptions"
);
const inspection = JSON.parse(
cp.execFileSync(
"cargo",
[
"run",
"-q",
"-p",
"clusterflux-cli",
"--bin",
"clusterflux",
"--",
"bundle",
"inspect",
"--project",
project,
"--json"
],
{ cwd: repo, encoding: "utf8" }
)
);
assert.strictEqual(inspection.project, project);
assert.strictEqual(
inspection.source_provider_manifest.coordinator_requires_checkout_access,
false
);
assert.strictEqual(
inspection.source_provider_manifest.transfer_policy.local_source_bytes_remain_node_local,
true
);
assert.strictEqual(
inspection.source_provider_manifest.transfer_policy.coordinator_receives_source_bytes_by_default,
false
);
assert.strictEqual(
inspection.source_provider_manifest.transfer_policy.default_full_repo_tarball,
false
);
assert.deepStrictEqual(
inspection.source_provider_manifest.transfer_policy.allowed_remote_transfer.sort(),
["ExplicitSnapshotChunks", "RequiredContent"]
);
assert.strictEqual(inspection.metadata.embeds_full_container_images, false);
assert(inspection.metadata.environments.some((env) => env.name === "linux"));
assert(inspection.metadata.environments.some((env) => env.name === "windows"));
assert(inspection.metadata.selected_inputs.some((input) => input.path === "src/build.rs"));
const bundleDirectory = path.join(repo, "target/acceptance/flagship-bundle");
const build = JSON.parse(
cp.execFileSync(
"cargo",
[
"run",
"-q",
"-p",
"clusterflux-cli",
"--bin",
"clusterflux",
"--",
"build",
"--project",
project,
"--output",
bundleDirectory,
"--json",
],
{ cwd: repo, encoding: "utf8" }
)
);
assert.strictEqual(build.status, "built");
assert.strictEqual(build.bundle_artifact.task_descriptor_count, 10);
assert.strictEqual(build.bundle_artifact.entrypoint_count, 5);
assert.deepStrictEqual(build.bundle_artifact.files.sort(), [
"debug-metadata.json",
"entrypoints.json",
"environments.json",
"manifest.json",
"module.wasm",
"source-provider.json",
"task-descriptors.json",
"vfs-seed.json",
]);
const bundleManifest = JSON.parse(
fs.readFileSync(path.join(bundleDirectory, "manifest.json"), "utf8")
);
const bundleEntrypoints = JSON.parse(
fs.readFileSync(path.join(bundleDirectory, "entrypoints.json"), "utf8")
);
assert.deepStrictEqual(
bundleEntrypoints.map((entrypoint) => entrypoint.name).sort(),
["build", "fail", "long-join", "park-wake", "restart"]
);
const bundleModule = fs.readFileSync(path.join(bundleDirectory, "module.wasm"));
assert.strictEqual(bundleManifest.kind, "clusterflux-bundle");
assert.strictEqual(
bundleManifest.bundle_digest,
`sha256:${crypto.createHash("sha256").update(bundleModule).digest("hex")}`
);
assert.strictEqual(bundleManifest.embeds_full_repository, false);
assert.strictEqual(
bundleManifest.coordinator_receives_source_bytes_by_default,
false
);
const taskDescriptors = JSON.parse(
fs.readFileSync(path.join(bundleDirectory, "task-descriptors.json"), "utf8")
);
assert(
taskDescriptors.some(
(task) =>
task.name === "task_add_one" &&
task.argument_schema === "input : i32" &&
task.result_schema === "i32" &&
task.restart_compatibility_hash.startsWith("sha256:") &&
task.probe_symbol === "clusterflux.probe.task_add_one"
)
);
cp.execFileSync("cargo", ["test", "-p", "launch-build-demo"], {
cwd: repo,
stdio: "inherit"
});
console.log("Flagship demo smoke passed");