# # 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 GitHub Actions jobs have failed" conditions: # GitHub Actions are failing - check-failure=license-check - check-failure=include-check - check-failure=style-check - check-failure=docs-check - check-failure=python-tests - check-failure=pin-validation - check-failure=cmake-checks - check-failure=frozen-tools-check - "label!=mergify skip" - "label!='needs: work'" actions: label: add: ['needs: work'] remove: ['needs: review', 'needs: CI'] # From needs: CI to needs: work - CI failure in jenkins pipeline - name: "label needs: work when Jenkins CI failed - pr head" conditions: # Jenkins CI failing, only pr head - check-failure~=continuous-integration/jenkins/pr-head - "label!=mergify skip" - "label=needs: CI" - -closed actions: label: add: ['needs: work'] remove: ['needs: CI'] # From needs: CI 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 - check-failure~=^jenkins-ci - "label=needs: CI" - "label!=mergify skip" actions: label: add: ['needs: work'] remove: ['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 GitHub Actions jobs should be green - check-success=license-check - check-success=include-check - check-success=style-check - check-success=docs-check - check-success=python-tests - check-success=pin-validation - check-success=cmake-checks - check-success=frozen-tools-check # new CI needs to be done (neutral does not work, lets check if it failed or passed, if none, we need to run again) - -check-success~=continuous-integration/jenkins/pr-head - -check-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 - check-success=license-check - check-success=include-check - check-success=style-check - check-success=docs-check - check-success=python-tests - check-success=pin-validation - check-success=cmake-checks - check-success=frozen-tools-check # Internal Jenkins - we rely on PR head to provide status - check-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) - -check-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