diff --git a/.gitea/workflows/build-release.yml b/.gitea/workflows/build-release.yml index 8c24fe92..624118d1 100644 --- a/.gitea/workflows/build-release.yml +++ b/.gitea/workflows/build-release.yml @@ -190,12 +190,15 @@ jobs: # Without nullglob an unmatched pattern stays literal, so test each # candidate instead. Same POSIX-only rule as traceability-check.yml. # - # The .AppImage.tar.gz + .sig pair is what the updater downloads and - # verifies; the plain .AppImage is what a human downloads. Both ship. + # Tauri v2 signs the .AppImage ITSELF and writes .AppImage.sig + # beside it -- there is no .AppImage.tar.gz unless + # bundle.createUpdaterArtifacts is set to "v1Compatible". The updater + # downloads the same AppImage a human does and verifies that .sig, so + # both files must ship or the manifest points at a signature nobody + # can fetch. for bundle in \ src-tauri/target/release/bundle/appimage/*.AppImage \ - src-tauri/target/release/bundle/appimage/*.AppImage.tar.gz \ - src-tauri/target/release/bundle/appimage/*.AppImage.tar.gz.sig \ + src-tauri/target/release/bundle/appimage/*.AppImage.sig \ src-tauri/target/release/bundle/deb/*.deb \ src-tauri/target/release/bundle/rpm/*.rpm; do [ -e "$bundle" ] || continue @@ -499,8 +502,13 @@ jobs: APPIMAGE_URL="" NSIS_URL="" - for f in artifacts/linux/*.AppImage.tar.gz; do + # Tauri v2 signs the AppImage itself; .AppImage.sig sits beside + # it. Verified against a real signed build before tagging -- the + # v1-style .AppImage.tar.gz is never produced with + # createUpdaterArtifacts: true. + for f in artifacts/linux/*.AppImage; do [ -e "$f" ] || continue + case "$f" in *.sig) continue;; esac APPIMAGE_URL="${BASE}/$(basename "$f")" [ -e "$f.sig" ] && APPIMAGE_SIG="$(cat "$f.sig")" done diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 4104ae08..73982d7e 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -44,6 +44,7 @@ }, "bundle": { "active": true, + "createUpdaterArtifacts": true, "targets": [ "deb", "rpm",