Guía rápida de GitHub Actions - Estructura estándar y 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 su código basado en eventos como pushes, solicitudes de extracción o en un horario.

Además de GitHub estándar, puede usar GitHub Actions en un servidor Gitea autohospedado.

flujo de github actions

Este resumen cubre la estructura de GitHub Actions, una breve descripción y las acciones más comunes utilizadas en flujos de trabajo de código abierto y comerciales. Las acciones abarcan herramientas oficiales, de la comunidad y de terceros, apoyando la automatización desde construcciones y pruebas hasta despliegue, gestión de lanzamientos, QA y notificaciones.

Estructura de Configuración Básica

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

name: Nombre del flujo de trabajo
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Configurar Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: Ejecutar pruebas
        run: npm test
  • El bloque on especifica los eventos de disparo.
  • Cada job se ejecuta en su propio runner.
  • steps pueden ejecutar comandos de shell o llamar a acciones reutilizables.

Componentes Principales del Flujo de Trabajo

Componente Descripción
Flujo de trabajo Proceso automatizado (YAML) desencadenado por un evento
Evento Actividad que desencadena el flujo de trabajo (push, pull_request, etc.)
Trabajo Serie de pasos ejecutados en un runner, puede ejecutarse secuencialmente o en paralelo
Paso Cada comando o acción en un trabajo
Runner VM o contenedor donde se ejecutan los trabajos
Acción Extensión/reutilizable encapsulando una tarea

Eventos de Desencadenamiento

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

Ejemplo:

on:
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      environment:
        description: 'Entorno de despliegue'
        required: true
        default: 'producción'
        type: string

Acciones Útiles Preinstaladas

Acción Propósito Parámetros Comunes
actions/checkout Ver código del repositorio ref, token, submodules, persist-credentials
actions/setup-node Configurar entorno de 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 Construir y empujar imágenes Docker context, file, platforms, tags, push, build-args
actions/upload-artifact Subir artefactos de construcción name, path, if-no-files-found
actions/download-artifact Descargar artefactos name, path
github/email-actions Enviar notificaciones por correo electrónico to, subject, content, attachments
peter-evans/create-pull-request Crear PRs a través de flujo de trabajo branch, title, body, labels, base
actions/github-script Ejecutar JavaScript arbitrario en su flujo de trabajo script, github-token

Parámetros de Acción

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

- name: Alguna Acción o Paso
  uses: owner/repo@ref
  with:
    param1: valor
    param2: valor
  env:
    ENV_VAR: valor
  if: ${{ condición }}
  run: comando_a_ejecutar
  shell: bash|pwsh|python|sh
  continue-on-error: true|false
  • with: argumentos pasados a la acción (ver 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 usado para ejecutar el paso
  • continue-on-error: continuar incluso si el paso falla

Definir Entradas de Acción Personalizadas

En su metadatos de acción (action.yml):

inputs:
  example-input:
    description: 'Un ejemplo de entrada'
    required: false
    default: 'valor-por-defecto'

Cuando se usa en un flujo de trabajo:

- uses: my/action@v1
  with:
    example-input: 'valor-personalizado'

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

Ejemplo: Flujo de Trabajo con Parámetros Manuales

name: Desplegar
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Entorno de despliegue'
        required: true
        default: 'producción'
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Ver código
        uses: actions/checkout@v4
      - name: Desplegar en entorno
        run: echo "Desplegando en ${{ github.event.inputs.environment }}"

Mercado de Acciones

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

Consejos Rápidos

  • Coloque los archivos de flujo de trabajo en .github/workflows.
  • Use workflow_dispatch con inputs para ejecuciones manuales y parametrizadas.
  • Use la acción cache para acelerar la instalación de dependencias.
  • Use la matriz de trabajo para probar múltiples versiones de OS/entorno de ejecución.
  • Use secretos para datos sensibles, referenciados como ${{ secrets.NOMBRE_DEL_SECRETO }}.

Este resumen cubre los fundamentos de usar, configurar y extender GitHub Actions para automatización, CI/CD y más. Para más detalles y actualizaciones, siempre consulte la documentación oficial de GitHub y los repositorios de acción.

Acciones de GitHub Comunes

Aquí hay una lista práctica de acciones de GitHub frecuentemente usadas que ayudan a automatizar CI/CD, pruebas, construcción, despliegue y tareas de flujo de trabajo:

Acciones Oficiales Principales

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

Acciones Comunitarias y de Terceros Populares

Acción Propósito
docker/build-push-action Construir y empujar imágenes Docker
actions/setup-go Configurar entorno de Go
super-linter/super-linter Linteo automático universal de código
trufflesecurity/trufflehog Escanear para 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 Empujar cambios de vuelta al repositorio de GitHub
actions/setup-dotnet Configurar SDK de .NET
azure/login Autenticarse en Azure
google-github-actions/auth Autenticarse en Google Cloud

Acciones de Pruebas, QA y Reportes

Acción Propósito
actions/setup-ruby Configurar entorno de 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-commitear y empujar 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 de extremo de Cypress
slackapi/slack-github-action Enviar mensajes a Slack
dawidd6/action-send-mail Enviar correos durante las ejecuciones del flujo de trabajo

Acciones de Utilidad y Gestión de Flujo de Trabajo

Acción Propósito
peter-evans/repository-dispatch Desencadenar flujos de trabajo en repositorios externos
fregante/setup-git-user Establecer credenciales de usuario de Git para commits
andymckay/labeler Etiquetar issues y PRs según rutas
actions/configure-pages Configurar publicación a GitHub Pages
EndBug/add-and-commit Agregar y commitear archivos dentro de un flujo de trabajo
dangoslen/changelog-enforcer Verificar si un changelog fue actualizado para PRs

Cómo Encontrar Más

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

Enlaces Útiles