diff --git a/.changeset/prerelease-update-check.md b/.changeset/prerelease-update-check.md new file mode 100644 index 000000000..5c6df740d --- /dev/null +++ b/.changeset/prerelease-update-check.md @@ -0,0 +1,5 @@ +--- +"ctx7": patch +--- + +Show the update notice to canary users once the matching stable version is released. diff --git a/packages/cli/src/__tests__/update-check.test.ts b/packages/cli/src/__tests__/update-check.test.ts index f7c3052ab..95364e414 100644 --- a/packages/cli/src/__tests__/update-check.test.ts +++ b/packages/cli/src/__tests__/update-check.test.ts @@ -43,6 +43,11 @@ describe("compareVersions", () => { expect(compareVersions("0.3.13", "0.3.13")).toBe(0); expect(compareVersions("0.3.13", "0.3.14")).toBeLessThan(0); }); + + test("orders a prerelease before its release", () => { + expect(compareVersions("0.3.14", "0.3.14-canary-20250101000000")).toBeGreaterThan(0); + expect(compareVersions("0.3.14-canary-20250101000000", "0.3.14")).toBeLessThan(0); + }); }); describe("detectInstallMethod", () => { diff --git a/packages/cli/src/utils/update-check.ts b/packages/cli/src/utils/update-check.ts index 600e0aa3a..b9c5ffdfc 100644 --- a/packages/cli/src/utils/update-check.ts +++ b/packages/cli/src/utils/update-check.ts @@ -96,7 +96,8 @@ export function compareVersions(a: string, b: string): number { if (diff !== 0) return diff; } - return 0; + // A prerelease (e.g. a canary build) sorts before its release. + return Number(b.includes("-")) - Number(a.includes("-")); } export function detectInstallMethod(env: NodeJS.ProcessEnv = process.env): InstallMethod {