GitHub Actions É um Problema
Muitos desenvolvedores elogiam o GitHub Actions por oferecer CI/CD gratuito e conveniente em múltiplas plataformas, mas o criticam cada vez mais por fluxos opacos, ciclos de feedback lentos, complexidade de YAML e aprisionamento ao fornecedor. Comentadores argumentam que a lógica central de build e deploy deve ficar em scripts normais que possam ser executados localmente ou em qualquer sistema de CI, usando Actions apenas como uma orquestração fina. Uma variedade de alternativas e gambiarras é mencionada — de ferramentas como Dagger, Earthly, Garden e `act` a runners self-hosted e motores genéricos de workflow — todas tentando recuperar portabilidade, testabilidade e controle sobre os pipelines.
Problemas Percebidos com o GitHub Actions
- Fluxos de trabalho em YAML tornam-se complexos, difíceis de depurar e não são facilmente testáveis localmente.
- A forte dependência de ações de terceiros torna o comportamento opaco e aumenta o aprisionamento ao fornecedor.
- A terminologia é confusa (actions vs workflows), e a implementação do runner é vista como convoluta, com relatos de comportamentos estranhos e códigos de saída incomuns.
- O ciclo de feedback é lento: precisar de commits e execuções remotas para iterar na lógica do pipeline é amplamente desaprovado.
- Alguns consideram o Actions “bom o suficiente”, mas inferior em clareza conceitual a sistemas mais simples como o GitLab CI.
Gambiarras e Práticas Recomendadas
- Mantenha o YAML “magro”: use-o principalmente para triggers e orquestração; coloque a lógica real em scripts, alvos Make/just, Magefiles, Bazel, etc.
- Garanta que todas as etapas de CI possam ser executadas localmente com os mesmos comandos usados pelo CI.
- Prefira scripts locais e containers em vez de actions reutilizáveis pesadas; alguns evitam tudo exceto ações básicas de configuração.
- Use imagens Docker ou imagens de devcontainer como ambiente canônico tanto para execuções locais quanto para CI.
- Centralize a lógica comum por meio de scripts compartilhados ou DSLs que compilam para YAML de CI; trate o CI como uma camada de cola.
Execução Local e Lacunas de Ferramentas
- Há forte demanda por uma forma oficial de executar GHA localmente; os runners self-hosted atuais ainda exigem commits e execução remota.
acte emuladores relacionados ajudam alguns fluxos, mas são descritos como incompletos, frágeis e difíceis de depurar em pipelines complexos.- Actions de reverse shell/depuração (por exemplo, tmate) são elogiadas para troubleshooting em runners reais.
Aprisionamento ao Fornecedor e Preocupações com a Plataforma
- O ecossistema de Actions e os runners hospedados gratuitos/baratos (especialmente para Windows/macOS) são vistos como um mecanismo poderoso de aprisionamento.
- Alguns argumentam que a monetização do CI pelo GitHub desincentiva runners totalmente locais e gratuitos.
- Outros enfatizam o conjunto mais amplo de recursos do GitHub e os efeitos de rede como a principal “cola”.
Abordagens Alternativas de CI/Workflow
- Vários projetos miram soluções agnósticas de CI ou “pipelines as code” (Dagger, Earthly, Garden, Windmill, Cirrus CLI, Cicada).
- O DSL em Groovy e as bibliotecas compartilhadas do Jenkins são citados como um modelo de abstração melhor do que YAML puro.
- Tentativas de construir motores universais de workflow/CI enfrentam abstrações vazando, variação de ambiente e altos custos de migração.
Reflexões Mais Amplas sobre a Complexidade de CI/CD
- Muitos veem pipelines de CI como motores de workflow supercomplicados, reinventados repetidamente.
- Há concordância de que implantações devem ser auditáveis, scriptáveis e não totalmente presas a um único provedor de CI.