Skip to content
Snippets Groups Projects
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")))')