[tox] minversion = 3.0 envlist = lint, py3{8,9,10,11,12}-cov, htmlcov skip_missing_interpreters=true [testenv] setenv = cy: FONTTOOLS_WITH_CYTHON=1 # use 'download = true' to have tox install the latest pip inside the virtualenv. # We need this to be able to install skia-pathops on Linux, which uses a # relatively recent 'manylinux2014' platform tag. # https://github.com/tox-dev/tox/issues/791#issuecomment-518713438 download = true # building lxml from source takes too long on CI, force it to download pre-compiled # wheel or fail if none is found with --only-binary=lxml install_command = python -m pip install --only-binary=lxml {opts} {packages} deps = cov: coverage>=4.3 pytest>=7.0.0 pytest-randomly # add -noextra to tox -e to skip installing extras and only test the core fonttools !noextra: -rrequirements.txt commands = cy: python -c "from fontTools.cu2qu.cu2qu import COMPILED; assert COMPILED" !cy: python -c "from fontTools.cu2qu.cu2qu import COMPILED; assert not COMPILED" # test with or without coverage, passing extra positonal args to pytest cov: coverage run --parallel-mode -m pytest {posargs} !cov: pytest {posargs:Tests fontTools} [testenv:htmlcov] deps = coverage>=4.3 skip_install = true commands = coverage combine coverage html [testenv:lint] deps = -r dev-requirements.txt skip_install = true commands = black --check --diff . mypy [testenv:codecov] passenv = * deps = coverage>=4.3 codecov skip_install = true ignore_outcome = true commands = coverage combine codecov --env TOXENV [testenv:package_readme] description = check that the long description is valid (need for PyPi) deps = twine >= 1.12.1 pip >= 18.0.0 skip_install = true extras = commands = pip wheel -w {envtmpdir}/build --no-deps . twine check {envtmpdir}/build/* [testenv:bdist] deps = setuptools wheel skip_install = true install_command = # make sure we use the latest setuptools and wheel pip install --upgrade {opts} {packages} whitelist_externals = rm commands = # clean up build/ and dist/ folders python -c 'import shutil; shutil.rmtree("dist", ignore_errors=True)' python setup.py clean --all # build sdist python setup.py sdist --dist-dir {toxinidir}/dist # build wheel from sdist pip wheel -v --no-deps --no-index --wheel-dir {toxinidir}/dist --find-links {toxinidir}/dist fonttools [testenv:pypi] deps = {[testenv:bdist]deps} twine skip_install = true passenv = TWINE_USERNAME TWINE_PASSWORD commands = {[testenv:bdist]commands} twine upload dist/*.whl dist/*.zip