feat(desktop): add AppImage update metadata packaging#833
feat(desktop): add AppImage update metadata packaging#833Chrono-byte wants to merge 5 commits intopingdotgg:mainfrom
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR improves Linux desktop AppImage releases by embedding AppStream metadata and AppImage update information, and by publishing the corresponding .zsync artifacts so AppImage update tooling can discover and update releases.
Changes:
- Add an AppStream AppData template for the AppImage and render it with version/date during packaging.
- Repack generated AppImages with
appimagetoolto inject update metadata and (when available) emit.AppImage.zsync. - Update the release workflow to install
appimagetoolon Linux and upload.AppImage.zsyncassets.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| scripts/build-desktop-artifact.ts | Adds AppImage metadata rendering + repacking flow, new CLI/env options, and Linux desktop/AppStream packaging config. |
| apps/desktop/resources/usr/share/metainfo/t3-code-desktop.appdata.xml | Introduces AppData template with placeholders for version and release date. |
| .github/workflows/release.yml | Installs appimagetool in Linux CI, enables update metadata injection, and uploads .AppImage.zsync assets. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| yield* fs.remove(appImagePath).pipe(Effect.catch(() => Effect.void)); | ||
| yield* fs.copyFile(repackedAppImage, appImagePath); | ||
|
|
||
| const writtenArtifacts = [appImagePath]; | ||
| if (yield* fs.exists(repackedZsync)) { | ||
| yield* fs.remove(outputZsync).pipe(Effect.catch(() => Effect.void)); | ||
| yield* fs.copyFile(repackedZsync, outputZsync); | ||
| writtenArtifacts.push(outputZsync); |
There was a problem hiding this comment.
injectAppImageUpdateMetadata removes the original AppImage and then recreates it via copyFile. This will typically drop the executable bit (because the destination file is newly created with default permissions), resulting in a non-executable .AppImage artifact. Preserve permissions by overwriting the existing file (don’t remove it first), or re-chmod +x the copied AppImage after the copy.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
What Changed
Why
This makes Linux AppImage releases updater-aware and better integrated with AppImage manager tooling. Instead of shipping a standalone AppImage with minimal metadata, the release artifact now carries the information needed for AppImage update flows in tools like Gear Lever.
Note
Add AppImage update metadata packaging and
.zsyncgeneration to Linux desktop buildst3-code-desktop.appdata.xml) into the AppImage and, when--inject-appimage-update-metadatais set, repack the artifact usingappimagetoolwith update info and emit a.zsyncfile.appimagetool, passes the new injection flags during Linux builds, and uploads the resulting.AppImage.zsyncfiles as GitHub Release assets.GITHUB_REPOSITORY, the gitoriginremote, or explicit CLI flags (--appimage-update-repository,--appimage-update-information).skipAppImageAppstreamValidation=true) and can be toggled via env/CLI.Macroscope summarized 22e10e3.