Commit 69e285c8 authored by Grégoire Kubler's avatar Grégoire Kubler
Browse files

feat: reworked the way tag artefacts are retrieved in ubuntu:select_jobs

now parses tag values to look for latest corresponding tag instead of retrieving tag chronologically
parent 38d60b74
Loading
Loading
Loading
Loading
+33 −20
Original line number Diff line number Diff line
@@ -88,27 +88,40 @@
        ######################################
        # CASE WHERE A COMMIT TAG IS CREATED
        elif [[ ! -z "$CI_COMMIT_TAG" ]]; then
        	PROJECT_CURR_TAG_DATE=$(jq '.commit.created_at' <<<$(curl -s "$API_URL/projects/$CI_PROJECT_ID/repository/tags/$CI_COMMIT_TAG"))
            # retrieving data from current project
            TAG_MAJOR=$(echo "$CI_COMMIT_TAG" | awk -F'[v.]' '{print $2}')
            TAG_MINOR=$(echo "$CI_COMMIT_TAG" | awk -F'[v.]' '{print $3}')
            TAG_FIX=$(echo "$CI_COMMIT_TAG" | awk -F'[v.]' '{print $4}')
    	    echo "Retrieving tags of $DEP_NAME via url $DEP_API_URL/repository/tags?per_page=100."
            DEP_TAGS=$(jq --slurp '
                .[]
                | sort_by(.commit.created_at)
                | reverse
                ' <<<$(curl -s "$DEP_API_URL/repository/tags?per_page=100"))
        	TAGS_BEFORE_DATE=$(jq --slurp --arg before_date "$PROJECT_CURR_TAG_DATE" '
              .[]
              | map(select(.commit.created_at != null and (.commit.created_at <= $before_date)))
          ' <<<"$DEP_TAGS")

        	if [[ $(jq length <<<"$TAGS_BEFORE_DATE") != 0 ]]; then
        		BRANCH_TO_PULL=$(jq -r '.[0].name' <<<"$TAGS_BEFORE_DATE")
        		echo "Found release : $BRANCH_TO_PULL. Using it as \$BRANCH_TO_PULL."
            if [[ $(jq length <<< $DEP_TAGS) == 0 ]]; then
              echo "No tag found for $DEP_NAME at url $DEP_API_URL/repository/tags?per_page=100"
              echo "Leaving early."
              exit 1
            fi

            echo "Looking for latest fix release corresponding to minor  release : v$TAG_MAJOR.$TAG_MINOR.*"
            SELECTED_DEPS_TAGS=$(jq --arg major "$TAG_MAJOR" \
                                    --arg minor "$TAG_MINOR" \
                                    'map(select(.name | startswith("v\($major).\($minor).")))' <<< "$DEP_TAGS")
            if [[ $(jq length <<< $SELECTED_DEPS_TAGS) == 0 ]]; then
              echo "No release v$TAG_MAJOR.$TAG_MINOR.* found. Looking for latest minor release v$TAG_MAJOR.*.* in $DEP_NAME."
              SELECTED_DEPS_TAGS=$(jq --arg major "$TAG_MAJOR" \
                                    'map(select(.name | startswith("v\($major).")))' <<< "$DEP_TAGS")
            fi 
            if [[ $(jq length <<< $SELECTED_DEPS_TAGS) > 0 ]]; then
            	BRANCH_TO_PULL=$(jq -r '.[0].name' <<<"$SELECTED_DEPS_TAGS")
              echo "Found a release with corresponding $BRANCH_TO_PULL"
            else
        		echo "Found no release predating $CI_PROJECT_NAME $CI_COMMIT_TAG's date : $CI_COMMIT_TAG."
        		echo "Retrieving latest repo tag."
              echo "No release v$TAG_MAJOR.*.* found. Simply retrieving latest release v*.*.* in $DEP_NAME."
            	BRANCH_TO_PULL=$(jq -r '.[0].name' <<<"$DEP_TAGS")
        		echo "\$BRANCH_TO_PULL = $BRANCH_TO_PULL"
            fi
            echo "Found release : $BRANCH_TO_PULL. Using it as \$BRANCH_TO_PULL."

        ###########################################
        # CASE CASUAL COMMIT or Draft MR PIPELINE