name: npm-addon-linux-x64

on:
  push:
    branches:
      - node-addon
  workflow_dispatch:

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

permissions:
  contents: read
  id-token: write

jobs:
  npm-addon-linux-x64:
    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: 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
        uses: addnab/docker-run-action@v3
        with:
            image: quay.io/pypa/manylinux2014_x86_64
            options: |
              --volume ${{ github.workspace }}/:/shared/
            shell: bash
            run: |
              uname -a
              gcc --version
              cmake --version
              cd /shared

              mkdir build
              cd build
              cmake \
                -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 install

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

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

          ls -lh /shared/build

          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/
          sudo chown -R runner ./build
          echo "---"
          ls -lh build/install/lib/
          echo "---"

          # find build/install/lib/ -maxdepth 1 -type l
          # find build/install/lib/ -maxdepth 1 -type l -delete
          #
          # echo "---"
          # ls -lh build/install/lib/

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

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

      - uses: actions/upload-artifact@v4
        with:
          name: sherpa-onnx-linux-x64
          path: ./sherpa-onnx-node.tar.bz2

      - 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
