日本語

Codex GitHub Action

GitHub Events から Codex アクションをトリガーします

Codex GitHub Action(openai/codex-action@v1)を使用すると、CI/CD ジョブで Codex を実行したり、パッチを適用したり、GitHub Actions ワークフローからレビューを投稿したりできます。このアクションは Codex CLI をインストールし、API key を指定した場合は Responses API プロキシを起動して、指定した権限のもとで codex exec を実行します。

次のような場合に、このアクションを使用できます。

  • CLI を自分で管理せずに、pull request やリリースに対する Codex のフィードバックを自動化する。
  • CI パイプラインの一部として、Codex を活用した品質チェックを変更のマージ条件にする。
  • ワークフローファイルから、繰り返し実行できる Codex タスク(コードレビュー、リリース準備、マイグレーション)を実行する。

CI の例については、非対話モードを参照し、openai/codex-action リポジトリでソースを確認してください。

前提条件

  • OpenAI key を GitHub secret(例:OPENAI_API_KEY)として保存し、ワークフローから参照します。
  • Linux または macOS の runner でジョブを実行します。Windows の場合は、safety-strategy: unsafe を設定してください。
  • アクションを呼び出す前にコードを checkout し、Codex がリポジトリの内容を読み取れるようにします。
  • 実行する prompt を決めます。prompt でインラインテキストを指定するか、prompt-file でリポジトリに commit されたファイルを指定できます。

ワークフローの例

以下のサンプルワークフローは、新しい pull request をレビューし、Codex の応答を取得して、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 }}

.github/codex/prompts/review.md を独自の prompt ファイルに置き換えるか、インラインテキストには prompt 入力を使用してください。この例では、後から確認したり artifact としてアップロードしたりできるように、Codex の最終メッセージも codex-output.md に書き込みます。

codex exec の設定

codex exec のオプションに対応するアクション入力を設定して、Codex の実行方法を細かく調整できます。

  • prompt または prompt-file(いずれか一方を選択):タスクのインライン指示、または Markdown やテキストが格納されたリポジトリ内のパスです。prompt は .github/codex/prompts/ に保存することを検討してください。
  • codex-args:追加の CLI flag です。JSON array(例:["--ephemeral"])または shell string(--profile ci)を指定して、session、profile、MCP settings を設定できます。
  • modeleffort:使用する Codex agent configuration を選択します。デフォルトを使用する場合は空のままにします。
  • sandbox:sandbox mode(workspace-writeread-onlydanger-full-access)を、実行中に Codex が必要とする権限に合わせます。
  • output-file:Codex の最終メッセージをディスクに保存し、後続の step でアップロードや差分比較ができるようにします。
  • codex-version:特定の CLI release に固定します。公開済みの最新バージョンを使用する場合は空のままにします。
  • codex-home:step 間で configuration file や MCP setup を再利用する場合は、共有 Codex home directory を指定します。

権限の管理

制限しない限り、Codex は GitHub-hosted runner 上で広範なアクセス権を持ちます。次の入力を使用してアクセス範囲を制御してください。

  • safety-strategy(デフォルトは drop-sudo)は、Codex を実行する前に sudo を削除します。この操作はジョブ内では元に戻せず、メモリ内の secret を保護します。Windows では safety-strategy: unsafe を設定する必要があります。
  • unprivileged-user は、safety-strategy: unprivileged-usercodex-user を組み合わせ、Codex を特定の account として実行します。その user が checkout されたリポジトリを読み書きできることを確認してください(所有権を修正する方法については、unprivileged-user の例を参照してください)。
  • read-only は Codex によるファイルの変更や network の使用を防ぎますが、Codex 自体は引き続き昇格された権限で実行されます。secret の保護を read-only だけに依存しないでください。
  • sandbox は Codex 内部での filesystem と network へのアクセスを制限します。タスクを完了できる範囲で最も制限の厳しいオプションを選択してください。
  • allow-usersallow-bots は、ワークフローをトリガーできる user を制限します。デフォルトでは write access を持つ user のみがアクションを実行できます。信頼する追加 account を明示的に列挙するか、デフォルトの動作を使用する場合はフィールドを空のままにしてください。

出力の取得

このアクションは、Codex の最後のメッセージを final-message output として出力します。上記の例のように job output に割り当てるか、後続の step で直接処理してください。runner から完全な transcript を収集したい場合は、output-file と artifact のアップロード機能を組み合わせます。構造化データが必要な場合は、codex-args--output-schema を渡して JSON の形式を強制してください。

セキュリティチェックリスト

  • ワークフローを開始できる user を制限します。誰でもリポジトリに対して Codex を実行できるようにするのではなく、信頼できる event または明示的な承認を使用してください。
  • prompt injection を避けるため、pull request、commit message、issue body から取得した prompt 入力をサニタイズします。Codex に渡す前に、HTML comment や非表示テキストを確認してください。
  • safety-strategydrop-sudo のままにするか、Codex を権限のない user に切り替えて、OPENAI_API_KEY を保護します。multi-tenant runner では、アクションを unsafe mode のままにしないでください。
  • 後続の step が予期しない状態変更を引き継がないように、Codex を job の最後の step として実行します。
  • proxy log やアクションの出力によって secret 情報が漏えいした疑いがある場合は、直ちに key をローテーションしてください。

トラブルシューティング

  • prompt と prompt-file の両方を設定した場合:入力の重複を削除し、source を必ず一つだけ指定してください。
  • responses-api-proxy が server info を書き込まなかった場合:API key が存在し、有効であることを確認してください。proxy は openai-api-key を指定した場合にのみ起動します。
  • sudo が削除されるはずなのに、sudo が成功した場合:それより前の step で sudo が復元されていないこと、および runner OS が Linux または macOS であることを確認してください。新しい job で再実行します。
  • drop-sudo 実行後に permission error が発生した場合:アクションを実行する前に write access を付与してください(例:chmod -R g+rwX "$GITHUB_WORKSPACE" を使用するか、unprivileged-user pattern を使用します)。
  • 許可されていないトリガーがブロックされた場合:デフォルトの write collaborator 以外の service account を許可する必要がある場合は、allow-users または allow-bots の入力を調整してください。