Skip to content

Commit

Permalink
feat(actions/label): add remove_all option
Browse files Browse the repository at this point in the history
This new option allows to remove all labels of a pull request.

Relates to #360
  • Loading branch information
jd authored and mergify[bot] committed Mar 19, 2020
1 parent c598750 commit 18da229
Show file tree
Hide file tree
Showing 7 changed files with 2,644 additions and 5 deletions.
4 changes: 4 additions & 0 deletions doc/source/actions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,10 @@ The ``label`` action can add or remove `labels
- list of string
- ``[]``
- The list of labels to remove.
* - ``remove_all``
- Boolean
- ``false``
- Remove all labels from the pull request.

.. _merge action:

Expand Down
14 changes: 9 additions & 5 deletions mergify_engine/actions/label.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class LabelAction(actions.Action):
validator = {
voluptuous.Required("add", default=[]): [str],
voluptuous.Required("remove", default=[]): [str],
voluptuous.Required("remove_all", default=False): bool,
}

silent_report = True
Expand All @@ -40,10 +41,13 @@ def run(self, pull, sources, missing_conditions):

pull.g_pull.add_to_labels(*self.config["add"])

pull_labels = [l.name for l in pull.g_pull.labels]
for label in self.config["remove"]:
if label in pull_labels:
with utils.ignore_client_side_error():
pull.g_pull.remove_from_labels(label)
if self.config["remove_all"]:
pull.g_pull.delete_labels()
else:
pull_labels = [l.name for l in pull.g_pull.labels]
for label in self.config["remove"]:
if label in pull_labels:
with utils.ignore_client_side_error():
pull.g_pull.remove_from_labels(label)

return ("success", "Labels added/removed", "")
Empty file.
42 changes: 42 additions & 0 deletions mergify_engine/tests/functional/actions/test_label.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# -*- encoding: utf-8 -*-
#
# Copyright © 2020 Julien Danjou <[email protected]>
#
# 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.
import yaml

from mergify_engine.tests.functional import base


class TestLabelAction(base.FunctionalTestBase):
def test_label_remove_all(self):
rules = {
"pull_request_rules": [
{
"name": "delete all labels",
"conditions": ["base=master", "label=stable"],
"actions": {"label": {"remove_all": True,}},
}
]
}

self.setup_repo(yaml.dump(rules))

p, _ = self.create_pr()
self.add_label(p, "stable")

pulls = list(self.r_o_admin.get_pulls())
self.assertEqual(1, len(pulls))
self.assertEqual(
[], pulls[0].labels,
)
1 change: 1 addition & 0 deletions zfixtures/cassettes/test_label_remove_all/git-1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"args": ["init"], "kwargs": {}, "out": "Initialized empty Git repository in /private/var/folders/sv/_9vpkb_93x37dh48kb6z8qf80000gn/T/mergify-gitterri5ltmex/.git/\n"}, {"args": ["config", "user.name", "mergify-bot"], "kwargs": {}, "out": ""}, {"args": ["config", "user.email", "[email protected]"], "kwargs": {}, "out": ""}, {"args": ["config", "credential.useHttpPath", "true"], "kwargs": {}, "out": ""}, {"args": ["config", "credential.helper", "cache --timeout=300 --socket=/tmp/mergify-gitter<random>/.git/creds/socket"], "kwargs": {}, "out": ""}, {"args": ["credential", "approve"], "kwargs": {"input": "url=https://<TOKEN>:@github.com/mergifyio-testing/repo-562cefae-5b09-467c-9fbc-dff3284edf68-test_label_remove_all\n\n"}, "out": ""}, {"args": ["credential", "approve"], "kwargs": {"input": "url=https://<TOKEN>:@github.com/mergify-test2/repo-562cefae-5b09-467c-9fbc-dff3284edf68-test_label_remove_all\n\n"}, "out": ""}, {"args": ["config", "user.name", "mergify-tester"], "kwargs": {}, "out": ""}, {"args": ["remote", "add", "main", "https://github.com/mergifyio-testing/repo-562cefae-5b09-467c-9fbc-dff3284edf68-test_label_remove_all"], "kwargs": {}, "out": ""}, {"args": ["remote", "add", "fork", "https://github.com/mergify-test2/repo-562cefae-5b09-467c-9fbc-dff3284edf68-test_label_remove_all"], "kwargs": {}, "out": ""}, {"args": ["add", ".mergify.yml"], "kwargs": {}, "out": ""}, {"args": ["commit", "--no-edit", "-m", "initial commit"], "kwargs": {}, "out": "[master (root-commit) 640380c] initial commit\n 1 file changed, 8 insertions(+)\n create mode 100644 .mergify.yml\n"}, {"args": ["push", "--quiet", "main", "master"], "kwargs": {}, "out": ""}, {"args": ["fetch", "--quiet", "fork"], "kwargs": {}, "out": ""}, {"args": ["checkout", "--quiet", "fork/master", "-b", "fork/pr1"], "kwargs": {}, "out": ""}, {"args": ["add", "test1"], "kwargs": {}, "out": ""}, {"args": ["commit", "--no-edit", "-m", "Pull request n1 from fork"], "kwargs": {}, "out": "[fork/pr1 559f9f3] Pull request n1 from fork\n 1 file changed, 0 insertions(+), 0 deletions(-)\n create mode 100644 test1\n"}, {"args": ["push", "--quiet", "fork", "fork/pr1"], "kwargs": {}, "out": "remote: \nremote: Create a pull request for 'fork/pr1' on GitHub by visiting: \nremote: https://github.com/mergify-test2/repo-562cefae-5b09-467c-9fbc-dff3284edf68-test_label_remove_all/pull/new/fork/pr1 \nremote: \n"}, {"args": ["credential-cache", "--socket=/tmp/mergify-gitter<random>/.git/creds/socket", "exit"], "kwargs": {}, "out": ""}]
Loading

0 comments on commit 18da229

Please sign in to comment.