Skip to content

Commit 5fd808c

Browse files
authored
Merge pull request #1805 from shimat/ubuntu24
Ubuntu 24.04 CI & NuGet Package
2 parents 9cc8129 + 53b2d77 commit 5fd808c

16 files changed

+467
-52
lines changed

.github/workflows/linux-arm.yml

Lines changed: 144 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,44 +10,164 @@ on:
1010
env:
1111
DEBIAN_FRONTEND: noninteractive
1212
OPENCV_VERSION: 4.13.0
13-
DOCKER_BUILD_CONTEXT: ./docker/ubuntu24-dotnet10-opencv4.13.0
13+
OPENCV_CACHE_VERSION: 1
1414

1515
jobs:
1616
build:
17+
1718
runs-on: ubuntu-24.04-arm
19+
1820
steps:
1921
- uses: actions/checkout@v6
22+
with:
23+
path: opencvsharp
24+
25+
- name: Install dependencies
26+
run: |
27+
sudo apt-get update -y
28+
sudo apt-get install -y --no-install-recommends \
29+
apt-transport-https \
30+
software-properties-common \
31+
ca-certificates \
32+
g++ \
33+
make \
34+
cmake \
35+
libtbb-dev \
36+
libatlas-base-dev \
37+
libgtk-3-dev \
38+
libavcodec-dev \
39+
libavformat-dev \
40+
libswscale-dev \
41+
libdc1394-dev \
42+
libxine2-dev \
43+
libv4l-dev \
44+
libtheora-dev \
45+
libvorbis-dev \
46+
libxvidcore-dev \
47+
libopencore-amrnb-dev \
48+
libopencore-amrwb-dev \
49+
libx264-dev \
50+
libtesseract-dev
2051
21-
- uses: docker/setup-buildx-action@v3
52+
- name: Cache OpenCV
53+
id: opencv-cache
54+
uses: actions/cache@v5
55+
with:
56+
path: ${{ github.workspace }}/opencv_artifacts/
57+
key: opencv-arm-${{ env.OPENCV_VERSION }}-rev${{ env.OPENCV_CACHE_VERSION }}
2258

