noxfile.py (123 lines of code) (raw):

import os.path import nox from nox.sessions import Session _pkg_root = os.path.dirname(os.path.abspath(__file__)) TEST_REQUIREMENTS = os.path.join( _pkg_root, "requirements/test-requirements.txt", ) LINT_REQUIREMENTS = os.path.join( _pkg_root, "requirements/lint-requirements.txt", ) DOC_REQUIREMENTS = os.path.join( _pkg_root, "requirements/doc-requirements.txt", ) PASSING_ENVIRONMENTS = { "PAI_TEST_CONFIG": "test.ini", "PYTHONWARNINGS": "ignore", } UNIT_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10"] INTEGRATION_TEST_PYTHON_VERSIONS = ["3.8"] TEST_VENV_BACKEND = os.environ.get("PAI_TEST_VENV_BACKEND", "conda") def install_test_dependencies(session: Session): # install package session.install("-e", ".") # install test requirements session.install("-r", TEST_REQUIREMENTS) @nox.session(venv_backend=TEST_VENV_BACKEND) def integration(session: Session): """Run integration test.""" install_test_dependencies(session=session) env = { key: os.environ.get(key, value) for key, value in PASSING_ENVIRONMENTS.items() if os.environ.get(key, value) is not None } # set worker to 2 * cpu_count (physical cores) if not specified if "-n" not in session.posargs and "--numprocesses" not in session.posargs: pos_args = session.posargs + ["-n", str(os.cpu_count() * 2)] else: pos_args = session.posargs session.run( "pytest", "-vv", "--cov-config=.coveragerc", "--cov-append", "--cov-report=html", "--cov=pai", os.path.join("tests", "integration"), *pos_args, env=env, ) session.run( "coverage", "report", "-i", "--rcfile=.coveragerc", ) @nox.session(venv_backend=TEST_VENV_BACKEND, python=UNIT_TEST_PYTHON_VERSIONS) def unit(session: Session): """Run unit test.""" install_test_dependencies(session=session) # run test cases session.run( "pytest", "-vv", "--cov-config=.coveragerc", "--cov-append", "--cov-report=html", "--cov=pai", os.path.join("tests", "unit"), *session.posargs, ) session.run( "coverage", "report", "-i", "--rcfile=.coveragerc", ) @nox.session def lint(session: Session): """Enforce code style with flake8.""" session.install("-r", LINT_REQUIREMENTS) session.run("flake8", "--config", ".flake8") session.run("black", "--check", ".") session.run("typos", "--config", "typos.toml", "-w") @nox.session(reuse_venv=True) def black(session: Session): """Format code with black.""" session.install("-r", LINT_REQUIREMENTS) session.run("black", ".") @nox.session(reuse_venv=True) def doc(session: Session): """Build the documents with Sphinx.""" session.install("-e", ".") session.install("-r", DOC_REQUIREMENTS) with session.chdir("./docs"): session.run( "sphinx-build", "-T", "-b", "html", "source", "build", ) @nox.session(reuse_venv=True) def coverage(session: Session): """Coverage report""" install_test_dependencies(session) session.run("coverage", "report", "--show-missing") session.run("coverage", "erase") @nox.session(reuse_venv=True) def notebook(session: Session): """Run jupyter notebook test with nbmake. How to use nbmake: https://semaphoreci.com/blog/test-jupyter-notebooks-with-pytest-and-nbmake """ install_test_dependencies(session) session.install("-r", DOC_REQUIREMENTS) if session.posargs: posargs = session.posargs else: posargs = [ "docs/source/tutorial/", "--ignore", # skip huggingface bert test for now, see: # https://aliyuque.antfin.com/pai/nf5dqg/wggskltqa5bn02w1 "docs/source/tutorial/huggingface_bert/", ] session.run( "pytest", "-vv", "--timeout", "3000", "--nbmake", "-n=auto", *posargs, )