| # This file list source dependencies to avoid creating/running jobs |
| # those outcome cannot be changed by the modifications from a branch. |
| |
| # Rule to filter for only scheduled pipelines. |
| .scheduled_pipeline-rules: |
| rules: |
| - if: &is-scheduled-pipeline '$CI_PIPELINE_SOURCE == "schedule"' |
| when: on_success |
| retry: |
| max: 1 |
| # Don't retry on script_failure, job_execution_timeout, runner_unsupported, |
| # stale_schedule, archived_failure, or unmet_prerequisites |
| when: |
| - api_failure |
| - runner_system_failure |
| - scheduler_failure |
| - data_integrity_failure |
| - unknown_failure |
| |
| |
| # Generic rule to not run the job during scheduled pipelines. Jobs that aren't |
| # something like a nightly run should include this rule. |
| .no_scheduled_pipelines-rules: |
| rules: |
| - if: *is-scheduled-pipeline |
| when: never |
| |
| # Rule for restricted traces jobs to only run for users with access to those |
| # traces (both https://gitlab.freedesktop.org/gfx-ci/tracie/traces-db-private |
| # for trace access, and minio bucket access for viewing result images from CI). |
| # |
| # This is a compromise, allowing some marked developers to have their MRs |
| # blocked on regressions to non-redistributable traces, while not blocking |
| # merges for other devs who would be unable to debug changes to them. |
| .restricted-rules: |
| rules: |
| # If the triggerer has access to the restricted traces and if it is pre-merge |
| - if: '($GITLAB_USER_LOGIN !~ "/^(robclark|anholt|flto|cwabbott0|Danil|tomeu|okias|gallo|kwg|majanes|llanderwelin|zmike|vigneshraman)$/") && |
| ($GITLAB_USER_LOGIN != "marge-bot" || $CI_COMMIT_BRANCH)' |
| when: never |
| |
| # Mesa core source file dependencies that may impact any test job |
| # --------------------------------------------------------------- |
| .core-rules: |
| rules: |
| - !reference [.no_scheduled_pipelines-rules, rules] |
| - changes: &core_file_list |
| - .gitlab-ci.yml |
| - .gitlab-ci/**/* |
| - include/**/* |
| - meson.build |
| - .gitattributes |
| - src/* |
| - src/compiler/**/* |
| - src/drm-shim/**/* |
| - src/gbm/**/* |
| - src/gtest/**/* |
| # Some src/util and src/compiler files use headers from mesa/ (e.g. |
| # mtypes.h). We should clean that up. |
| - src/mesa/**/*.h |
| - src/tool/**/* |
| - src/util/**/* |
| when: on_success |
| |
| # Same core dependencies for doing manual runs. |
| .core-manual-rules: |
| retry: !reference [.scheduled_pipeline-rules, retry] |
| rules: |
| # We only want manual jobs to show up when it's not marge's pre-merge CI |
| # run, otherwise she'll wait until her timeout. The exception is |
| # performance jobs, see below. |
| - if: '($GITLAB_USER_LOGIN == "marge-bot" && |
| $CI_PIPELINE_SOURCE == "merge_request_event" && |
| $CI_JOB_NAME !~ "/performance$/")' |
| when: never |
| - !reference [.scheduled_pipeline-rules, rules] |
| - changes: |
| *core_file_list |
| when: manual |
| |
| # Rules for performance jobs tracking. We want perf jobs to run as code is |
| # merged to main, but we don't want them to block marge. So, they need to have |
| # only when: never or when: manual, and a separate script maintained by |
| # Collabora triggers the manual job after merge to main. These "never" filters |
| # need to come before any paths with "manual". |
| .performance-rules: |
| rules: |
| - !reference [.no_scheduled_pipelines-rules, rules] |
| # Run only on pre-merge pipelines from Marge |
| - if: $MESA_CI_PERFORMANCE_ENABLED == null |
| when: never |
| # Allow the merge to complete even before the job completes (since it won't |
| # even start until the separate script triggers on it). |
| allow_failure: true |
| |
| .piglit-performance-base: |
| extends: |
| - .performance-rules |
| variables: |
| JOB_PRIORITY: 40 |
| PIGLIT_REPLAY_SUBCOMMAND: "profile" |
| PIGLIT_REPLAY_EXTRA_ARGS: "--db-path ${CI_PROJECT_DIR}/replayer-db/" |
| # More than this can hit OOM due to BOs leaked during the replay of the last frame |
| PIGLIT_REPLAY_LOOP_TIMES: 150 |
| # We don't want for more than one workload to be submitted to the GPU at a time |
| FDO_CI_CONCURRENT: 1 |
| # Piglit is very sparse in its status output and downloads of big traces can take a while |
| DEVICE_HANGING_TIMEOUT_SEC: 600 |
| GIT_STRATEGY: none |
| HWCI_FREQ_MAX: "true" |
| # Always use the same device |
| LAVA_TAGS: "cbg-0" |
| # Ensure that we are using the release build artifact |
| S3_ARTIFACT_NAME: mesa-${ARCH}-default-release |
| # Reset dependencies in performance jobs to enforce the release build artifact |
| dependencies: null |
| # Don't run in parallel. It is okay to performance jobs to take a little |
| # longer to finish, as they don't block marge from merging an MR. |
| parallel: null |
| |
| .piglit-performance:arm64: |
| extends: |
| - .piglit-performance-base |
| needs: |
| - debian/arm64_test |
| - debian-arm64-release |
| |
| .piglit-performance:x86_64: |
| extends: |
| - .piglit-performance-base |
| needs: |
| - kernel+rootfs_x86_64 |
| - debian-release |
| |
| # Mesa source file dependencies that may impact any GL driver test job. |
| .gallium-core-rules: |
| rules: |
| - !reference [.core-rules, rules] |
| - changes: &gallium_core_file_list |
| - src/gallium/* |
| - src/gallium/auxiliary/**/* |
| - src/gallium/drivers/* |
| - src/gallium/include/**/* |
| - src/gallium/frontends/dri/* |
| - src/gallium/frontends/glx/**/* |
| - src/gallium/targets/**/* |
| - src/gallium/tests/**/* |
| - src/gallium/winsys/* |
| when: on_success |
| |
| .gl-rules: |
| rules: |
| - !reference [.core-rules, rules] |
| - changes: &mesa_core_file_list |
| - src/egl/**/* |
| - src/glx/**/* |
| - src/loader/**/* |
| - src/mapi/**/* |
| - src/mesa/* |
| - src/mesa/main/**/* |
| - src/mesa/math/**/* |
| - src/mesa/program/**/* |
| - src/mesa/sparc/**/* |
| - src/mesa/state_tracker/**/* |
| - src/mesa/swrast/**/* |
| - src/mesa/swrast_setup/**/* |
| - src/mesa/vbo/**/* |
| - src/mesa/x86/**/* |
| - src/mesa/x86-64/**/* |
| when: on_success |
| - !reference [.gallium-core-rules, rules] |
| |
| .gl-manual-rules: |
| retry: !reference [.scheduled_pipeline-rules, retry] |
| rules: |
| - !reference [.core-manual-rules, rules] |
| - changes: |
| *mesa_core_file_list |
| when: manual |
| - changes: |
| *gallium_core_file_list |
| when: manual |
| |
| # Source file dependencies that may impact any Vulkan driver build or test |
| .vulkan-rules: |
| rules: |
| - !reference [.core-rules, rules] |
| - changes: &vulkan_file_list |
| - src/vulkan/**/* |
| when: on_success |
| |
| .vulkan-manual-rules: |
| retry: !reference [.scheduled_pipeline-rules, retry] |
| rules: |
| - !reference [.core-manual-rules, rules] |
| - changes: |
| *vulkan_file_list |
| when: manual |
| |
| # Rules for unusual architectures that only build a subset of drivers |
| .ppc64el-rules: |
| rules: |
| - !reference [.no_scheduled_pipelines-rules, rules] |
| - !reference [.zink-common-rules, rules] |
| - !reference [.softpipe-rules, rules] |
| - !reference [.llvmpipe-rules, rules] |
| - !reference [.lavapipe-rules, rules] |
| - !reference [.radv-rules, rules] |
| - !reference [.radeonsi-rules, rules] |
| - !reference [.virgl-rules, rules] |
| - !reference [.nouveau-rules, rules] |
| |
| .s390x-rules: |
| rules: |
| - !reference [.no_scheduled_pipelines-rules, rules] |
| - !reference [.zink-common-rules, rules] |
| - !reference [.softpipe-rules, rules] |
| - !reference [.llvmpipe-rules, rules] |
| - !reference [.lavapipe-rules, rules] |
| |
| # Rules for linters |
| .lint-rustfmt-rules: |
| rules: |
| - !reference [.core-rules, rules] |
| # in merge pipeline, formatting checks are not allowed to fail |
| - if: $GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event" |
| changes: &rust_file_list |
| - src/**/*.rs |
| when: on_success |
| allow_failure: false |
| # in other pipelines, formatting checks are allowed to fail |
| - changes: *rust_file_list |
| when: on_success |
| allow_failure: true |
| |
| .lint-clang-format-rules: |
| rules: |
| - !reference [.core-rules, rules] |
| # in merge pipeline, formatting checks are not allowed to fail |
| - if: $GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event" |
| changes: &clang_format_file_list |
| - .clang-format |
| - .clang-format-include |
| - .clang-format-ignore |
| - src/**/.clang-format |
| - src/egl/**/* |
| - src/**/asahi/**/* |
| - src/**/panfrost/**/* |
| - src/amd/vulkan/**/* |
| - src/amd/compiler/**/* |
| when: on_success |
| allow_failure: false |
| # in other pipelines, formatting checks are allowed to fail |
| - changes: *clang_format_file_list |
| when: on_success |
| allow_failure: true |