Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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"
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
    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})
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
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"
Exemplo n.º 10
0
    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})