Skip to content

Commit 3e587c3

Browse files
Several fixes for ELN tests on rawhide dist-git PRs (#2950)
Several fixes for ELN tests on rawhide dist-git PRs Matching Koji scratch builds are now identified by TF pipeline ID rather than PR target branch and there is a new handler for /packit-ci test that retriggers ELN tests. Related to #2920. Reviewed-by: gemini-code-assist[bot] Reviewed-by: Nikola Forró Reviewed-by: Maja Massarini Reviewed-by: Laura Barcziová
2 parents 22c70d8 + e972025 commit 3e587c3

8 files changed

Lines changed: 72 additions & 7 deletions

File tree

packit_service/worker/checker/testing_farm.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ def pre_check(self) -> bool:
6969
return bool(self.koji_task_event and self.koji_task_event.state == KojiTaskState.closed)
7070

7171

72+
class IsEventOkForFedoraCIAsRawhideELN(IsEventOkForFedoraCI):
73+
_rawhide_eln_build = True
74+
75+
7276
class IsEventForJob(Checker):
7377
def pre_check(self) -> bool:
7478
if self.data.identifier != self.job_config.identifier:

packit_service/worker/handlers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
CoprOpenScanHubTaskStartedHandler,
3737
)
3838
from packit_service.worker.handlers.testing_farm import (
39+
DownstreamTestingFarmELNHandler,
3940
DownstreamTestingFarmHandler,
4041
DownstreamTestingFarmResultsHandler,
4142
TestingFarmHandler,
@@ -58,6 +59,7 @@
5859
KojiBuildHandler.__name__,
5960
KojiTaskReportHandler.__name__,
6061
DownstreamTestingFarmHandler.__name__,
62+
DownstreamTestingFarmELNHandler.__name__,
6163
DownstreamTestingFarmResultsHandler.__name__,
6264
TestingFarmHandler.__name__,
6365
TestingFarmResultsHandler.__name__,

packit_service/worker/handlers/abstract.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ class TaskName(str, enum.Enum):
225225
testing_farm = "task.run_testing_farm_handler"
226226
testing_farm_results = "task.run_testing_farm_results_handler"
227227
downstream_testing_farm = "task.run_downstream_testing_farm_handler"
228+
downstream_testing_farm_eln = "task.run_downstream_testing_farm_eln_handler"
228229
downstream_testing_farm_results = "task.run_downstream_testing_farm_results_handler"
229230
propose_downstream = "task.run_propose_downstream_handler"
230231
upstream_koji_build = "task.run_koji_build_handler"

packit_service/worker/handlers/mixin.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
KojiBuildTargetModel,
2929
ProjectEventModel,
3030
SRPMBuildModel,
31+
TFTTestRunTargetModel,
3132
)
3233
from packit_service.utils import get_packit_commands_from_comment
3334
from packit_service.worker.handlers.abstract import CeleryTask
@@ -97,6 +98,8 @@ def db_project_event(self) -> Optional[ProjectEventModel]: ...
9798
class GetKojiBuildFromTaskOrPullRequestMixin(GetKojiBuild, GetKojiTaskEventMixin):
9899
_koji_build: Optional[KojiBuildTargetModel] = None
99100
_db_project_event: Optional[ProjectEventModel] = None
101+
_rawhide_eln_build: bool = False
102+
pipeline_id: Optional[str] = None
100103

101104
@property
102105
def koji_build(self) -> Optional[KojiBuildTargetModel]:
@@ -105,11 +108,26 @@ def koji_build(self) -> Optional[KojiBuildTargetModel]:
105108
self._koji_build = KojiBuildTargetModel.get_by_task_id(
106109
str(self.koji_task_event.task_id)
107110
)
111+
elif self.pipeline_id:
112+
run_model = TFTTestRunTargetModel.get_by_pipeline_id(
113+
pipeline_id=self.pipeline_id,
114+
)
115+
if not run_model:
116+
logger.error(f"No test run found for TF pipeline {self.pipeline_id}")
117+
return None
118+
if (build_count := len(run_model.koji_builds)) != 1:
119+
logger.error(
120+
f"Expected a single Koji build matching TF pipeline {self.pipeline_id}, "
121+
f"found {build_count} builds"
122+
)
123+
return None
124+
self._koji_build = run_model.koji_builds[0]
108125
else:
109126
pull_request = self.project.get_pr(self.data.pr_id)
110127
self._koji_build = (
111128
KojiBuildTargetModel.get_last_successful_scratch_by_commit_target(
112-
pull_request.head_commit, pull_request.target_branch
129+
pull_request.head_commit,
130+
pull_request.target_branch if not self._rawhide_eln_build else "eln",
113131
)
114132
)
115133
return self._koji_build

