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