-
Grégoire Kubler authoredGrégoire Kubler authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
build.gitlab-ci.yml 10.51 KiB
include:
- remote: 'https://gitlab.eclipse.org/eclipse/aidge/gitlab_shared_files/-/raw/main/.gitlab/ci/shared_script.gitlab-ci.yml'
build:ubuntu_cpp:
stage: build
needs: []
tags:
- docker
script:
# Download dependencies
# aidge_core
- DEPENDENCY_NAME="aidge_core"
- DEPENDENCY_JOB="build:ubuntu_cpp"
- API_URL="https://gitlab.eclipse.org/api/v4"
# - !reference [.download_dependency, script]
- apt-get -qq install -y jq
# Check if a branch with the same name exist on the dependency repository
- BRANCH_TO_PULL="dev" # default branch
- set -x
- >
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
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
else # CASE CASUAL COMMIT
# checking if given branch exist on official repo or on fork
if [[ $(curl -s -o /dev/null -w "%{http_code}" "https://gitlab.eclipse.org/eclipse/${CI_PROJECT_NAMESPACE}/$DEPENDENCY_NAME/-/tree/$CI_COMMIT_REF_NAME") -ne 302 && $(curl -s -o /dev/null -w "%{http_code}" "https://gitlab.eclipse.org/eclipse/${CI_PROJECT_NAMESPACE}/$DEPENDENCY_NAME/-/tree/$CI_COMMIT_REF_NAME") -ne 404 ]]; then
PULL_FROM_FORK=FALSE
BRANCH_TO_PULL=$CI_COMMIT_REF_NAME
elif [[ $(curl -s -o /dev/null -w "%{http_code}" "https://gitlab.eclipse.org/${CI_PROJECT_NAMESPACE}/$DEPENDENCY_NAME/-/tree/$CI_COMMIT_REF_NAME") -ne 302 && $(curl -s -o /dev/null -w "%{http_code}" "https://gitlab.eclipse.org/${CI_PROJECT_NAMESPACE}/$DEPENDENCY_NAME/-/tree/$CI_COMMIT_REF_NAME") -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\""
# Get project information
- PROJECT_INFO=$(curl -s --header "PRIVATE-TOKEN:${CI_JOB_TOKEN}" "${API_URL}/projects/${DEPENDENCY_NAME}")
- OWNER=$(echo "$PROJECT_INFO" | jq -r '.owner')
- echo "${CI_PROJECT_PATH}"
- echo "${CI_PROJECT_DIR}"
- echo "${CI_PROJECT_URL}"
- echo "${CI_PROJECT_NAMESPACE}"
- echo "${CI_PROJECT_NAMESPACE_ID}"
- PROJECT_INFO=$(curl -s --header "PRIVATE-TOKEN:${CI_JOB_TOKEN}" "${API_URL}/projects/${CI_PROJECT_PATH}")
- >
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 --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "${API_URL}/users" | jq -r '.[0].id')
DEPENDENCY_ID=$(curl --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "${API_URL}/users/${CI_PROJECT_NAMESPACE_ID}/projects?search=${DEPENDENCY_NAME}" | jq -r '.[0].id')
fi
# Retrieve latest successful $DEPENDENCY_JOB $BRANCH_TO_PULL
- PIPELINES=$(curl -s --header "PRIVATE_TOKEN:$CI_JOB_TOKEN" "${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 --header "PRIVATE_TOKEN: $CI_JOB_TOKEN" "${API_URL}/projects/$DEPENDENCY_ID/pipelines/$PIPELINE_ID/jobs" | jq --arg job_name "$DEPENDENCY_JOB" 'map(select((.name == $job_name) and (.status == "success")))')