def get(self, id): """A specific koji build details.""" build = KojiBuildModel.get_by_id(int(id)) if not build: return response_maker( {"error": "No info about build stored in DB"}, status=HTTPStatus.NOT_FOUND.value, ) build_dict = { "build_id": build.build_id, "status": build.status, "chroot": build.target, "build_start_time": optional_timestamp(build.build_start_time), "build_finished_time": optional_timestamp(build.build_finished_time), "build_submitted_time": optional_timestamp(build.build_submitted_time), "commit_sha": build.commit_sha, "web_url": build.web_url, # from old data, sometimes build_logs_url is same and sometimes different to web_url "build_logs_url": build.build_logs_url, "srpm_build_id": build.get_srpm_build().id, "run_ids": sorted(run.id for run in build.runs), } build_dict.update(get_project_info_from_build(build)) return response_maker(build_dict)
def get(self, id): """A specific copr build details for one chroot.""" build = CoprBuildModel.get_by_id(int(id)) if not build: return response_maker( {"error": "No info about build stored in DB"}, status=HTTPStatus.NOT_FOUND.value, ) build_dict = { "build_id": build.build_id, "status": build.status, "chroot": build.target, "build_submitted_time": optional_timestamp(build.build_submitted_time), "build_start_time": optional_timestamp(build.build_start_time), "build_finished_time": optional_timestamp(build.build_finished_time), "commit_sha": build.commit_sha, "web_url": build.web_url, "build_logs_url": build.build_logs_url, "copr_project": build.project_name, "copr_owner": build.owner, "srpm_build_id": build.get_srpm_build().id, "run_ids": sorted(run.id for run in build.runs), "built_packages": build.built_packages, } build_dict.update(get_project_info_from_build(build)) return response_maker(build_dict)
def get(self, id): """A specific SRPM build details.""" build = SRPMBuildModel.get_by_id(int(id)) if not build: return response_maker( {"error": "No info about build stored in DB"}, status=HTTPStatus.NOT_FOUND.value, ) build_dict = { "status": build.status, "build_submitted_time": optional_timestamp(build.build_submitted_time), "build_start_time": optional_timestamp(build.build_start_time), "build_finished_time": optional_timestamp(build.build_finished_time), "url": build.url, "logs": build.logs, "logs_url": build.logs_url, "copr_build_id": build.copr_build_id, "copr_web_url": build.copr_web_url, "run_ids": sorted(run.id for run in build.runs), } build_dict.update(get_project_info_from_build(build)) return response_maker(build_dict)
def process_runs(runs): """ Process `RunModel`s and construct a JSON that is returned from the endpoints that return merged chroots. Args: runs: Iterator over merged `RunModel`s. Returns: List of JSON objects where each represents pipelines run on single SRPM. """ result = [] for pipeline in runs: response_dict = { "merged_run_id": pipeline.merged_id, "srpm": None, "copr": [], "koji": [], "test_run": [], } srpm_build = SRPMBuildModel.get_by_id(pipeline.srpm_build_id) if srpm_build: response_dict["srpm"] = { "packit_id": srpm_build.id, "status": srpm_build.status, } response_dict["time_submitted"] = optional_timestamp( srpm_build.build_submitted_time) response_dict["trigger"] = get_project_info_from_build(srpm_build) for model_type, Model, packit_ids in ( ("copr", CoprBuildModel, pipeline.copr_build_id), ("koji", KojiBuildModel, pipeline.koji_build_id), ("test_run", TFTTestRunModel, pipeline.test_run_id), ): for packit_id in set( filter(None, map(lambda ids: ids[0], packit_ids))): row = Model.get_by_id(packit_id) if row.status == "waiting_for_srpm": continue response_dict[model_type].append({ "packit_id": packit_id, "target": row.target, "status": row.status, }) if "trigger" not in response_dict: submitted_time = (row.submitted_time if isinstance( row, TFTTestRunModel) else row.build_submitted_time) response_dict["time_submitted"] = optional_timestamp( submitted_time) response_dict["trigger"] = get_project_info_from_build(row) result.append(response_dict) return result
def get(self): """List all SRPM builds.""" result = [] first, last = indices() for build in SRPMBuildModel.get(first, last): build_dict = { "srpm_build_id": build.id, "success": build.success, "log_url": get_srpm_build_info_url(build.id), "build_submitted_time": optional_timestamp(build.build_submitted_time), } project = build.get_project() # Its possible that jobtrigger isnt stored in db if project: build_dict["repo_namespace"] = project.namespace build_dict["repo_name"] = project.repo_name build_dict["project_url"] = project.project_url build_dict["pr_id"] = build.get_pr_id() build_dict["branch_name"] = build.get_branch_name() result.append(build_dict) resp = response_maker( result, status=HTTPStatus.PARTIAL_CONTENT.value, ) resp.headers["Content-Range"] = f"srpm-builds {first + 1}-{last}/*" return resp
def get(self): """List all Testing Farm results.""" result = [] first, last = indices() # results have nothing other than ref in common, so it doesnt make sense to # merge them like copr builds for tf_result in TFTTestRunModel.get_range(first, last): result_dict = { "packit_id": tf_result.id, "pipeline_id": tf_result.pipeline_id, "ref": tf_result.commit_sha, "status": tf_result.status, "target": tf_result.target, "web_url": tf_result.web_url, "pr_id": tf_result.get_pr_id(), "submitted_time": optional_timestamp(tf_result.submitted_time), } project = tf_result.get_project() result_dict["repo_namespace"] = project.namespace result_dict["repo_name"] = project.repo_name result_dict["project_url"] = project.project_url result.append(result_dict) resp = response_maker( result, status=HTTPStatus.PARTIAL_CONTENT.value, ) resp.headers["Content-Range"] = f"test-results {first + 1}-{last}/*" return resp
def get(self): """List all Copr builds.""" # Return relevant info thats concise # Usecases like the packit-dashboard copr-builds table result = [] first, last = indices() for build in CoprBuildModel.get_merged_chroots(first, last): build_info = CoprBuildModel.get_by_build_id(build.build_id, None) if build_info.status == "waiting_for_srpm": continue project_info = build_info.get_project() build_dict = { "packit_id": build_info.id, "project": build_info.project_name, "build_id": build.build_id, "status_per_chroot": {}, "packit_id_per_chroot": {}, "build_submitted_time": optional_timestamp(build_info.build_submitted_time), "web_url": build_info.web_url, "ref": build_info.commit_sha, "pr_id": build_info.get_pr_id(), "branch_name": build_info.get_branch_name(), "repo_namespace": project_info.namespace, "repo_name": project_info.repo_name, "project_url": project_info.project_url, } for i, chroot in enumerate(build.target): # [0] because sqlalchemy returns a single element sub-list build_dict["status_per_chroot"][chroot[0]] = build.status[i][0] build_dict["packit_id_per_chroot"][ chroot[0]] = build.packit_id_per_chroot[i][0] result.append(build_dict) resp = response_maker( result, status=HTTPStatus.PARTIAL_CONTENT.value, ) resp.headers["Content-Range"] = f"copr-builds {first + 1}-{last}/*" return resp
def get(self): """List all Koji builds.""" first, last = indices() result = [] for build in KojiBuildModel.get_range(first, last): build_dict = { "packit_id": build.id, "build_id": build.build_id, "status": build.status, "build_submitted_time": optional_timestamp(build.build_submitted_time), "chroot": build.target, "web_url": build.web_url, # from old data, sometimes build_logs_url is same and sometimes different to web_url "build_logs_url": build.build_logs_url, "pr_id": build.get_pr_id(), "branch_name": build.get_branch_name(), "release": build.get_release_tag(), } project = build.get_project() if project: build_dict["project_url"] = project.project_url build_dict["repo_namespace"] = project.namespace build_dict["repo_name"] = project.repo_name result.append(build_dict) resp = response_maker( result, status=HTTPStatus.PARTIAL_CONTENT.value, ) resp.headers["Content-Range"] = f"koji-builds {first + 1}-{last}/*" return resp
def get(self, id): """A specific test run details.""" test_run_model = TFTTestRunModel.get_by_id(int(id)) if not test_run_model: return response_maker( {"error": "No info about build stored in DB"}, status=HTTPStatus.NOT_FOUND.value, ) test_result_dict = { "pipeline_id": test_run_model.pipeline_id, "status": test_run_model.status, "chroot": test_run_model.target, "commit_sha": test_run_model.commit_sha, "web_url": test_run_model.web_url, "copr_build_id": test_run_model.runs[0].copr_build_id, "run_ids": sorted(run.id for run in test_run_model.runs), "submitted_time": optional_timestamp(test_run_model.submitted_time), } test_result_dict.update(get_project_info_from_build(test_run_model)) return response_maker(test_result_dict)