1+ name : Build OpenVINO Addons
2+
3+ on :
4+ push :
5+ branches : [ main, openvino-integration ]
6+ pull_request :
7+ branches : [ main ]
8+ release :
9+ types : [created]
10+
11+ jobs :
12+ build-openvino-addons :
13+ strategy :
14+ matrix :
15+ include :
16+ - os : windows-2022
17+ arch : x64
18+ addon_name : addon-windows-openvino.node
19+ openvino_url : " https://storage.openvinotoolkit.org/repositories/openvino/packages/2024.6/windows/w_openvino_toolkit_windows_2024.6.0.17404.4c0f47d2335_x86_64.zip"
20+ openvino_dir : " w_openvino_toolkit_windows_2024.6.0.17404.4c0f47d2335_x86_64"
21+ setup_script : " setupvars.bat"
22+ - os : ubuntu-22.04
23+ arch : x64
24+ addon_name : addon-linux-openvino.node
25+ openvino_url : " https://storage.openvinotoolkit.org/repositories/openvino/packages/2024.6/linux/l_openvino_toolkit_ubuntu22_2024.6.0.17404.4c0f47d2335_x86_64.tgz"
26+ openvino_dir : " l_openvino_toolkit_ubuntu22_2024.6.0.17404.4c0f47d2335_x86_64"
27+ setup_script : " setupvars.sh"
28+ - os : macos-13
29+ arch : arm64
30+ addon_name : addon-macos-openvino.node
31+ openvino_url : " https://storage.openvinotoolkit.org/repositories/openvino/packages/2024.6/macos/m_openvino_toolkit_macos_12_6_2024.6.0.17404.4c0f47d2335_arm64.tgz"
32+ openvino_dir : " m_openvino_toolkit_macos_12_6_2024.6.0.17404.4c0f47d2335_arm64"
33+ setup_script : " setupvars.sh"
34+
35+ runs-on : ${{ matrix.os }}
36+
37+ steps :
38+ - uses : actions/checkout@v4
39+
40+ - name : Setup Node.js 21
41+ uses : actions/setup-node@v4
42+ with :
43+ node-version : ' 21'
44+
45+ - name : Install cmake-js
46+ run : npm install -g cmake-js
47+
48+ - name : Download and Install OpenVINO (Windows)
49+ if : runner.os == 'Windows'
50+ run : |
51+ curl -L -o openvino.zip "${{ matrix.openvino_url }}"
52+ 7z x openvino.zip
53+ echo "OPENVINO_INSTALL_DIR=${{ github.workspace }}/${{ matrix.openvino_dir }}" >> $env:GITHUB_ENV
54+
55+ - name : Download and Install OpenVINO (Linux)
56+ if : runner.os == 'Linux'
57+ run : |
58+ curl -L -o openvino.tgz "${{ matrix.openvino_url }}"
59+ tar -xzf openvino.tgz
60+ echo "OPENVINO_INSTALL_DIR=${{ github.workspace }}/${{ matrix.openvino_dir }}" >> $GITHUB_ENV
61+
62+ - name : Download and Install OpenVINO (macOS)
63+ if : runner.os == 'macOS'
64+ run : |
65+ curl -L -o openvino.tgz "${{ matrix.openvino_url }}"
66+ tar -xzf openvino.tgz
67+ echo "OPENVINO_INSTALL_DIR=${{ github.workspace }}/${{ matrix.openvino_dir }}" >> $GITHUB_ENV
68+
69+ - name : Setup OpenVINO Environment (Windows)
70+ if : runner.os == 'Windows'
71+ run : |
72+ cd "${{ env.OPENVINO_INSTALL_DIR }}"
73+ call "${{ matrix.setup_script }}"
74+ shell : cmd
75+
76+ - name : Setup OpenVINO Environment (Unix)
77+ if : runner.os != 'Windows'
78+ run : |
79+ cd "${{ env.OPENVINO_INSTALL_DIR }}"
80+ source "${{ matrix.setup_script }}"
81+ echo "OpenVINO environment initialized"
82+
83+ - name : Build Whisper.cpp with OpenVINO
84+ run : |
85+ cmake -B build -DWHISPER_OPENVINO=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DOpenVINO_DIR="${{ env.OPENVINO_INSTALL_DIR }}/runtime/cmake"
86+ cmake --build build -j --config Release
87+
88+ - name : Install Node.js Dependencies
89+ run : |
90+ cd examples/addon.node
91+ npm install
92+
93+ - name : Build Node.js Addon (Windows)
94+ if : runner.os == 'Windows'
95+ run : |
96+ cd examples/addon.node
97+ call "${{ env.OPENVINO_INSTALL_DIR }}/${{ matrix.setup_script }}"
98+ npx cmake-js rebuild --runtime=electron --runtime-version=30.1.0 --arch=${{ matrix.arch }} --CDWHISPER_OPENVINO=ON --CDBUILD_SHARED_LIBS=OFF --CDOpenVINO_DIR="${{ env.OPENVINO_INSTALL_DIR }}/runtime/cmake" --CDCMAKE_MODULE_PATH="${{ github.workspace }}/cmake"
99+ shell : cmd
100+
101+ - name : Build Node.js Addon (Unix)
102+ if : runner.os != 'Windows'
103+ run : |
104+ cd examples/addon.node
105+ source "${{ env.OPENVINO_INSTALL_DIR }}/${{ matrix.setup_script }}"
106+ npx cmake-js rebuild --runtime=electron --runtime-version=30.1.0 --arch=${{ matrix.arch }} --CDWHISPER_OPENVINO=ON --CDBUILD_SHARED_LIBS=OFF --CDOpenVINO_DIR="${{ env.OPENVINO_INSTALL_DIR }}/runtime/cmake" --CDCMAKE_MODULE_PATH="${{ github.workspace }}/cmake"
107+
108+ - name : Verify Addon Build
109+ run : |
110+ cd examples/addon.node
111+ ls -la build/Release/
112+
113+ - name : Copy and Rename Addon
114+ run : |
115+ cd examples/addon.node
116+ cp build/Release/addon.node.node ${{ matrix.addon_name }}
117+
118+ - name : Upload Addon Artifact
119+ uses : actions/upload-artifact@v4
120+ with :
121+ name : ${{ matrix.addon_name }}
122+ path : examples/addon.node/${{ matrix.addon_name }}
123+ retention-days : 30
124+
125+ - name : Upload to Release (on release)
126+ if : github.event_name == 'release'
127+ uses : actions/upload-release-asset@v1
128+ env :
129+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
130+ with :
131+ upload_url : ${{ github.event.release.upload_url }}
132+ asset_path : examples/addon.node/${{ matrix.addon_name }}
133+ asset_name : ${{ matrix.addon_name }}
134+ asset_content_type : application/octet-stream
135+
136+ collect-artifacts :
137+ needs : build-openvino-addons
138+ runs-on : ubuntu-latest
139+ if : github.event_name == 'release'
140+
141+ steps :
142+ - name : Download all artifacts
143+ uses : actions/download-artifact@v4
144+ with :
145+ path : artifacts
146+
147+ - name : List downloaded artifacts
148+ run : |
149+ echo "Downloaded artifacts:"
150+ find artifacts -type f -name "*.node" -exec ls -la {} \;
151+
152+ - name : Create artifact summary
153+ run : |
154+ echo "# OpenVINO Addon Build Summary" >> $GITHUB_STEP_SUMMARY
155+ echo "Built addons for cross-platform OpenVINO support:" >> $GITHUB_STEP_SUMMARY
156+ echo "- Windows: addon-windows-openvino.node" >> $GITHUB_STEP_SUMMARY
157+ echo "- Linux: addon-linux-openvino.node" >> $GITHUB_STEP_SUMMARY
158+ echo "- macOS: addon-macos-openvino.node" >> $GITHUB_STEP_SUMMARY
159+ echo "" >> $GITHUB_STEP_SUMMARY
160+ echo "Compatible with:" >> $GITHUB_STEP_SUMMARY
161+ echo "- OpenVINO 2024.6.0" >> $GITHUB_STEP_SUMMARY
162+ echo "- Electron 30.1.0" >> $GITHUB_STEP_SUMMARY
163+ echo "- Node.js 21.x" >> $GITHUB_STEP_SUMMARY
0 commit comments