Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Publish npm package with node-addon-api for Windows #838

Merged
merged 4 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/scripts/node-addon/notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ See also
- https://stackoverflow.com/questions/15176082/npm-package-json-os-specific-dependency
- https://github.com/WonderInventions/node-webrtc/blob/develop/lib/binding.js
- cross-compiling https://github.com/nodejs/node-gyp/issues/829#issuecomment-665527032
- https://nodejs.github.io/node-addon-examples/build-tools/cmake-js
2 changes: 1 addition & 1 deletion .github/scripts/node-addon/package-optional.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "sherpa-onnx-PLATFORM-ARCH",
"name": "sherpa-onnx-PLATFORM2-ARCH",
"version": "SHERPA_ONNX_VERSION",
"description": "Speech-to-text and text-to-speech using Next-gen Kaldi without internet connection",
"main": "index.js",
Expand Down
3 changes: 2 additions & 1 deletion .github/scripts/node-addon/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
"optionalDependencies": {
"sherpa-onnx-darwin-arm64": "^SHERPA_ONNX_VERSION",
"sherpa-onnx-darwin-x64": "^SHERPA_ONNX_VERSION",
"sherpa-onnx-linux-x64": "^SHERPA_ONNX_VERSION"
"sherpa-onnx-linux-x64": "^SHERPA_ONNX_VERSION",
"sherpa-onnx-win-x64": "^SHERPA_ONNX_VERSION"
}
}
6 changes: 6 additions & 0 deletions .github/scripts/node-addon/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ src_dir=$sherpa_onnx_dir/.github/scripts/node-addon

platform=$(node -p "require('os').platform()")
arch=$(node -p "require('os').arch()")
platform2=$platform

if [[ $platform == win32 ]]; then
platform2=win
fi

SHERPA_ONNX_VERSION=$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2)
echo "SHERPA_ONNX_VERSION $SHERPA_ONNX_VERSION"
Expand All @@ -17,6 +22,7 @@ fi

sed -i.bak s/SHERPA_ONNX_VERSION/$SHERPA_ONNX_VERSION/g $src_dir/package-optional.json
sed -i.bak s/k2-fsa/$owner/g $src_dir/package-optional.json
sed -i.bak s/PLATFORM2/$platform2/g $src_dir/package-optional.json
sed -i.bak s/PLATFORM/$platform/g $src_dir/package-optional.json
sed -i.bak s/ARCH/$arch/g $src_dir/package-optional.json

Expand Down
12 changes: 4 additions & 8 deletions .github/workflows/npm-addon-linux-x64.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -66,30 +66,26 @@ jobs:
- name: Build sherpa-onnx node-addon
shell: bash
run: |
export PKG_CONFIG_PATH=$PWD/build/install:$PKG_CONFIG_PATH
d=$PWD
export SHERPA_ONNX_INSTALL_DIR=$d/build/install

sudo mkdir /shared
sudo ln -s $PWD/build /shared/

ls -lh /shared/build

pkg-config --cflags sherpa-onnx
pkg-config --libs sherpa-onnx

cd scripts/node-addon-api/

npm i

./node_modules/.bin/node-gyp configure build --verbose
./node_modules/.bin/cmake-js compile --log-level verbose

- name: Prepare for publish
shell: bash
run: |
export PKG_CONFIG_PATH=$PWD/build/install:$PKG_CONFIG_PATH

owner=${{ github.repository_owner }}
export owner


echo "---"
ls -lh build/install/lib/
sudo chown -R runner ./build
Expand Down
13 changes: 3 additions & 10 deletions .github/workflows/npm-addon-macos.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,31 +61,24 @@ jobs:
..
make -j install



- name: Build sherpa-onnx node-addon
shell: bash
run: |
export PKG_CONFIG_PATH=$PWD/build/install:$PKG_CONFIG_PATH

pkg-config --cflags sherpa-onnx
pkg-config --libs sherpa-onnx
d=$PWD
export SHERPA_ONNX_INSTALL_DIR=$d/build/install

cd scripts/node-addon-api/

npm i

./node_modules/.bin/node-gyp configure build --verbose
./node_modules/.bin/cmake-js compile --log-level verbose

- name: Prepare for publish
shell: bash
run: |
export PKG_CONFIG_PATH=$PWD/build/install:$PKG_CONFIG_PATH

owner=${{ github.repository_owner }}
export owner


ls -lh build/install/lib/
echo "---"

Expand Down
110 changes: 110 additions & 0 deletions .github/workflows/npm-addon-win-x64.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: npm-addon-win-x64

on:
workflow_dispatch:

concurrency:
group: npm-addon-win-x64-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read
id-token: write

jobs:
npm-addon-win-x64:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
python-version: ["3.8"]

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- uses: actions/setup-node@v4
with:
registry-url: 'https://registry.npmjs.org'

- name: Display node version
shell: bash
run: |
node --version

- name: Build sherpa-onnx
shell: bash
run: |
mkdir build
cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=./install \
-DBUILD_SHARED_LIBS=ON \
-DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
-DSHERPA_ONNX_ENABLE_BINARY=OFF \
..

ls -lh _deps/onnxruntime-src/lib/

cmake --build . --config Release --target install -- -m:6

