- name
- gitlab-auto-review
- description
- >
- 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
- Create
{baseDir}/.envwith your GitLab credentials:
GITLAB_URL=https://gitlab.example.com
GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxxThe script auto-loads this file. Environment variables take precedence (won't be overwritten if already set).
- Test:
node {baseDir}/scripts/gitlab-api.js get-version - 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 notepost-comment JSON format
{
"body": "**[Critical]** sql_injection\
\
Raw 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.mdin the repo root; the worker auto-fetches it viaget-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 |