diff --git a/packaging/assemble.mjs b/packaging/assemble.mjs index c321dff..7f3b544 100644 --- a/packaging/assemble.mjs +++ b/packaging/assemble.mjs @@ -6,11 +6,17 @@ import process from "node:process"; import { binaryName, npmPackage, rustPackage, targets } from "./targets.mjs"; const root = resolve(import.meta.dirname, ".."); +const stableVersion = /^\d+\.\d+\.\d+$/; +const canaryVersion = /^0\.0\.0-canary\.\d{14}\.[0-9a-f]{12}$/; + +export function isPackageVersion(value) { + return stableVersion.test(value) || canaryVersion.test(value); +} function parseArgs(argv) { const values = {}; for (let index = 0; index < argv.length; index += 2) values[argv[index]?.replace(/^--/, "")] = argv[index + 1]; - if (!/^\d+\.\d+\.\d+$/.test(values.version ?? "")) throw new Error("--version must be semver without a leading v"); + if (!isPackageVersion(values.version ?? "")) throw new Error("--version must be stable semver or a Yield canary version"); if (!values.binaries || !values.output) throw new Error("--binaries and --output are required"); return { version: values.version, binaries: resolve(values.binaries), output: resolve(values.output) }; } diff --git a/packaging/assemble.test.mjs b/packaging/assemble.test.mjs index d411cc7..5ad26cb 100644 --- a/packaging/assemble.test.mjs +++ b/packaging/assemble.test.mjs @@ -3,9 +3,17 @@ import assert from "node:assert/strict"; import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises"; import { join } from "node:path"; import { tmpdir } from "node:os"; -import { assemble } from "./assemble.mjs"; +import { assemble, isPackageVersion } from "./assemble.mjs"; import { binaryName, npmPackage, targets } from "./targets.mjs"; +test("accepts stable and exact Yield canary versions", () => { + assert.equal(isPackageVersion("1.2.3"), true); + assert.equal(isPackageVersion("0.0.0-canary.20260807104031.b081bae38282"), true); + assert.equal(isPackageVersion("1.2.3-beta.1"), false); + assert.equal(isPackageVersion("0.0.0-canary.latest.b081bae38282"), false); + assert.equal(isPackageVersion("v1.2.3"), false); +}); + test("assembles one public npm package and six matching runtimes", async (t) => { const root = await mkdtemp(join(tmpdir(), "yield-assemble-")); t.after(() => rm(root, { recursive: true, force: true }));