3 changed files with 32 additions and 27 deletions
+25 -24
View File
@@ -1,6 +1,5 @@
# AI 代码审查:每次 PR 触发(含 fork 跨仓库 PR,用 Claude Code 调用智谱 GLM(glm-5.2) 审查 diff # AI 代码审查:每次 PR 触发,用 Claude Code 调用智谱 GLM(glm-5.2) 审查 diff
# 把结论评论到 PR。ANTHROPIC_API_KEY / REVIEW_PAT 由 runner 的 envs 注入(不经 Gitea secret # 把结论评论到 PR。走 GLM 的 Anthropic 兼容端点,无需访问 Anthropic 官方。
# 故 fork PR 也能拿到);MAIN_API 用组织变量。
name: AI Code Review name: AI Code Review
on: on:
pull_request: pull_request:
@@ -10,35 +9,34 @@ jobs:
review: review:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
# 关键:把 Claude Code 指向智谱 GLM 的 Anthropic 兼容端点(已验证可用)
ANTHROPIC_BASE_URL: https://open.bigmodel.cn/api/anthropic ANTHROPIC_BASE_URL: https://open.bigmodel.cn/api/anthropic
ANTHROPIC_API_KEY: ${{ secrets.ZHIPU_API_KEY }}
ANTHROPIC_MODEL: glm-5.2 ANTHROPIC_MODEL: glm-5.2
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1" CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1" # 关闭遥测,避免访问被墙地址
DISABLE_AUTOUPDATER: "1" DISABLE_AUTOUPDATER: "1"
IS_SANDBOX: "1" IS_SANDBOX: "1" # CI 容器以 root 运行,需此项才能用 --dangerously-skip-permissions
# ANTHROPIC_API_KEY 和 REVIEW_PAT 不要写在这里 —— 由 runner envs 注入
steps: steps:
- name: 检出代码(兼容 fork PR:克隆 head 仓库) - name: 检出代码
# 手动克隆,避免从 github.com 下载 actions/checkout(内网不可达)
env:
REVIEW_PAT: ${{ secrets.REVIEW_PAT }}
run: | run: |
git config --global http.extraHeader "Authorization: Basic $(printf 'oauth2:%s' "$REVIEW_PAT" | base64 -w0)" git clone "http://oauth2:${REVIEW_PAT}@gitea:3000/${{ gitea.repository }}.git" .
git clone "${{ gitea.event.pull_request.head.repo.clone_url }}" . git checkout "${{ gitea.event.pull_request.head.ref }}"
git checkout "${{ gitea.event.pull_request.head.sha }}"
- name: 生成 PR diff(从 base 仓库取目标分支做对比) - name: 生成 PR diff
run: | run: |
BASE_REPO="${{ gitea.event.pull_request.base.repo.clone_url }}" BASE="${{ gitea.event.pull_request.base.ref }}"
BASE_REF="${{ gitea.event.pull_request.base.ref }}" git fetch origin "$BASE"
git remote add base "$BASE_REPO" git diff "origin/$BASE...HEAD" > pr.diff
git fetch base "$BASE_REF"
git diff "base/$BASE_REF...HEAD" > pr.diff
echo "diff 行数: $(wc -l < pr.diff)" echo "diff 行数: $(wc -l < pr.diff)"
- name: 安装 Claude Code(已装则跳过) - name: 安装 Claude Code
run: | run: 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 审查 - name: 运行 AI 审查
# Claude Code 会自动读取本仓库 CLAUDE.md 与 .claude/skills/*
run: | run: |
claude -p "$(cat .claude/review-prompt.md)" \ claude -p "$(cat .claude/review-prompt.md)" \
--model glm-5.2 \ --model glm-5.2 \
@@ -48,14 +46,17 @@ jobs:
- name: 把审查结论评论到 PR - name: 把审查结论评论到 PR
env: env:
REVIEW_PAT: ${{ secrets.REVIEW_PAT }}
API: ${{ vars.MAIN_API }} API: ${{ vars.MAIN_API }}
REPO: ${{ gitea.repository }}
PR: ${{ gitea.event.pull_request.number }}
run: | run: |
if [ -s review.md ]; then 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 BODY=$(node -e 'let d="";process.stdin.on("data",c=>d+=c).on("end",()=>process.stdout.write(JSON.stringify({body:d})))' < review.md)
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 "Authorization: token $REVIEW_PAT" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
--data @/tmp/body.json -d "$BODY"
else else
echo "review.md 为空,跳过评论" echo "review.md 为空,跳过评论"
fi fi
+7 -1
View File
@@ -4,7 +4,13 @@
当前范围包括地图拖动缩放、POI 分类、marker 与摘要联动、用户主动授权后的前台实时定位、POI 详情、AI 文旅助手交互和推荐行程展示。路线规划支持基于当前位置的快速规划,以及用户自选 2–8 个 POI、2–10 小时时长的自定义规划;本地规划器按时间预算动态排程,配置服务端后可由受控 AI 在审核白名单内推荐点位与顺序。当前不是道路级实时导航,也不包含打卡、登录或个人中心。 当前范围包括地图拖动缩放、POI 分类、marker 与摘要联动、用户主动授权后的前台实时定位、POI 详情、AI 文旅助手交互和推荐行程展示。路线规划支持基于当前位置的快速规划,以及用户自选 2–8 个 POI、2–10 小时时长的自定义规划;本地规划器按时间预算动态排程,配置服务端后可由受控 AI 在审核白名单内推荐点位与顺序。当前不是道路级实时导航,也不包含打卡、登录或个人中心。
## Todo:还需要再次合并打卡功能至main branch. ## 快速命令
```sh
corepack pnpm install --frozen-lockfile # 安装依赖
corepack pnpm dev:mp-weixin # 持续编译,产物在 dist/dev/mp-weixin
corepack pnpm verify:mp-weixin # 自检产物完整性
```
## 微信开发者工具 ## 微信开发者工具
-2
View File
@@ -1,2 +0,0 @@
def f(x):
return 10 / x # 除零风险