mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-15 04:40:40 -07:00
193 lines
5.5 KiB
Markdown
193 lines
5.5 KiB
Markdown
# Auto-Updater Documentation
|
|
|
|
Voicebox includes automatic updates powered by Tauri's updater plugin. This document explains how it works for both users and developers.
|
|
|
|
## 1. Generate Signing Keys
|
|
|
|
Run this command to generate your signing keypair:
|
|
|
|
```bash
|
|
cd tauri && bun tauri signer generate -w ~/.tauri/voicebox.key
|
|
```
|
|
|
|
This creates:
|
|
- **Private key**: `~/.tauri/voicebox.key` (keep this secret!)
|
|
- **Public key**: `~/.tauri/voicebox.key.pub`
|
|
|
|
## 2. Update Configuration
|
|
|
|
Copy the content from `~/.tauri/voicebox.key.pub` and replace the placeholder in `tauri/src-tauri/tauri.conf.json`:
|
|
|
|
```json
|
|
{
|
|
"plugins": {
|
|
"updater": {
|
|
"pubkey": "PASTE_PUBLIC_KEY_CONTENT_HERE",
|
|
"endpoints": [
|
|
"https://github.com/YOUR_USERNAME/voicebox/releases/latest/download/latest.json"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Update the endpoint URL with your actual GitHub username/organization.
|
|
|
|
## 3. Building with Signatures
|
|
|
|
When building releases, set these environment variables:
|
|
|
|
**macOS/Linux:**
|
|
```bash
|
|
export TAURI_SIGNING_PRIVATE_KEY="$(cat ~/.tauri/voicebox.key)"
|
|
export TAURI_SIGNING_PRIVATE_KEY_PASSWORD=""
|
|
bun run build
|
|
```
|
|
|
|
**Windows PowerShell:**
|
|
```powershell
|
|
$env:TAURI_SIGNING_PRIVATE_KEY = Get-Content ~/.tauri/voicebox.key -Raw
|
|
$env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD = ""
|
|
bun run build
|
|
```
|
|
|
|
## 4. GitHub Release Setup
|
|
|
|
When you create a GitHub release, the build process will generate:
|
|
- Installers for each platform
|
|
- `.sig` signature files
|
|
- `latest.json` update manifest
|
|
|
|
### Manual Release Process
|
|
|
|
1. Build the app with signing keys set
|
|
2. Create a new GitHub release
|
|
3. Upload all files from `tauri/src-tauri/target/release/bundle/`
|
|
4. Create `latest.json` in your release assets:
|
|
|
|
```json
|
|
{
|
|
"version": "0.2.0",
|
|
"notes": "Bug fixes and improvements",
|
|
"pub_date": "2026-01-25T12:00:00Z",
|
|
"platforms": {
|
|
"darwin-aarch64": {
|
|
"signature": "CONTENT_FROM_.app.tar.gz.sig",
|
|
"url": "https://github.com/YOUR_USERNAME/voicebox/releases/download/v0.2.0/voicebox_0.2.0_aarch64.dmg"
|
|
},
|
|
"darwin-x86_64": {
|
|
"signature": "CONTENT_FROM_.app.tar.gz.sig",
|
|
"url": "https://github.com/YOUR_USERNAME/voicebox/releases/download/v0.2.0/voicebox_0.2.0_x64.dmg"
|
|
},
|
|
"linux-x86_64": {
|
|
"signature": "CONTENT_FROM_.AppImage.sig",
|
|
"url": "https://github.com/YOUR_USERNAME/voicebox/releases/download/v0.2.0/voicebox_0.2.0_amd64.AppImage"
|
|
},
|
|
"windows-x86_64": {
|
|
"signature": "CONTENT_FROM_.msi.sig",
|
|
"url": "https://github.com/YOUR_USERNAME/voicebox/releases/download/v0.2.0/voicebox_0.2.0_x64_en-US.msi"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Automated GitHub Actions (Recommended)
|
|
|
|
Create `.github/workflows/release.yml`:
|
|
|
|
```yaml
|
|
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
release:
|
|
strategy:
|
|
matrix:
|
|
platform: [macos-latest, ubuntu-22.04, windows-latest]
|
|
|
|
runs-on: ${{ matrix.platform }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Setup Bun
|
|
uses: oven-sh/setup-bun@v1
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Install dependencies (Ubuntu)
|
|
if: matrix.platform == 'ubuntu-22.04'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
|
|
|
|
- name: Install dependencies
|
|
run: bun install
|
|
|
|
- name: Build
|
|
env:
|
|
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
|
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
|
run: bun run build
|
|
|
|
- name: Upload Release
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
files: tauri/src-tauri/target/release/bundle/**/*
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
```
|
|
|
|
Add your private key to GitHub secrets:
|
|
- Go to Settings → Secrets and variables → Actions
|
|
- Add `TAURI_SIGNING_PRIVATE_KEY` with the content of `~/.tauri/voicebox.key`
|
|
- Add `TAURI_SIGNING_PRIVATE_KEY_PASSWORD` (empty string if no password)
|
|
|
|
## Frontend Integration
|
|
|
|
The frontend integration is complete with automatic update notifications and manual update checks:
|
|
|
|
- **Update Notification Banner** - Appears automatically when updates are available
|
|
- **Settings Panel** - Manual "Check for Updates" button in Settings tab
|
|
- **Update Hook** - React hook handles all update operations
|
|
|
|
See `docs/AUTOUPDATER_QUICKSTART.md` for a quick setup guide.
|
|
|
|
## Security Notes
|
|
|
|
- Never commit your private key to version control
|
|
- Store private keys securely (use GitHub secrets for CI/CD)
|
|
- The public key in `tauri.conf.json` is safe to commit
|
|
- Updates are cryptographically verified before installation
|
|
- HTTP endpoints are blocked by default (HTTPS only)
|
|
|
|
## Testing Updates
|
|
|
|
1. Build version 0.1.0 and install it
|
|
2. Update version in `tauri.conf.json` to 0.2.0
|
|
3. Build version 0.2.0 with signatures
|
|
4. Create a local server or GitHub release with `latest.json`
|
|
5. Run version 0.1.0 and trigger update check
|
|
6. Verify update downloads and installs correctly
|
|
|
|
## Troubleshooting
|
|
|
|
**"Invalid signature" error:**
|
|
- Verify public key matches the private key used to sign
|
|
- Ensure signature files (.sig) are uploaded correctly
|
|
|
|
**"No update available" when one exists:**
|
|
- Check endpoint URL is correct
|
|
- Verify `latest.json` format matches specification
|
|
- Ensure version in latest.json is higher than current version
|
|
|
|
**Build fails with signing:**
|
|
- Confirm environment variables are set correctly
|
|
- Check private key file exists and is readable
|
|
- Verify private key format (should start with `dW50cnVzdGVkIGNvbW1lbnQ6`)
|