| 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: Test suite with py312-ubuntu, mypyc-compiled |
| python: '3.12-dev' |
| 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_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/ |