Support installing and testing using only a JRE #1
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
on: | |
push: | |
pull_request: | |
create: | |
name: Continuous Integration - Testing Wheels on JREs | |
jobs: | |
build_test_jar: | |
runs-on: 'ubuntu-latest' | |
steps: | |
- name: Checkout pyjnius | |
uses: actions/checkout@v3 | |
- name: Setup java | |
# There's no need to setup java on ubuntu-latest, as build is done into a manylinux | |
# containerized environment. (CIBW_BEFORE_ALL_LINUX) takes care of it. | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
architecture: 'x64' | |
- name: Setup ant on Linux | |
run: | | |
sudo apt-get update && sudo apt-get install -y ant | |
- name: Build test-classes via ant | |
run: ant all | |
- name: Upload test-classes | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-classes | |
path: build/test-classes | |
build_wheels: | |
name: cibuildwheel on ${{ matrix.os }} ${{ matrix.architecture }} | |
env: | |
CIBW_BEFORE_ALL_LINUX: 'yum install -y java-11-openjdk-devel' | |
CIBW_REPAIR_WHEEL_COMMAND_MACOS: '' | |
CIBW_SKIP: 'cp36-* *musllinux*' | |
strategy: | |
matrix: | |
include: | |
- os: windows-latest | |
architecture: 'x86' | |
cibw_archs: 'x86' | |
- os: windows-latest | |
architecture: 'x64' | |
cibw_archs: 'AMD64' | |
- os: ubuntu-latest | |
architecture: 'x64' | |
cibw_archs: 'x86_64' | |
- os: macos-latest | |
architecture: 'x64' | |
cibw_archs: 'x86_64 universal2' | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout pyjnius | |
uses: actions/checkout@v3 | |
- name: Setup Python (Ubuntu x86_64, macOS Intel, Windows x86_64) | |
if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest' || matrix.os == 'ubuntu-latest' | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- name: Setup java | |
# There's no need to setup java on ubuntu-latest, as build is done into a manylinux | |
# containerized environment. (CIBW_BEFORE_ALL_LINUX) takes care of it. | |
if: ${{ matrix.os != 'ubuntu-latest' }} | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
architecture: ${{ matrix.architecture }} | |
- name: Install cibuildwheel & build wheels (Windows) | |
if: matrix.os == 'windows-latest' | |
env: | |
CIBW_ARCHS: '${{ matrix.cibw_archs }}' | |
run: | | |
python -m pip install cibuildwheel~=2.16.2 | |
python -m cibuildwheel --output-dir dist | |
- name: Install cibuildwheel & build wheels (Linux, macOS Intel) | |
if: (matrix.os == 'ubuntu-latest') || (matrix.os == 'kivy-ubuntu-arm64') || (matrix.os == 'macos-latest') | |
env: | |
CIBW_ARCHS: '${{ matrix.cibw_archs }}' | |
run: | | |
source .ci/utils.sh | |
ensure_python_version 3.11 | |
python -m pip install cibuildwheel~=2.16.2 | |
python -m cibuildwheel --output-dir dist | |
- name: upload wheels | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist | |
path: dist | |
test_wheels: | |
name: Test wheel on ${{ matrix.os }} (${{ matrix.architecture }}) Python ${{ matrix.python }} | |
needs: | |
- build_wheels | |
continue-on-error: true | |
strategy: | |
matrix: | |
os: ['ubuntu-latest', 'macos-latest', 'windows-latest', 'kivy-ubuntu-arm64'] | |
python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', 'pypy3.7', 'pypy3.8', 'pypy3.9'] | |
include: | |
# We may would like to introduce tests also on windows-latest on x86 (win32 wheels)? | |
- os: ubuntu-latest | |
architecture: 'x64' | |
- os: windows-latest | |
architecture: 'x64' | |
- os: macos-latest | |
architecture: 'x64' | |
- os: apple-silicon-m1 | |
architecture: 'aarch64' | |
python: '3.10' | |
- os: apple-silicon-m1 | |
architecture: 'aarch64' | |
python: '3.11' | |
- os: apple-silicon-m1 | |
architecture: 'aarch64' | |
python: '3.12' | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout pyjnius | |
uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist | |
path: dist | |
- uses: actions/download-artifact@v3 | |
with: | |
name: test-classes | |
path: build/test-classes | |
- name: Setup Python (Ubuntu x86_64, macOS Intel, Windows x86_64) | |
# Needs to be skipped on our self-hosted runners tagged as 'apple-silicon-m1' | |
if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest' || matrix.os == 'ubuntu-latest' || matrix.os == 'apple-silicon-m1' | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Setup java | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
java-package: 'jre' | |
architecture: ${{ matrix.architecture }} | |
- name: Install pyjnius wheel + test prerequisites (Windows, macOS) | |
if: matrix.os == 'windows-latest' || matrix.os == 'macos-latest' || matrix.os == 'apple-silicon-m1' | |
# --find-links=dist --no-index is needed to avoid downloading the pyjnius wheel | |
# from the index. We need to test the wheel we just built. | |
run: | | |
python -m pip install --find-links=dist --no-index pyjnius | |
python -m pip install pyjnius[dev,ci] | |
- name: Install pyjnius wheel + test prerequisites (Linux) | |
if: matrix.os == 'ubuntu-latest' || matrix.os == 'kivy-ubuntu-arm64' | |
# --find-links=dist --no-index is needed to avoid downloading the pyjnius wheel | |
# from the index. We need to test the wheel we just built. | |
run: | | |
source .ci/utils.sh | |
ensure_python_version ${{ matrix.python }} | |
python -m pip install --find-links=dist --no-index pyjnius | |
python -m pip install pyjnius[dev,ci] | |
- name: Test wheel (Linux, macOS) | |
if: (matrix.os == 'ubuntu-latest') || (matrix.os == 'kivy-ubuntu-arm64') || (matrix.os == 'macos-latest') || (matrix.os == 'apple-silicon-m1') | |
run: | | |
source .ci/utils.sh | |
ensure_python_version ${{ matrix.python }} | |
cd tests | |
CLASSPATH=../build/test-classes:../build/classes python -m pytest -v | |
- name: Test wheel ( Windows + Python == 3.7.x ) | |
# On Python < 3.8.x, we can't use `os.add_dll_directory`, so the jre should be in PATH. | |
if: (matrix.os == 'windows-latest') && contains(matrix.python, '3.7') | |
run: | | |
cd tests | |
$env:PATH +=";$env:JAVA_HOME\jre\bin\server\;$env:JAVA_HOME\jre\bin\client\;$env:JAVA_HOME\bin\server\" | |
$env:CLASSPATH ="../build/test-classes;../build/classes" | |
python -m pytest -v | |
- name: Test wheel (Windows + Python != 3.7.x ) | |
if: (matrix.os == 'windows-latest') && !contains(matrix.python, '3.7') | |
run: | | |
cd tests | |
$env:CLASSPATH ="../build/test-classes;../build/classes" | |
python -m pytest -v |