Skip to content

feat: Add 3.14 builds #475

feat: Add 3.14 builds

feat: Add 3.14 builds #475

Workflow file for this run

name: Build JPY distributions
on:
pull_request:
branches: [ 'master', 'release/v*' ]
push:
branches: [ 'master', 'release/v*' ]
jobs:
jars:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- uses: actions/setup-java@v5
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-24.04
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
# TODO: sdist shouldn't need java
- uses: actions/setup-java@v5
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:
# Note: the free-threaded Linux wheels are not currently buildable via the docker bake workflow due to the
# limitations of the current image (docker.io/library/python:X doesn't provide free-threaded versions). Using
# the oldest available GitHub Linux runner image (ubuntu-22.04 / ubuntu-22.04-arm), we are able to use get
# the free-threaded builds via actions/setup-python. This produces a manylinux_2_34 compatible wheel (as
# opposed to manylinux_2_17 produced via the docker bake process). This is a compromise that seems reasonable
# given the more experimental nature of the free-threaded builds, coupled with the fact that python 3.13t is
# less likely to be used on older Linux distributions.
- { machine: 'ubuntu-22.04', python: '3.13t', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' }
- { machine: 'ubuntu-22.04-arm', python: '3.13t', arch: 'arm64', cmd: '.github/env/Linux/bdist-wheel.sh' }
- { machine: 'ubuntu-22.04', python: '3.14t', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' }
- { machine: 'ubuntu-22.04-arm', python: '3.14t', arch: 'arm64', cmd: '.github/env/Linux/bdist-wheel.sh' }
- { 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: 'windows-2022', python: '3.13t', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' }
- { machine: 'windows-2022', python: '3.14', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' }
- { machine: 'windows-2022', python: '3.14t', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' }
- { 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' }
- { machine: 'macos-13', python: '3.13t', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' }
- { machine: 'macos-13', python: '3.14', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' }
- { machine: 'macos-13', python: '3.14t', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' }
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.info.python }}
- uses: actions/setup-java@v5
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.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@v5
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.info.python }}
- uses: actions/setup-java@v5
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-wheel-linux-arm64:
runs-on: 'ubuntu-24.04-arm'
steps:
- uses: actions/checkout@v5
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- run: mkdir /tmp/dist
- name: Bake
uses: docker/bake-action@v6.9.0
env:
DOCKER_BUILD_RECORD_UPLOAD: false
with:
files: .github/docker/docker-bake.hcl
pull: true
set: |
*.output=type=local,dest=/tmp/dist
- uses: actions/upload-artifact@v4
with:
name: bdist-wheel-linux-arm64
path: /tmp/dist/*.whl
retention-days: 1
bdist-wheel-linux-amd64:
runs-on: 'ubuntu-24.04'
steps:
- uses: actions/checkout@v5
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- run: mkdir /tmp/dist
- name: Bake
uses: docker/bake-action@v6.9.0
env:
DOCKER_BUILD_RECORD_UPLOAD: false
with:
files: .github/docker/docker-bake.hcl
pull: true
set: |
*.output=type=local,dest=/tmp/dist
- uses: actions/upload-artifact@v4
with:
name: bdist-wheel-linux-amd64
path: /tmp/dist/*.whl
retention-days: 1
collect-artifacts:
runs-on: ubuntu-24.04
needs: ['sdist', 'bdist-wheel', 'bdist-wheel-universal2-hack', 'bdist-wheel-linux-amd64', 'bdist-wheel-linux-arm64']
steps:
- uses: actions/checkout@v5
- 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-24.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-24.04
steps:
- uses: actions/checkout@v5
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '8'
server-id: central
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.CENTRAL_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.CENTRAL_TOKEN }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}