For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /it/docs/desktop/updates.md (or send Accept: text/markdown).
Aggiornamenti automatici e canali di rilascio
Feed di aggiornamento firmati, il canale stable/beta e il workflow di rilascio incluso.
Genera la coppia di chiavi dell'updater una sola volta
L'updater verifica le firme minisign sugli artefatti scaricati. Genera una coppia di chiavi con il signer di Tauri e conserva la chiave privata come TAURI_SIGNING_PRIVATE_KEY con la sua password in TAURI_SIGNING_PRIVATE_KEY_PASSWORD, entrambe nel tuo archivio dei segreti — mai nel repository. Le build che creano gli artefatti dell'updater emettono un sidecar .sig accanto a ogni installer; la chiave pubblica va ai client, quella privata resta in CI.
corepack pnpm --filter @supastack/desktop exec tauri signer generate -w ~/.tauri/product.keyConfigura l'updater al momento della build
tauri.conf.json include un blocco updater sentinella con endpoints e pubkey vuoti — mantienilo, perché il plugin updater non può inizializzarsi senza le chiavi presenti. I valori reali vengono uniti in profondità al momento della build tramite un overlay JSON --config o la variabile d'ambiente TAURI_CONFIG; check:release-config stampa l'overlay esatto da incollare quando SUPASTACK_UPDATER_ENDPOINT e SUPASTACK_UPDATER_PUBKEY sono impostati.
Imposta entrambe o nessuna delle due: un overlay con soli endpoints lascia il pubkey vuoto, così i controlli sembrano funzionare mentre ogni installazione fallisce la verifica della firma. L'URL dell'endpoint porta i placeholder {{target}}, {{arch}} e {{current_version}} — lo slot di versione è obbligatorio — più un segmento di percorso opzionale {{channel}} che abilita i canali di rilascio.
# check:release-config prints this overlay for tauri build --config:
# {"plugins":{"updater":{"endpoints":["https://releases.example.com/{{channel}}/{{target}}/{{arch}}/{{current_version}}"],"pubkey":"<base64 public key>"}}}
# SUPASTACK_UPDATER_ENDPOINT=
# SUPASTACK_UPDATER_PUBKEY=Pubblica il feed latest.json
Ogni endpoint risponde con un manifesto latest.json — version, notes, pub_date e una mappa platforms che copre darwin-aarch64, darwin-x86_64, windows-x86_64, windows-aarch64, linux-x86_64 e linux-aarch64 — dove ogni voce accoppia l'URL dell'installer alla sua signature.
Costruiscilo con lo script release:manifest: analizza una directory di bundle alla ricerca di artefatti .app.tar.gz, -setup.exe (preferito rispetto a .msi) e .AppImage — ognuno deve avere il suo .sig vicino — e scrive o fonde il manifesto. I flag coprono --version, --base-url, --bundle-dir con --platform, --merge per accumulare piattaforme tra esecuzioni, --notes, --pub-date e --out.
corepack pnpm --filter @supastack/desktop release:manifest -- \
--version 1.2.0 \
--base-url https://releases.example.com/stable \
--bundle-dir src-tauri/target/release/bundle \
--platform windows-x86_64 \
--merge latest.jsonCanali stable e beta
Quando un endpoint contiene il placeholder {{channel}}, il menu dell'app abilita una casella Beta Updates che alterna il feed tra stable e beta. La scelta persiste in un file update-channel accanto alla configurazione dell'app; SUPASTACK_UPDATE_CHANNEL la sovrascrive per singola esecuzione — i valori non riconosciuti vengono ignorati con un avviso — e stable è il default. Senza il placeholder il toggle resta disattivato e viene consultato solo il feed stable.
Quando vengono controllati gli aggiornamenti
Un controllo silenzioso in background gira all'avvio e mostra una finestra di dialogo solo quando esiste un aggiornamento; la voce di menu Check for Updates… riporta ogni esito. I controlli si serializzano — una seconda richiesta concorrente viene scartata. Un aggiornamento disponibile offre Install and Restart, che scarica, installa e riavvia l'app; le build non configurate rispondono che gli aggiornamenti non sono configurati, e i fallimenti emergono come finestre di dialogo anziché come nuovi tentativi.
Il workflow di rilascio incluso
.github/workflows/desktop-release.yml compila la matrice — macOS su entrambe le architetture, Windows e Ubuntu — su tag desktop-v* o su dispatch manuale con versione e canale. Imprime la versione del manifesto dal tag (una release che lo salta si offre come aggiornamento per sempre), fonde i manifesti per piattaforma e crea una bozza di release GitHub con latest.json più ogni installer e firma — marcata prerelease per i canali beta.
Richiede SUPASTACK_APP_URL e SUPASTACK_UPDATER_ENDPOINT come variabili del repository e SUPASTACK_UPDATER_PUBKEY più la chiave privata di firma e la sua password come segreti; le credenziali di firma Apple sono aggiunte opzionali. Il runbook completo è in docs/desktop-updates.md nel repository.
Verifica e risoluzione dei problemi
Installa una build, pubblica un manifesto più recente su un feed di prova e conferma che la finestra di aggiornamento arriva al controllo successivo e che l'app si riavvia nella nuova versione. Poi passa a beta e conferma che la risposta del feed di canale cambia.