summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml12
-rwxr-xr-xutils/autoMergeRequest.sh35
2 files changed, 47 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 02509fd4..eb1b10a3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,3 +2,15 @@ include:
- project: 'ci/ci-templates'
ref: master
file: .ci-build-apk-fdroid.yml
+
+# https://about.gitlab.com/blog/how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci/
+weblate-integration-auto-mr:
+ image: ${INFRA_IMAGE}
+ stage: deploy
+ rules:
+ - if: $CI_COMMIT_BRANCH == "weblate-integration" && $AUTO_MR_TOKEN != null
+ script:
+ - HOST=${CI_PROJECT_URL} CI_PROJECT_ID=${CI_PROJECT_ID}
+ CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME}
+ GITLAB_USER_ID=${GITLAB_USER_ID}
+ PRIVATE_TOKEN=${AUTO_MR_TOKEN} ./utils/autoMergeRequest.sh
diff --git a/utils/autoMergeRequest.sh b/utils/autoMergeRequest.sh
new file mode 100755
index 00000000..bd33db0c
--- /dev/null
+++ b/utils/autoMergeRequest.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# Extract the host where the server is running, and add the URL to the APIs
+[[ $HOST =~ ^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}" | python3 -c "import sys, json; print(json.load(sys.stdin)['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";