使用说明

怎么开始用:三种用法,照着做就行

普通用户看第一章就够了。下面的命令都能一键复制。

① 桌面客户端(推荐)

个人日常用、审别人的改动都用这个。装好之后,令牌一写、仓库里跑一条命令就能用。

模型费用:第一次执行 qgc review 时,如果还没配置你自己的大模型,会提醒一次。不配置则审查和自动修复使用服务端模型,并产生费用。建议执行 qgc config set llm-key --stdin、qgc config set llm-model <模型名>,费用记在你的账号上。
先说清楚:审查合并请求不需要 Docker,也不需要 Podman。模型审查和内置检查(例如密钥扫描)都不碰容器;只有"配置里写了要跑的命令"这一项需要执行环境(本机容器或远程执行机)。
1 · 装客户端 一条命令 2 · 写令牌 管道写入 3 · 生成配置 qgc init 4 · 跑一次 qgc review
1

装客户端

macOS / Linux(会装到 ~/.local/bin):

curl -fsSL https://www.miaomusic.cn/quality-gate/test/install.sh | sh

Windows(命令提示符或 PowerShell 都贴这一条,会装到 %LOCALAPPDATA%\qgc\qgc.exe。irm 只在 PowerShell 里有效,贴进命令提示符会报「不是内部或外部命令」):

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://www.miaomusic.cn/quality-gate/test/install.ps1 | iex"
装完它会顺手做四件事:自动配好本环境服务端地址、检查有没有容器运行时、检查常用语言运行时、告诉你还差什么(缺的不用现在装)。
2

写入访问令牌

服务端地址安装器已经配好了,这一步只写令牌。令牌在试用申请页的「我的申请」里,提交申请后就会出现。

printf %s "$TOKEN" | qgc config set token --stdin
qgc config list
令牌不能直接写在命令后面 —— 会进命令行历史和进程列表,程序会拒绝。只有地址要改时才手动执行 qgc config set server <地址>。
3

在仓库里生成配置文件

不用找任何人要配置,客户端自己生成,还会自动识别技术栈(Go / Node / Python / Java)。

cd 你的仓库
qgc init

已有配置时它会拒绝覆盖(怕冲掉你调好的策略),确实要重来加 --force。生成后打开看两处:components(代码分区)和 checks(要跑的命令)。

4

装一个只读的代码托管平台令牌

qgc review --pr 要读合并请求的内容,这一步不做会直接报错。

网页上:设置 → 开发者设置 → 个人访问令牌 → 生成新令牌;权限只勾读取:合并请求、内容(私有仓库再加 元数据)。

read -rs QG_GITHUB
printf %s "$QG_GITHUB" | qgc config set github-token --stdin
第一行会等你在光标处粘贴令牌再回车;粘贴时屏幕不显示任何字符是正常的,不是卡住。只跑本地改动审查的话不需要它。
5

审一个合并请求(到这里就能审 —— 不需要 Docker)

qgc review --pr https://github.com/owner/repo/pull/123

最短就是这一行。两个常见参数各自的作用和什么时候才需要带:

参数作用什么时候必须带
--repo .指定本地仓库目录。默认值就是当前目录,已在仓库根目录时多余;用来在本地算改动、读配置、采集事实(代码本身不上传)只有在别处运行、仓库不在当前目录时,例如 --repo ~/code/项目
--approve-upload跳过"要上传什么数据"的确认只在脚本 / CI 这类没有终端的场景必须带,否则报错退出;终端里直接跑不用带,它会先列出要传的数据等你确认

想带上改动说明加 --plan plan.md --docs REF=PATH;目标分支上还没有配置、想用本地这份就加 --adopt-config。

这一步不要求你装 Docker 或 Podman。模型审查和内置检查(例如密钥扫描)都不碰容器,直接就会跑并给出结论。
唯一要注意:如果配置里写了带命令的检查(例如 unit: go test ./...)并且标了 required: true,而本机又没有执行环境,那一项会记成「未执行」,并因为它必填而被判定为阻断。想先只看 AI 审查意见,二选一:把命令类检查临时改成 required: false(推荐),或者做下面的第 6 步。
6

(可选)只有想"跑命令的检查"时才需要:准备执行环境

想让配置里那些 command: 检查(构建 / 单测 / 代码规范)真的跑出结果,才需要这一步。只想看 AI 审查意见的话跳过它,按第 5 步的说明处理即可。

本机容器(推荐先试):装好 Docker 或 Podman 就行,不用额外配置。

远程执行机:管理员发你三件套时这样配 ——

qgc config set remote-runner-url <公司内网Runner地址>
printf %s "$RUNNER_TOKEN" | qgc config set remote-runner-token --stdin
printf %s "$SIGNING_KEY"  | qgc config set remote-runner-signing-key --stdin
7

把修复补丁推成分支(可选)

发现问题后它会尝试自己修:由模型生成补丁(生成补丁不需要容器)→ 在隔离环境重跑检查 → 复验(复验需要执行环境)。默认结果是一个补丁文件,不会动你的分支;没有执行环境时补丁照样会给你,只是复验跑不了。

qgc push --repo . --scan-id <扫描ID>

前提:本机对这个仓库有推送权限;生成补丁不需要执行环境,但要推成分支必须先通过复验(重跑检查,所以需要隔离执行环境);目标分支不受保护也不是从 fork 提的。

