Skip to content

Commit

Permalink
Merge pull request #483 from asenyaev/asen/arm_build
Browse files Browse the repository at this point in the history
Add arm build to GitHub Actions
  • Loading branch information
asmorkalov authored Jun 4, 2021
2 parents ffd6b4b + 83deed8 commit 7a751f7
Show file tree
Hide file tree
Showing 11 changed files with 498 additions and 117 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build PYPI wheels for opencv-python
name: Build PYPI wheels for opencv-python on Linux x86_64

on:
pull_request:
Expand All @@ -9,75 +9,6 @@ on:


jobs:
build-windows-x86_64:
runs-on: ${{ matrix.os }}
defaults:
run:
shell: powershell

strategy:
fail-fast: false
matrix:
os: [windows-latest]
python-version: [3.6, 3.7, 3.8, 3.9]
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 }}

steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: true
fetch-depth: 0

- name: Update submodules
run: |
git submodule update --remote
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.platform }}

- name: Setup MSBuild.exe
uses: warrenbuckley/Setup-MSBuild@v1

- name: build script
run: |
python --version
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
set "CI_BUILD=1" && python -m pip wheel --wheel-dir=%cd%\wheelhouse . --verbose
shell: cmd

- name: before test
run: |
cd ${{ github.workspace }}/tests
&python -m pip install --user --no-warn-script-location (ls "../wheelhouse/opencv*.whl")
if ($LastExitCode -ne 0) {throw $LastExitCode}
shell: powershell

- name: run test
run: |
cd ${{ github.workspace }}/tests
python -m unittest test
shell: cmd

- name: saving artifacts
uses: actions/upload-artifact@v2
with:
name: wheels
path: wheelhouse/opencv*.whl

build:
runs-on: ${{ matrix.os }}
defaults:
Expand All @@ -87,7 +18,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest]
python-version: [3.6, 3.7, 3.8, 3.9]
platform: [x64]
with_contrib: [0, 1]
Expand All @@ -102,63 +33,41 @@ jobs:
MB_PYTHON_VERSION: ${{ matrix.python-version }}
TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }}
MB_ML_VER: 2014
NP_TEST_DEP: numpy
NP_TEST_DEP: numpy==1.19.4
TRAVIS_BUILD_DIR: ${{ github.workspace }}
CONFIG_PATH: travis_config.sh
DOCKER_IMAGE: quay.io/skvark/manylinux2014_${PLAT}
USE_CCACHE: 1
UNICODE_WIDTH: 32
SDIST: ${{ matrix.build_sdist || 0}}
SDIST: ${{ matrix.build_sdist || 0 }}
ENABLE_HEADLESS: ${{ matrix.without_gui }}
ENABLE_CONTRIB: ${{ matrix.with_contrib }}

steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: true
submodules: false
fetch-depth: 0

- name: Update submodules
run: |
git submodule update --remote
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
if: ${{ 'macos-latest' == matrix.os }}
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.platform }}
if: github.event_name == 'pull_request'
run: git submodule update --remote

- name: Setup Environment variables
run: |
if [ "macos-latest" == "${{ matrix.os }}" ]; then echo "TRAVIS_OS_NAME=osx" >> $GITHUB_ENV; else echo "TRAVIS_OS_NAME=${{ matrix.os }}" >> $GITHUB_ENV; fi
if [ "schedule" == "${{ github.event_name }}" ]; then echo "TRAVIS_EVENT_TYPE=cron" >> $GITHUB_ENV; else echo "TRAVIS_EVENT_TYPE=${{ github.event_name }}" >> $GITHUB_ENV; fi
if [ "schedule" == "${{ github.event_name }}" ]; then echo "BUILD_COMMIT=master" >> $GITHUB_ENV; else echo "BUILD_COMMIT=$BUILD_COMMIT" >> $GITHUB_ENV; fi
if [ "x64" == "${{ matrix.platform }}" ]; then echo "PLAT=x86_64" >> $GITHUB_ENV; fi
if [ "x86" == "${{ matrix.platform }}" ]; then echo "PLAT=i686" >> $GITHUB_ENV; fi
echo "BUILD_DEPENDS=$(echo $NP_BUILD_DEP)" >> $GITHUB_ENV;
echo "TEST_DEPENDS=$(echo $NP_TEST_DEP)" >> $GITHUB_ENV;
- name: before install
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
install_run $PLAT
set +x
- name: build
run: source scripts/build.sh

- name: install and test
run: source scripts/install.sh

