https://github.com/astropy/astropy
Raw File
Tip revision: 9f2c27e49b22f35fba04725fc4cd54b0300838cb authored by Erik Tollerud on 26 July 2021, 15:34:44 UTC
Finalizing changelog for v4.3
Tip revision: 9f2c27e
tox.ini
[tox]
envlist =
    py{37,38,39,dev}-test{,-alldeps,-oldestdeps,-devdeps,-numpy117,-numpy118,-numpy119}{,-cov}{,-clocale}
    build_docs
    linkcheck
    codestyle
requires =
    setuptools >= 30.3.0
    pip >= 19.3.1
    tox-pypi-filter >= 0.12
isolated_build = true
indexserver =
    NIGHTLY = https://pypi.anaconda.org/scipy-wheels-nightly/simple

[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 environemnt variables which are needed for the CI
passenv = HOME WINDIR LC_ALL LC_CTYPE CC CI IS_CRON ARCH_ON_CI TEST_READ_HUGE_FILE

# For coverage, we need to pass extra options to the C compiler
setenv =
    cov: CFLAGS = --coverage -fno-inline-functions -O0
    image: MPLFLAGS = --mpl
    !image: MPLFLAGS =
    clocale: LC_CTYPE = C.ascii
    clocale: LC_ALL = C

# 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 constructued 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
    alldeps: with all optional dependencies
    devdeps: with the latest developer version of key dependencies
    oldestdeps: with the oldest supported version of key dependencies
    cov: and test coverage
    numpy117: with numpy 1.17.*
    numpy118: with numpy 1.18.*
    numpy119: with numpy 1.19.*
    image: with image tests
    mpldev: with the latest developer version of matplotlib
    double: twice in a row to check for global state changes

deps =

    py37: importlib-metadata<3.9

    numpy117: numpy==1.17.*
    numpy118: numpy==1.18.*
    numpy119: numpy==1.19.*

    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.17.*
    oldestdeps: matplotlib==3.0.*
    oldestdeps: asdf==2.6.*
    oldestdeps: scipy==1.1.*
    oldestdeps: pyyaml==3.13
    oldestdeps: ipython==4.2.*
    # 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.
    devdeps: :NIGHTLY:numpy
    devdeps,mpldev: git+https://github.com/matplotlib/matplotlib.git#egg=matplotlib
    devdeps: git+https://github.com/spacetelescope/asdf.git#egg=asdf
    devdeps: git+https://github.com/liberfa/pyerfa.git#egg=pyerfa

    # Linkcheck is broken with cryptic error with Sphinx 3.1.0
    # https://github.com/astropy/astropy/issues/10489
    # It also emits a warning from BLS docstring that we cannot banish with numpydoc 1.1.0
    linkcheck: sphinx<3.1
    linkcheck: numpydoc<1.1.0

# The following indicates which extras_require from setup.cfg will be installed
extras =
    test
    alldeps: 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 -j auto -b html . _build/html

[testenv:linkcheck]
changedir = docs
description = check the links in the HTML docs
extras = docs
commands =
    pip freeze
    sphinx-build -W -b linkcheck . _build/html

[testenv:codestyle]
# We list the warnings/errors to check for here rather than in setup.cfg because
# we don't want these options to apply whenever anyone calls flake8 from the
# command-line or their code editor - in this case all warnings/errors should be
# checked for. The warnings/errors we check for here are:
# E101 - mix of tabs and spaces
# W191 - use of tabs
# W291 - trailing whitespace
# W292 - no newline at end of file
# W293 - trailing whitespace
# W391 - blank line at end of file
# E111 - 4 spaces per indentation level
# E112 - 4 spaces per indentation level
# E113 - 4 spaces per indentation level
# E301 - expected 1 blank line, found 0
# E302 - expected 2 blank lines, found 0
# E303 - too many blank lines (3)
# E304 - blank lines found after function decorator
# E305 - expected 2 blank lines after class or function definition
# E306 - expected 1 blank line before a nested definition
# E502 - the backslash is redundant between brackets
# E722 - do not use bare except
# E901 - SyntaxError or IndentationError
# E902 - IOError
# E999: SyntaxError -- failed to compile a file into an Abstract Syntax Tree
# F822: undefined name in __all__
# F823: local variable name referenced before assignment
skip_install = true
description = check code style, e.g. with flake8
deps = flake8
changedir = {toxinidir}
commands = flake8 astropy --count --select=E101,W191,W291,W292,W293,W391,E111,E112,E113,E30,E502,E722,E901,E902,E999,F822,F823

[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 =
    # The developer version of PyInstaller doesn't work yet because it
    # requires https://github.com/pyinstaller/pyinstaller/pull/4888 -
    # so for now we pin to the latest working commit.
    git+https://github.com/pyinstaller/pyinstaller.git@c111ec5c#egg=PyInstaller
    pytest-mpl
    # PyInstaller is not yet compatible with Matplotlib 3.3 so we pin
    # Matplotlib to an older version for now - see the following issue
    # for more details: https://github.com/pyinstaller/pyinstaller/issues/5004
    matplotlib<3.3
extras = test
commands =
    pyinstaller --onefile run_astropy_tests.py \
                --distpath . \
                --additional-hooks-dir hooks \
                --exclude-module tkinter \
                --hidden-import pytest \
                --hidden-import pytest_openfiles.plugin \
                --hidden-import pytest_remotedata.plugin \
                --hidden-import pytest_doctestplus.plugin \
                --hidden-import pytest_mpl.plugin
    ./run_astropy_tests
back to top