From 3e4bc84056b746f0cef88c4905c2adb84c7b093b Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen.haas@lakedrops.com>
Date: Fri, 10 Feb 2023 13:25:57 +0100
Subject: [PATCH] docker/gitlab-drupal-ci#19 Refactor merge script

---
 bin/download |   3 ++
 bin/merge    | 118 ++-------------------------------------------------
 2 files changed, 6 insertions(+), 115 deletions(-)

diff --git a/bin/download b/bin/download
index a0ad846..07d2ecc 100755
--- a/bin/download
+++ b/bin/download
@@ -1,5 +1,7 @@
 #!/bin/bash
 
+set -e
+
 case "$1"
 in
   db) task=CollectDatabase;;
@@ -33,4 +35,5 @@ if [[ -d /tmp/${task}/ ]]; then
   fi
 else
   echo "Something went wrong"
+  exit 2
 fi
diff --git a/bin/merge b/bin/merge
index ac9579e..73f9489 100755
--- a/bin/merge
+++ b/bin/merge
@@ -1,56 +1,6 @@
 #!/bin/bash
 
-export DEBUG=no
-
-function gitlab() {
-  EXPECTED=$1
-  METHOD=$2
-  REQUEST=$3
-  shift 3
-  if [[ "${DEBUG}" == "yes" ]]; then
-    echo curl --write-out "\nHTTP-Code:%{http_code}" -X "$METHOD" -s -H "Private-Token: ${GITLAB_PRIVATE_TOKEN}" "${GITLAB_URL}"/api/v4/"$REQUEST" "$@"
-  fi
-  output="$(curl --write-out "\nHTTP-Code:%{http_code}" -X "$METHOD" -s -H "Private-Token: ${GITLAB_PRIVATE_TOKEN}" "${GITLAB_URL}"/api/v4/"$REQUEST" "$@")"
-  if [[ "${DEBUG}" == "yes" ]]; then
-    echo $output
-  fi
-  result="$(echo "$output" | grep "{")"
-  code="$(echo "$output" | grep -m 1 "HTTP-Code:" | cut -d: -f2)"
-  if [[ $code -eq $EXPECTED ]]; then
-    return
-  fi
-  if [[ "${DEBUG}" == "no" ]]; then
-    echo $output
-  fi
-  echo "$METHOD request to $REQUEST did not succeed! Responds with code $code instead of $EXPECTED"
-  exit 99
-}
-
-function isNumeric() {
-  re='^[0-9]+$'
-  if [[ $1 =~ $re ]]; then
-     return 0
-  fi
-  return 1
-}
-
-function parseUrl() {
-  # extract the protocol
-  proto="$(echo "$1" | grep :// | sed -e's,^\(.*://\).*,\1,g')"
-  # remove the protocol
-  url="${1/$proto/}"
-  # extract the user (if any)
-  user="$(echo "$url" | grep @ | cut -d@ -f1)"
-  # extract the host and port
-  hostport="$(echo "${url/$user@/}" | cut -d/ -f1)"
-  # by request host without port
-  # shellcheck disable=SC2001
-  host="$(echo "$hostport" | sed -e 's,:.*,,g')"
-  # by request - try to extract the port
-  port="$(echo "$hostport" | sed -e 's,^.*:,:,g' -e 's,.*:\([0-9]*\).*,\1,g' -e 's,[^0-9],,g')"
-  # extract the path (if any)
-  path="$(echo "$url" | sed -e 's,:,/,g' | grep / | cut -d/ -f2-)"
-}
+set -e
 
 SOURCEBRANCH=$(git rev-parse --abbrev-ref HEAD)
 if [[ "x$TARGETBRANCH" == "x" ]]; then
@@ -67,59 +17,7 @@ if [[ "$TARGETBRANCH" == "$SOURCEBRANCH" ]]; then
   echo "Source and target branches must be different."
   exit 2
 fi
-if [[ -n ${CI_SERVER_HOST} ]]; then
-  GITLAB_URL=https://$CI_SERVER_HOST
-fi
-if [[ "x${GITLAB_URL}" == "x" ]]; then
-  echo "Missing GITLAB_URL environment variable, should be set to e.g. https://gitlab.lakedrops.com"
-  exit 3
-fi
-if [[ "x${GITLAB_PRIVATE_TOKEN}" == "x" ]]; then
-  echo "Missing GITLAB_PRIVATE_TOKEN environment variable"
-  exit 4
-fi
-parseUrl "$GITLAB_URL"
-host1=$host
-parseUrl "$(git config remote.origin.url)"
-host2=$host
-if [[ "$host1" != "$host2" ]]; then
-  echo "This repository doesn't match the provided GitLab instance"
-  exit 5
-fi
 
-if [[ -n ${CI_PROJECT_ID} ]]; then
-  PRJID=$CI_PROJECT_ID
-else
-  echo "Find project ID from remote URL ..."
-  # shellcheck disable=SC2001
-  path="$(echo "$path" | sed -e 's,\..*,,g')"
-  gitlab 200 GET "projects?search_namespaces=1&search=$path"
-  i=0
-  while true
-  do
-    NAMESPACE=$(echo "$result"  | jq -r .[$i]."path_with_namespace")
-    if [[ "$NAMESPACE" == "$path" ]]; then
-      PRJID=$(echo "$result"  | jq -r .[$i]."id")
-      if [[ "a${PRJID}a" == "aa" ]]; then
-        echo "No project found"
-        exit 6
-      fi
-      if [[ $(isNumeric "$PRJID") -eq 1 ]]; then
-        echo "Can not find project ID"
-        exit 6
-      fi
-      break
-    fi
-    if [[ "a${NAMESPACE}a" == "aa" ]]; then
-      echo "No project found"
-      exit 6
-    fi
-    ((i=i+1))
-  done
-fi
-
-echo "Create merge request ..."
-# Create MR
 TITLE="Merging $SOURCEBRANCH into $TARGETBRANCH"
 if [[ "${SKIPCONFIGIMPORT}" == "yes" ]]; then
   TITLE="${TITLE} [SKIP_CONFIG_IMPORT]"
@@ -130,16 +28,6 @@ fi
 if [[ "$1" == "major" ]]; then
   TITLE="${TITLE} [MAJOR_VERSION]"
 fi
-gitlab 201 POST projects/"$PRJID"/merge_requests --data "source_branch=$SOURCEBRANCH" --data "target_branch=$TARGETBRANCH" --data "title=$TITLE"
-MRID=$(echo "$result"  | jq -r ."iid")
-if [[ $(isNumeric "$MRID") -eq 1 ]]; then
-  echo "Can not create merge request"
-  exit 7
-fi
-echo "Created MR at $(echo "$result"  | jq -r ."web_url")"
 
-echo "Merge ..."
-# Merge MR
-sleep 5
-gitlab 200 PUT projects/"$PRJID"/merge_requests/"$MRID"/merge --data "should_remove_source_branch=0"
-echo "Merged successfully!"
+glab mr create --fill --yes --source-branch ${SOURCEBRANCH} --target-branch ${TARGETBRANCH} --title "$TITLE"
+glab mr merge --yes ${TARGETBRANCH}
-- 
GitLab