diff --git a/.github/workflows/build_wheels_macos_m1.yml b/.github/workflows/build_wheels_macos_m1.yml index e38d286f..57c715e6 100644 --- a/.github/workflows/build_wheels_macos_m1.yml +++ b/.github/workflows/build_wheels_macos_m1.yml @@ -9,6 +9,7 @@ on: - '.github/workflows/build_wheels_manylinux*' - '.github/workflows/build_wheels_windows*' - '.github/workflows/build_wheels_macos.yml' + - '.github/workflows/build_wheels_musllinux*' release: types: [published, edited] schedule: diff --git a/.github/workflows/build_wheels_manylinux.yml b/.github/workflows/build_wheels_manylinux.yml index b8e47334..69577fad 100644 --- a/.github/workflows/build_wheels_manylinux.yml +++ b/.github/workflows/build_wheels_manylinux.yml @@ -8,6 +8,7 @@ on: paths-ignore: - '.github/workflows/build_wheels_windows*' - '.github/workflows/build_wheels_macos*' + - '.github/workflows/build_wheels_musllinux*' release: types: [published, edited] schedule: diff --git a/.github/workflows/build_wheels_musllinux.yml b/.github/workflows/build_wheels_musllinux.yml new file mode 100644 index 00000000..893fd16b --- /dev/null +++ b/.github/workflows/build_wheels_musllinux.yml @@ -0,0 +1,182 @@ +name: Musllinux + +on: + pull_request: + branches: + - 4.x + - 5.x + paths-ignore: + - '.github/workflows/build_wheels_windows*' + - '.github/workflows/build_wheels_macos*' + - '.github/workflows/build_wheels_manylinux*' + release: + types: [published, edited] + schedule: + - cron: '0 3 * * 6' + workflow_dispatch: + + +jobs: + Build: + runs-on: ${{ matrix.platform == 'aarch64' && 'opencv-cn-lin-arm64' || 'ubuntu-22.04' }} + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: ['3.12'] + platform: [x86_64, aarch64] + with_contrib: [0, 1] + build_sdist: [0] + include: + - platform: aarch64 + DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-musllinux_1_2-aarch64:20251211 + - platform: x86_64 + DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-musllinux_1_2-x86-64:20251211 + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + REPO_DIR: . + PROJECT_SPEC: opencv-python + MB_PYTHON_VERSION: ${{ matrix.python-version }} + TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }} + MB_ML_VER: 1_2 + MB_ML_LIBC: musllinux + TRAVIS_BUILD_DIR: ${{ github.workspace }} + CONFIG_PATH: travis_config.sh + DOCKER_IMAGE: ${{ matrix.DOCKER_IMAGE }} + USE_CCACHE: 0 + UNICODE_WIDTH: 32 + PLAT: ${{ matrix.platform }} + SDIST: ${{ matrix.build_sdist || 0 }} + ENABLE_HEADLESS: 1 + ENABLE_CONTRIB: ${{ matrix.with_contrib }} + + steps: + - name: Cleanup + run: find . -mindepth 1 -delete + working-directory: ${{ github.workspace }} + - name: Setup environment + run: | + if [[ "${{ github.event_name }}" == "schedule" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then + echo "ENABLE_ROLLING=1" >> $GITHUB_ENV + fi + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: false + fetch-depth: 0 + + - name: Build a package + run: source scripts/build.sh + - name: Saving a wheel accordingly to matrix + uses: actions/upload-artifact@v4 + with: + name: wheel-${{ matrix.platform }}-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }} + path: wheelhouse/opencv*.whl + + Test: + needs: [Build] + runs-on: ${{ matrix.platform == 'aarch64' && 'opencv-cn-lin-arm64' || 'ubuntu-22.04' }} + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + platform: [x86_64, aarch64] + with_contrib: [0, 1] + build_sdist: [0] + + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + MB_PYTHON_VERSION: ${{ matrix.python-version }} + MB_ML_VER: 1_2 + MB_ML_LIBC: musllinux + NP_TEST_DEP: numpy==1.19.5 + NP_TEST_DEP_LATEST: numpy==2.2.6 + CONFIG_PATH: travis_config.sh + PLAT: ${{ matrix.platform }} + SDIST: ${{ matrix.build_sdist || 0 }} + ENABLE_HEADLESS: 1 + ENABLE_CONTRIB: ${{ matrix.with_contrib }} + steps: + - name: Cleanup + run: find . -mindepth 1 -delete + working-directory: ${{ github.workspace }} + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: true + fetch-depth: 0 + + - name: Setup Environment variables + run: if [ "3.10" == "${{ matrix.python-version }}" -o "3.11" == "${{ matrix.python-version }}" -o "3.12" == "${{ matrix.python-version }}" -o "3.13" == "${{ matrix.python-version }}" ]; then echo "TEST_DEPENDS=$(echo $NP_TEST_DEP_LATEST)" >> $GITHUB_ENV; else echo "TEST_DEPENDS=$(echo $NP_TEST_DEP)" >> $GITHUB_ENV; fi + - name: Download a wheel accordingly to matrix + uses: actions/download-artifact@v4 + with: + name: wheel-${{ matrix.platform }}-${{ matrix.with_contrib }}-1-${{ matrix.build_sdist }} + path: wheelhouse/ + - name: Package installation and run tests + run: source scripts/install.sh + + Release_rolling: + if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} + needs: [Build, Test] + runs-on: ubuntu-22.04 + environment: opencv-python-rolling-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v4 + with: + path: wheelhouse/ + - name: Upload wheels for opencv_python_headless_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_PYTHON_HEADLESS_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_PYTHON_HEADLESS_ROLLING_PASSWORD }} --skip-existing wheelhouse/wheel-*/opencv_python_headless_rolling-* + - name: Upload wheels for opencv_contrib_python_headless_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_CONTRIB_PYTHON_HEADLESS_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_CONTRIB_PYTHON_HEADLESS_ROLLING_PASSWORD }} --skip-existing wheelhouse/wheel-*/opencv_contrib_python_headless_rolling-* + + Pre-release: + if: github.event_name == 'release' && github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-22.04 + environment: test-opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v4 + with: + path: wheelhouse/ + + - name: Upload all wheels + run: | + python -m pip install twine + python -m twine upload --repository testpypi -u ${{ secrets.PYPI_USERNAME }} -p ${{ secrets.PYPI_PASSWORD }} --skip-existing wheelhouse/wheel-*/opencv_* wheelhouse/wheel-*/opencv-* + + Release: + if: github.event_name == 'release' && !github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-22.04 + environment: opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v4 + with: + path: wheelhouse/ + - name: Upload wheels for opencv_python_headless + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_PYTHON_HEADLESS_USERNAME }} -p ${{ secrets.OPENCV_PYTHON_HEADLESS_PASSWORD }} --skip-existing wheelhouse/wheel-*/opencv_python_headless-* wheelhouse/wheel-*/opencv-python-headless-* + - name: Upload wheels for opencv_contrib_python_headless + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_CONTRIB_PYTHON_HEADLESS_USERNAME }} -p ${{ secrets.OPENCV_CONTRIB_PYTHON_HEADLESS_PASSWORD }} --skip-existing wheelhouse/wheel-*/opencv_contrib_python_headless-* wheelhouse/wheel-*/opencv-contrib-python-headless-* diff --git a/.github/workflows/build_wheels_windows.yml b/.github/workflows/build_wheels_windows.yml index 580bdd57..af41951c 100644 --- a/.github/workflows/build_wheels_windows.yml +++ b/.github/workflows/build_wheels_windows.yml @@ -8,6 +8,7 @@ on: paths-ignore: - '.github/workflows/build_wheels_manylinux*' - '.github/workflows/build_wheels_macos*' + - '.github/workflows/build_wheels_musllinux*' release: types: [published, edited] schedule: diff --git a/docker/musllinux_1_2/Dockerfile_x86_64 b/docker/musllinux_1_2/Dockerfile_x86_64 index babdf95f..1b26cb6c 100644 --- a/docker/musllinux_1_2/Dockerfile_x86_64 +++ b/docker/musllinux_1_2/Dockerfile_x86_64 @@ -149,7 +149,10 @@ RUN curl -O -L https://github.com/ccache/ccache/releases/download/v${CCACHE_VERS # user`s UID is 1001 RUN adduser -D -u 1001 ci && mkdir /io && chown ci:ci /io && \ - chown -R ci:ci /ffmpeg_build + chown -R ci:ci /ffmpeg_build && \ + # This calls in mutlibuild scripts and cannot be run without permissions + chown -R ci:ci /opt/_internal/pipx/venvs/auditwheel + USER ci diff --git a/multibuild b/multibuild index 0714f52e..88a0b6f0 160000 --- a/multibuild +++ b/multibuild @@ -1 +1 @@ -Subproject commit 0714f52ea1ea57a0bc33c7f8b74bae457e1fa8e0 +Subproject commit 88a0b6f0eb770cf9f95792d66410e7696ce3d384