GitHub Actions
Sendo o GitHub hoje o principal repositório de código, é de extrema importância conhecer melhor seus recursos.
GitHub Actions é um serviço de automação de workflow que permite automatizar todos os tipos de processos e ações relacionados ao repositório.
Vale lembrar que conhecimento em git é necessário para criar pipelines mais elaboradas.
Provavelmente você já deve ter uma conta no GitHub, senão tiver, crie uma gratuitamente.
Conceitos Iniciais
Usamos a linguagem declarativa YAML para expressar o que queremos fazer. Esses arquivos ficam dentro do próprio repositório na pasta .github/workflows.
Temos 3 blocos principais em um arquivo YAML que devemos entender:
- Workflows - Servem para incluir os jobs
- Jobs - São agrupamentos de steps. Os jobs serão executados na ordem em que foram especificados dentro de um workflow ou em paralelo, caso não haja dependência entre eles
- Steps - São a menor unidade e representam um passo de um job, sendo executados sequencialmente. Um job de build poderia ter vários steps como:
- clonar o repo
- baixar dependências
- compilar
Cada arquivo YAML será um workflow e podemos ter quantos forem necessários. Workflows são os nossos processos automatizados que são executados quando algum evento que desejamos rastrear acontece no repositório. No mesmo arquivo YAML do workflow configuramos quando deve ou não ser disparado através dos triggers e events.
Um evento pode ser manual ou automático, como quando um commit acontece, por exemplo.

Cada job é executado em um runner, ou seja, o ambiente de execução para os steps. Neste ambiente de execução temos o sistema operacional definido e itens instalados no sistema para que possam executar os steps. Essas definições são colocadas dentro de cada bloco de job. O Actions oferece suporte a Linux, macOS e Windows, mas também é possível configurar seus próprios runners. Um job deve ter pelo menos um step.
Dentro de um workflow podemos definir vários jobs que podem ou não ser executados caso uma condição seja definida.
É nos steps de cada job que realmente acontecem os comandos. Geralmente podemos ter um shell script para definir o que deve ser feito, ou actions que são tasks predefinidas que veremos mais adiante.
Steps não podem ser executados em paralelo como os jobs, mas podem estar sujeitos a condições.

Preço
Actions são gratuitos em repositórios públicos. Em repositórios privados há uma quantidade limitada de execuções mensais, sendo necessário pagar pelo excedente.
Confira como funciona a cobrança do Actions.
A base de cálculo de minutos é para ambiente Linux. Utilizar um ambiente Windows custa 2 vezes mais que um ambiente Linux, e no macOS custa 10 vezes mais.
Obviamente, se estamos utilizando máquinas para rodar nossos jobs, quanto mais recursos precisamos, maior o preço.
Podemos ter máquinas próprias conectadas ao GitHub Actions para fornecer o ambiente e evitar pagar por esses recursos. Uma boa ideia são containers dentro de um Kubernetes ou até mesmo containers na sua própria máquina, se o projeto for pessoal. Porém, este segundo caso é raro de acontecer, pois se o projeto é pequeno, os limites gratuitos são suficientes.