#!/usr/bin/env bash set -e # Gotten from: # https://about.gitlab.com/2017/09/05/how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci/ # This shall automatically create a merge request right after the build has been pushed. # Added some touches from: https://gitlab.com/tmaier/gitlab-auto-merge-request/blob/develop/merge-request.sh if [ -z "$PRIVATE_TOKEN" ]; then echo "PRIVATE_TOKEN not set" echo "Please set the GitLab Private Token as PRIVATE_TOKEN" exit 1 fi # Extract the host where the server is running, and add the URL to the APIs [[ $CI_PROJECT_URL =~ ^https?://[^/]+ ]] && HOST="${BASH_REMATCH[0]}/api/v4/projects/" # Look which is the default branch TARGET_BRANCH=`curl --silent "${HOST}${CI_PROJECT_ID}" --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}" | jq --raw-output '.default_branch'`; # The description of our new MR, we want to remove the branch after the MR has # been closed BODY="{ \"id\": ${CI_PROJECT_ID}, \"source_branch\": \"${CI_COMMIT_REF_NAME}\", \"target_branch\": \"${TARGET_BRANCH}\", \"remove_source_branch\": true, \"title\": \"WIP: ${CI_COMMIT_REF_NAME}\", \"assignee_id\":\"${GITLAB_USER_ID}\" }"; # Require a list of all the merge request and take a look if there is already # one with the same source branch LISTMR=`curl --silent "${HOST}${CI_PROJECT_ID}/merge_requests?state=opened" --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}"`; COUNTBRANCHES=`echo ${LISTMR} | grep -o "\"source_branch\":\"${CI_COMMIT_REF_NAME}\"" | wc -l`; # No MR found, let's create a new one if [ ${COUNTBRANCHES} -eq "0" ]; then curl -X POST "${HOST}${CI_PROJECT_ID}/merge_requests" \ --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}" \ --header "Content-Type: application/json" \ --data "${BODY}"; echo "Opened a new merge request: WIP: ${CI_COMMIT_REF_NAME} and assigned to you"; exit; fi echo "No new merge request opened";