diff --git a/apps/desktop/scripts/ci/plan-r2-release-asset-prune.mjs b/apps/desktop/scripts/ci/plan-r2-release-asset-prune.mjs index 25a57510..c7bac457 100644 --- a/apps/desktop/scripts/ci/plan-r2-release-asset-prune.mjs +++ b/apps/desktop/scripts/ci/plan-r2-release-asset-prune.mjs @@ -9,6 +9,7 @@ import { githubRepositoryFromProduct, isDownloadAssetName, relativeUpdatePath, + versionFromAssetName, } from '../update-release-assets.mjs'; const GITHUB_API_BASE_URL = 'https://api.github.com'; @@ -52,6 +53,10 @@ function githubHeaders(token) { return headers; } +function releaseVersionFromTag(tagName) { + return String(tagName ?? '').replace(/^v/u, ''); +} + async function fetchGithubReleases(repository, fetchImpl, token) { const releases = []; for (let page = 1; page <= MAX_RELEASE_PAGES; page += 1) { @@ -102,9 +107,14 @@ export async function planR2ReleaseAssetPrune(projectRoot, channel, options = {} const keys = []; for (const release of staleReleases) { + const releaseVersion = releaseVersionFromTag(release?.tag_name); for (const asset of release.assets ?? []) { const fileName = asset?.name; - if (!isDownloadAssetName(fileName) || channelFromAssetName(fileName) !== channel) { + if ( + !isDownloadAssetName(fileName) || + channelFromAssetName(fileName) !== channel || + versionFromAssetName(fileName) !== releaseVersion + ) { continue; } keys.push(`${updatePath}/${fileName}`); diff --git a/apps/desktop/tests/ci/plan-r2-release-asset-prune.test.ts b/apps/desktop/tests/ci/plan-r2-release-asset-prune.test.ts index bd5673d5..8b15be95 100644 --- a/apps/desktop/tests/ci/plan-r2-release-asset-prune.test.ts +++ b/apps/desktop/tests/ci/plan-r2-release-asset-prune.test.ts @@ -70,6 +70,7 @@ describe('planR2ReleaseAssetPrune', () => { release('v0.2.0-beta.2', '2026-05-22T00:00:00Z', [ 'TouchAI-beta-0.2.0-beta.2-windows-full.nupkg', 'TouchAI-beta-0.2.0-beta.2-windows-delta.nupkg', + 'TouchAI-beta-0.2.0-beta.20-windows-full.nupkg', 'release-notes.md', ]), release('v0.2.0', '2026-05-21T00:00:00Z', ['TouchAI-0.2.0-windows-full.nupkg']),