“Na minha máquina funciona” deixou de ser piada quando o CI passou a ser o único lugar onde o seu ambiente é limpo. Quatro causas respondem por quase todo CI vermelho com código igual.
Você não mudou nada e o CI quebrou. Uma dependência publicou versão nova e o seu
requirements sem limite superior aceitou. O clássico: uma biblioteca que passa a
exigir uma versão de outra que removeu uma dependência transitiva.
sqlmodel>=0.0.45,<0.0.48 # o teto é o que impede a quebra silenciosa
Sem teto, o próximo release é uma data marcada para o seu CI falhar.
Lint local com versão diferente, Python diferente, ou um pacote instalado só na sua máquina. O CI instala do zero — é justamente aí que ele te mostra o que o seu ambiente escondia.
Reproduza antes de culpar o CI: rode o mesmo comando, no mesmo interpretador, num ambiente limpo. Se passa limpo, a diferença é o seu ambiente.
O teste passa porque o arquivo existe no seu disco — e o arquivo está no .gitignore
(ou nunca foi adicionado). No CI ele não existe e o teste falha por um motivo que parece
inventado.
Checagem de um comando: liste os arquivos que o teste lê e confirme que todos estão no controle de versão.
Cache de dependências ou de build pode mascarar a falha: o job passa usando um artefato antigo. Se o mesmo commit falha sem cache e passa com cache, o problema está no cache — e ele vai voltar.
Ver a skill Ship Your MCP Server Ver todas as skills
Quer isso montado no seu projeto? Setup guiado a partir de R$ 1.500, com o primeiro ciclo rodado junto.
Sai quando eu publicar, junto com a skill grátis usada aqui. Sem spam, e o descadastro é de um clique.