Templates para GitHub Actions: Padronizando e Acelerando seus Fluxos de CI/CD

No mundo do desenvolvimento de software moderno, a automação é a espinha dorsal da produtividade. O GitHub Actions se consolidou como uma das ferramentas mais poderosas para implementar Integração Contínua (CI) e Entrega Contínua (CD) diretamente nos repositórios. No entanto, à medida que as organizações escalam, a duplicação de código nos arquivos YAML de workflow se torna um problema.

É nesse cenário que entram os Templates (Modelos) para GitHub Actions. Mais do que um simples recurso, eles representam uma mudança de mentalidade: de scripts repetidos para uma arquitetura de automação reutilizável e escalável.

Neste artigo, vamos explorar a definição técnica, os diferentes tipos de templates e as vantagens estratégicas de adotá-los em seus projetos.

O que são Templates para GitHub Actions?

Em essência, um template no contexto de GitHub Actions refere-se à capacidade de reutilizar blocos de lógica de automação sem precisar reescrever o código YAML em cada repositório. O GitHub oferece duas abordagens principais para criar esses modelos: Workflows Reutilizáveis e Ações Compostas (Composite Actions) .

1. Workflows Reutilizáveis (Reusable Workflows)

Um workflow reutilizável é um arquivo YAML padrão que vive em um repositório (geralmente um repositório central, como `org/github-actions` ou `.github`) e pode ser chamado por outros workflows em outros repositórios, desde que tenham permissão.

Definição: Ele é acionado pela palavra-chave `workflow_call` em vez de eventos como `push` ou `pull_request`. Ao ser chamado, você pode passar variáveis de entrada (`inputs`) e dados secretos (`secrets`).

2. Ações Compostas (Composite Actions)

Enquanto o Workflow Reutilizável substitui um pipeline inteiro, uma Ação Composta encapsula passos individuais (steps) dentro de uma única ação. É como criar uma função em uma linguagem de programação.

Definição: Definida por um arquivo `action.yml` que utiliza `runs.using: “composite”`. Ela permite combinar múltiplos comandos shell ou chamadas a outras ações em um único bloco reutilizável.

Como Funcionam na Prática?

Vamos imaginar um cenário comum: sua empresa possui 30 microserviços em Node.js. Todos eles precisam de um workflow para “Lint, Testar e Buildar” antes de um deploy.

Sem Templates: Você copia e cola o mesmo arquivo YAML de 50 linhas nos 30 repositórios. Se o time de DevOps precisar atualizar a versão do Node.js ou adicionar uma verificação de segurança, será necessário abrir 30 Pull Requests.

Com Templates (Workflow Reutilizável):
1. Você cria um repositório central chamado `company-actions`.
2. Dentro dele, cria o arquivo `.github/workflows/node-ci.yml` com o gatilho `on: workflow_call`.
3. Nos 30 microsserviços, o workflow local fica apenas com 10 linhas.

Exemplo do template (no repositório central):

Exemplo de chamada (no microserviço):

Com apenas esse bloco, o microsserviço executa toda a lógica central. Se a lógica mudar, ela muda em um único lugar.

As Principais Vantagens de Usar Templates

Adotar templates não é apenas uma questão estética de código, mas sim uma decisão arquitetural que traz benefícios tangíveis:

1. Redução drástica da duplicação (DRY)
O princípio “Don’t Repeat Yourself” (Não se repita) é levado ao extremo. A lógica de CI/CD deixa de ser copiada em dezenas de arquivos para ser referenciada. Isso diminui a carga cognitiva dos desenvolvedores, que não precisam mais vasculhar YAMLs gigantescos para entender o que o pipeline faz.

2. Governança e Padronização Centralizada
Para times de plataforma e DevOps, os templates são uma ferramenta de governança. Você pode garantir que todos os times estejam usando a mesma versão do compilador, as mesmas regras de segurança e os mesmos scripts de deploy. Se uma falha de segurança crítica for encontrada em uma dependência, a correção é feita no template central e se propaga automaticamente (após o trigger do workflow).

3. Manutenção Simplificada
Imagine atualizar 40 repositórios para usar a Action `checkout@v3` em vez da `v2`. Sem templates, isso é um trabalho manual massivo. Com templates, você altera uma linha no repositório central, e todos os consumidores recebem a atualização na próxima execução.

4. Onboarding mais rápido
Para um desenvolvedor novo no time, configurar um pipeline do zero pode ser intimidante. Com templates, a configuração se resume a preencher um formulário (inputs) ou adicionar um arquivo mínimo. O tempo para colocar um novo serviço em produção cai de horas para minutos.

5. Segurança Reforçada
Ao centralizar as ações, você pode evitar que desenvolvedores individuais adicionem ações de terceiros não aprovadas em seus pipelines. O time de segurança precisa revisar e aprovar apenas o repositório central de templates, em vez de auditar cada repositório da organização.

6. Versionamento de Pipelines
Assim como bibliotecas de código, os workflows reutilizáveis podem ser versionados usando branches ou tags (`@v1`, `@main`, `@feature`). Isso permite que você evolua seus templates com segurança, permitindo que times específicos migrem para a versão nova enquanto outros permanecem na antiga até estarem prontos.

Quando Usar Cada Abordagem?

A escolha entre “Workflows Reutilizáveis” e “Ações Compostas” depende do seu objetivo:

Use Workflows Reutilizáveis quando quiser padronizar um processo de ponta a ponta (ex: todo o fluxo de “Testar -> Buildar -> Publicar Imagem Docker”). Eles permitem definir `runs-on`, `services` e gerenciar jobs inteiros.

Use Ações Compostas quando quiser padronizar um conjunto específico de passos que se repetem dentro de jobs diferentes. Por exemplo, uma ação composta chamada “Instalar dependências e cachear” ou “Enviar notificação para o Slack”. Elas são mais granulares.

Na prática, as melhores arquiteturas costumam combinar os dois: Workflows Reutilizáveis orquestram o pipeline, que por sua vez chamam Ações Compostas para executar tarefas específicas.

Conclusão

Os templates para GitHub Actions representam o amadurecimento da cultura DevOps dentro do ecossistema GitHub. Eles transformam o CI/CD de uma coleção de scripts isolados em um produto de plataforma interna.

Se a sua organização está sofrendo com a “proliferação de YAML”, inconsistências entre pipelines ou lentidão para atualizar processos de build, investir tempo na criação de templates é um dos passos mais estratégicos que você pode dar. Ao fazer isso, você libera seus desenvolvedores para focarem no que realmente importa — o código da aplicação — enquanto garante que a base da automação permaneça sólida, segura e perfeitamente atualizada.


Veja outros temas da área em nosso canal do YouTube (link).

E participe também do nosso canal no Discord, com dicas e laboratórios (link do Discord).

Tem alguma dúvida ou sugestão? Mande para a gente pelo nosso e-mail: engenharia@tbxtech.com.