ls -lh install/lib

echo "----------"

cp -v _deps/onnxruntime-src/lib/*.lib ./install/lib

echo "----------"

ls -lh install/lib

- name: Build sherpa-onnx node-addon
shell: bash
run: |
d=$PWD
export SHERPA_ONNX_INSTALL_DIR=$d/build/install

cd scripts/node-addon-api/

npm i

./node_modules/.bin/cmake-js compile --log-level verbose

- name: Prepare for publish
shell: bash
run: |
owner=${{ github.repository_owner }}
export owner

echo "---"
ls -lh build/install/lib/
echo "---"
ls -lh build/install/lib/
echo "---"

.github/scripts/node-addon/run.sh

- name: Display files to be published
shell: bash
run: |
ls -lh ./sherpa-onnx-node

- name: Publish
shell: bash
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
cd ./sherpa-onnx-node
npm install
npm ci
# see https://docs.npmjs.com/generating-provenance-statements
npm publish --provenance --access public
73 changes: 63 additions & 10 deletions .github/workflows/test-nodejs-addon-api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos-11, macos-14, ubuntu-20.04, ubuntu-22.04]
os: [macos-11, macos-14, ubuntu-20.04, ubuntu-22.04, windows-latest]
node-version: ["16", "17", "18", "19", "21", "22"]
python-version: ["3.8"]

Expand All @@ -53,6 +53,16 @@ jobs:
with:
python-version: ${{ matrix.python-version }}

- name: Install Python dependencies
shell: bash
run: |
pip install ninja

- name: Show ninja help
shell: bash
run: |
ninja --help || true

- uses: actions/setup-node@v4
with:
registry-url: 'https://registry.npmjs.org'
Expand All @@ -63,12 +73,18 @@ jobs:
run: |
node --version

- name: Display npm help
shell: bash
run: |
npm help

- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ${{ matrix.os }}-release-shared

- name: Build sherpa-onnx
if: matrix.os == 'windows-latest'
shell: bash
run: |
export CMAKE_CXX_COMPILER_LAUNCHER=ccache
Expand All @@ -77,34 +93,71 @@ jobs:
mkdir build
cd build
cmake \
-DCMAKE_INSTALL_PREFIX=/tmp/sherpa-onnx \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=./install \
-DBUILD_SHARED_LIBS=ON \
-DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
-DSHERPA_ONNX_ENABLE_BINARY=OFF \
..
make -j
make install

ls -lh _deps/onnxruntime-src/lib/

cmake --build . --config Release --target install -- -m:6

ls -lh install/lib

echo "----------"

cp -v _deps/onnxruntime-src/lib/*.lib ./install/lib

echo "----------"

ls -lh install/lib

- name: Build sherpa-onnx
if: matrix.os != 'windows-latest'
shell: bash
run: |
export CMAKE_CXX_COMPILER_LAUNCHER=ccache
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"

mkdir build
cd build
cmake \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=./install \
-DBUILD_SHARED_LIBS=ON \
-DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
-DSHERPA_ONNX_ENABLE_BINARY=OFF \
..

cmake --build . --config Release --target install -- -j 6

- name: Build node-addon-api package
shell: bash
run: |
cd scripts/node-addon-api
d=$PWD
export SHERPA_ONNX_INSTALL_DIR=$d/build/install

export PKG_CONFIG_PATH=/tmp/sherpa-onnx:$PKG_CONFIG_PATH
cd scripts/node-addon-api

ls -lh /tmp/sherpa-onnx
echo $d/build/install

pkg-config --cflags sherpa-onnx
pkg-config --libs sherpa-onnx
ls -lh $d/build/install

npm i

./node_modules/.bin/node-gyp configure build --verbose
./node_modules/.bin/cmake-js compile --log-level verbose

- name: Test streaming transducer
shell: bash
run: |
export PATH=$PWD/build/install/lib:$PATH
export LD_LIBRARY_PATH=$PWD/build/install/lib:$LD_LIBRARY_PATH

cd scripts/node-addon-api
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
tar xvf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-nodejs-addon-npm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos-11, macos-14, ubuntu-20.04, ubuntu-22.04]
os: [macos-11, macos-14, ubuntu-20.04, ubuntu-22.04, windows-latest]
node-version: ["16", "17", "18", "19", "21", "22"]

steps:
Expand Down
8 changes: 4 additions & 4 deletions python-api-examples/offline-tts.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@

Example (2/2)

wget https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-zh-aishell3.tar.bz2
tar xvf vits-zh-aishell3.tar.bz2
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-icefall-zh-aishell3.tar.bz2
tar xvf vits-icefall-zh-aishell3.tar.bz2

python3 ./python-api-examples/offline-tts.py \
--vits-model=./vits-aishell3.onnx \
--vits-model=./model.onnx \
--vits-lexicon=./lexicon.txt \
--vits-tokens=./tokens.txt \
--tts-rule-fsts=./rule.fst \
--tts-rule-fsts='./phone.fst,./date.fst,./number.fst' \
--sid=21 \
--output-filename=./liubei-21.wav \
"勿以恶小而为之,勿以善小而不为。惟贤惟德,能服于人。122334"
Expand Down
Loading
Loading