13 Commits
7 changed files with 63 additions and 22 deletions
+16
View File
@@ -0,0 +1,16 @@
# 大二进制文件走 Git LFS,避免仓库膨胀 / 网页预览超时
# 提交这类文件前,先在本机执行一次: git lfs install
*.pptx filter=lfs diff=lfs merge=lfs -text
*.ppt filter=lfs diff=lfs merge=lfs -text
*.docx filter=lfs diff=lfs merge=lfs -text
*.doc filter=lfs diff=lfs merge=lfs -text
*.xlsx filter=lfs diff=lfs merge=lfs -text
*.xls filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.7z filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.ai filter=lfs diff=lfs merge=lfs -text
+33 -17
View File
@@ -1,6 +1,7 @@
# AI 代码审查:每次 PR 触发(含 fork 跨仓库 PR,用 Claude Code 调用智谱 GLM(glm-5.2) 审查 diff
# 把结论评论到 PR。ANTHROPIC_API_KEY / REVIEW_PAT 由 runner 的 envs 注入(不经 Gitea secret
# 故 fork PR 也能拿到);MAIN_API 用组织变量。
# AI 代码审查:每次 PR 触发,用 Claude Code 调用智谱 GLM(glm-5.2) 审查 diff
# 把结论评论到 PR。走 GLM 的 Anthropic 兼容端点,无需访问 Anthropic 官方。
# 密钥用 Gitea 的 ${{ secrets.* }}(同仓库 PR 正常下发;来自 fork 的跨仓库 PR 会被
# Gitea 隐藏密钥 → 自动跳过审查,不报错)。请在团队仓库内开同仓库 PR。
name: AI Code Review
on:
pull_request:
@@ -11,34 +12,45 @@ jobs:
runs-on: ubuntu-latest
env:
ANTHROPIC_BASE_URL: https://open.bigmodel.cn/api/anthropic
ANTHROPIC_API_KEY: ${{ secrets.ZHIPU_API_KEY }}
ANTHROPIC_MODEL: glm-5.2
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1"
DISABLE_AUTOUPDATER: "1"
IS_SANDBOX: "1"
# ANTHROPIC_API_KEY 和 REVIEW_PAT 不要写在这里 —— 由 runner envs 注入
IS_SANDBOX: "1" # CI 容器以 root 运行,需此项才能用 --dangerously-skip-permissions
steps:
- name: 检出代码(兼容 fork PR:克隆 head 仓库)
- name: 检出代码
env:
REVIEW_PAT: ${{ secrets.REVIEW_PAT }}
run: |
if [ -z "$REVIEW_PAT" ]; then
echo "::warning::REVIEW_PAT 为空:通常是来自 fork 的跨仓库 PR(Gitea 会隐藏密钥)。请在团队仓库内开同仓库 PR。本次跳过审查。"
echo "SKIP_REVIEW=1" >> "$GITHUB_ENV"
exit 0
fi
git config --global http.extraHeader "Authorization: Basic $(printf 'oauth2:%s' "$REVIEW_PAT" | base64 -w0)"
git clone "${{ gitea.event.pull_request.head.repo.clone_url }}" .
git checkout "${{ gitea.event.pull_request.head.sha }}"
git clone "http://gitea:3000/${{ gitea.repository }}.git" .
git checkout "${{ gitea.event.pull_request.head.ref }}"
- name: 生成 PR diff(从 base 仓库取目标分支做对比)
- name: 生成 PR diff
if: env.SKIP_REVIEW != '1'
run: |
BASE_REPO="${{ gitea.event.pull_request.base.repo.clone_url }}"
BASE_REF="${{ gitea.event.pull_request.base.ref }}"
git remote add base "$BASE_REPO"
git fetch base "$BASE_REF"
git diff "base/$BASE_REF...HEAD" > pr.diff
BASE="${{ gitea.event.pull_request.base.ref }}"
git fetch origin "$BASE"
git diff "origin/$BASE...HEAD" > pr.diff
echo "diff 行数: $(wc -l < pr.diff)"
- name: 安装 Claude Code(已装则跳过)
if: env.SKIP_REVIEW != '1'
run: |
if command -v claude >/dev/null 2>&1; then echo "claude 已存在,跳过安装"
else npm install -g @anthropic-ai/claude-code --registry=https://registry.npmmirror.com
if command -v claude >/dev/null 2>&1; then
echo "claude 已存在,跳过安装"
else
npm install -g @anthropic-ai/claude-code --registry=https://registry.npmmirror.com
fi
- name: 运行 AI 审查
if: env.SKIP_REVIEW != '1'
# Claude Code 会自动读取本仓库 CLAUDE.md 与 .claude/skills/*
run: |
claude -p "$(cat .claude/review-prompt.md)" \
--model glm-5.2 \
@@ -47,12 +59,16 @@ jobs:
--max-turns 15 > review.md || true
- name: 把审查结论评论到 PR
if: env.SKIP_REVIEW != '1'
env:
REVIEW_PAT: ${{ secrets.REVIEW_PAT }}
API: ${{ vars.MAIN_API }}
REPO: ${{ gitea.repository }}
PR: ${{ gitea.event.pull_request.number }}
run: |
if [ -s review.md ]; then
node -e 'let d="";process.stdin.on("data",c=>d+=c).on("end",()=>process.stdout.write(JSON.stringify({body:d})))' < review.md > /tmp/body.json
curl -fsS -X POST "$API/repos/${{ gitea.repository }}/issues/${{ gitea.event.pull_request.number }}/comments" \
curl -fsS -X POST "$API/repos/$REPO/issues/$PR/comments" \
-H "Authorization: token $REVIEW_PAT" \
-H "Content-Type: application/json" \
--data @/tmp/body.json
Binary file not shown.
+11 -2
View File
@@ -15,7 +15,16 @@
"outputPath": ""
},
"useCompilerPlugins": false,
"minifyWXML": true
"minifyWXML": true,
"compileWorklet": false,
"uploadWithSourceMap": true,
"packNpmManually": false,
"minifyWXSS": true,
"localPlugins": false,
"disableUseStrict": false,
"condition": false,
"swc": false,
"disableSWC": true
},
"compileType": "miniprogram",
"srcMiniprogramRoot": "dist/dev/mp-weixin/",
@@ -24,7 +33,7 @@
"ignore": [],
"include": []
},
"appid": "wx946b42048d117dde",
"appid": "wxa3abd3957b0eb47b",
"editorSetting": {},
"condition": {}
}
+2 -2
View File
@@ -46,7 +46,7 @@
},
"quickapp": {},
"mp-weixin": {
"appid": "wx946b42048d117dde",
"appid": "touristappid",
"setting": {
"urlCheck": true
},
@@ -61,7 +61,7 @@
"startLocationUpdate",
"onLocationChange"
],
"projectname": "【prod】光明文旅地图"
"projectname": "【dev】光明文旅地图"
},
"mp-alipay": {
"usingComponents": true