mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			
		
			
				
	
	
		
			208 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			YAML
		
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			YAML
		
	
	
#
 | 
						|
# 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:
 | 
						|
      # Reviewers
 | 
						|
      - "#changes-requested-reviews-by>0"
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        add: ['needs: work']
 | 
						|
        remove: ['needs: review', 'needs: CI']
 | 
						|
 | 
						|
  # From needs: review to needs: work - CI failure
 | 
						|
  - name: "label needs: work when travis-ci failed"
 | 
						|
    conditions:
 | 
						|
      # Travis failing
 | 
						|
      - status-failure~=Travis CI - Pull Request
 | 
						|
      - "label!=mergify skip"
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        add: ['needs: work']
 | 
						|
        remove: ['needs: review', 'needs: CI']
 | 
						|
 | 
						|
  # From needs: review to needs: work - CI failure
 | 
						|
  - name: "label needs: work when Jenkins CI failed - pr head"
 | 
						|
    conditions:
 | 
						|
      # Jenkins CI failing
 | 
						|
      - status-failure~=continuous-integration/jenkins/pr-head
 | 
						|
      - "label!=mergify skip"
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        add: ['needs: work']
 | 
						|
        remove: ['needs: review','needs: CI']
 | 
						|
 | 
						|
  # From needs: review to needs: work - CI failure
 | 
						|
  - name: "label needs: work when Jenkins CI failed - any of the pipeline"
 | 
						|
    conditions:
 | 
						|
      # Jenkins CI failing - any of the pipeline
 | 
						|
      - status-failure~=^jenkins-ci
 | 
						|
      - "label!=mergify skip"
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        add: ['needs: work']
 | 
						|
        remove: ['needs: review', 'needs: CI']
 | 
						|
 | 
						|
  # 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:
 | 
						|
      # Labels
 | 
						|
      - "label!=needs: preceding PR"
 | 
						|
 | 
						|
      # Reviewers
 | 
						|
      - "#changes-requested-reviews-by=0"
 | 
						|
      - "#approved-reviews-by>=1"
 | 
						|
 | 
						|
      # No conflict with the base branch
 | 
						|
      - -conflict
 | 
						|
 | 
						|
      # CI green policy, at least Travis should be green
 | 
						|
      - status-success~=Travis CI - Pull Request
 | 
						|
      # new CI needs to be done (neutral does not work, lets check if it failed or passed, if none, we need to run again)
 | 
						|
      - -status-success~=continuous-integration/jenkins/pr-head
 | 
						|
      - -status-failure~=continuous-integration/jenkins/pr-head
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        add: ['needs: CI']
 | 
						|
        remove: ['needs: review', 'needs: work']
 | 
						|
 | 
						|
  # Remove reviews after the branch is updated. This yet does not allow
 | 
						|
  # any other action like labels, etc. See mergify-engine/issues/360
 | 
						|
  - name: remove outdated reviews
 | 
						|
    conditions: []
 | 
						|
    actions:
 | 
						|
      dismiss_reviews:
 | 
						|
        approved: True
 | 
						|
        changes_requested: True
 | 
						|
 | 
						|
  # Conflict in the PR - needs: work and a comment to notify a user
 | 
						|
  - name: "label needs: work when there is a conflict"
 | 
						|
    conditions:
 | 
						|
      - -closed
 | 
						|
      - 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
 | 
						|
    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:
 | 
						|
      # Labels
 | 
						|
      - "label!=do not merge"
 | 
						|
      - "label!=mergify skip"
 | 
						|
      - "label=needs: CI"
 | 
						|
 | 
						|
      # Reviewers
 | 
						|
      - "#approved-reviews-by>=1"
 | 
						|
      - "#changes-requested-reviews-by=0"
 | 
						|
 | 
						|
      # CI green policy
 | 
						|
      - status-success~=Travis CI - Pull Request
 | 
						|
      # 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. We rely on not failure means all good (if skipped or executed) 
 | 
						|
      - -status-failure~=^jenkins-ci
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        add: ['ready for merge']
 | 
						|
        remove: ['needs: CI']
 | 
						|
 | 
						|
  # Clean-up after merge
 | 
						|
  - name: remove ready for merge when merged
 | 
						|
    conditions:
 | 
						|
      - merged
 | 
						|
      - "label=ready for merge"
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        remove: ['ready for merge', 'stale']
 | 
						|
 | 
						|
  - name: add "do not merge" label when WIP is in title
 | 
						|
    conditions:
 | 
						|
       - 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 part 1
 | 
						|
    conditions:
 | 
						|
      - merged
 | 
						|
      - -label~=^(release-version)
 | 
						|
      - -label~=^(Release review required)   
 | 
						|
      - -label~=^(release-type)
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        add: ['release version missing']
 | 
						|
      comment:
 | 
						|
        message: This PR does not contain release version label after merging.
 | 
						|
 | 
						|
  # If there is a release version remove 'release version missing' and / or 
 | 
						|
  # release review required
 | 
						|
  - name: release version is a must for merged PRs part 2.1
 | 
						|
    conditions:
 | 
						|
      - merged
 | 
						|
      - label=^(release-version)
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        remove: ['release version missing', 'Release review required']
 | 
						|
 | 
						|
  - name: release version is a must for merged PRs part 2.2
 | 
						|
    conditions:
 | 
						|
      - merged
 | 
						|
      - label=^(release-type)
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        remove: ['release version missing', 'Release review required']
 | 
						|
 | 
						|
  - name: add release review required to release branches
 | 
						|
    conditions:
 | 
						|
      - base~=^mbed-os-5.15
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        add: ['Release review required']
 | 
						|
 | 
						|
 # Clean-up if closed but not merged
 | 
						|
  - name: remove release version and needs labels
 | 
						|
    conditions:
 | 
						|
      - closed
 | 
						|
      - -merged
 | 
						|
    actions:
 | 
						|
      label:
 | 
						|
        remove_all: true
 | 
						|
 |