2222 cmake_preset : package
2323 python_versions : 3.8 3.14
2424 windows_x64_artifact : SdkWindows64
25+ vm_name : device_simulator
26+ simulator_app_artifact : SimulatorApp
2527
2628jobs :
2729 package_windows :
@@ -196,6 +198,179 @@ jobs:
196198 !${{ steps.build-csharp-bindings.outputs.nuget-path }}/**/*.json
197199 retention-days : 1
198200
201+ package_linux :
202+ runs-on : ${{ matrix.runner }}
203+ name : ${{ matrix.name }}
204+
205+ concurrency :
206+ group : ${{ github.workflow }}-${{ github.ref }}-${{ matrix.name }}
207+ cancel-in-progress : true
208+ timeout-minutes : 180
209+ strategy :
210+ fail-fast : false
211+ matrix :
212+ include :
213+ - name : Linux x86_64 GCC Release
214+ runner : ubuntu-22.04
215+ additional-dependencies : doxygen graphviz wget zip
216+ cmake-generator : Ninja
217+ cmake-build-type : Release
218+ cmake-defines : >-
219+ -DOPENDAQ_ENABLE_TESTS=OFF
220+ -DOPENDAQ_ENABLE_TEST_UTILS=OFF
221+ -DOPENDAQ_ENABLE_OPCUA=OFF
222+ -DOPENDAQ_ENABLE_WEBSOCKET_STREAMING=OFF
223+ -DOPENDAQ_ENABLE_NATIVE_STREAMING=OFF
224+ -DDAQMODULES_REF_FB_MODULE=OFF
225+ -DDAQMODULES_REF_DEVICE_MODULE=OFF
226+ -DDAQMODULES_AUDIO_DEVICE_MODULE=OFF
227+ -DDAQMODULES_OPENDAQ_CLIENT_MODULE=OFF
228+ -DDAQMODULES_OPENDAQ_SERVER_MODULE=OFF
229+ -DDAQMODULES_BASIC_CSV_RECORDER_MODULE=OFF
230+ -DCMAKE_C_COMPILER_LAUNCHER=ccache
231+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
232+ disable-ccache : false
233+ generate-simulator-app : true
234+ generate-doxygen-doc : true
235+ generate-csharp-bindings : true
236+
237+ - name : Linux ARM64 GCC Release
238+ runner : ubuntu-22.04-arm
239+ cmake-generator : Ninja
240+ cmake-build-type : Release
241+ cmake-defines : >-
242+ -DOPENDAQ_ENABLE_TESTS=OFF
243+ -DOPENDAQ_ENABLE_TEST_UTILS=OFF
244+ -DOPENDAQ_ENABLE_OPCUA=OFF
245+ -DOPENDAQ_ENABLE_WEBSOCKET_STREAMING=OFF
246+ -DOPENDAQ_ENABLE_NATIVE_STREAMING=OFF
247+ -DDAQMODULES_REF_FB_MODULE=OFF
248+ -DDAQMODULES_REF_DEVICE_MODULE=OFF
249+ -DDAQMODULES_AUDIO_DEVICE_MODULE=OFF
250+ -DDAQMODULES_OPENDAQ_CLIENT_MODULE=OFF
251+ -DDAQMODULES_OPENDAQ_SERVER_MODULE=OFF
252+ -DDAQMODULES_BASIC_CSV_RECORDER_MODULE=OFF
253+ -DCMAKE_C_COMPILER_LAUNCHER=ccache
254+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
255+ disable-ccache : false
256+ generate-simulator-app : false
257+ generate-doxygen-doc : false
258+ generate-csharp-bindings : false
259+ env :
260+ CC : gcc
261+ CXX : g++
262+
263+ steps :
264+ # TODO: Remove these 3 steps before merging to openDAQ/openDAQ
265+ - name : Checkout openDAQ
266+ if : github.repository != 'openDAQ/openDAQ'
267+ uses : actions/checkout@v4
268+ with :
269+ repository : openDAQ/openDAQ
270+
271+ - name : Checkout CI actions
272+ if : github.repository != 'openDAQ/openDAQ'
273+ uses : actions/checkout@v4
274+ with :
275+ path : _ci-sandbox
276+
277+ - name : Copy CI actions
278+ if : github.repository != 'openDAQ/openDAQ'
279+ shell : bash
280+ run : cp -r _ci-sandbox/.github/actions .github/
281+
282+ - name : Apply patches
283+ if : github.repository != 'openDAQ/openDAQ'
284+ shell : bash
285+ run : |
286+ if [ ! -d "_ci-sandbox/.github/patches" ]; then
287+ echo "No patches directory, nothing to apply"
288+ exit 0
289+ fi
290+ for patch in _ci-sandbox/.github/patches/*.patch; do
291+ [ -f "$patch" ] && git apply "$patch" && echo "Applied: $patch" || true
292+ done
293+
294+ - name : Setup ccache
295+ if : ${{ matrix.disable-ccache != true }}
296+ uses : openDAQ/openDAQ-CI-sandbox/.github/actions/ccache-setup@actions/ccache-setup
297+ with :
298+ cmake-config-args : ${{ matrix.cmake-defines }}
299+ cmake-build-type : ${{ matrix.cmake-build-type }}
300+
301+ # TODO: End of sandbox-only steps
302+
303+ - name : Build SDK
304+ id : build-sdk
305+ uses : ./.github/actions/build-sdk
306+ with :
307+ additional-dependencies : ${{ matrix.additional-dependencies }}
308+ cmake-generator : ${{ matrix.cmake-generator }}
309+ cmake-config-preset : ${{ env.cmake_preset }}
310+ cmake-config-args : ${{ matrix.cmake-defines }}
311+ cmake-build-type : ${{ matrix.cmake-build-type }}
312+ cpack-generator : DEB
313+ generate-csharp-bindings : false
314+ generate-python-bindings : false
315+ generate-simulator-app : false
316+ generate-doxygen-doc : false
317+
318+ - name : Upload Package
319+ uses : actions/upload-artifact@v4
320+ with :
321+ name : Package (${{ matrix.name }})
322+ path : ${{ steps.build-sdk.outputs.package-path }}
323+ retention-days : 7
324+
325+ - name : Build Documentation
326+ if : matrix.generate-doxygen-doc == true
327+ shell : bash
328+ run : |
329+ cmake -B ${{ steps.build-sdk.outputs.build-path }} -G "${{ matrix.cmake-generator }}" -DOPENDAQ_BUILD_DOCUMENTATION=ON
330+ cmake --build ${{ steps.build-sdk.outputs.build-path }} --target doc_doxygen
331+ cd ${{ steps.build-sdk.outputs.build-path }}/doc_doxygen/html
332+ zip -r ../opendaq_cpp_api_reference.zip .
333+
334+ - name : Upload API Reference
335+ if : matrix.generate-doxygen-doc == true
336+ uses : actions/upload-artifact@v4
337+ with :
338+ name : API Reference
339+ path : ${{ steps.build-sdk.outputs.build-path }}/doc_doxygen/opendaq_cpp_api_reference.zip
340+ retention-days : 7
341+
342+ - name : Build Simulator App
343+ if : matrix.generate-simulator-app == true
344+ shell : bash
345+ run : |
346+ cmake -B ${{ steps.build-sdk.outputs.build-path }} -G "${{ matrix.cmake-generator }}" \
347+ -DDAQSIMULATOR_ENABLE_SIMULATOR_APP=ON \
348+ -DDAQMODULES_REF_DEVICE_MODULE=ON \
349+ -DDAQMODULES_REF_FB_MODULE=ON \
350+ -DDAQMODULES_OPENDAQ_SERVER_MODULE=ON \
351+ -DOPENDAQ_ENABLE_NATIVE_STREAMING=ON \
352+ -DOPENDAQ_ENABLE_OPCUA=ON
353+ cmake --build ${{ steps.build-sdk.outputs.build-path }} --target application_simulator
354+
355+ - name : Upload Simulator App
356+ if : matrix.generate-simulator-app == true
357+ uses : actions/upload-artifact@v4
358+ with :
359+ name : SimulatorApp
360+ path : ${{ steps.build-sdk.outputs.build-path }}/bin/application_simulator
361+ retention-days : 7
362+
363+ - name : Upload binaries for .NET NuGet
364+ if : matrix.generate-csharp-bindings == true
365+ uses : actions/upload-artifact@v4
366+ with :
367+ name : SdkLinux64
368+ path : |
369+ ${{ steps.build-sdk.outputs.build-path }}/bin/*.so
370+ !${{ steps.build-sdk.outputs.build-path }}/**/opendaq.cpython*
371+ !${{ steps.build-sdk.outputs.build-path }}/**/*_test_dll.so
372+ retention-days : 1
373+
199374 build_macos :
200375 name : ${{ matrix.name }}
201376 runs-on : ${{ matrix.runner }}
@@ -207,13 +382,8 @@ jobs:
207382 strategy :
208383 fail-fast : false
209384 matrix :
210- # include:
211- # - name: macos-13 clang Release
212- # cmake_generator: Ninja
213- # cmake_build_type: Release
214- # cmake_osx_deployment_target: 10.15
215385 include :
216- - name : macOS 15 x86_64 Clang Release
386+ - name : macOS x86_64 Clang Release
217387 runner : macos-15-intel
218388 cmake-generator : Ninja
219389 cmake-build-type : Release
@@ -232,9 +402,11 @@ jobs:
232402 -DDAQMODULES_OPENDAQ_CLIENT_MODULE=OFF
233403 -DDAQMODULES_OPENDAQ_SERVER_MODULE=OFF
234404 -DDAQMODULES_BASIC_CSV_RECORDER_MODULE=OFF
405+ -DCMAKE_C_COMPILER_LAUNCHER=ccache
406+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
235407 disable-ccache : false
236408
237- - name : macOS Latest ARM64 Clang Release
409+ - name : macOS ARM64 Clang Release
238410 runner : macos-latest
239411 cmake-generator : Ninja
240412 cmake-build-type : Release
@@ -253,6 +425,8 @@ jobs:
253425 -DDAQMODULES_OPENDAQ_CLIENT_MODULE=OFF
254426 -DDAQMODULES_OPENDAQ_SERVER_MODULE=OFF
255427 -DDAQMODULES_BASIC_CSV_RECORDER_MODULE=OFF
428+ -DCMAKE_C_COMPILER_LAUNCHER=ccache
429+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
256430 disable-ccache : false
257431 env :
258432 CC : clang
@@ -324,3 +498,94 @@ jobs:
324498 name : Wheels (${{ matrix.name }})
325499 path : ${{ steps.build-python-bindings.outputs.wheels-path }}
326500 retention-days : 7
501+
502+ simulator-build :
503+ runs-on : ubuntu-latest
504+ name : Simulator build
505+ needs : [package_linux]
506+
507+ concurrency :
508+ group : ${{ github.workflow }}-${{ github.ref }}-simulator
509+ cancel-in-progress : true
510+ timeout-minutes : 120
511+ env :
512+ simulator_directory : simulator
513+
514+ defaults :
515+ run :
516+ working-directory : ${{ env.simulator_directory }}
517+
518+ steps :
519+ - name : Checkout
520+ uses : actions/checkout@v4
521+ with :
522+ repository : openDAQ/openDAQ
523+
524+ - name : Install tools
525+ run : |
526+ wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
527+ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
528+ sudo apt update
529+ sudo apt install -y virtualbox vagrant
530+
531+ - name : Download package
532+ uses : actions/download-artifact@v4
533+ with :
534+ name : Package (Linux x86_64 GCC Release)
535+ path : ${{ env.simulator_directory }}
536+
537+ - name : Download simulator app
538+ uses : actions/download-artifact@v4
539+ with :
540+ name : ${{ env.simulator_app_artifact }}
541+ path : ${{ env.simulator_directory }}
542+
543+ - name : Display files in working directory
544+ run : ls -Rhl
545+
546+ - name : Read openDAQ version
547+ id : daq_version
548+ working-directory : .
549+ run : |
550+ DAQ_VER=$(cat opendaq_version)
551+ echo Head openDAQ version: $DAQ_VER
552+ echo "DAQ_VERSION=$DAQ_VER" >> "$GITHUB_OUTPUT"
553+
554+ - name : Define simulator name
555+ id : simulator_name
556+ run : echo "SIMULATOR_NAME=opendaq-${{ steps.daq_version.outputs.DAQ_VERSION }}_${{ env.vm_name }}" >> "$GITHUB_OUTPUT"
557+
558+ - name : Find binaries and run vagrant
559+ run : |
560+ debfiles=( *.deb )
561+ vagrant --version
562+ VM_NAME=${{ steps.simulator_name.outputs.SIMULATOR_NAME }} HOME_PATH=$HOME PACKAGE_NAME=${debfiles[0]} vagrant up
563+ VM_NAME=${{ steps.simulator_name.outputs.SIMULATOR_NAME }} HOME_PATH=$HOME PACKAGE_NAME=${debfiles[0]} vagrant halt
564+
565+ - name : vboxmanage modify and compact
566+ run : |
567+ vboxmanage modifyvm ${{ steps.simulator_name.outputs.SIMULATOR_NAME }} --audio none --uart1 off --nic1 hostonly --hostonlyadapter1 "VirtualBox Host-Only Ethernet Adapter"
568+ vboxmanage modifymedium disk "${{ steps.simulator_name.outputs.SIMULATOR_NAME }}.vdi" --compact
569+
570+ - name : vboxmanage check
571+ run : |
572+ vboxmanage list vms
573+ vboxmanage list hostonlyifs
574+ vboxmanage list hdds
575+
576+ - name : export VM to .ova appliance
577+ run : |
578+ vboxmanage export ${{ steps.simulator_name.outputs.SIMULATOR_NAME }} -o ${{ steps.simulator_name.outputs.SIMULATOR_NAME }}.ova --options manifest,nomacs
579+ ls -hl ${{ steps.simulator_name.outputs.SIMULATOR_NAME }}.ova
580+
581+ - name : Upload OVA image
582+ uses : actions/upload-artifact@v4
583+ with :
584+ name : ${{ steps.simulator_name.outputs.SIMULATOR_NAME }}-ova-image
585+ path : simulator/${{ steps.simulator_name.outputs.SIMULATOR_NAME }}.ova
586+ retention-days : 7
587+
588+ - name : Delete unused artifacts
589+ uses : geekyeggo/delete-artifact@v5
590+ with :
591+ name : ${{ env.simulator_app_artifact }}
0 commit comments