diff options
Diffstat (limited to '')
-rw-r--r-- | .github/workflows/build.yml | 292 | ||||
-rw-r--r-- | .github/workflows/comment.yml | 58 | ||||
-rw-r--r-- | .github/workflows/docs.yml | 24 | ||||
-rw-r--r-- | .github/workflows/lint.yml | 22 |
4 files changed, 396 insertions, 0 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..ddbfd90 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,292 @@ +name: build + +on: + push: + branches: + - master + - ci + - 'release/**' + paths-ignore: + - 'DOCS/**' + - 'TOOLS/lua/**' + pull_request: + branches: [master] + paths-ignore: + - 'DOCS/**' + - 'TOOLS/lua/**' + +jobs: + mingw: + 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@v3 + + - name: Get time + id: get_time + run: echo "timestamp=`date +%s%N`" >> $GITHUB_OUTPUT + + - uses: actions/cache@v3 + 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 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 pack + env: + TARGET: ${{ matrix.target }} + + - name: Print meson log + if: ${{ failure() && steps.build.outcome == 'failure' }} + run: | + cat ./build/meson-logs/meson-log.txt + + - name: Functional test + id: tests + run: | + cd artifact && wine64 ./mpv.com -v --no-config + env: + WINEDEBUG: '+loaddll' + + - uses: actions/upload-artifact@v3 + with: + name: mpv-${{ matrix.target }} + path: mpv-git-*.zip + + macos: + runs-on: ${{ matrix.os }} + strategy: + matrix: + cc: + - "clang" + cxx: + - "clang++" + os: + - "macos-12" + - "macos-13" + steps: + - uses: actions/checkout@v3 + + - 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: Install dependencies + run: | + brew update + brew install autoconf automake pkg-config libtool python freetype fribidi little-cms2 lua@5.1 libass ffmpeg meson libplacebo + + - name: Build with meson + id: build + run: | + ./ci/build-macos.sh + env: + CC: "${{ matrix.cc }}" + CXX: "${{ matrix.cxx }}" + TRAVIS_OS_NAME: "${{ matrix.os }}" + + - 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: + runs-on: "ubuntu-22.04" + 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@v3 + + - 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 + + 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@v3 + - name: Test in FreeBSD VM + uses: cross-platform-actions/action@v0.19.1 + with: + operating_system: freebsd + version: '13.2' + 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: + - clang32 + - 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@v3 + - 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: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: | + cat ./build/meson-logs/testlog.txt diff --git a/.github/workflows/comment.yml b/.github/workflows/comment.yml new file mode 100644 index 0000000..7f9603a --- /dev/null +++ b/.github/workflows/comment.yml @@ -0,0 +1,58 @@ +name: comment + +on: + workflow_run: + workflows: ["build"] + types: [completed] + +jobs: + pr_comment: + if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v6 + with: + script: | + const { owner, repo } = context.repo; + const run_id = ${{ github.event.workflow_run.id }}; + const pull_head_sha = '${{github.event.workflow_run.head_sha}}'; + + const issue_number = await(async () => { + const pulls = await github.rest.pulls.list({ owner, repo }); + for await (const { data } of github.paginate.iterator(pulls)) { + for (const pull of data) { + if (pull.head.sha === pull_head_sha) { + return pull.number; + } + } + } + })(); + if (issue_number) { + core.info(`Using pull request ${issue_number}`); + } else { + return core.error(`No matching pull request found`); + } + + const { data: { artifacts } } = await github.rest.actions.listWorkflowRunArtifacts({ owner, repo, run_id }); + if (!artifacts.length) { + return core.error(`No artifacts found`); + } + + let body = `Download the artifacts for this pull request:\n\n<details><summary>Windows</summary>\n`; + for (const art of artifacts) { + const art_link = `https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip`; + if (art.name.includes('w64')) { + body += `\n* [${art.name}](${art_link})`; + } + } + body += `\n</details>`; + + const { data: comments } = await github.rest.issues.listComments({ repo, owner, issue_number }); + const existing_comment = comments.find((c) => c.user.login === 'github-actions[bot]'); + if (existing_comment) { + core.info(`Updating comment ${existing_comment.id}`); + await github.rest.issues.updateComment({ repo, owner, comment_id: existing_comment.id, body }); + } else { + core.info(`Creating a comment`); + await github.rest.issues.createComment({ repo, owner, issue_number, body }); + } diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..d1fcb5c --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,24 @@ +name: docs + +on: + push: + branches: + - master + - ci + - 'release/**' + paths: + - 'DOCS/**' + pull_request: + branches: [master] + paths: + - 'DOCS/**' + +jobs: + check-docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Docs + run: | + sudo apt-get install python3-docutils + rst2man --strip-elements-with-class=contents --halt=2 ./DOCS/man/mpv.rst mpv.1 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..939255e --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,22 @@ +name: lint + +on: + push: + branches: + - master + - ci + - 'release/**' + pull_request: + branches: [master] + +jobs: + commit-msg: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 50 + + - name: Lint + run: | + ./ci/lint-commit-msg.py |