diff options
Diffstat (limited to '.github/workflows/build.yml')
-rw-r--r-- | .github/workflows/build.yml | 413 |
1 files changed, 331 insertions, 82 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b4fd84f006..57cd24b37e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,53 +6,85 @@ on: - master - ci - 'release/**' + paths-ignore: + - 'DOCS/**' + - 'TOOLS/lua/**' + - '.editorconfig' + - '.gitignore' + - 'Copyright' + - 'README.md' + - 'RELEASE_NOTES' pull_request: branches: [master] + paths-ignore: + - 'DOCS/**' + - 'TOOLS/lua/**' + - '.editorconfig' + - '.gitignore' + - 'Copyright' + - 'README.md' + - 'RELEASE_NOTES' jobs: mingw: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 + env: + CCACHE_BASEDIR: ${{ github.workspace }} + CCACHE_DIR: ${{ github.workspace }}/.ccache + CCACHE_MAXSIZE: 500M strategy: + fail-fast: false matrix: target: [i686-w64-mingw32, x86_64-w64-mingw32] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - # Increase -N suffix here to force full rebuild after changes - - uses: actions/cache@v2 + - name: Get time + id: get_time + run: echo "timestamp=`date +%s%N`" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 with: - path: mingw_prefix/ - key: "${{ matrix.target }}-1" + 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 autoconf automake pkg-config g++-mingw-w64 gcc-multilib nasm yasm - # Meson from apt is too old - pip3 install --no-input meson ninja - ./bootstrap.py + sudo apt-get install -y autoconf automake pkg-config g++-mingw-w64 gcc-multilib python3-pip ninja-build nasm wine wine32 wine64 ccache + sudo python3 -m pip install meson + + - name: Build libraries + run: | + ./ci/build-mingw64.sh + env: + TARGET: ${{ matrix.target }} - name: Build with meson + id: build run: | - ./ci/build-mingw64.sh meson + ./ci/build-mingw64.sh meson pack env: TARGET: ${{ matrix.target }} - name: Print meson log - if: ${{ failure() }} + if: ${{ failure() && steps.build.outcome == 'failure' }} run: | - cat ./${{ matrix.target }}_mingw_build/meson-logs/meson-log.txt + cat ./build/meson-logs/meson-log.txt - - name: Build with waf + - name: Functional test + id: tests run: | - ./ci/build-mingw64.sh waf + cd artifact && wine64 ./mpv.com -v --no-config env: - TARGET: ${{ matrix.target }} + WINEDEBUG: '+loaddll' - - name: Print waf log - if: ${{ failure() }} - run: | - cat ./build/config.log + - uses: actions/upload-artifact@v4 + with: + name: mpv-${{ matrix.target }} + path: mpv-git-*.zip macos: runs-on: ${{ matrix.os }} @@ -60,134 +92,351 @@ jobs: matrix: cc: - "clang" + cxx: + - "clang++" os: - - "macos-10.15" - - "macos-11" + - "macos-12" + - "macos-13" + - "macos-14" + include: + - os: "macos-12" + arch: "intel" + - os: "macos-13" + arch: "intel" + - os: "macos-14" + arch: "arm" + xcode: "Xcode_15.2" steps: - - uses: actions/checkout@v2 + - 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: Override Xcode 13.0 if it's the default toolchain + - name: Change Xcode version + if: ${{ matrix.xcode != '' }} run: | - XCODE_PATH="$(xcode-select -p)" - case "${XCODE_PATH}" in - *Xcode_13.0*) - sudo xcode-select -s "/Applications/Xcode_13.1.app" - echo "Updated Xcode path ${XCODE_PATH} -> $(xcode-select -p)" - ;; - esac + sudo xcode-select -s /Applications/${{ matrix.xcode }}.app - name: Install dependencies run: | brew update - brew install autoconf automake pkg-config libtool python freetype fribidi little-cms2 luajit libass ffmpeg meson + brew install 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 meson + ./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() }} + if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./build/meson-logs/meson-log.txt - - name: Build with waf + - name: Run meson tests + id: tests run: | - ./ci/build-macos.sh waf - env: - CC: "${{ matrix.cc }}" - TRAVIS_OS_NAME: "${{ matrix.os }}" + meson test -C build - - name: Print waf log - if: ${{ failure() }} + - name: Print meson test log + if: ${{ failure() && steps.tests.outcome == 'failure' }} run: | - cat ./build/config.log + 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-20.04" + runs-on: "ubuntu-22.04" container: - image: "registry.cirno.systems/kiwi/containers/mpv-ci:stable-deps" - # Disable seccomp until a container manager in GitHub recognizes - # clone3() syscall, - # <https://github.com/actions/virtual-environments/issues/3812>. - options: --security-opt seccomp=unconfined + image: "registry.opensuse.org/home/mia/images/images/mpv-ci:stable-deps" env: - CC: "${{ matrix.cc }}" + CC: "${{ matrix.config.cc }}" + CXX: "${{ matrix.config.cxx }}" strategy: matrix: - cc: - - "gcc" - - "clang" + config: + - { + cc: "gcc", + cxx: "g++", + } + - { + cc: "clang", + cxx: "clang++", + } steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install dependencies run: | - ./bootstrap.py - zypper -n install meson + # 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 meson + ./ci/build-tumbleweed.sh - name: Print meson log - if: ${{ failure() }} + if: ${{ failure() && steps.build.outcome == 'failure' }} run: | cat ./build/meson-logs/meson-log.txt - - name: Build with waf + - name: Run meson tests + id: tests run: | - ./ci/build-tumbleweed.sh waf + meson test -C build - - name: Print waf log - if: ${{ failure() }} + - name: Print meson test log + if: ${{ failure() && steps.tests.outcome == 'failure' }} run: | - cat ./build/config.log + cat ./build/meson-logs/testlog.txt - freebsd: - runs-on: macos-10.15 # until https://github.com/actions/runner/issues/385 + 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@v2 - - name: Test in FreeBSD VM - uses: vmactions/freebsd-vm@v0.1.5 # aka FreeBSD 13.0 + - 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 + + - name: Print meson log + if: ${{ failure() && steps.build.outcome == 'failure' }} + run: | + cat ./build/meson-logs/meson-log.txt + + linux-ffmpeg-4-4: + runs-on: ubuntu-22.04 + container: + # We want to test ffmpeg 4.4 which alpine 3.15 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.15 + 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 \ + musl-dev \ + py3-pip \ + samurai + pip install meson + + - 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.23.0 with: - usesh: true - prepare: | - # Requested in ci/build-freebsd.sh - pkg install -y \ + operating_system: openbsd + version: '7.4' + run: | + sudo pkg_add -U \ cmake \ - evdev-proto \ ffmpeg \ - libplacebo \ + git \ + libarchive \ + libbluray \ + libcaca \ + libcdio-paranoia \ + libdvdnav \ + libiconv \ + libv4l \ libxkbcommon \ luajit \ meson \ - openal-soft \ + openal \ pkgconf \ + pulseaudio \ python3 \ + rubberband \ sdl2 \ - sndio \ + shaderc \ + spirv-cross \ + spirv-headers \ + uchardet \ + vulkan-loader \ vulkan-headers \ - wayland-protocols \ - # - # Optionally auto-enabled - pkg install -y \ + 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/action@v0.23.0 + with: + operating_system: freebsd + version: '14.0' + run: | + sudo pkg update + sudo pkg install -y \ alsa-lib \ + cmake \ + evdev-proto \ + ffmpeg \ + git \ + iconv \ jackit \ - libXv \ 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 + - 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 + diffutils: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 + + - 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: | - ./ci/build-freebsd.sh + cat ./build/meson-logs/testlog.txt |