Resposta rápida
O GitHub retirou o runtime Node 20 dos runners do GitHub Actions em 23 de setembro de 2026. Actions escritas em JavaScript agora precisam executar em Node 24, e a variável temporária ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION deixou de funcionar. Se um workflow falhou depois da mudança, atualize cada referência uses: para uma versão da action compatível com Node 24.
Quem mantém uma action JavaScript deve trocar runs.using para node24 no action.yml ou action.yaml, testar e publicar uma nova versão. Em runners autogerenciados, atualize o runner e o sistema operacional; o runtime Node 24 não é compatível com macOS 13.4 ou anterior nem tem suporte oficial a ARM32.
O que mudou e por que a falha apareceu agora
O Node 20 chegou ao fim de vida em abril de 2026. O GitHub tornou o Node 24 o runtime padrão das actions JavaScript em 16 de junho e manteve um opt-out temporário para migração. A remoção final ocorreu em 23 de setembro: não é mais possível forçar o runner hospedado a executar uma action em Node 20 com a antiga variável de ambiente.
A mudança atinge o código interno carregado por etapas uses:. As versões atuais das actions oficiais do GitHub já foram atualizadas, mas um workflow pode continuar apontando para uma versão antiga, um commit fixado ou uma action própria cujo manifesto ainda declara node20.
Não confunda o runtime da action com o Node do projeto
A linha uses: actions/setup-node seleciona uma action e essa action precisa ter uma versão compatível com Node 24. Já with: node-version: 20 pede ao setup-node que instale Node 20 para os comandos posteriores do projeto. São camadas diferentes: remover o runtime Node 20 do Actions não proíbe automaticamente o setup-node de instalar Node 20 para uma etapa run:.
Node 20 já está fora de suporte e o aplicativo deve ser migrado por segurança e compatibilidade, mas trocar apenas node-version não corrige uma action antiga. Antes de editar o workflow, identifique se a mensagem aponta para a etapa uses:, para o manifesto action.yml ou para um comando do próprio projeto.
Como localizar tudo que ainda depende do runtime antigo
Revise os arquivos .yml e .yaml em .github/workflows e inventarie cada ocorrência de uses:. Inclua actions de terceiros, actions locais, workflows reutilizáveis e referências fixadas por tag ou SHA. Depois procure action.yml e action.yaml no repositório por using: node20.
Actions compostas usam runs.using: composite e actions em contêiner usam runs.using: docker; nesses casos, não troque o valor para node24. Ainda assim, uma action composta pode chamar outra action JavaScript antiga, portanto as referências uses: dentro de steps também precisam de auditoria.
- Abra a primeira etapa uses: que falhou no log e anote action, versão e mensagem.
- Liste todas as referências uses: nos workflows e nas actions compostas do repositório.
- Procure manifests action.yml ou action.yaml que declarem using: node20.
- Marque referências por SHA, pois elas não recebem uma correção publicada em uma tag nova.
- Identifique runners autogerenciados, sistema operacional, arquitetura e versão do runner.
Como corrigir um workflow que consome actions
Consulte o release e o README oficiais de cada action para encontrar a primeira versão compatível com Node 24. Atualize para o major recomendado ou fixe o SHA completo do release revisado. O GitHub considera o SHA de commit a opção mais segura; uma tag de major recebe correções automaticamente, mas também muda o código executado no pipeline.
Não substitua uma versão antiga por main apenas para fazer o job passar. Revise o changelog, as permissões solicitadas e as mudanças de entrada e saída. Nas actions oficiais, use as versões atuais documentadas. Por exemplo, versões recentes de actions/setup-node já executam internamente em Node 24, mesmo quando configuradas para instalar outra versão do Node no projeto.
- Crie uma branch e atualize uma action por vez.
- Escolha uma versão publicada que declare suporte ao runtime Node 24.
- Se usar SHA, copie o commit do release oficial e registre a versão em comentário.
- Execute o workflow com permissões mínimas e compare testes, artefatos e caches.
- Só depois repita a atualização nos demais repositórios ou workflows reutilizáveis.
Como migrar uma action JavaScript própria
No manifesto, altere runs.using de node20 para node24. O mesmo runtime atende os arquivos main, pre e post declarados no manifesto. Atualize as dependências do toolkit da action, instale de forma reproduzível, execute testes no runner e gere novamente o bundle distribuído quando o repositório versionar arquivos como dist/index.js.
Publicar somente a mudança no source não basta se os consumidores executam o bundle antigo. Inclua os artefatos gerados no release, crie uma nova tag e mova a tag de major apenas de forma intencional. Documente o runner mínimo e qualquer alteração de entrada, saída ou permissão.
- Troque using: node20 por using: node24 em action.yml ou action.yaml.
- Atualize dependências, rode testes e reconstrua o bundle distribuído.
- Teste main, pre e post em um workflow de integração controlado.
- Publique um release novo e atualize a tag de major conforme a política do projeto.
- Avise consumidores que fixaram SHA ou uma versão antiga.
Runners autogerenciados: sistema e arquitetura importam
Atualize o aplicativo do self-hosted runner antes de investigar o workflow. O suporte simultâneo aos runtimes Node 20 e Node 24 chegou na versão 2.328.0; versões mais novas incorporam a transição final e correções posteriores. Confirme também se o runner ainda está online com os rótulos esperados e se o serviço inicia após a atualização.
O GitHub informa que Node 24 é incompatível com macOS 13.4 e anteriores e não oferece suporte oficial a ARM32. Nesses ambientes, migrar o host ou a arquitetura é necessário. Recriar a antiga variável de opt-out não restaura Node 20 e pode esconder a causa real durante o diagnóstico.
Por que o workflow pode continuar falhando
Uma referência atualizada pode chamar internamente outra action antiga, e um SHA fixado permanece no código anterior mesmo quando o mantenedor publica uma tag corrigida. Actions próprias também podem conter um dist desatualizado ou dependências incompatíveis. Em self-hosted runners, versão antiga, sistema sem suporte ou arquitetura ARM32 continuam bloqueando a execução.
Abra o log da primeira etapa com falha, não apenas o resumo do job. Ative logs de depuração somente pelo mecanismo oficial e evite imprimir variáveis, tokens ou arquivos de credenciais. Antes de ampliar permissões ou trocar segredos, consulte o GitHub Status para separar indisponibilidade da plataforma de erro de migração.
Limitações e cuidados de segurança
O aviso de remoção se aplica ao GitHub.com e ao GitHub com Data Residency. GitHub Enterprise Server segue o ciclo da versão instalada e deve ser conferido na documentação correspondente. A página de status mostra disponibilidade agregada; ela não confirma a compatibilidade de uma action ou runner específico.
Atualizar uma action altera código da cadeia de fornecimento. Revise o repositório oficial, release, diff, permissões e integridade do artefato antes de aceitar a nova referência. Mantenha permissions explícitas, fixe dependências críticas e não aprove uma atualização desconhecida apenas porque o workflow parou.
Próxima ação útil
Este guia foi verificado em 24 de setembro de 2026. Inventarie hoje todas as etapas uses:, procure using: node20 nas actions próprias e remova ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION. Priorize pipelines de release, deploy e segurança, pois eles costumam concentrar tokens, artefatos e permissões sensíveis.
Atualize primeiro um workflow controlado, confirme testes e artefatos, e só então replique a mudança. Se a falha ocorrer em runner próprio, valide versão, sistema e arquitetura antes de editar o código do projeto. Se o Node 20 aparece apenas em node-version, planeje a migração do aplicativo separadamente.
Faça o próximo teste
Fontes consultadas
Os links abaixo servem para conferir conceitos, orientações oficiais e o critério editorial usado neste conteúdo.
- Node 20 is no longer available in GitHub ActionsGitHub Changelog
- Deprecation of Node 20 on GitHub Actions runnersGitHub Changelog
- Metadata syntax referenceGitHub Docs
- Workflow syntax for GitHub ActionsGitHub Docs
- actions/setup-nodeGitHub
- GitHub StatusGitHub
