Capitulo 16: GitHub Actions y CI/CD

Por: Artiko
opencodeaigithub-actionsci-cdautomatizacion

Capitulo 16: GitHub Actions y CI/CD

< Volver al Indice del Tutorial

OpenCode se integra nativamente con GitHub. Puedes mencionar /opencode o /oc en issues y pull requests para ejecutar tareas directamente desde la plataforma. El agente se ejecuta en runners de GitHub Actions, no en tu máquina local, lo que garantiza seguridad y aislamiento completo.

Esta integración transforma a OpenCode de una herramienta de desarrollo local a un asistente que opera directamente en tu flujo de trabajo de GitHub. Cualquier miembro del equipo puede invocar al agente desde un issue o PR sin necesidad de tener OpenCode instalado en su máquina.

Setup Automatico

La forma más rápida de configurar la integración es el wizard interactivo:

opencode github install

Este comando te guía paso a paso por todo el proceso: selecciona el repositorio, instala la GitHub App, crea el archivo de workflow y configura los secrets necesarios. Todo en un solo comando, sin necesidad de configurar nada manualmente.

El wizard es idempotente: si ya tienes parte de la configuración, detecta qué falta y solo configura lo pendiente. Puedes ejecutarlo múltiples veces sin riesgo de duplicar configuración.

sequenceDiagram
    participant U as Usuario
    participant CLI as OpenCode CLI
    participant GH as GitHub

    U->>CLI: opencode github install
    CLI->>U: Selecciona repositorio
    U->>CLI: mi-org/mi-repo
    CLI->>GH: Instala GitHub App
    GH-->>CLI: App instalada
    CLI->>GH: Crea workflow .github/workflows/opencode.yml
    CLI->>GH: Configura secrets
    CLI->>U: Listo. Usa /opencode en issues y PRs.

Setup Manual

Si prefieres configurar manualmente o necesitas personalizar la integración, sigue estos tres pasos:

Paso 1: Instalar la GitHub App

Visita github.com/apps/opencode-agent e instala la app en tu repositorio o organización. La app necesita permisos para leer y escribir en issues, PRs y contenido del repositorio.

Puedes instalarla en repositorios específicos o en toda la organización. Para equipos grandes, instalar a nivel de organización es más práctico porque no necesitas repetir el proceso para cada repositorio nuevo.

Paso 2: Crear el Workflow

Crea el archivo .github/workflows/opencode.yml en tu repositorio:

name: OpenCode Agent
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, edited]
  pull_request:
    types: [opened, synchronize]

permissions:
  id-token: write
  contents: write
  pull-requests: write
  issues: write

jobs:
  agent:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: opencode/action@v1
        with:
          model: "anthropic/claude-sonnet-4-20250514"

Este workflow mínimo cubre los eventos más comunes: comentarios en issues y PRs, issues nuevos y PRs nuevos o actualizados. Puedes ajustar los eventos según tus necesidades.

Paso 3: Configurar Secrets

Ve a Settings > Secrets and variables > Actions en tu repositorio y agrega las API keys del proveedor que uses:

Solo necesitas configurar la key del proveedor que especifiques en el campo model del workflow. Los secrets se manejan de forma segura por GitHub Actions y nunca se exponen en los logs.

Configuracion del Workflow

El action acepta varios parámetros que controlan el comportamiento del agente:

- uses: opencode/action@v1
  with:
    model: anthropic/claude-sonnet-4-20250514
    agent: build
    share: true
    prompt: "Sigue las convenciones del proyecto. Responde en español."
    token: ${{ secrets.GITHUB_TOKEN }}

Parámetros Disponibles

ParámetroRequeridoDescripciónEjemplo
modelProveedor y modelo a usaranthropic/claude-sonnet-4-20250514
agentNoAgente a ejecutarbuild, plan, code
shareNoCompartir resultados públicamentetrue (default en repos públicos)
promptNoPrompt adicional de sistema"Responde en español"
tokenNoToken de GitHub (auto-provisto)${{ secrets.GITHUB_TOKEN }}

El parámetro model es el único obligatorio. Define qué modelo LLM usará el agente en el runner de GitHub Actions. Puedes usar cualquier modelo soportado por OpenCode: Anthropic, OpenAI, Google o proveedores configurados via plugins.

El parámetro agent permite especificar qué agente ejecuta la tarea. Recuerda que cada agente tiene sus propias herramientas y restricciones. Por ejemplo, build puede ejecutar comandos del sistema, mientras que plan solo analiza sin modificar.

El parámetro share controla si los resultados de la ejecución son visibles públicamente. En repositorios públicos, el default es true. En repositorios privados, el default es false.

El parámetro prompt agrega instrucciones adicionales al system prompt del agente. Es útil para establecer convenciones como el idioma de respuesta, el formato de los comentarios o reglas específicas del proyecto.

Eventos Soportados

OpenCode puede reaccionar a una amplia variedad de eventos de GitHub. Cada evento tiene un caso de uso natural:

Comentarios en Issues y PRs

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]

Este es el trigger más común. Cualquier persona puede mencionar /opencode o /oc en un comentario para invocar al agente. El agente lee el contexto completo del issue o PR (título, descripción, comentarios previos, código relacionado) y responde con un comentario o, si la tarea lo requiere, con un commit.

Ejemplo en un issue:

/opencode fix this bug — the login form crashes when email is empty

Ejemplo en un review comment sobre una línea de código:

/oc add error handling here for null values

Issues Abiertos o Editados

on:
  issues:
    types: [opened, edited]

Con este trigger, el agente reacciona automáticamente cuando se crea o edita un issue. Es ideal para auto-triage: el agente puede clasificar el issue, asignar labels, sugerir una solución o incluso implementar el fix si es lo suficientemente simple.

