//native
/**
* Update merge request
* 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.
*/
export async function main(
auth: RT.Gitlab,
project: string,
merge_request_iid: number,
title: string | undefined,
description: string | undefined,
target_branch: string | undefined,
labels: string[] | undefined,
add_labels: string[] | undefined,
remove_labels: string[] | undefined,
assignee_ids: number[] | undefined,
reviewer_ids: number[] | undefined,
state_event: "keep" | "close" | "reopen" | undefined,
clear_assignees: boolean = false,
clear_reviewers: boolean = false
) {
const list = (v: string[] | undefined) =>
v?.length ? v.join(",") : undefined
const url = `${(auth.baseUrl || "https://gitlab.com").replace(/\/+$/, "")}/api/v4/projects/${encodeURIComponent(project)}/merge_requests/${merge_request_iid}`
const response = await fetch(url, {
method: "PUT",
headers: {
Authorization: `Bearer ${auth.token}`,
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({
title: title || undefined,
description: description || undefined,
target_branch: target_branch || undefined,
labels: list(labels),
add_labels: list(add_labels),
remove_labels: list(remove_labels),
// An empty list leaves them as they are; clear_* removes everyone.
assignee_ids: clear_assignees
? []
: assignee_ids?.length
? assignee_ids
: undefined,
reviewer_ids: clear_reviewers
? []
: reviewer_ids?.length
? reviewer_ids
: undefined,
state_event:
state_event && state_event !== "keep" ? state_event : undefined,
}),
})
if (!response.ok) {
throw new Error(`${response.status} ${await response.text()}`)
}
return await response.json()
}
Submitted by hugo989 8 hours ago