Exemple #1
0
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,
    }
Exemple #2
0
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
Exemple #3
0
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)
Exemple #4
0
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,
    }
Exemple #5
0
    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)