| variables: | |
| DRM_CI_PROJECT_PATH: &drm-ci-project-path mesa/mesa | |
| DRM_CI_COMMIT_SHA: &drm-ci-commit-sha 25881c701a56233dd8fc7f92db6884a73949d63d | |
| UPSTREAM_REPO: https://gitlab.freedesktop.org/drm/kernel.git | |
| TARGET_BRANCH: drm-next | |
| IGT_VERSION: 129d5b10baaadea1d6cd6377341c4cb42e7ee6fd | |
| DEQP_RUNNER_GIT_URL: https://gitlab.freedesktop.org/mesa/deqp-runner.git | |
| DEQP_RUNNER_GIT_TAG: v0.20.0 | |
| FDO_UPSTREAM_REPO: helen.fornazier/linux # The repo where the git-archive daily runs | |
| MESA_TEMPLATES_COMMIT: &ci-templates-commit aec7a6ce7bb38902c70641526f6611e27141784a | |
| DRM_CI_PROJECT_URL: https://gitlab.freedesktop.org/${DRM_CI_PROJECT_PATH} | |
| CI_PRE_CLONE_SCRIPT: |- | |
| set -o xtrace | |
| curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -s ${DRM_CI_PROJECT_URL}/-/raw/${DRM_CI_COMMIT_SHA}/.gitlab-ci/download-git-cache.sh -o download-git-cache.sh | |
| bash download-git-cache.sh | |
| rm download-git-cache.sh | |
| set +o xtrace | |
| S3_JWT_FILE: /s3_jwt | |
| S3_JWT_FILE_SCRIPT: |- | |
| echo -n '${S3_JWT}' > '${S3_JWT_FILE}' && | |
| unset CI_JOB_JWT S3_JWT # Unsetting vulnerable env variables | |
| S3_HOST: s3.freedesktop.org | |
| # This bucket is used to fetch the kernel image | |
| S3_KERNEL_BUCKET: mesa-rootfs | |
| # Bucket for git cache | |
| S3_GITCACHE_BUCKET: git-cache | |
| # Bucket for the pipeline artifacts pushed to S3 | |
| S3_ARTIFACTS_BUCKET: artifacts | |
| # Base path used for various artifacts | |
| S3_BASE_PATH: "${S3_HOST}/${S3_KERNEL_BUCKET}" | |
| # per-pipeline artifact storage on MinIO | |
| PIPELINE_ARTIFACTS_BASE: ${S3_HOST}/${S3_ARTIFACTS_BUCKET}/${CI_PROJECT_PATH}/${CI_PIPELINE_ID} | |
| # per-job artifact storage on MinIO | |
| JOB_ARTIFACTS_BASE: ${PIPELINE_ARTIFACTS_BASE}/${CI_JOB_ID} | |
| KERNEL_IMAGE_BASE: https://${S3_HOST}/${S3_KERNEL_BUCKET}/${KERNEL_REPO}/${KERNEL_TAG} | |
| LAVA_TAGS: subset-1-gfx | |
| # Default priority for non-merge pipelines | |
| FDO_RUNNER_JOB_PRIORITY_TAG_X86_64: "" # Empty tags are ignored by gitlab | |
| FDO_RUNNER_JOB_PRIORITY_TAG_X86_64_KVM: kvm | |
| FDO_RUNNER_JOB_PRIORITY_TAG_AARCH64: aarch64 | |
| JOB_PRIORITY: 30 | |
| ARTIFACTS_BASE_URL: https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-/${CI_PROJECT_NAME}/-/jobs/${CI_JOB_ID}/artifacts | |
| # Python scripts for structured logger | |
| PYTHONPATH: "$PYTHONPATH:$CI_PROJECT_DIR/install" | |
| # Mesa-specific variables that shouldn't be forwarded to DUTs and crosvm | |
| CI_EXCLUDE_ENV_VAR_REGEX: 'SCRIPTS_DIR|RESULTS_DIR' | |
| default: | |
| id_tokens: | |
| S3_JWT: | |
| aud: https://s3.freedesktop.org | |
| before_script: | |
| - export SCRIPTS_DIR=$(mktemp -d) | |
| - curl -L -s --retry 4 -f --retry-all-errors --retry-delay 60 -O --output-dir "${SCRIPTS_DIR}" "${DRM_CI_PROJECT_URL}/-/raw/${DRM_CI_COMMIT_SHA}/.gitlab-ci/setup-test-env.sh" | |
| - source ${SCRIPTS_DIR}/setup-test-env.sh | |
| - eval "$S3_JWT_FILE_SCRIPT" | |
| - echo -e "\e[0Ksection_start:$(date +%s):drm_ci_download_section[collapsed=true]\r\e[0KDownloading mesa from $DRM_CI_PROJECT_URL/-/archive/$DRM_CI_COMMIT_SHA/mesa-$DRM_CI_COMMIT_SHA.tar.gz" | |
| - cd $CI_PROJECT_DIR | |
| - curl --output - $DRM_CI_PROJECT_URL/-/archive/$DRM_CI_COMMIT_SHA/mesa-$DRM_CI_COMMIT_SHA.tar.gz | tar -xz | |
| - mv mesa-$DRM_CI_COMMIT_SHA/.gitlab-ci* . | |
| - mv mesa-$DRM_CI_COMMIT_SHA/bin . | |
| - rm -rf mesa-$DRM_CI_COMMIT_SHA/ | |
| - echo -e "\e[0Ksection_end:$(date +%s):drm_ci_download_section\r\e[0K" | |
| after_script: | |
| - > | |
| set +x | |
| test -e "${S3_JWT_FILE}" && | |
| export S3_JWT="$(<${S3_JWT_FILE})" && | |
| rm "${S3_JWT_FILE}" | |
| include: | |
| - project: 'freedesktop/ci-templates' | |
| ref: *ci-templates-commit | |
| file: | |
| - '/templates/alpine.yml' | |
| - '/templates/debian.yml' | |
| - '/templates/fedora.yml' | |
| - '/templates/ci-fairy.yml' | |
| - project: *drm-ci-project-path | |
| ref: *drm-ci-commit-sha | |
| file: | |
| - '/.gitlab-ci/bare-metal/gitlab-ci.yml' | |
| - '/.gitlab-ci/build/gitlab-ci.yml' | |
| - '/.gitlab-ci/container/gitlab-ci.yml' | |
| - '/.gitlab-ci/farm-rules.yml' | |
| - '/.gitlab-ci/lava/gitlab-ci.yml' | |
| - '/.gitlab-ci/test-source-dep.yml' | |
| - '/.gitlab-ci/test/gitlab-ci.yml' | |
| - '/src/amd/ci/gitlab-ci-inc.yml' | |
| - '/src/freedreno/ci/gitlab-ci-inc.yml' | |
| - '/src/gallium/drivers/crocus/ci/gitlab-ci-inc.yml' | |
| - '/src/gallium/drivers/llvmpipe/ci/gitlab-ci-inc.yml' | |
| - '/src/gallium/drivers/nouveau/ci/gitlab-ci-inc.yml' | |
| - '/src/gallium/drivers/softpipe/ci/gitlab-ci-inc.yml' | |
| - '/src/gallium/drivers/virgl/ci/gitlab-ci-inc.yml' | |
| - '/src/gallium/drivers/zink/ci/gitlab-ci-inc.yml' | |
| - '/src/gallium/frontends/lavapipe/ci/gitlab-ci-inc.yml' | |
| - '/src/gallium/frontends/rusticl/ci/gitlab-ci.yml' | |
| - '/src/intel/ci/gitlab-ci-inc.yml' | |
| - '/src/microsoft/ci/gitlab-ci-inc.yml' | |
| - '/src/nouveau/ci/gitlab-ci-inc.yml' | |
| - '/src/virtio/ci/gitlab-ci-inc.yml' | |
| - 'docs/gitlab-ci.yml' | |
| - drivers/gpu/drm/ci/image-tags.yml | |
| - drivers/gpu/drm/ci/container.yml | |
| - drivers/gpu/drm/ci/static-checks.yml | |
| - drivers/gpu/drm/ci/build.yml | |
| - drivers/gpu/drm/ci/test.yml | |
| - drivers/gpu/drm/ci/check-devicetrees.yml | |
| - drivers/gpu/drm/ci/kunit.yml | |
| - 'https://gitlab.freedesktop.org/gfx-ci/lab-status/-/raw/main/lab-status.yml' | |
| stages: | |
| - sanity | |
| - container | |
| - deploy | |
| - git-archive | |
| - build-for-tests | |
| - build-only | |
| - static-checks | |
| - kunit | |
| - code-validation | |
| - amdgpu | |
| - i915 | |
| - mediatek | |
| - meson | |
| - msm | |
| - panfrost | |
| - panthor | |
| - powervr | |
| - rockchip | |
| - software-driver | |
| # YAML anchors for rule conditions | |
| # -------------------------------- | |
| .rules-anchors: | |
| rules: | |
| # do not duplicate pipelines on merge pipelines | |
| - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" | |
| when: never | |
| # merge pipeline | |
| - if: &is-merge-attempt $GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event" | |
| # post-merge pipeline | |
| - if: &is-post-merge $GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "push" | |
| # Pre-merge pipeline (because merge pipelines are already caught above) | |
| - if: &is-merge-request $CI_PIPELINE_SOURCE == "merge_request_event" | |
| # Push to a branch on a fork | |
| - if: &is-push-to-fork $CI_PIPELINE_SOURCE == "push" | |
| # nightly pipeline | |
| - if: &is-scheduled-pipeline $CI_PIPELINE_SOURCE == "schedule" | |
| # pipeline for direct pushes that bypassed the CI | |
| - if: &is-direct-push $CI_PIPELINE_SOURCE == "push" && $GITLAB_USER_LOGIN != "marge-bot" | |
| # Rules applied to every job in the pipeline | |
| .common-rules: | |
| rules: | |
| - if: *is-push-to-fork | |
| when: manual | |
| .never-post-merge-rules: | |
| rules: | |
| - if: *is-post-merge | |
| when: never | |
| # Note: make sure the branches in this list are the same as in | |
| # `.build-only-delayed-rules` below. | |
| .container-rules: | |
| rules: | |
| - !reference [.common-rules, rules] | |
| # Run when re-enabling a disabled farm, but not when disabling it | |
| - !reference [.disable-farm-mr-rules, rules] | |
| # Never run immediately after merging, as we just ran everything | |
| - !reference [.never-post-merge-rules, rules] | |
| # Only rebuild containers in merge pipelines if any tags have been | |
| # changed, else we'll just use the already-built containers | |
| - if: *is-merge-attempt | |
| changes: &image_tags_path | |
| - drivers/gpu/drm/ci/image-tags.yml | |
| when: on_success | |
| # Skip everything for pre-merge and merge pipelines which don't change | |
| # anything in the build; we only do this for marge-bot and not user | |
| # pipelines in a MR, because we might still need to run it to copy the | |
| # container into the user's namespace. | |
| - if: *is-merge-attempt | |
| when: never | |
| # Any MR pipeline which changes image-tags.yml needs to be able to | |
| # rebuild the containers | |
| - if: *is-merge-request | |
| changes: *image_tags_path | |
| when: manual | |
| # ... however for MRs running inside the user namespace, we may need to | |
| # run these jobs to copy the container images from upstream | |
| - if: *is-merge-request | |
| when: manual | |
| # Build everything after someone bypassed the CI | |
| - if: *is-direct-push | |
| when: manual | |
| # Scheduled pipelines reuse already-built containers | |
| - if: *is-scheduled-pipeline | |
| when: never | |
| # Allow building everything in fork pipelines, but build nothing unless | |
| # manually triggered | |
| - when: manual | |
| # Note: make sure the branches in this list are the same as in | |
| # `.build-only-delayed-rules` below. | |
| .build-rules: | |
| rules: | |
| - !reference [.common-rules, rules] | |
| # Run when re-enabling a disabled farm, but not when disabling it | |
| - !reference [.disable-farm-mr-rules, rules] | |
| # Never run immediately after merging, as we just ran everything | |
| - !reference [.never-post-merge-rules, rules] | |
| # Build everything in merge pipelines | |
| - if: *is-merge-attempt | |
| when: on_success | |
| # Same as above, but for pre-merge pipelines | |
| - if: *is-merge-request | |
| when: manual | |
| # Build everything after someone bypassed the CI | |
| - if: *is-direct-push | |
| when: manual | |
| # Build everything in scheduled pipelines | |
| - if: *is-scheduled-pipeline | |
| when: on_success | |
| # Allow building everything in fork pipelines, but build nothing unless | |
| # manually triggered | |
| - when: manual | |
| # Repeat of the above but with `when: on_success` replaced with | |
| # `when: delayed` + `start_in:`, for build-only jobs. | |
| # Note: make sure the branches in this list are the same as in | |
| # `.build-rules` above. | |
| .build-only-delayed-rules: | |
| rules: | |
| - !reference [.common-rules, rules] | |
| # Run when re-enabling a disabled farm, but not when disabling it | |
| - !reference [.disable-farm-mr-rules, rules] | |
| # Never run immediately after merging, as we just ran everything | |
| - !reference [.never-post-merge-rules, rules] | |
| # Build everything in merge pipelines | |
| - if: *is-merge-attempt | |
| when: delayed | |
| start_in: &build-delay 5 minutes | |
| # Same as above, but for pre-merge pipelines | |
| - if: *is-merge-request | |
| when: manual | |
| # Build everything after someone bypassed the CI | |
| - if: *is-direct-push | |
| when: manual | |
| # Build everything in scheduled pipelines | |
| - if: *is-scheduled-pipeline | |
| when: delayed | |
| start_in: *build-delay | |
| # Allow building everything in fork pipelines, but build nothing unless | |
| # manually triggered | |
| - when: manual | |
| .ci-deqp-artifacts: | |
| artifacts: | |
| name: "${CI_PROJECT_NAME}_${CI_JOB_NAME}" | |
| when: always | |
| untracked: false | |
| paths: | |
| # Watch out! Artifacts are relative to the build dir. | |
| # https://gitlab.com/gitlab-org/gitlab-ce/commit/8788fb925706cad594adf6917a6c5f6587dd1521 | |
| - artifacts | |
| - _build/meson-logs/*.txt | |
| - _build/meson-logs/strace | |
| # Git archive | |
| make-git-archive: | |
| extends: | |
| - .fdo.ci-fairy | |
| stage: git-archive | |
| rules: | |
| - !reference [.scheduled_pipeline-rules, rules] | |
| tags: | |
| - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 | |
| script: | |
| # Remove drm-ci files we just added | |
| - rm -rf .gitlab-ci.* | |
| - rm -rf ci | |
| # Compactify the .git directory | |
| - git gc --aggressive | |
| # compress the current folder | |
| - tar -cvzf ../$CI_PROJECT_NAME.tar.gz . | |
| # Use id_tokens for JWT auth | |
| - ci-fairy s3cp --token-file "${S3_JWT_FILE}" ../$CI_PROJECT_NAME.tar.gz https://$S3_HOST/${S3_GITCACHE_BUCKET}/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_PROJECT_NAME.tar.gz | |
| # Sanity checks of MR settings and commit logs | |
| sanity: | |
| extends: | |
| - .fdo.ci-fairy | |
| stage: sanity | |
| tags: | |
| - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 | |
| rules: | |
| - if: *is-merge-request | |
| when: on_success | |
| - when: never | |
| variables: | |
| GIT_STRATEGY: none | |
| script: | |
| # ci-fairy check-commits --junit-xml=check-commits.xml | |
| # - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request.xml | |
| - | | |
| set -eu | |
| image_tags=( | |
| CONTAINER_TAG | |
| DEBIAN_BASE_TAG | |
| DEBIAN_BUILD_TAG | |
| DEBIAN_PYUTILS_TAG | |
| DEBIAN_TEST_GL_TAG | |
| KERNEL_TAG | |
| PKG_REPO_REV | |
| ) | |
| for var in "${image_tags[@]}" | |
| do | |
| if [ "$(echo -n "${!var}" | wc -c)" -gt 20 ] | |
| then | |
| echo "$var is too long; please make sure it is at most 20 chars." | |
| exit 1 | |
| fi | |
| done | |
| artifacts: | |
| when: on_failure | |
| reports: | |
| junit: check-*.xml | |
| mr-label-maker-test: | |
| extends: | |
| - .fdo.ci-fairy | |
| stage: sanity | |
| tags: | |
| - $FDO_RUNNER_JOB_PRIORITY_TAG_X86_64 | |
| rules: | |
| - !reference [.mr-label-maker-rules, rules] | |
| variables: | |
| GIT_STRATEGY: fetch | |
| timeout: 10m | |
| script: | |
| - set -eu | |
| - python3 -m venv .venv | |
| - source .venv/bin/activate | |
| - pip install git+https://gitlab.freedesktop.org/freedesktop/mr-label-maker | |
| - mr-label-maker --dry-run --mr $CI_MERGE_REQUEST_IID | |
| # Jobs that need to pass before spending hardware resources on further testing | |
| .required-for-hardware-jobs: | |
| needs: | |
| - job: clang-format | |
| optional: true | |
| - job: rustfmt | |
| optional: true | |
| - job: toml-lint | |
| optional: true | |
| deploy-docs: | |
| rules: | |
| - when: never | |
| linkcheck-docs: | |
| rules: | |
| - when: never | |
| mr-label-maker-test: | |
| rules: | |
| - when: never | |
| test-docs: | |
| rules: | |
| - when: never | |
| .ci-tron-x86_64-test-vk: | |
| rules: | |
| - when: never | |
| .ci-tron-x86_64-test-gl-manual: | |
| rules: | |
| - when: never | |
| .ci-tron-arm64-test-gl: | |
| rules: | |
| - when: never | |
| .ci-tron-x86_64-test-gl: | |
| rules: | |
| - when: never |