# Validate your changes with:
#
#   $ curl -F 'data=@.mergify.yml' https://gh.mergify.io/validate/
#
# https://doc.mergify.io/
pull_request_rules:
  - name: label changes from community
    conditions:
      - author≠@core-contributors
      - author≠mergify[bot]
      - author≠dependabot[bot]
      - author≠github-actions[bot]
    actions:
      label:
        add:
          - community
  - name: request review for community changes
    conditions:
      - author≠@core-contributors
      - author≠mergify[bot]
      - author≠dependabot[bot]
      - author≠github-actions[bot]
      # Only request reviews from the pr subscribers group if no one
      # has reviewed the community PR yet. These checks only match
      # reviewers with admin, write or maintain permission on the repository.
      - "#approved-reviews-by=0"
      - "#commented-reviews-by=0"
      - "#changes-requested-reviews-by=0"
      - "#review-requested=0"
    actions:
      request_reviews:
        teams:
          - "@solana-labs/community-pr-subscribers"
  - name: automatic merge (squash) on CI success
    conditions:
      - and:
        - status-success=buildkite/solana
        - status-success=ci-gate
        - label=automerge
        - label!=no-automerge
        - author≠@dont-squash-my-commits
        - or:
          # only require docs checks if docs files changed
          - -files~=^docs/
          - status-success=build & deploy docs
        - or:
          # only require explorer checks if explorer files changed
          - status-success=check-explorer
          - -files~=^explorer/
        - or:
          - and:
            - status-success=all-web3-checks
            - status-success=web3-commit-lint
          # only require web3 checks if web3.js files changed
          - -files~=^web3.js/
    actions:
      merge:
        method: squash
  # Join the dont-squash-my-commits group if you won't like your commits squashed
  - name: automatic merge (rebase) on CI success
    conditions:
      - and:
        - status-success=buildkite/solana
        - status-success=ci-gate
        - label=automerge
        - label!=no-automerge
        - author=@dont-squash-my-commits
        - or:
          # only require docs checks if docs files changed
          - -files~=^docs/
          - status-success=build & deploy docs
        - or:
          # only require explorer checks if explorer files changed
          - status-success=check-explorer
          - -files~=^explorer/
        - or:
          # only require web3 checks if web3.js files changed
          - status-success=all-web3-checks
          - -files~=^web3.js/
    actions:
      merge:
        method: rebase
  - name: remove automerge label on CI failure
    conditions:
      - label=automerge
      - "#status-failure!=0"
    actions:
      label:
        remove:
          - automerge
      comment:
        message: automerge label removed due to a CI failure
  - name: remove outdated reviews
    conditions:
      - base=master
    actions:
      dismiss_reviews:
        changes_requested: true
  - name: v1.13 feature-gate backport
    conditions:
      - label=v1.13
      - label=feature-gate
    actions:
      backport:
        assignees: &BackportAssignee
          - "{{ merged_by|replace('mergify[bot]', label|select('equalto', 'community')|first|default(author)|replace('community', '@solana-labs/community-pr-s
ubscribers')) }}"
        ignore_conflicts: true
        labels:
          - feature-gate
        branches:
          - v1.13
  - name: v1.13 non-feature-gate backport
    conditions:
      - label=v1.13
      - label!=feature-gate
    actions:
      backport:
        assignees: *BackportAssignee
        ignore_conflicts: true
        branches:
          - v1.13
  - name: v1.14 feature-gate backport
    conditions:
      - label=v1.14
      - label=feature-gate
    actions:
      backport:
        assignees: *BackportAssignee
        ignore_conflicts: true
        labels:
          - feature-gate
        branches:
          - v1.14
  - name: v1.14 non-feature-gate backport
    conditions:
      - label=v1.14
      - label!=feature-gate
    actions:
      backport:
        assignees: *BackportAssignee
        ignore_conflicts: true
        branches:
          - v1.14

commands_restrictions:
  # The author of copied PRs is the Mergify user.
  # Restrict `copy` access to Core Contributors
  copy:
    conditions:
    - author=@core-contributors
