研发协作
当 PR 需要结构化审查且 CI 变红时,用…
在 shell 中通过 Composio CLI 驱动 GitHub/GitLab 的 PR 审查与 CI 自动修复。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
当 PR 需要结构化审查且 CI 变红时特定
解决思路
- 安装 Composio CLI:`curl -fsSL https://composio.dev/install | bash`。
- 执行 `composio login` 登录。
- 按代码托管平台执行 `composio link github` 或 `composio link gitlab` 建立连接。
- 非交互运行时可设置环境变量 `COMPOSIO_API_KEY`。
- 用搜索发现工具 slug 并固定复用:`composio search "list pull request files" --toolkits github`、`composio search "download workflow logs" --toolkits github`、`composio search "create pr comment" --toolkits gitlab`。
- 常用 slug 包括:`GITHUB_GET_A_PULL_REQUEST`、`GITHUB_LIST_PULL_REQUESTS_FILES`、`GITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUEST`、`GITHUB_LIST_WORKFLOW_RUNS_FOR_A_REPOSITORY`、`GITHUB_DOWNLOAD_WORKFLOW_RUN_LOGS`、`GITLAB_GET_SINGLE_MERGE_REQUEST`、`GITLAB_LIST_MERGE_REQUEST_DISCUSSIONS`、`GITLAB_CREATE_NEW_MERGE_REQUEST_NOTE`。
- 首次使用任一 slug 前,用 `composio execute <SLUG> --get-schema` 确认输入结构。
- 拉取 PR 元数据:`composio execute GITHUB_GET_A_PULL_REQUEST -d '{"owner":"acme","repo":"app","pull_number":482}'`。
- 拉取 PR 文件/diff:`composio execute GITHUB_LIST_PULL_REQUESTS_FILES -d '{"owner":"acme","repo":"app","pull_number":482}'`。
- 把风险区域(auth、migrations、public APIs、tests)总结进 review body。
- 发布带行内评论的 review:`composio execute GITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUEST -d '{"owner":"acme","repo":"app","pull_number":482,"event":"COMMENT","body":"Overall LGTM with 2 blocking notes.","comments":[{"path":"src/auth.ts","line":42,"body":"Missing null check on session"},{"path":"src/auth.ts","line":88,"body":"Token TTL is hardcoded; move to config"}]}'`。
- CI 自动修复循环:先找红色 workflow run:`composio execute GITHUB_LIST_WORKFLOW_RUNS_FOR_A_REPOSITORY -d '{"owner":"acme","repo":"app","branch":"feat/billing","status":"failure"}'`。
- 拉取失败日志:`composio execute GITHUB_DOWNLOAD_WORKFLOW_RUN_LOGS -d '{"owner":"acme","repo":"app","run_id":123456}'`。
- 解析失败原因并在本地打补丁(agent 把修复写入工作树)。
- 用本地 `git` 提交并推送,然后重复第 12 步轮询,直到 `conclusion=success`。
- 每次修复提交后发 PR 评论,描述每个 fix commit,方便人类审查者看到变化。
- 一次性工作流文件:保存为 `scripts/review-and-fix.ts`,解析 `--pr` 参数,调用 `execute("GITHUB_GET_A_PULL_REQUEST", ...)` 和 `execute("GITHUB_LIST_PULL_REQUESTS_FILES", ...)` 获取元数据与文件,并打印 JSON;用 `composio run --file ./scripts/review-and-fix.ts -- --pr 482` 运行。
- GitLab 变体:替换 slug 和参数名;获取 MR:`composio execute GITLAB_GET_SINGLE_MERGE_REQUEST -d '{"id":"acme/app","merge_request_iid":482}'`;创建 MR note:`composio execute GITLAB_CREATE_NEW_MERGE_REQUEST_NOTE -d '{"id":"acme/app","merge_request_iid":482,"body":"CI fix pushed as commit deadbeef"}'`。
- 遇到 `Connection required for github` 时运行 `composio link github`。
- 遇到未知输入结构时运行 `composio execute <SLUG> --get-schema`。
- 日志下载过大时,用 `composio proxy` 直接对原始 API 流式获取,并在本地用 `grep` 过滤。
- 遇到速率限制时,串行化调用或降低轮询频率;对同一仓库避免使用 `--parallel`。
- 需要完整 CLI 参考时查阅 `https://docs.composio.dev/docs/cli`。
适用边界 · 注意事项
- 不适用于非 GitHub/GitLab 的代码托管平台,或无法安装/登录 Composio CLI 的环境。
- 没有仓库写权限、不能自动推送修复提交时,不适合执行 CI 自动修复循环。
- CI 日志含敏感信息或修复必须人工审批时,不应直接下载回传或自动改码。