Skip to content

CI

CI #202

Workflow file for this run

name: CI
on:
schedule:
- cron: "0 0 * * *"
push:
pull_request:
workflow_dispatch:
jobs:
build-opencv:
name: Build OpenCV
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-13
- macos-14
defaults:
run:
shell: bash
env:
SCCACHE_GHA_ENABLED: true
runs-on: ${{ matrix.os }}
steps:
- name: Get latest release
id: latest-release
run: |
curl -s https://api.github.com/repos/opencv/opencv/releases/latest \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
| jq -r '.tag_name' | tee latest-release.txt
echo "tag=$(cat latest-release.txt)" >> $GITHUB_OUTPUT
- uses: actions/checkout@v3
with:
repository: opencv/opencv
ref: ${{ steps.latest-release.outputs.tag }}
- uses: mozilla-actions/sccache-action@v0.0.3
- uses: ilammy/msvc-dev-cmd@v1
id: msvc-env
if: startsWith(matrix.os, 'windows')
- name: Setup MSVC environment
if: steps.msvc-env.conclusion == 'success'
run: |
echo "CMAKE_GENERATOR=Ninja" >> $GITHUB_ENV
echo "CC=cl" >> $GITHUB_ENV
echo "CXX=cl" >> $GITHUB_ENV
- name: CMake build
run: |
mkdir build
cd build
cmake .. \
-D CMAKE_INSTALL_PREFIX=../opencv \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_C_COMPILER_LAUNCHER=sccache \
-D CMAKE_CXX_COMPILER_LAUNCHER=sccache \
-D BUILD_LIST=core,imgproc,features2d \
-D BUILD_SHARED_LIBS=OFF \
-D ENABLE_CCACHE=ON \
-D WITH_ADE=OFF \
-D WITH_PROTOBUF=OFF \
-D WITH_QUIRC=OFF \
-D WITH_ITT=OFF \
-D WITH_OPENEXR=OFF \
-D WITH_WEBP=OFF \
-D WITH_JASPER=OFF \
-D WITH_OPENJPEG=OFF \
-D WITH_JPEG=OFF \
-D WITH_PNG=OFF \
-D WITH_TIFF=OFF
cmake --build . --target install --parallel 4
- uses: actions/upload-artifact@v3
with:
name: opencv-${{ matrix.os }}
path: ./opencv
build:
name: Build Wheel
needs: [build-opencv]
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-13
- macos-14
python: ["3.8", "3.9", "3.10", "3.11", "3.12"]
exclude:
- os: macos-14
python: "3.8"
- os: macos-14
python: "3.9"
defaults:
run:
shell: bash
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: opencv-${{ matrix.os }}
path: ./opencv
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- uses: ilammy/msvc-dev-cmd@v1
id: msvc-env
if: startsWith(matrix.os, 'windows')
- name: Setup MSVC environment
if: steps.msvc-env.conclusion == 'success'
run: |
CV_DIR=$(find ./opencv/x64 | grep -i '\.cmake$' | head -n 1)
echo "OpenCV_DIR=$(realpath $(dirname $CV_DIR))" >> $GITHUB_ENV
echo "OpenCV_STATIC=ON" >> $GITHUB_ENV
- name: Setup Unix environment
if: steps.msvc-env.conclusion == 'skipped'
run: |
echo "OpenCV_DIR=$(pwd)/opencv/lib/cmake/opencv4" >> $GITHUB_ENV
echo "OpenCV_STATIC=ON" >> $GITHUB_ENV
- name: Build wheel
env:
VERBOSE: 1
run: |
pip install poetry
poetry build --format wheel
- uses: actions/upload-artifact@v3
with:
name: wheel-${{matrix.os}}-${{matrix.python}}
path: ./dist/*.whl
- name: Test wheel import
env:
SYSTEM_VERSION_COMPAT: 0
run: |
pip install dist/*.whl
python -vc "from orb_slam3 import ORBExtractor"
test:
name: Test Wheel
needs: [build]
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-13
- macos-14
python: ["3.8", "3.9", "3.10", "3.11", "3.12"]
exclude:
- os: macos-14
python: "3.8"
- os: macos-14
python: "3.9"
defaults:
run:
shell: bash
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Download wheel
uses: actions/download-artifact@v3
with:
name: wheel-${{matrix.os}}-${{matrix.python}}
path: ./dist
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: Install Poetry
run: |
pip install poetry
- name: Install dependencies
run: |
poetry install --no-root --only=test
poetry run pip install dist/*.whl
- name: Run tests
run: |
poetry run pytest
cleanup:
name: Cleanup artifacts
runs-on: ubuntu-latest
needs: [build, test]
steps:
- uses: geekyeggo/delete-artifact@v2
with:
name: opencv-*
- uses: actions/download-artifact@v3
- name: Merge wheels
run: |
mkdir dist
cp -v wheel-*/*.whl dist/
- uses: actions/upload-artifact@v3
with:
name: wheel-all
path: ./dist/*.whl
release:
name: Release
needs: [cleanup]
if: startsWith(github.ref, 'refs/tags/v') && github.head_ref == ''
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: wheel-all
path: ./dist
- name: Install Poetry
run: |
pipx install poetry
- name: Publish to PyPI
env:
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_TOKEN }}
run: |
poetry build --format sdist
poetry publish --skip-existing