diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c812f4514..5e3ae488f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,58 +4,51 @@ on: [push, pull_request] jobs: test: - name: test - runs-on: ${{ matrix.os }} + name: ${{ matrix.toxenv }} (Python ${{ matrix.python-version }}, ${{ matrix.runs-on }}) + runs-on: ${{ matrix.runs-on }} strategy: fail-fast: false matrix: - os: ["ubuntu-latest"] - python-version: ["3.7", "3.10", "pypy-3.7", "pypy-3.8"] - timeout-minutes: 30 + runs-on: ["ubuntu-latest"] + python-version: ["3.7", "3.8", "pypy3.8", "3.10", "3.11"] + toxenv: ["test-xdist"] + include: + - runs-on: ubuntu-latest + python-version: "3.8" + toxenv: test-mindeps-xdist + - runs-on: ubuntu-latest + python-version: "3.11" + toxenv: test-devdeps-xdist + - runs-on: ubuntu-latest + python-version: "3.x" + toxenv: test-xdist-cov + - runs-on: macos-latest + python-version: "3.x" + toxenv: test-xdist-cov steps: - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - # We need Python 3.7 to always be installed, so tests with - # multiple environments can run. - - name: Set up Python 3.7 - uses: actions/setup-python@v4 - with: - python-version: 3.7 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} cache: pip cache-dependency-path: pyproject.toml - - - name: Install dependencies - run: python -m pip install -r requirements-dev.txt - - - name: Install asv - run: pip install . - - - name: Run tests - run: python -m pytest -v --timeout=300 --durations=100 test - - docs: - runs-on: ubuntu-latest + - run: pip install tox + - run: tox -e ${{ matrix.toxenv }} + build: + name: ${{ matrix.toxenv }} (Python ${{ matrix.python-version }}, ${{ matrix.runs-on }}) + runs-on: ${{ matrix.runs-on }} + strategy: + fail-fast: false + matrix: + runs-on: ["ubuntu-latest"] + python-version: ["3.x"] + toxenv: ["build-docs", "build-dist"] steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 with: - python-version: '3.x' + python-version: ${{ matrix.python-version }} cache: pip cache-dependency-path: pyproject.toml - - - name: Install dependencies - run: python -m pip install -r requirements-dev.txt - - - name: Install asv - run: pip install ".[doc]" - - - name: Build docs - run: sphinx-build -W docs/source html + - run: pip install tox + - run: tox -e ${{ matrix.toxenv }} diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 5c8501a18..042124255 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 with: - python-version: '3.9' - - uses: pre-commit/action@v2.0.3 + python-version: '3.x' + - uses: pre-commit/action@v3.0.0 diff --git a/tox.ini b/tox.ini new file mode 100644 index 000000000..f0c10c82f --- /dev/null +++ b/tox.ini @@ -0,0 +1,43 @@ +[tox] +env_list = + test{,-mindeps}{,-warnings,-cov}-xdist + build-{docs,dist} + +[testenv] +description = + run tests + mindeps: with the minimum supported versions of key dependencies + warnings: treating warnings as errors + cov: with coverage + xdist: using parallel processing +extras = + test +deps = + devdeps: -rrequirements-dev.txt + mindeps: minimum_dependencies + cov: pytest-cov + xdist: pytest-xdist +commands_pre = + mindeps: minimum_dependencies asv --filename requirements-min.txt + mindeps: pip install -r requirements-min.txt + pip freeze +commands = + pytest -v --timeout 300 --durations 100 \ + cov: --cov . --cov-report xml \ + warnings: -W error \ + xdist: -n auto \ + {posargs} + +[testenv:build-docs] +description = invoke sphinx-build to build the HTML docs +extras = doc +commands = + sphinx-build -W docs/source html + +[testenv:build-dist] +description = package source and build wheel +skip_install = true +deps = + build +commands = + python -m build .