23-
# Build with Buildx and cache Docker layers in GitHub Actions cache
24-
- name: Build with Docker (native ARM64)
25-
uses: docker/build-push-action@v6
59+
- name: Checkout OpenCV
60+
if: steps.opencv-cache.outputs.cache-hit != 'true'
61+
uses: actions/checkout@v6
62+
with:
63+
repository: opencv/opencv
64+
path: opencv
65+
ref: ${{ env.OPENCV_VERSION }}
66+
- name: Checkout OpenCV Contrib
67+
if: steps.opencv-cache.outputs.cache-hit != 'true'
68+
uses: actions/checkout@v6
2669
with:
27-
context: ${{ env.DOCKER_BUILD_CONTEXT }}
28-
build-args: |
29-
OPENCV_VERSION=${{ env.OPENCV_VERSION }}
30-
OPENCVSHARP_REF=${{ github.head_ref || github.ref_name }}
31-
outputs: type=docker,name=opencvsharp-linux-arm:latest
32-
# Use branch-specific cache keys to avoid using stale code from other branches
33-
cache-from: |
34-
type=gha,scope=${{ github.ref_name }}
35-
type=gha,scope=main
36-
# Save cache with branch-specific scope
37-
cache-to: type=gha,mode=max,scope=${{ github.ref_name }}
38-
39-
- name: Extract build files from Docker instance
70+
repository: opencv/opencv_contrib
71+
path: opencv_contrib
72+
ref: ${{ env.OPENCV_VERSION }}
73+
74+
- name: Build OpenCV
75+
if: steps.opencv-cache.outputs.cache-hit != 'true'
4076
run: |
41-
docker create -ti --name opencvsharp-linux-arm-tmp opencvsharp-linux-arm:latest bash
42-
docker cp opencvsharp-linux-arm-tmp:/artifacts .
77+
mkdir opencv/build && cd opencv/build
78+
cmake \
79+
-S . \
80+
-B build \
81+
-D CMAKE_BUILD_TYPE=Release \
82+
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
83+
-D BUILD_SHARED_LIBS=OFF \
84+
-D ENABLE_CXX11=ON \
85+
-D BUILD_EXAMPLES=OFF \
86+
-D BUILD_DOCS=OFF \
87+
-D BUILD_PERF_TESTS=OFF \
88+
-D BUILD_TESTS=OFF \
89+
-D BUILD_JAVA=OFF \
90+
-D BUILD_opencv_apps=OFF \
91+
-D BUILD_opencv_barcode=OFF \
92+
-D BUILD_opencv_java_bindings_generator=OFF \
93+
-D BUILD_opencv_python_bindings_generator=OFF \
94+
-D BUILD_opencv_python_tests=OFF \
95+
-D BUILD_opencv_ts=OFF \
96+
-D BUILD_opencv_js=OFF \
97+
-D BUILD_opencv_js_bindings_generator=OFF \
98+
-D BUILD_opencv_bioinspired=OFF \
99+
-D BUILD_opencv_ccalib=OFF \
100+
-D BUILD_opencv_datasets=OFF \
101+
-D BUILD_opencv_dnn_objdetect=OFF \
102+
-D BUILD_opencv_dpm=OFF \
103+
-D BUILD_opencv_fuzzy=OFF \
104+
-D BUILD_opencv_gapi=ON \
105+
-D BUILD_opencv_intensity_transform=OFF \
106+
-D BUILD_opencv_mcc=OFF \
107+
-D BUILD_opencv_objc_bindings_generator=OFF \
108+
-D BUILD_opencv_rapid=OFF \
109+
-D BUILD_opencv_reg=OFF \
110+
-D BUILD_opencv_stereo=OFF \
111+
-D BUILD_opencv_structured_light=OFF \
112+
-D BUILD_opencv_surface_matching=OFF \
113+
-D BUILD_opencv_wechat_qrcode=ON \
114+
-D BUILD_opencv_videostab=OFF \
115+
-D WITH_GSTREAMER=OFF \
116+
-D WITH_ADE=OFF \
117+
-D OPENCV_ENABLE_NONFREE=ON \
118+
-D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_artifacts ..
119+
cmake --build build
120+
cmake --install build
121+
sudo ldconfig
122+
cd ${GITHUB_WORKSPACE}
123+
ls
124+
125+
- name: Build OpenCvSharpExtern
126+
run: |
127+
mkdir opencvsharp/src/build && cd $_
128+
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/opencv_artifacts ..
129+
make -j
130+
ls OpenCvSharpExtern
131+
cp OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/nuget/
132+
133+
- name: Check OpenCvSharpExtern
134+
run: |
135+
cd ${GITHUB_WORKSPACE}/opencvsharp/nuget/
136+
ldd libOpenCvSharpExtern.so
137+
nm libOpenCvSharpExtern.so
138+
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
139+
gcc -I./ -L./ test.c -o test -lOpenCvSharpExtern
140+
LD_LIBRARY_PATH=. ./test
43141
44-
- name: Patch nuspec with version and build NuGet package
142+
- name: Install .NET
143+
uses: actions/setup-dotnet@v5
144+
with:
145+
dotnet-version: '8.0.x'
146+
147+
- name: Create NuGet package
148+
env:
149+
BETA: ""
45150
run: |
46-
sed -E --in-place=.bak "s/<version>[0-9]\.[0-9]{1,2}\.[0-9]{1,2}.[0-9]{8}(-beta[0-9]*)?<\/version>/<version>${OPENCV_VERSION}.$(date '+%Y%m%d')<\/version>/" nuget/OpenCvSharp4.runtime.linux-arm.nuspec
47-
cp artifacts/libOpenCvSharpExtern.so nuget/
48-
dotnet pack nuget/OpenCvSharp4.runtime.linux-arm.csproj -o artifacts_arm
151+
yyyymmdd=`date '+%Y%m%d'`
152+
echo $yyyymmdd
153+
cd ${GITHUB_WORKSPACE}/opencvsharp
154+
sed -E --in-place=.bak \
155+
"s/<version>[0-9]\.[0-9]{1,2}\.[0-9]{1,2}.[0-9]{8}(-beta[0-9]*)?<\/version>/<version>${OPENCV_VERSION}.${yyyymmdd}${BETA}<\/version>/" \
156+
nuget/OpenCvSharp4.runtime.linux-arm.nuspec
157+
cat nuget/OpenCvSharp4.runtime.linux-arm.nuspec
158+
dotnet pack nuget/OpenCvSharp4.runtime.linux-arm.csproj -o ${GITHUB_WORKSPACE}/artifacts_arm
159+
ls ${GITHUB_WORKSPACE}/artifacts_arm
49160
50161
- uses: actions/upload-artifact@v4
51162
with:
52163
name: artifacts_linux_arm
53164
path: artifacts_arm
165+
166+
- name: Test
167+
run: |
168+
cd ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests
169+
dotnet build -c Release -f net8.0
170+
cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/
171+
cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/
172+
sudo cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so /usr/lib/
173+
LD_LIBRARY_PATH=. dotnet test OpenCvSharp.Tests.csproj -c Release -f net8.0 --runtime linux-arm64 --logger "trx;LogFileName=test-results.trx" < /dev/null

