Skip to content

Commit 512bc51

Browse files
committed
Allow per-project opt-out of ELN and Log Detective
Add disabled_projects_for_eln and disabled_projects_for_logdetective config options to allow opting out specific packages from ELN builds/tests and Log Detective analysis. Resolves: #3021 Resolves: #3046
1 parent 5cba8d5 commit 512bc51

File tree

14 files changed

+268
-5
lines changed

14 files changed

+268
-5
lines changed

packit_service/config.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ def __init__(
110110
fedora_ci_run_by_default: bool = False,
111111
disabled_projects_for_fedora_ci: Optional[Union[set[str], list[str]]] = None,
112112
enabled_projects_for_fedora_ci: Optional[Union[set[str], list[str]]] = None,
113+
disabled_projects_for_eln: Optional[Union[set[str], list[str]]] = None,
114+
disabled_projects_for_logdetective: Optional[Union[set[str], list[str]]] = None,
113115
rate_limit_threshold: Optional[int] = None,
114116
logdetective_enabled: bool = False,
115117
logdetective_url: str = LOGDETECTIVE_PACKIT_SERVER_URL,
@@ -176,6 +178,10 @@ def __init__(
176178
# e.g.:
177179
# - https://src.fedoraproject.org/rpms/python-ogr
178180
self.disabled_projects_for_fedora_ci: set[str] = set(disabled_projects_for_fedora_ci or [])
181+
self.disabled_projects_for_eln: set[str] = set(disabled_projects_for_eln or [])
182+
self.disabled_projects_for_logdetective: set[str] = set(
183+
disabled_projects_for_logdetective or []
184+
)
179185

180186
self.projects_to_sync = projects_to_sync or []
181187

@@ -245,10 +251,12 @@ def hide(token: str) -> str:
245251
f"redhat_api_refresh_token='{hide(self.redhat_api_refresh_token)}', "
246252
f"package_config_path_override='{self.package_config_path_override}', "
247253
f"logdetective_enabled='{self.logdetective_enabled}', "
248-
f"logdetective_url='{self.logdetective_url}')"
254+
f"logdetective_url='{self.logdetective_url}', "
249255
f"fedora_ci_run_by_default='{self.fedora_ci_run_by_default}', "
250256
f"enabled_projects_for_fedora_ci='{self.enabled_projects_for_fedora_ci}', "
251-
f"disabled_projects_for_fedora_ci='{self.disabled_projects_for_fedora_ci}')"
257+
f"disabled_projects_for_fedora_ci='{self.disabled_projects_for_fedora_ci}', "
258+
f"disabled_projects_for_eln='{self.disabled_projects_for_eln}', "
259+
f"disabled_projects_for_logdetective='{self.disabled_projects_for_logdetective}')"
252260
)
253261

254262
@classmethod

packit_service/fedora_ci_config.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,13 @@ def is_project_enabled(self, project_url: str) -> bool:
5252
) and project_url not in self._service_config.disabled_projects_for_fedora_ci
5353
# Opt-in mode: only run if explicitly enabled
5454
return project_url in self._service_config.enabled_projects_for_fedora_ci
55+
56+
def is_eln_enabled(self, project_url: str) -> bool:
57+
"""Should ELN builds/tests run for this project?"""
58+
return project_url not in self._service_config.disabled_projects_for_eln
59+
60+
def is_logdetective_enabled(self, project_url: str) -> bool:
61+
"""Should Log Detective analysis run for this project?"""
62+
if not self._service_config.logdetective_enabled:
63+
return False
64+
return project_url not in self._service_config.disabled_projects_for_logdetective

packit_service/schema.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ class ServiceConfigSchema(UserConfigSchema):
8787
rate_limit_threshold = fields.Integer(missing=None)
8888
fedora_ci_run_by_default = fields.Bool(missing=False)
8989
disabled_projects_for_fedora_ci = fields.List(fields.String())
90+
disabled_projects_for_eln = fields.List(fields.String())
91+
disabled_projects_for_logdetective = fields.List(fields.String())
9092
logdetective_enabled = fields.Bool(missing=False, default=False)
9193
logdetective_url = fields.String()
9294
logdetective_token = fields.String()

