name: test-node-addon-api on: push: branches: - master paths: - '.github/workflows/test-nodejs-addon-api.yaml' - 'cmake/**' - 'sherpa-onnx/csrc/*' - 'sherpa-onnx/c-api/*' - 'scripts/node-addon-api/**' pull_request: branches: - master paths: - '.github/workflows/test-nodejs-addon-api.yaml' - 'cmake/**' - 'sherpa-onnx/csrc/*' - 'sherpa-onnx/c-api/*' - 'scripts/node-addon-api/**' workflow_dispatch: concurrency: group: test-node-addon-api-${{ github.ref }} cancel-in-progress: true permissions: contents: read jobs: test-node-addon-api: name: ${{ matrix.os }} ${{ matrix.node-version }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, ubuntu-latest] node-version: ["16", "22"] 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 }} - 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' node-version: ${{ matrix.node-version }} - name: Display node version shell: bash 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 export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" 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 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: | d=$PWD export SHERPA_ONNX_INSTALL_DIR=$d/build/install cd scripts/node-addon-api echo $d/build/install ls -lh $d/build/install npm i ./node_modules/.bin/cmake-js compile --log-level verbose - name: Run tests shell: bash run: | export PATH=$PWD/build/install/lib:$PATH export LD_LIBRARY_PATH=$PWD/build/install/lib:$LD_LIBRARY_PATH d=nodejs-addon-examples cd $d files=$(ls *.js) echo $files for f in ${files[@]}; do echo $f sed -i.bak s%sherpa-onnx-node%./sherpa-onnx% ./$f done cd .. cp -v scripts/node-addon-api/build/Release/sherpa-onnx.node $d/ cp -v scripts/node-addon-api/lib/*.js $d/ cp -v ./build/install/lib/lib* $d/ .github/scripts/test-nodejs-addon-npm.sh