.github/workflows/publish_nuget.yml

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,35 +11,42 @@ jobs:
1111
- uses: actions/checkout@v6
1212

1313
- name: Download windows artifact
14-
uses: dawidd6/action-download-artifact@v6
14+
uses: dawidd6/action-download-artifact@v14
1515
with:
1616
github_token: ${{secrets.GITHUB_TOKEN}}
1717
workflow: windows.yml
1818
name: packages_windows
1919

20-
- name: Download ubuntu artifact
21-
uses: dawidd6/action-download-artifact@v8
20+
- name: Download ubuntu 22 artifact
21+
uses: dawidd6/action-download-artifact@v14
2222
with:
2323
github_token: ${{secrets.GITHUB_TOKEN}}
2424
workflow: ubuntu22.yml
2525
name: artifacts_ubuntu_22
2626

27+
- name: Download ubuntu 24 artifact
28+
uses: dawidd6/action-download-artifact@v14
29+
with:
30+
github_token: ${{secrets.GITHUB_TOKEN}}
31+
workflow: ubuntu24.yml
32+
name: artifacts_ubuntu_24
33+
2734
- name: Download ubuntu arm artifact
28-
uses: dawidd6/action-download-artifact@v8
35+
uses: dawidd6/action-download-artifact@v14
2936
with:
3037
github_token: ${{secrets.GITHUB_TOKEN}}
3138
workflow: linux-arm.yml
3239
name: artifacts_linux_arm
3340

3441
#- name: Download macos artifact
35-
# uses: dawidd6/action-download-artifact@v6
42+
# uses: dawidd6/action-download-artifact@v14
3643
# with:
3744
# github_token: ${{secrets.GITHUB_TOKEN}}
3845
# workflow: macos10.yml
3946
# name: artifacts_macos_10
4047

4148
- name: Download wasm artifact
42-
uses: dawidd6/action-download-artifact@v8
49+
uses: dawidd6/action-download-artifact@v14
4350
with:
4451
github_token: ${{secrets.GITHUB_TOKEN}}
4552
workflow: wasm.yml

.github/workflows/ubuntu22.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ on:
1010
env:
1111
DEBIAN_FRONTEND: noninteractive
1212
OPENCV_VERSION: 4.13.0
13-
OPENCV_CACHE_VERSION: 1
13+
OPENCV_CACHE_VERSION: 2
1414

1515
jobs:
1616
build:
@@ -46,15 +46,15 @@ jobs:
4646
libxvidcore-dev \
4747
libopencore-amrnb-dev \
4848
libopencore-amrwb-dev \
49-
x264 \
49+
libx264-dev \
5050
libtesseract-dev
5151
5252
- name: Cache OpenCV
5353
id: opencv-cache
5454
uses: actions/cache@v5
5555
with:
5656
path: ${{ github.workspace }}/opencv_artifacts/
57-
key: opencv-${{ env.OPENCV_VERSION }}-rev${{ env.OPENCV_CACHE_VERSION }}
57+
key: opencv-${{ env.OPENCV_VERSION }}-ubuntu22-rev${{ env.OPENCV_CACHE_VERSION }}
5858

5959
- name: Checkout OpenCV
6060
if: steps.opencv-cache.outputs.cache-hit != 'true'
@@ -153,9 +153,9 @@ jobs:
153153
cd ${GITHUB_WORKSPACE}/opencvsharp
154154
sed -E --in-place=.bak \
155155
"s/<version>[0-9]\.[0-9]{1,2}\.[0-9]{1,2}.[0-9]{8}(-beta[0-9]*)?<\/version>/<version>${OPENCV_VERSION}.${yyyymmdd}${BETA}<\/version>/" \
156-
nuget/OpenCvSharp4.official.runtime.linux-x64.nuspec
157-
cat nuget/OpenCvSharp4.official.runtime.linux-x64.nuspec
158-
dotnet pack nuget/OpenCvSharp4.official.runtime.linux-x64.csproj -o ${GITHUB_WORKSPACE}/artifacts_ubuntu
156+
nuget/OpenCvSharp4.official.runtime.ubuntu.22.04-x64.nuspec
157+
cat nuget/OpenCvSharp4.official.runtime.ubuntu.22.04-x64.nuspec
158+
dotnet pack nuget/OpenCvSharp4.official.runtime.ubuntu.22.04-x64.csproj -o ${GITHUB_WORKSPACE}/artifacts_ubuntu
159159
ls ${GITHUB_WORKSPACE}/artifacts_ubuntu
160160
161161
- uses: actions/upload-artifact@v4

0 commit comments

Comments
 (0)