Español

GitHub Action de Codex

Activa acciones de Codex desde eventos de GitHub

Usa GitHub Action de Codex (openai/codex-action@v1) para ejecutar Codex en trabajos de CI/CD, aplicar parches o publicar revisiones desde un flujo de trabajo de GitHub Actions. La acción instala Codex CLI, inicia el proxy de Responses API cuando proporcionas una API key y ejecuta codex exec con los permisos que especifiques.

Usa la acción cuando quieras:

  • Automatizar los comentarios de Codex sobre solicitudes de incorporación de cambios o versiones sin tener que gestionar el CLI por tu cuenta.
  • Condicionar los cambios a comprobaciones de calidad realizadas por Codex como parte de tu canalización de CI.
  • Ejecutar tareas repetibles de Codex (revisión de código, preparación de versiones, migraciones) desde un archivo de flujo de trabajo.

Para ver un ejemplo de CI, consulta el Modo no interactivo y explora el código fuente en el repositorio openai/codex-action.

Requisitos previos

  • Almacena tu clave de OpenAI como un secreto de GitHub (por ejemplo, OPENAI_API_KEY) y haz referencia a ella en el flujo de trabajo.
  • Ejecuta el trabajo en un ejecutor de Linux o macOS. En Windows, establece safety-strategy: unsafe.
  • Obtén una copia de tu código antes de invocar la acción para que Codex pueda leer el contenido del repositorio.
  • Decide qué instrucciones quieres ejecutar. Puedes proporcionar texto en línea mediante prompt o indicar un archivo confirmado en el repositorio con prompt-file.

Flujo de trabajo de ejemplo

El flujo de trabajo de ejemplo que aparece a continuación revisa las nuevas solicitudes de incorporación de cambios, captura la respuesta de Codex y la publica en la solicitud.

name: Codex pull request review
on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  codex:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    outputs:
      final_message: ${{ steps.run_codex.outputs.final-message }}
    steps:
      - uses: actions/checkout@v5
        with:
          ref: refs/pull/${{ github.event.pull_request.number }}/merge
          fetch-depth: 0
          persist-credentials: false

      - name: Run Codex
        id: run_codex
        uses: openai/codex-action@v1
        with:
          openai-api-key: ${{ secrets.OPENAI_API_KEY }}
          prompt-file: .github/codex/prompts/review.md
          output-file: codex-output.md

  post_feedback:
    runs-on: ubuntu-latest
    needs: codex
    if: needs.codex.outputs.final_message != ''
    permissions:
      issues: write
      pull-requests: write
    steps:
      - name: Post Codex feedback
        uses: actions/github-script@v7
        with:
          github-token: ${{ github.token }}
          script: |
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.payload.pull_request.number,
              body: process.env.CODEX_FINAL_MESSAGE,
            });
        env:
          CODEX_FINAL_MESSAGE: ${{ needs.codex.outputs.final_message }}

Sustituye .github/codex/prompts/review.md por tu propio archivo de instrucciones o usa la entrada prompt para proporcionar texto en línea. El ejemplo también escribe el mensaje final de Codex en codex-output.md para poder inspeccionarlo posteriormente o cargarlo como artefacto.

Configurar codex exec

Ajusta la ejecución de Codex mediante las entradas de la acción que se corresponden con las opciones de codex exec:

  • prompt o prompt-file (elige una): instrucciones en línea o una ruta del repositorio a un archivo Markdown o de texto con tu tarea. Considera almacenar las instrucciones en .github/codex/prompts/.
  • codex-args: opciones adicionales del CLI. Proporciona una matriz JSON (por ejemplo, ["--ephemeral"]) o una cadena de shell (--profile ci) para configurar sesiones, perfiles o ajustes de MCP.
  • model y effort: selecciona la configuración del agente de Codex que quieras; déjalas vacías para usar los valores predeterminados.
  • sandbox: adapta el modo de entorno aislado (workspace-write, read-only, danger-full-access) a los permisos que Codex necesite durante la ejecución.
  • output-file: guarda el mensaje final de Codex en el disco para que los pasos posteriores puedan cargarlo o compararlo.
  • codex-version: fija una versión específica del CLI. Déjala en blanco para usar la última versión publicada.
  • codex-home: indica un directorio principal compartido de Codex si quieres reutilizar archivos de configuración o ajustes de MCP entre pasos.

