Fix broken sourceforge URLs to LAME #340
Workflow file for this run
This file contains hidden or 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: Python application | |
| on: [push, pull_request] | |
| env: | |
| FFMPEG_VERSION: "6.0" # https://ffmpeg.org/releases/ | |
| SDL_VERSION: "2.26.4" # https://github.com/libsdl-org/SDL/releases | |
| SDL_MIXER_VERSION: "2.6.3" # https://github.com/libsdl-org/SDL_mixer/releases | |
| USE_SDL2_MIXER: "1" | |
| MACOSX_DEPLOYMENT_TARGET: "10.13" | |
| MACOSX_DEPLOYMENT_TARGET_ARM: "11.0" | |
| jobs: | |
| windows_wheels_tests: | |
| runs-on: windows-latest | |
| env: | |
| FF_BUILD_DIR: ~/ff_deps | |
| SDL_ROOT: ~/ff_deps/SDL2 | |
| FFMPEG_ROOT: ~/ff_deps/ffmpeg | |
| strategy: | |
| matrix: | |
| python: [ '3.9', '3.10', '3.11', '3.12', '3.13'] | |
| steps: | |
| - uses: actions/[email protected] | |
| - name: Set up Python ${{ matrix.python }} | |
| uses: actions/[email protected] | |
| with: | |
| python-version: ${{ matrix.python }} | |
| - name: Get dependencies | |
| run: | | |
| mkdir "$env:FF_BUILD_DIR" | |
| cd "$env:FF_BUILD_DIR" | |
| curl -sLO "https://github.com/GyanD/codexffmpeg/releases/download/$env:FFMPEG_VERSION/ffmpeg-$env:FFMPEG_VERSION-full_build-shared.zip" | |
| 7z x "ffmpeg-$env:FFMPEG_VERSION-full_build-shared.zip" | |
| ren "ffmpeg-$env:FFMPEG_VERSION-full_build-shared" ffmpeg | |
| curl -sLO "https://github.com/libsdl-org/SDL/releases/download/release-$env:SDL_VERSION/SDL2-devel-$env:SDL_VERSION-VC.zip" | |
| 7z x "SDL2-devel-$env:SDL_VERSION-VC.zip" | |
| ren "SDL2-$env:SDL_VERSION" SDL2 | |
| curl -sLO "https://github.com/libsdl-org/SDL_mixer/releases/download/release-$env:SDL_MIXER_VERSION/SDL2_mixer-devel-$env:SDL_MIXER_VERSION-VC.zip" | |
| 7z x "SDL2_mixer-devel-$env:SDL_MIXER_VERSION-VC.zip" | |
| mkdir "SDL2\bin" | |
| mkdir "SDL2\include\SDL2" | |
| Copy-Item "SDL2\COPYING.txt" -destination "SDL2\bin" | |
| Copy-Item "SDL2\README-SDL.txt" -destination "SDL2\bin" | |
| Copy-Item "SDL2\lib\x64\*.dll" -destination "SDL2\bin" -Recurse -Force | |
| Copy-Item "SDL2\lib\x64\*.lib" -destination "SDL2\lib" -Recurse -Force | |
| Copy-Item "SDL2_mixer-$env:SDL_MIXER_VERSION\lib\x64\*.dll" -destination "SDL2\bin" -Recurse -Force | |
| Copy-Item "SDL2_mixer-$env:SDL_MIXER_VERSION\lib\x64\*.lib" -destination "SDL2\lib" -Recurse -Force | |
| Copy-Item "SDL2_mixer-$env:SDL_MIXER_VERSION\include\*" -destination "SDL2\include" -Recurse -Force | |
| Copy-Item "SDL2\include\*.h" -destination "SDL2\include\SDL2" -Recurse -Force | |
| echo "Dependency paths are:" | |
| ls $env:SDL_ROOT | |
| ls $env:FFMPEG_ROOT | |
| - name: Install pip deps | |
| run: | | |
| python -m pip install --upgrade pip virtualenv wheel setuptools cython~=3.0.11 pytest | |
| - name: Make sdist | |
| if: matrix.python == '3.13' | |
| run: python setup.py sdist --formats=gztar | |
| - name: Make wheel | |
| run: | | |
| $env:SDL_ROOT=(get-item $env:SDL_ROOT).FullName | |
| $env:FFMPEG_ROOT=(get-item $env:FFMPEG_ROOT).FullName | |
| python setup.py bdist_wheel | |
| - name: Upload wheel | |
| uses: actions/[email protected] | |
| with: | |
| name: py_wheel-win-${{ matrix.python }} | |
| path: dist | |
| - name: Upload to GitHub Release | |
| uses: softprops/[email protected] | |
| if: startsWith(github.ref, 'refs/tags/') | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| files: dist/* | |
| - name: Publish to PyPI | |
| if: startsWith(github.ref, 'refs/tags/') | |
| env: | |
| TWINE_USERNAME: "__token__" | |
| TWINE_PASSWORD: ${{ secrets.pypi_password }} | |
| run: | | |
| python -m pip install twine | |
| twine upload dist/* | |
| - name: Test | |
| run: | | |
| # see https://social.msdn.microsoft.com/Forums/security/en-US/0c13bd1a-388f-48cf-a190-7259d39a080f/ffmpeg-doesnt-work-from-inside-a-container-but-works-on-the-host?forum=windowscontainers | |
| # https://trac.ffmpeg.org/ticket/6875, https://stackoverflow.com/questions/46147012/opencv-import-failed-in-windows-container-on-windows-server-2016 | |
| # and https://social.msdn.microsoft.com/Forums/en-US/a95032d2-c469-494a-b3f9-521b1389a6c9/cant-use-opencvpython-package-in-windows-container-windows-server-2016-standard?forum=windowscontainers | |
| # for the reason we need to manually copy some missing dlls to the PATH | |
| Invoke-WebRequest "https://github.com/matham/ffpyplayer/releases/download/v4.1.0/ffmpeg_win_dll_container_deps.zip" -OutFile "ffmpeg_win_dll_container_deps.zip" | |
| 7z x "ffmpeg_win_dll_container_deps.zip" | |
| $env:PATH="$env:PATH;$env:GITHUB_WORKSPACE\ffmpeg_win_dll_container_deps\x64" | |
| ls "$env:GITHUB_WORKSPACE\ffmpeg_win_dll_container_deps\x64" | |
| $dist_path=(get-item dist).FullName | |
| $root=(get-item .).FullName | |
| $env:FFPYPLAYER_TEST_DIRS="$root\ffpyplayer\tests;$root\examples" | |
| cd ~/ | |
| python -m pip install --no-index --find-links=$dist_path ffpyplayer | |
| $name = python -c "import ffpyplayer, os.path;print(os.path.dirname(ffpyplayer.__file__))" | |
| echo $name | |
| # powershell interprets writing to stderr as an error, so only raise error if the return code is none-zero | |
| try { | |
| pytest "$name\tests" | |
| } catch { | |
| if ($LastExitCode -ne 0) { | |
| throw $_ | |
| } else { | |
| echo $_ | |
| } | |
| } | |
| linux_test_src: | |
| strategy: | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| - os: ubuntu-24.04-arm | |
| runs-on: ${{ matrix.os }} | |
| needs: windows_wheels_tests | |
| steps: | |
| - uses: actions/[email protected] | |
| - name: Set up Python 3.x | |
| uses: actions/[email protected] | |
| with: | |
| python-version: 3.x | |
| - uses: actions/[email protected] | |
| with: | |
| pattern: py_wheel-* | |
| merge-multiple: true | |
| path: dist | |
| - name: Install | |
| run: | | |
| sudo apt update | |
| sudo apt install -y ffmpeg libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev | |
| sudo apt install -y libavutil-dev libswscale-dev libswresample-dev libpostproc-dev libsdl2-dev libsdl2-2.0-0 | |
| sudo apt install -y libsdl2-mixer-2.0-0 libsdl2-mixer-dev python3-dev python3 | |
| python3 -m pip install pytest | |
| root=`pwd` | |
| cd ~/ | |
| python3 -m pip install `ls $root/dist/ffpyplayer*.tar.gz` | |
| - name: Test | |
| run: | | |
| root=`pwd` | |
| export FFPYPLAYER_TEST_DIRS="$root/ffpyplayer/tests:$root/examples" | |
| cd ~/ | |
| name=`python3 -c "import ffpyplayer, os.path;print(os.path.dirname(ffpyplayer.__file__))"` | |
| echo $name | |
| pytest "$name/tests" | |
| linux_test_wheel: | |
| strategy: | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| - os: ubuntu-24.04-arm | |
| runs-on: ${{ matrix.os }} | |
| needs: linux_wheels | |
| steps: | |
| - uses: actions/[email protected] | |
| - name: Set up Python 3.x | |
| uses: actions/[email protected] | |
| with: | |
| python-version: 3.x | |
| - uses: actions/[email protected] | |
| with: | |
| pattern: py_wheel-* | |
| merge-multiple: true | |
| path: dist | |
| - name: Install | |
| run: | | |
| python3 -m pip install --upgrade pip pytest | |
| root=`pwd` | |
| cd ~/ | |
| python3 -m pip install --find-links=$root/dist ffpyplayer | |
| - name: Test | |
| run: | | |
| root=`pwd` | |
| export FFPYPLAYER_TEST_DIRS="$root/ffpyplayer/tests:$root/examples" | |
| cd ~/ | |
| name=`python3 -c "import ffpyplayer, os.path;print(os.path.dirname(ffpyplayer.__file__))"` | |
| echo $name | |
| pytest "$name/tests" | |
| linux_wheels: | |
| env: | |
| CIBW_ENVIRONMENT_LINUX: "USE_SDL2_MIXER=0 PKG_CONFIG_PATH=$HOME/ffmpeg_build/lib/pkgconfig:$HOME/ffmpeg_build/lib64/pkgconfig LD_LIBRARY_PATH=$HOME/ffmpeg_build/lib:$HOME/ffmpeg_build/lib64:$LD_LIBRARY_PATH" | |
| CIBW_BUILD_VERBOSITY: 3 | |
| CIBW_BUILD: ${{ matrix.cibw_build }} | |
| CIBW_ARCHS: ${{ matrix.cibw_archs }} | |
| CIBW_BEFORE_ALL_LINUX: > | |
| cp -r `pwd`/ffmpeg_build $HOME/ffmpeg_build && | |
| source .ci/yum_deps.sh | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| cibw_archs: 'x86_64' | |
| cibw_build: 'cp39-manylinux_x86_64 cp310-manylinux_x86_64 cp311-manylinux_x86_64 cp312-manylinux_x86_64 cp313-manylinux_x86_64' | |
| - os: ubuntu-24.04-arm | |
| cibw_archs: 'aarch64' | |
| cibw_build: 'cp39-manylinux_aarch64 cp310-manylinux_aarch64 cp311-manylinux_aarch64 cp312-manylinux_aarch64 cp313-manylinux_aarch64' | |
| steps: | |
| - uses: actions/[email protected] | |
| - name: Set up Python 3.x | |
| uses: actions/[email protected] | |
| with: | |
| python-version: 3.x | |
| - uses: actions/[email protected] | |
| id: deps-cache | |
| with: | |
| path: ffmpeg_build | |
| key: ${{ runner.os }}-${{ matrix.cibw_archs }}-deps-cache-${{ hashFiles('**/build-wheels.sh') }}-${{ hashFiles('**/yum_deps.sh') }} | |
| - name: Build dependencies | |
| if: ${{ steps.deps-cache.outputs.cache-hit != 'true' }} | |
| run: | | |
| mkdir dist | |
| docker run --rm -v `pwd`:/io:rw quay.io/pypa/manylinux2014_${{ matrix.cibw_archs }} /io/.ci/build-wheels.sh | |
| - name: Install cibuildwheel | |
| run: | | |
| python -m pip install cibuildwheel~=2.23.3 | |
| - name: Make wheels | |
| run: | | |
| python -m cibuildwheel --output-dir dist | |
| - name: Upload wheel | |
| uses: actions/[email protected] | |
| with: | |
| name: py_wheel-linux-${{ matrix.os }}-${{ matrix.cibw_archs }} | |
| path: dist | |
| - name: Upload to GitHub Release | |
| uses: softprops/[email protected] | |
| if: startsWith(github.ref, 'refs/tags/') | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| files: dist/* | |
| - name: Publish to PyPI | |
| if: startsWith(github.ref, 'refs/tags/') | |
| env: | |
| TWINE_USERNAME: "__token__" | |
| TWINE_PASSWORD: ${{ secrets.pypi_password }} | |
| run: | | |
| python -m pip install twine | |
| twine upload dist/* | |
| osx_wheels_create: | |
| runs-on: macos-13 | |
| env: | |
| USE_SDL2_MIXER: 0 | |
| FFMPEG_BUILD_PATH: "ffmpeg_build" | |
| CIBW_BUILD_VERBOSITY: 3 | |
| CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-* cp313-*" | |
| CIBW_ARCHS_MACOS: ${{ matrix.arch }} | |
| CIBW_REPAIR_WHEEL_COMMAND_MACOS: > | |
| DYLD_FALLBACK_LIBRARY_PATH=$REPAIR_LIBRARY_PATH delocate-listdeps {wheel} && | |
| DYLD_FALLBACK_LIBRARY_PATH=$REPAIR_LIBRARY_PATH delocate-wheel --require-archs {delocate_archs} -w {dest_dir} {wheel} | |
| strategy: | |
| matrix: | |
| arch: [ "x86_64", "arm64" ] | |
| steps: | |
| - uses: actions/[email protected] | |
| - name: Set up Python | |
| uses: actions/[email protected] | |
| with: | |
| python-version: 3.x | |
| - name: Cache ffmpeg | |
| id: cache-ffmpeg | |
| uses: actions/[email protected] | |
| with: | |
| path: ~/${{ env.FFMPEG_BUILD_PATH }}_${{ matrix.arch }} | |
| key: ${{ runner.os }}-ffmpeg-${{ matrix.arch }}-${{ env.MACOSX_DEPLOYMENT_TARGET }}-${{ env.MACOSX_DEPLOYMENT_TARGET_ARM }}-${{ hashFiles('.ci/build_wheels_osx.sh') }} | |
| - name: Build FFmpeg | |
| if: steps.cache-ffmpeg.outputs.cache-hit != 'true' | |
| run: bash .ci/build_wheels_osx.sh "${{ matrix.arch }}" | |
| - name: Install cibuildwheel | |
| run: | | |
| python -m pip install cibuildwheel~=2.23.3 | |
| - name: Build wheels | |
| run: | | |
| export REPAIR_LIBRARY_PATH="$HOME/${{ env.FFMPEG_BUILD_PATH }}_${{ matrix.arch }}/lib" | |
| export PKG_CONFIG_PATH="$HOME/${{ env.FFMPEG_BUILD_PATH }}_${{ matrix.arch }}/lib/pkgconfig:$PKG_CONFIG_PATH" | |
| python -m cibuildwheel --output-dir dist | |
| - name: Upload wheel | |
| uses: actions/[email protected] | |
| with: | |
| name: py_wheel-osx-${{ matrix.arch }} | |
| path: dist | |
| osx_wheels_fuse_test_upload: | |
| runs-on: macos-13 | |
| needs: osx_wheels_create | |
| steps: | |
| - uses: actions/[email protected] | |
| - name: Set up Python | |
| uses: actions/[email protected] | |
| with: | |
| python-version: 3.x | |
| - uses: actions/[email protected] | |
| with: | |
| pattern: py_wheel-* | |
| merge-multiple: true | |
| path: dist | |
| - name: Fuse FFmpeg arm64/x86 | |
| run: | | |
| pip install delocate | |
| cd dist | |
| bash ../.ci/merge_osx_deps.sh | |
| - name: Upload wheel | |
| uses: actions/[email protected] | |
| with: | |
| name: py_wheel-osx-fused | |
| path: dist | |
| - name: Upload to GitHub Release | |
| uses: softprops/[email protected] | |
| if: startsWith(github.ref, 'refs/tags/') | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| files: dist/* | |
| - name: Publish to PyPI | |
| if: startsWith(github.ref, 'refs/tags/') | |
| env: | |
| TWINE_USERNAME: "__token__" | |
| TWINE_PASSWORD: ${{ secrets.pypi_password }} | |
| run: | | |
| python -m pip install twine | |
| twine upload dist/* | |
| - name: Test | |
| run: | | |
| root=`pwd` | |
| export FFPYPLAYER_TEST_DIRS="$root/ffpyplayer/tests:$root/examples" | |
| cd ~/ | |
| python -m pip install --upgrade pip virtualenv wheel setuptools pytest | |
| python -m pip install --no-index --find-links=$root/dist ffpyplayer | |
| name=`python -c "import ffpyplayer, os.path;print(os.path.dirname(ffpyplayer.__file__))"` | |
| echo $name | |
| pytest "$name/tests" | |
| docs: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/[email protected] | |
| - name: Set up Python 3.x | |
| uses: actions/[email protected] | |
| with: | |
| python-version: 3.x | |
| - name: Install | |
| run: | | |
| sudo apt update | |
| sudo apt install ffmpeg libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev | |
| sudo apt install libavutil-dev libswscale-dev libswresample-dev libpostproc-dev libsdl2-dev libsdl2-2.0-0 | |
| sudo apt install libsdl2-mixer-2.0-0 libsdl2-mixer-dev python3-dev | |
| python -m pip install --upgrade pip virtualenv wheel setuptools sphinx sphinx_rtd_theme | |
| python -m pip install -e . | |
| - name: Generate docs | |
| run: | | |
| cd doc | |
| make html | |
| - name: gh-pages upload | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| cp -r doc/build/html ~/docs_temp | |
| git config --global user.email "[email protected]" | |
| git config --global user.name "Matthew Einhorn" | |
| git remote rm origin || true | |
| git remote add origin "https://x-access-token:${GITHUB_TOKEN}@github.com/matham/ffpyplayer.git" | |
| git checkout --orphan gh-pages | |
| cp -r .git ~/docs_git | |
| cd .. | |
| rm -rf ffpyplayer | |
| mkdir ffpyplayer | |
| cd ffpyplayer | |
| cp -r ~/docs_git .git | |
| cp -r ~/docs_temp/* . | |
| touch .nojekyll | |
| git add . | |
| git commit -a -m "Docs for git-$GITHUB_SHA" | |
| git push origin gh-pages -f |