Ejemplo n.º 1
0
def schedule_phase(name, phase):
    session = current_app.db.session
    phase = session.query(XPIPhase).filter(
        XPIRelease.id == XPIPhase.release_id).filter(
            XPIRelease.name == name).filter(
                XPIPhase.name == phase).first_or_404()

    # we must require scope which depends on XPI type
    xpi_type = _xpi_type(phase.release.revision, phase.release.xpi_name)
    required_permission = f"{SCOPE_PREFIX}/schedule_phase/xpi/{xpi_type}/{phase.name}"
    if not current_user.has_permissions(required_permission):
        user_permissions = ", ".join(current_user.get_permissions())
        abort(
            401,
            f"required permission: {required_permission}, user permissions: {user_permissions}"
        )

    phase = do_schedule_phase(session, phase)
    url = taskcluster_urls.ui(get_root_url(), f"/tasks/groups/{phase.task_id}")
    logger.info("Phase %s of %s started by %s. - %s", phase.name,
                phase.release.name, phase.completed_by, url)
    notify_via_matrix(
        "xpi",
        f"Phase {phase.name} of {phase.release.name} started by {phase.completed_by}. - {url}"
    )
    return phase.json
Ejemplo n.º 2
0
def schedule_phase(name, phase):
    session = current_app.db.session
    phases = session.query(XPIPhase).filter(
        XPIRelease.id == XPIPhase.release_id).filter(
            XPIRelease.name == name).all()
    phase_to_schedule = list(
        filter(lambda _phase: _phase.name == phase, phases))

    # Get email for all signoffs from previous phases and phase scheduler
    additional_shipit_emails = get_signoff_emails(phases)

    if not phase_to_schedule:
        abort(404, f"phase {phase} not found")

    phase_to_schedule = phase_to_schedule[0]
    # we must require scope which depends on XPI type
    xpi_type = _xpi_type(phase_to_schedule.release.revision,
                         phase_to_schedule.release.xpi_name)
    required_permission = f"{SCOPE_PREFIX}/schedule_phase/xpi/{xpi_type}/{phase_to_schedule.name}"
    if not current_user.has_permissions(required_permission):
        user_permissions = ", ".join(current_user.get_permissions())
        abort(
            401,
            f"required permission: {required_permission}, user permissions: {user_permissions}"
        )

    scheduled_phase = do_schedule_phase(session, phase_to_schedule,
                                        additional_shipit_emails)
    url = taskcluster_urls.ui(get_root_url(),
                              f"/tasks/groups/{scheduled_phase.task_id}")
    logger.info("Phase %s of %s started by %s. - %s", scheduled_phase.name,
                scheduled_phase.release.name, scheduled_phase.completed_by,
                url)
    notify_via_matrix(
        "xpi",
        f"Phase {scheduled_phase.name} of {scheduled_phase.release.name} started by {scheduled_phase.completed_by}. - {url}"
    )
    return scheduled_phase.json
Ejemplo n.º 3
0
def schedule_phase(name, phase):
    session = current_app.db.session
    phase = session.query(Phase).filter(Release.id == Phase.release_id).filter(
        Release.name == name).filter(Phase.name == phase).first_or_404()

    # we must require scope which depends on product
    required_permission = f"{SCOPE_PREFIX}/schedule_phase/{phase.release.product}/{phase.name}"
    if not current_user.has_permissions(required_permission):
        user_permissions = ", ".join(current_user.get_permissions())
        abort(
            401,
            f"required permission: {required_permission}, user permissions: {user_permissions}"
        )

    phase = do_schedule_phase(session, phase)
    url = taskcluster_urls.ui(get_root_url(), f"/tasks/groups/{phase.task_id}")
    logger.info("Phase %s of %s started by %s. - %s", phase.name,
                phase.release.name, phase.completed_by, url)
    notify_via_matrix(
        phase.release.product,
        f"Phase {phase.name} was just scheduled for {phase.release.name} - {url}"
    )

    return phase.json