From 69e285c8dba35e3722ea9b81c34713707c1b5cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire?= <gregoire.kubler@proton.me> Date: Tue, 26 Nov 2024 17:31:03 +0100 Subject: [PATCH] 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 --- .gitlab/ci/download/select_jobs.gitlab-ci.yml | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/.gitlab/ci/download/select_jobs.gitlab-ci.yml b/.gitlab/ci/download/select_jobs.gitlab-ci.yml index 0768d79..2421a87 100644 --- a/.gitlab/ci/download/select_jobs.gitlab-ci.yml +++ b/.gitlab/ci/download/select_jobs.gitlab-ci.yml @@ -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")) - 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") + # 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")) - 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." - else - echo "Found no release predating $CI_PROJECT_NAME $CI_COMMIT_TAG's date : $CI_COMMIT_TAG." - echo "Retrieving latest repo tag." - BRANCH_TO_PULL=$(jq -r '.[0].name' <<<"$DEP_TAGS") - echo "\$BRANCH_TO_PULL = $BRANCH_TO_PULL" - fi + 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 "No release v$TAG_MAJOR.*.* found. Simply retrieving latest release v*.*.* in $DEP_NAME." + BRANCH_TO_PULL=$(jq -r '.[0].name' <<<"$DEP_TAGS") + fi + echo "Found release : $BRANCH_TO_PULL. Using it as \$BRANCH_TO_PULL." ########################################### # CASE CASUAL COMMIT or Draft MR PIPELINE -- GitLab