tox.ini
[tox]
envlist =
py{38,39,310,311,dev}-test{,-image,-recdeps,-alldeps,-oldestdeps,-devdeps,-numpy118,-numpy119,-numpy120,-numpy121,-mpl311}{,-cov}{,-clocale}
build_docs
linkcheck
codestyle
requires =
setuptools >= 30.3.0
pip >= 19.3.1
tox-pypi-filter >= 0.12
isolated_build = true
[testenv]
# The following option combined with the use of the tox-pypi-filter above allows
# project-wide pinning of dependencies, e.g. if new versions of pytest do not
# work correctly with pytest-astropy plugins. Most of the time the pinnings file
# should be empty.
pypi_filter = https://raw.githubusercontent.com/astropy/ci-helpers/main/pip_pinnings.txt
# Pass through the following environment variables which are needed for the CI
passenv = HOME WINDIR LC_ALL LC_CTYPE CC CI IS_CRON ARCH_ON_CI
setenv =
# For coverage, we need to pass extra options to the C compiler
cov: CFLAGS = --coverage -fno-inline-functions -O0
image: MPLFLAGS = -m "mpl_image_compare" --mpl --mpl-generate-summary=html --mpl-results-path={toxinidir}/results --mpl-hash-library={toxinidir}/astropy/tests/figures/{envname}.json --mpl-baseline-path=https://raw.githubusercontent.com/astropy/astropy-figure-tests/astropy-main/figures/{envname}/ --remote-data -W ignore::DeprecationWarning
!image: MPLFLAGS =
clocale: LC_CTYPE = C.ascii
clocale: LC_ALL = C
devdeps: PIP_EXTRA_INDEX_URL = https://pypi.anaconda.org/scipy-wheels-nightly/simple
# Run the tests in a temporary directory to make sure that we don't import
# astropy from the source tree
changedir = .tmp/{envname}
# tox environments are constructed with so-called 'factors' (or terms)
# separated by hyphens, e.g. test-devdeps-cov. Lines below starting with factor:
# will only take effect if that factor is included in the environment name. To
# see a list of example environments that can be run, along with a description,
# run:
#
# tox -l -v
#
description =
run tests
recdeps: with recommended optional dependencies
alldeps: with all optional and test dependencies
devdeps: with the latest developer version of key dependencies
oldestdeps: with the oldest supported version of key dependencies
cov: and test coverage
numpy118: with numpy 1.18.*
numpy119: with numpy 1.19.*
numpy120: with numpy 1.20.*
numpy121: with numpy 1.21.*
image: with image tests
mpl311: with matplotlib 3.1.1
mpldev: with the latest developer version of matplotlib
double: twice in a row to check for global state changes
deps =
numpy118: numpy==1.18.*
numpy119: numpy==1.19.*
numpy120: numpy==1.20.*
numpy121: numpy==1.21.*
mpl311: matplotlib==3.1.1
image: latex
image: scipy
image: pytest-mpl
# The oldestdeps factor is intended to be used to install the oldest versions of all
# dependencies that have a minimum version.
oldestdeps: numpy==1.18.*
oldestdeps: matplotlib==3.1.*
oldestdeps: asdf==2.10.0
oldestdeps: scipy==1.3.*
oldestdeps: pyyaml==3.13
oldestdeps: ipython==4.2.*
oldestdeps: pandas==1.4.*
# ipython did not pin traitlets, so we have to
oldestdeps: traitlets<4.1
# pytest-openfiles pinned because of https://github.com/astropy/astropy/issues/10160 (takes too long)
alldeps: pytest-openfiles==0.4.0
# The devdeps factor is intended to be used to install the latest developer version
# or nightly wheel of key dependencies.
# Do not install asdf-astropy so we can test astropy.io.misc.asdf until we remove it.
devdeps: scipy>=0.0.dev0
devdeps: numpy>=0.0.dev0
devdeps,mpldev: matplotlib>=0.0.dev0
devdeps: git+https://github.com/asdf-format/asdf.git#egg=asdf
devdeps: git+https://github.com/liberfa/pyerfa.git#egg=pyerfa
# The following indicates which extras_require from setup.cfg will be installed
extras =
test: test
devdeps: test_all
recdeps: recommended
recdeps: test_all
alldeps: all
alldeps: test_all
commands =
pip freeze
!cov-!double: pytest --pyargs astropy {toxinidir}/docs {env:MPLFLAGS} {posargs}
cov-!double: pytest --pyargs astropy {toxinidir}/docs {env:MPLFLAGS} --cov astropy --cov-config={toxinidir}/setup.cfg {posargs}
double: python -c 'import sys; from astropy import test; test(); sys.exit(test())'
cov: coverage xml -o {toxinidir}/coverage.xml
# This lets developers to use tox to build docs and ignores warnings.
# This is not used in CI; For that, we have RTD PR builder.
[testenv:build_docs]
changedir = docs
description = invoke sphinx-build to build the HTML docs
extras = docs
commands =
pip freeze
sphinx-build -b html . _build/html {posargs:-j auto}
[testenv:linkcheck]
changedir = docs
description = check the links in the HTML docs
extras = docs
commands =
pip freeze
sphinx-build -b linkcheck . _build/html {posargs:-W}
[testenv:codestyle]
skip_install = true
description = Run all style and file checks with pre-commit
deps =
pre-commit
commands =
pre-commit install-hooks
pre-commit run {posargs:--color always --all-files --show-diff-on-failure}
[testenv:pyinstaller]
# Check that astropy can be included in a PyInstaller bundle without any issues. This
# also serves as a test that tests do not import anything from outside the tests
# directories with relative imports, since we copy the tests out to a separate directory
# to run them.
description = check that astropy can be included in a pyinstaller bundle
changedir = .pyinstaller
deps =
pyinstaller
pytest-mpl
matplotlib
extras = test
commands =
pyinstaller --onefile run_astropy_tests.py \
--distpath . \
--additional-hooks-dir hooks \
--exclude-module tkinter \
--collect-submodules=py \
--hidden-import pytest \
--hidden-import pytest_astropy.plugin \
--hidden-import pytest_openfiles.plugin \
--hidden-import pytest_remotedata.plugin \
--hidden-import pytest_doctestplus.plugin \
--hidden-import pytest_mpl.plugin
./run_astropy_tests --astropy-root {toxinidir}