fix(release): validate explicit versions and drop duplicate comparators

Review findings on #7586:
- validate an explicit release version before comparing; the shared
  comparator never throws, so 999.bad previously reached every manifest
- ci-release-notes imports the comparator by relative path: the
  release_github job runs without bun install
- route Bun cache pruning through compareVersions and delete
  compareSemverLikeVersions
- regression test for the release-version guard
This commit is contained in:
metaphorics
2026-08-05 01:09:31 +09:00
parent 954894f1d4
commit 726698e2b0
6 changed files with 87 additions and 55 deletions
+36
View File
@@ -0,0 +1,36 @@
import { describe, expect, test } from "bun:test";
import { isValidExplicitVersion } from "./release";
describe("isValidExplicitVersion", () => {
test("rejects malformed versions", () => {
expect(isValidExplicitVersion("999.bad")).toBe(false);
expect(isValidExplicitVersion("17")).toBe(false);
expect(isValidExplicitVersion("17.2")).toBe(false);
expect(isValidExplicitVersion("17.2.8.9")).toBe(false);
expect(isValidExplicitVersion("v17.2.8.9")).toBe(false);
expect(isValidExplicitVersion("abc")).toBe(false);
expect(isValidExplicitVersion("")).toBe(false);
expect(isValidExplicitVersion("v")).toBe(false);
expect(isValidExplicitVersion("17.2.8-")).toBe(false);
});
test("accepts valid three-segment numeric versions", () => {
expect(isValidExplicitVersion("17.2.8")).toBe(true);
expect(isValidExplicitVersion("0.0.0")).toBe(true);
expect(isValidExplicitVersion("1.0.0")).toBe(true);
});
test("accepts leading v prefix", () => {
expect(isValidExplicitVersion("v17.2.8")).toBe(true);
expect(isValidExplicitVersion("V17.2.8")).toBe(false);
});
test("accepts prerelease suffixes", () => {
expect(isValidExplicitVersion("17.2.8-rc.1")).toBe(true);
expect(isValidExplicitVersion("v17.2.8-rc.1")).toBe(true);
expect(isValidExplicitVersion("1.0.0-beta")).toBe(true);
expect(isValidExplicitVersion("1.0.0-alpha.1.2")).toBe(true);
expect(isValidExplicitVersion("1.0.0-0.3.7")).toBe(true);
expect(isValidExplicitVersion("1.0.0-x.7.z.92")).toBe(true);
});
});