def get_builds(lp_snap, selection): builds = launchpad.get_snap_builds(lp_snap["store_name"]) total_builds = len(builds) builds = builds[selection] snap_builds = [] for build in builds: status = map_build_and_upload_states(build["buildstate"], build["store_upload_status"]) snap_builds.append({ "id": build["self_link"].split("/")[-1], "arch_tag": build["arch_tag"], "datebuilt": build["datebuilt"], "duration": build["duration"], "logs": build["build_log_url"], "revision_id": build["revision_id"], "status": status, "title": build["title"], }) return { "total_builds": total_builds, "snap_builds": snap_builds, }
def get_builds(lp_snap, context, selection): # Git repository without GitHub hostname context["github_repository"] = lp_snap["git_repository_url"][19:] builds = launchpad.get_snap_builds(lp_snap["store_name"]) context["total_builds"] = len(builds) builds = builds[selection] context["snap_builds_enabled"] = bool(builds) for build in builds: status = map_build_and_upload_states(build["buildstate"], build["store_upload_status"]) context["snap_builds"].append({ "id": build["self_link"].split("/")[-1], "arch_tag": build["arch_tag"], "datebuilt": build["datebuilt"], "duration": build["duration"], "logs": build["build_log_url"], "revision_id": build["revision_id"], "status": status, "title": build["title"], }) return context
def get_snap_build(snap_name, build_id): try: details = publisher_api.get_snap_info(snap_name, flask.session) except StoreApiResponseErrorList as api_response_error_list: if api_response_error_list.status_code == 404: return flask.abort(404, "No snap named {}".format(snap_name)) else: return _handle_error_list(api_response_error_list.errors) except (StoreApiError, ApiError) as api_error: return _handle_error(api_error) context = { "snap_id": details["snap_id"], "snap_name": details["snap_name"], "snap_title": details["title"], "snap_build": {}, } # Get build by snap name and build_id lp_build = launchpad.get_snap_build(details["snap_name"], build_id) if lp_build: status = map_build_and_upload_states( lp_build["buildstate"], lp_build["store_upload_status"] ) context["snap_build"] = { "id": lp_build["self_link"].split("/")[-1], "arch_tag": lp_build["arch_tag"], "datebuilt": lp_build["datebuilt"], "duration": lp_build["duration"], "logs": lp_build["build_log_url"], "revision_id": lp_build["revision_id"], "status": status, "title": lp_build["title"], } if context["snap_build"]["logs"]: context["raw_logs"] = launchpad.get_snap_build_log( details["snap_name"], build_id ) return flask.render_template("publisher/build.html", **context)
def get_builds(lp_snap, selection): builds = launchpad.get_snap_builds(lp_snap["store_name"]) total_builds = len(builds) builds = builds[selection] snap_builds = [] builders_status = None for build in builds: status = map_build_and_upload_states( build["buildstate"], build["store_upload_status"] ) snap_build = { "id": build["self_link"].split("/")[-1], "arch_tag": build["arch_tag"], "datebuilt": build["datebuilt"], "duration": build["duration"], "logs": build["build_log_url"], "revision_id": build["revision_id"], "status": status, "title": build["title"], "queue_time": None, } if build["buildstate"] == "Needs building": if not builders_status: builders_status = launchpad.get_builders_status() snap_build["queue_time"] = builders_status[build["arch_tag"]][ "estimated_duration" ] snap_builds.append(snap_build) return { "total_builds": total_builds, "snap_builds": snap_builds, }
def test_build_state_mappings(self): combinations = [ ("Needs building", "Unscheduled", "building_soon"), ("Needs building", "Pending", "building_soon"), ("Needs building", "Failed to upload", "building_soon"), ( "Needs building", "Failed to release to channels", "building_soon", ), ("Needs building", "Uploaded", "building_soon"), ("Successfully built", "Unscheduled", "wont_release"), ("Successfully built", "Pending", "releasing_soon"), ("Successfully built", "Failed to upload", "release_failed"), ( "Successfully built", "Failed to release to channels", "release_failed", ), ("Successfully built", "Uploaded", "released"), ("Currently building", "Unscheduled", "in_progress"), ("Currently building", "Pending", "in_progress"), ("Currently building", "Failed to upload", "in_progress"), ( "Currently building", "Failed to release to channels", "in_progress", ), ("Currently building", "Uploaded", "in_progress"), ("Failed to build", "Unscheduled", "failed_to_build"), ("Failed to build", "Pending", "failed_to_build"), ("Failed to build", "Failed to upload", "failed_to_build"), ( "Failed to build", "Failed to release to channels", "failed_to_build", ), ("Failed to build", "Uploaded", "failed_to_build"), ("Dependency wait", "Unscheduled", "failed_to_build"), ("Dependency wait", "Pending", "failed_to_build"), ("Dependency wait", "Failed to upload", "failed_to_build"), ( "Dependency wait", "Failed to release to channels", "failed_to_build", ), ("Dependency wait", "Uploaded", "failed_to_build"), ("Chroot problem", "Unscheduled", "failed_to_build"), ("Chroot problem", "Pending", "failed_to_build"), ("Chroot problem", "Failed to upload", "failed_to_build"), ( "Chroot problem", "Failed to release to channels", "failed_to_build", ), ("Chroot problem", "Uploaded", "failed_to_build"), ("Build for superseded Source", "Unscheduled", "failed_to_build"), ("Build for superseded Source", "Pending", "failed_to_build"), ( "Build for superseded Source", "Failed to upload", "failed_to_build", ), ( "Build for superseded Source", "Failed to release to channels", "failed_to_build", ), ("Build for superseded Source", "Uploaded", "failed_to_build"), ("Failed to upload", "Unscheduled", "failed_to_build"), ("Failed to upload", "Pending", "failed_to_build"), ("Failed to upload", "Failed to upload", "failed_to_build"), ( "Failed to upload", "Failed to release to channels", "failed_to_build", ), ("Failed to upload", "Uploaded", "failed_to_build"), ("Cancelling build", "Unscheduled", "cancelled"), ("Cancelling build", "Pending", "cancelled"), ("Cancelling build", "Cancelling build", "cancelled"), ( "Cancelling build", "Failed to release to channels", "cancelled", ), ("Cancelling build", "Uploaded", "cancelled"), ("Cancelled build", "Unscheduled", "cancelled"), ("Cancelled build", "Pending", "cancelled"), ("Cancelled build", "Cancelled build", "cancelled"), ( "Cancelled build", "Failed to release to channels", "cancelled", ), ("Cancelled build", "Uploaded", "cancelled"), ("Failed to upload", "Unscheduled", "failed_to_build"), ("Failed to upload", "Pending", "failed_to_build"), ("Failed to upload", "Failed to upload", "failed_to_build"), ( "Failed to upload", "Failed to release to channels", "failed_to_build", ), ("Failed to upload", "Uploaded", "failed_to_build"), ] for build_state, upload_state, expected in combinations: result = map_build_and_upload_states(build_state, upload_state) self.assertEqual(result, expected)