docs: 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}"')