This is an automated email from the ASF dual-hosted git repository. knaufk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/flink-jira-bot.git
commit a6002490ef50be5f4b3c103ba80db0d90d307c97 Author: Konstantin Knauf <knauf.konstan...@gmail.com> AuthorDate: Wed Apr 21 14:42:06 2021 +0200 [hotfix] pull up logic to handle stale tickets --- flink_jira_rule.py | 24 ++++++++++++++++++++++++ stale_assigned_rule.py | 33 ++++++--------------------------- stale_major_or_above_rule.py | 34 +++++++--------------------------- stale_minor_rule.py | 34 +++++++--------------------------- 4 files changed, 44 insertions(+), 81 deletions(-) diff --git a/flink_jira_rule.py b/flink_jira_rule.py index ff32a1e..f11f275 100644 --- a/flink_jira_rule.py +++ b/flink_jira_rule.py @@ -114,6 +114,10 @@ class FlinkJiraRule: def run(self): return + @abc.abstractmethod + def handle_stale_ticket(self, key): + return + def mark_stale_tickets_stale(self, jql_query): logging.info(f"Looking for stale tickets.") @@ -141,3 +145,23 @@ class FlinkJiraRule: f"Found https://issues.apache.org/jira/browse/{key}, but is has recently updated Subtasks. " f"Ignoring for now." ) + + def handle_tickets_marked_stale(self, jql_query): + logging.info(f"Looking for ticket previously marked as {self.warning_label}.") + issues = self.get_issues(jql_query) + + for issue in issues: + key = issue["key"] + logging.info( + f"Found https://issues.apache.org/jira/browse/{key}. It is now processed as stale." + ) + + formatted_comment = self.done_comment.format( + warning_days=self.warning_days, + warning_label=self.warning_label, + done_label=self.done_label, + ) + + self.add_comment(key, formatted_comment) + self.replace_label(issue, self.warning_label, self.done_label) + self.handle_stale_ticket(key) diff --git a/stale_assigned_rule.py b/stale_assigned_rule.py index cb672d4..26c7b00 100644 --- a/stale_assigned_rule.py +++ b/stale_assigned_rule.py @@ -32,35 +32,14 @@ class StaleAssignedRule(FlinkJiraRule): super().__init__(jira_client, config, is_dry_run) def run(self): - self.unassign_tickets_marked_stale() - self.mark_stale_tickets_stale( - f"project = FLINK AND resolution = Unresolved AND assignee is not EMPTY " - f"AND updated < startOfDay(-{self.stale_days}d)" - ) - - def unassign_tickets_marked_stale(self): - - assigned_tickets_marked_stale = ( + self.handle_tickets_marked_stale( f"project=FLINK AND resolution = Unresolved AND labels in " f'("{self.warning_label}") AND updated < startOfDay(-{self.warning_days}d)' ) - logging.info( - f"Looking for assigned tickets, which were previously marked as {self.warning_label}." + self.mark_stale_tickets_stale( + f"project = FLINK AND resolution = Unresolved AND assignee is not EMPTY " + f"AND updated < startOfDay(-{self.stale_days}d)" ) - issues = self.get_issues(assigned_tickets_marked_stale) - - for issue in issues: - key = issue["key"] - logging.info( - f"Found https://issues.apache.org/jira/browse/{key}. It is now unassigned due to inactivity." - ) - - formatted_comment = self.done_comment.format( - warning_days=self.warning_days, - warning_label=self.warning_label, - done_label=self.done_label, - ) - self.add_comment(key, formatted_comment) - self.replace_label(issue, self.warning_label, self.done_label) - self.unassign(key) + def handle_stale_ticket(self, key): + self.unassign(key) diff --git a/stale_major_or_above_rule.py b/stale_major_or_above_rule.py index e37c9d1..d5e5663 100644 --- a/stale_major_or_above_rule.py +++ b/stale_major_or_above_rule.py @@ -38,35 +38,15 @@ class StaleMajorOrAboveRule(FlinkJiraRule): LOWER_PRIORITIES = {"Blocker": "Critical", "Critical": "Major", "Major": "Minor"} def run(self): - self.close_tickets_marked_stale() + self.handle_tickets_marked_stale( + f"project=FLINK AND Priority = {self.priority} AND resolution = Unresolved " + f'AND labels in ("{self.warning_label}") ' + f"AND updated < startOfDay(-{self.warning_days}d)" + ) self.mark_stale_tickets_stale( f"project=FLINK AND priority = {self.priority} AND resolution = Unresolved " f"AND assignee is empty AND updated < startOfDay(-{self.stale_days}d)" ) - def close_tickets_marked_stale(self): - - tickets_marked_stale = ( - f"project=FLINK AND Priority = {self.priority} AND resolution = Unresolved AND labels in " - f'("{self.warning_label}") AND updated < startOfDay(-{self.warning_days}d)' - ) - logging.info( - f"Looking for {self.priority} tickets, which were previously marked as {self.warning_label}." - ) - issues = self.get_issues(tickets_marked_stale) - - for issue in issues: - key = issue["key"] - logging.info( - f"Found https://issues.apache.org/jira/browse/{key}. It is now deprioritized due to inactivity." - ) - - formatted_comment = self.done_comment.format( - warning_days=self.warning_days, - warning_label=self.warning_label, - done_label=self.done_label, - ) - - self.add_comment(key, formatted_comment) - self.replace_label(issue, self.warning_label, self.done_label) - self.set_priority(key, self.LOWER_PRIORITIES[self.priority]) + def handle_stale_ticket(self, key): + self.set_priority(key, self.LOWER_PRIORITIES[self.priority]) diff --git a/stale_minor_rule.py b/stale_minor_rule.py index b06785b..0bef5d9 100644 --- a/stale_minor_rule.py +++ b/stale_minor_rule.py @@ -32,35 +32,15 @@ class StaleMinorRule(FlinkJiraRule): super().__init__(jira_client, config, is_dry_run) def run(self): - self.close_tickets_marked_stale() + self.handle_tickets_marked_stale( + f"project=FLINK AND Priority = Minor AND resolution = Unresolved " + f'AND labels in ("{self.warning_label}") ' + f"AND updated < startOfDay(-{self.warning_days}d)" + ) self.mark_stale_tickets_stale( f"project = FLINK AND Priority = Minor AND resolution = Unresolved " f"AND updated < startOfDay(-{self.stale_days}d)" ) - def close_tickets_marked_stale(self): - - minor_tickets_marked_stale = ( - f"project=FLINK AND Priority = Minor AND resolution = Unresolved AND labels in " - f'("{self.warning_label}") AND updated < startOfDay(-{self.warning_days}d)' - ) - logging.info( - f"Looking for minor tickets, which were previously marked as {self.warning_label}." - ) - issues = self.get_issues(minor_tickets_marked_stale) - - for issue in issues: - key = issue["key"] - logging.info( - f"Found https://issues.apache.org/jira/browse/{key}. It is now closed due to inactivity." - ) - - formatted_comment = self.done_comment.format( - warning_days=self.warning_days, - warning_label=self.warning_label, - done_label=self.done_label, - ) - - self.add_comment(key, formatted_comment) - self.replace_label(issue, self.warning_label, self.done_label) - self.close_issue(key) + def handle_stale_ticket(self, key): + self.close_issue(key)