def run_checks(checks):
    """
    Run a number of checks.

    :param tuple checks: a tuple of tuples, with check name and parameters dict.

    :returns: whether all checks succeeded, and the results of each check
    :rtype: tuple of (bool, dict)
    """
    results = {}
    all_succeeded = True
    for check, kwargs in checks:
        succeeded = check(**kwargs).succeeded
        if isinstance(succeeded, bool):
            if not succeeded:
                all_succeeded = False
            results[check.__name__] = succeeded
        elif isinstance(succeeded, tuple):
            if not succeeded[0]:
                all_succeeded = False
            results[check.__name__] = succeeded
    return (all_succeeded, results)