---
queue_rules:
  - name: default
    merge_conditions:
      # Conditions to get out of the queue (= merged)
      - or:
          - and:
              - base~=^(release-.+)$
              - "status-success=codespell"
              - "status-success=multi-arch-build"
              - "status-success=go-test"
              - "status-success=golangci-lint"
              - "status-success=mod-check"
              - "status-success=lint-extras"
              - "status-success=uncommitted-code-check"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.29"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
              - "status-success=ci/centos/mini-e2e/k8s-1.29"
              - "status-success=ci/centos/mini-e2e/k8s-1.30"
              - "status-success=ci/centos/mini-e2e/k8s-1.31"
              - "status-success=ci/centos/upgrade-tests-cephfs"
              - "status-success=ci/centos/upgrade-tests-rbd"
          - and:
              - base=release-v3.12
              - "status-success=codespell"
              - "status-success=multi-arch-build"
              - "status-success=go-test"
              - "status-success=golangci-lint"
              - "status-success=mod-check"
              - "status-success=lint-extras"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.29"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
              - "status-success=ci/centos/mini-e2e/k8s-1.29"
              - "status-success=ci/centos/mini-e2e/k8s-1.30"
              - "status-success=ci/centos/mini-e2e/k8s-1.31"
              - "status-success=ci/centos/upgrade-tests-cephfs"
              - "status-success=ci/centos/upgrade-tests-rbd"
          - and:
              - base=devel
              - "status-success=codespell"
              - "status-success=multi-arch-build"
              - "status-success=go-test"
              - "status-success=golangci-lint"
              - "status-success=mod-check"
              - "status-success=lint-extras"
              - "status-success=uncommitted-code-check"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.32"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.32"
              - "status-success=ci/centos/mini-e2e/k8s-1.30"
              - "status-success=ci/centos/mini-e2e/k8s-1.31"
              - "status-success=ci/centos/mini-e2e/k8s-1.32"
              - "status-success=ci/centos/upgrade-tests-cephfs"
              - "status-success=ci/centos/upgrade-tests-rbd"
          - and:
              - base=ci/centos
              - "status-success=ci/centos/job-validation"
              - "status-success=ci/centos/jjb-validate"
    merge_method: rebase
    update_method: rebase

