From: Matthias Kruk Date: Thu, 10 Jun 2021 05:59:18 +0000 (+0900) Subject: include/gitlab: Add functions for interacting with merge requests X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=89781e59c426d69a0969497b0874f6f5e070fb43;p=toolbox 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. --- 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