# 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 - meson_options.txt - build-support/**/* - subprojects/**/* - .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 [.never-post-merge-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 [.never-post-merge-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 [.never-post-merge-rules, rules] - !reference [.no_scheduled_pipelines-rules, rules] - changes: - .gitlab-ci.yml - .gitlab-ci/**/* # 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 # Rules for .mr-label-maker.yml .mr-label-maker-rules: rules: - !reference [.never-post-merge-rules, rules] - !reference [.no_scheduled_pipelines-rules, rules] - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: - .mr-label-maker.yml when: on_success