Playground #491
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 | |
on: | |
push: | |
branches: | |
- master | |
- ci | |
- 'release/**' | |
paths-ignore: | |
- 'DOCS/**' | |
- 'TOOLS/lua/**' | |
- '.editorconfig' | |
- '.github/ISSUE_TEMPLATE/**' | |
- '.github/PULL_REQUEST_TEMPLATE' | |
- '.gitignore' | |
- 'Copyright' | |
- 'README.md' | |
- 'RELEASE_NOTES' | |
pull_request: | |
branches: [master] | |
paths-ignore: | |
- 'DOCS/**' | |
- 'TOOLS/lua/**' | |
- '.editorconfig' | |
- '.github/ISSUE_TEMPLATE/**' | |
- '.github/PULL_REQUEST_TEMPLATE' | |
- '.gitignore' | |
- 'Copyright' | |
- 'README.md' | |
- 'RELEASE_NOTES' | |
jobs: | |
mingw: | |
runs-on: ubuntu-24.04 | |
env: | |
CCACHE_BASEDIR: ${{ github.workspace }} | |
CCACHE_DIR: ${{ github.workspace }}/.ccache | |
CCACHE_MAXSIZE: 500M | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- target: i686-w64-mingw32 | |
wine: wine32 | |
- target: x86_64-w64-mingw32 | |
wine: wine64 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get time | |
id: get_time | |
run: echo "timestamp=`date +%s%N`" >> $GITHUB_OUTPUT | |
- name: Restore cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: ${{ env.CCACHE_DIR }} | |
key: ${{ matrix.target }}-${{ steps.get_time.outputs.timestamp }} | |
restore-keys: ${{ matrix.target }}- | |
- name: Install dependencies | |
run: | | |
sudo dpkg --add-architecture i386 | |
sudo apt-get update | |
sudo apt-get install -y ccache g++-mingw-w64 gcc-multilib meson nasm ninja-build pkg-config ${{ matrix.wine }} | |
- name: Install Meson Wraps | |
run: | | |
mkdir subprojects -p | |
meson wrap install mujs | |
- name: Build libraries | |
run: | | |
./ci/build-mingw64.sh | |
env: | |
TARGET: ${{ matrix.target }} | |
- name: Build with meson | |
id: build | |
run: | | |
./ci/build-mingw64.sh meson pack | |
env: | |
TARGET: ${{ matrix.target }} | |
- name: Print meson log | |
if: ${{ failure() && steps.build.outcome == 'failure' }} | |
run: | | |
cat ./mingw_build/meson-logs/meson-log.txt | |
- name: Functional test | |
run: | | |
cd artifact && wine ./mpv.com -v --no-config | |
env: | |
WINEDEBUG: '+loaddll' | |
- name: Run meson tests | |
id: tests | |
run: | | |
meson test -C mingw_build | |
- name: Print meson test log | |
if: ${{ failure() && steps.tests.outcome == 'failure' }} | |
run: | | |
cat ./mingw_build/meson-logs/testlog.txt | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: mpv-${{ matrix.target }} | |
path: mpv-git-*.zip | |
- name: Save Cache | |
uses: actions/cache/save@v4 | |
if: always() | |
with: | |
path: ${{ env.CCACHE_DIR }} | |
key: ${{ matrix.target }}-${{ steps.get_time.outputs.timestamp }} | |
win32: | |
runs-on: windows-latest | |
env: | |
VS: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise" | |
CC: "ccache clang" | |
CXX: "ccache clang++" | |
CC_LD: "lld" | |
CXX_LD: "lld" | |
WINDRES: "llvm-rc" | |
CCACHE_BASEDIR: ${{ github.workspace }} | |
CCACHE_DIR: "${{ github.workspace }}\\.ccache" | |
CCACHE_MAXSIZE: 500M | |
steps: | |
- name: Disable autocrlf | |
run: | | |
git config --global core.autocrlf false | |
git config --global core.eol lf | |
- uses: actions/checkout@v4 | |
- name: Get time | |
id: get_time | |
run: | | |
"timestamp=$((Get-Date).Ticks)" >> $env:GITHUB_OUTPUT | |
- name: Restore cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: ${{ env.CCACHE_DIR }} | |
key: x86_64-windows-msvc-${{ steps.get_time.outputs.timestamp }} | |
restore-keys: x86_64-windows-msvc- | |
# https://github.com/mesonbuild/meson/pull/11715 | |
- name: Install dependencies | |
run: | | |
git clone https://github.com/kasper93/meson --depth 1 -b 8981 | |
python -m pip install build wheel | |
python -m build --wheel --no-isolation meson | |
python -m pip install (Get-Item ./meson/dist/meson-*-py3-none-any.whl).FullName | |
choco install ccache nasm | |
- name: Update Meson WrapDB | |
run: | | |
meson wrap update-db | |
# Explicitly download wraps, as nested projects may have older versions of them. | |
meson wrap install expat | |
meson wrap install harfbuzz | |
meson wrap install libpng | |
meson wrap install zlib | |
- name: Build | |
id: build | |
run: | | |
$env:PATH = ($env:PATH -split ';' | Where-Object { $_ -ne 'C:\Program Files\LLVM\bin' -and ` | |
$_ -ne 'C:\Strawberry\c\bin' }) -join ';' | |
$env:PATH += ';C:\Program Files\NASM' | |
Import-Module "$env:VS\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
Enter-VsDevShell -VsInstallPath $env:VS -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64" | |
./ci/build-win32.ps1 | |
- name: Print build log | |
if: ${{ failure() && steps.build.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/meson-log.txt | |
- name: Run meson tests | |
id: tests | |
run: | | |
$env:PATH = ($env:PATH -split ';' | Where-Object { $_ -ne 'C:\Program Files\LLVM\bin' -and ` | |
$_ -ne 'C:\Strawberry\c\bin' }) -join ';' | |
Import-Module "$env:VS\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
Enter-VsDevShell -VsInstallPath $env:VS -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64" | |
meson test -C build mpv: | |
- name: Print meson test log | |
if: ${{ failure() && steps.tests.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/testlog.txt | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: mpv-x86_64-windows-msvc | |
path: | | |
build/mpv.??? | |
build/vulkan-*.dll | |
!build/mpv.lib | |
- name: Save Cache | |
uses: actions/cache/save@v4 | |
if: always() | |
with: | |
path: ${{ env.CCACHE_DIR }} | |
key: x86_64-windows-msvc-${{ steps.get_time.outputs.timestamp }} | |
macos: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
cc: | |
- "clang" | |
cxx: | |
- "clang++" | |
os: | |
- "macos-13" | |
- "macos-14" | |
- "macos-15" | |
include: | |
- os: "macos-13" | |
arch: "intel" | |
- os: "macos-14" | |
arch: "arm" | |
xcode: "Xcode_15.2" | |
- os: "macos-15" | |
arch: "arm" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Remove stray upstream python binary symlinks under /usr/local | |
run: | | |
find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete -print | |
brew unlink python && brew link --overwrite python | |
- name: Change Xcode version | |
if: ${{ matrix.xcode != '' }} | |
run: | | |
sudo xcode-select -s /Applications/${{ matrix.xcode }}.app | |
- name: Install dependencies | |
run: | | |
brew update | |
brew install -q autoconf automake pkg-config libtool python freetype fribidi little-cms2 \ | |
luajit libass ffmpeg meson uchardet mujs libplacebo molten-vk vulkan-loader vulkan-headers | |
- name: Build with meson | |
id: build | |
run: | | |
./ci/build-macos.sh | |
env: | |
CC: "${{ matrix.cc }}" | |
CXX: "${{ matrix.cxx }}" | |
TRAVIS_OS_NAME: "${{ matrix.os }}" | |
- name: Create App Bundle | |
run: | | |
meson compile -C build macos-bundle | |
tar -czvf mpv.tar.gz -C build mpv.app | |
- name: Print meson log | |
if: ${{ failure() && steps.build.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/meson-log.txt | |
- name: Run meson tests | |
id: tests | |
run: | | |
meson test -C build | |
- name: Print meson test log | |
if: ${{ failure() && steps.tests.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/testlog.txt | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: mpv-${{ matrix.os }}-${{ matrix.arch }} | |
path: mpv.tar.gz | |
linux: | |
runs-on: ubuntu-latest | |
container: | |
image: "registry.opensuse.org/home/mia/images/images/mpv-ci:stable-deps" | |
env: | |
CC: "${{ matrix.config.cc }}" | |
CXX: "${{ matrix.config.cxx }}" | |
ASAN_OPTIONS: "halt_on_error=1:abort_on_error=1:print_summary=1:detect_leaks=0" | |
strategy: | |
matrix: | |
config: | |
- { | |
cc: "gcc", | |
cxx: "g++", | |
} | |
- { | |
cc: "clang", | |
cxx: "clang++", | |
} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: | | |
# workaround to avoid "fatal: unsafe repository" error | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
- name: Build with meson | |
id: build | |
run: | | |
./ci/build-tumbleweed.sh | |
- name: Print meson log | |
if: ${{ failure() && steps.build.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/meson-log.txt | |
- name: Run meson tests | |
id: tests | |
run: | | |
meson test -C build | |
- name: Print meson test log | |
if: ${{ failure() && steps.tests.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/testlog.txt | |
linux-fuzz: | |
runs-on: ubuntu-latest | |
container: | |
image: "registry.opensuse.org/home/mia/images/images/mpv-ci:stable-deps" | |
env: | |
CC: "clang" | |
CXX: "clang++" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build with meson | |
id: build | |
run: | | |
meson setup build \ | |
--werror \ | |
-Dc_args="-Wno-error=deprecated -Wno-error=deprecated-declarations" \ | |
-Dfuzzers=true -Dlibmpv=true -Dcplayer=false | |
meson compile -C build fuzzers | |
- name: Print meson log | |
if: ${{ failure() && steps.build.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/meson-log.txt | |
linux-ffmpeg-6-1: | |
runs-on: ubuntu-latest | |
container: | |
# We want to test ffmpeg 6.1.1 which alpine 3.19 has exactly. | |
# Furthermore, this is a very minimal build of mpv without commonly | |
# used features to test build compatibility. Musl is a nice bonus as well | |
image: alpine:3.19 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: | | |
apk update | |
apk add \ | |
binutils \ | |
ffmpeg-dev \ | |
gcc \ | |
git \ | |
g++ \ | |
libass-dev \ | |
lua5.2-dev \ | |
pulseaudio-dev \ | |
libx11-dev \ | |
libxfixes-dev \ | |
libxkbcommon-dev \ | |
libxrandr-dev \ | |
libxpresent-dev \ | |
libxscrnsaver-dev \ | |
meson \ | |
musl-dev \ | |
samurai | |
- name: Build with meson | |
id: build | |
run: | | |
./ci/build-linux-old.sh | |
- name: Print meson log | |
if: ${{ failure() && steps.build.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/meson-log.txt | |
- name: Run meson tests | |
id: tests | |
run: | | |
meson test -C build | |
- name: Print meson test log | |
if: ${{ failure() && steps.tests.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/testlog.txt | |
openbsd: | |
runs-on: ubuntu-latest # until https://github.com/actions/runner/issues/385 | |
timeout-minutes: 30 # avoid any weirdness with the VM | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Test in OpenBSD VM | |
uses: cross-platform-actions/[email protected] | |
with: | |
operating_system: openbsd | |
version: '7.5' | |
run: | | |
sudo pkg_add -U \ | |
cmake \ | |
ffmpeg \ | |
git \ | |
libarchive \ | |
libbluray \ | |
libcaca \ | |
libcdio-paranoia \ | |
libdvdnav \ | |
libiconv \ | |
libplacebo \ | |
libv4l \ | |
libxkbcommon \ | |
luajit \ | |
meson \ | |
openal \ | |
pkgconf \ | |
pulseaudio \ | |
python3 \ | |
rubberband \ | |
sdl2 \ | |
shaderc \ | |
spirv-cross \ | |
spirv-headers \ | |
uchardet \ | |
vulkan-loader \ | |
vulkan-headers \ | |
zimg | |
./ci/build-openbsd.sh | |
meson test -C build | |
freebsd: | |
runs-on: ubuntu-latest # until https://github.com/actions/runner/issues/385 | |
timeout-minutes: 30 # avoid any weirdness with the VM | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Test in FreeBSD VM | |
uses: cross-platform-actions/[email protected] | |
with: | |
operating_system: freebsd | |
version: '14.1' | |
run: | | |
sudo pkg update | |
sudo pkg install -y \ | |
alsa-lib \ | |
cmake \ | |
evdev-proto \ | |
ffmpeg \ | |
git \ | |
iconv \ | |
jackit \ | |
libarchive \ | |
libbluray \ | |
libcaca \ | |
libcdio-paranoia \ | |
libdvdnav \ | |
libplacebo \ | |
libXinerama \ | |
libxkbcommon \ | |
libxpresent \ | |
libXv \ | |
luajit \ | |
meson \ | |
mujs \ | |
openal-soft \ | |
pipewire \ | |
pkgconf \ | |
pulseaudio \ | |
python3 \ | |
rubberband \ | |
sekrit-twc-zimg \ | |
sdl2 \ | |
sndio \ | |
uchardet \ | |
v4l_compat \ | |
vulkan-headers \ | |
wayland-protocols | |
./ci/build-freebsd.sh | |
meson test -C build | |
msys2: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
sys: | |
- clang64 | |
- mingw32 | |
- mingw64 | |
- ucrt64 | |
defaults: | |
run: | |
shell: msys2 {0} | |
steps: | |
- name: Disable autocrlf | |
shell: pwsh | |
run: | | |
git config --global core.autocrlf false | |
git config --global core.eol lf | |
- uses: actions/checkout@v4 | |
- uses: msys2/setup-msys2@v2 | |
with: | |
msystem: ${{ matrix.sys }} | |
update: true | |
install: git | |
pacboy: >- | |
ca-certificates:p | |
cc:p | |
ffmpeg:p | |
lcms2:p | |
libarchive:p | |
libass:p | |
libcdio-paranoia:p | |
libdvdnav:p | |
libjpeg-turbo:p | |
libplacebo:p | |
lua51:p | |
meson:p | |
ninja:p | |
pkgconf:p | |
python:p | |
shaderc:p | |
spirv-cross:p | |
uchardet:p | |
vapoursynth:p | |
vulkan-devel:p | |
- name: Install dependencies | |
if: ${{ matrix.sys != 'mingw32' }} | |
run: | | |
pacboy --noconfirm -S {angleproject,cppwinrt,rst2pdf,rubberband}:p | |
- name: Build with meson | |
id: build | |
run: | | |
./ci/build-msys2.sh meson | |
env: | |
SYS: ${{ matrix.sys }} | |
- name: Print meson log | |
if: ${{ failure() && steps.build.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/meson-log.txt | |
- name: Run meson tests | |
id: tests | |
run: | | |
meson test -C build | |
- name: Print meson test log | |
if: ${{ failure() && steps.tests.outcome == 'failure' }} | |
run: | | |
cat ./build/meson-logs/testlog.txt |