360 Secure SkillHub
360 安全技能中心

GitLab MR Code Review

该 Skill 以定时轮询方式检测 GitLab 开放 MR,拉取代码 diff,按默认或项目自定义规则进行 AI 审查,发现安全漏洞、缺陷与规范问题后,通过脚本在 MR 上发布行内评论和总结评论,并用本地记录文件避免重复审查。依赖 Node 脚本、GitLab 访问令牌与 cron 定时任务。

gotoloops
gotoloops
热度 52.49
最近更新 2026-05-18 11:37:19
分类:开发依赖:代码执行 / 读写文件 / 第三方 API / 内部调用大模型应用场景:代码审查 / API 集成 / 自动化脚本 / DevOps

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add gitlab-auto-review
Metadata
name
gitlab-auto-review
description
Automated AI code review for GitLab Merge Requests via polling. Periodically checks for open MRs, reviews code diffs for security vulnerabilities, bugs, and best practices, then posts inline comments and a summary note on GitLab. Supports project-level custom review rules via `.gitlab-review-prompt.md`. Use when: setting up MR code review, configuring GitLab review automation, checking MR review status, or troubleshooting GitLab MR review issues.
metadata
{"openclaw":{"requires":{"bins":["node"],"env":["GITLAB_URL","GITLAB_TOKEN"]},"primaryEnv":"GITLAB_TOKEN"}}

GitLab MR Code Review

Polling-based automated code review for GitLab MRs.

Architecture

Cron (*/2 * * * *) → gitlab-api.js list-mrs → skip reviewed → fetch diff → AI review → post comments/note
  • No webhook server — pure polling
  • Reviewed MRs tracked in {baseDir}/mr-reviewed.json

Setup

  1. Create {baseDir}/.env with your GitLab credentials:
    GITLAB_URL=https://gitlab.example.com
    GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
    
    The script auto-loads this file. Environment variables take precedence (won't be overwritten if already set).
  2. Test: node {baseDir}/scripts/gitlab-api.js get-version
  3. Install cron worker — see references/cron-setup.md for the full command

API Script Reference

node {baseDir}/scripts/gitlab-api.js get-version                              # Test connection
node {baseDir}/scripts/gitlab-api.js list-mrs                                 # List open MRs
node {baseDir}/scripts/gitlab-api.js list-mrs --project <project_path>        # Filter by project
node {baseDir}/scripts/gitlab-api.js get-changes <project_id> <mr_iid>        # Fetch MR diff
node {baseDir}/scripts/gitlab-api.js get-file <project_id> <branch> <path>    # Fetch file content
node {baseDir}/scripts/gitlab-api.js post-comment --file <json> <pid> <iid>   # Inline comment (use --file!)
node {baseDir}/scripts/gitlab-api.js post-note <project_id> <mr_iid> '<text>' # Summary note

post-comment JSON format

{
  "body": "**[Critical]** sql_injection\n\nRaw query with user input.",
  "position": {
    "base_sha": "abc123",
    "start_sha": "def456",
    "head_sha": "ghi789",
    "new_path": "src/db.js",
    "new_line": 42
  }
}

base_sha/start_sha/head_sha come from get-changes output's diff_refs.

Review Rules

  • Default: references/review-guidelines.md — severity levels, output format, what to skip
  • Per-project: Place .gitlab-review-prompt.md in the repo root; the worker auto-fetches it via get-file

Troubleshooting

Problem Fix
MRs not reviewed openclaw cron list — is worker enabled?
API errors node {baseDir}/scripts/gitlab-api.js get-version
Duplicate reviews Check {baseDir}/mr-reviewed.json exists and is writable; ensure cron prompt has explicit "never re-review" rule at highest priority
Garbled comments Use --file mode for post-comment (Windows PowerShell encoding)
Wrong line numbers new_line must be the line number in the NEW version of the file