def upload_release(session): version = release.get_version_from_arguments(session.posargs) if not version: session.error("Usage: nox -s upload-release -- YY.N[.P]") session.log("# Install dependencies") session.install("twine") distribution_files = glob.glob("dist/*") session.log(f"# Distribution files: {distribution_files}") # Sanity check: Make sure there's 2 distribution files. count = len(distribution_files) if count != 2: session.error( f"Expected 2 distribution files for upload, got {count}. " f"Remove dist/ and run 'nox -s build-release -- {version}'" ) # Sanity check: Make sure the files are correctly named. expected_distribution_files = [ f"dist/pip-{version}-py2.py3-none-any.whl", f"dist/pip-{version}.tar.gz", ] if sorted(distribution_files) != sorted(expected_distribution_files): session.error( f"Distribution files do not seem to be for {version} release." ) session.log("# Upload distributions") session.run("twine", "upload", *distribution_files)
def build_release(session): version = release.get_version_from_arguments(session.posargs) if not version: session.error("Usage: nox -s build-release -- YY.N[.P]") session.log("# Ensure no files in dist/") if release.have_files_in_folder("dist"): session.error( "There are files in dist/. Remove them and try again. " "You can use `git clean -fxdi -- dist` command to do this" ) session.log("# Install dependencies") session.install("setuptools", "wheel", "twine") session.log("# Checkout the tag") session.run("git", "checkout", version, external=True, silent=True) session.log("# Cleanup build/ before building the wheel") if release.have_files_in_folder("build"): shutil.rmtree("build") session.log("# Build distributions") session.run("python", "setup.py", "sdist", "bdist_wheel", silent=True) session.log("# Verify distributions") session.run("twine", "check", *glob.glob("dist/*"), silent=True) session.log("# Checkout the master branch") session.run("git", "checkout", "master", external=True, silent=True)
def build_release(session): # type: (nox.Session) -> None version = release.get_version_from_arguments(session) if not version: session.error("Usage: nox -s build-release -- YY.N[.P]") session.log("# Ensure no files in dist/") if release.have_files_in_folder("dist"): session.error( "There are files in dist/. Remove them and try again. " "You can use `git clean -fxdi -- dist` command to do this" ) session.log("# Install dependencies") session.install("setuptools", "wheel", "twine") with release.isolated_temporary_checkout(session, version) as build_dir: session.log( "# Start the build in an isolated, " f"temporary Git checkout at {build_dir!s}", ) with release.workdir(session, build_dir): tmp_dists = build_dists(session) tmp_dist_paths = (build_dir / p for p in tmp_dists) session.log(f"# Copying dists from {build_dir}") os.makedirs('dist', exist_ok=True) for dist, final in zip(tmp_dist_paths, tmp_dists): session.log(f"# Copying {dist} to {final}") shutil.copy(dist, final)
def prepare_release(session): version = release.get_version_from_arguments(session.posargs) if not version: session.error("Usage: nox -s prepare-release -- YY.N[.P]") session.log("# Ensure nothing is staged") if release.modified_files_in_git("--staged"): session.error("There are files staged in git") session.log(f"# Updating {AUTHORS_FILE}") release.generate_authors(AUTHORS_FILE) if release.modified_files_in_git(): release.commit_file( session, AUTHORS_FILE, message=f"Update {AUTHORS_FILE}", ) else: session.log(f"# No changes to {AUTHORS_FILE}") session.log("# Generating NEWS") release.generate_news(session, version) session.log(f"# Bumping for release {version}") release.update_version_file(version, VERSION_FILE) release.commit_file(session, VERSION_FILE, message="Bump for release") session.log("# Tagging release") release.create_git_tag(session, version, message=f"Release {version}") session.log("# Bumping for development") next_dev_version = release.get_next_development_version(version) release.update_version_file(next_dev_version, VERSION_FILE) release.commit_file(session, VERSION_FILE, message="Bump for development")
def build_release(session): version = release.get_version_from_arguments(session.posargs) if not version: session.error("Usage: nox -s build-release -- YY.N[.P]") session.log("# Ensure no files in dist/") if release.have_files_in_folder("dist"): session.error( "There are files in dist/. Remove them and try again. " "You can use `git clean -fxdi -- dist` command to do this" ) session.log("# Install dependencies") session.install("setuptools", "wheel", "twine") with release.isolated_temporary_checkout(session, version) as build_dir: session.log( "# Start the build in an isolated, " f"temporary Git checkout at {build_dir!s}", ) with release.workdir(session, build_dir): tmp_dists = build_dists(session) tmp_dist_paths = (build_dir / p for p in tmp_dists) session.log(f"# Copying dists from {build_dir}") shutil.rmtree('dist', ignore_errors=True) # remove empty `dist/` for dist in tmp_dist_paths: session.log(f"# Copying {dist}") shutil.copy(dist, 'dist')