1 | |
2 |
|
3 | |
4 | * Update merge request |
5 | * Change a merge request's title, description, target branch, labels, assignees or reviewers, or close or reopen it. Empty fields are left unchanged; labels replaces all labels, add_labels and remove_labels change some, clear_assignees and clear_reviewers remove everyone. |
6 | */ |
7 | export async function main( |
8 | auth: RT.Gitlab, |
9 | project: string, |
10 | merge_request_iid: number, |
11 | title: string | undefined, |
12 | description: string | undefined, |
13 | target_branch: string | undefined, |
14 | labels: string[] | undefined, |
15 | add_labels: string[] | undefined, |
16 | remove_labels: string[] | undefined, |
17 | assignee_ids: number[] | undefined, |
18 | reviewer_ids: number[] | undefined, |
19 | state_event: "keep" | "close" | "reopen" | undefined, |
20 | clear_assignees: boolean = false, |
21 | clear_reviewers: boolean = false |
22 | ) { |
23 | const list = (v: string[] | undefined) => |
24 | v?.length ? v.join(",") : undefined |
25 | const url = `${(auth.baseUrl || "https://gitlab.com").replace(/\/+$/, "")}/api/v4/projects/${encodeURIComponent(project)}/merge_requests/${merge_request_iid}` |
26 |
|
27 | const response = await fetch(url, { |
28 | method: "PUT", |
29 | headers: { |
30 | Authorization: `Bearer ${auth.token}`, |
31 | "Content-Type": "application/json", |
32 | Accept: "application/json", |
33 | }, |
34 | body: JSON.stringify({ |
35 | title: title || undefined, |
36 | description: description || undefined, |
37 | target_branch: target_branch || undefined, |
38 | labels: list(labels), |
39 | add_labels: list(add_labels), |
40 | remove_labels: list(remove_labels), |
41 | |
42 | assignee_ids: clear_assignees |
43 | ? [] |
44 | : assignee_ids?.length |
45 | ? assignee_ids |
46 | : undefined, |
47 | reviewer_ids: clear_reviewers |
48 | ? [] |
49 | : reviewer_ids?.length |
50 | ? reviewer_ids |
51 | : undefined, |
52 | state_event: |
53 | state_event && state_event !== "keep" ? state_event : undefined, |
54 | }), |
55 | }) |
56 |
|
57 | if (!response.ok) { |
58 | throw new Error(`${response.status} ${await response.text()}`) |
59 | } |
60 |
|
61 | return await response.json() |
62 | } |
63 |
|