Something went wrong. Try again.
🎥 Command line media player
Something went wrong. Try again.
YAML
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572name: 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 pkgconf ${{ 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-
- name: Install dependencies run: | python -m pip install meson 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 ';' $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" meson test -C build -t 2
- 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: Unlink pkg-config if the CI runner happens to have it already installed run: | find "$(brew config | grep HOMEBREW_PREFIX | cut -f 2- -d ' ')/bin" -lname '*/pkg-config@0*/*' -print -exec brew unlink pkg-config@0.29.2 \; -quit
- 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 pkgconf 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 }}" strategy: matrix: config: - { cc: "gcc", cxx: "g++", } - { cc: "clang", cxx: "clang++", } steps: - uses: actions/checkout@v4
- 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: | export LSAN_OPTIONS="suppressions=${GITHUB_WORKSPACE}/.lsan_suppressions" 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/action@v0.25.0 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 if ! meson test -C build; then cat ./build/meson-logs/testlog.txt exit 1 fi
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/action@v0.25.0 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 \ libdisplay-info \ 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 if ! meson test -C build; then cat ./build/meson-logs/testlog.txt exit 1 fi
msys2: runs-on: windows-latest strategy: fail-fast: false matrix: sys: - clang64 - 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: >- angleproject:p ca-certificates:p cc:p cppwinrt: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 rst2pdf:p rubberband:p shaderc:p spirv-cross:p uchardet:p vapoursynth:p vulkan-devel: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