Gestionar privilegios

Codex tiene acceso amplio en los ejecutores alojados por GitHub, a menos que lo restrinjas. Usa estas entradas para controlar la exposición:

  • safety-strategy (valor predeterminado: drop-sudo) elimina sudo antes de ejecutar Codex. Esta operación es irreversible durante el trabajo y protege los secretos en la memoria. En Windows, debes establecer safety-strategy: unsafe.
  • unprivileged-user combina safety-strategy: unprivileged-user con codex-user para ejecutar Codex como una cuenta específica. Asegúrate de que el usuario pueda leer y escribir en la copia de trabajo del repositorio (consulta el ejemplo de unprivileged-user para corregir la propiedad).
  • read-only impide que Codex modifique archivos o use la red, pero sigue ejecutándose con privilegios elevados. No dependas únicamente de read-only para proteger los secretos.
  • sandbox limita el acceso al sistema de archivos y a la red dentro del propio Codex. Elige la opción más restrictiva que permita completar la tarea.
  • allow-users y allow-bots restringen quién puede activar el flujo de trabajo. De forma predeterminada, solo los usuarios con acceso de escritura pueden ejecutar la acción; incluye explícitamente otras cuentas de confianza o deja el campo vacío para mantener el comportamiento predeterminado.

Capturar resultados

La acción emite el último mensaje de Codex mediante la salida final-message. Asígnala a una salida del trabajo (como se muestra arriba) o procésala directamente en pasos posteriores. Combina output-file con la función de carga de artefactos si prefieres recopilar la transcripción completa del ejecutor. Cuando necesites datos estructurados, pasa --output-schema mediante codex-args para imponer una estructura JSON.

Lista de comprobación de seguridad

  • Limita quién puede iniciar el flujo de trabajo. Da preferencia a eventos de confianza o aprobaciones explícitas en lugar de permitir que cualquiera ejecute Codex en tu repositorio.
  • Sanea las entradas de instrucciones procedentes de solicitudes de incorporación de cambios, mensajes de confirmación o cuerpos de incidencias para evitar la inyección de instrucciones. Revisa los comentarios HTML o el texto oculto antes de proporcionárselos a Codex.
  • Protege tu OPENAI_API_KEY manteniendo safety-strategy en drop-sudo o trasladando Codex a un usuario sin privilegios. Nunca dejes la acción en modo unsafe en ejecutores multiusuario.
  • Ejecuta Codex como último paso de un trabajo para que los pasos posteriores no hereden cambios de estado inesperados.
  • Rota las claves inmediatamente si sospechas que los registros del proxy o la salida de la acción han expuesto material secreto.

Solución de problemas

  • Has establecido tanto prompt como prompt-file: elimina la entrada duplicada para proporcionar exactamente una fuente.
  • responses-api-proxy no escribió la información del servidor: confirma que la API key está presente y es válida; el proxy solo se inicia cuando proporcionas openai-api-key.
  • Se esperaba que se eliminara sudo, pero sudo se ejecutó correctamente: asegúrate de que ningún paso anterior haya restaurado sudo y de que el sistema operativo del ejecutor sea Linux o macOS. Vuelve a ejecutar el flujo con un trabajo nuevo.
  • Errores de permisos después de drop-sudo: concede acceso de escritura antes de ejecutar la acción (por ejemplo, con chmod -R g+rwX "$GITHUB_WORKSPACE" o mediante el patrón de usuario sin privilegios).
  • Activación no autorizada bloqueada: ajusta las entradas allow-users o allow-bots si necesitas permitir cuentas de servicio además de los colaboradores con acceso de escritura predeterminados.