Skip to content
Snippets Groups Projects
.gitlab-ci.yml 4.21 KiB
Newer Older
# ---------------------------------------------------------------------------------------
# Global
# ---------------------------------------------------------------------------------------
image: "${CI_IMAGES}/python/3.9:99e363bc5feaa27ff18dbe7731a76ff04d7d0deb"

stages:
  - integrate
  - merge
  - build
  - check

variables:
  # CI_IMAGES_BASEPATH: Environment variable configure in gitlab
  CI_IMAGES: ${CI_IMAGES_BASEPATH}/ci-images
  # Include git submodules
  GIT_SUBMODULE_STRATEGY: recursive
  # FIXME: due to a missing feature in GitLab we cannot use this variable
  # in the build stage further down this file. If it ever changes, it has
  # to be changed there too.
  # (https://gitlab.com/gitlab-org/gitlab/-/issues/249583)
  MANIFEST_PROJECT: ${CI_PROJECT_ROOT_NAMESPACE}/yocto/manifest
  MASTER_BRANCH_MANIFEST: dunfell
  MASTER_BRANCH_PROJECT: linux-5.10.57-guf
  # We add the recipe name here to resolve the corresponding bitbake recipe. 
  # Otherwise a very strict repository <-> recipe naming would be required. 
  # The recipe name is used to modify the correct source version.
  BB_RECIPE_NAME: linux-guf
  # Reduced depth for kernel
  GIT_DEPTH: 10

workflow:
  rules:
    # Do not run pipelines on forked projects
    - if: $CI_PROJECT_PATH == "SECO-Northern-Europe/kernel/linux-guf"
        && $CI_MERGE_REQUEST_SOURCE_PROJECT_ID == $CI_MERGE_REQUEST_PROJECT_ID

# ---------------------------------------------------------------------------------------
# Stage: integrate
# ---------------------------------------------------------------------------------------
integrate:
  stage: integrate
  rules:
    # We have to make sure that the pipeline runs for the current manifest
    # master at the time a merge request is created. Otherwise we cannot
    # guarantee a green master after merging.
    - if: $CI_MERGE_REQUEST_IID
  tags:
    - infrastructure
  timeout: 5m
  cache:
    policy: push
  script:
    - cd ${CI_PROJECT_DIR}
    - .gitlab-ci/integrate_into_manifest.py
        --gitlab-url=${CI_SERVER_URL}
        --token=${GITBOT_TOKEN}
        --manifest-project=${MANIFEST_PROJECT}
        --integration-base=${MASTER_BRANCH_MANIFEST}
        --project=${CI_PROJECT_PATH}
        --merge-request=${CI_MERGE_REQUEST_IID}
        --save-revision-to=manifest_revision
        --recipe-name=${BB_RECIPE_NAME}
  artifacts:
    paths:
      - manifest_revision

# ---------------------------------------------------------------------------------------
# Stage: merge
# ---------------------------------------------------------------------------------------
merge:
  stage: merge
  rules:
    - if: $CI_COMMIT_BRANCH == $MASTER_BRANCH_PROJECT
  tags:
    - infrastructure
  timeout: 5m
  script:
    - cd ${CI_PROJECT_DIR}
    - .gitlab-ci/merge_into_manifest.py
        --gitlab-url=${CI_SERVER_URL}
        --token=${GITBOT_TOKEN}
        --manifest-project=${MANIFEST_PROJECT}
        --master-branch=${MASTER_BRANCH_MANIFEST}
        --project=${CI_PROJECT_PATH}
        --master-branch-project=${MASTER_BRANCH_PROJECT}
        --commit=${CI_COMMIT_SHA}
        --save-revision-to=manifest_revision
        --recipe-name=${BB_RECIPE_NAME}
  artifacts:
    paths:
      - manifest_revision

# ---------------------------------------------------------------------------------------
# Stage: build
# ---------------------------------------------------------------------------------------
build:
  stage: build
  rules:
    - if: $CI_MERGE_REQUEST_IID
  trigger:
    project: SECO-Northern-Europe/yocto/manifest
    branch: "integrate/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}"
    strategy: depend

# ---------------------------------------------------------------------------------------
# Stage: check
# ---------------------------------------------------------------------------------------
check:
  stage: check
  rules:
    - if: $CI_MERGE_REQUEST_IID
  needs: ["integrate"]
  tags:
    - infrastructure
  timeout: 5m
  script:
    - cd ${CI_PROJECT_DIR}
    - .gitlab-ci/check_if_integration_branch_is_up_to_date.py
        --gitlab-url=${CI_SERVER_URL}
        --token=${GITBOT_TOKEN}
        --manifest-project=${MANIFEST_PROJECT}
        --integration-base=${MASTER_BRANCH_MANIFEST}
        --project=${CI_PROJECT_PATH}
        --merge-request=${CI_MERGE_REQUEST_IID}