name: Check new version on: workflow_dispatch: schedule: - cron: '0 0 * * 1' jobs: check: permissions: contents: write pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Checkout ffmpeg uses: actions/checkout@v4 with: repository: "FFmpeg/FFmpeg" path: 'ffmpeg' fetch-depth: 0 - name: Checkout mpv uses: actions/checkout@v4 with: repository: "mpv-player/mpv" path: 'mpv' fetch-depth: 0 - name: Get latest verion id: version run: | cd ./ffmpeg latest_tag=$(git tag | grep n | grep -v "-" | sort -r | head -n 1) echo "ffmpeg latest tag: $latest_tag" echo "FFMPEG_LATEST_VERSION=$latest_tag" >> $GITHUB_ENV cd .. cd ./mpv latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`) echo "mpv latest tag: $latest_tag" echo "MPV_LATEST_VERSION=$latest_tag" >> $GITHUB_ENV cd .. rm -rf ./ffmpeg rm -rf ./mpv - name: update to new version uses: jannekem/run-python-script-action@v1 with: script: | import re def parse_version(ver): if '-' in ver or ver == '': return 0 version_string = re.sub(r'[^.0-9]+', r'', ver) parts = re.split(r'\.', version_string) major = int(parts[0]) minor = int(parts[1]) if len(parts) > 1 else 0 patch = int(parts[2]) if len(parts) > 2 else 0 return int(f"{major}{minor}{patch}") file_path = './Sources/BuildScripts/XCFrameworkBuild/main.swift' with open(file_path, 'r', encoding='utf-8') as file: content = file.read() mpvOldVersion = re.search(r'(case .libmpv[^"]+?)"(.+?)"', content).group(2) print("mpv old version:", mpvOldVersion) set_env('MPV_OLD_VERSION', mpvOldVersion) mpvNewVersion = '${{ env.MPV_LATEST_VERSION }}' if parse_version(mpvNewVersion) > parse_version(mpvOldVersion) and not mpvOldVersion.startswith(mpvNewVersion): content = re.sub(r'(case .libmpv[^"]+?)"(.+?)"', r'\1"${{ env.MPV_LATEST_VERSION }}"', content, count=1) set_env('FOUND_NEW_MPV_VERSION', '1') ffmpegOldVersion = re.search(r'(case .FFmpeg[^"]+?)"(.+?)"', content).group(2) print("ffmpeg old version:", ffmpegOldVersion) set_env('FFMPEG_OLD_VERSION', ffmpegOldVersion) ffmpegNewVersion = '${{ env.FFMPEG_LATEST_VERSION }}' if parse_version(ffmpegNewVersion) > parse_version(ffmpegOldVersion) and not ffmpegOldVersion.startswith(ffmpegNewVersion): content = re.sub(r'(case .FFmpeg[^"]+?)"(.+?)"', r'\1"${{ env.FFMPEG_LATEST_VERSION }}"', content, count=1) set_env('FOUND_NEW_FFMPEG_VERSION', '1') with open(file_path, 'w', encoding='utf-8') as file: file.write(content) file_path = './README.md' with open(file_path, 'r', encoding='utf-8') as file: content = file.read() if parse_version(mpvNewVersion) > parse_version(mpvOldVersion): content = re.sub(r'mpv-.*-blue', r'mpv-${{ env.MPV_LATEST_VERSION }}-blue', content, count=1) if parse_version(ffmpegNewVersion) > parse_version(ffmpegOldVersion): content = re.sub(r'ffmpeg-.*-blue', r'ffmpeg-${{ env.FFMPEG_LATEST_VERSION }}-blue', content, count=1) with open(file_path, 'w', encoding='utf-8') as file: file.write(content) - name: Create Pull Request if: env.FOUND_NEW_MPV_VERSION && !env.FOUND_NEW_FFMPEG_VERSION uses: peter-evans/create-pull-request@v6 with: add-paths: | ./Sources/BuildScripts/XCFrameworkBuild/main.swift ./README.md title: "mpv bump version to ${{ env.MPV_LATEST_VERSION }}" body: | https://github.com/mpv-player/mpv/releases/tag/${{ env.MPV_LATEST_VERSION }} https://github.com/mpv-player/mpv/compare/${{ env.MPV_OLD_VERSION }}...${{ env.MPV_LATEST_VERSION }} commit-message: "chore: mpv bump version to ${{ env.MPV_LATEST_VERSION }}" - name: Create Pull Request if: env.FOUND_NEW_FFMPEG_VERSION && !env.FOUND_NEW_MPV_VERSION uses: peter-evans/create-pull-request@v6 with: add-paths: | ./Sources/BuildScripts/XCFrameworkBuild/main.swift ./README.md title: "FFmpeg bump version to ${{ env.FFMPEG_LATEST_VERSION }}" body: | https://github.com/FFmpeg/FFmpeg/blob/${{ env.FFMPEG_LATEST_VERSION }}/Changelog https://github.com/FFmpeg/FFmpeg/compare/${{ env.FFMPEG_OLD_VERSION }}...${{ env.FFMPEG_LATEST_VERSION }} commit-message: "chore: FFmpeg bump version to ${{ env.FFMPEG_LATEST_VERSION }}" - name: Create Pull Request if: env.FOUND_NEW_FFMPEG_VERSION && env.FOUND_NEW_MPV_VERSION uses: peter-evans/create-pull-request@v6 with: add-paths: | ./Sources/BuildScripts/XCFrameworkBuild/main.swift ./README.md title: "mpv ${{ env.MPV_LATEST_VERSION }} && FFmpeg ${{ env.FFMPEG_LATEST_VERSION }}" body: | https://github.com/mpv-player/mpv/releases/tag/${{ env.MPV_LATEST_VERSION }} https://github.com/mpv-player/mpv/compare/${{ env.MPV_OLD_VERSION }}...${{ env.MPV_LATEST_VERSION }} https://github.com/FFmpeg/FFmpeg/blob/${{ env.FFMPEG_LATEST_VERSION }}/Changelog https://github.com/FFmpeg/FFmpeg/compare/${{ env.FFMPEG_OLD_VERSION }}...${{ env.FFMPEG_LATEST_VERSION }} commit-message: "chore: mpv ${{ env.MPV_LATEST_VERSION }} && FFmpeg ${{ env.FFMPEG_LATEST_VERSION }}" check-deps: permissions: contents: write pull-requests: write strategy: matrix: library: - name: libass repository: "mpvkit/libass-build" - name: vulkan repository: "mpvkit/moltenvk-build" - name: libplacebo repository: "mpvkit/libplacebo-build" - name: libshaderc repository: "mpvkit/libshaderc-build" - name: libdovi repository: "mpvkit/libdovi-build" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Checkout latest code uses: actions/checkout@v4 with: repository: ${{ matrix.library.repository }} path: 'latest_code' fetch-depth: 0 - name: Get latest verion id: version run: | cd ./latest_code latest_tag=$(git tag --sort=-v:refname | grep -v "-" | head -n 1) echo "latest tag: $latest_tag" echo "LATEST_VERSION=$latest_tag" >> $GITHUB_ENV rm -rf ../latest_code - name: update to new version uses: jannekem/run-python-script-action@v1 with: script: | import re def parse_version(ver): if '-' in ver or ver == '': return 0 version_string = re.sub(r'[^.0-9]+', r'', ver) parts = re.split(r'\.', version_string) major = int(parts[0]) minor = int(parts[1]) if len(parts) > 1 else 0 patch = int(parts[2]) if len(parts) > 2 else 0 return int(f"{major}{minor}{patch}") file_path = './Sources/BuildScripts/XCFrameworkBuild/main.swift' with open(file_path, 'r', encoding='utf-8') as file: content = file.read() oldVersion = re.search(r'(case .${{ matrix.library.name }}[^"]+?)"(.+?)"', content).group(2) print("old version:", oldVersion) newVersion = '${{ env.LATEST_VERSION }}' print("new version:", newVersion) if parse_version(newVersion) > parse_version(oldVersion) and not oldVersion.startswith(newVersion): content = re.sub(r'(case .${{ matrix.library.name }}[^"]+?)"(.+?)"', r'\1"${{ env.LATEST_VERSION }}"', content, count=1) set_env('FOUND_NEW_VERSION', '1') # If libass is being updated, also update its dependencies if '${{ matrix.library.name }}' == 'libass': deps = ['libunibreak', 'libfreetype', 'libfribidi', 'libharfbuzz'] for dep in deps: content = re.sub(r'(case .' + dep + r'[^"]+?)"(.+?)"', r'\1"${{ env.LATEST_VERSION }}"', content, count=1) with open(file_path, 'w', encoding='utf-8') as file: file.write(content) - name: Create Pull Request if: env.FOUND_NEW_VERSION uses: peter-evans/create-pull-request@v6 with: add-paths: | ./Sources/BuildScripts/XCFrameworkBuild/main.swift branch: "create-pull-request/${{ matrix.library.name }}" delete-branch: true title: "${{ matrix.library.name }} bump version to ${{ env.LATEST_VERSION }}" body: | https://github.com/${{ matrix.library.repository }}/releases/tag/${{ env.LATEST_VERSION }} commit-message: "chore: ${{ matrix.library.name }} bump version to ${{ env.LATEST_VERSION }}"