name: npm

on:
  push:
    branches:
      - npm
  workflow_dispatch:

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

permissions:
  contents: read
  id-token: write

jobs:
  nodejs:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        python-version: ["3.8"]

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

      - name: Install emsdk
        uses: mymindstorm/setup-emsdk@v14
        with:
          version: 3.1.51
          actions-cache-folder: 'emsdk-cache'

      - name: View emsdk version
        shell: bash
        run: |
          emcc -v
          echo "--------------------"
          emcc --check

      - 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 nodejs package
        shell: bash
        run: |
          ./build-wasm-simd-nodejs.sh
          cp -v build-wasm-simd-nodejs/install/bin/wasm/nodejs/*.js ./scripts/nodejs/
          cp -v build-wasm-simd-nodejs/install/bin/wasm/nodejs/*.wasm ./scripts/nodejs/

          SHERPA_ONNX_VERSION=$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt  | cut -d " " -f 2  | cut -d '"' -f 2)
          echo "SHERPA_ONNX_VERSION $SHERPA_ONNX_VERSION"

          cd scripts/nodejs

          owner=${{ github.repository_owner }}
          echo "owner: $owner"

          sed -i.bak s/SHERPA_ONNX_VERSION/$SHERPA_ONNX_VERSION/g ./package.json
          sed -i.bak s/k2-fsa/$owner/g ./package.json

          rm package.json.bak

      - name: Collect files
        shell: bash
        run: |
          dst=sherpa-onnx-wasm-nodejs
          mkdir $dst
          cp -v scripts/nodejs/* $dst
          tar cvjf $dst.tar.bz2 $dst

          echo "---"
          ls -h $dst

      - uses: actions/upload-artifact@v4
        with:
          name: sherpa-onnx-wasm-nodejs
          path: ./*.tar.bz2

      - name: Build nodejs package
        shell: bash
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
        run: |
          cd scripts/nodejs

          git diff

          npm install
          npm ci
          # see https://docs.npmjs.com/generating-provenance-statements
          npm publish --provenance --access public
