Skip to content

Commit 1b9bdff

Browse files
author
Aliaksandr Adziareika
committed
Add package linux job
1 parent 48cb668 commit 1b9bdff

File tree

2 files changed

+295
-8
lines changed

2 files changed

+295
-8
lines changed

.github/actions/build-sdk/action.yml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ inputs:
5050
description: 'Generate C# bindings (true/false/empty). Empty = use preset or cmake-config-args'
5151
required: false
5252
default: ''
53+
generate-simulator-app:
54+
description: 'Build simulator application (true/false/empty). Empty = use preset or cmake-config-args'
55+
required: false
56+
default: ''
57+
generate-doxygen-doc:
58+
description: 'Build Doxygen documentation (true/false/empty). Empty = use preset or cmake-config-args'
59+
required: false
60+
default: ''
5361

5462
outputs:
5563
build-path:
@@ -142,7 +150,7 @@ runs:
142150
143151
- name: Install ninja-build
144152
if: inputs.cmake-generator == 'Ninja'
145-
uses: seanmiddleditch/gha-setup-ninja@v5
153+
uses: seanmiddleditch/gha-setup-ninja@v6
146154

147155
- name: Setup MSYS2 MINGW64
148156
if: runner.os == 'Windows' && env.CXX == 'g++'
@@ -240,6 +248,20 @@ runs:
240248
CMAKE_ARGS="$CMAKE_ARGS -DOPENDAQ_GENERATE_CSHARP_BINDINGS=OFF"
241249
fi
242250
251+
# Simulator application
252+
if [ "${{ inputs.generate-simulator-app }}" == "true" ]; then
253+
CMAKE_ARGS="$CMAKE_ARGS -DDAQSIMULATOR_ENABLE_SIMULATOR_APP=ON"
254+
elif [ "${{ inputs.generate-simulator-app }}" == "false" ]; then
255+
CMAKE_ARGS="$CMAKE_ARGS -DDAQSIMULATOR_ENABLE_SIMULATOR_APP=OFF"
256+
fi
257+
258+
# Doxygen documentation
259+
if [ "${{ inputs.generate-doxygen-doc }}" == "true" ]; then
260+
CMAKE_ARGS="$CMAKE_ARGS -DOPENDAQ_BUILD_DOCUMENTATION=ON"
261+
elif [ "${{ inputs.generate-doxygen-doc }}" == "false" ]; then
262+
CMAKE_ARGS="$CMAKE_ARGS -DOPENDAQ_BUILD_DOCUMENTATION=OFF"
263+
fi
264+
243265
echo "::group::CMake Configure"
244266
cmake -B "$CMAKE_BUILD_PATH" -G "$CMAKE_GENERATOR" $CMAKE_ARGS ${{ inputs.cmake-config-args }}
245267
echo "::endgroup::"

.github/workflows/package-sandbox.yml

Lines changed: 272 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ env:
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

2628
jobs:
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

Comments
 (0)