Skip to content

Commit 8e2a69e

Browse files
ZHIYONG OUclaude
authored andcommitted
feat: Add OpenVINO cross-platform addon build workflow
- Windows, Linux, macOS addon builds with OpenVINO 2024.6.0 - Electron 30.1.0 compatibility - Automated artifact upload and release integration - Comprehensive build matrix for all platforms 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent c88ffbf commit 8e2a69e

1 file changed

Lines changed: 163 additions & 0 deletions

File tree

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
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

Comments
 (0)