ci(desktop): publish Linux .deb + .AppImage bundles #128

Merged
nrupard merged 1 commit from feat/lc-132-publish-linux-bundles into main 2026-05-18 16:51:12 +02:00
Owner

Summary

Closes LC-132. Switches build-desktop-linux.yml and publish-release.yml from Dockerfile.desktop-linux to Dockerfile.desktop-linux-bundles so each push to main and each v* tag now publish a .deb and an .AppImage to the Generic Packages registry alongside the raw binary.

Filenames

Stable filenames on the registry side so the release manifest can hard-code download URLs:

  • lets-chat-desktop-linux-x86_64 (raw binary, unchanged)
  • lets-chat-desktop-linux-amd64.deb
  • lets-chat-desktop-linux-amd64.AppImage

Tauri stamps the bundles with the crate version (lets-chat_0.1.0_amd64.deb, etc.); the workflow resolves the actual filenames via ls artifacts/bundle-linux/*.deb | first | get name so a future version bump does not require updating the upload step.

Manifest

latest.json gains linux_deb and linux_appimage URL entries. The raw binary path stays unchanged so the existing desktop self-updater (update.rs) keeps working with no client-side change.

Skipped the optional $APPIMAGE-aware updater detection mentioned in LC-132; minimal solution first, can land as a separate follow-up if needed.

Test plan

  • python3 -c 'import yaml; yaml.safe_load(open(f))' on both workflow files.
  • just build-desktop-linux-bundles (local mirror of the CI bundle build) produces lets-chat_0.1.0_amd64.deb and lets-chat_0.1.0_amd64.AppImage under artifacts/bundle-linux/.
  • nu -c 'ls artifacts/bundle-linux/*.deb | first | get name' resolves the right file (validates the filename-resolution snippet used in CI).
  • CI verification: post-merge, the build-desktop-linux workflow shows all three artifacts uploaded to ${PACKAGE_OWNER}/generic/lets-chat/latest/.
  • CI verification: cutting a v* tag publishes the latest.json manifest with linux_deb + linux_appimage URLs that resolve.
## Summary Closes [LC-132](https://niceguyit.myjetbrains.com/youtrack/issue/LC-132). Switches `build-desktop-linux.yml` and `publish-release.yml` from `Dockerfile.desktop-linux` to `Dockerfile.desktop-linux-bundles` so each push to `main` and each `v*` tag now publish a `.deb` and an `.AppImage` to the Generic Packages registry alongside the raw binary. ## Filenames Stable filenames on the registry side so the release manifest can hard-code download URLs: - `lets-chat-desktop-linux-x86_64` (raw binary, unchanged) - `lets-chat-desktop-linux-amd64.deb` - `lets-chat-desktop-linux-amd64.AppImage` Tauri stamps the bundles with the crate version (`lets-chat_0.1.0_amd64.deb`, etc.); the workflow resolves the actual filenames via `ls artifacts/bundle-linux/*.deb | first | get name` so a future version bump does not require updating the upload step. ## Manifest `latest.json` gains `linux_deb` and `linux_appimage` URL entries. The raw binary path stays unchanged so the existing desktop self-updater (`update.rs`) keeps working with no client-side change. Skipped the optional `$APPIMAGE`-aware updater detection mentioned in LC-132; minimal solution first, can land as a separate follow-up if needed. ## Test plan - [x] `python3 -c 'import yaml; yaml.safe_load(open(f))'` on both workflow files. - [x] `just build-desktop-linux-bundles` (local mirror of the CI bundle build) produces `lets-chat_0.1.0_amd64.deb` and `lets-chat_0.1.0_amd64.AppImage` under `artifacts/bundle-linux/`. - [x] `nu -c 'ls artifacts/bundle-linux/*.deb | first | get name'` resolves the right file (validates the filename-resolution snippet used in CI). - [ ] CI verification: post-merge, the build-desktop-linux workflow shows all three artifacts uploaded to `${PACKAGE_OWNER}/generic/lets-chat/latest/`. - [ ] CI verification: cutting a `v*` tag publishes the `latest.json` manifest with `linux_deb` + `linux_appimage` URLs that resolve.
ci(desktop): publish Linux .deb + .AppImage bundles
All checks were successful
Check / clippy + fmt + tests (pull_request) Successful in 45s
dbf2c9a052
Switches `build-desktop-linux.yml` and `publish-release.yml` from the
fast `Dockerfile.desktop-linux` to `Dockerfile.desktop-linux-bundles`
so each push to main and each `v*` tag now ship a `.deb` and an
`.AppImage` alongside the raw binary. Stable filenames
(`lets-chat-desktop-linux-amd64.deb` /
`lets-chat-desktop-linux-amd64.AppImage`) so the release manifest can
hard-code download URLs; Tauri's version-stamped bundle filenames are
resolved via `ls *.deb` / `ls *.AppImage` so the workflow stays
insulated from the crate version stem.

`latest.json` gains `linux_deb` and `linux_appimage` entries; the raw
binary path stays unchanged so the existing self-updater keeps working
with no client-side change. Closes LC-132.
nrupard deleted branch feat/lc-132-publish-linux-bundles 2026-05-18 16:51:12 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/lets-chat!128
No description provided.