feat: free-threaded Python (3.13.0+) support #360
Workflow file for this run
This file contains 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: Build JPY distributions | |
on: | |
pull_request: | |
branches: [ 'master', 'release/v*' ] | |
push: | |
branches: [ 'master', 'release/v*' ] | |
jobs: | |
jars: | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- run: mvn --batch-mode jar:jar javadoc:jar source:jar-no-fork | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: jars | |
path: target | |
sdist: | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
# TODO: sdist shouldn't need java | |
- uses: actions/setup-java@v4 | |
id: setup-java | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- run: python setup.py sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: sdist | |
path: dist | |
bdist-wheel: | |
runs-on: ${{ matrix.info.machine }} | |
strategy: | |
fail-fast: false | |
matrix: | |
info: | |
- { machine: 'ubuntu-20.04', python: '3.6', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'ubuntu-20.04', python: '3.7', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'ubuntu-20.04', python: '3.8', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'ubuntu-20.04', python: '3.9', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'ubuntu-20.04', python: '3.10', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'ubuntu-20.04', python: '3.11', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'ubuntu-20.04', python: '3.12', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'ubuntu-20.04', python: '3.13', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'windows-2022', python: '3.6', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'windows-2022', python: '3.7', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'windows-2022', python: '3.8', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'windows-2022', python: '3.9', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'windows-2022', python: '3.10', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'windows-2022', python: '3.11', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'windows-2022', python: '3.12', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'windows-2022', python: '3.13', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'macos-13', python: '3.6', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
- { machine: 'macos-13', python: '3.7', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
- { machine: 'macos-13', python: '3.11', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
- { machine: 'macos-13', python: '3.12', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
- { machine: 'macos-13', python: '3.13', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.info.python }} | |
- uses: actions/setup-java@v4 | |
id: setup-java | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- run: ${{ matrix.info.cmd }} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: build-${{ matrix.info.python }}-${{ matrix.info.machine }}-${{ matrix.info.arch }} | |
path: dist/*.whl | |
retention-days: 1 | |
# Python 3.6, 3.7 doesn't support M1 support at all. | |
# Python 3.11, 3.12 builds have universal2 defaults: | |
# https://github.com/actions/runner-images/issues/4133 | |
# Python 3.9 builds _had_ universal2 defaults for a short period of time before it was reverted: | |
# https://github.com/actions/python-versions/pull/114, https://github.com/actions/python-versions/pull/175 | |
# Regardless, we can explicitly instruct python at compile time to create universal2 packages: | |
# https://github.com/pypa/cibuildwheel/blob/v2.16.2/cibuildwheel/macos.py#L247-L260 | |
# Note: using macosx-11.0-universal2 instead of macosx-10.9-universal2, as the build warns otherwise that the version | |
# was bumped to 11.0 because the underlying python build has a minimum of 11.0. | |
# There might be a better solution for this in the future: | |
# https://github.com/actions/setup-python/issues/547 | |
bdist-wheel-universal2-hack: | |
runs-on: ${{ matrix.info.machine }} | |
env: | |
_PYTHON_HOST_PLATFORM: macosx-11.0-universal2 | |
ARCHFLAGS: -arch arm64 -arch x86_64 | |
strategy: | |
fail-fast: false | |
matrix: | |
info: | |
- { machine: 'macos-13', python: '3.8', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
- { machine: 'macos-13', python: '3.9', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
- { machine: 'macos-13', python: '3.10', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.info.python }} | |
- uses: actions/setup-java@v4 | |
id: setup-java | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- run: pip install --upgrade pip | |
- run: pip install --upgrade setuptools | |
- run: ${{ matrix.info.cmd }} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: build-${{ matrix.info.python }}-${{ matrix.info.machine }}-${{ matrix.info.arch }} | |
path: dist/*.whl | |
retention-days: 1 | |
bdist-wheels-linux-arm64: | |
runs-on: 'ubuntu-22.04' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Bake | |
uses: docker/[email protected] | |
with: | |
files: .github/docker/docker-bake.hcl | |
pull: true | |
set: | | |
*.platform=linux/arm64/v8 | |
*.output=type=local,dest=/tmp/dist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: bdist-wheels-linux-arm64 | |
path: /tmp/dist/*.whl | |
retention-days: 1 | |
collect-artifacts: | |
runs-on: ubuntu-22.04 | |
needs: ['sdist', 'bdist-wheel', 'bdist-wheel-universal2-hack', 'bdist-wheels-linux-arm64'] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
path: download-artifacts | |
- name: collect-artifacts.sh | |
run: .github/scripts/collect-artifacts.sh | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: jpy | |
path: collect-artifacts | |
release-artifacts: | |
if: ${{ startsWith(github.ref, 'refs/heads/release/v') }} | |
runs-on: ubuntu-22.04 | |
needs: ['collect-artifacts'] | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: jpy | |
path: dist | |
- name: Publish package to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} | |
publish-jar: | |
if: ${{ startsWith(github.ref, 'refs/heads/release/v') }} | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
server-id: ossrh | |
server-username: MAVEN_USERNAME | |
server-password: MAVEN_PASSWORD | |
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} | |
gpg-passphrase: GPG_PASSPHRASE | |
- name: Publish package | |
run: mvn --batch-mode deploy -Pjpy-maven-deploy -DskipTests | |
env: | |
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} | |
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} | |
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} |