Ejercicio práctico: Automatiza un script simple con GitHub Actions

Lectura
25 min~5 min lectura

Concepto clave

GitHub Actions es una plataforma de automatización que permite ejecutar flujos de trabajo (workflows) directamente en tu repositorio de GitHub. Imagina que tienes un asistente virtual que, cada vez que haces un cambio en tu código, automáticamente realiza tareas repetitivas como compilar, probar o desplegar tu aplicación. Esto elimina la necesidad de hacerlo manualmente, reduciendo errores y acelerando el desarrollo.

En el contexto de CI/CD (Integración Continua/Despliegue Continuo), GitHub Actions actúa como el motor que orquesta todo el proceso. Cuando configuras un workflow, defines qué eventos (como un push o un pull request) lo activan, y qué pasos debe ejecutar. Por ejemplo, puedes automatizar la ejecución de tests cada vez que alguien sube código, asegurando que no se introduzcan errores. Es similar a tener una cadena de montaje en una fábrica: cada etapa se ejecuta de forma automática y secuencial, optimizando el tiempo y los recursos.

Cómo funciona en la práctica

Para automatizar un script simple con GitHub Actions, sigue estos pasos:

  1. Crea un archivo de configuración en tu repositorio, dentro de la carpeta .github/workflows/. Este archivo, típicamente en formato YAML, define el workflow.
  2. Define el evento que activará el workflow, como push a la rama principal.
  3. Configura un job que contenga los pasos a ejecutar. Cada paso puede ser un comando de shell o una acción predefinida.
  4. Ejecuta tu script dentro de uno de los pasos, usando comandos como run para shell scripts.
  5. Verifica los resultados en la pestaña "Actions" de tu repositorio en GitHub, donde podrás ver el estado de la ejecución y logs detallados.

Por ejemplo, si tienes un script de Python que limpia datos, puedes configurar un workflow que lo ejecute automáticamente cada vez que actualices el código, generando un reporte o notificando si hay errores.

Codigo en accion

A continuación, un ejemplo funcional de un workflow que automatiza un script simple de Python. Este script calcula el factorial de un número y lo imprime. Primero, el script en Python:

# script_factorial.py
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

if __name__ == "__main__":
    num = 5
    result = factorial(num)
    print(f"El factorial de {num} es {result}")

Ahora, el archivo de configuración del workflow en YAML:

# .github/workflows/automate-script.yml
name: Ejecutar Script de Factorial

on:
  push:
    branches:
      - main

jobs:
  run-script:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout del código
        uses: actions/checkout@v3
      
      - name: Configurar Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      
      - name: Ejecutar script de factorial
        run: python script_factorial.py

Este workflow se activa con un push a la rama main, usa un runner de Ubuntu, y ejecuta el script de Python. Puedes copiar y pegar estos códigos en tu repositorio para probarlo.

Errores comunes

  • Error en la sintaxis YAML: Olvidar la indentación correcta o usar tabs en lugar de espacios. Esto causa que el workflow falle al parsear. Solución: Usa un editor con soporte para YAML y verifica la indentación con espacios.
  • Script no encontrado: Si el script no está en la ruta correcta o no se ha hecho checkout del código, el comando run fallará. Solución: Asegúrate de incluir el paso actions/checkout@v3 y de que la ruta al script sea relativa al directorio raíz del repositorio.
  • Permisos insuficientes: Algunos scripts requieren permisos de ejecución. Si no se configuran, el workflow puede fallar. Solución: Agrega un paso para dar permisos, por ejemplo: run: chmod +x script.sh antes de ejecutarlo.
  • No verificar dependencias: Si el script depende de librerías o herramientas no instaladas en el runner, fallará. Solución: Incluye pasos para instalar dependencias, como pip install -r requirements.txt para Python.
  • Ignorar los logs de error: No revisar los logs en la pestaña "Actions" puede hacer difícil depurar problemas. Solución: Siempre revisa los logs detallados para identificar la causa raíz de los fallos.

Checklist de dominio

  • Crear un archivo YAML en .github/workflows/ con la estructura básica de un workflow.
  • Definir un evento de activación, como push o pull_request.
  • Configurar un job que use un runner adecuado, por ejemplo ubuntu-latest.
  • Incluir el paso de checkout del código usando actions/checkout@v3.
  • Ejecutar un script simple usando comandos run en los pasos del workflow.
  • Verificar la ejecución exitosa del workflow en la pestaña "Actions" de GitHub.
  • Depurar errores comunes revisando los logs y ajustando la configuración.

Automatiza un script de limpieza de datos con GitHub Actions

En este ejercicio, automatizarás un script de Python que limpia un archivo CSV, eliminando filas duplicadas y guardando el resultado. Sigue estos pasos:

  1. Crea un repositorio nuevo en GitHub llamado "data-cleanup-automation".
  2. En tu máquina local, clona el repositorio y crea un archivo clean_data.py con el siguiente código:
    import pandas as pd
    
    def clean_csv(input_file, output_file):
        df = pd.read_csv(input_file)
        df_cleaned = df.drop_duplicates()
        df_cleaned.to_csv(output_file, index=False)
        print(f"Archivo limpiado guardado como {output_file}")
    
    if __name__ == "__main__":
        clean_csv("data.csv", "cleaned_data.csv")
  3. Crea un archivo data.csv de ejemplo con algunas filas duplicadas para probar el script.
  4. En la carpeta .github/workflows/ del repositorio, crea un archivo YAML llamado cleanup-workflow.yml que:
    • Se active con un push a la rama main.
    • Use un runner de Ubuntu.
    • Incluya pasos para instalar Python y pandas.
    • Ejecute el script clean_data.py.
  5. Haz commit y push de los cambios a GitHub.
  6. Verifica en la pestaña "Actions" que el workflow se ejecute correctamente y genere el archivo cleaned_data.csv.
Pistas
  • Asegúrate de que el archivo data.csv esté en el directorio raíz del repositorio para que el script lo encuentre.
  • Usa 'pip install pandas' en un paso del workflow para instalar la dependencia necesaria.
  • Si el workflow falla, revisa los logs en GitHub Actions para ver mensajes de error específicos.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.