Codex GitHub Action
Codex-Aktionen durch GitHub Events auslösen
Verwenden Sie die Codex GitHub Action (openai/codex-action@v1), um Codex in CI/CD-Jobs auszuführen, Patches anzuwenden oder Reviews aus einem GitHub Actions-Workflow zu veröffentlichen.
Die Action installiert die Codex CLI, startet den Responses API-Proxy, wenn Sie einen API key angeben, und führt codex exec mit den von Ihnen festgelegten Berechtigungen aus.
Verwenden Sie die Action, wenn Sie Folgendes möchten:
- Codex-Feedback zu Pull Requests oder Releases automatisieren, ohne die CLI selbst verwalten zu müssen.
- Änderungen im Rahmen Ihrer CI-Pipeline von Codex-gestützten Qualitätsprüfungen abhängig machen.
- Wiederholbare Codex-Aufgaben (Code-Review, Release-Vorbereitung, Migrationen) über eine Workflow-Datei ausführen.
Ein CI-Beispiel finden Sie unter Nicht interaktiver Modus. Den Quellcode können Sie im Repository openai/codex-action ansehen.
Voraussetzungen
- Speichern Sie Ihren OpenAI-Schlüssel als GitHub-Secret (zum Beispiel
OPENAI_API_KEY) und referenzieren Sie ihn im Workflow. - Führen Sie den Job auf einem Linux- oder macOS-Runner aus. Legen Sie unter Windows
safety-strategy: unsafefest. - Checken Sie Ihren Code aus, bevor Sie die Action aufrufen, damit Codex den Inhalt des Repositorys lesen kann.
- Entscheiden Sie, welche Prompts Sie ausführen möchten. Sie können Inline-Text über
promptbereitstellen oder mitprompt-fileauf eine im Repository eingecheckte Datei verweisen.
Beispiel-Workflow
Der folgende Beispiel-Workflow prüft neue Pull Requests, erfasst die Antwort von Codex und veröffentlicht sie im 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 }}Ersetzen Sie .github/codex/prompts/review.md durch Ihre eigene Prompt-Datei oder verwenden Sie die Eingabe prompt für Inline-Text. Das Beispiel schreibt außerdem die abschließende Codex-Nachricht zur späteren Prüfung oder zum Hochladen als Artefakt in codex-output.md.
codex exec konfigurieren
Stimmen Sie die Ausführung von Codex präzise ab, indem Sie die Action-Eingaben festlegen, die den Optionen von codex exec entsprechen:
promptoderprompt-file(wählen Sie eine Option): Inline-Anweisungen oder ein Repository-Pfad zu einer Markdown- oder Textdatei mit Ihrer Aufgabe. Erwägen Sie, Prompts in.github/codex/prompts/zu speichern.codex-args: Zusätzliche CLI-Flags. Geben Sie ein JSON-Array (zum Beispiel["--ephemeral"]) oder eine Shell-Zeichenfolge (--profile ci) an, um Sitzungen, Profile oder MCP-Einstellungen zu konfigurieren.modelundeffort: Wählen Sie die gewünschte Codex-Agentenkonfiguration aus; lassen Sie die Felder leer, um die Standardwerte zu verwenden.sandbox: Stimmen Sie den Sandbox-Modus (workspace-write,read-only,danger-full-access) auf die Berechtigungen ab, die Codex während der Ausführung benötigt.output-file: Speichern Sie die abschließende Codex-Nachricht auf dem Datenträger, damit nachfolgende Schritte sie hochladen oder mit einer anderen Version vergleichen können.codex-version: Legen Sie eine bestimmte CLI-Version fest. Lassen Sie das Feld leer, um die neueste veröffentlichte Version zu verwenden.codex-home: Verweisen Sie auf ein gemeinsam genutztes Codex-Home-Verzeichnis, wenn Sie Konfigurationsdateien oder MCP-Einrichtungen schrittübergreifend wiederverwenden möchten.
Berechtigungen verwalten
Codex verfügt auf von GitHub gehosteten Runnern über weitreichenden Zugriff, sofern Sie ihn nicht einschränken. Verwenden Sie diese Eingaben, um den Zugriff zu kontrollieren:
safety-strategy(Standardwert:drop-sudo) entferntsudo, bevor Codex ausgeführt wird. Dies kann für den Job nicht rückgängig gemacht werden und schützt Geheimnisse im Arbeitsspeicher. Unter Windows müssen Siesafety-strategy: unsafefestlegen.unprivileged-userkombiniertsafety-strategy: unprivileged-usermitcodex-user, um Codex unter einem bestimmten Konto auszuführen. Stellen Sie sicher, dass der Benutzer den Repository-Checkout lesen und schreiben kann (eine Korrektur der Eigentumsrechte finden Sie im Beispiel fürunprivileged-user).read-onlyverhindert, dass Codex Dateien ändert oder das Netzwerk verwendet; Codex wird dabei jedoch weiterhin mit erhöhten Berechtigungen ausgeführt. Verlassen Sie sich zum Schutz von Geheimnissen nicht allein aufread-only.sandboxbeschränkt den Datei- und Netzwerkzugriff innerhalb von Codex selbst. Wählen Sie die restriktivste Option, mit der die Aufgabe noch abgeschlossen werden kann.allow-usersundallow-botsschränken ein, wer den Workflow auslösen kann. Standardmäßig können nur Benutzer mit Schreibzugriff die Action ausführen. Führen Sie zusätzliche vertrauenswürdige Konten ausdrücklich auf oder lassen Sie das Feld leer, um das Standardverhalten zu verwenden.
Ausgaben erfassen
Die Action gibt die letzte Codex-Nachricht über die Ausgabe final-message aus. Ordnen Sie sie einer Job-Ausgabe zu (wie oben gezeigt) oder verarbeiten Sie sie direkt in späteren Schritten. Kombinieren Sie output-file mit der Funktion zum Hochladen von Artefakten, wenn Sie lieber das vollständige Transkript vom Runner erfassen möchten. Wenn Sie strukturierte Daten benötigen, übergeben Sie --output-schema über codex-args, um eine JSON-Struktur vorzugeben.
Sicherheitscheckliste
- Beschränken Sie, wer den Workflow starten kann. Bevorzugen Sie vertrauenswürdige Ereignisse oder ausdrückliche Genehmigungen, statt allen die Ausführung von Codex für Ihr Repository zu erlauben.
- Bereinigen Sie Prompt-Eingaben aus Pull Requests, Commit-Nachrichten oder Issue-Beschreibungen, um Prompt-Injection zu verhindern. Prüfen Sie HTML-Kommentare oder verborgenen Text, bevor Sie die Inhalte an Codex übergeben.
- Schützen Sie Ihr
OPENAI_API_KEY, indem Siesafety-strategyaufdrop-sudobelassen oder Codex unter einem Benutzer ohne besondere Berechtigungen ausführen. Belassen Sie die Action auf mandantenfähigen Runnern niemals im Modusunsafe. - Führen Sie Codex als letzten Schritt eines Jobs aus, damit spätere Schritte keine unerwarteten Zustandsänderungen übernehmen.
- Rotieren Sie Schlüssel unverzüglich, wenn Sie vermuten, dass Proxy-Protokolle oder die Action-Ausgabe geheime Daten offengelegt haben.
Fehlerbehebung
- Sie haben sowohl prompt als auch prompt-file festgelegt: Entfernen Sie die doppelte Eingabe, sodass Sie genau eine Quelle angeben.
- responses-api-proxy hat keine Serverinformationen geschrieben: Vergewissern Sie sich, dass der API key vorhanden und gültig ist; der Proxy startet nur, wenn Sie
openai-api-keyangeben. - Entfernung von
sudoerwartet, abersudowar erfolgreich: Stellen Sie sicher, dass kein früherer Schrittsudowiederhergestellt hat und dass als Runner-Betriebssystem Linux oder macOS verwendet wird. Führen Sie den Workflow mit einem neuen Job erneut aus. - Berechtigungsfehler nach
drop-sudo: Gewähren Sie Schreibzugriff, bevor die Action ausgeführt wird (zum Beispiel mitchmod -R g+rwX "$GITHUB_WORKSPACE"oder mithilfe des Musters für Benutzer ohne besondere Berechtigungen). - Nicht autorisierter Auslöser blockiert: Passen Sie die Eingaben
allow-usersoderallow-botsan, wenn Sie neben den standardmäßig zugelassenen Mitwirkenden mit Schreibzugriff auch Dienstkonten zulassen müssen.