Skip to content

macOS CI

macOS CI #20

Workflow file for this run

name: macOS
on:
pull_request:
types: [synchronize, opened]
push:
branches:
- main
env:
DEBIAN_FRONTEND: noninteractive
OPENCV_VERSION: 4.13.0
OPENCV_CACHE_VERSION: 4
jobs:
build:
strategy:
matrix:
include:
- runner: macos-14
arch: arm64
runtime_id: osx-arm64
csproj: OpenCvSharp4.runtime.osx-arm64.csproj
artifact_name: artifacts_macos_arm64
brew_prefix: /opt/homebrew
- runner: macos-15-intel
arch: x64
runtime_id: osx-x64
csproj: OpenCvSharp4.runtime.osx-x64.csproj
artifact_name: artifacts_macos_x64
brew_prefix: /usr/local
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v6
with:
path: opencvsharp
fetch-depth: 1
- name: Install build dependencies
run: |
brew install wget pkg-config mono-libgdiplus gtk+ ffmpeg@4 glog yasm harfbuzz jpeg libpng libtiff openjpeg metis openblas opencore-amr protobuf tbb webp # openexr
- name: Cache OpenCV
id: opencv-cache
uses: actions/cache@v5
with:
path: ${{ github.workspace }}/opencv_macos/
key: opencv-${{ env.OPENCV_VERSION }}-macos-${{ matrix.arch }}-rev${{ env.OPENCV_CACHE_VERSION }}
- name: Checkout OpenCV
if: steps.opencv-cache.outputs.cache-hit != 'true'
uses: actions/checkout@v6
with:
repository: opencv/opencv
path: opencv
ref: ${{ env.OPENCV_VERSION }}
- name: Checkout OpenCV Contrib
if: steps.opencv-cache.outputs.cache-hit != 'true'
uses: actions/checkout@v6
with:
repository: opencv/opencv_contrib
path: opencv_contrib
ref: ${{ env.OPENCV_VERSION }}
- name: Build OpenCV
if: steps.opencv-cache.outputs.cache-hit != 'true'
run: |
pwd
cmake \
-S opencv \
-B opencv/build \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_PREFIX_PATH=${{ matrix.brew_prefix }} \
-D OPENCV_EXTRA_MODULES_PATH=${GITHUB_WORKSPACE}/opencv_contrib/modules \
-D BUILD_SHARED_LIBS=OFF \
-D ENABLE_CXX11=ON \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_JAVA=OFF \
-D BUILD_opencv_java_bindings_generator=OFF \
-D BUILD_opencv_python_bindings_generator=OFF \
-D BUILD_opencv_python_tests=OFF \
-D BUILD_opencv_ts=OFF \
-D BUILD_opencv_js=OFF \
-D BUILD_opencv_js_bindings_generator=OFF \
-D BUILD_opencv_apps=OFF \
-D BUILD_opencv_barcode=OFF \
-D BUILD_opencv_bioinspired=OFF \
-D BUILD_opencv_ccalib=OFF \
-D BUILD_opencv_datasets=OFF \
-D BUILD_opencv_dnn_objdetect=OFF \
-D BUILD_opencv_dpm=OFF \
-D BUILD_opencv_fuzzy=OFF \
-D BUILD_opencv_gapi=OFF \
-D BUILD_opencv_intensity_transform=OFF \
-D BUILD_opencv_mcc=OFF \
-D BUILD_opencv_objc_bindings_generator=OFF \
-D BUILD_opencv_rapid=OFF \
-D BUILD_opencv_reg=OFF \
-D BUILD_opencv_stereo=OFF \
-D BUILD_opencv_structured_light=OFF \
-D BUILD_opencv_surface_matching=OFF \
-D BUILD_opencv_wechat_qrcode=ON \
-D BUILD_opencv_videostab=OFF \
-D Protobuf_ROOT=${{ matrix.brew_prefix }} \
-D Protobuf_DIR=${{ matrix.brew_prefix }}/lib/cmake/protobuf \
-D PROTOBUF_UPDATE_FILES=ON \
-D WITH_VULKAN=OFF \
-D WITH_OPENCL=OFF \
-D WITH_GSTREAMER=OFF \
-D WITH_EIGEN=OFF \
-D WITH_ADE=OFF \
-D WITH_OPENEXR=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_macos
cmake --build opencv/build -j
cmake --install opencv/build
ls
- name: Build OpenCvSharpExtern
run: |
export Protobuf_ROOT=${{ matrix.brew_prefix }}
export Protobuf_DIR=${{ matrix.brew_prefix }}/lib/cmake/protobuf
cmake \
-S opencvsharp/src \
-B opencvsharp/src/build \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_PREFIX_PATH="${GITHUB_WORKSPACE}/opencv_macos;${{ matrix.brew_prefix }}" \
-D Protobuf_ROOT=${{ matrix.brew_prefix }} \
-D Protobuf_DIR=${{ matrix.brew_prefix }}/lib/cmake/protobuf
cmake --build opencvsharp/src/build -j
ls opencvsharp/src/build
ls opencvsharp/src/build/OpenCvSharpExtern
cp opencvsharp/src/build/OpenCvSharpExtern/libOpenCvSharpExtern.dylib ${GITHUB_WORKSPACE}/opencvsharp/nuget/
- name: Check OpenCvSharpExtern
run: |
cd ${GITHUB_WORKSPACE}/opencvsharp/nuget/
otool -L libOpenCvSharpExtern.dylib
nm libOpenCvSharpExtern.dylib
echo -ne "#include <stdio.h> \n int core_Mat_sizeof(); int main(){ int i = core_Mat_sizeof(); printf(\"sizeof(Mat) = %d\", i); return 0; }" > test.c
gcc -I./ -L./ -Wl,-rpath,. test.c -o test -lOpenCvSharpExtern
./test
- name: Install .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '8.0.x'
- name: Create NuGet package
env:
BETA: ""
run: |
yyyymmdd=`date '+%Y%m%d'`
echo $yyyymmdd
version="${OPENCV_VERSION}.${yyyymmdd}${BETA}"
echo "Package version: $version"
dotnet pack ${GITHUB_WORKSPACE}/opencvsharp/nuget/${{ matrix.csproj }} -o ${GITHUB_WORKSPACE}/${{ matrix.artifact_name }} -p:Version=$version
ls ${GITHUB_WORKSPACE}/${{ matrix.artifact_name }}
- uses: actions/upload-artifact@v6
with:
name: ${{ matrix.artifact_name }}
path: ${{ matrix.artifact_name }}
- name: Test
run: |
cd ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests
dotnet build -c Release -f net8.0
mkdir -p ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/${{ matrix.runtime_id }}/
cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.dylib ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/
cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.dylib ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/${{ matrix.runtime_id }}/
ls -l ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/
ls -l ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/${{ matrix.runtime_id }}/
export DYLD_LIBRARY_PATH=${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/${{ matrix.runtime_id }}:${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0:.
export DYLD_PRINT_LIBRARIES=1
dotnet test OpenCvSharp.Tests.csproj \
-c Release \
-f net8.0 \
--runtime ${{ matrix.runtime_id }} \
--logger "trx;LogFileName=test-results.trx" < /dev/null
ls
ls TestResults
- uses: actions/upload-artifact@v6
with:
name: ${{ matrix.artifact_name }}_test_results
path: opencvsharp/test/OpenCvSharp.Tests/TestResults/test-results.trx