packit_service/worker/handlers/testing_farm.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,17 @@
4141
)
4242
from packit_service.utils import elapsed_seconds
4343
from packit_service.worker.checker.abstract import Checker
44-
from packit_service.worker.checker.distgit import PermissionOnDistgitForFedoraCI
44+
from packit_service.worker.checker.distgit import (
45+
PackageNeedsELNBuildFromRawhide,
46+
PermissionOnDistgitForFedoraCI,
47+
)
4548
from packit_service.worker.checker.testing_farm import (
4649
CanActorRunJob,
4750
IsCoprBuildDefined,
4851
IsEventForJob,
4952
IsEventOk,
5053
IsEventOkForFedoraCI,
54+
IsEventOkForFedoraCIAsRawhideELN,
5155
IsIdentifierFromCommentMatching,
5256
IsJobConfigTriggerMatching,
5357
IsLabelFromCommentMatching,
@@ -484,6 +488,22 @@ def run(self) -> TaskResults:
484488
return TaskResults(success=False, details=result_details)
485489

486490

491+
@run_for_comment_as_fedora_ci(command="test")
492+
@reacts_to_as_fedora_ci(event=pagure.pr.Comment)
493+
class DownstreamTestingFarmELNHandler(DownstreamTestingFarmHandler):
494+
__test__ = False
495+
_rawhide_eln_build = True
496+
task_name = TaskName.downstream_testing_farm_eln
497+
498+
@staticmethod
499+
def get_checkers() -> tuple[type[Checker], ...]:
500+
return (
501+
PackageNeedsELNBuildFromRawhide,
502+
IsEventOkForFedoraCIAsRawhideELN,
503+
PermissionOnDistgitForFedoraCI,
504+
)
505+
506+
487507
@configured_as(job_type=JobType.tests)
488508
@reacts_to(event=testing_farm.Result)
489509
class TestingFarmResultsHandler(

packit_service/worker/tasks.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
CoprOpenScanHubTaskFinishedHandler,
5454
CoprOpenScanHubTaskStartedHandler,
5555
DownstreamLogDetectiveResultsHandler,
56+
DownstreamTestingFarmELNHandler,
5657
DownstreamTestingFarmHandler,
5758
DownstreamTestingFarmResultsHandler,
5859
GithubAppInstallationHandler,
@@ -350,6 +351,24 @@ def run_downstream_testing_farm_handler(
350351
return get_handlers_task_results(handler.run_job(), event)
351352

352353

354+
@celery_app.task(bind=True, name=TaskName.downstream_testing_farm_eln, base=TaskWithRetry)
355+
def run_downstream_testing_farm_eln_handler(
356+
self,
357+
event: dict,
358+
package_config: dict,
359+
job_config: dict,
360+
testing_farm_target_id: Optional[int] = None,
361+
):
362+
handler = DownstreamTestingFarmELNHandler(
363+
package_config=load_package_config(package_config),
364+
job_config=load_job_config(job_config),
365+
event=event,
366+
celery_task=self,
367+
testing_farm_target_id=testing_farm_target_id,
368+
)
369+
return get_handlers_task_results(handler.run_job(), event)
370+
371+
353372
@celery_app.task(name=TaskName.downstream_testing_farm_results, base=TaskWithRetry)
354373
def run_downstream_testing_farm_results_handler(
355374
event: dict,

tests/integration/test_pr_comment.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import packit_service.models
3131
import packit_service.service.urls as urls
32+
from packit_service import utils
3233
from packit_service.config import ServiceConfig
3334
from packit_service.constants import (
3435
COMMENT_REACTION,
@@ -2577,6 +2578,8 @@ def test_downstream_koji_scratch_build_retrigger_via_dist_git_pr_comment(
25772578
flexmock(grouped_targets=[koji_build]),
25782579
)
25792580

2581+
flexmock(utils).should_receive("get_eln_packages").and_return([])
2582+
25802583
flexmock(LocalProjectBuilder, _refresh_the_state=lambda *args: None)
25812584
flexmock(Signature).should_receive("apply_async").once()
25822585
flexmock(Pushgateway).should_receive("push").times(2).and_return()
@@ -3422,6 +3425,8 @@ def _test_downstream_tf_retrigger_common(
34223425
TaskResults(success=True, details={}),
34233426
)
34243427

3428+
flexmock(utils).should_receive("get_eln_packages").and_return([])
3429+
34253430
flexmock(Signature).should_receive("apply_async").once()
34263431
flexmock(Pushgateway).should_receive("push").times(2).and_return()
34273432

tests/unit/test_testing_farm.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
from packit_service.models import (
3232
BuildStatus,
3333
CoprBuildTargetModel,
34-
KojiBuildTargetModel,
3534
PipelineModel,
3635
ProjectEventModel,
3736
ProjectEventModelType,
@@ -314,6 +313,7 @@ def test_downstream_testing_farm_response(
314313
target="fedora-rawhide",
315314
status=None,
316315
data={"fedora_ci_test": "installability"},
316+
koji_builds=[flexmock(target="rawhide")],
317317
)
318318
.should_receive("get_project_event_model")
319319
.and_return(
@@ -348,10 +348,6 @@ def test_downstream_testing_farm_response(
348348

349349
flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None)
350350

351-
flexmock(KojiBuildTargetModel).should_receive(
352-
"get_last_successful_scratch_by_commit_target"
353-
).with_args("0000000000", "rawhide").and_return(flexmock(target="rawhide"))
354-
355351
test_farm_handler.run()
356352

357353

0 commit comments

Comments
 (0)