def conda_tests(session: nox.Session) -> None: """Run test suite with pytest.""" session.create_tmp() # Fixes permission errors on Windows session.conda_install( "--file", "requirements-conda-test.txt", "--channel", "conda-forge" ) session.install("-e", ".", "--no-deps") session.run("pytest", *session.posargs)
def tests(session: nox.Session) -> None: """Run test suite with pytest.""" session.create_tmp() # Fixes permission errors on Windows session.install("-r", "requirements-test.txt") session.install("-e", ".[tox_to_nox]") session.run( "pytest", "--cov=nox", "--cov-config", "pyproject.toml", "--cov-report=", *session.posargs, env={"COVERAGE_FILE": f".coverage.{session.python}"}, ) session.notify("cover")
def make_cookie(session: nox.Session, backend: str) -> None: tmp_dir = session.create_tmp() # Nox sets TMPDIR to a relative path - fixed in nox 2022.1.7 session.env["TMPDIR"] = os.path.abspath(tmp_dir) session.cd(tmp_dir) package_dir = Path(f"cookie-{backend}") with open("input.yml", "w") as f: f.write(JOB_FILE.format(backend=backend)) session.run( "cookiecutter", "--no-input", str(DIR), "--config-file=input.yml", ) session.cd(package_dir) session.run("git", "init", "-q", external=True) session.run("git", "add", ".", external=True) session.run( "git", "-c", "user.name=Bot", "-c", "[email protected]", "commit", "-qm", "feat: initial version", external=True, ) session.run("git", "tag", "v0.1.0", external=True)
def tests_pipenv(session: nox.Session): """ Run test suite with pipenv sync. """ tmp_dir = session.create_tmp() for to_copy in (package_name, tests_name, pipfile_lock, notebooks_name): if Path(to_copy).is_dir(): copytree(to_copy, Path(tmp_dir) / to_copy) elif Path(to_copy).is_file(): copy2(to_copy, tmp_dir) elif Path(to_copy).exists(): ValueError("File not dir or file.") else: logging.error(f"Expected {to_copy} to exist.") session.chdir(tmp_dir) session.install("pipenv") session.run("pipenv", "--rm", success_codes=[0, 1]) session.run( "pipenv", "sync", "--python", f"{session.python}", "--dev", "--bare", ) session.run( "pipenv", "run", "pytest", )
def _build(session: nox.Session, dist: Path) -> None: session.install("build") tmp_dir = Path(session.create_tmp()) / "build-output" session.run("python", "-m", "build", "--outdir", str(tmp_dir)) (wheel_path,) = tmp_dir.glob("*.whl") (sdist_path,) = tmp_dir.glob("*.tar.gz") dist.mkdir(exist_ok=True) wheel_path.rename(dist / wheel_path.name) sdist_path.rename(dist / sdist_path.name)
def tests(session: nox.Session) -> None: """ Run the tests (requires a compiler). """ tmpdir = session.create_tmp() session.install("pytest", "cmake") session.run("cmake", "-S", ".", "-B", tmpdir, "-DPYBIND11_WERROR=ON", "-DDOWNLOAD_CATCH=ON", "-DDOWNLOAD_EIGEN=ON", *session.posargs) session.run("cmake", "--build", tmpdir) session.run("cmake", "--build", tmpdir, "--config=Release", "--target", "check")
def test_dist(session: nox.Session) -> None: """ Builds SDist & Wheels then run unit tests on those. """ tmp_dir = Path(session.create_tmp()) dist = tmp_dir / "dist" _build(session, dist) python_versions = session.posargs or PYTHON_ALL_VERSIONS for version in python_versions: session.notify(f"_test_sdist-{version}", [str(dist)]) session.notify(f"_test_wheel-{version}", [str(dist)])
def doc(session: nox.Session) -> None: """Generate the documentation.""" session.install("-r", "doc/requirements.txt", "docutils") session.install("-e", ".") # Build the Sphinx documentation session.chdir("doc") session.run("make", "html", "O=-W", external=True) session.chdir("..") # Ensure that the README builds fine as a standalone document. readme_html = session.create_tmp() + "/README.html" session.run("rst2html5.py", "--strict", "README.rst", readme_html)
def downstream_botocore(session: nox.Session) -> None: root = os.getcwd() tmp_dir = session.create_tmp() session.cd(tmp_dir) git_clone(session, "https://github.com/boto/botocore") session.chdir("botocore") session.run("git", "rev-parse", "HEAD", external=True) session.run("python", "scripts/ci/install") session.cd(root) session.install(".", silent=False) session.cd(f"{tmp_dir}/botocore") session.run("python", "-c", "import urllib3; print(urllib3.__version__)") session.run("python", "scripts/ci/run-tests")
def _docker_images(session: nox.Session) -> List[str]: tmp_dir = Path(session.create_tmp()) script = tmp_dir / "list_images.py" images_file = tmp_dir / "images.lst" script.write_text( fr""" import sys from pathlib import Path sys.path.append("./tests/integration") from test_manylinux import MANYLINUX_IMAGES images = "\n".join(MANYLINUX_IMAGES.values()) Path(r"{images_file}").write_text(images) """ ) session.run("python", str(script), silent=True) return images_file.read_text().splitlines()
def downstream_requests(session: nox.Session) -> None: root = os.getcwd() tmp_dir = session.create_tmp() session.cd(tmp_dir) git_clone(session, "https://github.com/psf/requests") session.chdir("requests") session.run("git", "apply", f"{root}/ci/requests.patch", external=True) session.run("git", "rev-parse", "HEAD", external=True) session.install(".[socks]", silent=False) session.install("-r", "requirements-dev.txt", silent=False) session.cd(root) session.install(".", silent=False) session.cd(f"{tmp_dir}/requests") session.run("python", "-c", "import urllib3; print(urllib3.__version__)") session.run("pytest", "tests")
def docs(session: nox.Session) -> None: """Build the documentation.""" output_dir = os.path.join(session.create_tmp(), "output") doctrees, html = map( functools.partial(os.path.join, output_dir), ["doctrees", "html"] ) shutil.rmtree(output_dir, ignore_errors=True) session.install("-r", "requirements-test.txt") session.install(".") session.cd("docs") sphinx_args = ["-b", "html", "-W", "-d", doctrees, ".", html] if not session.interactive: sphinx_cmd = "sphinx-build" else: sphinx_cmd = "sphinx-autobuild" sphinx_args.insert(0, "--open-browser") session.run(sphinx_cmd, *sphinx_args)
def build(session: nox.Session) -> str: """ Make an SDist and a wheel. Only runs once. """ global built if not built: session.log( "The files produced locally by this job are not intended to be redistributable" ) session.install("build") tmpdir = session.create_tmp() session.run("python", "-m", "build", "--outdir", tmpdir, env=BUILD_ENV) (wheel_path, ) = Path(tmpdir).glob("*.whl") (sdist_path, ) = Path(tmpdir).glob("*.tar.gz") Path("dist").mkdir(exist_ok=True) wheel_path.rename(f"dist/{wheel_path.name}") sdist_path.rename(f"dist/{sdist_path.name}") built = wheel_path.name return built
def hist(session: nox.Session) -> None: """ Run Hist's test suite """ shutil.rmtree("build", ignore_errors=True) session.install(".") tmpdir = session.create_tmp() session.chdir(tmpdir) session.run("git", "clone", "https://github.com/scikit-hep/hist", external=True) session.chdir("hist") with open("setup.cfg", encoding="utf-8") as f: lines = f.readlines() with open("setup.cfg", "w", encoding="utf-8") as f: for line in lines: if "boost-histogram" not in line: f.write(line) session.install(".[test,plot]") session.run("pytest", *session.posargs)