# SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: 2018-2023 the Mesa contributors
# SPDX-FileCopyrightText: 2018-2023 Collabora, Ltd. and the Monado contributors

# YAML anchors for rule conditions
# --------------------------------
.rules-anchors:
  rules:
    # Post-merge pipeline
    - if: &is-post-merge '$CI_PROJECT_NAMESPACE == "monado" && $CI_COMMIT_BRANCH'
      when: on_success
    # Pre-merge pipeline
    - if: &is-pre-merge '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: on_success
    # Outside of monado.
    - if: &is-forked-branch '$CI_PROJECT_NAMESPACE != "monado" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_COMMIT_REF_NAME'
      when: manual
    # GitLab CI paths
    - changes: &paths-ci-files
        - ".gitlab-ci.yml"
        - ".gitlab-ci/**/*"
      when: on_success
    # All paths, 1 hours have been wasted trying to combine the above arrays.
    - changes: &paths-all-files
        # Code
        - "scripts/**/*"
        - "src/**/*"
        # Doc
        - "doc/**/*"
        # Build sys
        - CMakeLists.txt
        - "*.cmake"
        - "**/*.gradle"
        - "cmake/**/*"
        - "gradle/**/*"
        # CI paths
        - ".gitlab-ci.yml"
        - ".gitlab-ci/**/*"
      when: on_success

# When to automatically run the CI for build jobs
.build-rules:
  rules:
    # If any files affecting the pipeline are changed, build/test jobs run
    # automatically once all dependency jobs have passed
    - changes:
        *paths-all-files
      when: on_success
    # Don't build on forked repos.
    - if: *is-forked-branch
      when: manual
    # Otherwise, build/test jobs won't run because no rule matched.


.container-rules:
  rules:
    # Run pipeline by default in the main project if any CI pipeline
    # configuration files were changed, to ensure docker images are up to date
    - if: *is-post-merge
      changes:
        *paths-ci-files
      when: on_success
    # Run pipeline by default if it is for a merge request, and any files
    # affecting the pipeline were changed
    - if: *is-pre-merge
      changes:
        *paths-all-files
      when: on_success
    # Allow triggering jobs manually in other cases if any files affecting the
    # pipeline were changed: Disabled for now because it causes the pipeline on
    # main to be blocked because it gets stuck in the container stage.
    #- changes:
    #    *paths-ci-files
    #  when: manual
    # Don't build on forked repos.
    - if: *is-forked-branch
      when: manual
    # Otherwise, container jobs won't run because no rule matched.