From 2b3acf715b269551c5436d85bafc83ee077b6aa9 Mon Sep 17 00:00:00 2001 From: Lev Lymarenko Date: Wed, 29 Jan 2025 13:35:14 +0300 Subject: [PATCH] fix(cicd): update tag extractor to support prereleases (#1218) * fix: update tag extractor to support prereleases * add full semver regex and do not set latest when prelease * fix: update regex in swagger push job --- .github/workflows/_docker-build-push.yml | 22 ++++++++++++++++++---- .github/workflows/_push_swagger.yml | 6 ++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.github/workflows/_docker-build-push.yml b/.github/workflows/_docker-build-push.yml index d6e16e8e5..123a44361 100644 --- a/.github/workflows/_docker-build-push.yml +++ b/.github/workflows/_docker-build-push.yml @@ -48,14 +48,28 @@ jobs: id: regex with: text: ${{ github.ref }} - regex: '^(refs\/tags\/${{ inputs.service-name }}\/(v\d+\.\d+\.\d+))|(refs\/heads\/(main))$' + # https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string + regex: '^(refs\/tags\/${{ inputs.service-name }}\/v((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?))|(refs\/heads\/(main))$' - name: Extract tag name id: tags_extractor run: | - t=${{ steps.regex.outputs.group2 }} - m=${{ steps.regex.outputs.group4 }} - (if ! [[ "$t" == "" ]]; then echo tags=${{ env.IMAGE_NAME }}:$t, ${{ env.IMAGE_NAME }}:latest; elif ! [[ "$m" == "" ]]; then echo tags=${{ env.IMAGE_NAME }}:$m; else echo tags=; fi) >> $GITHUB_OUTPUT + version=${{ steps.regex.outputs.group2 }} + prerelease=${{ steps.regex.outputs.group6 }} + main=${{ steps.regex.outputs.group9 }} + + if [[ -n "$version" ]]; then + if [[ -n "$prerelease" ]]; then + echo "tags=${{ env.IMAGE_NAME }}:$version" >> $GITHUB_OUTPUT + else + echo "tags=${{ env.IMAGE_NAME }}:$version, ${{ env.IMAGE_NAME }}:latest" >> $GITHUB_OUTPUT + fi + elif [[ -n "$main" ]]; then + echo "tags=${{ env.IMAGE_NAME }}:$main" >> $GITHUB_OUTPUT + else + echo "tags=" >> $GITHUB_OUTPUT + fi + - name: Extract metadata for Docker id: meta diff --git a/.github/workflows/_push_swagger.yml b/.github/workflows/_push_swagger.yml index a1183fd03..2d560cf05 100644 --- a/.github/workflows/_push_swagger.yml +++ b/.github/workflows/_push_swagger.yml @@ -60,12 +60,14 @@ jobs: - name: Get the current tag, branch, or commit hash id: git_info + # regex from: + # https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ ! -z "${{ inputs.version }}" ]; then echo "version=${{ inputs.version }}" >> $GITHUB_ENV else - if [[ "${GITHUB_REF}" =~ refs/tags/${{ inputs.service_name }}/v[0-9]+\.[0-9]+\.[0-9]+ ]]; then - version=$(echo "${GITHUB_REF}" | grep -o 'v[0-9]\+\.[0-9]\+\.[0-9]\+') + if [[ "${GITHUB_REF}" =~ refs/tags/${{ inputs.service_name }}/v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-((0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*))*))?(\+([0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*))?$ ]]; then + version=$(echo "${GITHUB_REF}" | sed -E 's|.*/v||') echo "version=${version}" >> $GITHUB_ENV # If it's the main branch