From e2e0244fd527a5f46e92ba532a1402e8eed1f6d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9goire=20KUBLER?= <gregoire.kubler@proton.me>
Date: Thu, 21 Mar 2024 15:45:35 +0100
Subject: [PATCH] feat : created script to retrieve last successful job of
 given type in given repo

---
 .gitlab/ci/build.gitlab-ci.yml | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/.gitlab/ci/build.gitlab-ci.yml b/.gitlab/ci/build.gitlab-ci.yml
index 6a1d924f..60993219 100644
--- a/.gitlab/ci/build.gitlab-ci.yml
+++ b/.gitlab/ci/build.gitlab-ci.yml
@@ -45,8 +45,21 @@ build:ubuntu_cpp:
 
         # Retrieve $DEPENDENCY_JOB from latest pipeline of $BRANCH_TO_PULL, independant from its success or failure
         DEPENDENCY_ID=$(curl --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "https://gitlab.eclipse.org/api/v4/users/${USER_ID}/projects?search=${DEPENDENCY_NAME}" | jq -r '.[0].id')
-        PIPELINE_ID=$(curl --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "https://gitlab.eclipse.org/api/v4/projects/$DEPENDENCY_ID/pipelines?ref=${BRANCH_TO_PULL}&order_by=updated_at&sort=desc" | jq -r ".[0].id")
-        JOB_ID=$(curl --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "https://gitlab.eclipse.org/api/v4/projects/$DEPENDENCY_ID/pipelines/$PIPELINE_ID/jobs" | jq --arg job_name "$DEPENDENCY_JOB" 'map(select(.name == $job_name)) | .[0].id')
+        PIPELINES=$(curl --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "https://gitlab.eclipse.org/api/v4/projects/$DEPENDENCY_ID/pipelines?ref=${BRANCH_TO_PULL}&order_by=updated_at&sort=desc")
+        JOB_ID=-1
+        # handle case where there is no branch with the same name
+        for i in $(seq 0 $(jq length <<< "$PIPELINES"))
+        do
+          PIPELINE_ID=$(jq --argjson idx $i '.[$idx].id' <<< $PIPELINES)
+          JOBS=$(curl --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "https://gitlab.eclipse.org/api/v4/projects/$DEPENDENCY_ID/pipelines/$PIPELINE_ID/jobs" | jq --arg job_name "$DEPENDENCY_JOB" 'map(select((.name == $job_name) and (.status == "success")))')
+          if [[ $(jq '. | length' <<< $JOBS) > 0 ]]; then
+            JOB_ID=$(jq '.[0].id' <<< $JOBS)
+            break
+          fi
+        done
+        if( $JOB_ID == -1 ) ; then
+          echo "ERROR : no successful job \"$DEPENDENCY_JOB\" found in branch \"$BRANCH_TO_PULL\" for project \"$DEPENDENCY_NAME\""
+        fi
         echo "curling from \"https://gitlab.eclipse.org/api/v4/projects/$DEPENDENCY_ID/jobs/$JOB_ID/artifacts\""
         curl --location  --output build_artifacts.zip --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "https://gitlab.eclipse.org/api/v4/projects/$DEPENDENCY_ID/jobs/$JOB_ID/artifacts" 
         set +x
-- 
GitLab