diff --git a/.gitlab-ci-automerge.sh b/.gitlab-ci-automerge.sh new file mode 100755 index 00000000..eda4db46 --- /dev/null +++ b/.gitlab-ci-automerge.sh @@ -0,0 +1,58 @@ +#!/bin/sh +set -e +set -x + +echo "Processing for merge requests." + +HOST="${HOST}api/v4/projects/" + +TARGET_BRANCH=$RELEASE + +BODY="{ + \"id\": ${CI_PROJECT_ID}, + \"source_branch\": \"${CI_COMMIT_REF_NAME}\", + \"target_branch\": \"${TARGET_BRANCH}\", + \"remove_source_branch\": true, + \"title\": \"WIP RELEASE: ${CI_COMMIT_REF_NAME}\", + \"assignee_id\":\"${GITLAB_USER_ID}\" +}"; + +LISTMR=`curl --silent "${HOST}${CI_PROJECT_ID}/merge_requests?state=opened" --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}"`; +MATCHES=`echo ${LISTMR} | jq ".[] | {target_branch: .target_branch | match(\"${TARGET_BRANCH}\"), source_branch: .source_branch | match(\"${CI_COMMIT_REF_NAME}\")}"`; + +# No MR found, let's create a new one +if [ -z "${MATCHES}" ]; 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 RELEASE: ${CI_COMMIT_REF_NAME} and assigned to you"; +fi + +# Test +TARGET_BRANCH="${RELEASE}-test" + +BODY="{ + \"id\": ${CI_PROJECT_ID}, + \"source_branch\": \"${CI_COMMIT_REF_NAME}\", + \"target_branch\": \"${TARGET_BRANCH}\", + \"remove_source_branch\": false, + \"title\": \"WIP TEST: ${CI_COMMIT_REF_NAME}\", + \"assignee_id\":\"${GITLAB_USER_ID}\" +}"; + +LISTMR=`curl --silent "${HOST}${CI_PROJECT_ID}/merge_requests?state=opened" --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}"`; +MATCHES=`echo ${LISTMR} | jq ".[] | {target_branch: .target_branch | match(\"${TARGET_BRANCH}\"), source_branch: .source_branch | match(\"${CI_COMMIT_REF_NAME}\")}"`; + +# No MR found, let's create a new one +if [ -z "${MATCHES}" ]; 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 TEST: ${CI_COMMIT_REF_NAME} and assigned to you"; +fi + + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e8fd5f06..43e05b74 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,6 +18,16 @@ before_script: - IMAGE_TAG=$(echo $CI_COMMIT_REF_SLUG | sed "s/^\([[:digit:]][[:digit:]]\)-\([[:digit:]]\)/\1\.\2/g") - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com +merge_request: + before_script: + - apk add curl jq + stage: build + only: + - /(^new\/)|(^mig\/)|(^imp\/)|(^fix\/)/ + script: + - ls -lah + - RELEASE=$(echo $CI_COMMIT_REF_NAME | sed "s{.*\/\(.*\)\/.*{\1{g") HOST=$(echo $CI_PROJECT_URL | sed 's{\(^https://[^/]*/\).*{\1{g') CI_PROJECT_ID=${CI_PROJECT_ID} CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} GITLAB_USER_ID=${GITLAB_USER_ID} PRIVATE_TOKEN=${PRIVATE_TOKEN} ./.gitlab-ci-automerge.sh + build: stage: build script: