def release(ctx, type_, repo, prebump=PREBUMP, config_file=None, commit=True, yes=False):
    """Make a new release.
    """
    if prebump not in REL_TYPES:
        raise ValueError(f"{type_} not in {REL_TYPES}")
    prebump = REL_TYPES.index(prebump)

    version = _read_version()
    version = _bump_release(version, type_)
    _write_version(version)

    # Needs to happen before Towncrier deletes fragment files.
    tag_content = _render_log()

    ctx.run("towncrier")

    if commit:
        ctx.run(f'git commit -am "Release {version}"')

        tag_content = tag_content.replace('"', '\\"')
        ctx.run(f'git tag -a {version} -m "Version {version}\n\n{tag_content}"')

    ctx.run(f"python setup.py sdist bdist_wheel")

    dist_pattern = f'{PACKAGE_NAME.replace("-", "[-_]")}-*'
    artifacts = list(ROOT.joinpath("dist").glob(dist_pattern))
    filename_display = "\n".join(f"  {a}" for a in artifacts)
    print(f"[release] Will upload:\n{filename_display}")
    if not yes:
        try:
            input("[release] Release ready. ENTER to upload, CTRL-C to abort: ")
        except KeyboardInterrupt:
            print("\nAborted!")
            return

    arg_display = " ".join(f'"{n}"' for n in artifacts)
    cmd = f'twine upload --repository="{repo}"'
    if config_file:
        cmd = f'{cmd} --config-file="{config_file}"'
    cmd = f"{cmd} {arg_display}"
    ctx.run(cmd)

    version = _prebump(version, prebump)
    _write_version(version)
    if commit:
        ctx.run(f'git commit -am "Prebump to {version}"')