@@ -29,54 +29,36 @@ jobs:
2929 - uses : actions/checkout@v4
3030 with :
3131 submodules : true
32- - name : Set binary paths
33- id : set_binaries
34- run : |
35- echo "ACC_BINARY=build/bin/ACC" >> $GITHUB_OUTPUT
3632 - name : Setup ccache
3733 uses : hendrikmuhs/ccache-action@v1.2
3834 with :
3935 key : ccache-${{ github.job }}-${{ matrix.build_type }}
4036 max-size : 2G
4137 - name : Build
4238 run : |
43- cmake -S . -B build -G Ninja \
44- -DCMAKE_C_COMPILER_LAUNCHER=ccache \
45- -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
46- -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
47- -DOPENCV_PATH=build/3rdparty/opencv_build \
48- ${{ matrix.stats && '-DENABLE_STATISTIC_TENSORS=ON' || '' }} \
49- ${{ matrix.stats && '-DENABLE_STATISTIC_TIME=ON' || '' }} \
50- ${{ matrix.stats && '-DENABLE_STATISTIC_WEIGHTS=ON' || '' }}
51- cmake --build build --parallel
52- env :
53- CTEST_OUTPUT_ON_FAILURE : 1
39+ cmake -S . -B build \
40+ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
41+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
42+ -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
43+ -DOPENCV_PATH=build/3rdparty/opencv_build \
44+ ${{ matrix.stats && '-DENABLE_STATISTIC_TENSORS=ON' || '' }} \
45+ ${{ matrix.stats && '-DENABLE_STATISTIC_TIME=ON' || '' }} \
46+ ${{ matrix.stats && '-DENABLE_STATISTIC_WEIGHTS=ON' || '' }}
47+ cmake --build build --parallel
5448 - name : Prepare OpenCV libs
5549 run : |
56- mkdir -p build/bin/opencv_libs
57- cp -a build/3rdparty/opencv_build/lib/libopencv_* build/bin/opencv_libs/
58- echo "Library permissions after copy:"
59- stat -c "%A %n" build/bin/opencv_libs/libopencv_imgcodecs.so*
60-
50+ mkdir -p build/bin/opencv_libs
51+ cp -a build/3rdparty/opencv_build/lib/libopencv_* build/bin/opencv_libs/
6152 - name : Upload artifacts
6253 uses : actions/upload-artifact@v4
6354 with :
64- name : mnist-${{ matrix.build_type }}${{ matrix.stats && '-stats' || '' }}
65- path : |
66- ${{ steps.set_binaries.outputs.ACC_BINARY }}
67- build/bin/opencv_libs/*
68- build/setenv.sh
55+ name : mnist-${{ matrix.build_type }}${{ matrix.stats && '-stats' || '' }}
56+ path : |
57+ build/bin/ACC
58+ build/bin/opencv_libs/*
59+ build/setenv.sh
6960 - name : Test
7061 run : cmake --build build -t test
71- env :
72- CTEST_OUTPUT_ON_FAILURE : 1
73- - name : Test (valgrind)
74- run : |
75- sudo apt-get update
76- sudo apt-get install -y valgrind
77- valgrind cmake --build build -t test
78- env :
79- CTEST_OUTPUT_ON_FAILURE : 1
8062 build-linux-clang :
8163 runs-on : ubuntu-latest
8264 steps :
@@ -92,23 +74,14 @@ jobs:
9274 key : ccache-${{ github.job }}
9375 - name : Build
9476 run : |
95- cmake -S . -B build -G Ninja \
77+ cmake -S . -B build \
9678 -DCMAKE_C_COMPILER_LAUNCHER=ccache \
9779 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
9880 -DCMAKE_C_COMPILER=clang \
9981 -DCMAKE_CXX_COMPILER=clang++
10082 cmake --build build --parallel
10183 - name : Test
10284 run : cmake --build build -t test
103- env :
104- CTEST_OUTPUT_ON_FAILURE : 1
105- - name : Test (valgrind)
106- run : |
107- sudo apt-get update
108- sudo apt-get install -y valgrind
109- valgrind cmake --build build -t test
110- env :
111- CTEST_OUTPUT_ON_FAILURE : 1
11285 build-macos :
11386 runs-on : macos-15
11487 steps :
@@ -117,37 +90,20 @@ jobs:
11790 submodules : true
11891 - name : Install prerequisites
11992 run : |
120- brew install libomp ninja
93+ brew install libomp
12194 brew link libomp --overwrite --force
12295 - name : Setup ccache
12396 uses : hendrikmuhs/ccache-action@v1.2
12497 with :
12598 key : ccache-${{ github.job }}
12699 - name : Build
127100 run : |
128- OPENMP_PATH=$(brew --prefix libomp)
129- echo "OpenMP path: $OPENMP_PATH"
130- cmake -S . -B build -G Ninja \
101+ cmake -S . -B build \
131102 -DCMAKE_C_COMPILER_LAUNCHER=ccache \
132- -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
133- -DCMAKE_PREFIX_PATH=$OPENMP_PATH \
134- -DCMAKE_INCLUDE_PATH=$OPENMP_PATH/include \
135- -DCMAKE_LIBRARY_PATH=$OPENMP_PATH/lib \
136- -DOpenMP_C_FLAGS="-Xclang -fopenmp -I$OPENMP_PATH/include" \
137- -DOpenMP_CXX_FLAGS="-Xclang -fopenmp -I$OPENMP_PATH/include" \
138- -DOpenMP_C_LIB_NAMES="omp" \
139- -DOpenMP_CXX_LIB_NAMES="omp" \
140- -DOpenMP_omp_LIBRARY="$OPENMP_PATH/lib/libomp.dylib" \
141- -DCMAKE_EXE_LINKER_FLAGS="-L$OPENMP_PATH/lib -lomp" \
142- -DCMAKE_SHARED_LINKER_FLAGS="-L$OPENMP_PATH/lib -lomp"
103+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
143104 cmake --build build --parallel
144- env :
145- LDFLAGS : " -L$(brew --prefix libomp)/lib -lomp"
146- CPPFLAGS : " -I$(brew --prefix libomp)/include"
147105 - name : Test
148106 run : cmake --build build -t test
149- env :
150- CTEST_OUTPUT_ON_FAILURE : 1
151107 build-windows :
152108 runs-on : windows-2025
153109 steps :
@@ -156,15 +112,13 @@ jobs:
156112 submodules : true
157113 - name : Add msbuild to PATH
158114 uses : microsoft/setup-msbuild@v2
159- with :
160- vs-version : ' latest'
161115 - name : Setup ccache
162116 uses : Chocobo1/setup-ccache-action@v1
163117 with :
164118 windows_compile_environment : msvc
165119 - name : Setup ninja
166120 uses : seanmiddleditch/gha-setup-ninja@v6
167- - name : Setup MSVC for Ninja again
121+ - name : Setup MSVC for Ninja
168122 uses : ilammy/msvc-dev-cmd@v1
169123 - name : Build
170124 run : |
@@ -188,14 +142,12 @@ jobs:
188142 key : ccache-${{ github.job }}
189143 - name : Build and Test
190144 run : |
191- cmake -S . -B build -G Ninja \
145+ cmake -S . -B build \
192146 -DCMAKE_C_COMPILER_LAUNCHER=ccache \
193147 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
194148 -DCMAKE_BUILD_TYPE=Release
195149 cmake --build build --parallel
196150 cmake --build build -t test
197- env :
198- CTEST_OUTPUT_ON_FAILURE : 1
199151 codecov :
200152 runs-on : ubuntu-latest
201153 steps :
@@ -204,28 +156,19 @@ jobs:
204156 submodules : true
205157 - name : Install dependencies
206158 run : sudo apt-get update && sudo apt-get install -y gcovr
207- - uses : actions/checkout@v4
208- with :
209- submodules : true
210159 - name : Setup ccache
211160 uses : hendrikmuhs/ccache-action@v1.2
212- with :
213- key : ccache-${{ github.job }}-${{ matrix.build_type }}
214- max-size : 2G
215161 - name : Build
216162 run : |
217- cmake -S . -B build -G Ninja \
163+ cmake -S . -B build \
218164 -DCMAKE_C_COMPILER_LAUNCHER=ccache \
219165 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
220166 -DCMAKE_C_FLAGS="--coverage" \
221167 -DCMAKE_CXX_FLAGS="--coverage" \
222- -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
223- -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
168+ -DCMAKE_BUILD_TYPE=Debug
224169 cmake --build build --parallel
225170 - name : Test
226171 run : cmake --build build -t test
227- env :
228- CTEST_OUTPUT_ON_FAILURE : 1
229172 - name : Generate Coverage Data
230173 run : gcovr -r . --xml -o coverage.xml --gcov-ignore-parse-errors
231174 - name : Upload coverage reports to Codecov
@@ -239,42 +182,10 @@ jobs:
239182 needs : [build-linux]
240183 permissions :
241184 contents : write
242-
243185 steps :
244186 - uses : actions/checkout@v4
245187 with :
246188 fetch-depth : 0
247-
248- - name : Download binary and libs
249- uses : actions/download-artifact@v4
250- with :
251- name : mnist-RELEASE
252- path : build/
253-
254- - name : Verify downloaded artifacts
255- run : |
256- echo "### Verifying downloaded artifacts ###"
257- echo "Current directory: $(pwd)"
258- echo "Build directory contents:"
259- ls -la build/ || echo "No build directory"
260- echo "Looking for ACC binary:"
261- find build/ -name "ACC" -type f 2>/dev/null || echo "ACC not found"
262- echo "Checking bin directory:"
263- ls -la build/bin/ 2>/dev/null || echo "No bin directory"
264-
265- - name : Set binary path
266- id : set_eval_binary
267- run : |
268- if [ -f "build/bin/ACC" ]; then
269- echo "ACC binary found at build/bin/ACC"
270- echo "EVAL_BINARY=build/bin/ACC" >> $GITHUB_OUTPUT
271- else
272- echo "ERROR: ACC binary not found at build/bin/ACC"
273- echo "Available files:"
274- find build/ -type f -name "*" 2>/dev/null | head -20
275- exit 1
276- fi
277-
278189 - name : Install system dependencies
279190 run : |
280191 sudo apt-get update
@@ -283,11 +194,8 @@ jobs:
283194 libtbb12 \
284195 libjpeg-dev \
285196 libpng-dev \
286- libtiff-dev \
287- libopenjp2-7 \
288- libdnnl3
197+ libtiff-dev
289198 sudo ldconfig
290-
291199 - name : Generate model JSON
292200 run : |
293201 cd docs && mkdir -p jsons
@@ -296,128 +204,48 @@ jobs:
296204 pip install -r requirements.txt
297205 python parser.py
298206 cd ../..
299-
300207 - name : Cache MNIST test dataset
301208 id : cache-mnist
302209 uses : actions/cache@v4
303210 with :
304211 path : docs/mnist/mnist/test
305212 key : mnist-dataset-e2d09c892023700f68bfa9f30ac91a4dffaa23b151deeaca627101b3d73ef83d
306-
307213 - name : Download MNIST test dataset
308214 if : steps.cache-mnist.outputs.cache-hit != 'true'
309215 run : |
310216 set -e
311217 mkdir -p docs/mnist/mnist/test
312- echo "Downloading test images..."
313218 wget -q https://github.com/DeepTrackAI/MNIST_dataset/archive/main.zip -O main.zip
314219 unzip -q main.zip
315220 cp MNIST_dataset-main/mnist/test/*.png docs/mnist/mnist/test/
316221 rm -rf main.zip MNIST_dataset-main
317- echo "Downloaded $(ls docs/mnist/mnist/test | wc -l) images"
318-
222+ - name : Download binary and libs
223+ uses : actions/download-artifact@v4
224+ with :
225+ name : mnist-RELEASE
226+ path : build/
319227 - name : Prepare environment
320228 run : |
321- echo "### Preparing environment ###"
322- echo "Binary path: ${{ steps.set_eval_binary.outputs.EVAL_BINARY }}"
323-
324- ls -la "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}"
325- chmod +x "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}"
326-
229+ chmod +x build/bin/ACC
327230 export LD_LIBRARY_PATH=$PWD/build/bin/opencv_libs:/usr/lib/x86_64-linux-gnu
328- echo "Final LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
329-
330- - name : Verify library integrity
331- run : |
332- echo "### Library verification ###"
333- ls -la build/bin/opencv_libs/ || echo "No opencv_libs directory"
334- file build/bin/opencv_libs/libopencv_imgcodecs.so* 2>/dev/null | head -1 || echo "No opencv_imgcodecs library found"
335-
336- - name : Test binary execution
337- run : |
338- echo "### Testing binary execution ###"
339- export LD_LIBRARY_PATH=$PWD/build/bin/opencv_libs:/usr/lib/x86_64-linux-gnu
340-
341- echo "Binary dependencies:"
342- ldd "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" 2>/dev/null || echo "ldd failed"
343-
344- echo "Testing help command:"
345- timeout 10s "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" --help > /dev/null 2>&1 || echo "Help test completed"
346-
347231 - name : Run evaluation
348232 run : |
349- echo "### Running evaluation ###"
350- export LD_LIBRARY_PATH=$PWD/build/bin/opencv_libs:/usr/lib/x86_64-linux-gnu
351- echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
352-
353- echo "### Checking binary execution permissions ###"
354- ls -la "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}"
355- file "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}"
356-
357- echo "### Testing direct execution ###"
358- set +e
359- "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" --version > version_output.txt 2>&1
360- VERSION_EXIT_CODE=$?
361- echo "Version command exit code: $VERSION_EXIT_CODE"
362- cat version_output.txt
363-
364- "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" --help > help_output.txt 2>&1
365- HELP_EXIT_CODE=$?
366- echo "Help command exit code: $HELP_EXIT_CODE"
367- cat help_output.txt
368-
369- echo "### Running MNIST evaluation ###"
370- mkdir -p docs/mnist/mnist/test
371-
372- "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" --model alexnet_mnist > accuracy.txt 2>&1
373- EVAL_EXIT_CODE=$?
374- echo "Evaluation exit code: $EVAL_EXIT_CODE"
375-
376- if [ $EVAL_EXIT_CODE -ne 0 ]; then
377- echo "Trying without --model parameter..."
378- "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" > accuracy.txt 2>&1
379- EVAL_EXIT_CODE=$?
380- echo "Fallback evaluation exit code: $EVAL_EXIT_CODE"
381- fi
382-
383- echo "### Evaluation output ###"
384- cat accuracy.txt
385- set -e
386-
387- - name : Extract accuracy value
388- run : |
389- echo "### Extracting accuracy ###"
390- ACCURACY=$(grep -oE '[0-9]+\.?[0-9]*%' accuracy.txt | head -1 || echo "0%")
391- echo "Accuracy: $ACCURACY"
392- echo "$ACCURACY" > accuracy_value.txt
393-
233+ build/bin/ACC > accuracy.txt
394234 - name : Update README (master only)
395235 if : github.ref == 'refs/heads/master'
396236 run : |
397- ACCURACY=$(cat accuracy_value .txt | sed 's/%//g')
237+ ACCURACY=$(cat accuracy .txt | sed 's/%//g')
398238 DATE=$(date '+%Y-%m-%d')
399-
400- echo "Updating README with:"
401- echo "Accuracy : $ACCURACY%"
402- echo "Date : $DATE"
403-
404239 sed -i "s/<!--ACCURACY_PLACEHOLDER-->.*<!--END_ACCURACY-->/<!--ACCURACY_PLACEHOLDER-->Accuracy: ${ACCURACY}% (updated: ${DATE})<!--END_ACCURACY-->/" README.md
405-
406- echo "Updated README content:"
407- grep -A 2 -B 2 "ACCURACY_PLACEHOLDER" README.md
408-
409240 - name : Commit and push changes (master only)
410241 if : github.ref == 'refs/heads/master'
411242 run : |
412243 git config --global user.name "GitHub Actions"
413244 git config --global user.email "actions@github.com"
414-
415245 git add README.md
416-
417246 if git diff-index --quiet HEAD --; then
418247 echo "No changes to commit"
419248 else
420- git commit -m "[CI] Update accuracy : $(cat accuracy_value .txt)"
249+ git commit -m "[CI] Update accuracy: $(cat accuracy .txt)"
421250 git push origin master
422- echo "Changes pushed to master branch"
423251 fi
0 commit comments