pull_request_rules:
  - name: start CI jobs for PRs in the merge queue
    conditions:
      - base~=^(devel)|(release-.+)$
      - label!=conflicts
      - not:
          check-pending~=^ci/centos
      - not:
          status-success~=^ci/centos
      - or:
          - "check-pending=Queue: Embarked in merge train"
          - author=mergify[bot]
    actions:
      label:
        add:
          - ok-to-test

  - name: remove outdated approvals
    conditions:
      - base~=^(devel)|(release-.+)$
    actions:
      dismiss_reviews:
        approved: true
        changes_requested: false

  - name: ask to resolve conflict
    conditions:
      - conflict
      - author!=dependabot[bot]
    actions:
      comment:
        # yamllint disable-line rule:truthy rule:line-length
        message: "This pull request now has conflicts with the target branch. Could you please resolve conflicts and force push the corrected changes? 🙏"

  - name: update dependencies by dependabot (skip commitlint)
    conditions:
      - author=dependabot[bot]
      - label!=DNM
      - base=devel
      - "#approved-reviews-by>=2"
      - "#changes-requested-reviews-by=0"
      - "approved-reviews-by=@ceph/ceph-csi-contributors"
      - "approved-reviews-by=@ceph/ceph-csi-maintainers"
      - "status-success=codespell"
      - "status-success=multi-arch-build"
      - "status-success=go-test"
      - "status-success=golangci-lint"
      - "status-success=mod-check"
      - "status-success=lint-extras"
      - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
      - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
      - "status-success=ci/centos/k8s-e2e-external-storage/1.32"
      - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
      - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
      - "status-success=ci/centos/mini-e2e-helm/k8s-1.32"
      - "status-success=ci/centos/mini-e2e/k8s-1.30"
      - "status-success=ci/centos/mini-e2e/k8s-1.31"
      - "status-success=ci/centos/mini-e2e/k8s-1.32"
      - "status-success=ci/centos/upgrade-tests-cephfs"
      - "status-success=ci/centos/upgrade-tests-rbd"
      - "status-success=DCO"
    actions:
      queue:
        name: default
      delete_head_branch: {}

  - name: dismiss review of merged pull request
    conditions:
      - base~=^(devel)|(release-.+)$
      - merged
    actions:
      dismiss_reviews: {}

  - name: automatic merge
    conditions:
      - or:
          - and:
              - label!=DNM
              - base~=^(release-.+)$
              - "#approved-reviews-by>=2"
              - "#changes-requested-reviews-by=0"
              - "approved-reviews-by=@ceph/ceph-csi-contributors"
              - "approved-reviews-by=@ceph/ceph-csi-maintainers"
              - "status-success=DCO"
              - "status-success=codespell"
              - "status-success=commitlint"
              - "status-success=go-test"
              - "status-success=golangci-lint"
              - "status-success=lint-extras"
              - "status-success=mod-check"
              - "status-success=multi-arch-build"
              - "status-success=uncommitted-code-check"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.29"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
              - "status-success=ci/centos/mini-e2e/k8s-1.29"
              - "status-success=ci/centos/mini-e2e/k8s-1.30"
              - "status-success=ci/centos/mini-e2e/k8s-1.31"
              - "status-success=ci/centos/upgrade-tests-cephfs"
              - "status-success=ci/centos/upgrade-tests-rbd"
          - and:
              - label!=DNM
              - base=release-v3.12
              - "#approved-reviews-by>=2"
              - "#changes-requested-reviews-by=0"
              - "approved-reviews-by=@ceph/ceph-csi-contributors"
              - "approved-reviews-by=@ceph/ceph-csi-maintainers"
              - "status-success=codespell"
              - "status-success=multi-arch-build"
              - "status-success=go-test"
              - "status-success=golangci-lint"
              - "status-success=commitlint"
              - "status-success=mod-check"
              - "status-success=lint-extras"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.29"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
              - "status-success=ci/centos/mini-e2e/k8s-1.29"
              - "status-success=ci/centos/mini-e2e/k8s-1.30"
              - "status-success=ci/centos/mini-e2e/k8s-1.31"
              - "status-success=ci/centos/upgrade-tests-cephfs"
              - "status-success=ci/centos/upgrade-tests-rbd"
              - "status-success=DCO"
          - and:
              - label!=DNM
              - base=devel
              - "#approved-reviews-by>=2"
              - "#changes-requested-reviews-by=0"
              - "approved-reviews-by=@ceph/ceph-csi-contributors"
              - "approved-reviews-by=@ceph/ceph-csi-maintainers"
              - "status-success=codespell"
              - "status-success=multi-arch-build"
              - "status-success=go-test"
              - "status-success=golangci-lint"
              - "status-success=commitlint"
              - "status-success=mod-check"
              - "status-success=lint-extras"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.32"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.32"
              - "status-success=ci/centos/mini-e2e/k8s-1.30"
              - "status-success=ci/centos/mini-e2e/k8s-1.31"
              - "status-success=ci/centos/mini-e2e/k8s-1.32"
              - "status-success=ci/centos/upgrade-tests-cephfs"
              - "status-success=ci/centos/upgrade-tests-rbd"
              - "status-success=DCO"
    actions:
      queue:
        name: default
      delete_head_branch: {}

  - name: automatic merge PR having ready-to-merge label
    conditions:
      - or:
          - and:
              - base~=^(release-.+)$
              - label!=DNM
              - label=ready-to-merge
              - "approved-reviews-by=@ceph/ceph-csi-maintainers"
              - "status-success=codespell"
              - "status-success=multi-arch-build"
              - "status-success=go-test"
              - "status-success=golangci-lint"
              - "status-success=commitlint"
              - "status-success=mod-check"
              - "status-success=lint-extras"
              - "#changes-requested-reviews-by=0"
              - "status-success=uncommitted-code-check"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.29"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
              - "status-success=ci/centos/mini-e2e/k8s-1.29"
              - "status-success=ci/centos/mini-e2e/k8s-1.30"
              - "status-success=ci/centos/mini-e2e/k8s-1.31"
              - "status-success=ci/centos/upgrade-tests-cephfs"
              - "status-success=ci/centos/upgrade-tests-rbd"
              - "status-success=DCO"
          - and:
              - base=release-v3.12
              - label!=DNM
              - label=ready-to-merge
              - "approved-reviews-by=@ceph/ceph-csi-maintainers"
              - "status-success=codespell"
              - "status-success=multi-arch-build"
              - "status-success=go-test"
              - "status-success=golangci-lint"
              - "status-success=commitlint"
              - "status-success=mod-check"
              - "status-success=lint-extras"
              - "#changes-requested-reviews-by=0"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.29"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.30"
              - "status-success=ci/centos/k8s-e2e-external-storage/1.31"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.30"
              - "status-success=ci/centos/mini-e2e-helm/k8s-1.31"
              - "status-success=ci/centos/mini-e2e/k8s-1.29"
              - "status-success=ci/centos/mini-e2e/k8s-1.30"
              - "status-success=ci/centos/mini-e2e/k8s-1.31"
              - "status-success=ci/centos/upgrade-tests-cephfs"
              - "status-success=ci/centos/upgrade-tests-rbd"
              - "status-success=DCO"
    actions:
      queue:
        name: default
      delete_head_branch: {}

  - name: backport patches to release-v3.12 branch
    conditions:
      - base=devel
      - label=backport-to-release-v3.12
    actions:
      backport:
        branches:
          - release-v3.12

  - name: backport patches to release-v3.13 branch
    conditions:
      - base=devel
      - label=backport-to-release-v3.13
    actions:
      backport:
        branches:
          - release-v3.13

  - name: remove outdated approvals on ci/centos
    conditions:
      - base=ci/centos
    actions:
      dismiss_reviews:
        approved: true
        changes_requested: false

  - name: automatic merge on ci/centos
    conditions:
      - label!=DNM
      - base=ci/centos
      - "#approved-reviews-by>=2"
      - "approved-reviews-by=@ceph/ceph-csi-contributors"
      - "approved-reviews-by=@ceph/ceph-csi-maintainers"
      - "#changes-requested-reviews-by=0"
      - "status-success=ci/centos/job-validation"
      - "status-success=ci/centos/jjb-validate"
      - "status-success=DCO"
    actions:
      queue:
        name: default
      delete_head_branch: {}

  - name: automatic merge PR having ready-to-merge label on ci/centos
    conditions:
      - label!=DNM
      - label=ready-to-merge
      - base=ci/centos
      - "approved-reviews-by=@ceph/ceph-csi-maintainers"
      - "#changes-requested-reviews-by=0"
      - "status-success=ci/centos/job-validation"
      - "status-success=ci/centos/jjb-validate"
      - "status-success=DCO"
    actions:
      queue:
        name: default
      delete_head_branch: {}

  ##
  ## Automatically set/remove labels
  ##
  - name: title contains DNM
    conditions:
      - title~=DNM
    actions:
      label:
        add:
          - DNM
  - name: title contains CephFS
    conditions:
      - "title~=cephfs: "
    actions:
      label:
        add:
          - component/cephfs
  - name: title contains NFS
    conditions:
      - "title~=nfs: "
    actions:
      label:
        add:
          - component/nfs
  - name: title contains RBD
    conditions:
      - "title~=rbd: "
    actions:
      label:
        add:
          - component/rbd
  - name: title contains CI, testing or e2e
    conditions:
      - "title~=(ci: )|(testing: )|(e2e)"
    actions:
      label:
        add:
          - component/testing
  - name: title contains Helm
    conditions:
      - title~=helm
    actions:
      label:
        add:
          - component/deployment
  - name: title contains rebase
    conditions:
      - "title~=rebase: "
    actions:
      label:
        add:
          - rebase
  - name: title contains build
    conditions:
      - "title~=build: "
    actions:
      label:
        add:
          - component/build
  - name: title indicates a bug fix
    conditions:
      - title~=(bug)|(fix)
    actions:
      label:
        add:
          - bug
  - name: title contains cleanup
    conditions:
      - "title~=cleanup: "
    actions:
      label:
        add:
          - cleanup
  - name: title contains doc
    conditions:
      - "title~=doc: "
    actions:
      label:
        add:
          - component/docs
          - ci/skip/e2e
          - ci/skip/multi-arch-build
  - name: title contains Mergify
    conditions:
      - "title~=(?i)mergify"
    actions:
      label:
        add:
          - Repo activity
          - ci/skip/e2e
          - ci/skip/multi-arch-build

  # A [skip ci] in the PR description prevents Jenkins jobs from running, mark
  # the PR as Draft so that CI jobs do not automatically run anymore.
  - name: detect [skip ci] in the PR description
    conditions:
      # this should be \[skip\W+ci\], but Mergify does not accept that
      - "body-raw~=skip ci"
    actions:
      edit:
        draft: true
      comment:
        # yamllint disable-line rule:truthy rule:line-length
        message: "The PR description contains the unsupported `[skip ci]` command, please update the description and mark the PR ready for review again."