# Tox (http://tox.testrun.org/) is a tool for running tests # in multiple virtualenvs. This configuration file will run the # test suite on all supported python versions. To use it, "pip install tox" # and then run "tox" from this directory. [pytest] twisted = 1 [tox] envlist = {py27,pypy27,py36}{-coverage,} minversion = 2.4 [testenv] passenv = TAHOE_LAFS_* PIP_* SUBUNITREPORTER_* USERPROFILE HOMEDRIVE HOMEPATH # Get "certifi" to avoid bug #2913. Basically if a `setup_requires=...` causes # a package to be installed (with setuptools) then it'll fail on certain # platforms (travis's OX-X 10.12, Slackware 14.2) because PyPI's TLS # requirements (TLS >= 1.2) are incompatible with the old TLS clients # available to those systems. Installing it ahead of time (with pip) avoids # this problem. deps = # Pin all of these versions for the same reason you ever want to pin # anything: to prevent new releases with regressions from introducing # spurious failures into CI runs for whatever development work is # happening at the time. The versions selected here are just the current # versions at the time. Bumping them to keep up with future releases is # fine as long as those releases are known to actually work. pip==19.1.1 setuptools==41.0.1 wheel==0.33.4 subunitreporter==19.3.2 # As an exception, we don't pin certifi because it contains CA # certificates which necessarily change over time. Pinning this is # guaranteed to cause things to break eventually as old certificates # expire and as new ones are used in the wild that aren't present in # whatever version we pin. Hopefully there won't be functionality # regressions in new releases of this package that cause us the kind of # suffering we're trying to avoid with the above pins. certifi # We add usedevelop=False because testing against a true installation gives # more useful results. usedevelop = False # We use extras=test to get things like "mock" that are required for our unit # tests. extras = test commands = trial {env:TAHOE_LAFS_TRIAL_ARGS:--rterrors} {posargs:allmydata} tahoe --version [testenv:py36] # On macOS, git inside of ratchet.sh needs $HOME. passenv = HOME commands = {toxinidir}/misc/python3/ratchet.sh [testenv:integration] setenv = COVERAGE_PROCESS_START=.coveragerc commands = # NOTE: 'run with "py.test --keep-tempdir -s -v integration/" to debug failures' py.test --coverage -v {posargs:integration} coverage combine coverage report [testenv:coverage] # coverage (with --branch) takes about 65% longer to run commands = # As an aid to debugging, dump all of the Python packages and their # versions that are installed in the test environment. This is # particularly useful to get from CI runs - though hopefully the # version pinning we do limits the variability of this output # somewhat. pip freeze tahoe --version coverage run --branch -m twisted.trial {env:TAHOE_LAFS_TRIAL_ARGS:--rterrors --reporter=timing} {posargs:allmydata} coverage combine coverage xml [testenv:codechecks] # On macOS, git inside of towncrier needs $HOME. passenv = HOME whitelist_externals = /bin/mv commands = flake8 src static misc setup.py python misc/coding_tools/check-umids.py src python misc/coding_tools/check-debugging.py python misc/coding_tools/find-trailing-spaces.py -r src static misc setup.py python misc/coding_tools/check-miscaptures.py # If towncrier.check fails, you forgot to add a towncrier news # fragment explaining the change in this branch. Create one at # `newsfragments/.` with some text for the news # file. See pyproject.toml for legal values. python -m towncrier.check --pyproject towncrier.pyproject.toml [testenv:draftnews] passenv = TAHOE_LAFS_* PIP_* SUBUNITREPORTER_* USERPROFILE HOMEDRIVE HOMEPATH # see comment in [testenv] about "certifi" whitelist_externals = mv deps = certifi towncrier >= 19.2 commands = # With pip >= 10 the existence of pyproject.toml (which we are # required to have to configure towncrier) triggers a "build # isolation" mode which prevents anything from working. Avoid # triggering that pip behavior by keeping the towncrier configuration # somewhere else and only bringing it in when it's actually needed # (after pip is done). # # Some discussion is available at # https://github.com/pypa/pip/issues/5696 # # towncrier post 19.2 (unreleased as of this writing) adds a --config # option that can be used instead of this file shuffling. mv towncrier.pyproject.toml pyproject.toml # towncrier 19.2 + works with python2.7 python -m towncrier --draft # put it back mv pyproject.toml towncrier.pyproject.toml [testenv:news] passenv = TAHOE_LAFS_* PIP_* SUBUNITREPORTER_* USERPROFILE HOMEDRIVE HOMEPATH # see comment in [testenv] about "certifi" whitelist_externals = mv deps = certifi towncrier >= 19.2 commands = # With pip >= 10 the existence of pyproject.toml (which we are # required to have to configure towncrier) triggers a "build # isolation" mode which prevents anything from working. Avoid # triggering that pip behavior by keeping the towncrier configuration # somewhere else and only bringing it in when it's actually needed # (after pip is done). # # Some discussion is available at # https://github.com/pypa/pip/issues/5696 # # towncrier post 19.2 (unreleased as of this writing) adds a --config # option that can be used instead of this file shuffling. mv towncrier.pyproject.toml pyproject.toml # towncrier 19.2 + works with python2.7 python -m towncrier --yes # put it back mv pyproject.toml towncrier.pyproject.toml # commit the changes git commit -m "update NEWS.txt for release" [testenv:deprecations] setenv = PYTHONWARNINGS=default::DeprecationWarning commands = python misc/build_helpers/run-deprecations.py --package allmydata --warnings={env:TAHOE_LAFS_WARNINGS_LOG:_trial_temp/deprecation-warnings.log} trial {env:TAHOE_LAFS_TRIAL_ARGS:--rterrors} {posargs:allmydata} [testenv:upcoming-deprecations] setenv = PYTHONWARNINGS=default::DeprecationWarning deps = # Take the base deps as well! {[testenv]deps} git+https://github.com/warner/foolscap commands = flogtool --version python misc/build_helpers/run-deprecations.py --package allmydata --warnings={env:TAHOE_LAFS_WARNINGS_LOG:_trial_temp/deprecation-warnings.log} trial {env:TAHOE_LAFS_TRIAL_ARGS:--rterrors} {posargs:allmydata} [testenv:checkmemory] commands = rm -rf _test_memory python src/allmydata/test/check_memory.py upload python src/allmydata/test/check_memory.py upload-self python src/allmydata/test/check_memory.py upload-POST python src/allmydata/test/check_memory.py download python src/allmydata/test/check_memory.py download-GET python src/allmydata/test/check_memory.py download-GET-slow python src/allmydata/test/check_memory.py receive # Use 'tox -e docs' to check formatting and cross-references in docs .rst # files. The published docs are built by code run over at readthedocs.org, # which does not use this target (but does something similar). # # If you have "sphinx" installed in your virtualenv, you can just do "make -C # docs html", or "cd docs; make html". # # You can also open docs/_build/html/index.html to see the rendered docs in # your web browser. [testenv:docs] # we pin docutils because of https://sourceforge.net/p/docutils/bugs/301/ # which asserts when it reads links to .svg files (e.g. about.rst) deps = sphinx docutils==0.12 # normal install is not needed for docs, and slows things down skip_install = True commands = sphinx-build -b html -d {toxinidir}/docs/_build/doctrees {toxinidir}/docs {toxinidir}/docs/_build/html [testenv:pyinstaller] # We override this to pass --no-use-pep517 because pyinstaller (3.4, at least) # is broken when this feature is enabled. install_command = python -m pip install --no-use-pep517 {opts} {packages} extras = deps = {[testenv]deps} packaging # PyInstaller 4.0 drops Python 2 support. When we finish porting to # Python 3 we can reconsider this constraint. pyinstaller < 4.0 # Setting PYTHONHASHSEED to a known value assists with reproducible builds. # See https://pyinstaller.readthedocs.io/en/stable/advanced-topics.html#creating-a-reproducible-build setenv=PYTHONHASHSEED=1 commands= pip freeze pyinstaller -y --clean pyinstaller.spec [testenv:tarballs] deps = commands = python setup.py update_version python setup.py sdist --formats=bztar,gztar,zip bdist_wheel