|
8 | 8 | from packit.exceptions import PackitException
|
9 | 9 | from packit.config import PackageConfig, JobConfig
|
10 | 10 | from packit.utils.koji_helper import KojiHelper
|
| 11 | +from packit.vm_image_build import ImageBuilder |
11 | 12 | from packit_service.utils import get_packit_commands_from_comment
|
12 | 13 | from packit_service.config import ProjectToSync
|
13 | 14 | from packit_service.constants import COPR_SRPM_CHROOT, KojiBuildState
|
14 | 15 | from packit_service.models import (
|
15 | 16 | ProjectEventModel,
|
16 | 17 | CoprBuildTargetModel,
|
17 | 18 | SRPMBuildModel,
|
| 19 | + BuildStatus, |
18 | 20 | )
|
19 | 21 | from packit_service.worker.events.event import EventData
|
20 | 22 | from packit_service.worker.events.copr import AbstractCoprBuildEvent
|
@@ -359,7 +361,7 @@ def copr_build_helper(self) -> CoprBuildJobHelper:
|
359 | 361 | ...
|
360 | 362 |
|
361 | 363 |
|
362 |
| -class GetCoprBuildJobHelperMixin(GetCoprBuildJobHelper, ConfigFromEventMixin): |
| 364 | +class GetCoprBuildJobHelperMixin(Config, GetCoprBuildJobHelper): |
363 | 365 | _copr_build_helper: Optional[CoprBuildJobHelper] = None
|
364 | 366 |
|
365 | 367 | @property
|
@@ -506,3 +508,126 @@ def project_to_sync(self) -> Optional[ProjectToSync]:
|
506 | 508 | ):
|
507 | 509 | self._project_to_sync = project_to_sync
|
508 | 510 | 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 |
0 commit comments