Loading...
Loading...
Expert guide for setting up Tauri deployment pipelines with GitHub Actions, code signing, and Oasis update server integration.
npx skill4agent add porkytheblack/coco tauri-deployment-setupporkytheblack/oasis/.github/workflows/tauri-release.yml@main.github/workflows/release.yamlDeveloper pushes tag → GitHub Actions triggers
↓
┌─────────────────────┴─────────────────────┐
↓ ↓ ↓
macOS Build Windows Build Linux Build
(Apple signed) (optional sign) (AppImage)
↓ ↓ ↓
└─────────────────────┬─────────────────────┘
↓
Tauri Update Signing
↓
┌─────────────────────┼─────────────────────┐
↓ ↓ ↓
Upload to R2 Register with Oasis GitHub Release
(CDN storage) (update manifest) (user downloads)pnpm add -D @tauri-apps/clinpx @tauri-apps/cli signer generate -w ~/.tauri/keys/your-app.key
# Save the public key for tauri.conf.json
# Save the private key as TAURI_SIGNING_PRIVATE_KEY secret# .github/workflows/release.yaml
name: Release
on:
push:
tags: ["v*"]
permissions:
contents: write
jobs:
release:
uses: porkytheblack/oasis/.github/workflows/tauri-release.yml@main
with:
app_slug: your-app
app_name: Your App
artifact_prefix: YourApp
app_dir: app
distribute_to: r2,oasis,github
secrets:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_R2_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_R2_ACCESS_KEY_ID }}
CLOUDFLARE_R2_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_R2_SECRET_ACCESS_KEY }}
R2_BUCKET_NAME: ${{ secrets.R2_BUCKET_NAME }}
OASIS_SERVER_URL: ${{ secrets.OASIS_SERVER_URL }}
OASIS_CI_KEY: ${{ secrets.OASIS_CI_KEY }}{
"plugins": {
"updater": {
"pubkey": "YOUR_PUBLIC_KEY_HERE",
"endpoints": [
"https://oasis.yourdomain.com/{app_slug}/update/{{target}}-{{arch}}/{{current_version}}"
]
}
}
}./app/scripts/bump-version.sh patch
git push && git push --tags| File | Format | Location |
|---|---|---|
| | App root |
| | src-tauri/ |
| | src-tauri/ |
| Status bar | | UI component |
./app/scripts/bump-version.sh| Target | Purpose | When to Use |
|---|---|---|
| GitHub Releases page | User downloads, changelog |
| Cloudflare R2 CDN | Fast artifact delivery |
| Update server | Auto-update manifests |
distribute_to: r2,oasis,github| Secret | Description |
|---|---|
| Base64-encoded .p12 certificate |
| Certificate password |
| e.g., "Developer ID Application: Your Name" |
| Apple ID email |
| App-specific password (not Apple ID password) |
| 10-character Team ID |
| Secret | Description |
|---|---|
| Private key from signer generate |
| Password used during generation |
| Secret | Description |
|---|---|
| Account ID from dashboard |
| R2 API token ID |
| R2 API token secret |
| Bucket name |
| Secret | Description |
|---|---|
| e.g., |
| CI authentication key |
capabilities/default.json{
"permissions": [
"core:default",
"core:window:default",
"core:window:allow-start-dragging",
"shell:default",
"shell:allow-open",
"dialog:default",
"fs:default",
"http:default",
"updater:default",
"updater:allow-check",
"updater:allow-download-and-install",
"process:default",
"process:allow-restart"
]
}| Action | Command |
|---|---|
| Bump patch | |
| Bump minor | |
| Bump major | |
| Set version | |
| Preview | |
| Push release | |
| Redeploy | |
tauri.conf.jsonR2_PUBLIC_URLv*v0.1.00.1.0contents: writeworkflow_dispatchdry_run: true