mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-03 09:39:25 +00:00
141 lines
4.7 KiB
TypeScript
141 lines
4.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
parseArgs,
|
|
resolveReleaseUpgradeBaseline,
|
|
} from "../../scripts/lib/release-upgrade-baseline.mjs";
|
|
|
|
describe("release upgrade baseline resolver", () => {
|
|
it("rejects short flag values before resolving baselines", () => {
|
|
expect(() => parseArgs(["--candidate-version", "-h"])).toThrow(
|
|
"missing value for --candidate-version",
|
|
);
|
|
expect(() => parseArgs(["--versions-json", "-h"])).toThrow("missing value for --versions-json");
|
|
});
|
|
|
|
it.each([
|
|
{ candidate: "2026.8.1", expected: "2026.7.1-2" },
|
|
{ candidate: "2026.8.1-beta.2", expected: "2026.7.1-2" },
|
|
{ candidate: "2026.8.1-alpha.2", expected: "2026.7.1-2" },
|
|
{ candidate: "2026.7.1-2", expected: "2026.7.1-1" },
|
|
{ candidate: "2026.7.1-1", expected: "2026.7.1" },
|
|
{ candidate: "2026.7.1", expected: "2026.6.34" },
|
|
])("selects the stable predecessor of $candidate", ({ candidate, expected }) => {
|
|
expect(
|
|
resolveReleaseUpgradeBaseline(candidate, [
|
|
"2026.8.1-beta.1",
|
|
"2026.7.1-1",
|
|
"2026.9.1",
|
|
"2026.8.1-alpha.1",
|
|
"2026.7.1-2",
|
|
"2026.6.34",
|
|
"2026.7.1",
|
|
"2026.8.1",
|
|
"2026.7.1-beta.2",
|
|
"2026.7.1-2",
|
|
]),
|
|
).toBe(`openclaw@${expected}`);
|
|
});
|
|
|
|
it("rejects the candidate itself as an upgrade baseline", () => {
|
|
expect(() =>
|
|
resolveReleaseUpgradeBaseline("2026.7.1", ["2026.7.1-beta.2", "2026.7.1", "2026.8.1"]),
|
|
).toThrow("no published stable OpenClaw baseline predates candidate");
|
|
});
|
|
|
|
it.each([
|
|
["2026.8.1-beta.2", ["2026.8.1-beta.1", "2026.8.1"]],
|
|
["2026.7.1", ["2026.8.1", "invalid"]],
|
|
["2026.7.1", []],
|
|
])("rejects missing stable baselines for %s", (candidate, versions) => {
|
|
expect(() => resolveReleaseUpgradeBaseline(candidate, versions)).toThrow(
|
|
"no published stable OpenClaw baseline",
|
|
);
|
|
});
|
|
|
|
it("requires a published candidate to occur in the same npm versions snapshot", () => {
|
|
expect(() =>
|
|
resolveReleaseUpgradeBaseline("2026.8.1-beta.2", ["2026.7.1", "2026.8.1-beta.1"], {
|
|
candidatePublished: true,
|
|
}),
|
|
).toThrow("published candidate 2026.8.1-beta.2 is absent from npm versions");
|
|
});
|
|
|
|
it("allows a local candidate absent from npm metadata to use an older stable release", () => {
|
|
expect(resolveReleaseUpgradeBaseline("2026.8.1-beta.2", ["2026.7.1", "2026.8.1-beta.1"])).toBe(
|
|
"openclaw@2026.7.1",
|
|
);
|
|
});
|
|
|
|
it.each([
|
|
["2026.7.1", "2026.7.1"],
|
|
["2026.8.1", "2026.7.1"],
|
|
["2026.7.1-1", "2026.7.1-1"],
|
|
])("rejects non-older explicit baseline %s for %s", (previousVersion, candidateVersion) => {
|
|
expect(() =>
|
|
resolveReleaseUpgradeBaseline(candidateVersion, ["2026.7.1", "2026.7.1-1", "2026.8.1"], {
|
|
previousVersion,
|
|
}),
|
|
).toThrow("is not a published stable predecessor");
|
|
});
|
|
|
|
it("selects the latest stable release from the frozen release month", () => {
|
|
expect(
|
|
resolveReleaseUpgradeBaseline(
|
|
"2026.6.35",
|
|
["2026.6.34", "2026.6.33", "2026.6.35", "2026.7.1", "2026.6.34-1"],
|
|
{
|
|
targetContextRef: "extended-stable/2026.6.33",
|
|
},
|
|
),
|
|
).toBe("openclaw@2026.6.34-1");
|
|
});
|
|
|
|
it("selects a stable predecessor for the first frozen .33 candidate", () => {
|
|
expect(
|
|
resolveReleaseUpgradeBaseline(
|
|
"2026.7.33",
|
|
["2026.6.34", "2026.7.1", "2026.7.1-1", "2026.7.1-2", "2026.8.1"],
|
|
{
|
|
targetContextRef: "extended-stable/2026.7.33",
|
|
},
|
|
),
|
|
).toBe("openclaw@2026.7.1-2");
|
|
});
|
|
|
|
it("honors an explicit published predecessor from the frozen extended-stable line", () => {
|
|
expect(
|
|
resolveReleaseUpgradeBaseline("2026.6.35", ["2026.6.33", "2026.6.34", "2026.6.35"], {
|
|
previousVersion: "2026.6.33",
|
|
targetContextRef: "extended-stable/2026.6.33",
|
|
}),
|
|
).toBe("openclaw@2026.6.33");
|
|
});
|
|
|
|
it.each(["2026.6.35", "2026.7.1", "2026.6.31"])(
|
|
"rejects an incompatible explicit frozen baseline %s",
|
|
(previousVersion) => {
|
|
expect(() =>
|
|
resolveReleaseUpgradeBaseline("2026.6.35", ["2026.6.33", "2026.6.34", "2026.6.35"], {
|
|
previousVersion,
|
|
targetContextRef: "extended-stable/2026.6.33",
|
|
}),
|
|
).toThrow("previous_version");
|
|
},
|
|
);
|
|
|
|
it.each([
|
|
["2026.7.1", "extended-stable/2026.6.33"],
|
|
["2026.6.35-beta.1", "extended-stable/2026.6.33"],
|
|
["2026.6.33", "extended-stable/2026.6.33"],
|
|
["2026.6.35", "extended-stable/2026.6.34"],
|
|
])(
|
|
"rejects incompatible frozen extended-stable targets",
|
|
(candidateVersion, targetContextRef) => {
|
|
expect(() =>
|
|
resolveReleaseUpgradeBaseline(candidateVersion, ["2026.6.34", "2026.6.33"], {
|
|
targetContextRef,
|
|
}),
|
|
).toThrow();
|
|
},
|
|
);
|
|
});
|