Codex GitHub Action
Kích hoạt các hành động Codex từ GitHub Events
Sử dụng Codex GitHub Action (openai/codex-action@v1) để chạy Codex trong các tác vụ CI/CD, áp dụng bản vá hoặc đăng bài đánh giá từ một quy trình GitHub Actions.
Action này cài đặt Codex CLI, khởi động proxy Responses API khi bạn cung cấp API key và chạy codex exec với các quyền bạn chỉ định.
Hãy dùng action này khi bạn muốn:
- Tự động hóa phản hồi của Codex đối với pull request hoặc bản phát hành mà không phải tự quản lý CLI.
- Chỉ cho phép thay đổi vượt qua khi đạt các bước kiểm tra chất lượng do Codex thực hiện trong quy trình CI.
- Chạy các tác vụ Codex có thể lặp lại (đánh giá mã, chuẩn bị phát hành, di chuyển dữ liệu) từ một tệp quy trình.
Để xem ví dụ về CI, hãy đọc Chế độ không tương tác và khám phá mã nguồn trong kho lưu trữ openai/codex-action.
Điều kiện tiên quyết
- Lưu khóa OpenAI của bạn dưới dạng bí mật GitHub (ví dụ:
OPENAI_API_KEY) và tham chiếu khóa đó trong quy trình. - Chạy tác vụ trên runner Linux hoặc macOS. Đối với Windows, hãy đặt
safety-strategy: unsafe. - Checkout mã của bạn trước khi gọi action để Codex có thể đọc nội dung kho lưu trữ.
- Xác định các lời nhắc bạn muốn chạy. Bạn có thể cung cấp văn bản trực tiếp qua
prompthoặc trỏ đến một tệp đã commit trong kho lưu trữ bằngprompt-file.
Quy trình mẫu
Quy trình mẫu dưới đây đánh giá các pull request mới, thu thập phản hồi của Codex và đăng lại phản hồi đó lên 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 }}Thay .github/codex/prompts/review.md bằng tệp lời nhắc của riêng bạn hoặc dùng đầu vào prompt cho văn bản trực tiếp. Ví dụ cũng ghi thông điệp Codex cuối cùng vào codex-output.md để kiểm tra sau hoặc tải lên dưới dạng sản phẩm.
Cấu hình codex exec
Tinh chỉnh cách Codex chạy bằng cách đặt các đầu vào của action tương ứng với những tùy chọn codex exec:
prompthoặcprompt-file(chọn một): Hướng dẫn trực tiếp hoặc đường dẫn trong kho lưu trữ tới tệp Markdown hay văn bản chứa tác vụ của bạn. Hãy cân nhắc lưu lời nhắc trong.github/codex/prompts/.codex-args: Các cờ CLI bổ sung. Cung cấp một mảng JSON (ví dụ:["--ephemeral"]) hoặc chuỗi shell (--profile ci) để cấu hình phiên, hồ sơ hoặc thiết lập MCP.modelvàeffort: Chọn cấu hình tác nhân Codex bạn muốn; để trống để dùng giá trị mặc định.sandbox: Chọn chế độ sandbox (workspace-write,read-only,danger-full-access) phù hợp với các quyền Codex cần trong lượt chạy.output-file: Lưu thông điệp Codex cuối cùng vào đĩa để các bước sau có thể tải lên hoặc so sánh.codex-version: Ghim một bản phát hành CLI cụ thể. Để trống để dùng phiên bản mới nhất đã phát hành.codex-home: Trỏ đến thư mục chính Codex dùng chung nếu bạn muốn tái sử dụng tệp cấu hình hoặc thiết lập MCP qua nhiều bước.
Quản lý đặc quyền
Codex có quyền truy cập rộng trên các runner do GitHub lưu trữ, trừ khi bạn hạn chế quyền đó. Dùng các đầu vào sau để kiểm soát mức độ tiếp xúc:
safety-strategy(mặc định làdrop-sudo) xóasudotrước khi chạy Codex. Thao tác này không thể đảo ngược trong tác vụ và giúp bảo vệ bí mật trong bộ nhớ. Trên Windows, bạn phải đặtsafety-strategy: unsafe.unprivileged-userghépsafety-strategy: unprivileged-uservớicodex-userđể chạy Codex bằng một tài khoản cụ thể. Hãy bảo đảm người dùng có thể đọc và ghi thư mục checkout của kho lưu trữ (xem ví dụunprivileged-userđể biết cách sửa quyền sở hữu).read-onlyngăn Codex thay đổi tệp hoặc sử dụng mạng, nhưng Codex vẫn chạy với đặc quyền nâng cao. Đừng chỉ dựa vàoread-onlyđể bảo vệ bí mật.sandboxgiới hạn quyền truy cập hệ thống tệp và mạng bên trong chính Codex. Chọn tùy chọn hạn chế nhất nhưng vẫn cho phép hoàn thành tác vụ.allow-usersvàallow-botsgiới hạn những người có thể kích hoạt quy trình. Theo mặc định, chỉ người dùng có quyền ghi mới có thể chạy action; hãy liệt kê rõ các tài khoản tin cậy bổ sung hoặc để trống trường này nhằm dùng hành vi mặc định.
Thu thập đầu ra
Action phát thông điệp Codex cuối cùng qua đầu ra final-message. Ánh xạ đầu ra này tới đầu ra của tác vụ (như minh họa ở trên) hoặc xử lý trực tiếp trong các bước sau. Kết hợp output-file với tính năng tải sản phẩm lên nếu bạn muốn thu thập toàn bộ bản ghi từ runner. Khi cần dữ liệu có cấu trúc, hãy truyền --output-schema qua codex-args để bắt buộc tuân theo một cấu trúc JSON.
Danh sách kiểm tra bảo mật
- Giới hạn những người có thể khởi động quy trình. Ưu tiên các sự kiện đáng tin cậy hoặc phê duyệt rõ ràng thay vì cho phép mọi người chạy Codex trên kho lưu trữ của bạn.
- Làm sạch đầu vào lời nhắc từ pull request, thông điệp commit hoặc nội dung issue để tránh prompt injection. Kiểm tra các nhận xét HTML hoặc văn bản ẩn trước khi đưa chúng cho Codex.
- Bảo vệ
OPENAI_API_KEYbằng cách giữsafety-strategytrêndrop-sudohoặc chuyển Codex sang người dùng không có đặc quyền. Tuyệt đối không để action ở chế độunsafetrên các runner dùng chung cho nhiều bên thuê. - Chạy Codex ở bước cuối cùng của tác vụ để các bước sau không kế thừa bất kỳ thay đổi trạng thái ngoài dự kiến nào.
- Xoay vòng khóa ngay lập tức nếu bạn nghi ngờ nhật ký proxy hoặc đầu ra của action đã làm lộ dữ liệu bí mật.
Khắc phục sự cố
- Bạn đã đặt cả prompt và prompt-file: Xóa đầu vào trùng lặp để chỉ cung cấp đúng một nguồn.
- responses-api-proxy không ghi thông tin máy chủ: Xác nhận API key có tồn tại và hợp lệ; proxy chỉ khởi động khi bạn cung cấp
openai-api-key. - Dự kiến
sudobị xóa nhưngsudovẫn thành công: Bảo đảm không có bước trước đó khôi phụcsudovà hệ điều hành của runner là Linux hoặc macOS. Chạy lại bằng một tác vụ mới. - Lỗi quyền sau
drop-sudo: Cấp quyền ghi trước khi action chạy (ví dụ: bằngchmod -R g+rwX "$GITHUB_WORKSPACE"hoặc sử dụng mẫu người dùng không có đặc quyền). - Trình kích hoạt không được ủy quyền đã bị chặn: Điều chỉnh đầu vào
allow-usershoặcallow-botsnếu bạn cần cho phép các tài khoản dịch vụ ngoài những cộng tác viên có quyền ghi theo mặc định.