Skip to content

Commit 688c4cf

Browse files
Resolve owner and project through CoprBuildHelper (#2322)
Resolve owner and project through CoprBuildHelper If no owner and project are given in the vm_image_build job resolve them through the CoprBuildHelper defaults. When looking for the copr_build job related with a vm_image_build and COPR owner or project are not given then guess they are being created by the CoprBuildHelper and use it to find them. Reviewed-by: Laura Barcziová
2 parents baf8e29 + 517b2af commit 688c4cf

File tree

11 files changed

+187
-152
lines changed

11 files changed

+187
-152
lines changed

packit_service/worker/checker/copr.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,23 @@
1818
GetCoprBuildJobHelperForIdMixin,
1919
GetCoprBuildJobHelperMixin,
2020
GetCoprSRPMBuildMixin,
21+
ConfigFromEventMixin,
2122
)
2223
from packit_service.worker.reporting import BaseCommitStatus
2324

2425
logger = logging.getLogger(__name__)
2526

2627

27-
class IsJobConfigTriggerMatching(Checker, GetCoprBuildJobHelperMixin):
28+
class IsJobConfigTriggerMatching(
29+
Checker, ConfigFromEventMixin, GetCoprBuildJobHelperMixin
30+
):
2831
def pre_check(self) -> bool:
2932
return self.copr_build_helper.is_job_config_trigger_matching(self.job_config)
3033

3134

32-
class IsGitForgeProjectAndEventOk(Checker, GetCoprBuildJobHelperMixin):
35+
class IsGitForgeProjectAndEventOk(
36+
Checker, ConfigFromEventMixin, GetCoprBuildJobHelperMixin
37+
):
3338
def pre_check(
3439
self,
3540
) -> bool:
@@ -102,7 +107,9 @@ def pre_check(self) -> bool:
102107
return not bool(build.build_start_time)
103108

104109

