Exit code 127 explicado: comando não encontrado no CI
O exit code 127 é o shell dizendo "não consegui encontrar esse comando" - o executável não está instalado, não está no PATH ou está escrito errado.
Quando um step de CI termina com 127, o comando nunca chegou a rodar. O shell o procurou, não conseguiu localizá-lo e desistiu antes que qualquer lógica do próprio programa executasse.
O que 127 significa
O shell retorna 127 quando não consegue resolver o nome de um comando para um executável. É diferente de "o comando rodou e falhou" - nada rodou. Você normalmente verá uma mensagem command not found junto com ele.
Causas comuns no CI
- Uma ferramenta instalada localmente mas não na imagem do runner.
- Uma ferramenta instalada em um diretório que não está no PATH.
- Um erro de digitação no nome do comando ou um nome de binário errado.
- Um step de setup anterior falhou silenciosamente, então a ferramenta nunca foi instalada.
Como corrigir
Confirme que a ferramenta está instalada no job (adicione um step de instalação explícito) e confirme que está no PATH (which <tool> ou command -v <tool>). Em runners efêmeros, nada persiste entre jobs, então toda ferramenta que um step precisa deve ser instalada dentro desse job ou embutida na imagem do runner.
- run: command -v jq || sudo apt-get install -y jq
- run: jq --version127 vs 126
Não os confunda: 127 significa que o comando não foi encontrado, enquanto 126 significa que foi encontrado mas não é executável (permissões erradas ou uma linha de interpretador quebrada). Correções diferentes - instalar/PATH para 127, chmod/shebang para 126.
Principais conclusões
- Exit 127 = comando não encontrado; nada de fato rodou.
- Causas: ferramenta não instalada, fora do PATH ou escrita errada.
- Em runners efêmeros, instale toda ferramenta necessária dentro do job ou embuta na imagem.
- 127 (não encontrado) é diferente de 126 (encontrado, mas não executável).