Depois de muitas tentativas para entender por que o container do Postgres não subia no localhost e por que também os testes falhavam no GitHub Actions, mesmo seguindo exatamente o passo a passo do instrutor, encontrei a causa do problema.
Log de Erro no servidor do Actions:
=== RUN TestListaTodosOsAlunosHanlder
2025/12/10 15:28:26 /home/runner/work/pipelines-e-testes-automatizados-com-github-actions/pipelines-e-testes-automatizados-com-github-actions/database/db.go:23
[error] failed to initialize database, got error failed to connect to host=*** user=*** database=***: dial error (dial tcp [::1]:***: connect: connection refused)
2025/12/10 15:28:26 Erro ao conectar com banco de dados
O problema é mais simples do que parece, no docker-compose.yml está sendo usada a imagem:
postgres:
image: "postgres"
Isso significa que o Docker sempre vai baixar a versão latest do Postgres. E recentemente a versão latest foi atualizada (Postgres 18+), que pode ter ocasionado mudanças no formato interno de armazenamento dos dados do banco.
Por isso no seu local o container do postgres levanta e logo cai. Já no servidor do Actions a incompatibilidade com o modo de persistência/config deve atrapalhar a conexão.
Como resolver?
Para solucionar isso basta fixar a versão do postgres para a 16 que é a usada pelo projeto.
Então, no docker-compose.yml ao invés da imagem ser:
postgres:
image: "postgres"
Altere ela para:
postgres:
image: postgres:16
Mantenha os passos do instrutor conforme foi passado até aqui. Então as variáveis no docker-compose.yml vão ser
environment:
- DB_HOST=postgres
- DB_USER=root
- DB_PASSWORD=root
- DB_NAME=root
- DB_PORT=5432
E no secrets:
DB_HOST: localhost;
DB_PASSWORD: root;
DB_USER: root;
DB_NAME: root;
DB_PORT: 5432.
Você não precisa mudar mais nada no projeto. A fixação da versão do postgres já vai resolver o problema.