name: AI Code Review on: pull_request: types: - opened - synchronize - reopened # 同一个 PR 只跑一个 review,新的取消旧的 concurrency: group: code-review-${{ gitea.repository }}-${{ gitea.event.pull_request.number }} cancel-in-progress: true jobs: code-review: name: AI Code Review runs-on: ci-l2 # 跳过草稿 PR if: ${{ !gitea.event.pull_request.draft }} steps: # actions/checkout 由 runner 在宿主机层面处理,不受容器网络影响 - name: Checkout code shell: sh env: GITHUB_TOKEN: ${{ github.token }} run: | curl -sH "Authorization: token $GITHUB_TOKEN" "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/raw/scripts/ci/step_checkout.sh?ref=${GITHUB_SHA}" | bash - name: Install dependencies run: | # 确保 python3-pip 可用(兼容不同基础镜像) if ! python3 -m pip --version >/dev/null 2>&1; then apt-get update -qq && apt-get install -y -qq python3-pip python3-venv >/dev/null 2>&1 fi # 部分镜像 ensurepip 方式兜底 if ! python3 -m pip --version >/dev/null 2>&1; then python3 -m ensurepip --upgrade 2>/dev/null || curl -sS https://bootstrap.pypa.io/get-pip.py | python3 fi python3 -m pip install --upgrade pip python3 -m pip install requests - name: Run AI Code Review env: # Gitea 配置(自动从运行环境获取) GITEA_API_URL: ${{ gitea.server_url }} GITEA_TOKEN: ${{ secrets.REVIEW_GITEA_TOKEN }} REPO_NAME: ${{ gitea.repository }} PR_NUMBER: ${{ gitea.event.pull_request.number }} PR_HEAD_SHA: ${{ gitea.event.pull_request.head.sha }} # LLM 提供商: coze (扣子原生Bot) / openai (OpenAI兼容) LLM_PROVIDER: "coze" # 扣子模式配置(默认国内站 api.coze.cn) LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }} LLM_API_KEY: ${{ secrets.LLM_API_KEY }} COZE_BOT_ID: ${{ secrets.COZE_BOT_ID }} LLM_MODEL: ${{ secrets.LLM_MODEL }} # 可选参数 MAX_DIFF_CHARS: "30000" LLM_TIMEOUT: "120" run: | python3 scripts/ci_code_review.py # 注意:脚本退出码决定job状态 # - 有阻塞级问题 → exit 1 → job失败 → 门禁拦截 # - 无阻塞级问题/LLM异常 → exit 0 → 通过(fail-open) - name: Report CI trace if: always() shell: sh env: AGENTLOOP_LICENSE_KEY: ${{ secrets.AGENTLOOP_LICENSE_KEY }} run: | STATUS="ok" [ ${{ job.status }} = "success" ] || STATUS="error" START_TIME="" [ -f /tmp/ci_job_start_time ] && START_TIME=$(cat /tmp/ci_job_start_time) python3 scripts/ci/ci_trace_report.py --service xiaoxia-saas-ci --status $STATUS --start-time "$START_TIME" || true