name: Run tests on: push: branches: - main - '*.x' pull_request: # Run weekly on Monday at 1:23 UTC schedule: - cron: '23 1 * * 1' workflow_dispatch: jobs: test: runs-on: ${{ matrix.os }} # Disable scheduled CI runs on forks if: github.event_name != 'schedule' || github.repository_owner == 'ipython' strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] python-version: ["3.10", "3.11", "3.12"] deps: [test_extra] # Test all on ubuntu, test ends on macos include: - os: macos-latest python-version: "3.10" deps: test_extra - os: macos-latest python-version: "3.11" deps: test_extra # Tests minimal dependencies set - os: ubuntu-latest python-version: "3.11" deps: test # Tests latest development Python version - os: ubuntu-latest python-version: "3.13-dev" deps: test # Installing optional dependencies stuff takes ages on PyPy - os: ubuntu-latest python-version: "pypy-3.10" deps: test - os: windows-latest python-version: "pypy-3.10" deps: test - os: macos-latest python-version: "pypy-3.10" deps: test # Temporary CI run to use entry point compatible code in matplotlib-inline. - os: ubuntu-latest python-version: "3.12" deps: test_extra want-latest-entry-point-code: true steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} cache: pip cache-dependency-path: | pyproject.toml - name: Install latex if: runner.os == 'Linux' && matrix.deps == 'test_extra' run: echo "disable latex for now, issues in mirros" #sudo apt-get -yq -o Acquire::Retries=3 --no-install-suggests --no-install-recommends install texlive dvipng - name: Install and update Python dependencies (binary only) if: ${{ ! contains( matrix.python-version, 'dev' ) }} run: | python -m pip install --only-binary ':all:' --upgrade pip setuptools wheel build python -m pip install --only-binary ':all:' --no-binary curio --upgrade -e .[${{ matrix.deps }}] python -m pip install --only-binary ':all:' --upgrade check-manifest pytest-cov pytest-json-report 'pytest<8' - name: Install and update Python dependencies (dev?) if: ${{ contains( matrix.python-version, 'dev' ) }} run: | python -m pip install --pre --upgrade pip setuptools wheel build python -m pip install --pre --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple --no-binary curio --upgrade -e .[${{ matrix.deps }}] python -m pip install --pre --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple --upgrade check-manifest pytest-cov pytest-json-report python -m pip install --pre --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple git+https://github.com/alexmojaki/executing.git@3.13 - name: Try building with Python build if: runner.os != 'Windows' # setup.py does not support sdist on Windows run: | python -m build shasum -a 256 dist/* - name: Check manifest if: runner.os != 'Windows' # setup.py does not support sdist on Windows run: check-manifest - name: Install entry point compatible code (TEMPORARY) if: matrix.want-latest-entry-point-code run: | python -m pip list # Not installing matplotlib's entry point code as building matplotlib from source is complex. # Rely upon matplotlib to test all the latest entry point branches together. python -m pip install --upgrade git+https://github.com/ipython/matplotlib-inline.git@main python -m pip list - name: pytest env: COLUMNS: 120 run: | pytest --color=yes -raXxs ${{ startsWith(matrix.python-version, 'pypy') && ' ' || '--cov --cov-report=xml' }} --json-report --json-report-file=./report-${{ matrix.python-version }}-${{runner.os}}.json --maxfail=15 - uses: actions/upload-artifact@v3 with: name: upload pytest timing reports as json path: | ./report-*.json - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: name: Test files: /home/runner/work/ipython/ipython/coverage.xml