packit_service/worker/checker/distgit.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
koji,
1717
pagure,
1818
)
19+
from packit_service.fedora_ci_config import FedoraCIConfig
1920
from packit_service.utils import (
2021
get_packit_commands_from_comment,
2122
pr_labels_match_configuration,
@@ -169,6 +170,17 @@ def pre_check(self) -> bool:
169170
return True
170171

171172

173+
class IsProjectEnabledForELN(Checker):
174+
"""Verify that the project has not opted out of ELN builds and tests"""
175+
176+
def pre_check(self) -> bool:
177+
project_url = self.project.get_web_url()
178+
if not FedoraCIConfig.get_config().is_eln_enabled(project_url):
179+
logger.info(f"ELN disabled for project {project_url}, skipping.")
180+
return False
181+
return True
182+
183+
172184
class PackageNeedsELNBuildFromRawhide(Checker, GetPagurePullRequestMixin):
173185
def pre_check(self) -> bool:
174186
if (

packit_service/worker/handlers/distgit.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
from packit_service.worker.checker.abstract import Checker
7979
from packit_service.worker.checker.distgit import (
8080
HasIssueCommenterRetriggeringPermissions,
81+
IsProjectEnabledForELN,
8182
IsProjectInRpmsNamespace,
8283
IsProjectOk,
8384
IsUpstreamTagMatchingConfig,
@@ -1024,7 +1025,11 @@ def dist_git_branch(self) -> str:
10241025

10251026
@staticmethod
10261027
def get_checkers() -> tuple[type[Checker], ...]:
1027-
return (PermissionOnDistgitForFedoraCI, PackageNeedsELNBuildFromRawhide)
1028+
return (
1029+
PermissionOnDistgitForFedoraCI,
1030+
IsProjectEnabledForELN,
1031+
PackageNeedsELNBuildFromRawhide,
1032+
)
10281033

10291034

10301035
class AbstractDownstreamKojiBuildHandler(

packit_service/worker/handlers/koji.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
gitlab,
3131
koji,
3232
)
33+
from packit_service.fedora_ci_config import FedoraCIConfig
3334
from packit_service.models import (
3435
AbstractProjectObjectDbType,
3536
KojiBuildTargetModel,
@@ -383,8 +384,9 @@ def trigger_log_detective_if_configured(self):
383384
Since the analysis is not crucial for the build task itself, we only log
384385
when the LD trigger failed, and not return a failed TaskResult
385386
"""
386-
if not self.service_config.logdetective_enabled:
387-
logger.info("Log Detective disabled in config, skipping.")
387+
project_url = self.project.get_web_url()
388+
if not FedoraCIConfig.get_config().is_logdetective_enabled(project_url):
389+
logger.info(f"Log Detective disabled for project {project_url}, skipping.")
388390
return
389391
logger.info("Triggering Log Detective Helper for a failed Koji build")
390392
log_detective_trigger = LogDetectiveKojiTriggerHelper(

packit_service/worker/handlers/testing_farm.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
from packit_service.utils import elapsed_seconds, get_default_tf_mapping
4343
from packit_service.worker.checker.abstract import Checker
4444
from packit_service.worker.checker.distgit import (
45+
IsProjectEnabledForELN,
4546
IsProjectInRpmsNamespace,
4647
IsProjectInTestsNamespace,
4748
PackageNeedsELNBuildFromRawhide,
@@ -538,6 +539,7 @@ class DownstreamTestingFarmELNHandler(DownstreamTestingFarmHandler):
538539
def get_checkers() -> tuple[type[Checker], ...]:
539540
return (
540541
IsProjectInRpmsNamespace,
542+
IsProjectEnabledForELN,
541543
PackageNeedsELNBuildFromRawhide,
542544
HasEventSuccessfulRawhideELNScratchBuild,
543545
PermissionOnDistgitForFedoraCI,

tests/integration/test_dg_pr.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,16 @@ def test_downstream_koji_scratch_build(distgit_pr_event, target_branch, uid, che
104104
.should_receive("get_git_urls")
105105
.and_return({"git": "https://src.fedoraproject.org/rpms/optee_os.git"})
106106
.mock()
107+
.should_receive("get_web_url")
108+
.and_return("https://src.fedoraproject.org/rpms/optee_os")
109+
.mock()
107110
)
108111
service_config = (
109112
flexmock(
110113
enabled_projects_for_fedora_ci="https://src.fedoraproject.org/rpms/optee_os",
111114
fedora_ci_run_by_default=False,
112115
disabled_projects_for_fedora_ci=set(),
116+
disabled_projects_for_eln=set(),
113117
command_handler_work_dir=SANDCASTLE_WORK_DIR,
114118
repository_cache="/tmp/repository-cache",
115119
add_repositories_to_repository_cache=False,

tests/integration/test_koji_build_cancel.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,16 @@ def mock_distgit_pr_functionality():
7373
.should_receive("get_git_urls")
7474
.and_return({"git": "https://src.fedoraproject.org/rpms/optee_os.git"})
7575
.mock()
76+
.should_receive("get_web_url")
77+
.and_return("https://src.fedoraproject.org/rpms/optee_os")
78+
.mock()
7679
)
7780
service_config = (
7881
flexmock(
7982
enabled_projects_for_fedora_ci="https://src.fedoraproject.org/rpms/optee_os",
8083
fedora_ci_run_by_default=False,
8184
disabled_projects_for_fedora_ci=set(),
85+
disabled_projects_for_eln=set(),
8286
command_handler_work_dir=SANDCASTLE_WORK_DIR,
8387
repository_cache="/tmp/repository-cache",
8488
add_repositories_to_repository_cache=False,

tests/integration/test_listen_to_fedmsg.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2609,6 +2609,9 @@ def test_koji_build_end_downstream(
26092609
enabled_projects_for_fedora_ci="https://src.fedoraproject.org/rpms/packit",
26102610
fedora_ci_run_by_default=False,
26112611
disabled_projects_for_fedora_ci=set(),
2612+
disabled_projects_for_eln=set(),
2613+
logdetective_enabled=False,
2614+
disabled_projects_for_logdetective=set(),
26122615
koji_logs_url="",
26132616
koji_web_url="",
26142617
deployment=Deployment.stg,
@@ -3332,6 +3335,7 @@ def test_pagure_pr_updated(pagure_pr_updated, project_namespace, project_repo):
33323335
testing_farm_api_url="API URL",
33333336
fedora_ci_run_by_default=True,
33343337
disabled_projects_for_fedora_ci=set(),
3338+
disabled_projects_for_eln=set(),
33353339
koji_logs_url="",
33363340
koji_web_url="",
33373341
command_handler_work_dir=SANDCASTLE_WORK_DIR,

0 commit comments

Comments
 (0)