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.
Czego się nauczysz
Dział zatytułowany „Czego się nauczysz”- 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
Wymagania wstępne
Dział zatytułowany „Wymagania wstępne”- 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
Kompletny workflow przeglądu PR
Dział zatytułowany „Kompletny workflow przeglądu PR”name: Codex Pull Request Reviewon: 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 cases4. 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.Konfiguracja Action
Dział zatytułowany „Konfiguracja Action”Kluczowe inputy
Dział zatytułowany „Kluczowe inputy”| Input | Opis |
|---|---|
prompt lub prompt-file | Tekst inline lub ścieżka do pliku Markdown z instrukcjami |
openai-api-key | Twój klucz API OpenAI (z sekretów GitHub) |
sandbox | read-only, workspace-write lub danger-full-access |
safety-strategy | drop-sudo (domyślny), unprivileged-user lub unsafe |
codex-args | Dodatkowe flagi CLI jako tablica JSON lub string shell |
model | Nadpisanie modelu (pozostaw puste dla domyślnego) |
output-file | Zapisz końcową wiadomość na dysk jako artefakt |
Zarządzanie uprawnieniami
Dział zatytułowany „Zarządzanie uprawnieniami”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 inputemcodex-user.unsafe: Brak ograniczeń uprawnień. Wymagany na Windows. Nigdy nie używaj na współdzielonych runnerach.
Przechwytywanie strukturalnego outputu
Dział zatytułowany „Przechwytywanie strukturalnego outputu”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-onlyGdy coś nie działa
Dział zatytułowany „Gdy coś nie działa”- “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-usersluballow-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.
Co dalej
Dział zatytułowany „Co dalej”- Tryb nieinteraktywny — Polecenie
codex exec, które napędza tę action - Zarządzanie enterprise — Kontroluj, kto może używać action i z jakimi uprawnieniami
- Zarządzanie kosztami — Przebiechy CI mogą szybko akumulować kredyty; monitoruj i ustaw limity