name: test-dot-net

on:
  push:
    branches:
      - master
    paths:
      - '.github/workflows/test-dot-net.yaml'
      - 'CMakeLists.txt'
      - 'cmake/**'
      - 'sherpa-onnx/csrc/*'
      - 'dotnet-examples/**'
      - 'scripts/dotnet/**'

  pull_request:
    branches:
      - master
    paths:
      - '.github/workflows/test-dot-net.yaml'
      - 'CMakeLists.txt'
      - 'cmake/**'
      - 'sherpa-onnx/csrc/*'
      - 'dotnet-examples/**'
      - 'scripts/dotnet/**'

  workflow_dispatch:

concurrency:
  group: test-dot-net-${{ github.ref }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  build-libs:
    name: ${{ matrix.os }}
    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: ccache
        uses: hendrikmuhs/ccache-action@v1.2
        with:
          key: ${{ matrix.os }}-release-shared

      - name: Build sherpa-onnx
        shell: bash
        run: |
          export CMAKE_CXX_COMPILER_LAUNCHER=ccache
          export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
          cmake --version

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

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

      - uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.os }}
          path: ./build/install/lib/

  test-dot-net:
    runs-on: ${{ matrix.os }}
    needs: [build-libs]
    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 }}

      - name: Install Python dependencies
        shell: bash
        run: |
          python3 -m pip install --upgrade pip Jinja2

      - name: Retrieve artifact from ubuntu-latest
        uses: actions/download-artifact@v4
        with:
          name: ubuntu-latest
          path: /tmp/linux

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: |
            6.0.x

      - name: Check dotnet
        run: dotnet --info

      - name: Display files
        shell: bash
        run: |
          echo "----------/tmp/----------"
          ls -lh /tmp/

          echo "----------/tmp/linux----------"
          ls -lh /tmp/linux

      - name: Build
        shell: bash
        run: |
          cd scripts/dotnet
          ./run.sh

      - name: Copy files
        shell: bash
        run: |
          cp -v scripts/dotnet/examples/Common.csproj dotnet-examples/Common/

          ls -lh /tmp

      - name: Run tests
        shell: bash
        run: |
          .github/scripts/test-dot-net.sh

      - uses: actions/upload-artifact@v4
        with:
          name: dot-net-tts-generated-test-files-${{ matrix.os }}
          path: tts
