- Return expected payload { version, timestamp, queue_services, data_services } in /health
- Fix infinite attempt loop in deploy check Github Action
- Untrack temporary wuzapi test scripts
2.2 KiB
Correção do Deploy Check da Review App
Objetivo
Corrigir a falha no pipeline de CI "Deploy Check" (.github/workflows/deploy_check.yml) que quebrava após 10 tentativas devido à Review App (Heroku) não retornar o healthcheck esperado.
Contexto
O workflow do GitHub Actions esperava um JSON do endpoint /api contendo os campos version, timestamp, queue_services e data_services todos populados e com valor "ok" pros serviços. Porém, o endpoint /api (referente ao ApiController#index) não era exposto corretamente em alguns ambientes ou levantava erro 500 caso o Redis/Postgres demorassem a subir, além de cair em um loop infinito no script bash porque a variável $attempt não era incrementada se a chamada HTTP retornasse 200 mas o JSON fosse inválido.
Passos Realizados
- Mapeamos que já existia uma rota
get '/health', to: 'health#show'apontando para oHealthControllerque apenas respondia{ status: 'woot' }. - Alteramos o
HealthController#showpara retornar o JSON robusto exigido pelo workflow, fazendo o ping no Redis e no Postgres e blindando as exceções comrescue StandardErrorpara nunca retornar 500 durante a fase de boot. - Editamos o arquivo
.github/workflows/deploy_check.yml:- Trocamos o
curlde/apipara/health. - Adicionamos a instrução
attempt=$((attempt + 1))no blocoelse(quando o teste dojqnão passa), corrigindo o loop infinito. - Aumentamos o
max_attemptsde 10 para 15 (dando 45 minutos de tolerância para a Review App subir o banco de dados e os dynos completamente).
- Trocamos o
Principais Arquivos Alterados
app/controllers/health_controller.rb.github/workflows/deploy_check.yml
Como Validar
- Subir essas alterações (commit e push) na branch do PR.
- Acompanhar a aba "Actions" no GitHub e verificar o job "Check Deployment (pull_request)".
- O script bash deverá fazer o cURL em
/healthe, assim que o PostgreSQL e Redis reportarem"ok", o step será marcado como "Deployment successful".
Como Reverter
Basta fazer um git revert do commit que adicionou essas alterações ou retornar os arquivos aos estados anteriores (o HealthController retornando apenas { status: 'woot' } e o deploy_check.yml voltando para /api sem o incremento).