feat: Add 3.14 builds #475
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: 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 }} |