GitHub Actions
Siendo GitHub hoy en día el principal repositorio de código, es de extrema importancia conocer mejor sus recursos.
GitHub Actions es un servicio de automatización de flujos de trabajo que permite automatizar todo tipo de procesos y acciones relacionados con el repositorio.
Vale la pena recordar que el conocimiento en git es necesario para crear pipelines más elaborados.
Probablemente ya tengas una cuenta en GitHub, si no la tienes, crea una gratuitamente.
Conceptos Iniciales
Usamos el lenguaje declarativo YAML para expresar lo que queremos hacer. Estos archivos se encuentran dentro del propio repositorio en la carpeta .github/workflows.
Tenemos 3 bloques principales en un archivo YAML que debemos entender:
- Workflows - Sirven para incluir los jobs
- Jobs - Son agrupaciones de steps. Los jobs se ejecutarán en el orden en que fueron especificados dentro de un workflow o en paralelo, si no hay dependencia entre ellos
- Steps - Son la unidad más pequeña y representan un paso de un job, siendo ejecutados secuencialmente. Un job de build podría tener varios steps como:
- clonar el repositorio
- descargar dependencias
- compilar
Cada archivo YAML será un workflow y podemos tener tantos como sean necesarios. Los workflows son nuestros procesos automatizados que se ejecutan cuando algún evento que deseamos rastrear ocurre en el repositorio. En el mismo archivo YAML del workflow configuramos cuándo debe o no ser disparado a través de los triggers y events.
Un evento puede ser manual o automático, como cuando ocurre un commit, por ejemplo.

Cada job se ejecuta en un runner, es decir, el entorno de ejecución para los steps. En este entorno de ejecución tenemos el sistema operativo definido e ítems instalados en el sistema para que puedan ejecutar los steps. Estas definiciones se colocan dentro de cada bloque de job. Actions ofrece soporte para Linux, macOS y Windows, pero también es posible configurar tus propios runners. Un job debe tener al menos un step.
Dentro de un workflow podemos definir varios jobs que pueden o no ser ejecutados si se define una condición.
Es en los steps de cada job donde realmente ocurren los comandos. Generalmente podemos tener un shell script para definir lo que debe hacerse, o actions que son tareas predefinidas que veremos más adelante.
Los steps no pueden ser ejecutados en paralelo como los jobs, pero pueden estar sujetos a condiciones.

Precio
Actions es gratuito en repositorios públicos. En repositorios privados hay una cantidad limitada de ejecuciones mensuales, siendo necesario pagar por el excedente.
Consulta cómo funciona la facturación de Actions.
La base de cálculo de minutos es para entorno Linux. Utilizar un entorno Windows cuesta 2 veces más que un entorno Linux, y en macOS cuesta 10 veces más.
Obviamente, si estamos utilizando máquinas para ejecutar nuestros jobs, cuantos más recursos necesitamos, mayor es el precio.
Podemos tener máquinas propias conectadas a GitHub Actions para proporcionar el entorno y evitar pagar por estos recursos. Una buena idea son contenedores dentro de un Kubernetes o incluso contenedores en tu propia máquina, si el proyecto es personal. Sin embargo, este segundo caso es raro de ocurrir, pues si el proyecto es pequeño, los límites gratuitos son suficientes.