Codex GitHub Action
Acione ações do Codex a partir de eventos do GitHub
Utilize a Codex GitHub Action (openai/codex-action@v1) para executar o Codex em tarefas de CI/CD, aplicar patches ou publicar revisões a partir de um fluxo de trabalho do GitHub Actions.
A ação instala a Codex CLI, inicia o proxy da Responses API quando fornece uma API key e executa codex exec com as permissões especificadas.
Utilize a ação quando pretender:
- Automatizar os comentários do Codex sobre pull requests ou versões sem ter de gerir a CLI.
- Condicionar as alterações a verificações de qualidade orientadas pelo Codex como parte do seu pipeline de CI.
- Executar tarefas repetíveis do Codex (revisão de código, preparação de versões, migrações) a partir de um ficheiro de fluxo de trabalho.
Para consultar um exemplo de CI, veja o Modo não interativo e explore o código-fonte no repositório openai/codex-action.
Pré-requisitos
- Guarde a sua chave da OpenAI como um segredo do GitHub (por exemplo,
OPENAI_API_KEY) e referencie-a no fluxo de trabalho. - Execute a tarefa num runner Linux ou macOS. No Windows, defina
safety-strategy: unsafe. - Faça checkout do código antes de invocar a ação, para que o Codex possa ler o conteúdo do repositório.
- Decida que prompts pretende executar. Pode fornecer texto diretamente através de
promptou indicar um ficheiro submetido no repositório comprompt-file.
Exemplo de fluxo de trabalho
O fluxo de trabalho de exemplo abaixo revê novos pull requests, captura a resposta do Codex e publica-a novamente no PR.
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 }}Substitua .github/codex/prompts/review.md pelo seu próprio ficheiro de prompt ou utilize a entrada prompt para fornecer texto diretamente. O exemplo também grava a mensagem final do Codex em codex-output.md para inspeção posterior ou carregamento como artefacto.
Configurar codex exec
Ajuste a execução do Codex definindo as entradas da ação que correspondem às opções de codex exec:
promptouprompt-file(escolha uma): instruções diretas ou um caminho do repositório para um ficheiro Markdown ou de texto com a sua tarefa. Considere guardar os prompts em.github/codex/prompts/.codex-args: parâmetros adicionais da CLI. Forneça uma matriz JSON (por exemplo,["--ephemeral"]) ou uma cadeia de shell (--profile ci) para configurar sessões, perfis ou definições de MCP.modeleeffort: escolha a configuração do agente Codex pretendida; deixe em branco para utilizar os valores predefinidos.sandbox: ajuste o modo de sandbox (workspace-write,read-only,danger-full-access) às permissões de que o Codex necessita durante a execução.output-file: guarde a mensagem final do Codex no disco, para que os passos posteriores possam carregá-la ou compará-la.codex-version: fixe uma versão específica da CLI. Deixe em branco para utilizar a versão publicada mais recente.codex-home: indique um diretório inicial partilhado do Codex caso pretenda reutilizar ficheiros de configuração ou configurações de MCP entre passos.
Gerir privilégios
O Codex dispõe de acesso abrangente em runners alojados no GitHub, a menos que o restrinja. Utilize estas entradas para controlar a exposição:
safety-strategy(predefinição:drop-sudo) removesudoantes de executar o Codex. Esta operação é irreversível durante a tarefa e protege os segredos em memória. No Windows, tem de definirsafety-strategy: unsafe.unprivileged-userassociasafety-strategy: unprivileged-useracodex-userpara executar o Codex com uma conta específica. Certifique-se de que o utilizador pode ler e escrever no checkout do repositório (consulte o exemplo deunprivileged-userpara corrigir a propriedade).read-onlyimpede o Codex de alterar ficheiros ou utilizar a rede, mas este continua a ser executado com privilégios elevados. Não confie apenas emread-onlypara proteger segredos.sandboxlimita o acesso ao sistema de ficheiros e à rede no próprio Codex. Escolha a opção mais restrita que ainda permita concluir a tarefa.allow-userseallow-botsrestringem quem pode acionar o fluxo de trabalho. Por predefinição, apenas os utilizadores com acesso de escrita podem executar a ação; indique explicitamente outras contas fidedignas ou deixe o campo vazio para manter o comportamento predefinido.
Capturar resultados
A ação disponibiliza a última mensagem do Codex através da saída final-message. Associe-a a uma saída da tarefa (como mostrado acima) ou processe-a diretamente em passos posteriores. Combine output-file com a funcionalidade de carregamento de artefactos se preferir recolher a transcrição completa do runner. Quando necessitar de dados estruturados, transmita --output-schema através de codex-args para impor uma estrutura JSON.
Lista de verificação de segurança
- Limite quem pode iniciar o fluxo de trabalho. Dê preferência a eventos fidedignos ou aprovações explícitas, em vez de permitir que qualquer pessoa execute o Codex no seu repositório.
- Sanitize as entradas de prompts provenientes de pull requests, mensagens de commit ou conteúdos de problemas para evitar a injeção de prompts. Reveja comentários HTML ou texto oculto antes de os fornecer ao Codex.
- Proteja o seu
OPENAI_API_KEYmantendosafety-strategyemdrop-sudoou transferindo o Codex para um utilizador sem privilégios. Nunca deixe a ação no modounsafeem runners multi-inquilino. - Execute o Codex como último passo de uma tarefa, para que os passos posteriores não herdem alterações de estado inesperadas.
- Substitua imediatamente as chaves se suspeitar que os registos do proxy ou a saída da ação expuseram material secreto.
Resolução de problemas
- Definiu simultaneamente o prompt e o ficheiro de prompt: remova a entrada duplicada para fornecer exatamente uma origem.
- O responses-api-proxy não gravou as informações do servidor: confirme que a API key está presente e é válida; o proxy só é iniciado quando fornece
openai-api-key. - Esperava que
sudofosse removido, massudofoi concluído com êxito: certifique-se de que nenhum passo anterior restaurousudoe de que o sistema operativo do runner é Linux ou macOS. Volte a executar com uma nova tarefa. - Erros de permissão após
drop-sudo: conceda acesso de escrita antes de a ação ser executada (por exemplo, comchmod -R g+rwX "$GITHUB_WORKSPACE"ou utilizando o padrão de utilizador sem privilégios). - Acionamento não autorizado bloqueado: ajuste as entradas
allow-usersouallow-botsse necessitar de permitir contas de serviço para além dos colaboradores com acesso de escrita predefinidos.