def test_get_koji_build(clean_before_and_after, a_koji_build): assert a_koji_build.id b = KojiBuildModel.get_by_build_id(a_koji_build.build_id, TARGET) assert b.id == a_koji_build.id # let's make sure passing int works as well b = KojiBuildModel.get_by_build_id(int(a_koji_build.build_id), TARGET) assert b.id == a_koji_build.id b2 = KojiBuildModel.get_by_id(b.id) assert b2.id == a_koji_build.id
def test_get_koji_build(clean_before_and_after, a_koji_build_for_pr): assert a_koji_build_for_pr.id b = KojiBuildModel.get_by_build_id(a_koji_build_for_pr.build_id, SampleValues.target) assert b.id == a_koji_build_for_pr.id # let's make sure passing int works as well b = KojiBuildModel.get_by_build_id(int(a_koji_build_for_pr.build_id), SampleValues.target) assert b.id == a_koji_build_for_pr.id b2 = KojiBuildModel.get_by_id(b.id) assert b2.id == a_koji_build_for_pr.id
def test_koji_build_set_status(clean_before_and_after, a_koji_build_for_pr): assert a_koji_build_for_pr.status == "pending" a_koji_build_for_pr.set_status("awesome") assert a_koji_build_for_pr.status == "awesome" b = KojiBuildModel.get_by_build_id(a_koji_build_for_pr.build_id, SampleValues.target) assert b.status == "awesome"
def test_koji_build_set_build_logs_url(clean_before_and_after, a_koji_build_for_pr): url = ("https://kojipkgs.fedoraproject.org//" "packages/python-ogr/0.11.0/1.fc30/data/logs/noarch/build.log") a_koji_build_for_pr.set_build_logs_url(url) assert a_koji_build_for_pr.build_logs_url == url b = KojiBuildModel.get_by_build_id(a_koji_build_for_pr.build_id, SampleValues.target) assert b.build_logs_url == url
def build_model(self) -> Optional[KojiBuildModel]: if not self._build_model: self._build_model = KojiBuildModel.get_by_build_id( build_id=self.build_id) return self._build_model
def build_model(self) -> Optional[KojiBuildModel]: if not self._build_model_searched and not self._build_model: self._build_model = KojiBuildModel.get_by_build_id( build_id=self.build_id) self._build_model_searched = True return self._build_model
def run(self): build = KojiBuildModel.get_by_build_id( build_id=str(self.koji_event.build_id)) if not build: msg = f"Koji build {self.koji_event.build_id} not found in the database." logger.warning(msg) return TaskResults(success=False, details={"msg": msg}) logger.debug( f"Build on {build.target} in koji changed state " f"from {self.koji_event.old_state} to {self.koji_event.state}.") build.set_build_start_time( datetime.utcfromtimestamp(self.koji_event.start_time) if self. koji_event.start_time else None) build.set_build_finished_time( datetime.utcfromtimestamp(self.koji_event.completion_time) if self. koji_event.completion_time else None) url = get_koji_build_info_url_from_flask(build.id) build_job_helper = KojiBuildJobHelper( service_config=self.service_config, package_config=self.package_config, project=self.project, metadata=self.data, db_trigger=self.db_trigger, job_config=self.job_config, ) if self.koji_event.state == KojiBuildState.open: build.set_status("pending") build_job_helper.report_status_to_all_for_chroot( description="RPM build is in progress...", state=CommitStatus.pending, url=url, chroot=build.target, ) elif self.koji_event.state == KojiBuildState.closed: build.set_status("success") build_job_helper.report_status_to_all_for_chroot( description="RPMs were built successfully.", state=CommitStatus.success, url=url, chroot=build.target, ) elif self.koji_event.state == KojiBuildState.failed: build.set_status("failed") build_job_helper.report_status_to_all_for_chroot( description="RPMs failed to be built.", state=CommitStatus.failure, url=url, chroot=build.target, ) elif self.koji_event.state == KojiBuildState.canceled: build.set_status("error") build_job_helper.report_status_to_all_for_chroot( description="RPMs build was canceled.", state=CommitStatus.error, url=url, chroot=build.target, ) else: logger.debug( f"We don't react to this koji build state change: {self.koji_event.state}" ) koji_build_logs = self.koji_event.get_koji_build_logs_url() build.set_build_logs_url(koji_build_logs) koji_rpm_task_web_url = self.koji_event.get_koji_build_logs_url() build.set_web_url(koji_rpm_task_web_url) msg = (f"Build on {build.target} in koji changed state " f"from {self.koji_event.old_state} to {self.koji_event.state}.") return TaskResults(success=True, details={"msg": msg})
def build(self) -> Optional[KojiBuildModel]: if not self._build: self._build = KojiBuildModel.get_by_build_id( build_id=str(self.koji_event.build_id)) return self._build
def test_koji_build_set_status(clean_before_and_after, a_koji_build): assert a_koji_build.status == "pending" a_koji_build.set_status("awesome") assert a_koji_build.status == "awesome" b = KojiBuildModel.get_by_build_id(a_koji_build.build_id, TARGET) assert b.status == "awesome"
def run(self): build = KojiBuildModel.get_by_build_id( build_id=str(self.koji_task_event.build_id) ) if not build: msg = ( f"Koji build {self.koji_task_event.build_id} not found in the database." ) logger.warning(msg) return TaskResults(success=False, details={"msg": msg}) logger.debug( f"Build on {build.target} in koji changed state " f"from {self.koji_task_event.old_state} to {self.koji_task_event.state}." ) build.set_build_start_time( datetime.utcfromtimestamp(self.koji_task_event.start_time) if self.koji_task_event.start_time else None ) build.set_build_finished_time( datetime.utcfromtimestamp(self.koji_task_event.completion_time) if self.koji_task_event.completion_time else None ) url = get_koji_build_info_url(build.id) build_job_helper = KojiBuildJobHelper( service_config=self.service_config, package_config=self.package_config, project=self.project, metadata=self.data, db_trigger=self.db_trigger, job_config=self.job_config, ) new_commit_status = { KojiTaskState.free: BaseCommitStatus.pending, KojiTaskState.open: BaseCommitStatus.running, KojiTaskState.closed: BaseCommitStatus.success, KojiTaskState.canceled: BaseCommitStatus.error, KojiTaskState.assigned: None, KojiTaskState.failed: BaseCommitStatus.failure, }.get(self.koji_task_event.state) description = { KojiTaskState.free: "RPM build has been submitted...", KojiTaskState.open: "RPM build is in progress...", KojiTaskState.closed: "RPM build succeeded.", KojiTaskState.canceled: "RPM build was canceled.", KojiTaskState.assigned: None, KojiTaskState.failed: "RPM build failed.", }.get(self.koji_task_event.state) if not (new_commit_status and description): logger.debug( f"We don't react to this koji build state change: {self.koji_task_event.state}" ) else: build.set_status(new_commit_status.value) build_job_helper.report_status_to_all_for_chroot( description=description, state=new_commit_status, url=url, chroot=build.target, ) koji_build_logs = KojiTaskEvent.get_koji_build_logs_url( rpm_build_task_id=int(build.build_id), koji_logs_url=self.service_config.koji_logs_url, ) build.set_build_logs_url(koji_build_logs) koji_rpm_task_web_url = KojiTaskEvent.get_koji_rpm_build_web_url( rpm_build_task_id=int(build.build_id), koji_web_url=self.service_config.koji_web_url, ) build.set_web_url(koji_rpm_task_web_url) msg = ( f"Build on {build.target} in koji changed state " f"from {self.koji_task_event.old_state} to {self.koji_task_event.state}." ) return TaskResults(success=True, details={"msg": msg})