Newer
Older
mbed-os / .mergify.yml
@Martin Kojtal Martin Kojtal on 16 Jan 2020 5 KB mergify: simplify needs CI transition
#
# Copyright (c) 2020, Arm Limited and affiliates.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Mergify follow our workflow: https://os.mbed.com/docs/mbed-os/latest/contributing/workflow.html
# Inital state (needs: review) is done by internal reviewer bot

# Notes: conditions do not check if label is already there if we add or remove later, this is to limit Github API access to
# minimum. If a label is already there and we add it again, nothing should happen (we do 1 less access to Github).
# For instance for needs: work if CI failed, we just add a label as action, don't check if needs: works is already there.
#
# Reviewers request needs write access to block PR, otherwise it's just a suggestion on Github, not PR block

pull_request_rules:
  # From needs: review to needs: work - reviewers request
  - name: "label needs: work when changes were requested"
    conditions:
      - base~=feature-mergify
      # Reviewers
      - "#changes-requested-reviews-by>0"
    actions:
      label:
        add: 
          - "needs: work"
        remove: 
          - "needs: review"

  # From needs: review to needs: work - CI failure
  - name: "label needs: work when travis-ci failed"
    conditions:
      - base~=feature-mergify
      # Travis failing
      - status-failure~=continuous-integration/travis-ci/pr
    actions:
      label:
        add: 
          - "needs: work"
        remove: 
          - "needs: review"

  # From needs: review to needs: work - CI failure
  - name: "label needs: work when Jenkins CI failed - pr head"
    conditions:
      - base~=feature-mergify
      # Jenkins CI failing
      - status-failure~=continuous-integration/jenkins/pr-head
    actions:
      label:
        add: 
          - "needs: work"
        remove: 
          - "needs: review"

  # From needs: review to needs: work - CI failure
  - name: "label needs: work when Jenkins CI failed - any of the pipeline"
    conditions:
      - base~=feature-mergify
      # Jenkins CI failing - any of the pipeline
      - status-failure~=^jenkins-ci
    actions:
      label:
        add: 
          - "needs: work"
        remove: 
          - "needs: review"

  # From needs: review or needs: work to needs: CI. One approval means we should be good to start CI
  - name: "label needs: CI when at least one reviewers approval"
    conditions:
      - base~=feature-mergify
      # Labels
      - "label!=needs: preceding PR"

      # Reviewers
      - "#changes-requested-reviews-by=0"
      - "#approved-reviews-by>=1"

      # CI green policy, at least Travis should be green
      - status-success~=continuous-integration/travis-ci/pr
      # new CI needs to be done
      - status-neutral~=continuous-integration/jenkins/pr-head
    actions:
      label:
        add: 
          - "needs: CI"
        remove: 
          - "needs: review"
          - "needs: work"

  # Conflict in the PR - needs: work and a comment to notify a user
  - name: "label needs: work when there is a conflict"
    conditions:
      - base~=feature-mergify
      - conflict
    actions:
      label:
        add:
          - "needs: work"
        remove: 
          - "needs: review"
          - "needs: CI"
      comment:
        message: This PR cannot be merged due to conflicts. Please rebase to resolve them.

  - name: "add label feature branch for feature branch additions"
    conditions:
      - base~=feature-mergify
      - base~=^feature
    actions:
      label:
        add:
          - "release-version: feature branch"

  # Ready for integration. Not yet auto merge, will be enabled once carefuly tested
  - name: label "ready for merge" when ready
    conditions:
      - base~=feature-mergify
      # Labels
      - "label!=do not merge"
      - "label=needs: CI"

      # Reviewers
      - "#approved-reviews-by>=1"
      - "#changes-requested-reviews-by=0"

      # CI green policy
      - status-success~=continuous-integration/travis-ci/pr
      # Internal Jenkins - we rely on PR head to provide status
      - status-success~=continuous-integration/jenkins/pr-head
      # any of the jenkins pipeline needs to be green
      - status-success~=^jenkins-ci
    actions:
      label:
        add: 
          - "ready for merge"
        remove: 
          - "needs: CI"

  # Clean-up after merge
  - name: remove ready for merge when merged
    conditions:
      - base~=feature-mergify
      - merged
      - "label=ready for merge"
    actions:
      label:
        remove:
          - "ready for merge"

  - name: add "do not merge" label when WIP is in title
    conditions:
       - base~=feature-mergify
       - title~=^(\[wip\]( |:) |\[WIP\]( |:) |wip( |:) |WIP( |:)).*
    actions:
      label:
        add:
          - "do not merge"

  # Check if version label is applied
  - name: release version is a must for merged PRs
    conditions:
      - base~=feature-mergify
      - merged
      - -label~=^(release-version)
    actions:
      label:
        add:
          - "Release review required"
      comment:
        message: This PR does not contain release version label after merging.