Skip to content

ci: sign release DMG for the curl-based installer#242

Merged
quiet-node merged 1 commit into
mainfrom
claude/nervous-hopper-006492
Jun 22, 2026
Merged

ci: sign release DMG for the curl-based installer#242
quiet-node merged 1 commit into
mainfrom
claude/nervous-hopper-006492

Conversation

@quiet-node

Copy link
Copy Markdown
Owner

Overview

Adds a signing step to the release workflow so each release publishes a detached signature for Thuki.dmg. This is the release-side half of the upcoming one-line installer (curl -fsSL https://thuki.app/install.sh | sh), which downloads the DMG over HTTPS and verifies it before installing, so users get a clean launch with no Gatekeeper "Apple could not verify" prompt and no manual xattr step.

How it works

After the DMG is built, the workflow signs it with openssl dgst -sha256 -sign using an RSA-4096 private key supplied via the new THUKI_INSTALLER_RSA_PRIVATE_KEY Actions secret, and uploads Thuki.dmg.sig alongside Thuki.dmg. The private key is written to a temp file and removed on step exit; it never lands on the release.

The installer verifies that signature with stock macOS openssl against a public key pinned in the install script. RSA is used (rather than the existing ed25519 updater key) specifically because stock LibreSSL on macOS cannot verify ed25519/minisign signatures, so this path needs no extra tooling on the user's machine. Because the key lives only in CI, a DMG swapped onto a compromised release fails verification and is never installed.

Thuki.dmg keeps its stable releases/latest/download/ URL, so the installer tracks new versions with no per-release changes.

Testing

  • End-to-end signed the current published Thuki.dmg with the private key and verified it with the public key using stock LibreSSL 3.3.6: Verified OK.
  • Byte-level tamper of the DMG is correctly rejected (Verification Failure).
  • Workflow YAML validated.

Note

The signature only appears starting with the next release that runs this workflow; the matching public key and install.sh are managed in the landing-page repo.

Signed-off-by: Logan Nguyen <lg.131.dev@gmail.com>
@quiet-node quiet-node merged commit 248504a into main Jun 22, 2026
3 checks passed
@quiet-node quiet-node deleted the claude/nervous-hopper-006492 branch June 22, 2026 03:08
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