diff --git a/packit_service/worker/handlers/bodhi.py b/packit_service/worker/handlers/bodhi.py index 58ea2c01f..13ba9ed88 100644 --- a/packit_service/worker/handlers/bodhi.py +++ b/packit_service/worker/handlers/bodhi.py @@ -50,7 +50,10 @@ GetBranchesFromIssueMixin, PackitAPIWithDownstreamMixin, ) -from packit_service.worker.reporting import report_in_issue_repository +from packit_service.worker.reporting import ( + report_in_issue_repository, + update_message_with_configured_failure_comment_message, +) from packit_service.worker.result import TaskResults logger = logging.getLogger(__name__) @@ -141,6 +144,10 @@ def report_in_issue_repository( f"{body}\n{trigger_type_description}\n\n{msg_retrigger}{MSG_GET_IN_TOUCH}\n" ) + body_msg = update_message_with_configured_failure_comment_message( + body_msg, self.job_config + ) + report_in_issue_repository( issue_repository=self.job_config.issue_repository, service_config=self.service_config, diff --git a/packit_service/worker/handlers/distgit.py b/packit_service/worker/handlers/distgit.py index a3c26ddc9..9c4fe7102 100644 --- a/packit_service/worker/handlers/distgit.py +++ b/packit_service/worker/handlers/distgit.py @@ -89,7 +89,11 @@ PackitAPIWithDownstreamMixin, GetSyncReleaseTagMixin, ) -from packit_service.worker.reporting import BaseCommitStatus, report_in_issue_repository +from packit_service.worker.reporting import ( + BaseCommitStatus, + report_in_issue_repository, + update_message_with_configured_failure_comment_message, +) from packit_service.worker.result import TaskResults logger = logging.getLogger(__name__) @@ -494,6 +498,10 @@ def _report_errors_for_each_branch(self, message: str) -> None: ) body_msg = f"{message}{msg_retrigger}\n" + body_msg = update_message_with_configured_failure_comment_message( + body_msg, self.job_config + ) + PackageConfigGetter.create_issue_if_needed( project=self.project, title=f"{self.job_name_for_reporting.capitalize()} failed for " @@ -570,13 +578,22 @@ def get_resolved_bugs(self) -> List[str]: return bugs.split(",") def _report_errors_for_each_branch(self, message: str) -> None: + body_msg = ( + f"{message}\n\n---\n\n*Get in [touch with us]({CONTACTS_URL}) if you " + f"need some help.*\n" + ) + long_message = update_message_with_configured_failure_comment_message( + body_msg, self.job_config + ) + short_message = update_message_with_configured_failure_comment_message( + message, self.job_config + ) report_in_issue_repository( issue_repository=self.job_config.issue_repository, service_config=self.service_config, title=f"Pull from upstream failed for release {self.tag}", - message=message - + f"\n\n---\n\n*Get in [touch with us]({CONTACTS_URL}) if you need some help.*", - comment_to_existing=message, + message=long_message, + comment_to_existing=short_message, ) def run(self) -> TaskResults: @@ -665,6 +682,9 @@ def report_in_issue_repository(self, branch: str, ex: PackitException) -> None: body_msg = ( f"{body}\n{trigger_type_description}\n\n{msg_retrigger}{MSG_GET_IN_TOUCH}\n" ) + body_msg = update_message_with_configured_failure_comment_message( + body_msg, self.job_config + ) report_in_issue_repository( issue_repository=self.job_config.issue_repository, diff --git a/packit_service/worker/reporting.py b/packit_service/worker/reporting.py index 7e2c6706a..dadda46bd 100644 --- a/packit_service/worker/reporting.py +++ b/packit_service/worker/reporting.py @@ -17,6 +17,7 @@ ) from ogr.services.gitlab import GitlabProject from ogr.services.pagure import PagureProject +from packit.config import JobConfig from packit_service.config import ServiceConfig, PackageConfigGetter from packit_service.constants import ( @@ -569,3 +570,18 @@ def report_in_issue_repository( message=message, comment_to_existing=comment_to_existing, ) + + +def update_message_with_configured_failure_comment_message( + comment: str, job_config: JobConfig +) -> str: + """ + If there is the notifications.failure_comment.message present in the configuration, + append it to the existing message. + """ + configured_failure_message = ( + f"\n\n---\n{configured_message}" + if (configured_message := job_config.notifications.failure_comment.message) + else "" + ) + return f"{comment}{configured_failure_message}" diff --git a/tests/unit/test_distgit.py b/tests/unit/test_distgit.py index 95beccb2c..2e9ec25f9 100644 --- a/tests/unit/test_distgit.py +++ b/tests/unit/test_distgit.py @@ -1,21 +1,22 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT import json -import pytest -from flexmock import flexmock +import pytest from fasjson_client import Client +from flexmock import flexmock from ogr.services.github import GithubService from packit.api import PackitAPI +from packit.config.notifications import NotificationsConfig +from packit_service.config import PackageConfigGetter +from packit_service.worker.events.event import EventData from packit_service.worker.handlers.distgit import ( ProposeDownstreamHandler, DownstreamKojiBuildHandler, AbstractSyncReleaseHandler, PullFromUpstreamHandler, ) -from packit_service.worker.events.event import EventData -from packit_service.config import PackageConfigGetter def test_create_one_issue_for_pr(): @@ -48,7 +49,9 @@ def test_create_one_issue_for_pr(): ] ) flexmock(ProposeDownstreamHandler).should_receive("project").and_return(project) - handler = ProposeDownstreamHandler(None, None, {}, flexmock()) + handler = ProposeDownstreamHandler( + None, flexmock(notifications=NotificationsConfig()), {}, flexmock() + ) handler._report_errors_for_each_branch( { "f34": "Propose downstream failed for release 056", diff --git a/tests/unit/test_reporting.py b/tests/unit/test_reporting.py index 88a930947..04c821866 100644 --- a/tests/unit/test_reporting.py +++ b/tests/unit/test_reporting.py @@ -14,6 +14,10 @@ ) from ogr.services.gitlab import GitlabProject from ogr.services.pagure import PagureProject +from packit.config.notifications import ( + NotificationsConfig, + FailureCommentNotificationsConfig, +) from packit_service.worker import reporting from packit_service.worker.reporting import ( @@ -23,6 +27,7 @@ StatusReporterGitlab, StatusReporterGithubChecks, DuplicateCheckMode, + update_message_with_configured_failure_comment_message, ) create_table_content = StatusReporterGithubChecks._create_table @@ -634,3 +639,24 @@ def test_comment(pr_id, commit_sha, duplicate_check, existing_comments, should_c act_upon.should_receive("commit_comment").never() reporter.comment(body="foo", duplicate_check=duplicate_check) + + +@pytest.mark.parametrize( + "comment,configured_message,result", + [ + ("Some comment", None, "Some comment"), + ("Some comment", "hello @admin", "Some comment\n\n---\nhello @admin"), + ], +) +def test_update_message_with_configured_failure_comment_message( + comment, configured_message, result +): + job_config = flexmock( + notifications=NotificationsConfig( + failure_comment=FailureCommentNotificationsConfig(configured_message) + ) + ) + assert ( + update_message_with_configured_failure_comment_message(comment, job_config) + == result + )