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