From aab717f11d8482308d8d38be88536c8764bad513 Mon Sep 17 00:00:00 2001 From: Kieran Zhang Date: Thu, 1 Oct 2026 21:26:59 +0800 Subject: [PATCH 1/2] fix(release): keep x64 in Linux artifact names --- electron-builder.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/electron-builder.yml b/electron-builder.yml index dec7d576..7587ef16 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -72,6 +72,14 @@ dmg: type: link path: /Applications +# The global artifactName's ${arch} expands to x86_64 for AppImage and amd64 +# for deb (builder-util getArtifactArchName). Release scripts, docs and the +# updater feed use -x64; only x64 is built, so pin the name per target. +appImage: + artifactName: ${productName}-${version}-x64.${ext} +deb: + artifactName: ${productName}-${version}-x64.${ext} + linux: # Global forceCodeSigning stays on for macOS. Linux has no signing identity # in CI; setting false here stops this platform from inheriting the global flag. From 19273a3bcc7e4af073b54d6a1821a8c93e6bebe5 Mon Sep 17 00:00:00 2001 From: Kieran Zhang Date: Thu, 1 Oct 2026 21:28:57 +0800 Subject: [PATCH 2/2] fix(release): stop expecting a Linux AppImage blockmap sidecar --- .github/workflows/release-macos.yml | 3 +-- docs/release/linux.md | 5 +++-- scripts/publish-release.sh | 3 ++- scripts/test-release-publish.mjs | 6 +++++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release-macos.yml b/.github/workflows/release-macos.yml index 0d5ffae4..afc58da1 100644 --- a/.github/workflows/release-macos.yml +++ b/.github/workflows/release-macos.yml @@ -198,14 +198,13 @@ jobs: env: APPIMAGE_NAME: ${{ steps.preflight.outputs.appImage }} DEB_NAME: ${{ steps.preflight.outputs.deb }} - run: sha256sum "$APPIMAGE_NAME" "${APPIMAGE_NAME}.blockmap" latest-linux.yml "$DEB_NAME" > SHA256SUMS-linux.txt + run: sha256sum "$APPIMAGE_NAME" latest-linux.yml "$DEB_NAME" > SHA256SUMS-linux.txt - name: Upload verified release assets uses: actions/upload-artifact@v7 with: name: linux-x64-release path: | dist/${{ steps.preflight.outputs.appImage }} - dist/${{ steps.preflight.outputs.appImage }}.blockmap dist/latest-linux.yml dist/${{ steps.preflight.outputs.deb }} dist/SHA256SUMS-linux.txt diff --git a/docs/release/linux.md b/docs/release/linux.md index 440a98be..c86eb996 100644 --- a/docs/release/linux.md +++ b/docs/release/linux.md @@ -7,10 +7,11 @@ Pace 的 Linux 发行版是 **x64 AppImage** 与 **deb**,与 macOS ARM64 打 | 文件 | 用途 | | --- | --- | | `Pace--x64.AppImage` | 首次安装,也是应用内更新的安装包 | -| `Pace--x64.AppImage.blockmap` | AppImage 差分更新 | | `latest-linux.yml` | electron-updater 的 Linux feed。必须原样上传 | | `Pace--x64.deb` | Debian / Ubuntu 安装包。**不会**自动更新,升级需要重新安装 | -| `SHA256SUMS-linux.txt` | 覆盖上面四个文件 | +| `SHA256SUMS-linux.txt` | 覆盖上面三个文件 | + +AppImage 差分更新使用内嵌在 AppImage 尾部的 blockmap(`latest-linux.yml` 的 `blockMapSize` 指向它),electron-builder 不产出 `.blockmap` 旁车文件。 deb 只负责安装。应用内更新只走 AppImage(ADR-0033)。 diff --git a/scripts/publish-release.sh b/scripts/publish-release.sh index fc871006..b6aa474b 100644 --- a/scripts/publish-release.sh +++ b/scripts/publish-release.sh @@ -12,8 +12,9 @@ assets=( "dist/${zip_name}.blockmap" "dist/latest-mac.yml" "dist/SHA256SUMS.txt" + # The AppImage blockmap is embedded in the file (latest-linux.yml's + # blockMapSize); there is no .blockmap sidecar to ship. "dist/$APPIMAGE_NAME" - "dist/${APPIMAGE_NAME}.blockmap" "dist/latest-linux.yml" "dist/$DEB_NAME" "dist/SHA256SUMS-linux.txt" diff --git a/scripts/test-release-publish.mjs b/scripts/test-release-publish.mjs index 79083749..2831ac67 100644 --- a/scripts/test-release-publish.mjs +++ b/scripts/test-release-publish.mjs @@ -24,8 +24,9 @@ const releaseAssets = (version) => { `${zipArtifact}.blockmap`, "latest-mac.yml", "SHA256SUMS.txt", + // The AppImage blockmap is embedded in the AppImage itself + // (latest-linux.yml's blockMapSize); no sidecar is produced. appImage, - `${appImage}.blockmap`, "latest-linux.yml", deb, "SHA256SUMS-linux.txt", @@ -109,6 +110,9 @@ test("a stable release is published only after every required asset reaches its assert.ok(edit.includes("--prerelease=false")); assert.ok(edit.includes("--latest=true")); assert.ok(calls.indexOf(edit) > calls.indexOf(create)); + // The AppImage blockmap is embedded; nothing may upload a sidecar. + const uploads = calls.filter(args => args[1] === "upload").flat(); + assert.ok(!uploads.some(arg => arg.endsWith(".AppImage.blockmap"))); }); test("a prerelease is published without becoming the latest stable release", t => {