Capitulo 16: GitHub Actions y CI/CD
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:
ANTHROPIC_API_KEYpara modelos de AnthropicOPENAI_API_KEYpara modelos de OpenAIGOOGLE_API_KEYpara modelos de Google
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ámetro | Requerido | Descripción | Ejemplo |
|---|---|---|---|
model | Sí | Proveedor y modelo a usar | anthropic/claude-sonnet-4-20250514 |
agent | No | Agente a ejecutar | build, plan, code |
share | No | Compartir resultados públicamente | true (default en repos públicos) |
prompt | No | Prompt adicional de sistema | "Responde en español" |
token | No | Token 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:
- Auditoría semanal de dependencias
- Verificación de links rotos en la documentación
- Análisis de código duplicado
- Generación de reportes de salud del proyecto
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:
- Analizar la descripción del problema
- Buscar código relacionado en el repositorio
- Clasificar el issue (bug, feature, documentation)
- Sugerir labels apropiados
- 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:
- Reproducir el problema analizando el código
- Identificar la causa raíz
- Implementar el fix
- Crear un commit con los cambios
- 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:
- Aislamiento: el agente se ejecuta en runners efímeros de GitHub. Cada ejecución tiene un entorno limpio que se destruye al finalizar. No hay persistencia entre ejecuciones.
- Secrets protegidos: las API keys se manejan como secrets de GitHub Actions. Nunca se exponen en logs ni en el código del workflow.
- Permisos granulares: puedes limitar qué eventos disparan el agente y qué permisos tiene. Un agente de review no necesita
contents: write. - Audit trail: toda ejecución queda registrada en el log de GitHub Actions. Puedes revisar qué hizo el agente, qué herramientas usó y qué cambios generó.
- Contexto limitado: el agente solo ve el repositorio y el contexto del evento que lo disparó. No tiene acceso a otros repositorios ni a la máquina del usuario.
- Rate limiting: GitHub Actions tiene límites de ejecución que previenen abusos. Si alguien spamea
/opencodeen comentarios, los workflows se encolan y eventualmente se rechazan.
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:
- Se instala la integración en el proyecto GitLab
- Se configura un pipeline CI/CD que ejecuta OpenCode
- 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
- Empieza con el setup automático:
opencode github installconfigura todo correctamente. Solo usa el setup manual si necesitas personalización. - Filtra por contenido: agrega condiciones
ifpara que el workflow solo se ejecute cuando el comentario contenga/opencodeo/oc. Evita ejecuciones innecesarias. - Usa agentes apropiados:
planpara reviews y análisis (no modifica código),buildpara tareas que requieren ejecutar comandos,codepara generar cambios. - Agrega un prompt de sistema: usa el parámetro
promptpara establecer convenciones del equipo como idioma, formato de comentarios o estándares de código. - Revisa los logs: periódicamente revisa los logs de GitHub Actions para verificar que el agente se comporta como esperas y no genera costos excesivos.
- Limita permisos: si el agente solo hace reviews, usa
contents: readen lugar dewrite. Principio de mínimo privilegio. - Documenta para el equipo: agrega instrucciones en el README o en una guía de contribución explicando cómo invocar al agente y qué puede hacer.
- Monitorea costos: cada ejecución consume tokens del proveedor LLM y minutos de GitHub Actions. Monitorea ambos para evitar sorpresas en la facturación.
Siguiente: Capitulo 17: LSP y Formatters —>