Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion docs/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,14 @@ The guard is process-local. Multi-instance deployments need a shared lock in SQL
Required GitLab REST API calls:

```text
GET /projects/:id/merge_requests/:merge_request_iid/changes
GET /projects/:id/merge_requests/:merge_request_iid
GET /projects/:id/merge_requests/:merge_request_iid/diffs?page=:page&per_page=100
GET /projects/:id/repository/archive.zip
POST /projects/:id/merge_requests/:merge_request_iid/discussions
```

Diff pages are fetched until pagination is complete. File-level `collapsed`, `too_large`, and `generated_file` metadata is preserved; unavailable diffs make review coverage incomplete. The deprecated `/changes` endpoint is used only as a compatibility fallback when `/diffs` is unavailable, and its `overflow` flag is also treated as incomplete coverage.

The service uses `[gitlab].token`, not the webhook secret, for API calls. The token needs `api` scope and permission to read MR diffs, download repository archives, and publish MR discussions.

## Diff Parser
Expand Down
5 changes: 4 additions & 1 deletion docs/gitlab-webhook.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,14 @@ Webhook 页面里的 `Secret token` 只用于校验收到的请求是否来自 G
当前服务会用这个 token 调用:

```text
GET /projects/:id/merge_requests/:merge_request_iid/changes
GET /projects/:id/merge_requests/:merge_request_iid
GET /projects/:id/merge_requests/:merge_request_iid/diffs?page=:page&per_page=100
GET /projects/:id/repository/archive.zip
POST /projects/:id/merge_requests/:merge_request_iid/discussions
```

服务会完整读取 `/diffs` 的分页,并记录 `collapsed`、`too_large`、`generated_file` 状态。无法取得完整 diff 时,Dashboard 会显示不完整覆盖率。只有旧 GitLab 不支持 `/diffs` 时才兼容回退到已弃用的 `/changes`,并检查其 `overflow` 标志。

因此 token 需要能读取 MR diff、读取仓库 archive,并发布 MR discussion。

## Merge request events 什么时候触发
Expand Down
7 changes: 6 additions & 1 deletion src/dashboard/views.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,12 @@ pub const DASHBOARD_HTML: &str = r##"<!doctype html>
const coverageReason = (reason) => ({
max_batches_reached: "达到批次上限",
single_file_diff_truncated: "单文件 Diff 超过批次限制",
batch_execution_failed: "批次执行失败"
single_diff_line_too_large: "单行 Diff 超过批次限制",
batch_execution_failed: "批次执行失败",
gitlab_diff_unavailable: "GitLab 未提供 Diff 内容",
gitlab_diff_collapsed: "GitLab 已折叠 Diff",
gitlab_diff_too_large: "Diff 超过 GitLab 大小限制",
gitlab_diff_overflow: "Merge Request Diff 超过 GitLab 限制"
}[reason] || reason || "-");
const errorCodeText = (code) => ({
gitlab_api_timeout: "GitLab API 超时", gitlab_api_failed: "GitLab API 失败",
Expand Down
Loading
Loading