Skip to content

Phase 6e: add publish-desktop job (Tauri installers, unsigned)#20

Merged
joaoh82 merged 1 commit intomainfrom
feat/publish-desktop
Apr 23, 2026
Merged

Phase 6e: add publish-desktop job (Tauri installers, unsigned)#20
joaoh82 merged 1 commit intomainfrom
feat/publish-desktop

Conversation

@joaoh82
Copy link
Copy Markdown
Owner

@joaoh82 joaoh82 commented Apr 23, 2026

Summary

Adds publish-desktop to release.yml — a tauri-action@v0-based matrix job that builds unsigned desktop installers on every release and uploads them to the sqlrite-desktop-v<V> GitHub Release.

Matrix (mirrors publish-ffi):

OS Installer Arch
ubuntu-22.04 AppImage + deb x86_64
macos-latest dmg aarch64
windows-latest msi x86_64

ubuntu-22.04 (not -latest) is deliberate — AppImage's glibc gets baked in at build time, so building on 22.04 produces an AppImage that runs on any distro with glibc ≥ 2.35 (covers ~everything shipped since 2022).

Key changes

  • .github/workflows/release.yml — new publish-desktop job, sqlrite-desktop-v<V> tag added to tag-all, finalize now awaits publish-desktop, umbrella release body gets a 🖥️ Desktop link.
  • desktop/src-tauri/tauri.conf.jsonbundle.active: true (was false — the single biggest gotcha, installers don't build otherwise), full platform-native icon set, category/descriptions for .deb / AppImage metadata.
  • Pre-generated icons committed — ran npx tauri icon src-tauri/icons/icon.png once locally; committed the 5 desktop-essential outputs (64x64.png, 128x128.png, 128x128@2x.png, icon.icns, icon.ico). Keeps CI deterministic and saves ~10s per matrix cell. Mobile (android/ios) + Windows Store (Square*) outputs discarded.

Not in scope (tracked as follow-ups)

  • macOS universal dmg (x86_64 + aarch64 lipo'd together) — needs both Rust targets + a lipo step. MVP ships aarch64-only, same as publish-ffi.
  • Linux aarch64 AppImage — adds one ubuntu-24.04-arm matrix cell.
  • Code signing — Phase 6.1. Installers ship unsigned for now; release body documents the "unidentified developer" / SmartScreen bypass.

Test plan

  • python3 -c "import yaml; yaml.safe_load(open('.github/workflows/release.yml'))" — YAML parses
  • cargo check -p sqlrite-desktop — clean
  • CI passes on this PR (the existing desktop-build job in ci.yml exercises the Rust side on Linux; the new publish-desktop only runs on release merges)
  • After merge: dispatch release-pr.yml at 0.1.3 → review → merge → approve release env gate → verify 3 installers land on the sqlrite-desktop-v0.1.3 release

🤖 Generated with Claude Code

Adds a tauri-action-based matrix job that builds + uploads
unsigned desktop installers to the sqlrite-desktop-v<V> GitHub
Release alongside the existing publish-crate + publish-ffi jobs.

Matrix mirrors publish-ffi's OS/arch choices for consistency:

  ubuntu-22.04   → AppImage + .deb (x86_64)
  macos-latest   → .dmg (aarch64)
  windows-latest → .msi (x86_64)

ubuntu-22.04 (not ubuntu-latest) is deliberate: AppImage links
glibc at build time, so building on 22.04 (glibc 2.35) yields an
AppImage that runs on any distro with glibc ≥ 2.35 — building on
24.04 would produce an AppImage that won't launch on older
distros.

Wiring:

  - tag-all → also pushes sqlrite-desktop-v<V>
  - finalize's `needs` → extended with publish-desktop
  - umbrella release body → includes 🖥️ Desktop link
  - environment: release → same approval gate as the other
    publish-* jobs (re-uses the single required-reviewer config
    that already exists for crates.io)

Tauri configuration:

  - bundle.active flipped from false → true so installers actually
    get produced (this was the single-biggest gotcha)
  - bundle.icon array extended to list the native-format icons for
    each platform (.icns for macOS, .ico for Windows, size-specific
    PNGs for Linux)
  - category / shortDescription / longDescription added so .deb /
    AppImage metadata has useful fields instead of defaults

Icons (64x64.png, 128x128.png, 128x128@2x.png, icon.icns,
icon.ico) are pre-generated via `npx tauri icon
src-tauri/icons/icon.png` and committed to the repo. That keeps
CI deterministic (no build-time network dependency on the Tauri
CLI version resolving differently over time) and saves ~10s per
matrix cell. Tradeoff: anyone swapping out icon.png has to re-run
`tauri icon` locally and commit the regenerated assets — PR review
catches this. The android/ and ios/ outputs + Windows-Store
Square* / StoreLogo variants tauri icon also generates are
discarded (not used by desktop-MVP, keeps repo lean).

Installers ship unsigned — Phase 6.1 wires up Apple Developer ID
+ Windows code-signing certs. The release body warns about the
"unidentified developer" / SmartScreen prompts and how to bypass
until signing lands.

Follow-ups:
  - macOS universal (x86_64 + aarch64 via lipo) — needs both
    Rust targets installed + a lipo step
  - Linux aarch64 AppImage — adds one ubuntu-24.04-arm matrix cell

Also updates docs/roadmap.md with the Phase 6e done-marker + a
retrospective note on the v0.1.2 canary success.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@joaoh82 joaoh82 merged commit f392855 into main Apr 23, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant