Hoja de referencia de GitHub Actions: estructura estándar y una lista de las acciones más útiles.

Un poco sobre las acciones comunes de GitHub y su estructura.

Índice

GitHub Actions es una plataforma de automatización y CI/CD dentro de GitHub, utilizada para compilar, probar y desplegar tu código basándose en eventos como pushes, solicitudes de extracción (pull requests) o según un horario.

Además del GitHub estándar, puedes usar GitHub Actions en un servidor Gitea autoadministrado.

github actions flow

Las acciones abarcan herramientas oficiales, de la comunidad y de terceros, apoyando la automatización desde la compilación y pruebas hasta el despliegue, gestión de lanzamientos, QA y notificaciones.


Este resumen cubre la estructura de GitHub Actions, una descripción breve y las acciones más comunes utilizadas en flujos de trabajo de código abierto y comerciales. Es parte de Herramientas para Desarrolladores: La Guía Completa para Flujos de Trabajo de Desarrollo Moderno.

Estructura Básica de Configuración

Los flujos de trabajo (Workflows) de GitHub Actions se definen en archivos YAML ubicados en el directorio .github/workflows dentro del repositorio.

name: Workflow Name
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: Run tests
        run: npm test
  • El bloque on especifica los eventos detonantes.
  • Cada job se ejecuta en su propio ejecutor (runner).
  • steps pueden ejecutar comandos de shell o llamar a acciones reutilizables.

Componentes Principales del Flujo de Trabajo

Componente Descripción
Workflow Proceso automatizado (YAML) activado por un evento
Event Actividad que activa el flujo de trabajo (push, pull_request, etc.)
Job Serie de pasos ejecutados en un runner, pueden correr secuencialmente o en paralelo
Step Cada comando o acción en un job
Runner VM o contenedor donde se ejecutan los jobs
Action Extensión o complemento reutilizable que encapsula una tarea

Eventos Detonantes

  • push
  • pull_request
  • schedule (usando sintaxis cron)
  • workflow_dispatch (activación manual, permite parámetros de entrada)
  • release, issue, etc.

Ejemplo:

on:
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deployment Environment'
        required: true
        default: 'production'
        type: string

Acciones Integradas Útiles

Acción Propósito Parámetros Comunes
actions/checkout Obtener el código del repositorio ref, token, submodules, persist-credentials
actions/setup-node Configurar entorno Node.js node-version, cache, architecture, check-latest
actions/setup-python Configurar Python python-version, architecture
actions/cache Cachear dependencias path, key, restore-keys
docker/build-push-action Compilar y publicar imágenes Docker context, file, platforms, tags, push, build-args
actions/upload-artifact Subir artefactos de compilación name, path, if-no-files-found
actions/download-artifact Descargar artefactos name, path
github/email-actions Enviar notificaciones por correo to, subject, content, attachments
peter-evans/create-pull-request Crear PRs mediante workflow branch, title, body, labels, base
actions/github-script Ejecutar JavaScript arbitrario en tu flujo script, github-token

Parámetros de Acción

Parámetros Generales para Cualquier Llamada a Acción:

- name: Some Action or Step
  uses: owner/repo@ref
  with:
    param1: value
    param2: value
  env:
    ENV_VAR: value
  if: ${{ condition }}
  run: command_to_run
  shell: bash|pwsh|python|sh
  continue-on-error: true|false
  • with: argumentos pasados a la acción (consulta la documentación de la acción para todas las opciones)
  • env: variables de entorno para el paso
  • if: ejecución condicional
  • run: comandos de shell (si no se usa una acción)
  • shell: shell utilizada para ejecutar el paso
  • continue-on-error: continuar incluso si el paso falla

Definición de Entradas Personalizadas para Acciones

En tu metadato de acción (action.yml):

inputs:
  example-input:
    description: 'An example input'
    required: false
    default: 'default-value'

Cuando se usa en un flujo de trabajo:

- uses: my/action@v1
  with:
    example-input: 'custom-value'

Se accede como variable de entorno INPUT_EXAMPLE_INPUT cuando se ejecuta la acción.

Ejemplo: Flujo de Trabajo con Parámetros Manuales

name: Deploy
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deployment Environment'
        required: true
        default: 'production'
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Deploy to environment
        run: echo "Deploying to ${{ github.event.inputs.environment }}"

Marketplace de Acciones

  • Miles de acciones reutilizables están disponibles en el GitHub Marketplace.
  • Las categorías incluyen: despliegues en la nube, herramientas de notificación, marcos de prueba, análisis de código y más.
  • Explora: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact, y muchos otros.

Consejos Rápidos

  • Coloca los archivos de flujo de trabajo en .github/workflows.
  • Usa workflow_dispatch con inputs para ejecuciones manuales y parametrizadas.
  • Usa la acción cache para acelerar la instalación de dependencias.
  • Usa la matrix de jobs para probar múltiples versiones de SO/entornos de ejecución.
  • Usa secretos para datos sensibles, referenciados como ${{ secrets.SECRET_NAME }}.

Esta hoja de referencia cubre lo esencial del uso, configuración y extensión de GitHub Actions para automatización, CI/CD y más. Para más detalles y actualizaciones, consulta siempre la documentación oficial de GitHub y los repositorios de acciones.

GitHub Actions Comunes

Aquí tienes una lista práctica de GitHub Actions frecuentemente utilizados que ayudan a automatizar CI/CD, pruebas, compilación, despliegue y tareas de flujo de trabajo:

Acciones Oficiales Principales

Acción Propósito Parámetros Clave de Ejemplo
actions/checkout Obtiene el código del repositorio ref, submodules
actions/setup-node Configura entorno Node.js node-version, cache
actions/setup-python Configura entorno Python python-version
actions/setup-java Configura JDK Java distribution, java-version
actions/cache Cachear dependencias y salidas de compilación path, key, restore-keys
actions/upload-artifact Sube artefactos de compilación name, path
actions/download-artifact Descarga artefactos del flujo de trabajo name, path
actions/github-script Ejecuta JavaScript usando contexto y API de GitHub script
actions/create-release Crea un lanzamiento de GitHub tag_name, release_name
actions/upload-release-asset Sube activos a un lanzamiento upload_url, asset_path
actions/labeler Aplica etiquetas automáticamente a issues/PRs repo-token, configuration-path

Acciones Populares de la Comunidad y de Terceros

Acción Propósito
docker/build-push-action Compilar y publicar imágenes Docker
actions/setup-go Configurar entorno Go
super-linter/super-linter Linting de código automatizado universal
trufflesecurity/trufflehog Escanear secretos y credenciales
peaceiris/actions-gh-pages Desplegar sitios estáticos a GitHub Pages
JamesIves/github-pages-deploy-action Desplegar proyectos a GitHub Pages
peter-evans/create-pull-request Crear solicitudes de extracción automáticamente
softprops/action-gh-release Crear y subir lanzamientos de GitHub
ad-m/github-push-action Publicar cambios de vuelta al repositorio de GitHub
actions/setup-dotnet Configurar SDK .NET
azure/login Autenticar en Azure
google-github-actions/auth Autenticar en Google Cloud

Acciones de Pruebas, QA e Informes

Acción Propósito
actions/setup-ruby Configurar entorno Ruby
codecov/codecov-action Subir informes de cobertura de código a Codecov
coverallsapp/github-action Subir resultados de cobertura a Coveralls
dorny/test-reporter Adjuntar resultados de pruebas a GitHub Checks
stefanzweifel/git-auto-commit-action Auto-commit y push de cambios de archivos

Acciones de Despliegue y Notificación

Acción Propósito
appleboy/scp-action Subir archivos usando SCP
SamKirkland/FTP-Deploy-Action Desplegar archivos a través de FTP/FTPS
cypress-io/github-action Ejecutar pruebas end-to-end de Cypress
slackapi/slack-github-action Enviar mensajes a Slack
dawidd6/action-send-mail Enviar correos durante la ejecución del flujo

Utilidades y Gestión de Flujos de Trabajo

Acción Propósito
peter-evans/repository-dispatch Activa flujos de trabajo de repositorios externos
fregante/setup-git-user Configurar credenciales de usuario Git para commits
andymckay/labeler Etiqueta issues y PRs basados en rutas
actions/configure-pages Configurar publicación a GitHub Pages
EndBug/add-and-commit Añadir y confirmar archivos dentro de un flujo
dangoslen/changelog-enforcer Verifica si se actualizó un changelog para PRs

Cómo Encontrar Más

Hay muchas acciones de GitHub que habilitan la automatización de flujos de trabajo, como pruebas automatizadas, despliegue a producción, notificaciones e integraciones con otros servicios. El GitHub Marketplace lista miles de acciones en categorías como pruebas, seguridad, despliegue, notificaciones, calidad de código e integraciones. Listas curadas como “Awesome Actions” también son excelentes para inspiración y descubrimiento.

Enlaces Útiles