diff --git a/.gitlab/ci/shared_script.gitlab-ci.yml b/.gitlab/ci/shared_script.gitlab-ci.yml index 88d4f6b73449d47256e06d6f4e70ad503280e94a..2c48ba32abf096a2007b6a724d96ff35e707ef1a 100644 --- a/.gitlab/ci/shared_script.gitlab-ci.yml +++ b/.gitlab/ci/shared_script.gitlab-ci.yml @@ -4,42 +4,73 @@ # - DEPENDENCY_NAME: Name of the dependency project # - DEPENDENCY_JOB: Name of the dependency job from which you want to pull artifacts script: + - apt-get -qq install -y jq + - GITLAB_ECLIPSE_URL="https://gitlab.eclipse.org/" + - API_URL="https://gitlab.eclipse.org/api/v4" + # Check if a branch with the same name exist on the dependency repository - BRANCH_TO_PULL="dev" # default branch - # Check if a branch with the same name exist on the dependance repository - > - if [ "$CI_MERGE_REQUEST_ID" ]; then + if [ "$CI_MERGE_REQUEST_ID" ]; then # CASE MERGE REQUEST echo "Merge request pipeline detected" - if [ $(curl -s -o /dev/null -w "%{http_code}" "https://gitlab.eclipse.org/eclipse/aidge/$DEPENDENCY_NAME/-/tree/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") -eq 404 ]; then + if [ $(curl -s -o /dev/null -w "%{http_code}" "$GITLAB_ECLIPSE_URL/eclipse/aidge/$DEPENDENCY_NAME/-/tree/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") -eq 404 ]; then echo "Pull from default" else # Pulling from target branch echo "Pull from ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}" BRANCH_TO_PULL=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} fi - elif [ $(curl -s -o /dev/null -w "%{http_code}" "https://gitlab.eclipse.org/eclipse/aidge/$DEPENDENCY_NAME/-/tree/$CI_COMMIT_REF_NAME") -eq 404 ]; then - echo "Pull from default" - else - # Pulling from branch with same name - echo "Pull from branch name" - BRANCH_TO_PULL=${CI_COMMIT_REF_NAME} + else # CASE CASUAL COMMIT + # checking if given branch exist on official repo or on fork + RETURN_HTTP_CODE_OFFICIAL_REPO=$(curl -s -o /dev/null -w "%{http_code}" "$GITLAB_ECLIPSE_URL/eclipse/$CI_PROJECT_NAMESPACE/$DEPENDENCY_NAME/-/tree/$CI_COMMIT_REF_NAME") + RETURN_HTTP_CODE_FORK=$(curl -s -o /dev/null -w "%{http_code}" "$GITLAB_ECLIPSE_URL/$CI_PROJECT_NAMESPACE/$DEPENDENCY_NAME/-/tree/$CI_COMMIT_REF_NAME") + if [[ $RETURN_HTTP_CODE_OFFICIAL_REPO -ne 302 && $RETURN_HTTP_CODE_OFFICIAL_REPO -ne 404 ]]; then + PULL_FROM_FORK=FALSE + BRANCH_TO_PULL=$CI_COMMIT_REF_NAME + elif [[ $RETURN_HTTP_CODE_FORK -ne 302 && $RETURN_HTTP_CODE_FORK -ne 302 ]]; then + PULL_FROM_FORK=TRUE + BRANCH_TO_PULL=$CI_COMMIT_REF_NAME + else + PULL_FROM_FORK=FALSE + echo "No branch \"$CI_COMMIT_REF_NAME\" found for \"$DEPENDENCY_NAME\" in official or forked repos." + fi + fi + - echo "Pulling from branch:\"$BRANCH_TO_PULL\"" + + - > + if [[ ! $PULL_FROM_FORK ]]; then # nominal case : we are in the official project + DEPENDENCY_ID=$(curl "${API_URL}/groups/${CI_PROJECT_NAMESPACE_ID}/projects?search=${DEPENDENCY_NAME}" | jq -r '.[0].id') + else # case for fork + echo "Retrieving build_artifacts from user' forked project." + USER_ID=$(curl "${API_URL}/users?username=${CI_PROJECT_ROOT_NAMESPACE}" | jq -r '.[0].id') + DEPENDENCY_ID=$(curl "${API_URL}/users/${USER_ID}/projects?search=${DEPENDENCY_NAME}" | jq -r '.[0].id') fi - - apt-get install -y jq - # Check group namespace is valid, if not DEPENDENCY_ID=6437 (aidge group ID) + + # Retrieve latest successful $DEPENDENCY_JOB from $BRANCH_TO_PULL + - PIPELINES=$(curl -s "${API_URL}/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 -s "${API_URL}/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 [ $(curl -s -o /dev/null -w "%{http_code}" "https://gitlab.eclipse.org/api/v4/groups/${CI_PROJECT_NAMESPACE_ID}") -eq 404 ]; then - echo "Using aidge group id by default" - DEPENDENCY_ID=$(curl "https://gitlab.eclipse.org/api/v4/groups/6437/projects?search=${DEPENDENCY_NAME}" | jq -r '.[0].id') + if( $JOB_ID == -1 ) ; then + echo "ERROR : no successful job \"$DEPENDENCY_JOB\" found in branch \"$BRANCH_TO_PULL\" for project \"$DEPENDENCY_NAME\"" else - DEPENDENCY_ID=$(curl "https://gitlab.eclipse.org/api/v4/groups/${CI_PROJECT_NAMESPACE_ID}/projects?search=${DEPENDENCY_NAME}" | jq -r '.[0].id') + echo "Successful job \"$DEPENDENCY_JOB\" found in branch \"$BRANCH_TO_PULL\" for project \"$DEPENDENCY_NAME\"" fi - - echo "Project ID for ${DEPENDENCY_NAME} is ${DEPENDENCY_ID}" - - echo "curling from https://gitlab.eclipse.org/api/v4/projects/$DEPENDENCY_ID/jobs/artifacts/$BRANCH_TO_PULL/download?job=$DEPENDENCY_JOB" - - curl -f --location --output build_artifacts.zip "https://gitlab.eclipse.org/api/v4/projects/$DEPENDENCY_ID/jobs/artifacts/$BRANCH_TO_PULL/download?job=$DEPENDENCY_JOB" + - echo "curling from \"${API_URL}/projects/$DEPENDENCY_ID/jobs/$JOB_ID/artifacts\"" + - curl --location --output build_artifacts.zip "${API_URL}/projects/$DEPENDENCY_ID/jobs/$JOB_ID/artifacts" + - unzip -q -o build_artifacts.zip -d . - rm -rf build_cpp - .download_dependency_windows: # Note: # For this script to work you need to define teh following variables