C.W.K.
Stream
Lesson 05 of 07 · published

Icons & CI/CD (tauri-action)

~13 min · tauri, icons, ci, github-actions

Level 0Web Tourist
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"One source icon, every platform's sizes. One git tag, every platform's installers. Automate the boring, error-prone parts."

Icons from a Single Source

Every platform wants app icons in a pile of sizes and formats — .icns for macOS, .ico for Windows, various PNGs for Linux and the tray. You don't make these by hand. tauri icon path/to/icon.png takes one high-resolution square source (1024×1024 is the safe input) and generates the entire icon set into src-tauri/icons/, wired into your config. Regenerate whenever the logo changes; never hand-edit individual sizes.

CI Is How You Build for OSes You Don't Own

Recall that each OS's installers must be built on that OS. The clean solution is a CI matrix: GitHub Actions (or similar) with macOS, Windows, and Linux runners, each producing its native installers from the same commit. The official tauri-action wraps this — it builds your app on each runner, and can create a draft GitHub Release with all the installers attached, ready for you to publish. A single tagged commit becomes a full cross-platform release.

Secrets Make It Real

The CI workflow is where your signing identities and updater key live as encrypted secrets, injected as environment variables at build time. That's what lets CI sign, notarize, and sign-updates automatically — turning 'cut a release' from a fragile manual ritual on one machine into a reproducible pipeline. Wire this up earlier than feels necessary; retrofitting signing into CI under release pressure is miserable.

Code

tauri icon: one source, all sizes·bash
# Generate every platform's icons from one 1024x1024 PNG.
npm run tauri icon path/to/app-icon.png
# → writes src-tauri/icons/ (.icns, .ico, PNGs) and updates config
tauri-action: a matrix that ships everything·text
# .github/workflows/release.yml (sketch) — build on every OS from one tag.
strategy:
  matrix:
    platform: [macos-latest, ubuntu-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
  - uses: actions/checkout@v4
  - uses: tauri-apps/tauri-action@v0
    env:
      APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
      TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_UPDATER_KEY }}
    with:
      tagName: app-v__VERSION__
      releaseDraft: true       # attaches all installers to a draft release

External links

Exercise

Run tauri icon on a 1024x1024 PNG and look at everything it generated in src-tauri/icons/. Then sketch (on paper or in a yml) the CI matrix you'd use to build your chosen targets, and list which secrets it would need (signing identity, notarization creds, updater key). You've connected the last-mile automation: one source icon, one tag, signed installers everywhere.
Hint
tauri icon writes .icns/.ico/PNGs from one source. The CI matrix needs a runner per OS you ship; secrets are the Apple credentials and the TAURI updater private key, referenced as env in the tauri-action step.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.