fix: make PyObject cleanup thread-safe in free-threaded Python and reduce contention #393
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-wheel-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-wheel-linux-arm64 | |
path: /tmp/dist/*.whl | |
retention-days: 1 | |
bdist-wheel-t: | |
runs-on: ${{ matrix.info.machine }} | |
strategy: | |
fail-fast: false | |
matrix: | |
info: | |
- { machine: 'ubuntu-20.04', python: '3.13t', java: '8', arch: 'amd64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
- { machine: 'windows-2022', python: '3.13t', java: '8', arch: 'amd64', cmd: '.\.github\env\Windows\bdist-wheel.ps1' } | |
- { machine: 'macos-13', python: '3.13t', java: '8', arch: 'amd64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
- { machine: 'macos-14', python: '3.13t', java: '11', arch: 'arm64', cmd: '.github/env/macOS/bdist-wheel.sh' } | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-java@v4 | |
id: setup-java | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.info.java }} | |
- uses: astral-sh/setup-uv@v3 | |
- if : ${{ startsWith(matrix.info.machine, 'windows')}} | |
run: | | |
uv python install ${{ matrix.info.python }} | |
uv venv --python ${{ matrix.info.python }} | |
.venv\Scripts\Activate.ps1 | |
uv pip install pip | |
echo PATH=$PATH >> $GITHUB_PATH | |
${{ matrix.info.cmd }} | |
- if : ${{ ! startsWith(matrix.info.machine, 'windows')}} | |
run: | | |
uv python install ${{ matrix.info.python }} | |
uv venv --python ${{ matrix.info.python }} | |
source .venv/bin/activate | |
uv pip install pip | |
echo PATH=$PATH >> $GITHUB_PATH | |
${{ 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-t: | |
runs-on: ${{ matrix.info.machine }} | |
strategy: | |
fail-fast: false | |
matrix: | |
info: | |
- { machine: 'ubuntu-20.04', python: '3.13t', java: '11', arch: 'aarch64', cmd: '.github/env/Linux/bdist-wheel.sh' } | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_FREE_THREADED_SUPPORT: true | |
CIBW_ARCHS_LINUX: "aarch64" | |
CIBW_BUILD: "cp313t-*" | |
CIBW_SKIP: "cp313t-musllinux_aarch64" | |
CIBW_BEFORE_ALL_LINUX: > | |
yum install -y java-${{ matrix.info.java }}-openjdk-devel && | |
yum install -y wget && | |
wget https://www.apache.org/dist/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz -P /tmp && | |
tar xf /tmp/apache-maven-3.8.8-bin.tar.gz -C /opt && | |
ln -s /opt/apache-maven-3.8.8/bin/mvn /usr/bin/mvn | |
CIBW_ENVIRONMENT: JAVA_HOME=/etc/alternatives/jre_11_openjdk | |
CIBW_REPAIR_WHEEL_COMMAND_LINUX: 'auditwheel repair --exclude libjvm.so -w {dest_dir} {wheel}' | |
with: | |
package-dir: . | |
output-dir: dist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: build-${{ matrix.info.python }}-${{ matrix.info.machine }}-${{ matrix.info.arch }} | |
path: dist/*.whl | |
retention-days: 1 | |
collect-artifacts: | |
runs-on: ubuntu-22.04 | |
needs: ['sdist', 'bdist-wheel', 'bdist-wheel-universal2-hack', 'bdist-wheel-linux-arm64', 'bdist-wheel-t', 'bdist-wheel-linux-arm64-t'] | |
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 }} |