Skip to content

GitHub Action

在 GitHub Actions 中使用 Codex

概述

Codex GitHub Action 允许你在 CI/CD 流程中集成 Codex,实现自动化的代码审查、测试生成等任务。

快速开始

基础用法

yaml
name: Codex Code Review

on:
  pull_request:
    branches: [main]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Codex Review
        uses: openai/codex-action@v2
        with:
          api-key: ${{ secrets.OPENAI_API_KEY }}
          mode: review

配置选项

必需参数

参数说明
api-keyOpenAI API 密钥
mode运行模式

可选参数

参数默认值说明
modelcodex-latest使用的模型
filesall审查的文件
excludenone排除的文件
fail-on-issuesfalse发现问题时失败
comment-prtrue是否在 PR 评论

使用模式

1. 代码审查模式

yaml
- name: Code Review
  uses: openai/codex-action@v2
  with:
    api-key: ${{ secrets.OPENAI_API_KEY }}
    mode: review
    comment-pr: true
    fail-on-issues: false

2. 测试生成模式

yaml
- name: Generate Tests
  uses: openai/codex-action@v2
  with:
    api-key: ${{ secrets.OPENAI_API_KEY }}
    mode: test-generation
    test-framework: jest

3. 文档生成模式

yaml
- name: Generate Docs
  uses: openai/codex-action@v2
  with:
    api-key: ${{ secrets.OPENAI_API_KEY }}
    mode: docs
    output-dir: docs/generated

4. Bug 检测模式

yaml
- name: Bug Detection
  uses: openai/codex-action@v2
  with:
    api-key: ${{ secrets.OPENAI_API_KEY }}
    mode: bug-detection
    fail-on-issues: true

高级用法

条件审查

yaml
- name: Codex Review
  uses: openai/codex-action@v2
  with:
    api-key: ${{ secrets.OPENAI_API_KEY }}
    mode: review
    files: |
      src/**/*.ts
      !src/**/*.test.ts
    exclude: |
      **/*.d.ts
      **/vendor/**

多模型审查

yaml
- name: Multi-Model Review
  uses: openai/codex-action@v2
  with:
    api-key: ${{ secrets.OPENAI_API_KEY }}
    model: codex-latest
    fallback-model: codex-fast

自定义提示

yaml
- name: Custom Review
  uses: openai/codex-action@v2
  with:
    api-key: ${{ secrets.OPENAI_API_KEY }}
    mode: custom
    prompt: |
      请审查这段代码,特别关注:
      1. 安全性问题
      2. 性能问题
      3. 代码可读性
      
      请用中文回答。

完整示例

PR 自动审查

yaml
name: PR Code Review

on:
  pull_request:
    types: [opened, synchronize]
    branches: [main, develop]

jobs:
  codex-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      
      - name: Install Dependencies
        run: npm ci
      
      - name: Run Codex Review
        uses: openai/codex-action@v2
        with:
          api-key: ${{ secrets.OPENAI_API_KEY }}
          mode: review
          comment-pr: true
          fail-on-issues: false
          files: |
            src/**/*.ts
            src/**/*.tsx

自动测试生成

yaml
name: Generate Tests

on:
  push:
    branches: [develop]
    paths:
      - 'src/**/*.ts'

jobs:
  generate-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      
      - name: Generate Tests
        uses: openai/codex-action@v2
        with:
          api-key: ${{ secrets.OPENAI_API_KEY }}
          mode: test-generation
          test-framework: jest
          create-pr: true
      
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v5
        with:
          title: 'chore: auto-generated tests'
          body: 'Automatically generated by Codex'

环境变量

yaml
env:
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
  OPENAI_MODEL: codex-latest
  CODEX_CONFIG: .codex.json

输出

Codex Action 提供以下输出:

yaml
outputs:
  review-summary: ${{ steps.codex.outputs.summary }}
  issues-found: ${{ steps.codex.outputs.issues }}
  pr-comment: ${{ steps.codex.outputs.comment }}

安全最佳实践

1. 使用 Secrets

yaml
# 好:使用 Secrets
with:
  api-key: ${{ secrets.OPENAI_API_KEY }}

# 不好:硬编码密钥
with:
  api-key: sk-xxx  # 不要这样做!

2. 限制权限

yaml
permissions:
  contents: read
  pull-requests: write

3. 文件过滤

yaml
with:
  files: |
    src/**/*.ts
  exclude: |
    **/*.test.ts
    **/node_modules/**

故障排除

认证失败

确保 API 密钥正确配置:

yaml
with:
  api-key: ${{ secrets.OPENAI_API_KEY }}

超时错误

增加超时时间:

yaml
with:
  timeout: 600  # 10 分钟

查看日志

bash
# 在 GitHub Actions 界面查看详细日志

定价

GitHub Actions 使用 Codex 会计入 API 使用量:

下一步

基于 OpenAI Codex 官方文档翻译