name: Python Tests on: push: branches: ["master", "v**"] pull_request: workflow_dispatch: concurrency: group: tests-${{ github.ref }} cancel-in-progress: true defaults: run: shell: bash -eux {0} jobs: static: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.8" cache: 'pip' cache-dependency-path: 'pyproject.toml' - name: Install Python dependencies run: | python -m pip install -U pip tox - name: Run linters run: | tox -m lint-manual - name: Check Manifest run: | tox -m manifest - name: Run compilation run: | pip install -e . python tools/fail_if_no_c.py - name: Run typecheck run: | tox -m typecheck - run: | sudo apt-get install -y cppcheck - run: | cppcheck --force bson cppcheck pymongo build: # supercharge/mongodb-github-action requires containers so we don't test other platforms runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-20.04] python-version: ["3.7", "3.11", "pypy-3.8"] name: CPython ${{ matrix.python-version }}-${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' cache-dependency-path: 'pyproject.toml' - name: Install dependencies run: | pip install -q tox - name: Start MongoDB uses: supercharge/mongodb-github-action@1.10.0 with: mongodb-version: 4.4 - name: Run tests run: | tox -m test doctest: runs-on: ubuntu-latest name: DocTest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.8" cache: 'pip' cache-dependency-path: 'pyproject.toml' - name: Install dependencies run: | pip install -q tox - name: Start MongoDB uses: supercharge/mongodb-github-action@1.10.0 with: mongodb-version: 4.4 - name: Run tests run: | tox -m doc-test docs: name: Docs Checks runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: cache: 'pip' cache-dependency-path: 'pyproject.toml' # Build docs on lowest supported Python for furo python-version: '3.8' - name: Install dependencies run: | pip install -q tox - name: Build docs run: | tox -m doc linkcheck: name: Link Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: cache: 'pip' cache-dependency-path: 'pyproject.toml' # Build docs on lowest supported Python for furo python-version: '3.8' - name: Install dependencies run: | pip install -q tox - name: Build docs run: | tox -m linkcheck typing: name: Typing Tests runs-on: ubuntu-latest strategy: matrix: python: ["3.7", "3.11"] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "${{matrix.python}}" cache: 'pip' cache-dependency-path: 'pyproject.toml' - name: Install dependencies run: | pip install -q tox - name: Run typecheck run: | tox -m typecheck make_sdist: runs-on: ubuntu-latest name: "Make an sdist" steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: cache: 'pip' cache-dependency-path: 'pyproject.toml' # Build sdist on lowest supported Python python-version: '3.7' - name: Build SDist shell: bash run: | pip install build python -m build --sdist - uses: actions/upload-artifact@v4 with: name: "sdist" path: dist/*.tar.gz test_sdist: runs-on: ubuntu-latest needs: [make_sdist] name: Install from SDist and Test timeout-minutes: 20 steps: - name: Download sdist uses: actions/download-artifact@v4 - name: Unpack SDist shell: bash run: | cd sdist ls mkdir test tar --strip-components=1 -zxf *.tar.gz -C ./test ls test - uses: actions/setup-python@v5 with: cache: 'pip' cache-dependency-path: 'sdist/test/pyproject.toml' # Test sdist on lowest supported Python python-version: '3.7' - name: Start MongoDB uses: supercharge/mongodb-github-action@1.10.0 - name: Run Test shell: bash run: | cd sdist/test ls which python pip install -e ".[test]" pytest -v