From fdcbdfce9896f2d7082872dbdbe749bfc9740ec2 Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Fri, 30 Aug 2024 16:40:23 +0200 Subject: [PATCH 1/9] feat: gitlab skip source, target and labels --- pr_agent/servers/gitlab_webhook.py | 17 ++++++++++++++++- pr_agent/settings/configuration.toml | 3 +++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index 728e3cc6..19fec682 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -124,11 +124,26 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) log_context["sender"] = sender + excluded_source_branches = get_settings().get("gitlab.excluded_source_branches", []) + excluded_target_branches = get_settings().get("gitlab.excluded_target_branches", []) + excluded_labels = get_settings().get("gitlab.excluded_labels", []) if data.get('object_kind') == 'merge_request' and data['object_attributes'].get('action') in ['open', 'reopen']: url = data['object_attributes'].get('url') draft = data['object_attributes'].get('draft') + source_branch = data['object_attributes'].get('source_branch') + target_branch = data['object_attributes'].get('target_branch') + labels = data['object_attributes'].get('labels').map(lambda x: x['title']) + get_logger().info(f"New merge request: {url}") + if target_branch in excluded_target_branches or source_branch in excluded_source_branches: + get_logger().info(f"Skipping excluded branch MR: {url}") + return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) + + if labels.intersection(excluded_labels): + get_logger().info(f"Skipping excluded label MR: {url}") + return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) + if draft: get_logger().info(f"Skipping draft MR: {url}") return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) @@ -138,7 +153,7 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): if 'merge_request' in data: mr = data['merge_request'] url = mr.get('url') - + get_logger().info(f"A comment has been added to a merge request: {url}") body = data.get('object_attributes', {}).get('note') if data.get('object_attributes', {}).get('type') == 'DiffNote' and '/ask' in body: # /ask_line diff --git a/pr_agent/settings/configuration.toml b/pr_agent/settings/configuration.toml index b128aca0..cd166180 100644 --- a/pr_agent/settings/configuration.toml +++ b/pr_agent/settings/configuration.toml @@ -230,6 +230,9 @@ push_commands = [ "/describe", "/review --pr_reviewer.num_code_suggestions=0", ] +excluded_target_branches = [] +excluded_source_branches = [] +excluded_labels = [] [bitbucket_app] pr_commands = [ From 23af1afa03c631c8f258e185a7439e3b722cd21f Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Fri, 30 Aug 2024 17:01:18 +0200 Subject: [PATCH 2/9] feat: gitlab skip source, target and labels --- pr_agent/servers/gitlab_webhook.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index 19fec682..3d72bc26 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -132,10 +132,9 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): draft = data['object_attributes'].get('draft') source_branch = data['object_attributes'].get('source_branch') target_branch = data['object_attributes'].get('target_branch') - labels = data['object_attributes'].get('labels').map(lambda x: x['title']) + labels = [label['title'] for label in data['object_attributes'].get('labels', [])] get_logger().info(f"New merge request: {url}") - if target_branch in excluded_target_branches or source_branch in excluded_source_branches: get_logger().info(f"Skipping excluded branch MR: {url}") return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) From adce35765b7b91cbd303279242f8c49c5dff886c Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Mon, 2 Sep 2024 16:26:50 +0200 Subject: [PATCH 3/9] feat: implement skip branches for github, add ignore title to gitlab --- pr_agent/servers/github_app.py | 23 ++++++++++++++ pr_agent/servers/gitlab_webhook.py | 46 ++++++++++++++++++++-------- pr_agent/settings/configuration.toml | 19 ++++++++++-- 3 files changed, 72 insertions(+), 16 deletions(-) diff --git a/pr_agent/servers/github_app.py b/pr_agent/servers/github_app.py index eb726dd4..9a8784fd 100644 --- a/pr_agent/servers/github_app.py +++ b/pr_agent/servers/github_app.py @@ -141,10 +141,33 @@ async def handle_new_pr_opened(body: Dict[str, Any], ignore_pr_title_re = get_settings().get("GITHUB_APP.IGNORE_PR_TITLE", []) if not isinstance(ignore_pr_title_re, list): ignore_pr_title_re = [ignore_pr_title_re] + if ignore_pr_title_re and any(re.search(regex, title) for regex in ignore_pr_title_re): get_logger().info(f"Ignoring PR with title '{title}' due to github_app.ignore_pr_title setting") return {} + # logic to ignore PRs with specific labels or source branches or target branches. + ignore_pr_labels = get_settings().get("GITHUB_APP.IGNORE_PR_LABELS", []) + ignore_pr_source_branches = get_settings().get("GITHUB_APP.IGNORE_PR_SOURCE_BRANCHES", []) + ignore_pr_target_branches = get_settings().get("GITHUB_APP.IGNORE_PR_TARGET_BRANCHES", []) + + if ignore_pr_labels: + labels = [label['name'] for label in pull_request.get("labels", [])] + if any(label in ignore_pr_labels for label in labels): + labels_str = ", ".join(labels) + get_logger().info(f"Ignoring PR with labels '{labels_str}' due to github_app.ignore_pr_labels settings") + return {} + + if ignore_pr_source_branches or ignore_pr_target_branches: + source_branch = pull_request.get("head", {}).get("ref", "") + target_branch = pull_request.get("base", {}).get("ref", "") + if any(re.search(regex, source_branch) for regex in ignore_pr_source_branches): + get_logger().info(f"Ignoring PR with source branch '{source_branch}' due to github_app.ignore_pr_source_branches settings") + return {} + if any(re.search(regex, target_branch) for regex in ignore_pr_target_branches): + get_logger().info(f"Ignoring PR with target branch '{target_branch}' due to github_app.ignore_pr_target_branches settings") + return {} + if get_identity_provider().verify_eligibility("github", sender_id, api_url) is not Eligibility.NOT_ELIGIBLE: await _perform_auto_commands_github("pr_commands", agent, body, api_url, log_context) else: diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index 3d72bc26..e57e3b8c 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -1,4 +1,5 @@ import copy +import re import json from datetime import datetime @@ -124,29 +125,48 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) log_context["sender"] = sender - excluded_source_branches = get_settings().get("gitlab.excluded_source_branches", []) - excluded_target_branches = get_settings().get("gitlab.excluded_target_branches", []) - excluded_labels = get_settings().get("gitlab.excluded_labels", []) + if data.get('object_kind') == 'merge_request' and data['object_attributes'].get('action') in ['open', 'reopen']: + title = data['object_attributes'].get('title') url = data['object_attributes'].get('url') draft = data['object_attributes'].get('draft') - source_branch = data['object_attributes'].get('source_branch') - target_branch = data['object_attributes'].get('target_branch') - labels = [label['title'] for label in data['object_attributes'].get('labels', [])] get_logger().info(f"New merge request: {url}") - if target_branch in excluded_target_branches or source_branch in excluded_source_branches: - get_logger().info(f"Skipping excluded branch MR: {url}") - return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) - - if labels.intersection(excluded_labels): - get_logger().info(f"Skipping excluded label MR: {url}") - return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) + # ignore draft MRs. if draft: get_logger().info(f"Skipping draft MR: {url}") return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) + # logic to ignore MRs for titles, labels and source, target branches. + ignore_mr_title = get_settings().get("GITLAB.IGNORE_MR_TITLE", []) + ignore_mr_labels = get_settings().get("GITLAB.IGNORE_MR_LABELS", []) + ignore_mr_source_branches = get_settings().get("GITLAB.IGNORE_MR_SOURCE_BRANCHES", []) + ignore_mr_target_branches = get_settings().get("GITLAB.IGNORE_MR_TARGET_BRANCHES", []) + if ignore_mr_source_branches: + source_branch = data['object_attributes'].get('source_branch') + if any(re.search(regex, source_branch) for regex in ignore_mr_source_branches): + get_logger().info(f"Ignoring MR with source branch '{source_branch}' due to gitlab.ignore_mr_source_branches settings") + return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) + + if ignore_mr_target_branches: + target_branch = data['object_attributes'].get('target_branch') + if any(re.search(regex, target_branch) for regex in ignore_mr_target_branches): + get_logger().info(f"Ignoring MR with target branch '{target_branch}' due to gitlab.ignore_mr_target_branches settings") + return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) + + if ignore_mr_labels: + labels = [label['title'] for label in data['object_attributes'].get('labels', [])] + if any(label in ignore_mr_labels for label in labels): + labels_str = ", ".join(labels) + get_logger().info(f"Ignoring MR with labels '{labels_str}' due to gitlab.ignore_mr_labels settings") + return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) + + if ignore_mr_title: + if any([re.search(regex, title) for regex in ignore_mr_title]): + get_logger().info(f"Ignoring MR with title '{title}' due to gitlab.ignore_mr_title settings") + return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) + await _perform_commands_gitlab("pr_commands", PRAgent(), url, log_context) elif data.get('object_kind') == 'note' and data.get('event_type') == 'note': # comment on MR if 'merge_request' in data: diff --git a/pr_agent/settings/configuration.toml b/pr_agent/settings/configuration.toml index cd166180..e6d5968a 100644 --- a/pr_agent/settings/configuration.toml +++ b/pr_agent/settings/configuration.toml @@ -215,7 +215,15 @@ push_commands = [ "/describe", "/review --pr_reviewer.num_code_suggestions=0", ] +# a list of regular expressions to match against the PR title to ignore the PR agent ignore_pr_title = [] +# a list of regular expressions of target branches to ignore from PR agent when an MR is created +ignore_pr_target_branches = [] +# a list of regular expressions of source branches to ignore from PR agent when an MR is created +ignore_pr_source_branches = [] +# labels to ignore from PR agent when an MR is created +ignore_pr_labels = [] +# MR titles to ignore from PR agent when an MR is created ignore_bot_pr = true [gitlab] @@ -230,9 +238,14 @@ push_commands = [ "/describe", "/review --pr_reviewer.num_code_suggestions=0", ] -excluded_target_branches = [] -excluded_source_branches = [] -excluded_labels = [] +# a list of regular expressions to match against the PR title to ignore the PR agent +ignore_mr_title = [] +# target branches to ignore from PR agent when an MR is created +ignore_mr_target_branches = [] +# source branches to ignore from PR agent when an MR is created +ignore_mr_source_branches = [] +# labels to ignore from PR agent when an MR is created +ignore_mr_labels = [] [bitbucket_app] pr_commands = [ From 2f7f60a469231ed0e1b19f0cfe07d656b0386256 Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Mon, 2 Sep 2024 16:31:19 +0200 Subject: [PATCH 4/9] fix: review standardize regex checking --- pr_agent/servers/gitlab_webhook.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index e57e3b8c..aee3732d 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -163,7 +163,7 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) if ignore_mr_title: - if any([re.search(regex, title) for regex in ignore_mr_title]): + if any(re.search(regex, title) for regex in ignore_mr_title): get_logger().info(f"Ignoring MR with title '{title}' due to gitlab.ignore_mr_title settings") return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) From 14b47237340a0523952d89dd2332febb2562a233 Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Fri, 6 Sep 2024 18:32:46 +0200 Subject: [PATCH 5/9] feat: move configuration to a common config section, add documentation --- .../usage-guide/additional_configurations.md | 33 +++++++++++++++++++ pr_agent/servers/github_app.py | 8 ++--- pr_agent/servers/gitlab_webhook.py | 8 ++--- pr_agent/settings/configuration.toml | 20 +++++------ 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/docs/docs/usage-guide/additional_configurations.md b/docs/docs/usage-guide/additional_configurations.md index 2adfa360..cf32d08f 100644 --- a/docs/docs/usage-guide/additional_configurations.md +++ b/docs/docs/usage-guide/additional_configurations.md @@ -112,3 +112,36 @@ LANGSMITH_API_KEY= LANGSMITH_PROJECT= LANGSMITH_BASE_URL= ``` + +## Ignoring automatic commands in PRs + +In some cases, you may want to ignore automatic commands in PRs. For example you may want to ignore MR with a specific title, or labels or from/to specific branches. + +For example, to ignore MRs with a specific title such as "[AUTO]: foobar", you can add the following to your `configuration.toml` file: + +``` +[config] +ignore_mr_title = ["\\[AUTO\\]"] +``` + +Where the `ignore_mr_title` is a list of regex patterns to match the MR title you want to ignore. + +To ignore MRs with specific labels, you can add the following to your `configuration.toml` file: + +``` +[config] +ignore_mr_labels = ["auto"] +``` + +Where the `ignore_mr_labels` is a list of labels you want to ignore. + +To ignore MRs from specific branches, you can add the following to your `configuration.toml` file: + +``` +[config] +ignore_mr_source_branches = ['develop', 'main', 'master', 'stage'] +ignore_mr_target_branches = ["qa"] +``` + +Where the `ignore_mr_source_branches` and `ignore_mr_target_branches` are lists of regex patterns to match the source and target branches you want to ignore. +They are not mutually exclusive, you can use them together or separately. diff --git a/pr_agent/servers/github_app.py b/pr_agent/servers/github_app.py index 9a8784fd..f9f179b8 100644 --- a/pr_agent/servers/github_app.py +++ b/pr_agent/servers/github_app.py @@ -138,7 +138,7 @@ async def handle_new_pr_opened(body: Dict[str, Any], if action in get_settings().github_app.handle_pr_actions: # ['opened', 'reopened', 'ready_for_review'] # logic to ignore PRs with specific titles (e.g. "[Auto] ...") apply_repo_settings(api_url) - ignore_pr_title_re = get_settings().get("GITHUB_APP.IGNORE_PR_TITLE", []) + ignore_pr_title_re = get_settings().get("CONFIG.IGNORE_PR_TITLE", []) if not isinstance(ignore_pr_title_re, list): ignore_pr_title_re = [ignore_pr_title_re] @@ -147,9 +147,9 @@ async def handle_new_pr_opened(body: Dict[str, Any], return {} # logic to ignore PRs with specific labels or source branches or target branches. - ignore_pr_labels = get_settings().get("GITHUB_APP.IGNORE_PR_LABELS", []) - ignore_pr_source_branches = get_settings().get("GITHUB_APP.IGNORE_PR_SOURCE_BRANCHES", []) - ignore_pr_target_branches = get_settings().get("GITHUB_APP.IGNORE_PR_TARGET_BRANCHES", []) + ignore_pr_labels = get_settings().get("CONFIG.IGNORE_PR_LABELS", []) + ignore_pr_source_branches = get_settings().get("CONFIG.IGNORE_PR_SOURCE_BRANCHES", []) + ignore_pr_target_branches = get_settings().get("CONFIG.IGNORE_PR_TARGET_BRANCHES", []) if ignore_pr_labels: labels = [label['name'] for label in pull_request.get("labels", [])] diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index aee3732d..d51fa387 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -139,10 +139,10 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) # logic to ignore MRs for titles, labels and source, target branches. - ignore_mr_title = get_settings().get("GITLAB.IGNORE_MR_TITLE", []) - ignore_mr_labels = get_settings().get("GITLAB.IGNORE_MR_LABELS", []) - ignore_mr_source_branches = get_settings().get("GITLAB.IGNORE_MR_SOURCE_BRANCHES", []) - ignore_mr_target_branches = get_settings().get("GITLAB.IGNORE_MR_TARGET_BRANCHES", []) + ignore_mr_title = get_settings().get("CONFIG.IGNORE_PR_TITLE", []) + ignore_mr_labels = get_settings().get("CONFIG.IGNORE_PR_LABELS", []) + ignore_mr_source_branches = get_settings().get("CONFIG.IGNORE_PR_SOURCE_BRANCHES", []) + ignore_mr_target_branches = get_settings().get("CONFIG.IGNORE_PR_TARGET_BRANCHES", []) if ignore_mr_source_branches: source_branch = data['object_attributes'].get('source_branch') if any(re.search(regex, source_branch) for regex in ignore_mr_source_branches): diff --git a/pr_agent/settings/configuration.toml b/pr_agent/settings/configuration.toml index e6d5968a..1fc8e0c0 100644 --- a/pr_agent/settings/configuration.toml +++ b/pr_agent/settings/configuration.toml @@ -36,6 +36,15 @@ is_auto_command=false seed=-1 # set positive value to fix the seed (and ensure temperature=0) temperature=0.2 +# a list of regular expressions to match against the PR title to ignore the PR agent +ignore_pr_title = [] +# a list of regular expressions of target branches to ignore from PR agent when an MR is created +ignore_pr_target_branches = [] +# a list of regular expressions of source branches to ignore from PR agent when an MR is created +ignore_pr_source_branches = [] +# labels to ignore from PR agent when an MR is created +ignore_pr_labels = [] + [pr_reviewer] # /review # # enable/disable features require_score_review=false @@ -187,6 +196,7 @@ base_url = "https://api.github.com" publish_inline_comments_fallback_with_verification = true try_fix_invalid_inline_comments = true app_name = "pr-agent" +ignore_bot_pr = true [github_action_config] # auto_review = true # set as env var in .github/workflows/pr-agent.yaml @@ -215,16 +225,6 @@ push_commands = [ "/describe", "/review --pr_reviewer.num_code_suggestions=0", ] -# a list of regular expressions to match against the PR title to ignore the PR agent -ignore_pr_title = [] -# a list of regular expressions of target branches to ignore from PR agent when an MR is created -ignore_pr_target_branches = [] -# a list of regular expressions of source branches to ignore from PR agent when an MR is created -ignore_pr_source_branches = [] -# labels to ignore from PR agent when an MR is created -ignore_pr_labels = [] -# MR titles to ignore from PR agent when an MR is created -ignore_bot_pr = true [gitlab] url = "https://gitlab.com" From 7ccefca35e78786d3cbc59ccff02a73b0e00f061 Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Fri, 6 Sep 2024 18:41:36 +0200 Subject: [PATCH 6/9] fix: remove comment --- pr_agent/servers/gitlab_webhook.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index d51fa387..bfd3c6e3 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -133,7 +133,6 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): get_logger().info(f"New merge request: {url}") - # ignore draft MRs. if draft: get_logger().info(f"Skipping draft MR: {url}") return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) From be93c52380541498cb50dc9b1a7191bcc166d758 Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Fri, 6 Sep 2024 18:42:28 +0200 Subject: [PATCH 7/9] fix: remove line --- pr_agent/servers/gitlab_webhook.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index bfd3c6e3..26311f6f 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -130,7 +130,6 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): title = data['object_attributes'].get('title') url = data['object_attributes'].get('url') draft = data['object_attributes'].get('draft') - get_logger().info(f"New merge request: {url}") if draft: From d2a744e70c1a1b17399ce0b91a5d26ebd929e974 Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Fri, 6 Sep 2024 18:42:47 +0200 Subject: [PATCH 8/9] fix: remove line --- pr_agent/servers/gitlab_webhook.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pr_agent/servers/gitlab_webhook.py b/pr_agent/servers/gitlab_webhook.py index 26311f6f..d0f28365 100644 --- a/pr_agent/servers/gitlab_webhook.py +++ b/pr_agent/servers/gitlab_webhook.py @@ -125,7 +125,6 @@ async def gitlab_webhook(background_tasks: BackgroundTasks, request: Request): return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"message": "success"})) log_context["sender"] = sender - if data.get('object_kind') == 'merge_request' and data['object_attributes'].get('action') in ['open', 'reopen']: title = data['object_attributes'].get('title') url = data['object_attributes'].get('url') From 39913ef12a163d8870d41852c210fc7406680d55 Mon Sep 17 00:00:00 2001 From: Paolo Mainardi Date: Fri, 6 Sep 2024 20:23:33 +0200 Subject: [PATCH 9/9] fix: remove specific configurations --- pr_agent/settings/configuration.toml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pr_agent/settings/configuration.toml b/pr_agent/settings/configuration.toml index 1fc8e0c0..b8b02460 100644 --- a/pr_agent/settings/configuration.toml +++ b/pr_agent/settings/configuration.toml @@ -238,14 +238,6 @@ push_commands = [ "/describe", "/review --pr_reviewer.num_code_suggestions=0", ] -# a list of regular expressions to match against the PR title to ignore the PR agent -ignore_mr_title = [] -# target branches to ignore from PR agent when an MR is created -ignore_mr_target_branches = [] -# source branches to ignore from PR agent when an MR is created -ignore_mr_source_branches = [] -# labels to ignore from PR agent when an MR is created -ignore_mr_labels = [] [bitbucket_app] pr_commands = [