For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegación principal
Theme

GitHub Action de Codex

Ejecuta acciones de Codex a partir de eventos de GitHub

Usa la 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 la CLI de Codex, inicia el proxy de la API Responses si proporcionas una clave de API y ejecuta codex exec con los permisos que especifiques.

Usa la acción cuando quieras:

  • Automatizar los comentarios de Codex sobre pull requests o lanzamientos sin tener que administrar la CLI.
  • Exigir que los cambios pasen las comprobaciones de calidad de Codex como parte de tu pipeline de CI.
  • Ejecutar tareas repetibles de Codex (revisión de código, preparación de lanzamientos, migraciones) desde un archivo de flujo de trabajo.

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

Requisitos previos

  • Guarda tu clave de OpenAI como secreto de GitHub (por ejemplo, OPENAI_API_KEY) y haz referencia a ese secreto en el flujo de trabajo.
  • Ejecuta el trabajo en un runner de Linux o macOS. Para Windows, configura safety-strategy: unsafe.
  • Descarga una copia de tu código antes de invocar la acción para que Codex pueda leer el contenido del repositorio.
  • Decide qué prompts quieres ejecutar. Puedes proporcionar el texto directamente con prompt o usar prompt-file para indicar la ruta de un archivo incluido en un commit del repositorio.

Ejemplo de flujo de trabajo

El siguiente flujo de trabajo revisa los nuevos pull requests, captura la respuesta de Codex y la publica como comentario en el PR correspondiente.

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 }}

Reemplaza .github/codex/prompts/review.md por la ruta de tu propio archivo de prompt o usa la entrada prompt para proporcionar el texto directamente. El ejemplo también guarda el mensaje final de Codex en codex-output.md para que puedas revisarlo más adelante o subirlo como artefacto.

Configurar codex exec

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

  • prompt o prompt-file (elige una): proporciona las instrucciones directamente o indica la ruta de un archivo Markdown o de texto del repositorio que describa la tarea. Considera guardar los prompts en .github/codex/prompts/.
  • codex-args: acepta opciones adicionales de la CLI. Proporciona un arreglo JSON (por ejemplo, ["--ephemeral"]) o una cadena de shell (--profile ci) para configurar sesiones, perfiles o ajustes de MCP.
  • model y effort: elige la configuración del agente de Codex. Deja estas entradas vacías para usar los valores predeterminados.
  • sandbox: elige el modo de sandbox (workspace-write, read-only, danger-full-access) según los permisos que necesite Codex durante la ejecución.
  • output-file: guarda el mensaje final de Codex en disco para que los pasos posteriores puedan subirlo o compararlo con otra versión.
  • codex-version: fija una versión específica de la CLI. Deja esta entrada vacía para usar la última versión publicada.
  • codex-home: indica la ruta de un directorio de inicio compartido de Codex si quieres reutilizar archivos de configuración o configuraciones de MCP entre pasos.

Administrar privilegios

Codex tiene permisos amplios en los runners alojados por GitHub, a menos que los restrinjas. Usa estas entradas para controlar el acceso:

  • safety-strategy (valor predeterminado: drop-sudo) elimina sudo antes de ejecutar Codex. El cambio es irreversible durante ese trabajo y protege los secretos en memoria. En Windows debes configurar safety-strategy: unsafe.
  • unprivileged-user: combina safety-strategy: unprivileged-user con codex-user para ejecutar Codex con una cuenta específica. Asegúrate de que el usuario tenga acceso de lectura y escritura a la copia local del repositorio (consulta el ejemplo de unprivileged-user para ver cómo cambiar el propietario de los archivos).
  • read-only impide que Codex modifique archivos o use la red, pero Codex 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 desde el propio Codex. Elige la opción más restrictiva que permita completar la tarea.
  • allow-users y allow-bots restringen quién puede iniciar el flujo de trabajo. De forma predeterminada, solo los usuarios con acceso de escritura pueden ejecutar la acción. Indica explícitamente las cuentas de confianza adicionales o deja el campo vacío para mantener el comportamiento predeterminado.

Capturar las salidas

La acción devuelve el último mensaje de Codex mediante la salida final-message. Asígnala a una salida del trabajo (como en el ejemplo anterior) o úsala directamente en pasos posteriores. Si prefieres obtener la transcripción completa del runner, combina output-file con la función de carga de artefactos. Cuando necesites datos estructurados, pasa --output-schema mediante codex-args para exigir que la salida tenga una estructura JSON específica.

Lista de verificación de seguridad

  • Limita quién puede iniciar el flujo de trabajo. Prioriza los eventos de confianza o las aprobaciones explícitas en lugar de permitir que cualquiera ejecute Codex en tu repositorio.
  • Filtra el contenido de los pull requests, los mensajes de commit o las descripciones de los issues que uses como entrada del prompt para evitar la inyección de prompts. Revisa los comentarios HTML o el texto oculto antes de enviarlos a Codex.
  • Protege tu OPENAI_API_KEY manteniendo safety-strategy en drop-sudo o ejecutando Codex con un usuario sin privilegios. Nunca dejes la acción en modo unsafe en runners compartidos entre varios clientes.
  • Ejecuta Codex como último paso del trabajo para que ningún paso posterior herede cambios de estado inesperados.
  • Rota las claves de inmediato si sospechas que los registros del proxy o la salida de la acción expusieron algún secreto.

Solución de problemas

  • Configuraste tanto prompt como prompt-file: elimina una de las entradas para proporcionar una sola fuente.
  • responses-api-proxy no escribió la información del servidor: confirma que la clave de API esté presente y sea válida. El proxy solo se inicia cuando proporcionas openai-api-key.
  • Se esperaba que se eliminara sudo, pero sudo se ejecutó correctamente: verifica que ningún paso anterior haya restaurado sudo y que el sistema operativo del runner sea Linux o macOS. Vuelve a ejecutar la acción en un trabajo nuevo.
  • Errores de permisos después de drop-sudo: concede acceso de escritura antes de que se ejecute la acción (por ejemplo, con chmod -R g+rwX "$GITHUB_WORKSPACE" o siguiendo el ejemplo de unprivileged-user).
  • Se bloqueó un intento de ejecución no autorizado: ajusta las entradas allow-users o allow-bots si necesitas autorizar cuentas de servicio además de los colaboradores con acceso de escritura que ya pueden ejecutar la acción de forma predeterminada.