From 2c95d7f83685f203456c4ab8df561bdda9500a63 Mon Sep 17 00:00:00 2001 From: leokun Date: Wed, 26 Aug 2026 22:44:27 +0800 Subject: [PATCH] fix: finalize draft releases by asset id --- .github/workflows/release.yml | 14 ++++++++++++-- scripts/release/normalize-tauri-update.mjs | 16 ++++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 682eff8..e6369ad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -219,8 +219,18 @@ jobs: VERSION: ${{ needs.prepare.outputs.version }} run: | mkdir -p tauri-update - gh release download "v${VERSION}" --pattern latest.json --dir tauri-update - gh api "repos/${GITHUB_REPOSITORY}/releases/tags/v${VERSION}" > tauri-update/release.json + release_id=$( + gh api "repos/${GITHUB_REPOSITORY}/releases?per_page=100" \ + --jq ".[] | select(.tag_name == \"v${VERSION}\") | .id" + ) + test -n "${release_id}" + gh api "repos/${GITHUB_REPOSITORY}/releases/${release_id}" > tauri-update/release.json + asset_id=$(node -p 'require("./tauri-update/release.json").assets.find(({ name }) => name === "latest.json")?.id ?? ""') + test -n "${asset_id}" + gh api \ + -H "Accept: application/octet-stream" \ + "repos/${GITHUB_REPOSITORY}/releases/assets/${asset_id}" \ + > tauri-update/latest.json node scripts/release/normalize-tauri-update.mjs \ --manifest tauri-update/latest.json \ --release tauri-update/release.json \ diff --git a/scripts/release/normalize-tauri-update.mjs b/scripts/release/normalize-tauri-update.mjs index 9876237..ce4755f 100644 --- a/scripts/release/normalize-tauri-update.mjs +++ b/scripts/release/normalize-tauri-update.mjs @@ -36,22 +36,26 @@ export function normalizeTauriUpdate(manifest, release, repository, version) { throw new Error("updater manifest has no platforms"); } - const assetsByApiUrl = new Map(); + const assetsBySourceUrl = new Map(); const publicAssetUrls = new Set(); for (const asset of release.assets ?? []) { - if (!asset?.id || !asset?.browser_download_url) continue; - assetsByApiUrl.set( + if (!asset?.id || !asset?.name) continue; + const publicUrl = `https://github.com/${repository}/releases/download/v${version}/${encodeURIComponent(asset.name)}`; + assetsBySourceUrl.set( `https://api.github.com/repos/${repository}/releases/assets/${asset.id}`, - asset.browser_download_url, + publicUrl, ); - publicAssetUrls.add(asset.browser_download_url); + if (asset.browser_download_url) { + assetsBySourceUrl.set(asset.browser_download_url, publicUrl); + } + publicAssetUrls.add(publicUrl); } for (const [platform, entry] of Object.entries(manifest.platforms)) { if (!entry?.signature || !entry?.url) { throw new Error(`updater platform ${platform} is missing its URL or signature`); } - const publicUrl = assetsByApiUrl.get(entry.url) ?? entry.url; + const publicUrl = assetsBySourceUrl.get(entry.url) ?? entry.url; if (!publicAssetUrls.has(publicUrl)) { throw new Error(`updater platform ${platform} references an unknown release asset`); }