# --------------------------------------------------------------------------------------- # Global # --------------------------------------------------------------------------------------- --- variables: # 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}" image: "${CI_IMAGE_PYTHON}" default: tags: - infrastructure stages: - analyze - deploy - check - merge workflow: rules: - if: $CI_MERGE_REQUEST_IID - if: $CI_COMMIT_BRANCH == "master" # --------------------------------------------------------------------------------------- # 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 # --------------------------------------------------------------------------------------- # Stage: deploy-test # --------------------------------------------------------------------------------------- .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 .deploy: stage: deploy rules: - if: $CI_MERGE_REQUEST_IID script: - cd ${CI_PROJECT_DIR} - ./deploy_gitlab_ci.py --gitlab-url=${CI_SERVER_URL} --token=${GITBOT_TOKEN} --manifest-project=${MANIFEST_PROJECT} --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 deploy: extends: - .deploy - .manifest-projects deploy-foobar: 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 trigger-foobar: stage: deploy rules: - if: $CI_MERGE_REQUEST_IID needs: [deploy-foobar] 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}