Como usar condicionais nos workflows do Github Actions 

Neste artigo você vai ver:

Neste artigo vamos nos aprofundar em como usar condicionais nos workflows do Github Actions.

Vamos começar explicando esse conceito de condicional. Em seguida, vamos ver como usá-los dentro dos nossos workflows no GitHub Actions. Finalmente, mostraremos uma aplicação prática.

Afinal, o que são condições no Github Actions?

O uso de condicional nos workflows do Github Actions, semelhante a aplicação dentro de um código em qualquer linguagem de programação, impede ou não a execução de algum processo, a menos que suas condições sejam atendidas.

A palavra reservar para seu uso no YAML é “IF“.

Em um workflow do Github Actions, essa palavra reservada pode ser usadas a diversos níveis: 

  • Para executar ou não um job dentro do workflow → job.<job_id>.if
  • Para executar ou não um step dentro de um job → job.<job_id>.steps.if

Como usar variáveis e expressões no Github Actions?

As variáveis acessíveis nas condições são as mesmas que o usuário poderia acessar ao nível do job ou do step onde a condição se encontra. Podem ser:

  • variáveis de contexto
  • variáveis de ambiente
  • variáveis de outputs (de outros jobs)
  • inputs da action (caso seja usado um trigger tal como um workflow dispatch event)

Também é possível usar expressões para validar essas condições, usando operadores, por exemplo: 

  • && (e) 
  • || (ou, 
  • ! (não) 
  • == (igual) 
  • etc… 


Assim que algumas funções pré-definidas, por exemplo: 

  • startsWith (começa com)
  • contains (contém) 
  • endsWith (termina com) 
  • etc… 


Ou de validações de estados, por exemplo: 

  • always (para sempre executar, mesmo com erros anteriores)
  • success (caso nenhum passo anterior falhou) 
  • failure (caso um passo anterior falhou) 
  • etc…


… para auxiliar na validação ou não dessas condições.

Nota: Para entender mais sobre tudo que essas expressões oferecem, é possível consultar a documentação oficial do Github Actions.

Além disso, é útil lembrar que ao usar expressões em uma condicional if, você pode omitir a sintaxe da expressão ${{ … }} porque o GitHub avalia automaticamente a condicional if como uma expressão.

Exemplos práticos de  como usar condições em um workflow


Vamos fazer alguns exemplos mostrando diversos cenários reais.

Primeiro 

Vamos imaginar um cenário onde precisamos validar que um output que configuramos contém ou não algum valor para executar alguma operação. Isso pode ser útil quando trabalhamos com diversos ambientes e precisamos garantir que usamos as configurações adequadas para o ambiente sendo usado.

Neste caso, eu faria o uso do método pré-definido contains(), que permite validar se um texto está presente ou não em uma variável.

Caso esteja presente, executaria uma operação específica, senão, pularia o passo.

Embed:

Nota: Vale a pena destacar que aqui, o método pré-definido contains() foi usado como uma função switch/case para garantir que de acordo com o valor da variável, seja executada a operação desejada. Mas também é possível usar a expressão !contains() para validar se a variável não contém o valor desejado.

Segundo 

Vamos imaginar um cenário onde precisamos validar que um secret foi configurado para executar ou não algum processo (isso pode fazer sentido quando tem workflows usando ambientes ou segredos a nível da organização).

Neste caso, serão necessários três jobs, um para identificar se o segredo está vazio ou não e outros dois para realizar um processo caso o segredo esteja vazio ou caso ele esteja preenchido.


Embed:

Terceiro 

Vamos agora imaginar um workflow onde precisamos validar o estado de um job anterior para executar ou não um job em sequência. Hoje, não existe nenhuma variável no contexto do Github Actions para auxiliar com isso, e seria necessário usar alguns jobs e artefatos para conseguir fazer essa validação.

Neste caso aqui, usar quatro jobs, onde:

  • o job2 depende do job1
  • o job3 depende do job2
  • o job4 depende dos 3 outros.

Aproveitei para adicionar alguns exemplos de validação através de condições em cada um deles para mostrar o que pode ser feito ou não quando um job falha.

Embed:

Usando a função always() aqui, garantimos que o estado de cada job seja sempre salvo como artefato no fim da sua execução, independentemente de o job falha ou não.

Salvando esse resultado em um arquivo TXT, podemos compartilhar ele com outros jobs para depois extrair os valores e eventualmente usar elas como outputs via variável.

No Github Actions

Reuni todos os exemplos acima em um workflow específico para facilitar a execução e a apresentação do resultado:

  1. workflow inicial
  1. Na aba Actions (conforme imagem abaixo)
Reprodução (print) da interface gráfica do Github em um repositório de POC onde mostra os registros de execução do workflow de condicionais.
  1. O resultado: workflow run
Reprodução (print) da interface gráfica do Github em um repositório de POC onde mostra a estrutura do workflow anterior no Github Actions. 
  • Os jobs job1, job2, job3 e job4 correspondem ao segundo cenário explicado acima.
  • Os jobs check-secret, job5 e job6 ao terceiro cenário explicado acima.
  • O job7 ao primeiro cenário explicado acima.

Resultado primeiro cenário:


Reprodução (print) da interface gráfica do Github em um repositório de POC onde mostra o resultado do job job7 executado no workflow anterior no Github Actions.

Resultado segundo cenário:


Reprodução (print) da interface gráfica do Github em um repositório de POC onde mostra o resultado do job job6 executado no workflow anterior no Github Actions.

Resultado terceiro cenário:


Reprodução (print) da interface gráfica do Github em um repositório de POC onde mostra o resultado do job job4 executado no workflow anterior no Github Actions.

Condicionais no workflows do Github Actions: execute o que for necessário, onde for preciso

Por hoje é isso galera! Espero que este artigo tenha esclarecido como usar condicionais no workflows do Github Actions.

Quem quiser consultar outros exemplos com Github Actions, deixo aqui um repositório pessoal onde testei vários tipos de implementações com a ferramenta.

Lembrando que a documentação do Github Actions em português é muito boa e vale a leitura.

Referências

Capa do artigo sobre Como usar condicional no Github Actions, onde duas pessoas, em frente a uma tela e um notebook conversam sobre os códigos exibidos.
foto Guillaume Falourd
Back-end Developer
Zupper tentando transformar o complexo em simples através de conteúdos diversificados, com intuito de impactar o mercado de TI e as pessoas ao seu redor da melhor forma possível.

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.