Przejdź do głównej zawartości

Codex GitHub Action

Każdy pull request w twoim repozytorium jest przeglądany przez człowieka, ale człowiek często wychwytuje te same kategorie problemów: brak obsługi błędów, niespójne nazewnictwo, anty-wzorce bezpieczeństwa. Zanim człowiek w ogóle spojrzy na PR, Codex już go przejrzał, opublikował wnioski jako komentarz, a czasem zaproponował poprawkę. Codex GitHub Action czyni to bezobsługową częścią twojego pipeline’u CI.

  • Kompletny workflow GitHub Actions przeglądający PR-y z Codex i automatycznie publikujący feedback
  • Wzorce konfiguracji dla promptów, sandboxingu i zarządzania uprawnieniami
  • Hartowanie bezpieczeństwa chroniące twój klucz API i ograniczające zasięg Codex na runnerach CI
  • Techniki rozwiązywania problemów z typowymi awariami Action
  • Klucz API OpenAI zapisany jako sekret GitHub (np. OPENAI_API_KEY)
  • Runner Linux lub macOS (Windows wymaga safety-strategy: unsafe)
  • Kod checkoutowany przed wywołaniem action
name: Codex Pull Request Review
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
codex:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
outputs:
final_message: ${{ steps.run_codex.outputs.final-message }}
steps:
- uses: actions/checkout@v5
with:
ref: refs/pull/${{ github.event.pull_request.number }}/merge
- name: Pre-fetch base and head refs
run: |
git fetch --no-tags origin \
${{ github.event.pull_request.base.ref }} \
+refs/pull/${{ github.event.pull_request.number }}/head
- 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
safety-strategy: drop-sudo
sandbox: workspace-write
post_feedback:
runs-on: ubuntu-latest
needs: codex
if: needs.codex.outputs.final_message != ''
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 }}

Zapisz prompt do przeglądu w .github/codex/prompts/review.md:

Review this pull request for:
1. Security vulnerabilities (SQL injection, XSS, auth bypasses)
2. Performance regressions (N+1 queries, missing indexes, unbounded loops)
3. Missing error handling and edge cases
4. Breaking API changes not documented in the changelog
Format findings as a numbered list with severity (Critical, Warning, Info).
Include file paths and line numbers for each finding.
InputOpis
prompt lub prompt-fileTekst inline lub ścieżka do pliku Markdown z instrukcjami
openai-api-keyTwój klucz API OpenAI (z sekretów GitHub)
sandboxread-only, workspace-write lub danger-full-access
safety-strategydrop-sudo (domyślny), unprivileged-user lub unsafe
codex-argsDodatkowe flagi CLI jako tablica JSON lub string shell
modelNadpisanie modelu (pozostaw puste dla domyślnego)
output-fileZapisz końcową wiadomość na dysk jako artefakt

Input safety-strategy to twoja główna kontrola bezpieczeństwa:

  • drop-sudo (domyślny): Nieodwracalnie usuwa sudo przed uruchomieniem Codex. Chroni sekrety w pamięci.
  • unprivileged-user: Uruchamia Codex jako konkretne konto nie-root. Połącz z inputem codex-user.
  • unsafe: Brak ograniczeń uprawnień. Wymagany na Windows. Nigdy nie używaj na współdzielonych runnerach.

Dla kroków downstream potrzebujących ustrukturyzowanych danych, przekaż --output-schema przez codex-args:

- uses: openai/codex-action@v1
with:
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
prompt: "Extract project metadata and list all public API endpoints"
codex-args: '["--output-schema", ".github/codex/schemas/metadata.json"]'
output-file: metadata.json
sandbox: read-only
  • “You set both prompt and prompt-file”: Wybierz jedno. Usuń zduplikowany input.
  • “responses-api-proxy didn’t write server info”: Twój klucz API brakuje lub jest nieprawidłowy. Sprawdź nazwę i wartość sekretu.
  • Błędy uprawnień po drop-sudo: Nadaj uprawnienia zapisu przed uruchomieniem action za pomocą chmod -R g+rwX "$GITHUB_WORKSPACE".
  • Nieautoryzowany trigger zablokowany: Dostosuj inputy allow-users lub allow-bots, żeby zezwolić na konta serwisowe.
  • Oczekiwano usunięcia sudo, ale sudo zadziałało: Upewnij się, że żaden wcześniejszy krok nie przywrócił sudo. Uruchom ponownie z nowym jobem.