CI/CD z Codex GitHub Action
Twój pipeline CI uruchamia lint, type-check i testy. To łapie błędy składniowe i regresje. Ale nie łapie dryfu architektonicznego, problemów bezpieczeństwa w nowym kodzie ani faktu, że ktoś właśnie dodał 500-liniową funkcję bez żadnej dokumentacji. Chcesz, aby kontrole jakości wspomagane AI działały na każdym PR, automatycznie, bez konieczności instalowania dodatkowych narzędzi przez kogokolwiek. Codex GitHub Action (openai/codex-action@v1) daje ci dokładnie to — Codex w CI, z tymi samymi możliwościami, które ma wszędzie indziej.
Czego się nauczysz
Dział zatytułowany „Czego się nauczysz”- Działający workflow GitHub Actions uruchamiający Codex na każdym PR
- Pliki promptów do przeglądu kodu, skanowania bezpieczeństwa i przygotowania wydań
- Konfigurację bezpieczeństwa do bezpiecznego uruchamiania Codex w CI (drop-sudo, sandboxing)
- Techniki przechwytywania i publikowania wyników Codex z powrotem na PR
Przepływ pracy
Dział zatytułowany „Przepływ pracy”Krok 1: Skonfiguruj podstawową akcję
Dział zatytułowany „Krok 1: Skonfiguruj podstawową akcję”Minimalna integracja Codex z CI wymaga około dziesięciu linii YAML workflow. Zapisz klucz API OpenAI jako sekret GitHub, pobierz kod i uruchom akcję.
Krok 2: Napisz pliki promptów
Dział zatytułowany „Krok 2: Napisz pliki promptów”Przechowuj prompty Codex w .github/codex/prompts/, aby były wersjonowane i przeglądalne. Plik promptu jest w Markdown — Codex czyta go jako instrukcje.
Utwórz .github/codex/prompts/review.md:
Review this pull request. Focus on:
1. Correctness: Logic errors, off-by-one bugs, unhandled edge cases2. Security: Input validation, auth checks, data exposure3. Performance: N+1 queries, unnecessary computation, missing indexes4. Maintainability: Overly complex functions, missing error handling, unclear naming
Rules:- Flag only P0 (must fix before merge) and P1 (should fix before merge) issues- Include the file path and line number for each finding- Suggest a specific fix, not just "this could be better"- If the PR is clean, say so explicitly
Do not flag:- Style preferences (formatting, naming conventions) unless they violate project standards- Test file structure choices- Comment content or documentation styleKrok 3: Dodaj skanowanie bezpieczeństwa do CI
Dział zatytułowany „Krok 3: Dodaj skanowanie bezpieczeństwa do CI”Utwórz osobny workflow, który uruchamia analizę bezpieczeństwa na PR dotykających wrażliwych ścieżek:
name: Security scanon: pull_request: paths: - 'src/routes/**' - 'src/middleware/**' - 'src/lib/db/**' - 'package.json' - 'package-lock.json'
jobs: security: runs-on: ubuntu-latest permissions: contents: read pull-requests: write steps: - uses: actions/checkout@v5
- name: Security scan uses: openai/codex-action@v1 with: openai-api-key: ${{ secrets.OPENAI_API_KEY }} prompt-file: .github/codex/prompts/security.md sandbox: read-only safety-strategy: drop-sudo output-file: security-report.md
- name: Upload security report uses: actions/upload-artifact@v4 with: name: security-report path: security-report.mdZ .github/codex/prompts/security.md:
Perform a security audit of the changes in this pull request:
1. Scan for SQL injection, XSS, command injection, and path traversal2. Verify all new endpoints have authentication middleware3. Check that error responses do not expose internal details4. Flag any new dependencies with known CVEs (check npm audit)5. Verify secrets are not committed in any file
Report only security findings. Format as a severity-sorted list.Krok 4: Automatyzuj przygotowanie wydań
Dział zatytułowany „Krok 4: Automatyzuj przygotowanie wydań”Użyj Codex w CI do przygotowania notatek wydania, gdy zmiany są scalane do main:
Krok 5: Skonfiguruj bezpieczeństwo i uprawnienia
Dział zatytułowany „Krok 5: Skonfiguruj bezpieczeństwo i uprawnienia”Codex GitHub Action działa z uprawnieniami, które przyznaje twój workflow. Stosuj zasadę minimalnych uprawnień.
Strategie bezpieczeństwa:
drop-sudo(domyślna, zalecana) — usuwa dostęp sudo przed uruchomieniem Codex. Nieodwracalne w ramach zadania.unprivileged-user— uruchamia Codex jako użytkownik bez uprawnień root. Najbardziej restrykcyjne.unsafe— brak ograniczeń. Tylko dla runnerów Windows. Nigdy nie używaj na współdzielonych runnerach z sekretami.
Tryby sandboxa:
read-only— Codex może czytać pliki, ale nie może ich modyfikować ani uzyskiwać dostępu do sieci. Najlepsze do przeglądów.workspace-write— Codex może edytować pliki w repozytorium. Potrzebne do przepływów napraw i commitów.danger-full-access— Pełny dostęp do systemu plików i sieci. Używaj tylko gdy absolutnie konieczne (na przykład uruchamianie testów wymagających dostępu do sieci).
Ograniczanie wyzwalaczy:
- Użyj
allow-users, aby ograniczyć, kto może wyzwalać workflow - Użyj
allow-bots, aby kontrolować, które boty mogą go wywoływać - Filtruj po ścieżkach plików, aby uniknąć uruchamiania na nieistotnych zmianach
Zaawansowane: Strukturalne wyjście i zbieranie artefaktów
Dział zatytułowany „Zaawansowane: Strukturalne wyjście i zbieranie artefaktów”Dla przepływów pracy wymagających strukturalnych wyników (nie tylko komentarza), użyj --output-schema przez wejście codex-args, aby wymusić kształt odpowiedzi JSON:
- uses: openai/codex-action@v1 with: openai-api-key: ${{ secrets.OPENAI_API_KEY }} prompt: "Analyze this PR and categorize each finding by type and severity." codex-args: '["--output-schema", "{\"findings\": [{\"type\": \"string\", \"severity\": \"string\", \"file\": \"string\", \"line\": \"number\", \"description\": \"string\"}]}"]' sandbox: read-only output-file: findings.jsonTo pozwala kolejnym krokom parsować ustalenia programowo — na przykład, aby tworzyć adnotacje GitHub check lub nie przechodzić builda tylko gdy istnieją ustalenia o statusie Critical.
Połącz output-file z uploadem artefaktów, aby zachować pełne transkrypty do celów audytu:
- name: Upload Codex transcript if: always() uses: actions/upload-artifact@v4 with: name: codex-review-transcript path: codex-output.md retention-days: 30Łączenie CI i lokalnych automatyzacji
Dział zatytułowany „Łączenie CI i lokalnych automatyzacji”GitHub Action działa po stronie serwera na infrastrukturze GitHub. Automatyzacje aplikacji Codex działają lokalnie na twojej maszynie. Te się wzajemnie uzupełniają:
- GitHub Action: działa na każdym PR, łapie problemy przed scaleniem, widoczne dla całego zespołu
- Lokalne automatyzacje: działają według harmonogramu (codziennie, cotygodniowo), wyłapują dryf w głównej gałęzi, trafiają do twojej osobistej skrzynki
Solidna konfiguracja używa obu: GitHub Action przegląda przychodzące zmiany, a lokalne automatyzacje monitorują zdrowie bazy kodu między PR. GitHub Action zapewnia jakość na wejściu; automatyzacje zapewniają, że jakość nie degraduje się z czasem.
Kiedy to nie działa
Dział zatytułowany „Kiedy to nie działa”Przegląd Codex trwa zbyt długo i blokuje scalanie PR. Ustaw timeout na zadaniu workflow i uczyń przegląd nieblokującym: zmień workflow, aby działał jako osobny check, który nie jest wymagany do przejścia. Zespoły powinny traktować przegląd Codex jako doradczy, a nie bramkę, dopóki nie zaufają dokładności.
Oba prompt i prompt-file są ustawione. Akcja wymaga dokładnie jednego źródła promptu. Usuń duplikat. Preferuj prompt-file dla wersjonowanych promptów i prompt dla jednorazowych instrukcji inline.
Klucz API jest widoczny w logach. Akcja używa proxy Responses API, które nie powinno logować klucza, ale jeśli safety-strategy jest unsafe i wcześniejszy krok zapisał klucz w zmiennej środowiskowej, może wyciec. Zawsze używaj drop-sudo i sprawdź, że żaden krok nie wypisuje OPENAI_API_KEY.
Codex publikuje przegląd przy każdym pushu, tworząc szum. Jeśli wiele commitów jest pushowanych szybko (rebase, fixup), dostajesz wiele komentarzy przeglądu. Dodaj grupę współbieżności, aby anulować trwające uruchomienia:
concurrency: group: codex-review-${{ github.event.pull_request.number }} cancel-in-progress: true