| name: Tests | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: [main, master, 'release*'] | |
| tags: ['*'] | |
| pull_request: | |
| paths-ignore: | |
| - 'docs/**' | |
| - 'mypyc/doc/**' | |
| - '**/*.rst' | |
| - '**/*.md' | |
| - .gitignore | |
| - CREDITS | |
| - LICENSE | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| main: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Make sure to run mypyc compiled unit tests for both | |
| # the oldest and newest supported Python versions | |
| - name: Test suite with py38-ubuntu, mypyc-compiled | |
| python: '3.8' | |
| arch: x64 | |
| os: ubuntu-latest | |
| toxenv: py | |
| tox_extra_args: "-n 2" | |
| test_mypyc: true | |
| - name: Test suite with py38-windows-64 | |
| python: '3.8' | |
| arch: x64 | |
| os: windows-latest | |
| toxenv: py38 | |
| tox_extra_args: "-n 2" | |
| - name: Test suite with py39-ubuntu | |
| python: '3.9' | |
| arch: x64 | |
| os: ubuntu-latest | |
| toxenv: py | |
| tox_extra_args: "-n 2" | |
| - name: Test suite with py310-ubuntu | |
| python: '3.10' | |
| arch: x64 | |
| os: ubuntu-latest | |
| toxenv: py | |
| tox_extra_args: "-n 2" | |
| - name: Test suite with py311-ubuntu, mypyc-compiled | |
| python: '3.11' | |
| arch: x64 | |
| os: ubuntu-latest | |
| toxenv: py | |
| tox_extra_args: "-n 2" | |
| test_mypyc: true | |
| - name: mypyc runtime tests with py38-macos | |
| python: '3.8.17' | |
| arch: x64 | |
| os: macos-latest | |
| toxenv: py | |
| tox_extra_args: "-n 2 mypyc/test/test_run.py mypyc/test/test_external.py" | |
| - name: mypyc runtime tests with py38-debug-build-ubuntu | |
| python: '3.8.17' | |
| arch: x64 | |
| os: ubuntu-latest | |
| toxenv: py | |
| tox_extra_args: "-n 2 mypyc/test/test_run.py mypyc/test/test_external.py" | |
| debug_build: true | |
| - name: Type check our own code (py38-ubuntu) | |
| python: '3.8' | |
| arch: x64 | |
| os: ubuntu-latest | |
| toxenv: type | |
| - name: Type check our own code (py38-windows-64) | |
| python: '3.8' | |
| arch: x64 | |
| os: windows-latest | |
| toxenv: type | |
| # We also run these checks with pre-commit in CI, | |
| # but it's useful to run them with tox too, | |
| # to ensure the tox env works as expected | |
| - name: Formatting and code style with Black + ruff | |
| python: '3.10' | |
| arch: x64 | |
| os: ubuntu-latest | |
| toxenv: lint | |
| name: ${{ matrix.name }} | |
| env: | |
| TOX_SKIP_MISSING_INTERPRETERS: False | |
| # Rich (pip) | |
| FORCE_COLOR: 1 | |
| # Tox | |
| PY_COLORS: 1 | |
| # Mypy (see https://github.com/python/mypy/issues/7771) | |
| TERM: xterm-color | |
| MYPY_FORCE_COLOR: 1 | |
| MYPY_FORCE_TERMINAL_WIDTH: 200 | |
| # Pytest | |
| PYTEST_ADDOPTS: --color=yes | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{ matrix.python }} | |
| architecture: ${{ matrix.arch }} | |
| - name: Debug build | |
| if: ${{ matrix.debug_build }} | |
| run: | | |
| PYTHONVERSION=${{ matrix.python }} | |
| PYTHONDIR=~/python-debug/python-$PYTHONVERSION | |
| VENV=$PYTHONDIR/env | |
| ./misc/build-debug-python.sh $PYTHONVERSION $PYTHONDIR $VENV | |
| source $VENV/bin/activate | |
| - name: Install tox | |
| run: pip install --upgrade 'setuptools!=50' tox==4.4.4 | |
| - name: Compiled with mypyc | |
| if: ${{ matrix.test_mypyc }} | |
| run: | | |
| pip install -r test-requirements.txt | |
| CC=clang MYPYC_OPT_LEVEL=0 MYPY_USE_MYPYC=1 pip install -e . | |
| - name: Setup tox environment | |
| run: tox run -e ${{ matrix.toxenv }} --notest | |
| - name: Test | |
| run: tox run -e ${{ matrix.toxenv }} --skip-pkg-install -- ${{ matrix.tox_extra_args }} | |
| python-nightly: | |
| runs-on: ubuntu-latest | |
| name: Test suite with Python nightly | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.12-dev' | |
| - name: Install tox | |
| run: pip install --upgrade 'setuptools!=50' tox==4.4.4 | |
| - name: Setup tox environment | |
| run: tox run -e py --notest | |
| - name: Test | |
| run: tox run -e py --skip-pkg-install -- "-n 2" | |
| continue-on-error: true | |
| - name: Mark as a success | |
| run: exit 0 | |
| python_32bits: | |
| runs-on: ubuntu-latest | |
| name: Test mypyc suite with 32-bit Python | |
| env: | |
| TOX_SKIP_MISSING_INTERPRETERS: False | |
| # Rich (pip) | |
| FORCE_COLOR: 1 | |
| # Tox | |
| PY_COLORS: 1 | |
| # Mypy (see https://github.com/python/mypy/issues/7771) | |
| TERM: xterm-color | |
| MYPY_FORCE_COLOR: 1 | |
| MYPY_FORCE_TERMINAL_WIDTH: 200 | |
| # Pytest | |
| PYTEST_ADDOPTS: --color=yes | |
| CXX: i686-linux-gnu-g++ | |
| CC: i686-linux-gnu-gcc | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Install 32-bit build dependencies | |
| run: | | |
| sudo dpkg --add-architecture i386 && \ | |
| sudo apt-get update && sudo apt-get install -y \ | |
| zlib1g-dev:i386 \ | |
| libgcc-s1:i386 \ | |
| g++-i686-linux-gnu \ | |
| gcc-i686-linux-gnu \ | |
| libffi-dev:i386 \ | |
| libssl-dev:i386 \ | |
| libbz2-dev:i386 \ | |
| libncurses-dev:i386 \ | |
| libreadline-dev:i386 \ | |
| libsqlite3-dev:i386 \ | |
| liblzma-dev:i386 \ | |
| uuid-dev:i386 | |
| - name: Compile, install, and activate 32-bit Python | |
| uses: gabrielfalcao/pyenv-action@v13 | |
| with: | |
| default: 3.11.1 | |
| command: python -c "import platform; print(f'{platform.architecture()=} {platform.machine()=}');" | |
| - name: Install tox | |
| run: pip install --upgrade 'setuptools!=50' tox==4.4.4 | |
| - name: Setup tox environment | |
| run: tox run -e py --notest | |
| - name: Test | |
| run: tox run -e py --skip-pkg-install -- -n 2 mypyc/test/ |