ci: run tests when building macOS arm64 natively #527
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: Wheels | |
on: | |
pull_request: | |
push: | |
env: | |
REPO_DIR: pillow-avif-plugin | |
BUILD_DEPENDS: "" | |
TEST_DEPENDS: "pytest pillow" | |
MACOSX_DEPLOYMENT_TARGET: "10.10" | |
WHEEL_SDIR: wheelhouse | |
CONFIG_PATH: pillow-avif-plugin/wheelbuild/config.sh | |
LIBAVIF_VERSION: 88d3dccda111f6ccbcccd925179f67e7d6fdf4ff | |
jobs: | |
build: | |
name: ${{ matrix.python }} ${{ matrix.os-name }} ${{ matrix.arch == 'x86' && 'x86_64' || matrix.os-type == 'macos' && 'arm64' || 'aarch64' }} | |
runs-on: ${{ matrix.os-type == 'ubuntu' && 'ubuntu-latest' || (matrix.os-type == 'macos' && (matrix.arch == 'x86' || matrix.python == '2.7' || matrix.python == '3.7')) && 'macos-13' || 'macos-latest' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os-type: [ "ubuntu", "macos" ] | |
python: [ "2.7", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12" ] | |
arch: [ "x86", "arm" ] | |
manylinux-version: [ "2014" ] | |
mb-ml-libc: [ "manylinux", "musllinux" ] | |
exclude: | |
- python: "2.7" | |
os-type: "ubuntu" | |
manylinux-version: "2014" | |
- python: "3.7" | |
os-type: "ubuntu" | |
manylinux-version: "2014" | |
- python: "2.7" | |
os-type: "ubuntu" | |
arch: "arm" | |
- python: "2.7" | |
mb-ml-libc: "musllinux" | |
- python: "3.7" | |
mb-ml-libc: "musllinux" | |
- arch: "arm" | |
mb-ml-libc: "musllinux" | |
- os-type: "macos" | |
mb-ml-libc: "musllinux" | |
include: | |
- os-type: "macos" | |
os-name: "macOS" | |
- os-type: "ubuntu" | |
os: "ubuntu-latest" | |
python: "2.7" | |
arch: "x86" | |
manylinux-version: "2010" | |
os-name: "manylinux2010" | |
- os-type: "ubuntu" | |
os: "ubuntu-latest" | |
python: "3.7" | |
arch: "x86" | |
manylinux-version: "2010" | |
os-name: "manylinux2010" | |
- os-type: "ubuntu" | |
os: "ubuntu-latest" | |
manylinux-version: "2014" | |
os-name: "manylinux2014" | |
- mb-ml-libc: "musllinux" | |
os-type: "ubuntu" | |
os-name: "musllinux" | |
env: | |
BUILD_COMMIT: HEAD | |
PLAT: ${{ matrix.arch == 'x86' && 'x86_64' || (matrix.os-type == 'macos' && 'arm64') || 'aarch64' }} | |
MB_PYTHON_VERSION: ${{ matrix.python }} | |
TRAVIS_OS_NAME: ${{ matrix.os-name }} | |
MB_ML_VER: ${{ matrix.mb-ml-libc == 'musllinux' && '_1_1' || matrix.manylinux-version }} | |
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.arch == 'arm' && '11.0' || '10.10' }} | |
MB_ML_LIBC: ${{ matrix.mb-ml-libc }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
path: pillow-avif-plugin | |
- name: Checkout dependencies | |
uses: actions/checkout@v3 | |
with: | |
repository: fdintino/pillow-avif-plugin-depends | |
path: pillow-avif-plugin-depends | |
- name: Checkout multibuild | |
uses: actions/checkout@v3 | |
with: | |
repository: multi-build/multibuild | |
path: multibuild | |
ref: ${{ (matrix.python == '3.11' || matrix.python == '3.12' || matrix.os == 'macos-latest' || (env.PLAT == 'arm64' && matrix.python != '2.7')) && '88146e74ebc86baf97b6fec448ef766d64326582' || '34e970c4bc448b73af0127615fc4583b4f247369' }} | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
if: ${{ matrix.os == 'ubuntu-latest' && matrix.arch == 'arm' }} | |
- name: Setup env_vars | |
run: | | |
cat <<'EOF' >> env_vars.sh | |
export LIBAVIF_VERSION=${{ env.LIBAVIF_VERSION }}" | |
export GITHUB_ACTIONS=1" | |
EOF | |
# - name: Cache build | |
# id: build-cache | |
# uses: actions/cache@v3 | |
# with: | |
# path: pillow-avif-plugin/depends/libavif-${{ env.LIBAVIF_VERSION }} | |
# key: | |
# ${{ env.LIBAVIF_VERSION }}-${{ hashFiles('pillow-avif-plugin/wheelbuild/*.sh', 'pillow-avif-plugin/.github/workflows/wheels.yml', 'pillow-avif-plugin/depends/*') }}-${{ matrix.os }}-${{ env.PLAT }} | |
- name: Cache ccache/sccache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
ccache | |
sccache | |
key: | |
cache-${{ matrix.os }}-${{ matrix.os-name }}-${{ env.PLAT }}-${{ hashFiles('pillow-avif-plugin/wheelbuild/*.sh', 'pillow-avif-plugin/.github/workflows/wheels.yml', 'pillow-avif-plugin/depends/*', 'pillow-avif-plugin/**/*.py', 'pillow-avif-plugin/**/*.c') }}-${{ matrix.python }} | |
restore-keys: | | |
cache-${{ matrix.os }}-${{ matrix.os-name }}-${{ env.PLAT }}-${{ hashFiles('pillow-avif-plugin/wheelbuild/*.sh', 'pillow-avif-plugin/.github/workflows/wheels.yml', 'pillow-avif-plugin/depends/*', 'pillow-avif-plugin/**/*.py', 'pillow-avif-plugin/**/*.c') }}-${{ matrix.python }} | |
cache-${{ matrix.os }}-${{ matrix.os-name }}-${{ env.PLAT }}-${{ hashFiles('pillow-avif-plugin/wheelbuild/*.sh', 'pillow-avif-plugin/.github/workflows/wheels.yml', 'pillow-avif-plugin/depends/*', 'pillow-avif-plugin/**/*.py', 'pillow-avif-plugin/**/*.c') }} | |
cache-${{ matrix.os }}-${{ matrix.os-name }}-${{ env.PLAT }}- | |
- name: Build Wheel | |
run: pillow-avif-plugin/wheelbuild/build.sh | |
- name: Fix Directory Permissions | |
run: | | |
sudo chown -R $(whoami):$(id -ng) ccache ||: | |
sudo chown -R $(whoami):$(id -ng) sccache ||: | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: wheelhouse/*.whl | |
windows: | |
runs-on: windows-2019 | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] | |
architecture: ["x64"] | |
include: | |
- architecture: "x64" | |
platform-vcvars: "x86_amd64" | |
platform-msbuild: "x64" | |
timeout-minutes: 300 | |
name: ${{ matrix.python-version }} windows ${{ matrix.architecture }} | |
steps: | |
- name: Checkout pillow-avif-plugin | |
uses: actions/checkout@v3 | |
- name: Checkout cached dependencies | |
uses: actions/checkout@v3 | |
with: | |
repository: python-pillow/pillow-depends | |
path: winbuild\depends | |
- name: Cache pip | |
uses: actions/cache@v3 | |
with: | |
path: ~\AppData\Local\pip\Cache | |
key: | |
${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.architecture }}-${{ hashFiles('**/.github/workflows/test-windows.yml') }} | |
restore-keys: | | |
${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.architecture }}- | |
${{ runner.os }}-${{ matrix.python-version }}- | |
# sets env: pythonLocation | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: ${{ matrix.architecture }} | |
- name: python -m pip install wheel pytest pytest-cov mock | |
run: python -m pip install wheel pytest pytest-cov mock | |
- name: Install dependencies | |
id: install | |
run: | | |
7z x winbuild\depends\nasm-2.16.01-win64.zip "-o$env:RUNNER_WORKSPACE\" | |
echo "$env:RUNNER_WORKSPACE\nasm-2.16.01" >> $env:GITHUB_PATH | |
python -m pip install meson | |
# make cache key depend on VS version | |
& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" ` | |
| find """catalog_buildVersion""" ` | |
| ForEach-Object { $a = $_.split(" ")[1]; echo "vs=$a" >> $env:GITHUB_OUTPUT } | |
shell: pwsh | |
- name: Cache build | |
id: build-cache | |
uses: actions/cache@v3 | |
with: | |
path: winbuild\build | |
key: | |
${{ hashFiles('winbuild\build_prepare.py') }}-${{ hashFiles('.github\workflows\test-windows.yml') }}-${{ env.pythonLocation }}-${{ steps.install.outputs.vs }} | |
- name: Prepare build | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: | | |
& python.exe winbuild\build_prepare.py -v | |
shell: pwsh | |
- name: Build dependencies / libjpeg-turbo | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libjpeg.cmd" | |
- name: Build dependencies / zlib | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_zlib.cmd" | |
- name: Build dependencies / libpng | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libpng.cmd" | |
- name: Build dependencies / meson (python 2.7) | |
if: steps.build-cache.outputs.cache-hit != 'true' && matrix.python-version == '2.7' | |
run: "& winbuild\\build\\install_meson.cmd" | |
- name: Build dependencies / meson (python 3.x) | |
if: steps.build-cache.outputs.cache-hit != 'true' && matrix.python-version != '2.7' | |
run: python -m pip install meson | |
shell: cmd | |
- name: Build dependencies / rav1e | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_rav1e.cmd" | |
- name: Build dependencies / libavif | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libavif.cmd" | |
# trim ~150MB x 9 | |
- name: Optimize build cache | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: rmdir /S /Q winbuild\build\src | |
shell: cmd | |
- name: Install dependencies / Pillow | |
run: | | |
cmd /c "winbuild\build\build_env.cmd && $env:pythonLocation\python.exe -m pip install -v Pillow" | |
shell: pwsh | |
- name: Build pillow-avif-plugin | |
run: | | |
cmd /c "winbuild\build\build_env.cmd && $env:pythonLocation\python.exe -m pip install -v ." | |
shell: pwsh | |
# failing with PyPy3 | |
- name: Enable heap verification | |
if: "!contains(matrix.python-version, 'pypy')" | |
run: "& 'C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x86\\gflags.exe' /p /enable $env:pythonLocation\\python.exe" | |
- name: Test pillow-avif-plugin | |
run: | | |
path %GITHUB_WORKSPACE%\\winbuild\\build\\bin;%PATH% | |
python.exe -m pytest -v -W always --cov pillow_avif --cov tests --cov-report term --cov-report xml tests | |
shell: cmd | |
- name: Prepare to upload errors | |
if: failure() | |
run: | | |
mkdir -p tests/errors | |
shell: pwsh | |
- name: Upload errors | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: errors | |
path: tests/errors | |
- name: After success | |
run: | | |
coverage xml | |
shell: pwsh | |
- name: Upload coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
file: ./coverage.xml | |
flags: GHA_Windows | |
name: ${{ runner.os }} Python ${{ matrix.python-version }} ${{ matrix.architecture }} | |
- name: Build wheel | |
id: wheel | |
if: "github.event_name == 'push'" | |
run: | | |
cmd /c "winbuild\build\build_env.cmd && $env:pythonLocation\python.exe -m pip wheel -v ." | |
shell: pwsh | |
- uses: actions/upload-artifact@v3 | |
if: "github.event_name == 'push'" | |
with: | |
name: wheels | |
path: "*.whl" | |
success: | |
needs: [build, windows] | |
runs-on: ubuntu-latest | |
name: Build Successful | |
steps: | |
- name: Success | |
run: echo Build Successful | |
release: | |
name: Create Release | |
runs-on: ubuntu-latest | |
if: "startsWith(github.ref, 'refs/tags/')" | |
needs: [build, windows] | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheels | |
- name: Upload Release | |
uses: fnkr/[email protected] | |
env: | |
GHR_PATH: . | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |