build_wheels_linux.yml 6.8 KB
Newer Older
1
name: Build PYPI wheels for opencv-python on Linux x86_64
2 3 4 5 6

on:
  pull_request:
    branches:
      - master
A
Andrey Senyaev 已提交
7 8 9 10
    paths-ignore:
      - '.github/workflows/build_wheels_linux_arm.yml'
      - '.github/workflows/build_wheels_windows*'
      - '.github/workflows/build_wheels_macos*'
11 12 13 14 15 16 17 18 19 20 21 22 23 24
  release:
    types: [published, edited]


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

    strategy:
      fail-fast: false
      matrix:
25
        os: [ubuntu-latest]
26 27 28 29 30 31 32 33 34 35 36 37 38 39
        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 }}
      MB_ML_VER: 2014
40
      NP_TEST_DEP: numpy==1.19.4
41 42 43 44 45
      TRAVIS_BUILD_DIR: ${{ github.workspace }}
      CONFIG_PATH: travis_config.sh
      DOCKER_IMAGE: quay.io/skvark/manylinux2014_${PLAT}
      USE_CCACHE: 1
      UNICODE_WIDTH: 32
46
      SDIST: ${{ matrix.build_sdist || 0 }}
47 48 49 50 51 52 53
      ENABLE_HEADLESS: ${{ matrix.without_gui }}
      ENABLE_CONTRIB: ${{ matrix.with_contrib }}

    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
54
        submodules: false
55 56 57
        fetch-depth: 0

    - name: Update submodules
58 59
      if: github.event_name == 'pull_request'
      run: git submodule update --remote
60 61 62 63 64 65 66 67 68

    - name: Setup Environment variables
      run: |
        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
        echo "BUILD_DEPENDS=$(echo $NP_BUILD_DEP)" >> $GITHUB_ENV;
        echo "TEST_DEPENDS=$(echo $NP_TEST_DEP)" >> $GITHUB_ENV;

69
    - name: build
70
      run: source scripts/build.sh
71 72

    - name: install and test
73
      run: source scripts/install.sh
A
Andrey Senyaev 已提交
74

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
    - name: saving artifacts
      uses: actions/upload-artifact@v2
      with:
        name: wheels
        path: wheelhouse/opencv*.whl


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

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        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: .
      BUILD_COMMIT: master
      PROJECT_SPEC: opencv-python
      PLAT: x86_64
      MB_PYTHON_VERSION: ${{ matrix.python-version }}
      TRAVIS_PYTHON_VERSION: ${{ matrix.python-version }}
      MB_ML_VER: 2014
107
      NP_TEST_DEP: numpy==1.19.4
108 109 110 111 112
      TRAVIS_BUILD_DIR: ${{ github.workspace }}
      CONFIG_PATH: travis_config.sh
      DOCKER_IMAGE: quay.io/skvark/manylinux2014_${PLAT}
      USE_CCACHE: 1
      UNICODE_WIDTH: 32
113
      SDIST: ${{ matrix.build_sdist || 0 }}
114
      ENABLE_HEADLESS: ${{ matrix.without_gui || 0 }}
115
      ENABLE_CONTRIB: ${{ matrix.with_contrib || 0 }}
116 117 118 119 120

    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
121
        submodules: false
122 123 124
        fetch-depth: 0

    - name: Update submodules
125 126
      if: github.event_name == 'pull_request'
      run: git submodule update --remote
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
        architecture: ${{ matrix.platform }}

    - name: Setup Environment variables
      run: |
        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;
        echo "TEST_DEPENDS=$(echo $NP_TEST_DEP)" >> $GITHUB_ENV;

    - name: before install
      run: |
        set -e
        # Build and package
        set -x
          python -m pip install --upgrade pip
          python -m pip install scikit-build
          python setup.py sdist
        set +x
        # Install and run tests
        set -x
        echo "skipping tests because of sdist"
A
Andrey Senyaev 已提交
153

154 155 156 157 158 159
    - name: saving artifacts
      uses: actions/upload-artifact@v2
      with:
        name: wheels
        path: dist/opencv*.tar.gz

160 161
  test_release_opencv_python:
    if: github.event_name == 'release' && github.event.release.prerelease
162
    needs: [build, build_sdist]
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
    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_*

179
  release_opencv_python:
180
    if: github.event_name == 'release' && !github.event.release.prerelease
181
    needs: [build, build_sdist]
182 183 184 185 186 187 188 189 190 191
    runs-on: ubuntu-latest
    environment: opencv-python-release
    defaults:
      run:
        shell: bash
    steps:
      - uses: actions/download-artifact@v2
        with:
          name: wheels
          path: wheelhouse/
192

193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
      - 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-*