[Dont merge] Build 0.1.0 ARM wheel by CI, use paddlepaddle 3.3.1 ABI #82
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: Build Wheels for Paddle | |
| on: | |
| push: | |
| branches: [paddle] | |
| tags: ["v*"] | |
| pull_request: | |
| merge_group: | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref_name }}-${{ github.ref_type == 'branch' && github.sha }}-${{ github.event_name == 'workflow_dispatch' }} | |
| cancel-in-progress: true | |
| permissions: | |
| id-token: write | |
| contents: write | |
| defaults: | |
| run: | |
| shell: bash -l -eo pipefail {0} | |
| env: | |
| PADDLECODEC_TEST_VIDEO_URL: https://paddlenlp.bj.bcebos.com/datasets/paddlemix/demo_video/example_video.mp4 | |
| PADDLECODEC_TEST_VIDEO_CACHE_KEY: paddlecodec-test-video-v1-example-video | |
| PADDLECODEC_TEST_VIDEO_PATH: .github/test-assets/example_video.mp4 | |
| jobs: | |
| prepare-test-video: | |
| runs-on: ubuntu-latest | |
| name: Prepare cached Paddle test video | |
| steps: | |
| - name: Restore cached test video | |
| id: cache-test-video | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.PADDLECODEC_TEST_VIDEO_PATH }} | |
| key: ${{ env.PADDLECODEC_TEST_VIDEO_CACHE_KEY }} | |
| - name: Download test video | |
| if: steps.cache-test-video.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir -p "$(dirname "${PADDLECODEC_TEST_VIDEO_PATH}")" | |
| curl --fail --location --retry 5 --retry-all-errors \ | |
| --output "${PADDLECODEC_TEST_VIDEO_PATH}" \ | |
| "${PADDLECODEC_TEST_VIDEO_URL}" | |
| - name: Upload cached test video artifact | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: paddlecodec-test-video | |
| path: ${{ env.PADDLECODEC_TEST_VIDEO_PATH }} | |
| if-no-files-found: error | |
| build-paddlecodec-wheel: | |
| name: Build and upload Paddle wheel (${{ matrix.arch-name }}, py${{ matrix.python-version }}) | |
| runs-on: ${{ matrix.runner }} | |
| container: | |
| image: ${{ matrix.container-image }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12", "3.13"] | |
| arch: ["x86_64", "arm64"] | |
| include: | |
| - arch: x86_64 | |
| arch-name: x86_64 | |
| runner: ubuntu-latest | |
| container-image: pytorch/manylinux2_28-builder:cpu | |
| artifact-prefix: paddlecodec-wheel-linux | |
| wheel-platform: manylinux_2_28_x86_64 | |
| - arch: arm64 | |
| arch-name: arm64 | |
| runner: ubuntu-24.04-arm | |
| container-image: pytorch/manylinux2_28_aarch64-builder:cpu-aarch64 | |
| artifact-prefix: paddlecodec-wheel-linux-arm64 | |
| wheel-platform: manylinux_2_28_aarch64 | |
| permissions: | |
| id-token: write | |
| contents: read | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Setup conda environment | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| auto-update-conda: true | |
| miniforge-version: latest | |
| activate-environment: build | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install build dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install build wheel setuptools | |
| - name: Install PaddlePaddle nightly | |
| run: | | |
| pip install --pre paddlepaddle-gpu==3.3.1 -i https://www.paddlepaddle.org.cn/packages/stable/cu130/ | |
| - name: Run pre-build script | |
| run: | | |
| bash packaging/pre_build_script.sh | |
| - name: Build wheel | |
| run: | | |
| export BUILD_AGAINST_ALL_FFMPEG_FROM_S3=1 | |
| export I_CONFIRM_THIS_IS_NOT_A_LICENSE_VIOLATION=1 | |
| export TORCHCODEC_CMAKE_BUILD_DIR=$(pwd)/build_cmake | |
| python -m build --wheel -vvv --no-isolation | |
| - name: Repair wheel | |
| run: | | |
| pip install auditwheel | |
| mkdir -p temp_libs | |
| unzip -j dist/*.whl "torchcodec/*.so" -d temp_libs || true | |
| FFMPEG_LIB_PATHS=$(find "$(pwd)/build_cmake/_deps" -type d -name "lib" -print | paste -sd: -) | |
| PADDLE_PATH=$(python -c "import paddle; print(paddle.__path__[0])") | |
| PADDLE_LIB_PATHS="$PADDLE_PATH/base:$PADDLE_PATH/libs" | |
| INTERNAL_LIB_PATH=$(pwd)/temp_libs | |
| export LD_LIBRARY_PATH=${FFMPEG_LIB_PATHS}:${PADDLE_LIB_PATHS}:${INTERNAL_LIB_PATH}:${LD_LIBRARY_PATH} | |
| auditwheel repair dist/*.whl --plat ${{ matrix.wheel-platform }} -w wheelhouse/ --exclude "*" | |
| rm -rf temp_libs | |
| rm dist/*.whl | |
| mv wheelhouse/*.whl dist/ | |
| rmdir wheelhouse | |
| - name: Upload wheel artifact | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: ${{ matrix.artifact-prefix }}-py${{ matrix.python-version }} | |
| path: dist/*.whl | |
| - name: Run post-build script | |
| run: | | |
| bash packaging/post_build_script.sh | |
| - name: List wheel contents | |
| run: | | |
| wheel_path=$(find dist -type f -name "*.whl") | |
| echo "Wheel path: $wheel_path" | |
| unzip -l $wheel_path | |
| test-paddlecodec-wheel: | |
| name: Install and test Paddle wheel (${{ matrix.arch-name }}, py${{ matrix.python-version }}, ffmpeg ${{ matrix.ffmpeg-version }}) | |
| needs: [prepare-test-video, build-paddlecodec-wheel] | |
| runs-on: ${{ matrix.runner }} | |
| container: | |
| image: ${{ matrix.container-image }} | |
| env: | |
| PADDLECODEC_TEST_VIDEO: .github/test-assets/example_video.mp4 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12", "3.13"] | |
| arch: ["x86_64", "arm64"] | |
| # FFmpeg 8.0 depends on libopenvino.so.2520, PaddlePaddle CPU depends on libopenvino.so.2500 | |
| # There has some conflict causing test failures, but it works with PaddlePaddle GPU. | |
| # We skip FFmpeg 8.0 tests for PaddlePaddle CPU builds for now. | |
| ffmpeg-version: ["4.4.2", "5.1.2", "6.1.1", "7.0.1"] | |
| include: | |
| - arch: x86_64 | |
| arch-name: x86_64 | |
| runner: ubuntu-latest | |
| container-image: pytorch/manylinux2_28-builder:cpu | |
| artifact-prefix: paddlecodec-wheel-linux | |
| - arch: arm64 | |
| arch-name: arm64 | |
| runner: ubuntu-24.04-arm | |
| container-image: pytorch/manylinux2_28_aarch64-builder:cpu-aarch64 | |
| artifact-prefix: paddlecodec-wheel-linux-arm64 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Download wheel artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ matrix.artifact-prefix }}-py${{ matrix.python-version }} | |
| path: dist/ | |
| - name: Download cached test video artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: paddlecodec-test-video | |
| path: .github/test-assets/ | |
| - name: Install FFmpeg via conda | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| auto-update-conda: true | |
| miniforge-version: latest | |
| activate-environment: test | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install FFmpeg from conda-forge | |
| run: | | |
| conda install "ffmpeg=${{ matrix.ffmpeg-version }}" -c conda-forge -y | |
| ffmpeg -version | |
| - name: Install PaddlePaddle nightly in conda env | |
| run: | | |
| pip install --pre paddlepaddle==3.3.1 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/ | |
| - name: Install paddlecodec from wheel | |
| run: | | |
| wheel_path=$(find dist -type f -name "*.whl") | |
| echo "Installing $wheel_path" | |
| pip install $wheel_path -vvv | |
| - name: Install test dependencies | |
| run: | | |
| pip install numpy pytest pillow | |
| - name: Delete src folder | |
| run: | | |
| rm -rf src/ | |
| ls -la | |
| - name: Run tests | |
| run: | | |
| pytest --override-ini="addopts=-v" -s test_paddle | |
| publish-pypi: | |
| runs-on: ubuntu-latest | |
| name: Publish Paddle wheels to PyPI | |
| if: "startsWith(github.ref, 'refs/tags/')" | |
| needs: | |
| - test-paddlecodec-wheel | |
| permissions: | |
| id-token: write | |
| steps: | |
| - name: Retrieve release distributions | |
| uses: actions/download-artifact@v6 | |
| with: | |
| pattern: paddlecodec-wheel-linux* | |
| path: dist/ | |
| merge-multiple: true | |
| - name: Publish release distributions to PyPI | |
| uses: pypa/gh-action-pypi-publish@release/v1 | |
| publish-release: | |
| runs-on: ubuntu-latest | |
| name: Publish Paddle wheels to GitHub | |
| if: "startsWith(github.ref, 'refs/tags/')" | |
| needs: | |
| - test-paddlecodec-wheel | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| pattern: paddlecodec-wheel-linux* | |
| path: dist/ | |
| merge-multiple: true | |
| - name: Get tag name | |
| run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
| - name: Publish to GitHub | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| draft: true | |
| files: dist/* | |
| tag_name: ${{ env.RELEASE_VERSION }} |