GitHub Actions, parte 1

Cómo integrar GitHub Actions con diferentes tecnologías

ASIMOV Ingeniería S. de R.L. de C.V., Jaqueline Mejia Trejo

¿Qué es GitHub Actions? 


Es una característica ofrecida por GitHub que permite a los desarrolladores a crear workflows  que pueden ser usados para compilar, probar e implementar código, nos da la posibilidad de crear flujos de CI/CD dentro de un repositorio de Git.

Los workflows deben contener al menos un job. Estos incluyen una series de pasos que realizan las tareas individuales que pueden ser acciones o comandos. Un workflow puede comenzar con diferentes eventos (triggers) que ocurren dentro de Github, como el envió al repositorio o la creación de un pull request.

En este tutorial crearé workflow para ejecutar pruebas unitarias de un proyecto de Android para el resultado se pueda usar como una verificación de estado de un pull request. Con esta configuración, un pull request debe pasar las pruebas unitarias antes de que otros miembros de equipo puedan revisar el código.


Crear un archivo workflow



Los archivos workflows deben almacenarse en la carpeta .github/workflows con el formato yaml en el repositorio raíz.

Crea el archivo .github/workflows/android-feature.yml con el siguiente contenido:

name: Android Feature Branch CI

on:
  push:
    branches:
      - '*'
      - '!master'

jobs:
  test:
    name: Run Unit Tests
    runs-on: ubuntu-18.04

    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Unit tests
        run: bash ./gradlew test --stacktrace


Entendiendo el workflow 



Nombre del Workflow

name: Android Feature Branch CI

La primera parte es el nombre del workflow.

Definición de eventos

on:
  push:
    branches:
      - '*'
      - '!master

En esta sección, podemos definir sobre que branch y evento se ejecutará este Workflow. Para este ejemplo, el Workflow se ejecutará en cualquier rama diferente de la master para el evento push.

Definición de jobs

jobs:
  test:
    name: Run Unit Tests
    runs-on: ubuntu-18.04

Podemos definir cualquier numero de jobs en un workflow, por ahora sólo estaremos creando una llamada test necesitamos específicamente un nombre y sobre que tipo de máquina virtual se ejecutará, en este caso usaremos ubuntu-18.04. Finalmente he definido los paso que son incluidos en un job. Son tareas que se ejecután en secuencia en la misma máquina virtual.                                                                     

steps:
- uses: actions/checkout@v1 - name: Set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Unit tests run: bash ./gradlew test --stacktrace    

En mi test tengo tres pasos, cada uno creado de manera un poco diferente. El primero — uses: actions/checkout@1, es una acción es permitir que el workflow acceda al contenido del repositorio. El segundo paso es más complejo, pero tiene un objetivo simple, configurar una versión de JDK para que sea Java 8.

- name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

Finalmente, un tercer paso ejecutara pruebas unitarias ubicadas en el proyecto. Como es un proyecto de Android, usa Gradle para el ciclo de vida de compilación, por lo tanto, para ejecutar la prueba necesitamos usar el archivo Gradle Wrapper. El comando es el mismo para su computadora en la terminal.

 - name: Unit tests
        run: bash ./gradlew test --stacktrace

Ahora sólo necesitamos crear una rama y enviar los cambios al repositorio. Después de eso, vaya a la pestaña de Actions del proyecto para comprobar si se ha activado el workflow.

Odoo • A picture with a caption

Después de más de un minuto, el workflow finalizó correctamente.

Odoo • A picture with a caption

Verificaciones de estado de Github



Para que este workflow sea un status check en tu repositorio GitHub, se necesita una regla de protección de la branch simple para master. Simplemente vaya a Settings -> Branches -> Add rule y cree la siguiente regla seleccionando el nombre del trabajo que se utilizará, en este caso el nombre de nuestro trabajo es Run Unit Tests . Finalmente, cree la regla y guarde los cambios.

Odoo • A picture with a caption

Precios de Github Actions



Una cosa importante que se debe tener en cuenta es el precio de GitHub Actions. Dependiendo del tipo de cuenta, se incluye una cantidad específica de minutos gratis (por mes) y almacenamiento. Otra cosa importante que debes de saber es que los minutos para máquinas virtuales Linux, macOs y Windows tienen un valor diferente.

Como ejemplo, la cuenta gratuita de GitHub tiene 2000 minutos incluidos, dependiendo del tipo de máquina que tendrá:

  • Linux -> 2000 minutos de compilación (el multiplicador de minutos es 1)

  • Windows -> 1000 minutos de compilación (el multiplicador de minutos es 2)

  • MacOs -> 200 minutos de compilación (el multiplicador de minutos es 10)

Los minutos adicionales para las compilaciones o el almacenamiento adicional se facturan por separado; se debe establecer un límite de gasto mensual qué se utilizará en cuanto se gasten todos los minutos incluidos del mes. Este es un ejemplo de facturación. El valor para MacOS es 1010, pero como el multiplicador es 10, los minutos reales que hemos utilizado para la compilación son 101.

Odoo • A picture with a caption

Conclusión



Las posibilidades son infinitas y se pueden hacer muchas cosas, como análisis de código estático, implementar en un entorno de prueba y producción, enviar aplicaciones a las tiendas, ejecutar pruebas instrumentadas en granjas, etc.

Company team

José Cadena 

Colaborador de producto y tecnología en EDYEN.