Skip to content

feat(desktop): add AppImage update metadata packaging#833

Closed
Chrono-byte wants to merge 5 commits intopingdotgg:mainfrom
Chrono-byte:split/appimage-update-metadata
Closed

feat(desktop): add AppImage update metadata packaging#833
Chrono-byte wants to merge 5 commits intopingdotgg:mainfrom
Chrono-byte:split/appimage-update-metadata

Conversation

@Chrono-byte
Copy link

@Chrono-byte Chrono-byte commented Mar 10, 2026

What Changed

  • add AppStream metadata template for the Linux desktop AppImage
  • inject AppImage update information when repacking built AppImages
  • generate and publish .AppImage.zsync files in the release workflow
  • install appimagetool in Linux CI so updater metadata can be embedded during packaging
  • include Linux desktop entry metadata and AppData in the packaged artifact
    • Fixes the displayed icon+name of the app on Linux

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 .zsync generation to Linux desktop builds

  • Linux builds in build-desktop-artifact.ts now embed AppData XML (t3-code-desktop.appdata.xml) into the AppImage and, when --inject-appimage-update-metadata is set, repack the artifact using appimagetool with update info and emit a .zsync file.
  • The release workflow downloads and verifies a pinned appimagetool, passes the new injection flags during Linux builds, and uploads the resulting .AppImage.zsync files as GitHub Release assets.
  • Repository update info is auto-derived from GITHUB_REPOSITORY, the git origin remote, or explicit CLI flags (--appimage-update-repository, --appimage-update-information).
  • AppStream validation is skipped by default (skipAppImageAppstreamValidation=true) and can be toggled via env/CLI.
  • Behavioral Change: the build script module no longer auto-runs on import; it only executes when invoked as the main entrypoint.

Macroscope summarized 22e10e3.

Copilot AI review requested due to automatic review settings March 10, 2026 19:26
@coderabbitai
Copy link

coderabbitai bot commented Mar 10, 2026

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a1633c35-b819-4755-bd40-62da6ffe6e06

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 10, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 appimagetool to inject update metadata and (when available) emit .AppImage.zsync.
  • Update the release workflow to install appimagetool on Linux and upload .AppImage.zsync assets.

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.

Comment on lines +494 to +501
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);
Copy link

Copilot AI Mar 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Chrono-byte and others added 3 commits March 10, 2026 15:36
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>
Chrono-byte added a commit to Chrono-byte/t3code-linux that referenced this pull request Mar 10, 2026
@maria-rcks maria-rcks closed this Mar 12, 2026
@maria-rcks maria-rcks reopened this Mar 12, 2026
@maria-rcks maria-rcks closed this Mar 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants