Atualização automática a partir das releases do GitHub - #7
Merged
Conversation
O app instalado passa a checar ao abrir e a cada 6 h, baixar em segundo plano e aplicar a versão nova quando o app fecha. O portátil só avisa e leva para a release, porque não há instalação para atualizar por cima. Rodando do código-fonte o updater fica desligado. O estado mora no processo main e chega à UI por evento: um download leva minutos, e perguntar de tempos em tempos daria uma tela sempre atrasada. As transições ficam em services/updater/state.ts, sem Electron e sem rede, com as três regras que sustentam o resto: sem updater, evento nenhum mexe no estado; erro DEPOIS de uma versão baixada não apaga a versão baixada, que continua no disco e vai ser instalada ao fechar; e falha no download preserva a versão encontrada, que é o que permite oferecer o caminho manual. O updater virou a quinta fronteira injetável do processo main, com dublê de demonstração. O ciclo inteiro — achar, baixar, instalar — roda em milissegundos, nos três modos e com falha injetável por canal. Sem isso a tela só existiria de verdade numa release já publicada, tarde demais para descobrir que está errada. Instalar pela aba Sistema encerra a sessão nativa ANTES de entregar o processo ao instalador: o NSIS fecha quem demora, e um processo morto assim deixa a sessão "WslcUi" órfã no WSL. Fechar a janela e instalar uma atualização passam agora pelo mesmo desligamento ordenado, memoizado para rodar uma vez só. O empacotamento passou a gerar o latest.yml, que é o índice que o updater lê, e a embutir o app-update.yml, que é como o app sabe onde procurar. Sem o primeiro a release fica completa para quem baixa à mão e invisível para quem já tem o app instalado — falha silenciosa que só apareceria uma versão depois. Por isso o job de empacotamento falha se ele não existir, e a fumaça confere o segundo.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que muda
O app instalado passa a se atualizar sozinho a partir das releases deste repositório: checa ao abrir e a cada 6 h, baixa em segundo plano e aplica quando o app fecha. Nada é interrompido no meio do caminho.
O comportamento depende de como o app foi instalado:
.exeé de quem usa.Só versões estáveis contam. Um
0.4.0-rc.1continua publicado, mas o updater o ignora.Como fica testável
O updater virou a quinta fronteira injetável do processo main, com dublê de demonstração: o ciclo inteiro roda em milissegundos, nos três modos, e com falha injetável por canal (
WSLC_UI_MOCK_UPDATE,WSLC_UI_MOCK_FAIL=updates:check,updates:download). Sem isso a tela só existiria de verdade numa release já publicada — tarde demais para descobrir que está errada.app-update.ymlfoi embutidoO detalhe que não é óbvio
Sem o
latest.ymlanexado à release, a versão fica completa para quem baixa à mão e invisível para quem já tem o app instalado. É uma falha silenciosa que só apareceria uma versão depois, então o job de empacotamento falha se o arquivo não existir.E instalar não é um
quitAndInstallseco: o app encerra a sessão nativa antes de entregar o processo ao instalador. O NSIS fecha quem demora, e um processo morto assim deixa a sessão "WslcUi" órfã no WSL.Aviso sobre esta versão
A 0.3.0 é a primeira que traz o updater. Quem estiver na 0.2.0 precisa instalá-la à mão — a partir dela, a atualização é automática.
Verificado nesta máquina
npm run check— 330 testes de unidade, typecheck, lint e formataçãonpx playwright test— 163 E2Enpm run dist+ fumaça no.exeempacotado:latest.ymlgerado com o instalador (o portátil fica de fora, como deve),app-update.ymlembutido apontando para este repositório