Skip to content

Commit 7605030

Browse files
Support submitting Copr builds from dist-git repos (#3208)
Support submitting Copr builds from dist-git repos RELEASE NOTES BEGIN Packit now supports submitting Copr builds from dist-git repositories. RELEASE NOTES END Reviewed-by: Matej Focko
2 parents 4672a81 + 227ca6b commit 7605030

3 files changed

Lines changed: 54 additions & 36 deletions

File tree

‎packit_service/worker/handlers/copr.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def _run(self) -> TaskResults:
124124
if os.getenv("CANCEL_RUNNING_JOBS"):
125125
self.copr_build_helper.cancel_running_builds()
126126

127-
return self.copr_build_helper.run_copr_build_from_source_script()
127+
return self.copr_build_helper.run_copr_build()
128128

129129

130130
class AbstractCoprBuildReportHandler(

‎packit_service/worker/helpers/build/copr_build.py‎

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -521,45 +521,21 @@ def report_running_build_and_test_on_build_submission(self, web_url: str):
521521
url=url_for_tests,
522522
)
523523

524-
def run_copr_build_from_source_script(self) -> TaskResults:
524+
def run_copr_build(self) -> TaskResults:
525525
"""
526-
Run copr build using custom source method.
526+
Run copr build using either the custom source method (default)
527+
or the dist-git method if configured.
527528
"""
528529
self._srpm_model, self.run_model = SRPMBuildModel.create_with_new_run(
529530
project_event_model=self.db_project_event,
530531
package_name=self.get_package_name(),
531532
)
532533
group = self._get_or_create_build_group()
534+
script = None
533535
try:
534-
pr_id = self.metadata.pr_id
535-
536-
# use correct git ref to identify most recent tag
537-
if self.job_config.trigger == JobConfigTriggerType.pull_request:
538-
merged_ref = self.pull_request_object.target_branch
539-
elif self.job_config.trigger == JobConfigTriggerType.commit:
540-
merged_ref = self.metadata.commit_sha
541-
elif self.job_config.trigger == JobConfigTriggerType.release:
542-
merged_ref = self.metadata.tag_name
543-
else:
544-
logger.warning(
545-
f"Unable to determine merged ref for {self.job_config.trigger}",
546-
)
547-
merged_ref = None
548-
549-
script = create_source_script(
550-
url=self.metadata.project_url,
551-
ref=self.metadata.git_ref,
552-
pr_id=str(pr_id) if pr_id else None,
553-
merge_pr=self.package_config.merge_pr_in_ci,
554-
target_branch=(
555-
self.pull_request_object.target_branch if self.pull_request_object else None
556-
),
557-
job_config_index=self.get_job_config_index(),
558-
update_release=self.job_config.trigger != JobConfigTriggerType.release,
559-
release_suffix=self.job_config.release_suffix,
560-
package=self.job_config.package,
561-
merged_ref=merged_ref,
562-
)
536+
if not self.job_config.use_copr_dist_git_build:
537+
script = self._prepare_source_script()
538+
563539
build_id, web_url = self.submit_copr_build(script=script)
564540
except Exception as ex:
565541
return self.handle_build_submit_error(group, ex)
@@ -572,6 +548,37 @@ def run_copr_build_from_source_script(self) -> TaskResults:
572548

573549
return TaskResults(success=True, details={})
574550

551+
def _prepare_source_script(self) -> str:
552+
pr_id = self.metadata.pr_id
553+
554+
# use correct git ref to identify most recent tag
555+
if self.job_config.trigger == JobConfigTriggerType.pull_request:
556+
merged_ref = self.pull_request_object.target_branch
557+
elif self.job_config.trigger == JobConfigTriggerType.commit:
558+
merged_ref = self.metadata.commit_sha
559+
elif self.job_config.trigger == JobConfigTriggerType.release:
560+
merged_ref = self.metadata.tag_name
561+
else:
562+
logger.warning(
563+
f"Unable to determine merged ref for {self.job_config.trigger}",
564+
)
565+
merged_ref = None
566+
567+
return create_source_script(
568+
url=self.metadata.project_url,
569+
ref=self.metadata.git_ref,
570+
pr_id=str(pr_id) if pr_id else None,
571+
merge_pr=self.package_config.merge_pr_in_ci,
572+
target_branch=(
573+
self.pull_request_object.target_branch if self.pull_request_object else None
574+
),
575+
job_config_index=self.get_job_config_index(),
576+
update_release=self.job_config.trigger != JobConfigTriggerType.release,
577+
release_suffix=self.job_config.release_suffix,
578+
package=self.job_config.package,
579+
merged_ref=merged_ref,
580+
)
581+
575582
def _get_or_create_build_group(self) -> CoprBuildGroupModel:
576583
if self._copr_build_group_id is not None:
577584
group = CoprBuildGroupModel.get_by_id(self._copr_build_group_id)
@@ -638,7 +645,7 @@ def get_latest_fedora_stable_chroot(self) -> str:
638645
def submit_copr_build(self, script: Optional[str] = None) -> tuple[int, str]:
639646
"""
640647
Create the project in Copr if not exists and submit a new build using
641-
source script method
648+
either the custom source method (default) or the dist-git method if configured.
642649
Return:
643650
tuple of build ID and web url
644651
"""
@@ -658,7 +665,18 @@ def submit_copr_build(self, script: Optional[str] = None) -> tuple[int, str]:
658665
},
659666
)
660667

661-
if script:
668+
if self.job_config.use_copr_dist_git_build:
669+
build = self.api.copr_helper.copr_client.build_proxy.create_from_distgit(
670+
ownername=owner,
671+
projectname=self.job_project,
672+
packagename=self.job_config.package,
673+
committish=self.metadata.git_ref,
674+
# TODO: parametrize this hardcoded value
675+
distgit="rhai",
676+
buildopts=buildopts,
677+
)
678+
679+
elif script:
662680
build = self.api.copr_helper.copr_client.build_proxy.create_from_custom(
663681
ownername=owner,
664682
projectname=self.job_project,

‎tests/unit/test_copr_build.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ def test_run_copr_build_from_source_script(github_pr_event, srpm_build_deps):
309309
"fedora-35-x86_64",
310310
)
311311

312-
flexmock(helper).should_call("run_copr_build_from_source_script").once()
312+
flexmock(helper).should_call("run_copr_build").once()
313313

314314
flexmock(Client).should_receive("create_from_config_file").and_return(
315315
flexmock(
@@ -477,7 +477,7 @@ def test_run_copr_build_from_source_script_github_outage_retry(
477477
flexmock(build).should_receive("set_status").with_args(BuildStatus.error)
478478
srpm_model.should_receive("set_status").with_args(BuildStatus.error)
479479

480-
assert helper.run_copr_build_from_source_script()["success"] is retry
480+
assert helper.run_copr_build()["success"] is retry
481481

482482

483483
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)