From 89781e59c426d69a0969497b0874f6f5e070fb43 Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Thu, 10 Jun 2021 14:59:18 +0900 Subject: [PATCH] include/gitlab: Add functions for interacting with merge requests To implement a bot that merges merge requests by majority decision, functions are necessary to get details about merge requests. This commit adds functions that allow the user to get the number of members in a project, get details about the votes that have been cast on a merge requests, add comments to merge requests, and merge merge requests. --- include/gitlab.sh | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/include/gitlab.sh b/include/gitlab.sh index a4cbb7d..035d71c 100755 --- a/include/gitlab.sh +++ b/include/gitlab.sh @@ -55,6 +55,18 @@ _gitlab_post() { return 0 } +_gitlab_put() { + local token="$1" + local url="$2" + + if ! curl --silent --location -X PUT \ + --header "Private-Token: $token" "$url"; then + return 1 + fi + + return 0 +} + gitlab_import_status() { local host local token @@ -302,6 +314,30 @@ gitlab_project_get_branches() { return 0 } +gitlab_project_get_members() { + local host="$1" + local token="$2" + local project="$3" + + local project_id + local url + local resp + + if ! project_id=$(gitlab_get_project_id "$host" \ + "$token" \ + "$project"); then + return 1 + fi + + url="$host/api/v4/projects/$project_id/members/all" + if ! resp=$(_gitlab_get "$token" "$url"); then + return 1 + fi + + echo "$resp" + return 0 +} + gitlab_project_get_merge_requests() { local host="$1" local token="$2" @@ -321,6 +357,54 @@ gitlab_project_get_merge_requests() { return 0 } +gitlab_project_mergerequest_get_votes() { + local host="$1" + local token="$2" + local project="$3" + local mergerequest="$4" + + local project_id + local url + local resp + + if ! project_id=$(gitlab_get_project_id "$host" "$token" "$project"); then + return 1 + fi + + url="$host/api/v4/projects/$project_id/merge_requests/$mergerequest/award_emoji" + if ! resp=$(_gitlab_get "$token" "$url"); then + return 1 + fi + + echo "$resp" + return 0 +} + +gitlab_project_mergerequest_comment() { + local host="$1" + local token="$2" + local project="$3" + local mergerequest="$4" + local comment="$5" + + local project_id + local url + local data + + if ! project_id=$(gitlab_get_project_id "$host" "$token" "$project"); then + return 1 + fi + + url="$host/api/v4/projects/$project_id/merge_requests/$mergerequest/notes" + data=$(json_object "body" "$comment") + + if ! resp=$(_gitlab_post "$token" "$url" "$data"); then + return 1 + fi + + return 0 +} + gitlab_list_merge_requests() { local host="$1" local token="$2" @@ -343,6 +427,32 @@ gitlab_list_merge_requests() { return 0 } +gitlab_project_merge_merge_request() { + local host="$1" + local token="$2" + local project="$3" + local mergerequest="$4" + + local project_id + local url + local resp + + if [[ "$project" =~ ^[0-9]+$ ]]; then + project_id="$project" + elif ! project_id=$(gitlab_get_project_id "$host" "$token" "$project"); then + return 1 + fi + + url="$host/api/v4/projects/$project_id/merge_requests/$mergerequest/merge" + + if ! resp=$(_gitlab_put "$token" "$url"); then + return 1 + fi + + echo "$resp" + return 0 +} + gitlab_get_project_id() { local host local token -- 2.47.3