105-
class CanActorRunTestsJob(ActorChecker, GetCoprBuildJobHelperMixin):
110+
class CanActorRunTestsJob(
111+
ActorChecker, ConfigFromEventMixin, GetCoprBuildJobHelperMixin
112+
):
106113
"""For external contributors, we need to be more careful when running jobs.
107114
This is a handler-specific permission check
108115
for a user who trigger the action on a PR.

packit_service/worker/checker/vm_image.py

+13-11
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,23 @@
99
)
1010
from packit_service.worker.checker.abstract import Checker, ActorChecker
1111
from packit_service.worker.mixin import (
12-
GetVMImageDataMixin,
1312
ConfigFromEventMixin,
1413
GetReporterFromJobHelperMixin,
1514
)
15+
from packit_service.worker.handlers.mixin import (
16+
GetVMImageDataMixin,
17+
GetCoprBuildJobHelperMixin,
18+
)
1619
from packit_service.worker.reporting import BaseCommitStatus
1720

1821
logger = logging.getLogger(__name__)
1922

2023

2124
class GetVMImageBuildReporterFromJobHelperMixin(
22-
GetReporterFromJobHelperMixin, GetVMImageDataMixin
25+
ConfigFromEventMixin,
26+
GetCoprBuildJobHelperMixin,
27+
GetReporterFromJobHelperMixin,
28+
GetVMImageDataMixin,
2329
):
2430
status_name = "vm-image-build"
2531

@@ -72,14 +78,12 @@ def pre_check(
7278
if self.copr_build:
7379
return True
7480

75-
project = (
76-
f"project {self.job_config.owner}/{self.job_config.project}, "
77-
if self.job_config.owner and self.job_config.project
78-
else ""
79-
)
81+
owner = self.job_config.owner or self.copr_build_helper.job_owner
82+
project = self.job_config.project or self.copr_build_helper.default_project_name
83+
owner_project = f"project {owner}/{project}, " if owner and project else ""
8084

8185
msg = (
82-
f"No successful Copr build found for {project}"
86+
f"No successful Copr build found for {owner_project}"
8387
f"commit {self.data.commit_sha} "
8488
f"and chroot (target) {self.job_config.copr_chroot}"
8589
)
@@ -88,9 +92,7 @@ def pre_check(
8892
return False
8993

9094

91-
class HasAuthorWriteAccess(
92-
ActorChecker, ConfigFromEventMixin, GetVMImageBuildReporterFromJobHelperMixin
93-
):
95+
class HasAuthorWriteAccess(ActorChecker, GetVMImageBuildReporterFromJobHelperMixin):
9496
def _pre_check(self) -> bool:
9597
if not self.project.has_write_access(user=self.actor):
9698
msg = (

packit_service/worker/handlers/copr.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
GetCoprBuildEventMixin,
6666
GetCoprBuildJobHelperForIdMixin,
6767
GetCoprBuildJobHelperMixin,
68+
ConfigFromEventMixin,
6869
)
6970
from packit_service.worker.mixin import PackitAPIWithDownstreamMixin
7071
from packit_service.worker.reporting import BaseCommitStatus, DuplicateCheckMode
@@ -90,7 +91,10 @@
9091
@reacts_to(CheckRerunCommitEvent)
9192
@reacts_to(CheckRerunReleaseEvent)
9293
class CoprBuildHandler(
93-
RetriableJobHandler, PackitAPIWithDownstreamMixin, GetCoprBuildJobHelperMixin
94+
RetriableJobHandler,
95+
ConfigFromEventMixin,
96+
PackitAPIWithDownstreamMixin,
97+
GetCoprBuildJobHelperMixin,
9498
):
9599
task_name = TaskName.copr_build
96100

packit_service/worker/handlers/mixin.py

+126-1
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
from packit.exceptions import PackitException
99
from packit.config import PackageConfig, JobConfig
1010
from packit.utils.koji_helper import KojiHelper
11+
from packit.vm_image_build import ImageBuilder
1112
from packit_service.utils import get_packit_commands_from_comment
1213
from packit_service.config import ProjectToSync
1314
from packit_service.constants import COPR_SRPM_CHROOT, KojiBuildState
1415
from packit_service.models import (
1516
ProjectEventModel,
1617
CoprBuildTargetModel,
1718
SRPMBuildModel,
19+
BuildStatus,
1820
)
1921
from packit_service.worker.events.event import EventData
2022
from packit_service.worker.events.copr import AbstractCoprBuildEvent
@@ -359,7 +361,7 @@ def copr_build_helper(self) -> CoprBuildJobHelper:
359361
...
360362

361363

362-
class GetCoprBuildJobHelperMixin(GetCoprBuildJobHelper, ConfigFromEventMixin):
364+
class GetCoprBuildJobHelperMixin(Config, GetCoprBuildJobHelper):
363365
_copr_build_helper: Optional[CoprBuildJobHelper] = None
364366

365367
@property
@@ -506,3 +508,126 @@ def project_to_sync(self) -> Optional[ProjectToSync]:
506508
):
507509
self._project_to_sync = project_to_sync
508510
return self._project_to_sync
511+
512+
513+
class GetVMImageBuilder(Protocol):
514+
@property
515+
@abstractmethod
516+
def vm_image_builder(self):
517+
...
518+
519+
520+
class GetVMImageData(Protocol):
521+
@property
522+
@abstractmethod
523+
def build_id(self) -> str:
524+
...
525+
526+
@property
527+
@abstractmethod
528+
def chroot(self) -> str:
529+
...
530+
531+
@property
532+
@abstractmethod
533+
def identifier(self) -> str:
534+
...
535+
536+
@property
537+
@abstractmethod
538+
def owner(self) -> str:
539+
...
540+
541+
@property
542+
@abstractmethod
543+
def project_name(self) -> str:
544+
...
545+
546+
@property
547+
@abstractmethod
548+
def image_distribution(self) -> str:
549+
...
550+
551+
@property
552+
@abstractmethod
553+
def image_request(self) -> dict:
554+
...
555+
556+
@property
557+
@abstractmethod
558+
def image_customizations(self) -> dict:
559+
...
560+
561+
562+
class GetVMImageBuilderMixin(Config):
563+
_vm_image_builder: Optional[ImageBuilder] = None
564+
565+
@property
566+
def vm_image_builder(self):
567+
if not self._vm_image_builder:
568+
self._vm_image_builder = ImageBuilder(
569+
self.service_config.redhat_api_refresh_token
570+
)
571+
return self._vm_image_builder
572+
573+
574+
class GetVMImageDataMixin(Config, GetCoprBuildJobHelper):
575+
job_config: JobConfig
576+
_copr_build: Optional[CoprBuildTargetModel] = None
577+
_copr_build_helper: Optional[CoprBuildJobHelper] = None
578+
579+
@property
580+
def chroot(self) -> str:
581+
return self.job_config.copr_chroot
582+
583+
@property
584+
def identifier(self) -> str:
585+
return self.job_config.identifier
586+
587+
@property
588+
def owner(self) -> str:
589+
return self.job_config.owner or (
590+
self.copr_build.owner if self.copr_build else None
591+
)
592+
593+
@property
594+
def project_name(self) -> str:
595+
return self.job_config.project or (
596+
self.copr_build.project_name if self.copr_build else None
597+
)
598+
599+
@property
600+
def image_name(self) -> str:
601+
return f"{self.owner}/" f"{self.project_name}/{self.data.pr_id}"
602+
603+
@property
604+
def image_distribution(self) -> str:
605+
return self.job_config.image_distribution
606+
607+
@property
608+
def image_request(self) -> dict:
609+
return self.job_config.image_request
610+
611+
@property
612+
def image_customizations(self) -> dict:
613+
return self.job_config.image_customizations
614+
615+
@property
616+
def copr_build(self) -> Optional[CoprBuildTargetModel]:
617+
if not self._copr_build:
618+
copr_builds = CoprBuildTargetModel.get_all_by(
619+
project_name=self.job_config.project
620+
or self.copr_build_helper.default_project_name,
621+
commit_sha=self.data.commit_sha,
622+
owner=self.job_config.owner or self.copr_build_helper.job_owner,
623+
target=self.job_config.copr_chroot,
624+
status=BuildStatus.success,
625+
)
626+
627+
for copr_build in copr_builds:
628+
project_event_object = copr_build.get_project_event_object()
629+
# check whether the event trigger matches
630+
if project_event_object.id == self.data.db_project_object.id:
631+
self._copr_build = copr_build
632+
break
633+
return self._copr_build

packit_service/worker/handlers/vm_image.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@
3131
GetVMImageBuildReporterFromJobHelperMixin,
3232
)
3333
from packit_service.worker.mixin import (
34-
ConfigFromEventMixin,
35-
GetVMImageBuilderMixin,
3634
PackitAPIWithDownstreamMixin,
3735
)
36+
from packit_service.worker.handlers.mixin import (
37+
GetVMImageBuilderMixin,
38+
)
3839
from packit_service.models import (
3940
VMImageBuildTargetModel,
4041
VMImageBuildStatus,
@@ -51,7 +52,6 @@
5152
@reacts_to(AbstractPRCommentEvent)
5253
class VMImageBuildHandler(
5354
RetriableJobHandler,
54-
ConfigFromEventMixin,
5555
PackitAPIWithDownstreamMixin,
5656
GetVMImageBuilderMixin,
5757
GetVMImageBuildReporterFromJobHelperMixin,
@@ -119,7 +119,6 @@ def run(self) -> TaskResults:
119119
@reacts_to(VMImageBuildResultEvent)
120120
class VMImageBuildResultHandler(
121121
JobHandler,
122-
ConfigFromEventMixin,
123122
PackitAPIWithDownstreamMixin,
124123
GetVMImageBuilderMixin,
125124
GetVMImageBuildReporterFromJobHelperMixin,

packit_service/worker/helpers/build/babysit.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
VMImageBuildResultEvent,
3737
)
3838
from packit_service.worker.events.enums import FedmsgTopic
39-
from packit_service.worker.mixin import ConfigFromUrlMixin, GetVMImageBuilderMixin
39+
from packit_service.worker.mixin import ConfigFromUrlMixin
40+
from packit_service.worker.handlers.mixin import GetVMImageBuilderMixin
4041
from packit_service.worker.handlers import (
4142
CoprBuildEndHandler,
4243
CoprBuildStartHandler,

0 commit comments

Comments
 (0)