Back

Creación Automática de Pull Requests en Cada Push

Creación Automática de Pull Requests en Cada Push

La automatización de Git puede agilizar significativamente su flujo de trabajo de desarrollo. Esta guía explora cómo crear automáticamente pull requests cada vez que se hace push de código a su repositorio, utilizando varias herramientas y enfoques.

Puntos Clave

  • Aprenda tres métodos diferentes para automatizar la creación de PRs: GitHub Actions, GitHub CLI y herramientas de CI/CD
  • Implemente prácticas de automatización seguras con autenticación y permisos adecuados
  • Comprenda las mejores prácticas para gestionar pull requests automatizados
  • Configure la protección de ramas y la lógica condicional de creación de PRs

Método 1: Usando GitHub Actions (Recomendado)

GitHub Actions proporciona una forma nativa y confiable de automatizar la creación de PRs. Así es como se configura:

Paso 1: Crear un Flujo de Trabajo de GitHub Actions

  1. Cree un directorio .github/workflows/ en su repositorio si no existe
  2. Cree un nuevo archivo llamado auto-pr.yml
  3. Agregue la siguiente configuración:
name: Auto PR on Push

on:
  push:
    branches:
      - 'feature/**'    # Coincide con ramas feature/*
      - 'bugfix/**'     # Coincide con ramas bugfix/*
      # Agregue más patrones de ramas según sea necesario

jobs:
  create-pull-request:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # Requerido para una comparación adecuada de ramas

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v6
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: ""PR creado automáticamente desde ${{ github.ref_name }}""
          title: ""PR Automático: ${{ github.ref_name }}""
          body: |
            Pull request automatizado creado desde push a ${{ github.ref_name }}
            
            Rama: ${{ github.ref_name }}
            Activado por: ${{ github.actor }}
          branch: ${{ github.ref_name }}
          base: main
          labels: |
            automated-pr
            needs-review

Paso 2: Configurar los Ajustes del Repositorio

  1. Vaya a la Configuración de su repositorio → Actions → General
  2. En ""Permisos de flujo de trabajo"", seleccione ""Permisos de lectura y escritura""
  3. Guarde los cambios

Método 2: Usando GitHub CLI

Para desarrolladores que prefieren la automatización local, GitHub CLI ofrece una solución sencilla.

Paso 1: Instalar GitHub CLI

Elija su plataforma:

  • macOS: brew install gh
  • Ubuntu/Debian: sudo apt install gh
  • Windows: winget install GitHub.cli o descargue desde <https://cli.github.com>
  • Otra distribución Linux: Siga las instrucciones en <https://github.com/cli/cli#installation>

Paso 2: Autenticar GitHub CLI

gh auth login

Paso 3: Configurar el Hook Post-Push

Cree y configure el hook post-push:

#!/bin/bash

# Obtener el nombre de la rama actual
BRANCH=$(git rev-parse --abbrev-ref HEAD)

# No crear PR para ramas main/master
if [[ ""$BRANCH"" == ""main"" ]] || [[ ""$BRANCH"" == ""master"" ]]; then
    exit 0
fi

# Verificar si el PR ya existe
PR_EXISTS=$(gh pr list --head ""$BRANCH"" --json number --jq length)

if [ ""$PR_EXISTS"" -eq 0 ]; then
    # Crear PR si no existe
    gh pr create 
        --base main 
        --head ""$BRANCH"" 
        --title ""PR Automático: $BRANCH"" 
        --body ""Pull request automatizado creado desde $BRANCH"" 
        --label ""automated-pr""
fi

Método 3: Usando Herramientas de CI/CD

Para equipos que usan otras plataformas de CI/CD, así es como implementar la automatización de PRs usando la API REST de GitHub.

Ejemplo de Jenkins Pipeline

pipeline {
    agent any
    
    environment {
        GITHUB_TOKEN = credentials('github-token')
    }
    
    stages {
        stage('Create PR') {
            steps {
                script {
                    def branchName = sh(
                        returnStdout: true, 
                        script: 'git rev-parse --abbrev-ref HEAD'
                    ).trim()
                    
                    // No crear PR para main/master
                    if (branchName != 'main' && branchName != 'master') {
                        def response = sh(
                            returnStdout: true,
                            script: """"""
                                curl -X POST 
                                    -H 'Authorization: token ${GITHUB_TOKEN}' 
                                    -H 'Accept: application/vnd.github.v3+json' 
                                    https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/pulls 
                                    -d '{
                                        ""title"": ""PR Automático: ${branchName}"",
                                        ""head"": ""${branchName}"",
                                        ""base"": ""main"",
                                        ""body"": ""Pull request automatizado creado desde pipeline de Jenkins""
                                    }'
                            """"""
                        )
                    }
                }
            }
        }
    }
}

Mejores Prácticas y Consideraciones de Seguridad

  • Habilite reglas de protección de ramas para su rama principal
  • Cree plantillas de PR estandarizadas
  • Use etiquetas para distinguir PRs automatizados
  • Configure la asignación automática de revisores
  • Almacene tokens de forma segura usando secretos de repositorio
  • Limite los permisos del token a los ámbitos requeridos
  • Rote regularmente los tokens de autenticación
  • Revise la configuración de PR automatizados para evitar la exposición de datos sensibles

Conclusión

Automatizar la creación de pull requests puede mejorar significativamente su flujo de trabajo de desarrollo al garantizar procesos consistentes de revisión de código y reducir el esfuerzo manual. Ya sea que elija GitHub Actions, GitHub CLI o herramientas de CI/CD, implementar estas técnicas de automatización ayudará a optimizar su proceso de desarrollo y mantener un mejor control de calidad del código.

Preguntas Frecuentes

La automatización de la creación de PRs asegura la consistencia en su proceso de revisión de código, ahorra tiempo, reduce errores humanos y ayuda a mantener un historial claro de los cambios de código. Es especialmente útil para equipos que trabajan simultáneamente en múltiples características.

Se recomienda GitHub Actions para la mayoría de los usuarios, ya que proporciona integración nativa con GitHub, requiere una configuración mínima y ofrece características robustas. Sin embargo, si prefiere la automatización local, GitHub CLI es una buena alternativa, mientras que las herramientas de CI/CD son mejores para entornos empresariales complejos.

Los scripts proporcionados incluyen verificaciones para evitar PRs duplicados. Para GitHub CLI, verificamos los PRs existentes antes de crear nuevos. Con GitHub Actions, puede usar la acción `peter-evans/create-pull-request` que maneja esto automáticamente.

Sí, puede personalizar la plantilla de PR modificando el parámetro body en cualquiera de los métodos. Para las etiquetas, puede agregarlas en el flujo de trabajo de GitHub Actions o en el comando CLI. También puede configurar plantillas de PR para todo el repositorio.

Use secretos de repositorio para almacenar tokens, implemente un alcance adecuado de permisos y rote regularmente las credenciales. Para GitHub Actions, use el GITHUB_TOKEN integrado cuando sea posible. Para herramientas CLI y CI/CD, cree tokens de acceso dedicados con los permisos mínimos requeridos.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers