From dbeb79ff75d66fb1aa6e4086b9871b82a2f349db Mon Sep 17 00:00:00 2001 From: Andrey Senyaev Date: Mon, 26 Sep 2022 21:58:35 +0300 Subject: [PATCH] Move all workflow lines to CI repo --- .github/workflows/OCV-Python-Linux-ARM64.yaml | 216 +++++++++++++ .../workflows/OCV-Python-Linux-x86-64.yaml | 293 ++++++++++++++++++ .github/workflows/OCV-Python-Windows-10.yaml | 238 ++++++++++++++ .github/workflows/OCV-Python-macOS-ARM64.yaml | 212 +++++++++++++ .../workflows/OCV-Python-macOS-x86-64.yaml | 255 +++++++++++++++ 5 files changed, 1214 insertions(+) create mode 100644 .github/workflows/OCV-Python-Linux-ARM64.yaml create mode 100644 .github/workflows/OCV-Python-Linux-x86-64.yaml create mode 100644 .github/workflows/OCV-Python-Windows-10.yaml create mode 100644 .github/workflows/OCV-Python-macOS-ARM64.yaml create mode 100644 .github/workflows/OCV-Python-macOS-x86-64.yaml diff --git a/.github/workflows/OCV-Python-Linux-ARM64.yaml b/.github/workflows/OCV-Python-Linux-ARM64.yaml new file mode 100644 index 00000000..78e5f1e7 --- /dev/null +++ b/.github/workflows/OCV-Python-Linux-ARM64.yaml @@ -0,0 +1,216 @@ +name: OCV Python:Linux ARM64 + +on: + pull_request: + branches: + - main + paths: + - '.github/workflows/OCV-Python-Linux-ARM64.yaml' + - '.github/workflows/OCV-Python-Rolling.yaml' + workflow_call: + inputs: + MATRIX_BRANCH: + required: false + type: string + +jobs: + Build: + runs-on: opencv-cn-lin-arm64 + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: ['3.6'] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + REPO_DIR: . + PROJECT_SPEC: opencv-python + MB_PYTHON_VERSION: ${{ matrix.python-version }} + TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }} + PLAT: aarch64 + MB_ML_VER: 2014 + TRAVIS_BUILD_DIR: ${{ github.workspace }} + CONFIG_PATH: travis_config.sh + DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-manylinux2014-aarch64:20220824 + USE_CCACHE: 0 + UNICODE_WIDTH: 32 + SDIST: ${{ matrix.build_sdist || 0 }} + ENABLE_HEADLESS: ${{ matrix.without_gui }} + 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 + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Build a package + run: source scripts/build.sh + - name: Saving all wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: wheelhouse/opencv*.whl + - name: Saving a wheel accordingly to matrix + uses: actions/upload-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }} + path: wheelhouse/opencv*.whl + + Test: + needs: [Build] + runs-on: opencv-cn-lin-arm64 + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + MB_PYTHON_VERSION: ${{ matrix.python-version }} + PLAT: aarch64 + NP_TEST_DEP: numpy==1.19.4 + NP_TEST_DEP_LATEST: numpy==1.21.4 + CONFIG_PATH: travis_config.sh + DOCKER_TEST_IMAGE: multibuild/focal_arm64v8 + UNICODE_WIDTH: 32 + steps: + - name: Cleanup + run: find . -mindepth 1 -delete + working-directory: ${{ github.workspace }} + - name: Setup environment + run: | + if [ "3.10" == "${{ 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 + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Update submodules + run: cd ${{ github.workspace }} && git submodule update --init --recursive + - name: Download a wheel accordingly to matrix + uses: actions/download-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ 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-20.04 + environment: opencv-python-rolling-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + with: + name: wheels + path: wheelhouse/ + - name: Upload wheels for opencv_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_python_rolling-* + - name: Upload wheels for opencv_contrib_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_contrib_python_rolling-* + - 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/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/opencv_contrib_python_headless_rolling-* + + Pre-release: + if: github.event_name == 'release' && github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: test-opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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: + if: github.event_name == 'release' && !github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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-* diff --git a/.github/workflows/OCV-Python-Linux-x86-64.yaml b/.github/workflows/OCV-Python-Linux-x86-64.yaml new file mode 100644 index 00000000..35ae8c6a --- /dev/null +++ b/.github/workflows/OCV-Python-Linux-x86-64.yaml @@ -0,0 +1,293 @@ +name: OCV Python:Linux x86_64 + +on: + pull_request: + branches: + - main + paths: + - '.github/workflows/OCV-Python-Linux-x86-64.yaml' + - '.github/workflows/OCV-Python-Rolling.yaml' + workflow_call: + inputs: + MATRIX_BRANCH: + required: false + type: string + + +jobs: + Build: + runs-on: ubuntu-20.04 + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: ['3.6'] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + 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: 2014 + TRAVIS_BUILD_DIR: ${{ github.workspace }} + CONFIG_PATH: travis_config.sh + DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-manylinux2014-x86-64:20220824 + USE_CCACHE: 0 + UNICODE_WIDTH: 32 + PLAT: x86_64 + SDIST: ${{ matrix.build_sdist || 0 }} + ENABLE_HEADLESS: ${{ matrix.without_gui }} + 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 + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Build a package + run: source scripts/build.sh + - name: Saving all wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: wheelhouse/opencv*.whl + - name: Saving a wheel accordingly to matrix + uses: actions/upload-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }} + path: wheelhouse/opencv*.whl + + Test: + needs: [Build] + runs-on: ubuntu-20.04 + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + MB_PYTHON_VERSION: ${{ matrix.python-version }} + NP_TEST_DEP: numpy==1.19.4 + NP_TEST_DEP_LATEST: numpy==1.21.2 + CONFIG_PATH: travis_config.sh + PLAT: x86_64 + steps: + - name: Cleanup + run: find . -mindepth 1 -delete + working-directory: ${{ github.workspace }} + - name: Setup environment + run: | + if [ "3.10" == "${{ 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 + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Update submodules + run: cd ${{ github.workspace }} && git submodule update --init --recursive + - name: Download a wheel accordingly to matrix + uses: actions/download-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }} + path: wheelhouse/ + - name: Package installation and run tests + run: source scripts/install.sh + + Build_sdist: + runs-on: ubuntu-20.04 + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: [3.8] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [1] + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + REPO_DIR: . + PROJECT_SPEC: opencv-python + PLAT: x86_64 + MB_PYTHON_VERSION: ${{ matrix.python-version }} + TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }} + MB_ML_VER: 2014 + NP_TEST_DEP: numpy==1.19.4 + TRAVIS_BUILD_DIR: ${{ github.workspace }} + CONFIG_PATH: travis_config.sh + DOCKER_IMAGE: quay.io/opencv-ci/opencv-python-manylinux2014-x86-64:20220628 + USE_CCACHE: 1 + UNICODE_WIDTH: 32 + SDIST: ${{ matrix.build_sdist || 0 }} + ENABLE_HEADLESS: ${{ matrix.without_gui || 0 }} + ENABLE_CONTRIB: ${{ matrix.with_contrib || 0 }} + 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 + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + architecture: ${{ matrix.platform }} + - name: Build a package + run: | + set -e + # Build and package + set -x + python -m pip install --upgrade pip + python -m pip install scikit-build + python setup.py sdist --formats=gztar + set +x + # Install and run tests + set -x + echo "skipping tests because of sdist" + - name: saving artifacts + uses: actions/upload-artifact@v3 + with: + name: wheels + path: dist/opencv*.tar.gz + + Release_rolling: + if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-rolling-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + with: + name: wheels + path: wheelhouse/ + - name: Upload wheels for opencv_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_python_rolling-* + - name: Upload wheels for opencv_contrib_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_contrib_python_rolling-* + - 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/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/opencv_contrib_python_headless_rolling-* + + Pre-release: + if: github.event_name == 'release' && github.event.release.prerelease + needs: [Build, Build_sdist, Test] + runs-on: ubuntu-20.04 + environment: test-opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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_* wheelhouse/opencv-* + + Release: + if: github.event_name == 'release' && !github.event.release.prerelease + needs: [Build, Build_sdist, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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-* wheelhouse/opencv-python-[^h]* + - 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-* wheelhouse/opencv-contrib-python-[^h]* + - 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-* 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-* wheelhouse/opencv-contrib-python-headless-* diff --git a/.github/workflows/OCV-Python-Windows-10.yaml b/.github/workflows/OCV-Python-Windows-10.yaml new file mode 100644 index 00000000..eca36208 --- /dev/null +++ b/.github/workflows/OCV-Python-Windows-10.yaml @@ -0,0 +1,238 @@ +name: OCV Python:Windows 10 x86_64 + +on: + pull_request: + branches: + - main + paths: + - '.github/workflows/OCV-Python-Windows-10.yaml' + - '.github/workflows/OCV-Python-Rolling.yaml' + workflow_call: + inputs: + MATRIX_BRANCH: + required: false + type: string + + +jobs: + Build: + runs-on: windows-2019 + strategy: + fail-fast: false + matrix: + python-version: ['3.6'] + platform: [x86, x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + 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: Cleanup + shell: bash + run: | + rm -rf ./* || true + rm -rf ./.??* || true + working-directory: ${{ github.workspace }} + - name: Setup environment + shell: bash + run: | + if [[ "${{ github.event_name }}" == "schedule" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then + echo "ENABLE_ROLLING=1" >> $GITHUB_ENV + fi + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + architecture: ${{ matrix.platform }} + - name: Setup MSBuild.exe + uses: microsoft/setup-msbuild@v1.1 + - name: Build a package + run: | + python --version + python -m pip install --upgrade pip + python -m pip install --upgrade setuptools + python -m pip install toml && python -c "import toml; c = toml.load('pyproject.toml'); print('\n'.join(c['build-system']['requires']))" >> requirements.txt | python -m pip install -r requirements.txt + set "CI_BUILD=1" && python setup.py bdist_wheel --py-limited-api=cp36 --dist-dir=%cd%\wheelhouse -v + shell: cmd + - name: Saving all wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: wheelhouse/opencv*.whl + - name: Saving a wheel accordingly to matrix + uses: actions/upload-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }}-${{ matrix.platform }} + path: wheelhouse/opencv* + + Test: + needs: [Build] + runs-on: windows-2019 + defaults: + run: + shell: cmd + strategy: + fail-fast: false + matrix: + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] + platform: [x86, x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + OPENCV_TEST_DATA_PATH: ${{ github.workspace }}\opencv_extra\testdata + PYLINT_TEST_FILE: ${{ github.workspace }}\opencv\samples\python\squares.py + steps: + - name: Cleanup + shell: bash + run: | + rm -rf ./* || true + rm -rf ./.??* || true + working-directory: ${{ github.workspace }} + - name: Setup environment + shell: bash + run: | + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Update submodules + run: cd ${{ github.workspace }} && git submodule update --init --recursive + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + architecture: ${{ matrix.platform }} + - name: Download a wheel accordingly to matrix + uses: actions/download-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }}-${{ matrix.platform }} + path: wheelhouse/ + - name: Package installation + run: | + cd ${{ github.workspace }}/tests + &python -m pip install --user --no-warn-script-location (ls "../wheelhouse/opencv*.whl") + if ($LastExitCode -ne 0) {throw $LastExitCode} + python get_build_info.py + shell: powershell + - name: Run tests + run: | + cd ${{ github.workspace }}/opencv + python modules\python\test\test.py -v --repo . + - name: Pylint test + run: | + python -m pip install pylint==2.12.2 + cd ${{ github.workspace }}\tests + python -m pylint $PYLINT_TEST_FILE + + Release_rolling: + if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-rolling-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + with: + name: wheels + path: wheelhouse/ + - name: Upload wheels for opencv_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_python_rolling-* + - name: Upload wheels for opencv_contrib_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_contrib_python_rolling-* + - 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/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/opencv_contrib_python_headless_rolling-* + + Pre-release: + if: github.event_name == 'release' && github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: test-opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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: + if: github.event_name == 'release' && !github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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-* diff --git a/.github/workflows/OCV-Python-macOS-ARM64.yaml b/.github/workflows/OCV-Python-macOS-ARM64.yaml new file mode 100644 index 00000000..31a5b23e --- /dev/null +++ b/.github/workflows/OCV-Python-macOS-ARM64.yaml @@ -0,0 +1,212 @@ +name: OCV Python:macOS ARM64 + +on: + pull_request: + branches: + - main + paths: + - '.github/workflows/OCV-Python-macOS-ARM64.yaml' + - '.github/workflows/OCV-Python-Rolling.yaml' + workflow_call: + inputs: + MATRIX_BRANCH: + required: false + type: string + + +jobs: + Build: + runs-on: opencv-cn-mac-arm64 + strategy: + fail-fast: false + matrix: + python-version: ['3.7'] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + env: + CI_BUILD: 1 + SDIST: ${{ matrix.build_sdist || 0 }} + ENABLE_HEADLESS: ${{ matrix.without_gui }} + 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 + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Build a package + run: | + git submodule update --init multibuild + echo $ENABLE_CONTRIB > contrib.enabled + echo $ENABLE_HEADLESS > headless.enabled + export MACOSX_DEPLOYMENT_TARGET=11.0 + arch -arm64 python${{ matrix.python-version }} -m pip install toml && python${{ matrix.python-version }} -c 'import toml; c = toml.load("pyproject.toml"); print("\n".join(c["build-system"]["requires"]))' | python${{ matrix.python-version }} -m pip install -r /dev/stdin + arch -arm64 python${{ matrix.python-version }} setup.py bdist_wheel --py-limited-api=cp37 --dist-dir=wheelhouse -v + delocate-wheel ${{ github.workspace }}/wheelhouse/opencv* + - name: Saving all wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: wheelhouse/opencv*.whl + - name: Saving a wheel accordingly to matrix + uses: actions/upload-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }} + path: wheelhouse/opencv*.whl + + Test: + needs: [Build] + runs-on: opencv-cn-mac-arm64-tests + strategy: + fail-fast: false + matrix: + python-version: ['3.7', '3.8', '3.9', '3.10'] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + env: + OPENCV_TEST_DATA_PATH: ${{ github.workspace }}/opencv_extra/testdata + PYLINT_TEST_FILE: ${{ github.workspace }}/opencv/samples/python/squares.py + steps: + - name: Cleanup + run: find . -mindepth 1 -delete + working-directory: ${{ github.workspace }} + - name: Setup environment + run: | + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Update submodules + run: cd ${{ github.workspace }} && git submodule update --init --recursive + - name: Download a wheel accordingly to matrix + uses: actions/download-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }} + path: wheelhouse/ + - name: Package installation + run: | + 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 tests + run: | + cd ${{ github.workspace }}/opencv + arch -arm64 python${{ matrix.python-version }} modules/python/test/test.py -v --repo . + - name: Pylint test + run: | + arch -arm64 python${{ matrix.python-version }} -m pip install pylint==2.12.2 + cd ${{ github.workspace }}/tests + arch -arm64 python${{ matrix.python-version }} -m pylint $PYLINT_TEST_FILE + + Release_rolling: + if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-rolling-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + with: + name: wheels + path: wheelhouse/ + - name: Upload wheels for opencv_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_python_rolling-* + - name: Upload wheels for opencv_contrib_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_contrib_python_rolling-* + - 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/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/opencv_contrib_python_headless_rolling-* + + Pre-release: + if: github.event_name == 'release' && github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: test-opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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: + if: github.event_name == 'release' && !github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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-* diff --git a/.github/workflows/OCV-Python-macOS-x86-64.yaml b/.github/workflows/OCV-Python-macOS-x86-64.yaml new file mode 100644 index 00000000..65e1f8a4 --- /dev/null +++ b/.github/workflows/OCV-Python-macOS-x86-64.yaml @@ -0,0 +1,255 @@ +name: OCV Python:macOS x86_64 + +on: + pull_request: + branches: + - main + paths: + - '.github/workflows/OCV-Python-macOS-x86-64.yaml' + - '.github/workflows/OCV-Python-Rolling.yaml' + workflow_call: + inputs: + MATRIX_BRANCH: + required: false + type: string + + +jobs: + Build: + runs-on: macos-11 + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: ['3.6'] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + 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: 2014 + TRAVIS_BUILD_DIR: ${{ github.workspace }} + TRAVIS_OS_NAME: osx + CONFIG_PATH: travis_config.sh + USE_CCACHE: 1 + UNICODE_WIDTH: 32 + PLAT: x86_64 + FFMPEG_FORMULA_VERSION: '@4' + SDIST: ${{ matrix.build_sdist || 0 }} + ENABLE_HEADLESS: ${{ matrix.without_gui }} + ENABLE_CONTRIB: ${{ matrix.with_contrib }} + MACOSX_DEPLOYMENT_TARGET: 10.13 + 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 + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + - name: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Build a package + run: | + set -e + # Check out and prepare the source + # Multibuild doesn't have releases, so --depth would break eventually (see + # https://superuser.com/questions/1240216/server-does-not-allow-request-for-unadvertised) + git submodule update --init multibuild + source multibuild/common_utils.sh + # https://github.com/matthew-brett/multibuild/issues/116 + if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export ARCH_FLAGS=" "; fi + source multibuild/travis_steps.sh + # This sets -x + # source travis_multibuild_customize.sh + echo $ENABLE_CONTRIB > contrib.enabled + echo $ENABLE_HEADLESS > headless.enabled + set -x + build_wheel $REPO_DIR $PLAT + - name: Saving all wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: wheelhouse/opencv*.whl + - name: Saving a wheel accordingly to matrix + uses: actions/upload-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }} + path: wheelhouse/opencv*.whl + + Test: + needs: [Build] + runs-on: macos-11 + defaults: + run: + shell: bash + strategy: + fail-fast: false + matrix: + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] + platform: [x64] + with_contrib: [0, 1] + without_gui: [0, 1] + build_sdist: [0] + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + MB_PYTHON_VERSION: ${{ matrix.python-version }} + NP_TEST_DEP: numpy==1.19.4 + NP_TEST_DEP_LATEST: numpy==1.21.4 + CONFIG_PATH: travis_config.sh + PLAT: x86_64 + OPENCV_TEST_DATA_PATH: ${{ github.workspace }}/opencv_extra/testdata + PYLINT_TEST_FILE: ${{ github.workspace }}/opencv/samples/python/squares.py + steps: + - name: Cleanup + run: find . -mindepth 1 -delete + working-directory: ${{ github.workspace }} + - name: Setup environment + run: | + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" != "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV + echo "SOURCE_BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV + echo "PR_AUTHOR_FORK=${{ github.event.pull_request.head.repo.full_name }}" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.repository.name }}" == "ci-gha-workflow" ]]; then + echo "CLONE_BRANCH=4.x" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "CLONE_BRANCH=${{ inputs.MATRIX_BRANCH }}" >> $GITHUB_ENV + else + echo "CLONE_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV + fi + if [ "3.10" == "${{ 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: Clone + run: git clone --branch ${{ env.CLONE_BRANCH }} https://github.com/opencv/opencv-python.git ${{ github.workspace }} + - name: Merge with a test branch + if: ${{ github.event_name == 'pull_request' && github.event.repository.name != 'ci-gha-workflow' }} + run: cd ${{ github.workspace }} && git pull -v "https://github.com/${{ env.PR_AUTHOR_FORK }}" "${{ env.SOURCE_BRANCH_NAME }}" + - name: Update submodules + run: cd ${{ github.workspace }} && git submodule update --init --recursive + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + architecture: ${{ matrix.platform }} + - name: Download a wheel accordingly to matrix + uses: actions/download-artifact@v3 + with: + name: wheel-${{ matrix.with_contrib }}-${{ matrix.without_gui }}-${{ matrix.build_sdist }} + path: wheelhouse/ + - name: Package installation + run: | + python -m pip install wheelhouse/opencv*.whl + cd ${{ github.workspace }}/tests + python get_build_info.py + - name: Run tests + run: | + cd ${{ github.workspace }}/opencv + python modules/python/test/test.py -v --repo . + - name: Pylint test + run: | + python -m pip install pylint==2.12.2 + cd ${{ github.workspace }}/tests + python -m pylint $PYLINT_TEST_FILE + + Release_rolling: + if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-rolling-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + with: + name: wheels + path: wheelhouse/ + - name: Upload wheels for opencv_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_python_rolling-* + - name: Upload wheels for opencv_contrib_python_rolling + run: | + python -m pip install twine + python -m twine upload -u ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_USERNAME }} -p ${{ secrets.OPENCV_CONTRIB_PYTHON_ROLLING_PASSWORD }} --skip-existing wheelhouse/opencv_contrib_python_rolling-* + - 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/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/opencv_contrib_python_headless_rolling-* + + Pre-release: + if: github.event_name == 'release' && github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: test-opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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: + if: github.event_name == 'release' && !github.event.release.prerelease + needs: [Build, Test] + runs-on: ubuntu-20.04 + environment: opencv-python-release + defaults: + run: + shell: bash + steps: + - uses: actions/download-artifact@v3 + 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-*