From d3a7c46da996d9ee5aa4a346a0f24345e3e8f1da Mon Sep 17 00:00:00 2001
From: Teake Nutma <t.a.nutma@rug.nl>
Date: Mon, 13 Jun 2022 16:34:18 +0200
Subject: [PATCH] Refactor gitlab-release job

---
 templates/monthlymerge.yml    | 24 +-----------------------
 templates/release/_shared.yml | 23 +++++++++++++++++++++++
 templates/release/calver.yml  |  9 +++++++++
 templates/release/semver.yml  |  9 +++++++++
 4 files changed, 42 insertions(+), 23 deletions(-)
 create mode 100644 templates/release/_shared.yml
 create mode 100644 templates/release/calver.yml
 create mode 100644 templates/release/semver.yml

diff --git a/templates/monthlymerge.yml b/templates/monthlymerge.yml
index ec0dd5e..46ed967 100644
--- a/templates/monthlymerge.yml
+++ b/templates/monthlymerge.yml
@@ -1,5 +1,6 @@
 include:
   - local: '/templates/shared/stages.yml'
+  - local: '/templates/release/calver.yml'
 
 release_merge_and_tag:on-schedule:
   stage: release
@@ -53,26 +54,3 @@ release_merge_and_tag:on-schedule:
     # 5. Tag this version.
     - git tag -a "${version}" -m "Automated tag of ${version}."
     - git push origin ${version}
-
-release_gitlab:
-  stage: release
-  image: ${CI_AWE_IMAGE_BASE}/ci-tools:${CI_AWE_IMAGE_TAG}
-  variables:
-    GIT_DEPTH: 0
-  rules:
-    - if: $CI_COMMIT_TAG =~ /^\d{4}\.\d{2}\.\d+/
-  script:
-    # Determine the previous tag. This is a bit brittle because we're sorting lexicographically by tag name
-    # instead of topographically by commits in the git tree. But since we're restricting to YYYY.MM.PATCH
-    # tags, this should be ok.
-    - PREVIOUS_TAG=$(git tag --merged ${CI_COMMIT_SHA} | grep -P '^\d{4}.\d{2}.\d+$' | sort | tail -n 2 | head -n 1)
-    - |
-      if [ -z "$PREVIOUS_TAG" ] || [ "$PREVIOUS_TAG" = "$CI_COMMIT_TAG" ]; then
-        echo "Could not find previous tag, exiting"
-        false
-      fi
-    - echo "Found previous tag ${PREVIOUS_TAG}"
-    - PREVIOUS_TAG_SHA=$(git rev-parse "${PREVIOUS_TAG}")
-    - CHANGES=$(git log-mr --output markdown --pretty oneline --target "$CI_DEFAULT_BRANCH" "$PREVIOUS_TAG_SHA..$CI_COMMIT_SHA" | sort --ignore-case)
-    - DESCRIPTION='##### Changes'$'\n'$'\n'"$CHANGES"
-    - release-cli create --name "$CI_COMMIT_TAG" --description "$DESCRIPTION" --tag-name "$CI_COMMIT_TAG"
diff --git a/templates/release/_shared.yml b/templates/release/_shared.yml
new file mode 100644
index 0000000..525ec2a
--- /dev/null
+++ b/templates/release/_shared.yml
@@ -0,0 +1,23 @@
+include:
+  - local: '/templates/shared/all.yml'
+
+.release_gitlab:
+  stage: release
+  image: ${CI_AWE_IMAGE_BASE}/ci-tools:${CI_AWE_IMAGE_TAG}
+  variables:
+    GIT_DEPTH: 0
+  script:
+    # Determine the previous tag. This is a bit brittle because we're sorting lexicographically by tag name
+    # instead of topographically by commits in the git tree. But since we're restricting to YYYY.MM.PATCH
+    # tags, this should be ok.
+    - PREVIOUS_TAG=$(git topotag ${CI_COMMIT_SHA} | grep -P "${TAG_PATTERN}" | head -n 2 | tail -n 1)
+    - |
+      if [ -z "$PREVIOUS_TAG" ] || [ "$PREVIOUS_TAG" = "$CI_COMMIT_TAG" ]; then
+        echo "Could not find previous tag, exiting"
+        false
+      fi
+    - echo "Found previous tag ${PREVIOUS_TAG}"
+    - PREVIOUS_TAG_SHA=$(git rev-parse "${PREVIOUS_TAG}")
+    - CHANGES=$(git log-mr --output markdown --pretty oneline --target "$CI_DEFAULT_BRANCH" "$PREVIOUS_TAG_SHA..$CI_COMMIT_SHA" | sort --ignore-case)
+    - DESCRIPTION='##### Changes'$'\n'$'\n'"$CHANGES"
+    - release-cli create --name "$CI_COMMIT_TAG" --description "$DESCRIPTION" --tag-name "$CI_COMMIT_TAG"
diff --git a/templates/release/calver.yml b/templates/release/calver.yml
new file mode 100644
index 0000000..1122851
--- /dev/null
+++ b/templates/release/calver.yml
@@ -0,0 +1,9 @@
+include:
+  - local: '/templates/release/_shared.yml'
+
+.release_gitlab_calver:
+  extends: .release_gitlab
+  variables:
+    TAG_PATTERN: '^\d{4}\.\d{2}\.\d+$'
+  rules:
+    - if: $CI_COMMIT_TAG =~ /^\d{4}\.\d{2}\.\d+$/
diff --git a/templates/release/semver.yml b/templates/release/semver.yml
new file mode 100644
index 0000000..83545ab
--- /dev/null
+++ b/templates/release/semver.yml
@@ -0,0 +1,9 @@
+include:
+  - local: '/templates/release/_shared.yml'
+
+.release_gitlab_semver:
+  extends: .release_gitlab
+  variables:
+    TAG_PATTERN: '^\d+\.\d+\.\d+$'
+  rules:
+    - if: $CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+$/
-- 
GitLab