Plataforma de CI/CD nativa de GitHub. Workflows declarativos en YAML que automatizan build, test, deploy y cualquier tarea del ciclo de desarrollo — directamente desde el repositorio.
GitHub Actions es la plataforma de automatización integrada en GitHub. Cada repositorio puede definir workflows en YAML que se ejecutan en respuesta a eventos — push, PR, schedule, release, o cualquier webhook.
# .github/workflows/ci.yml
name: CI # Nombre del workflow
on: # Triggers
push:
branches: [main]
pull_request:
branches: [main]
permissions: # Permisos del GITHUB_TOKEN
contents: read
env: # Variables globales
NODE_VERSION: 20
jobs: # Uno o más jobs
build:
runs-on: ubuntu-latest # Runner
steps:
- uses: actions/checkout@v4 # Action reutilizable
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
- run: pnpm install # Comando shell
- run: pnpm test
- run: pnpm buildon:
# Push y PRs
push:
branches: [main, 'release/**']
paths: ['src/**', 'package.json'] # solo si estos archivos cambian
pull_request:
types: [opened, synchronize, reopened]
# Programado (cron UTC)
schedule:
- cron: '0 6 * * 1' # lunes a las 6:00 UTC
# Manual desde UI o API
workflow_dispatch:
inputs:
environment:
description: 'Deploy target'
required: true
type: choice
options: [staging, production]
# Cuando se publica un release
release:
types: [published]
# Cuando otro workflow termina
workflow_run:
workflows: [CI]
types: [completed]jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pnpm lint
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pnpm test
# Deploy solo si lint y test pasan
deploy:
needs: [lint, test]
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: ./deploy.shTestear en múltiples combinaciones:
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [18, 20, 22]
fail-fast: false # no cancelar otros si uno falla
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- run: npm testjobs:
deploy:
runs-on: ubuntu-latest
environment: production # environment con protecciones
steps:
- run: ./deploy.sh
env:
API_KEY: ${{ secrets.API_KEY }}
DEPLOY_URL: ${{ vars.DEPLOY_URL }}Niveles de secrets:
- uses: actions/cache@v4
with:
path: |
~/.pnpm-store
node_modules
key: ${{ runner.os }}-pnpm-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-Compartir archivos entre jobs o descargar después:
- uses: actions/upload-artifact@v4
with:
name: build-output
path: dist/
retention-days: 7
# En otro job:
- uses: actions/download-artifact@v4
with:
name: build-outputDefinir workflows que otros repos pueden llamar:
# .github/workflows/reusable-deploy.yml
on:
workflow_call:
inputs:
environment:
required: true
type: string
secrets:
deploy_key:
required: true
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- run: echo "Deploying to ${{ inputs.environment }}"# Llamar desde otro workflow
jobs:
deploy:
uses: org/repo/.github/workflows/reusable-deploy.yml@main
with:
environment: production
secrets:
deploy_key: ${{ secrets.DEPLOY_KEY }}Crear actions propias combinando steps:
# .github/actions/setup-project/action.yml
name: Setup Project
description: Install dependencies and build
runs:
using: composite
steps:
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
shell: bash
- run: pnpm build
shell: bash# Principio de mínimo privilegio
permissions:
contents: read
pull-requests: write
# Pinear actions por SHA (no por tag)
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
# Limitar permisos del GITHUB_TOKEN por defecto
# Settings → Actions → General → Workflow permissions → Read repository contents| Plan | Minutos/mes | Storage |
|---|---|---|
| Free | 2,000 | 500 MB |
| Team | 3,000 | 2 GB |
| Enterprise | 50,000 | 50 GB |
Repos públicos: minutos ilimitados en runners Linux.
echo $SECRET los expone. GitHub los enmascara pero no confiar ciegamente.@v4 puede cambiar. Pinear por SHA para seguridad.timeout-minutes.GitHub Actions eliminó la necesidad de mantener un servidor de CI separado para la mayoría de los proyectos. Al vivir junto al código, los workflows son versionados, revisados en PRs y ejecutados sin configuración externa. Para proyectos open source, los minutos gratuitos lo hacen la opción por defecto.
Plataforma de desarrollo colaborativo construida sobre Git. Más que hosting de repositorios — es el hub central para code review, CI/CD, gestión de proyectos y colaboración open source.
Continuous Integration y Continuous Delivery/Deployment — prácticas que automatizan la integración de código, testing y entrega a producción. Fundamento de la ingeniería de software moderna.
Cultura y conjunto de prácticas que unifican desarrollo (Dev) y operaciones (Ops) para entregar software con mayor velocidad, calidad y confiabilidad. No es un rol — es una forma de trabajar.
GitHub App serverless que auto-aprueba pull requests después de que CI pasa, con revisión de código opcional vía Amazon Bedrock. Cinco repositorios: app TypeScript/Probot, módulo Terraform AWS (Lambda + API Gateway + Secrets Manager + SQS DLQ), módulo Terraform GitHub (webhooks), infra de despliegue y repo de pruebas.
Sistema de tres agentes que automatiza el ciclo de vida de contenido MDX bilingüe: auditoría QA determinística, correcciones quirúrgicas y upgrades completos — todo orquestado con Strands Agents, Claude Sonnet 4 en Amazon Bedrock y GitHub Actions con patrón diamante.
Conjunto de prácticas técnicas y culturales que implementan los principios DevOps — desde Infrastructure as Code hasta blameless post-mortems. El «cómo» detrás de la filosofía.