def run_copr_build(self) -> HandlerResults: if not (self.job_build or self.job_tests): msg = "No copr_build or tests job defined." # we can't report it to end-user at this stage return HandlerResults(success=False, details={"msg": msg}) self.report_status_to_all(description="Building SRPM ...", state=CommitStatus.pending) build_metadata = self._run_copr_build_and_save_output() srpm_build_model = SRPMBuild.create(build_metadata.srpm_logs) if build_metadata.srpm_failed: msg = "SRPM build failed, check the logs for details." self.report_status_to_all( state=CommitStatus.failure, description=msg, url=get_srpm_log_url(srpm_build_model.id), ) return HandlerResults(success=False, details={"msg": msg}) for chroot in self.build_chroots: copr_build = CoprBuild.get_or_create( pr_id=self.pr_id, build_id=str(build_metadata.copr_build_id), commit_sha=self.event.commit_sha, repo_name=self.project.repo, namespace=self.project.namespace, project_name=self.job_project, owner=self.job_owner, web_url=build_metadata.copr_web_url, target=chroot, status="pending", srpm_build=srpm_build_model, ) url = get_log_url(id_=copr_build.id) self.report_status_to_all_for_chroot( state=CommitStatus.pending, description="Building RPM ...", url=url, chroot=chroot, ) self.copr_build_model.build_id = build_metadata.copr_build_id self.copr_build_model.save() # release the hounds! celery_app.send_task( "task.babysit_copr_build", args=(build_metadata.copr_build_id, ), countdown=120, # do the first check in 120s ) return HandlerResults(success=True, details={})
def multiple_copr_builds(): with get_sa_session() as session: session.query(CoprBuild).delete() srpm_build = SRPMBuild.create("asd\nqwe\n") yield [ CoprBuild.get_or_create( pr_id=1, build_id="123456", commit_sha="687abc76d67d", repo_name="lithium", namespace="nirvana", project_name="SomeUser-hello-world-9", owner="packit", web_url="https://copr.something.somewhere/123456", target="fedora-42-x86_64", status="pending", srpm_build=srpm_build, ), # Same build_id but different chroot CoprBuild.get_or_create( pr_id=1, build_id="123456", commit_sha="687abc76d67d", repo_name="lithium", namespace="nirvana", project_name="SomeUser-hello-world-9", owner="packit", web_url="https://copr.something.somewhere/123456", target="fedora-43-x86_64", status="pending", srpm_build=srpm_build, ), # Completely different build CoprBuild.get_or_create( pr_id=4, build_id="987654", commit_sha="987def76d67e", repo_name="cockpit-project", namespace="cockpit", project_name="SomeUser-random-text-7", owner="cockpit-project", web_url="https://copr.something.somewhere/987654", target="fedora-43-x86_64", status="pending", srpm_build=srpm_build, ), ] clean_db()
def a_copr_build(): with get_sa_session() as session: session.query(CoprBuild).delete() srpm_build = SRPMBuild.create("asd\nqwe\n") yield CoprBuild.get_or_create( pr_id=1, build_id="123456", commit_sha="687abc76d67d", repo_name="lithium", namespace="nirvana", web_url="https://copr.something.somewhere/123456", target=TARGET, status="pending", srpm_build=srpm_build, ) clean_db()
def packit_build_752(): with get_sa_session() as session: session.query(CoprBuild).delete() srpm_build = SRPMBuild.create("asd\nqwe\n") yield CoprBuild.get_or_create( pr_id=752, build_id=str(BUILD_ID), commit_sha="687abc76d67d", repo_name="packit", namespace="packit-service", project_name="packit-service-packit-752", owner="packit", web_url=("https://download.copr.fedorainfracloud.org/" "results/packit/packit-service-packit-752"), target="fedora-rawhide-x86_64", status="pending", srpm_build=srpm_build, ) clean_db()
def run_copr_build(self) -> HandlerResults: if not (self.job_copr_build or self.job_tests): msg = "No copr_build or tests job defined." # we can't report it to end-user at this stage return HandlerResults(success=False, details={"msg": msg}) try: self.report_status_to_all(description="Building SRPM ...", state="pending") # we want to get packit logs from the SRPM creation process # so we stuff them into a StringIO buffer stream = StringIO() handler = logging.StreamHandler(stream) packit_logger = logging.getLogger("packit") packit_logger.setLevel(logging.DEBUG) packit_logger.addHandler(handler) formatter = PackitFormatter(None, "%H:%M:%S") handler.setFormatter(formatter) build_id, _ = self.api.run_copr_build( project=self.job_project, chroots=self.build_chroots, owner=self.job_owner, ) packit_logger.removeHandler(handler) stream.seek(0) logs = stream.read() web_url = get_copr_build_url_for_values(self.job_owner, self.job_project, build_id) srpm_build = SRPMBuild.create(logs) status = "pending" description = "Building RPM ..." for chroot in self.build_chroots: copr_build = CoprBuild.get_or_create( pr_id=self.event.pr_id, build_id=str(build_id), commit_sha=self.event.commit_sha, repo_name=self.event.base_repo_name, namespace=self.event.base_repo_namespace, web_url=web_url, target=chroot, status=status, srpm_build=srpm_build, ) url = get_log_url(id_=copr_build.id) self.status_reporter.report( state=status, description=description, url=url, check_names=PRCheckName.get_build_check(chroot), ) if chroot in self.tests_chroots: self.status_reporter.report( state=status, description=description, url=url, check_names=PRCheckName.get_testing_farm_check(chroot), ) except SandcastleTimeoutReached: return self._process_timeout() except SandcastleCommandFailed as ex: return self._process_failed_command(ex) except ApiException as ex: return self._process_openshift_error(ex) except PackitSRPMException as ex: return self._process_failed_srpm_build(ex) except PackitCoprProjectException as ex: return self._process_copr_submit_exception(ex) except PackitCoprException as ex: return self._process_general_exception(ex) except Exception as ex: return self._process_general_exception(ex) self.copr_build_model.build_id = build_id self.copr_build_model.save() return HandlerResults(success=True, details={})
def run_copr_build(self) -> HandlerResults: if not (self.job_build or self.job_tests): msg = "No copr_build or tests job defined." # we can't report it to end-user at this stage return HandlerResults(success=False, details={"msg": msg}) try: self.report_status_to_all(description="Building SRPM ...", state="pending") build_id, logs = self._run_copr_build_and_save_output() web_url = get_copr_build_url_for_values( self.job_owner, self.job_project, build_id ) srpm_build_model = SRPMBuild.create(logs) for chroot in self.build_chroots: copr_build = CoprBuild.get_or_create( pr_id=self.event.pr_id, build_id=str(build_id), commit_sha=self.event.commit_sha, repo_name=self.event.base_repo_name, namespace=self.event.base_repo_namespace, web_url=web_url, target=chroot, status="pending", srpm_build=srpm_build_model, ) url = get_log_url(id_=copr_build.id) self.report_status_to_all_for_chroot( state="pending", description="Building RPM ...", url=url, chroot=chroot, ) except SandcastleTimeoutReached: return self._process_timeout() except SandcastleCommandFailed as ex: return self._process_failed_command(ex) except ApiException as ex: return self._process_openshift_error(ex) except PackitSRPMException as ex: return self._process_failed_srpm_build(ex) except PackitCoprProjectException as ex: return self._process_copr_submit_exception(ex) except PackitCoprException as ex: return self._process_general_exception(ex) except Exception as ex: return self._process_general_exception(ex) self.copr_build_model.build_id = build_id self.copr_build_model.save() return HandlerResults(success=True, details={})