App redeploya em loop a cada tick do cron
Sintoma
O runner fetch reporta a app como disponível para sempre, mesmo logo depois de um deploy
bem-sucedido, e o cron fetch --deploy redeploya a cada tick (rebuild da imagem + restart do
container, de 5 em 5 minutos na configuração padrão):
↑ │ minha-app │ dist │ v0.2.1 │ 9b1c562 │ v0.2.1 │ - │ disponívelRepare que REPO VER e DEPLOYED são a mesma versão — é o commit que está diferente, não a versão. No deploy aparece o aviso:
WARN phase_8: nenhum GitHub token disponível para "minha-app";
pulando push de .runner/secrets.enc.Causa
Com source: { type: dist }, o Runner commita .deploy.yml + .runner/secrets.enc na branch
dist ao fim do deploy e dá push. Sem token do GitHub o commit fica só local: o pull/ passa
a ter um commit a mais que o remoto, o fetch compara os dois e conclui "tem coisa nova", e o
deploy seguinte cria outro commit local — o ciclo nunca fecha.
É comum em app registrada sem --token que só depois passou a usar source: type: dist.
Diagnóstico
# state x remoto: local_commit diferente de remote_commit com a versão igual
grep -E "local_commit|remote_commit|status" /opt/runner/state/<app>.yml
# o commit extra é do próprio Runner
git -C /data/apps/<app>/pull log --oneline -2
# 36db3ef chore: update encrypted secrets <- local, sem push
# 9b1c562 release: v0.2.1
runner tokens test <app> # "no token" confirma a causaCorreção
# 1. registrar o token (PAT com escopo repo)
runner edit <app> --token ghp_xxx
runner tokens test <app> # valida via API do GitHub
# 2. publicar o commit pendente
runner secrets push <app>
# 3. alinhar state e remoto
runner fetch <app> -F # deve voltar a "atualizado"Confirme que fechou olhando o deploy_count ficar parado por mais de um tick do cron:
grep -E "deploy_count|status" /opt/runner/state/<app>.ymlEstancar antes de ter o token
Se o token não estiver à mão, pause a app para o cron parar de redeployar. Deploy manual continua funcionando normalmente:
runner pause <app>
# ... quando tiver o token e rodar a correção acima:
runner unpause <app>Prevenção
Registre a app já com token quando ela for usar source: type: dist:
runner add --repo usuario/minha-app --token ghp_xxx --ckey "..."Ver runner edit e pause/unpause.