Take 3.13t back out of the matrix. It was experimental there, and thi… #737
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: tests | |
| on: [push, pull_request, workflow_dispatch] | |
| env: | |
| PYTHONHASHSEED: 1042466059 | |
| ZOPE_INTERFACE_STRICT_IRO: 1 | |
| PYTHONUNBUFFERED: 1 | |
| PYTHONDONTWRITEBYTECODE: 1 | |
| PYTHONDEVMODE: 1 | |
| PYTHONFAULTHANDLER: 1 | |
| PIP_UPGRADE_STRATEGY: eager | |
| PIP_NO_WARN_SCRIPT_LOCATION: 1 | |
| # Uploading built wheels for releases. | |
| # TWINE_PASSWORD is encrypted and stored directly in the | |
| # repo settings. | |
| TWINE_USERNAME: __token__ | |
| jobs: | |
| test: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| python-version: | |
| - "3.10" | |
| - "3.11" | |
| - "3.12" | |
| - "3.13" | |
| - "3.14" | |
| - "3.14t" | |
| # Recall the macOS builds upload built wheels so all supported versions | |
| # need to run on mac. | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| cache-dependency-path: setup.py | |
| allow-prereleases: true | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install -U pip setuptools wheel | |
| python -m pip install -U twine | |
| - name: Install greenlet (non-Mac) | |
| if: ${{ ! startsWith(runner.os, 'Mac') }} | |
| run: | | |
| # Stupid setuptools doesn't want you running 'python setup.py' anymore, | |
| # but stupid pip hides all the intersting compiler output by default, and the | |
| # only way to get anything useful out is to ask *everything* to be verbose, | |
| # which is much more junk than we need to wade through, making it hard to | |
| # see what we want. What's the point of having warnings at all if we can't | |
| # see them, though? | |
| python -m pip wheel -v --wheel-dir ./dist . | |
| python -m pip install -U -e ".[test,docs]" | |
| env: | |
| # Ensure we test with assertions enabled. | |
| # As opposed to the manylinux builds, which we distribute and | |
| # thus only use O3 (because Ofast enables fast-math, which has | |
| # process-wide effects), we test with Ofast here, because we | |
| # expect that some people will compile it themselves with that setting. | |
| CPPFLAGS: "-Ofast -UNDEBUG -Wall" | |
| CFLAGS: "-Ofast -UNDEBUG -Wall" | |
| - name: Install greenlet (Mac) | |
| if: startsWith(runner.os, 'Mac') | |
| run: | | |
| python -m pip wheel -v --wheel-dir ./dist . | |
| python -m pip install -U -e ".[test,docs]" | |
| ls -l dist | |
| # Something in the build system isn't detecting that we're building for both, | |
| # so we're getting tagged with just x86_64. Force the universal2 tag. | |
| # (I've verified that the .so files are in fact universal, with both architectures.) | |
| # The macosx_11_0 tag is conservative: At this writing, | |
| # on GHA, Python 3.7/3.8/3.9/3.10 all produce that tag, while | |
| # 3.11/3.12 produce the less restrictive macosx_10_9 tag. (Locally on JAM's mac, | |
| # the official CPython builds produce 10_9 for everything from 3.9 onward.) | |
| wheel tags --remove --platform-tag macosx_11_0_universal2 dist/*whl | |
| env: | |
| # Unlike the above, we are actually distributing these | |
| # wheels, so they need to be built for production use. | |
| CPPFLAGS: "-O3 -flto -ffunction-sections" | |
| CFLAGS: "-O3 -flto -ffunction-sections" | |
| # Build for both architectures | |
| ARCHFLAGS: "-arch x86_64 -arch arm64" | |
| - name: Check greenlet build | |
| run: | | |
| ls -l dist | |
| twine check dist/* | |
| - name: Store greenlet wheel | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: greenlet-${{ runner.os }}-${{ matrix.python-version }}.whl | |
| path: dist/*whl | |
| - name: Test | |
| run: | | |
| python -VV | |
| python -c 'import greenlet._greenlet as G; assert G.GREENLET_USE_STANDARD_THREADING' | |
| python -m unittest discover -v greenlet.tests | |
| - name: Doctest | |
| run: | | |
| sphinx-build -b doctest -d docs/_build/doctrees2 docs docs/_build/doctest2 | |
| - name: Lint | |
| if: matrix.python-version == '3.12' && startsWith(runner.os, 'Linux') | |
| # We only need to do this on one version. | |
| # We do this here rather than a separate job to avoid the compilation overhead. | |
| run: | | |
| pip install -U pylint | |
| python -m pylint --rcfile=.pylintrc greenlet | |
| - name: Publish package to PyPI (mac) | |
| # We cannot 'uses: pypa/gh-action-pypi-publish@v1.4.1' because | |
| # that's apparently a container action, and those don't run on | |
| # the Mac. | |
| if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') && startsWith(runner.os, 'Mac') | |
| env: | |
| TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} | |
| run: | | |
| twine upload --skip-existing dist/* | |
| CodeQL: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| # required for all workflows | |
| security-events: write | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.10" | |
| cache: 'pip' | |
| cache-dependency-path: setup.py | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install -U pip | |
| python -m pip install -U setuptools wheel | |
| # Initializes the CodeQL tools for scanning. | |
| - name: Initialize CodeQL | |
| uses: github/codeql-action/init@v3 | |
| with: | |
| languages: python, cpp | |
| - name: Install greenlet | |
| run: | | |
| python setup.py build | |
| # - name: Autobuild | |
| # uses: github/codeql-action/autobuild@v1 | |
| - name: Perform CodeQL Analysis | |
| uses: github/codeql-action/analyze@v3 | |
| riscv64: | |
| runs-on: ubuntu-latest | |
| name: RiscV 64 | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.13" | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: all | |
| - name: Build and test greenlet | |
| env: | |
| DOCKER_IMAGE: riscv64/ubuntu:latest | |
| run: bash ./ubuntu-test | |
| manylinux: | |
| runs-on: ubuntu-latest | |
| # We use a regular Python matrix entry to share as much code as possible. | |
| strategy: | |
| matrix: | |
| python-version: | |
| - "3.14" | |
| image: | |
| - manylinux_2_28_x86_64 | |
| - manylinux_2_28_aarch64 | |
| - manylinux_2_28_ppc64le | |
| - manylinux_2_28_s390x | |
| - musllinux_1_2_x86_64 | |
| - musllinux_1_2_aarch64 | |
| name: ${{ matrix.image }} | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: all | |
| - name: Build and test greenlet | |
| env: | |
| DOCKER_IMAGE: quay.io/pypa/${{ matrix.image }} | |
| run: bash ./make-manylinux | |
| - name: Store greenlet wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: wheelhouse/*whl | |
| name: ${{ matrix.image }}_wheels.zip | |
| - name: Publish package to PyPI | |
| uses: pypa/gh-action-pypi-publish@v1.13.0 | |
| if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
| with: | |
| user: __token__ | |
| password: ${{ secrets.TWINE_PASSWORD }} | |
| skip_existing: true | |
| packages_dir: wheelhouse/ |