Make release task build dists @ clean tmp checkout

Co-Authored-By: Pradyun Gedam <pradyunsg@gmail.com>
This commit is contained in:
Sviatoslav Sydorenko 2020-01-26 03:06:22 +01:00
parent 957fb28b30
commit 63ee9b702b
No known key found for this signature in database
GPG Key ID: 9345E8FEA89CA455
1 changed files with 54 additions and 5 deletions

View File

@ -4,11 +4,14 @@
# The following comment should be removed at some point in the future. # The following comment should be removed at some point in the future.
# mypy: disallow-untyped-defs=False # mypy: disallow-untyped-defs=False
import contextlib
import glob import glob
import os import os
import pathlib
import shutil import shutil
import subprocess import subprocess
import sys import sys
import tempfile
import nox import nox
@ -188,6 +191,48 @@ def prepare_release(session):
release.commit_file(session, VERSION_FILE, message="Bump for development") release.commit_file(session, VERSION_FILE, message="Bump for development")
@contextlib.contextmanager
def workdir(nox_session, dir_path: pathlib.Path):
"""Temporarily chdir when entering CM and chdir back on exit."""
orig_dir = pathlib.Path.cwd()
nox_session.log(f"# Changing dir to {dir_path}")
os.chdir(dir_path)
try:
yield dir_path
finally:
nox_session.log(f"# Changing dir back to {orig_dir}")
os.chdir(orig_dir)
@contextlib.contextmanager
def mk_tmp_git_checkout(nox_session, target_commitish: str):
"""Make a clean checkout of a given version in tmp dir.
This is a context manager that cleans up after itself.
"""
with tempfile.TemporaryDirectory() as tmp_dir_path:
tmp_dir = pathlib.Path(tmp_dir_path)
git_checkout_dir = tmp_dir / f'pip-build-{target_commitish}'
nox_session.log(
f"# Creating a temporary Git checkout at {git_checkout_dir!s}",
)
nox_session.run(
'git', 'worktree', 'add', '--force', '--checkout',
str(git_checkout_dir), str(target_commitish),
external=True, silent=True,
)
try:
yield git_checkout_dir
finally:
nox_session.run(
'git', 'worktree', 'remove', '--force',
str(git_checkout_dir),
external=True, silent=True,
)
@nox.session(name="build-release") @nox.session(name="build-release")
def build_release(session): def build_release(session):
version = release.get_version_from_arguments(session.posargs) version = release.get_version_from_arguments(session.posargs)
@ -204,9 +249,16 @@ def build_release(session):
session.log("# Install dependencies") session.log("# Install dependencies")
session.install("setuptools", "wheel", "twine") session.install("setuptools", "wheel", "twine")
session.log("# Checkout the tag") with mk_tmp_git_checkout(session, version) as build_dir_path:
session.run("git", "checkout", version, external=True, silent=True) with workdir(session, build_dir_path):
build_dists(session)
tmp_dist_dir = build_dir_path / 'dist'
session.log(f"# Copying dists from {tmp_dist_dir}")
shutil.copytree(tmp_dist_dir, 'dist')
def build_dists(session):
session.log("# Cleanup build/ before building the wheel") session.log("# Cleanup build/ before building the wheel")
if release.have_files_in_folder("build"): if release.have_files_in_folder("build"):
shutil.rmtree("build") shutil.rmtree("build")
@ -238,9 +290,6 @@ def build_release(session):
session.log("# Verify distributions") session.log("# Verify distributions")
session.run("twine", "check", *glob.glob("dist/*"), silent=True) session.run("twine", "check", *glob.glob("dist/*"), silent=True)
session.log("# Checkout the master branch")
session.run("git", "checkout", "master", external=True, silent=True)
@nox.session(name="upload-release") @nox.session(name="upload-release")
def upload_release(session): def upload_release(session):