- name: saving artifacts
uses: actions/upload-artifact@v2
with:
Expand Down Expand Up @@ -191,26 +100,26 @@ jobs:
MB_PYTHON_VERSION: ${{ matrix.python-version }}
TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }}
MB_ML_VER: 2014
NP_TEST_DEP: numpy
NP_TEST_DEP: numpy==1.19.4
TRAVIS_BUILD_DIR: ${{ github.workspace }}
CONFIG_PATH: travis_config.sh
DOCKER_IMAGE: quay.io/skvark/manylinux2014_${PLAT}
USE_CCACHE: 1
UNICODE_WIDTH: 32
SDIST: ${{ matrix.build_sdist || 0}}
SDIST: ${{ matrix.build_sdist || 0 }}
ENABLE_HEADLESS: ${{ matrix.without_gui || 0 }}
ENABLE_CONTRIB: ${{ matrix.with_contrib || 0}}
ENABLE_CONTRIB: ${{ matrix.with_contrib || 0 }}

steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: true
submodules: false
fetch-depth: 0

- name: Update submodules
run: |
git submodule update --remote
if: github.event_name == 'pull_request'
run: git submodule update --remote

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
Expand All @@ -220,7 +129,6 @@ jobs:

- name: Setup Environment variables
run: |
if [ "macos-latest" == "${{ matrix.os }}" ]; then echo "TRAVIS_OS_NAME=osx" >> $GITHUB_ENV; else echo "TRAVIS_OS_NAME=${{ matrix.os }}" >> $GITHUB_ENV; fi
if [ "schedule" == "${{ github.event_name }}" ]; then echo "TRAVIS_EVENT_TYPE=cron" >> $GITHUB_ENV; else echo "TRAVIS_EVENT_TYPE=${{ github.event_name }}" >> $GITHUB_ENV; fi
if [ "schedule" == "${{ github.event_name }}" ]; then echo "BUILD_COMMIT=master" >> $GITHUB_ENV; else echo "BUILD_COMMIT=$BUILD_COMMIT" >> $GITHUB_ENV; fi
echo "BUILD_DEPENDS=$(echo $NP_BUILD_DEP)" >> $GITHUB_ENV;
Expand All @@ -238,6 +146,7 @@ jobs:
# Install and run tests
set -x
echo "skipping tests because of sdist"
- name: saving artifacts
uses: actions/upload-artifact@v2
with:
Expand All @@ -246,7 +155,7 @@ jobs:

test_release_opencv_python:
if: github.event_name == 'release' && github.event.release.prerelease
needs: [build, build-windows-x86_64, build_sdist]
needs: [build, build_sdist]
runs-on: ubuntu-latest
environment: test-opencv-python-release
defaults:
Expand All @@ -265,7 +174,7 @@ jobs:
release_opencv_python:
if: github.event_name == 'release' && !github.event.release.prerelease
needs: [build, build-windows-x86_64, build_sdist]
needs: [build, build_sdist]
runs-on: ubuntu-latest
environment: opencv-python-release
defaults:
Expand Down
128 changes: 128 additions & 0 deletions .github/workflows/build_wheels_linux_arm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
name: Build PYPI wheels for opencv-python on Linux ARM

on:
pull_request:
branches:
- master
release:
types: [published, edited]


jobs:
build_arm:
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash

strategy:
fail-fast: false
matrix:
os: [ARM64]
python-version: [3.6, 3.7, 3.8, 3.9]
platform: [x64]
with_contrib: [0, 1]
without_gui: [0, 1]
build_sdist: [0]

env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
REPO_DIR: .
BUILD_COMMIT: master
PROJECT_SPEC: opencv-python
MB_PYTHON_VERSION: ${{ matrix.python-version }}
TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }}
PLAT: aarch64
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/skvark/manylinux2014_${PLAT}
DOCKER_TEST_IMAGE: multibuild/xenial_arm64v8
USE_CCACHE: 0
UNICODE_WIDTH: 32
SDIST: ${{ matrix.build_sdist || 0 }}
ENABLE_HEADLESS: ${{ matrix.without_gui }}
ENABLE_CONTRIB: ${{ matrix.with_contrib }}

steps:
- name: Cleanup
if: always()
uses: AutoModality/action-clean@v1

- name: Checkout
uses: actions/checkout@v2
with:
submodules: false
fetch-depth: 0

- name: Setup Environment variables
run: |
if [ "ARM64" == "${{ matrix.os }}" ]; then echo "PLAT=aarch64" >> $GITHUB_ENV; fi
echo "BUILD_DEPENDS=$(echo $NP_BUILD_DEP)" >> $GITHUB_ENV;
echo "TEST_DEPENDS=$(echo $NP_TEST_DEP)" >> $GITHUB_ENV;
- name: build
run: source scripts/build.sh

- name: install and test
run: source scripts/install.sh

- 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_arm]
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_arm]
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-*
Loading

0 comments on commit 7a751f7

Please sign in to comment.