flowchart TD
    A[Issue creado] --> B[OpenCode analiza]
    B --> C{Tipo de issue}
    C -->|Bug| D[Reproduce y sugiere fix]
    C -->|Feature| E[Analiza viabilidad]
    C -->|Question| F[Responde con docs]
    D --> G[Comenta en el issue]
    E --> G
    F --> G

PRs Abiertos o Actualizados

on:
  pull_request:
    types: [opened, synchronize]

El agente puede hacer code review automático de cada PR nuevo o cada push a un PR existente. Analiza los cambios, busca problemas de seguridad, performance y calidad, y deja comentarios con sugerencias.

Tareas Programadas (Cron)

on:
  schedule:
    - cron: '0 9 * * 1'  # Cada lunes a las 9:00 AM

Permite ejecutar tareas recurrentes como:

Activación Manual

on:
  workflow_dispatch:
    inputs:
      task:
        description: 'Tarea a ejecutar'
        required: true

Permite ejecutar el agente manualmente desde la pestaña Actions de GitHub. Es útil para tareas ad-hoc que no encajan en ningún trigger automático.

Permisos Necesarios

El workflow requiere permisos específicos para funcionar correctamente:

permissions:
  id-token: write       # Autenticación con la GitHub App
  contents: write       # Leer y escribir archivos del repo
  pull-requests: write  # Comentar y modificar PRs
  issues: write         # Comentar y modificar issues

Estos permisos son los mínimos necesarios. Si tu caso de uso no requiere que el agente escriba en el repositorio (por ejemplo, solo hace análisis), puedes reducir contents a read. Sin embargo, para la mayoría de casos de uso prácticos, necesitarás permisos de escritura.

Casos de Uso Detallados

Explicar y Triagear Issues

Cuando alguien abre un issue, el agente puede:

  1. Analizar la descripción del problema
  2. Buscar código relacionado en el repositorio
  3. Clasificar el issue (bug, feature, documentation)
  4. Sugerir labels apropiados
  5. Proponer una solución o pedir más información
/opencode explain this issue and suggest a fix

El agente responde con un comentario detallado que incluye su análisis, las causas probables y una propuesta de solución. Si el fix es simple, puede incluso crear un PR con los cambios.

Corregir Bugs Automaticamente

Para bugs reportados con suficiente contexto, el agente puede:

  1. Reproducir el problema analizando el código
  2. Identificar la causa raíz
  3. Implementar el fix
  4. Crear un commit con los cambios
  5. Proponer un PR
/opencode this function throws an error when the array is empty. Fix it and add tests.

El agente analiza la función mencionada, identifica el edge case del array vacío, implementa la validación necesaria, genera tests para el caso y crea un commit con todos los cambios.

Revisar PRs y Hacer Cambios

El agente puede actuar como reviewer automático:

/oc review this PR focusing on security concerns

Analiza todos los archivos modificados en el PR, busca vulnerabilidades de seguridad como inputs sin sanitizar, secretos hardcodeados, inyecciones SQL o XSS potencial, y deja comentarios en las líneas relevantes.

Si le pides que haga cambios, puede pushear commits directamente al branch del PR:

/oc fix the issues found in the review

Revisar Líneas Específicas de Código

En un review comment sobre una línea específica:

/oc add input validation and error handling here

El agente entiende exactamente qué línea estás señalando, analiza el contexto alrededor y propone o implementa los cambios necesarios directamente en esa ubicación.

Configuracion Avanzada

Múltiples Workflows

Puedes tener workflows diferentes para distintos eventos, cada uno con su propio agente y modelo:

# .github/workflows/opencode-review.yml
name: OpenCode Review
on:
  pull_request:
    types: [opened, synchronize]
jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: opencode/action@v1
        with:
          model: "anthropic/claude-sonnet-4-20250514"
          agent: plan
          prompt: "Revisa este PR. Enfócate en seguridad y performance."
# .github/workflows/opencode-triage.yml
name: OpenCode Triage
on:
  issues:
    types: [opened]
jobs:
  triage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: opencode/action@v1
        with:
          model: "anthropic/claude-sonnet-4-20250514"
          agent: plan
          prompt: "Clasifica este issue y sugiere próximos pasos."

Filtrar por Contenido del Comentario

Puedes agregar una condición para que el workflow solo se ejecute cuando el comentario contiene /opencode o /oc:

jobs:
  agent:
    if: contains(github.event.comment.body, '/opencode') || contains(github.event.comment.body, '/oc')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: opencode/action@v1
        with:
          model: "anthropic/claude-sonnet-4-20250514"

Sin este filtro, el workflow se ejecutaría con cada comentario, lo que consumiría minutos de runner innecesariamente.

Seguridad

La integración con GitHub Actions ofrece varias garantías de seguridad:

Integracion con GitLab

OpenCode también soporta integración con GitLab, siguiendo un modelo similar al de GitHub Actions. La configuración es análoga:

  1. Se instala la integración en el proyecto GitLab
  2. Se configura un pipeline CI/CD que ejecuta OpenCode
  3. Se almacenan las API keys como variables CI/CD

Los triggers soportados en GitLab incluyen merge requests, issues y pipelines programados. La experiencia es equivalente: mencionas /opencode en un comentario de MR y el agente responde desde el pipeline de CI/CD.

Si tu equipo usa GitLab en lugar de GitHub, consulta la documentación oficial de OpenCode para los detalles específicos de la configuración de GitLab CI. El concepto es el mismo, solo cambian los nombres de los archivos y la sintaxis del pipeline.

Buenas Practicas


Siguiente: Capitulo 17: LSP y Formatters —>