5cdafd2559
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Successful in 1m49s
CI/CD Pipeline / Frontend Lint (push) Successful in 1m53s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m58s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m2s
CI/CD Pipeline / Build Staging API Image (push) Failing after 2m31s
CI/CD Pipeline / Build Staging Worker Image (push) Failing after 2m33s
CI/CD Pipeline / Validate - Code Quality (push) Failing after 2m55s
CI/CD Pipeline / Frontend Unit Tests (push) Failing after 34s
CI/CD Pipeline / Build Production API Image (push) Failing after 18s
CI/CD Pipeline / Build Production Web Image (push) Failing after 17s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 18s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Unit Tests (push) Successful in 4m38s
CI/CD Pipeline / Integration Tests (push) Successful in 4m21s
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (push) Has been skipped
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m2s
- 为AI代码审查添加commit status输出,PR页面可直接看到审查结果 - 添加阻塞级问题判定逻辑,严重问题标记为failure状态 - 优化审查报告格式和输出精度
80 lines
3.0 KiB
YAML
80 lines
3.0 KiB
YAML
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
|
||
|