Skip to content
Snippets Groups Projects
.gitlab-ci.yml 5.71 KiB
Newer Older
# ---------------------------------------------------------------------------------------
Tim Jaacks's avatar
Tim Jaacks committed
# Global
# ---------------------------------------------------------------------------------------
  # CI_IMAGES_BASEPATH: Environment variable configure in gitlab
  CI_IMAGES_PATH: ${CI_IMAGES_BASEPATH}/ci-images
  CI_IMAGES_REVISION: 44965ccdd847f1e077670f49d546047f8ad0110c
  CI_IMAGE_PYTHON: "${CI_IMAGES_PATH}/python/3.9:${CI_IMAGES_REVISION}"
  CI_IMAGE_YOCTO: "${CI_IMAGES_PATH}/yocto-build/ubuntu-20.04:${CI_IMAGES_REVISION}"
Tim Jaacks's avatar
Tim Jaacks committed

default:
  tags:
    - infrastructure

Tim Jaacks's avatar
Tim Jaacks committed
stages:
  - analyze
Tim Jaacks's avatar
Tim Jaacks committed
  - deploy
Tim Jaacks's avatar
Tim Jaacks committed

workflow:
  rules:
    - if: $CI_MERGE_REQUEST_IID
    - if: $CI_COMMIT_BRANCH == "master"
Tim Jaacks's avatar
Tim Jaacks committed

# ---------------------------------------------------------------------------------------
Tim Jaacks's avatar
Tim Jaacks committed
# Stage: analyze
# ---------------------------------------------------------------------------------------
pylint:
  stage: analyze
  timeout: 2m
  script:
    - pylint --rcfile=pylintrc *.py

black:
  stage: analyze
  timeout: 2m
  script:
    - black --diff --check *.py

executable:
  stage: analyze
  timeout: 2m
  script:
    - (! find ! -executable -name "*.py" -exec echo "not executable:"" {}" \; | grep .)

yamllint:
  stage: analyze
  timeout: 2m
  script:
    - yamllint -c .yamllint.yml *.yml .*.yml
# ---------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------

.foobar-manifest-projects:
  variables:
    PROJECT_ROOT:
      ${CI_PROJECT_ROOT_NAMESPACE}/yocto/infrastructure/ci-test
    MANIFEST_PROJECT:
      ${PROJECT_ROOT}/minimal-manifest

    DEPLOY_TO:
      ${PROJECT_ROOT}/minimal-foo
      ${PROJECT_ROOT}/minimal-bar

.manifest-projects:
  variables:
    PROJECT_ROOT:
      ${CI_PROJECT_ROOT_NAMESPACE}
    MANIFEST_PROJECT:
      ${PROJECT_ROOT}/yocto/manifest
    DEPLOY_TO:
      ${PROJECT_ROOT}/3rd-party/kuk/uboot-imx-kuk
      ${PROJECT_ROOT}/kernel/linux-guf
      ${PROJECT_ROOT}/kernel/linux-imx-kuk
      ${PROJECT_ROOT}/kernel/modules/egalaxi2c
      ${PROJECT_ROOT}/kernel/modules/gfplatdetect
      ${PROJECT_ROOT}/tools/gf-emc-test-suite
      ${PROJECT_ROOT}/tools/gf-productiontests
      ${PROJECT_ROOT}/tools/gfeeprom
      ${PROJECT_ROOT}/tools/gfxml2dto
      ${PROJECT_ROOT}/tools/guf-show-demo
      ${PROJECT_ROOT}/tools/libmdb
      ${PROJECT_ROOT}/tools/touchcal-conv
      ${PROJECT_ROOT}/tools/xconfig
      ${PROJECT_ROOT}/yocto/config
      ${PROJECT_ROOT}/yocto/layers/meta-guf-distro
      ${PROJECT_ROOT}/yocto/layers/meta-guf-machine

Tim Jaacks's avatar
Tim Jaacks committed
  stage: deploy
  rules:
    - if: $CI_MERGE_REQUEST_IID
Tim Jaacks's avatar
Tim Jaacks committed
  script:
    - cd ${CI_PROJECT_DIR}
    - ./deploy_gitlab_ci.py
      --gitlab-url=${CI_SERVER_URL}
      --token=${GITBOT_TOKEN}
Tim Jaacks's avatar
Tim Jaacks committed
      --submodule=.gitlab-ci
      --revision=${CI_COMMIT_SHA}
      ${DEPLOY_TO}

    - ./generate_job_from_template.py
      --template=gitlab-ci-integration.jinja2
      --image=${CI_IMAGE_PYTHON}
      --branch="integrate/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}"
      --manifest-project=${MANIFEST_PROJECT}
      --parent_merge_request="${CI_MERGE_REQUEST_PROJECT_URL}/-/merge_requests/${CI_MERGE_REQUEST_IID}"
      ${DEPLOY_TO}
      > integration.yml
    - cat integration.yml
  artifacts:
    paths:
      - integration.yml

  extends:
    - .deploy
    - .manifest-projects
  extends:
    - .deploy
    - .foobar-manifest-projects
trigger:
  stage: deploy
  rules:
    - if: $CI_MERGE_REQUEST_IID
  needs: [deploy]
  trigger:
    include:
      - artifact: integration.yml
        job: deploy
    strategy: depend

  rules:
    - if: $CI_MERGE_REQUEST_IID
  trigger:
    include:
      - artifact: integration.yml
        job: deploy-foobar
    strategy: depend
# --------------------------------------------------------------------------------------
# Stage: merge
# --------------------------------------------------------------------------------------
.merge:
  stage: merge
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
  script:
    - cd ${CI_PROJECT_DIR}
    - ./merge_gitlab_ci.py
      --gitlab-url=${CI_SERVER_URL}
      --token=${GITBOT_TOKEN}
      --manifest-project=${MANIFEST_PROJECT}
      --submodule=.gitlab-ci
      --revision=${CI_COMMIT_SHA}
      ${DEPLOY_TO}

merge-foobar:
  extends:
    - .merge
    - .foobar-manifest-projects
merge:
  extends:
    - .merge
    - .manifest-projects

# --------------------------------------------------------------------------------------
# Stage: check
# --------------------------------------------------------------------------------------
check:
  stage: check
  rules:
    - if: $CI_MERGE_REQUEST_IID
  tags:
    - infrastructure
  timeout: 2m
  script:
    - cd ${CI_PROJECT_DIR}
    - MERGE_REQUEST="${CI_MERGE_REQUEST_IID}";

    - MASTER_BRANCH=dunfell
    - ./check_if_integration_branch_is_up_to_date.py
        --gitlab-url=${CI_SERVER_URL}
        --token=${GITBOT_TOKEN}
        --manifest-project=${CI_PROJECT_ROOT_NAMESPACE}/yocto/manifest
        --integration-base=${MASTER_BRANCH}
        --project=${CI_PROJECT_PATH}
        --merge-request=${CI_MERGE_REQUEST_IID}
    # The check is done for both manifests in one job as the retrigger
    # looks for jobs named check, though there can only be one
    - ./check_if_integration_branch_is_up_to_date.py
        --gitlab-url=${CI_SERVER_URL}
        --token=${GITBOT_TOKEN}
        --manifest-project
          ${CI_PROJECT_ROOT_NAMESPACE}/yocto/infrastructure/ci-test/minimal-manifest
        --integration-base=master
        --project=${CI_PROJECT_PATH}
        --merge-request=${CI_MERGE_REQUEST_IID}