Files
oh-my-pi/scripts/release.test.ts
T
metaphorics df3fa86f7d fix(release): reject prereleases and normalize the version prefix
Wave-2 review findings on #7586:
- the guard accepted `17.2.8-rc.1`, and the publish step passes no
  --tag, so a prerelease would have become the npm `latest` every
  unqualified install and `omp update` resolve
- `v17.2.8` passed the guard and reached Cargo.toml verbatim, which
  cargo rejects only after every manifest was rewritten; validation now
  returns the normalized version and callers write that
2026-08-05 02:48:59 +09:00

39 lines
1.7 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { validateExplicitVersion } from "./release";
describe("validateExplicitVersion", () => {
test("rejects malformed versions", () => {
expect(validateExplicitVersion("999.bad")).toBe(null);
expect(validateExplicitVersion("17")).toBe(null);
expect(validateExplicitVersion("17.2")).toBe(null);
expect(validateExplicitVersion("17.2.8.9")).toBe(null);
expect(validateExplicitVersion("v17.2.8.9")).toBe(null);
expect(validateExplicitVersion("abc")).toBe(null);
expect(validateExplicitVersion("")).toBe(null);
expect(validateExplicitVersion("v")).toBe(null);
expect(validateExplicitVersion("17.2.8-")).toBe(null);
});
test("rejects prerelease suffixes (not supported by this release path)", () => {
// Prereleases would be published as npm `latest` because the downstream
// publish runs `npm publish` with no `--tag`.
expect(validateExplicitVersion("17.2.8-rc.1")).toBe(null);
expect(validateExplicitVersion("v17.2.8-beta")).toBe(null);
expect(validateExplicitVersion("1.0.0-alpha")).toBe(null);
expect(validateExplicitVersion("1.0.0-alpha.1.2")).toBe(null);
expect(validateExplicitVersion("1.0.0-0.3.7")).toBe(null);
expect(validateExplicitVersion("1.0.0-x.7.z.92")).toBe(null);
});
test("accepts bare three-segment numeric versions and returns them unchanged", () => {
expect(validateExplicitVersion("17.2.8")).toBe("17.2.8");
expect(validateExplicitVersion("0.0.0")).toBe("0.0.0");
expect(validateExplicitVersion("1.0.0")).toBe("1.0.0");
});
test("accepts leading v prefix and normalizes to the bare version", () => {
expect(validateExplicitVersion("v17.2.8")).toBe("17.2.8");
expect(validateExplicitVersion("V17.2.8")).toBe(null);
});
});