Skip to content

ci: GitHub Actions for CI checks and cross-platform releases#6

Merged
proofofprints merged 2 commits into
mainfrom
ci-and-cross-platform
Apr 12, 2026
Merged

ci: GitHub Actions for CI checks and cross-platform releases#6
proofofprints merged 2 commits into
mainfrom
ci-and-cross-platform

Conversation

@proofofprints
Copy link
Copy Markdown
Owner

Summary

Adds two GitHub Actions workflows so every PR gets type-checked and every release tag automatically builds installers for Windows, macOS (ARM + Intel), and Linux. Also updates the README installation section to list all platforms.

This PR is independent of PRs #4 and #5 — merge order doesn't matter.

Workflows

ci.yml — PR checks

  • Triggers on every pull request to main
  • Runs npx tsc --noEmit + cargo check on windows-latest
  • Once your branch ruleset is active (after repo goes public), you can add this as a required status check

release.yml — Cross-platform release builds

  • Triggers on push of any v* tag (e.g. git tag v1.0.0 && git push --tags)
  • Builds on 4 targets in parallel:
Platform Runner Output
Windows x64 windows-latest .msi installer
macOS Apple Silicon macos-latest .dmg (aarch64)
macOS Intel macos-latest .dmg (x64)
Linux x64 ubuntu-22.04 .deb + .AppImage
  • Uses tauri-apps/tauri-action@v0 which handles:
    • Building the Tauri app for each platform
    • Signing update artifacts with TAURI_SIGNING_PRIVATE_KEY
    • Creating a draft GitHub release with all platform artifacts attached
    • Generating and attaching latest.json for the in-app updater
  • Release is created as a draft so you can review the artifacts before publishing
  • Release body includes an installation table and first-launch notes for Windows (SmartScreen, firewall)

Linux build dependencies

Ubuntu 22.04 runner installs webkit2gtk-4.1-dev, libsoup-3.0-dev, libjavascriptcoregtk-4.1-dev, and related libraries required by Tauri 2.

Required GitHub secrets

Before pushing the first v* tag, set these in Settings → Secrets and variables → Actions → Repository secrets:

Secret Value
TAURI_SIGNING_PRIVATE_KEY Your Tauri updater signing private key (generated with `npm run tauri signer generate`)
TAURI_SIGNING_PRIVATE_KEY_PASSWORD Password for the key (use an empty string if no password was set)

`GITHUB_TOKEN` is provided automatically by GitHub Actions — no manual setup needed.

If you've lost the private key, you can regenerate with `npm run tauri signer generate` and update the `pubkey` in `tauri.conf.json` to match. Existing installed copies won't be able to verify updates signed with the new key, but v1.0.0 is the first public release so there's no installed base to worry about.

README update

Installation section replaced the Windows-only instructions with a platform table:

Platform Format Notes
Windows (x64) `.msi` Fully tested
macOS (Apple Silicon) `.dmg` (aarch64) Community-tested
macOS (Intel) `.dmg` (x64) Community-tested
Linux (x64) `.deb` / `.AppImage` Community-tested

Includes a note that Windows is the primary platform and macOS/Linux should work but haven't been as extensively tested.

Release process after merge

  1. Merge this PR (and PRs v1 release prep: docs, zero-state, error handling, defaults #4, release: bump version to 1.0.0 #5 if not already merged)
  2. Set the two GitHub secrets listed above
  3. Flip repo to public
  4. Tag and push: `git tag v1.0.0 && git push --tags`
  5. Wait ~15 minutes for all 4 builds to complete
  6. Go to Releases → find the draft → review artifacts → publish
  7. The in-app updater will automatically find the `latest.json` from that point on

Files changed

```
.github/workflows/ci.yml | 26 +++ NEW
.github/workflows/release.yml | 96 +++ NEW
README.md | +4/-4
3 files changed, 126 insertions(+), 4 deletions(-)
```

Two workflows:

ci.yml — runs on every PR to main:
- TypeScript check (npx tsc --noEmit)
- Rust check (cargo check)
- Runs on windows-latest to match the primary dev platform

release.yml — triggered by pushing a v* tag:
- Builds on 4 targets in parallel:
  - Windows x64 (MSI via WiX)
  - macOS Apple Silicon (DMG, aarch64)
  - macOS Intel (DMG, x64)
  - Linux x64 (deb + AppImage)
- Uses tauri-apps/tauri-action to build, sign (via TAURI_SIGNING_PRIVATE_KEY
  secret), and create a draft GitHub release with all platform artifacts
  and the latest.json updater manifest
- Release body includes an installation table and first-launch notes
- Release is created as a draft so we can review before publishing

Linux build installs required system dependencies (webkit2gtk 4.1,
libsoup 3.0, etc.) matching Tauri 2 requirements on Ubuntu 22.04.

README installation section updated: replaces the Windows-only
install instructions with a platform table listing all four build
targets with a note that Windows is the primary tested platform and
macOS/Linux are community-tested.

Required GitHub secrets (must be set before first tag push):
- TAURI_SIGNING_PRIVATE_KEY — the Tauri updater signing private key
  (generated previously with `npm run tauri signer generate`)
- TAURI_SIGNING_PRIVATE_KEY_PASSWORD — password for the private key
  (empty string if no password was set)
The original signing private key was lost (stored in a literal ~/
directory due to Windows tilde expansion, then the path was unknown
until rediscovered at L:\PoPManager\~\.tauri\popmanager.key). A new
keypair was generated and the private key is now set as the
TAURI_SIGNING_PRIVATE_KEY GitHub secret. This commit updates the
pubkey in tauri.conf.json to match the new pair.
@proofofprints proofofprints merged commit 2b01745 into main Apr 12, 2026
1 check 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