From 04e2d128993bfac49b1575b0a39f010963fb3648 Mon Sep 17 00:00:00 2001 From: Jinwoo-H Date: Fri, 3 Jul 2026 21:11:44 -0400 Subject: [PATCH] Keep RC update checks off perf prereleases Co-authored-by: Orca --- src/main/updater-prerelease-feed.test.ts | 23 +++++++++++++++++++++++ src/main/updater-prerelease-feed.ts | 4 +++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/updater-prerelease-feed.test.ts b/src/main/updater-prerelease-feed.test.ts index 81ee19b5057..f30fa276b65 100644 --- a/src/main/updater-prerelease-feed.test.ts +++ b/src/main/updater-prerelease-feed.test.ts @@ -187,6 +187,29 @@ describe('fetchNewerReleaseTag', () => { expect(await fetchNewerReleaseTag('1.3.19-rc.6')).toBe('v1.3.20-rc.1') }) + it('ignores perf-tagged prereleases for regular RC checks', async () => { + respondWithAtom(['v1.4.121-rc.6.perf', 'v1.4.121-rc.6', 'v1.4.121-rc.5']) + + const { fetchNewerReleaseTag } = await import('./updater-prerelease-feed') + + expect(await fetchNewerReleaseTag('1.4.121-rc.5', { includePrerelease: true })).toBe( + 'v1.4.121-rc.6' + ) + }) + + it('reports no RC update when only perf-tagged prereleases are newer', async () => { + respondWithAtom(['v1.4.121-rc.6.perf', 'v1.4.121-rc.5']) + + const { fetchNewerReleaseTagsWithReadiness } = await import('./updater-prerelease-feed') + + await expect( + fetchNewerReleaseTagsWithReadiness('1.4.121-rc.5', 1, { includePrerelease: true }) + ).resolves.toEqual({ + tags: [], + state: 'no-newer' + }) + }) + it('picks the semver-newest perf-tagged prerelease', async () => { respondWithAtom([ 'v1.4.121-rc.6.perf', diff --git a/src/main/updater-prerelease-feed.ts b/src/main/updater-prerelease-feed.ts index fb6f5964487..55f49a77282 100644 --- a/src/main/updater-prerelease-feed.ts +++ b/src/main/updater-prerelease-feed.ts @@ -203,11 +203,13 @@ export async function fetchNewerReleaseTagsWithReadiness( return { tags: [], state: 'unavailable' } } + // Why: perf builds are explicit opt-in; regular prerelease checks should + // stay on the main RC/stable series even though perf tags are semver-newer. const candidates = options.releaseFilter === 'perf' ? tags.filter(({ tag }) => isPerfPrereleaseTag(tag)) : includePrerelease - ? tags + ? tags.filter(({ tag }) => !isPerfPrereleaseTag(tag)) : tags.filter(({ version }) => !isPrereleaseVersion(version)) const newestNewerIndex = candidates.findIndex( ({ version }) => compareVersions(version, currentVersion) > 0