another attempt #521
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" ] | |
os-type: [ "macos" ] | |
python: [ "3.11" ] | |
# python: [ "2.7", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12" ] | |
# arch: [ "x86", "arm" ] | |
arch: [ "arm" ] | |
manylinux-version: [ "2014" ] | |
# mb-ml-libc: [ "manylinux", "musllinux" ] | |
mb-ml-libc: [ "manylinux" ] | |
# 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 ||: | |
- name: run dsymutil | |
run: | | |
dsymutil wheelhouse/avifenc | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: wheelhouse/* | |
# - uses: actions/upload-artifact@v3 | |
# with: | |
# name: path | |
# path: /Users/runner/work/pillow-avif-plugin/pillow-avif-plugin | |
windows: | |
runs-on: windows-2019 | |
if: false | |
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/github-action-ghr@v1.3 | |
env: | |
GHR_PATH: . | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |