name: Build PYPI wheels for opencv-python on Macos M1 on: pull_request: branches: - master paths-ignore: - '.github/workflows/build_wheels_linux*' - '.github/workflows/build_wheels_windows*' - '.github/workflows/build_wheels_macos.yml' release: types: [published, edited] jobs: build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [macOS-M1] python-version: [3.7, 3.8, 3.9] platform: [x64] with_contrib: [0, 1] without_gui: [0, 1] build_sdist: [0] env: SDIST: ${{ matrix.build_sdist || 0 }} ENABLE_HEADLESS: ${{ matrix.without_gui }} ENABLE_CONTRIB: ${{ matrix.with_contrib }} OPENCV_TEST_DATA_PATH: ${{ github.workspace }}/opencv_extra/testdata steps: - name: Checkout uses: actions/checkout@v2 with: submodules: false fetch-depth: 0 - name: Update submodules if: github.event_name == 'pull_request' run: git submodule update --remote - name: build script run: | git submodule update --init multibuild echo $ENABLE_CONTRIB > contrib.enabled echo $ENABLE_HEADLESS > headless.enabled export MACOSX_DEPLOYMENT_TARGET=11.0 arch -arm64 -e SDIST=${{ matrix.build_sdist }} -e ENABLE_HEADLESS=${{ matrix.without_gui }} -e ENABLE_CONTRIB=${{ matrix.with_contrib }} python${{ matrix.python-version }} -m pip wheel --wheel-dir=wheelhouse . --verbose delocate-wheel ${{ github.workspace }}/wheelhouse/opencv* - name: before test run: | git submodule update --init --recursive arch -arm64 python${{ matrix.python-version }} -m pip install --user --no-cache --force-reinstall wheelhouse/opencv*.whl cd ${{ github.workspace }}/tests arch -arm64 python${{ matrix.python-version }} get_build_info.py - name: run test run: | cd ${{ github.workspace }}/opencv arch -arm64 python${{ matrix.python-version }} modules/python/test/test.py -v --repo . - name: saving artifacts uses: actions/upload-artifact@v2 with: name: wheels path: wheelhouse/opencv*.whl test_release_opencv_python: if: github.event_name == 'release' && github.event.release.prerelease needs: [build] runs-on: ubuntu-latest environment: test-opencv-python-release defaults: run: shell: bash steps: - uses: actions/download-artifact@v2 with: name: wheels 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/opencv_* release_opencv_python: if: github.event_name == 'release' && !github.event.release.prerelease needs: [build] runs-on: ubuntu-latest environment: opencv-python-release defaults: run: shell: bash steps: - uses: actions/download-artifact@v2 with: name: wheels path: wheelhouse/ - name: Upload wheels for opencv_python run: | python -m pip install twine python -m twine upload -u ${{ secrets.OPENCV_PYTHON_USERNAME }} -p ${{ secrets.OPENCV_PYTHON_PASSWORD }} --skip-existing wheelhouse/opencv_python-* - name: Upload wheels for opencv_contrib_python run: | python -m pip install twine python -m twine upload -u ${{ secrets.OPENCV_CONTRIB_PYTHON_USERNAME }} -p ${{ secrets.OPENCV_CONTRIB_PYTHON_PASSWORD }} --skip-existing wheelhouse/opencv_contrib_python-* - 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/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/opencv_contrib_python_headless-*