Add ci-windows-artifacts (#1923) #365
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
# This is a copy of ci-unix-static.yml for Windows. It differs from ci-unix-static.yml as follows: | |
# | |
# * The os matrix consists of windows-latest only. | |
# * Installs Visual Studio in the os image. | |
# * Doesn't install cmake 3.17.x, because only cmake 3.18 or later, with the | |
# following bug fix, detects Visual Studio compilers correctly: | |
# https://gitlab.kitware.com/cmake/cmake/-/issues/20585 | |
# * Runs ext/*.cmd as Windows batch files rather than using bash. This is | |
# important for ext/svt.cmd, to prevent it from running ext/svt.sh. | |
# * Builds with local libjpeg (-DAVIF_LOCAL_JPEG=ON). | |
# * Builds with local zlib and libpng (-DAVIF_LOCAL_ZLIBPNG=ON). | |
name: CI Windows | |
on: [push, pull_request] | |
permissions: | |
contents: read | |
# Cancel the workflow if a new one is triggered from the same PR, branch, or tag, except on main. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
jobs: | |
build-static: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest] | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Setup Visual Studio shell | |
if: runner.os == 'Windows' | |
uses: egor-tensin/vs-shell@9a932a62d05192eae18ca370155cf877eecc2202 # v2.1 | |
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 | |
with: | |
python-version: '3.x' | |
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7 | |
with: | |
profile: minimal | |
toolchain: stable | |
override: true | |
- name: Cache external dependencies | |
id: cache-ext | |
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 | |
with: | |
path: ext | |
key: ${{ runner.os }}-${{ hashFiles('ext/*.cmd') }} | |
- name: Print cmake version | |
run: cmake --version | |
- uses: ilammy/setup-nasm@13cbeb366c45c4379d3478cdcbadd8295feb5028 # v1.5.1 | |
with: | |
version: 2.15.05 | |
- uses: seanmiddleditch/gha-setup-ninja@8b297075da4cd2a5f1fd21fe011b499edf06e9d2 # v4 | |
- run: pip install meson | |
- name: Print ImageMagick version | |
run: magick --version | |
- name: Build aom | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./aom.cmd | |
- name: Build dav1d | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./dav1d.cmd | |
- name: Build rav1e | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./rav1e.cmd | |
- name: Build SVT-AV1 | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./svt.cmd | |
- name: Build libgav1 | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./libgav1.cmd | |
- name: Build libyuv | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./libyuv.cmd | |
- name: Build libjpeg | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./libjpeg.cmd | |
- name: Build libsharpyuv | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./libsharpyuv.cmd | |
- name: Build zlib and libpng | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./zlibpng.cmd | |
- name: Build GoogleTest | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./googletest.cmd | |
- name: Prepare libavif (cmake) | |
run: > | |
mkdir build && cd build | |
cmake .. -G Ninja | |
-DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF | |
-DAVIF_CODEC_AOM=LOCAL -DAVIF_CODEC_DAV1D=LOCAL | |
-DAVIF_CODEC_RAV1E=LOCAL -DAVIF_CODEC_SVT=LOCAL | |
-DAVIF_CODEC_LIBGAV1=LOCAL -DAVIF_LIBYUV=LOCAL | |
-DAVIF_LOCAL_JPEG=ON -DAVIF_LIBSHARPYUV=LOCAL | |
-DAVIF_LOCAL_ZLIBPNG=ON | |
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON | |
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_LOCAL_GTEST=ON | |
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON | |
-DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON | |
-DAVIF_ENABLE_EXPERIMENTAL_AVIR=ON | |
- name: Build libavif (ninja) | |
working-directory: ./build | |
run: ninja | |
- name: Run AVIF Tests | |
working-directory: ./build | |
run: ctest -j $Env:NUMBER_OF_PROCESSORS --output-on-failure | |
- name: Check static link bundling | |
run: > | |
cl .\apps\avifenc.c .\apps\shared\*.c .\third_party\iccjpeg\iccjpeg.c /nologo | |
/DWIN32 /D_WINDOWS /MD /O2 /Ob2 | |
-I.\apps\shared -I.\include -I.\third_party\iccjpeg | |
-external:W0 | |
-external:I.\ext\libpng | |
-external:I.\ext\libjpeg | |
-external:I.\ext\zlib | |
-external:I.\build\ext\libpng | |
-external:I.\build\ext\zlib | |
/link | |
build\ext\libjpeg\jpeg.lib | |
build\ext\libpng\libpng16_static.lib | |
build\ext\zlib\zlibstatic.lib | |
build\avif.lib | |
ws2_32.lib ntdll.lib userenv.lib bcrypt.lib advapi32.lib | |
/out:avifenc.exe | |
.\avifenc.exe --help |