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 /pt/docs/desktop/updates.md (or send Accept: text/markdown).
Auto-updates e canais de release
Feeds de update assinados, o canal stable/beta e o workflow de release incluído.
Gera o keypair do updater uma vez
O updater verifica assinaturas minisign nos artefactos descarregados. Gera um keypair com o signer do Tauri e guarda a chave privada como TAURI_SIGNING_PRIVATE_KEY com a sua palavra-passe em TAURI_SIGNING_PRIVATE_KEY_PASSWORD, ambas no teu secret store — nunca no repo. Builds que criam artefactos de updater emitem um sidecar .sig ao lado de cada instalador; a chave pública vai para os clientes, a privada fica no CI.
corepack pnpm --filter @supastack/desktop exec tauri signer generate -w ~/.tauri/product.keyConfigura o updater em build-time
tauri.conf.json inclui um bloco de updater sentinela com endpoints e pubkey vazios — mantém-no, porque o plugin do updater não consegue inicializar sem as chaves presentes. Os valores reais são fundidos em profundidade em build-time através de um overlay JSON --config ou da variável de ambiente TAURI_CONFIG; check:release-config imprime o overlay exato a colar quando SUPASTACK_UPDATER_ENDPOINT e SUPASTACK_UPDATER_PUBKEY estão definidos.
Define os dois ou nenhum: um overlay só de endpoints deixa a pubkey vazia, por isso os checks parecem funcionar enquanto cada instalação falha a verificação de assinatura. O URL de endpoint traz os placeholders {{target}}, {{arch}} e {{current_version}} — o slot de versão é obrigatório — mais um segmento de caminho {{channel}} opcional que ativa os canais de release.
# 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=Publica o feed latest.json
Cada endpoint responde um manifesto latest.json — version, notes, pub_date e um mapa platforms cobrindo darwin-aarch64, darwin-x86_64, windows-x86_64, windows-aarch64, linux-x86_64 e linux-aarch64 — onde cada entrada emparelha o URL do instalador com a sua assinatura.
Constrói-o com o script release:manifest: ele varre uma diretoria de bundle à procura de artefactos .app.tar.gz, -setup.exe (preferido a .msi) e .AppImage — cada um tem de ter o seu vizinho .sig — e escreve ou funde o manifesto. Os flags cobrem --version, --base-url, --bundle-dir com --platform, --merge para acumular plataformas entre execuções, --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.jsonCanais stable e beta
Quando um endpoint contém o placeholder {{channel}}, o menu da app ativa uma checkbox Beta Updates que muda o feed entre stable e beta. A escolha persiste num ficheiro update-channel ao lado da configuração da app; SUPASTACK_UPDATE_CHANNEL sobrepõe-na por execução — qualquer coisa não reconhecida é ignorada com um aviso — e stable é a predefinição. Sem o placeholder o toggle fica desativado e só o feed stable é consultado.
Quando os updates são verificados
Um check silencioso em segundo plano corre no arranque e só mostra um diálogo quando existe um update; o item de menu Check for Updates… reporta todos os resultados. Os checks serializam — um segundo pedido concorrente é descartado. Um update disponível oferece Install and Restart, que descarrega, instala e reinicia a app; builds não configurados respondem que os updates não estão configurados, e as falhas aparecem como diálogos em vez de novas tentativas.
O workflow de release incluído
.github/workflows/desktop-release.yml constrói a matriz — macOS nas duas arquiteturas, Windows e Ubuntu — em tags desktop-v* ou num dispatch manual com versão e canal. Carimba a versão do manifesto a partir da tag (uma release que salte isto oferece-se como update para sempre), funde os manifestos por plataforma e cria uma GitHub release em rascunho com latest.json mais cada instalador e assinatura — marcada como prerelease para canais beta.
Precisa de SUPASTACK_APP_URL e SUPASTACK_UPDATER_ENDPOINT como variáveis do repositório e de SUPASTACK_UPDATER_PUBKEY mais a chave privada de assinatura e a sua palavra-passe como segredos; as credenciais de assinatura Apple são extras opcionais. O runbook completo vive em docs/desktop-updates.md no repositório.
Verificação e resolução de problemas
Instala um build, publica um manifesto mais recente num feed de teste e confirma que o diálogo de update chega no check seguinte e que a app reinicia na nova versão. Depois muda para beta e confirma que a resposta do feed do canal muda.