想让它自动往现有合并请求追加一个提交,在配置文件里加:

repair:
  delivery:
    default_mode: pr-update
    allowed_modes: [suggestion, artifact, pr-update]
    pr_update:
      enabled: true

这一章的常见问题

现象原因怎么办
提示缺 server / token没配好qgc config list 检查;地址通常已自动配好,缺的是令牌
报 channel 不被接受装成了另一个环境的客户端用本环境链接重装,再 qgc config set server <本环境地址>
说本机没有密钥保险箱系统不带钥匙串改用环境变量 QGC_TOKEN 每次传入
报需要平台令牌第 5 步没做先粘贴令牌回车,再写入配置

② 挂到代码托管平台(团队用)

有合并请求流程的团队用这个:装一次,全仓库的 PR 自动体检。

模型费用:仓库 Secrets 里还没有你自己的模型密钥时,每次运行都会提醒。不配置则审查和自动修复使用共享额度,并产生费用。请配置 REVIEWER_FAST_API_KEY 与 REVIEWER_DEEP_API_KEY,费用记在该密钥所属的账号上。配好后不再提醒。
1

拿到流程文件

这个文件由官方提供,放进仓库的 .github/workflows/。别自己从零写 —— 里面有一堆安全细节(第三方组件要固定版本、权限最小化、外部 fork 的 PR 不给密钥),自己写容易漏。

2

把占位符换成真实值

模板里有几处 <pin-full-commit-sha>,换成你要固定的版本号。

3

把模型密钥放进仓库保险箱

设置 → Secrets and variables → Actions → 新建仓库密钥,按模板里写的名字添加(区分大小写)。

4

提交一个 PR 看结果

合并请求会自动触发,结果出现在检查列表里,并产出报告产物。

你要操心的三件事:外部 fork 来的 PR 不注入模型密钥(模板已处理);流程权限保持只读;要改配置单独提一个 PR(防止一次改动顺手把门禁放宽)。

③ 命令行(高级,先找管理员要东西)

只有你们自己搭流程、管理员明确说"用命令行"时才需要。程序和配置都由管理员发放。

模型费用:第一次执行 qg run 时,如果运行环境里没有配置文件所引用的模型密钥,会提醒一次。不配置则审查和自动修复使用共享额度,并产生费用。请设置例如 REVIEWER_FAST_API_KEY,费用记在该密钥所属的账号上。
1

放好配置文件,只改这两块

components:
  - name: backend
    paths: ["**/*.go"]
    type: go-service

checks:
  unit:
    command: "go test ./..."
    components: [backend]
    profiles: [LIGHT, NORMAL, FULL, DEEP]
    required: true
别自己手写配置。必填字段比看起来多(模型至少要两个独立组,还要有模型提供计划生成角色),手写必踩校验报错。真要手写,profiles 一定不能漏。
2

生成改动文件并运行

git diff main...HEAD > pr.diff
qg run --diff pr.diff --workdir .
3

看结果

qg report --evidence quality-artifacts/<run-id> --format json

退出码:0 通过 1 阻断 2 需人工确认 3 配置错误

跑得起来,但报告说"证据不足"?补齐这三样

补什么为什么不补会怎样
容器运行时只有"带命令的检查"要在隔离环境里跑(模型审查和内置检查不需要)那些检查记成未执行;标了 required: true 的会按必需检查未通过阻断,没标必填的不影响结论
模型密钥(环境变量)要有 AI 审查没有 AI 那一段;标了必填会记"必需模型失败"
--repo + --base规范要取自改动前的版本规范读的是当前工作区,被判可疑并封顶
qg run --config quality-config.yaml --diff pr.diff --workdir . \
       --repo . --base main

模型密钥只写名字,真正的值放环境变量:api_key_env: REVIEWER_API_KEY 配 export REVIEWER_API_KEY=你的钥匙。

常见问题排查

按现象查最快。

现象原因怎么办
提示缺 server / token没配好qgc config list 检查;地址通常已自动配好,缺的是令牌
报 channel 不被接受装成了另一个环境的客户端用本环境链接重装,再手动设一次地址
说本机没有密钥保险箱系统不带钥匙串改用环境变量 QGC_TOKEN 每次传入
改了运行环境镜像后验签失效镜像签名固定,改了会清掉记录重新验签或重装
退出码 3 + 缺少档位声明检查项漏了 profiles补上 profiles: [LIGHT, NORMAL, FULL, DEEP]
退出码 3 + 独立组为 0模型只配了一个组至少两个不同的独立组
提示"改动了门禁自己的文件"你改了配置或检查脚本,这是保护机制配置改动单独提一个 PR
检查没跑本机没有可用容器装容器运行时,或让管理员给远程执行机
还解决不了?写信到 contact@smoodyheal.cn,附上你跑的命令和报错原文。

密钥的安全规矩(三种用法都适用)

  • 密钥不写进配置文件,配置里只写"去哪个环境变量取"
  • 令牌不写在命令行参数里,用管道或环境变量
  • 外部 fork 的合并请求不给模型密钥
  • 只有带命令的检查在隔离环境里跑,你的私钥和模型密钥不会传给检查进程(模型审查不经容器)
  • 令牌泄露立刻联系管理员重签