name: test-go

on:
  push:
    branches:
      - master
    tags:
      - '*'
  pull_request:
    branches:
      - master

  workflow_dispatch:

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

jobs:
  go:
    name: go ${{ matrix.os }} ${{matrix.arch }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            arch: amd64
          - os: macos-latest
            arch: amd64
          - os: windows-latest
            arch: x64
          - os: windows-latest
            arch: x86 # use 386 for GOARCH

    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-go@v4
        with:
          go-version: '>=1.20'

      - name: Display go version
        shell: bash
        run: |
          go version
          go env GOPATH
          go env GOARCH

      - name: Set up MinGW
        if: matrix.os == 'windows-latest'
        uses: egor-tensin/setup-mingw@v2
        with:
          platform: ${{ matrix.arch }}

      - name: Show gcc
        if: matrix.os == 'windows-latest'
        run: |
          gcc --version

      - name: Test non-streaming decoding files (Linux/macOS)
        if: matrix.os != 'windows-latest'
        shell: bash
        run: |
          cd go-api-examples/non-streaming-decode-files
          ls -lh
          go mod tidy
          cat go.mod
          go build
          ls -lh

          git lfs install

          echo "Test transducer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-zipformer-en-2023-06-26
          ./run-transducer.sh
          rm -rf sherpa-onnx-zipformer-en-2023-06-26

          echo "Test paraformer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-paraformer-zh-2023-03-28
          ./run-paraformer.sh
          rm -rf sherpa-onnx-paraformer-zh-2023-03-28

          echo "Test NeMo CTC"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-nemo-ctc-en-conformer-medium
          ./run-nemo-ctc.sh
          rm -rf sherpa-onnx-nemo-ctc-en-conformer-medium

          echo "Test Whisper tiny.en"
          GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/sherpa-onnx-whisper-tiny.en
          cd sherpa-onnx-whisper-tiny.en
          git lfs pull --include "*.onnx"
          cd ..
          ./run-whisper.sh
          rm -rf sherpa-onnx-whisper-tiny.en

          echo "Test Tdnn yesno"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-tdnn-yesno
          ./run-tdnn-yesno.sh
          rm -rf sherpa-onnx-tdnn-yesno

      - name: Test non-streaming decoding files (Win64)
        if: matrix.os == 'windows-latest' && matrix.arch == 'x64'
        shell: bash
        run: |
          cd go-api-examples/non-streaming-decode-files
          ls -lh
          go mod tidy
          cat go.mod
          go build
          ls -lh

          echo $PWD
          ls -lh /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/
          ls -lh /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/*
          cp -v /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/sherpa-onnx-go-windows*/lib/x86_64-pc-windows-gnu/*.dll .
          ls -lh

          git lfs install

          echo "Test transducer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-zipformer-en-2023-06-26
          ./run-transducer.sh
          rm -rf sherpa-onnx-zipformer-en-2023-06-26

          echo "Test paraformer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-paraformer-zh-2023-03-28
          ./run-paraformer.sh
          rm -rf sherpa-onnx-paraformer-zh-2023-03-28

          echo "Test NeMo CTC"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-nemo-ctc-en-conformer-medium
          ./run-nemo-ctc.sh
          rm -rf sherpa-onnx-nemo-ctc-en-conformer-medium

          echo "Test Whisper tiny.en"
          GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/sherpa-onnx-whisper-tiny.en
          cd sherpa-onnx-whisper-tiny.en
          git lfs pull --include "*.onnx"
          cd ..
          ./run-whisper.sh
          rm -rf sherpa-onnx-whisper-tiny.en

          echo "Test Tdnn yesno"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-tdnn-yesno
          ./run-tdnn-yesno.sh
          rm -rf sherpa-onnx-tdnn-yesno

      - name: Test non-streaming decoding files (Win32)
        if: matrix.os == 'windows-latest' && matrix.arch == 'x86'
        shell: bash
        run: |
          cd go-api-examples/non-streaming-decode-files
          ls -lh
          go mod tidy
          cat go.mod
          ls -lh

          go env GOARCH
          go env
          echo "------------------------------"
          go env -w GOARCH=386
          go env -w CGO_ENABLED=1
          go env

          go clean
          go build

          echo $PWD
          ls -lh /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/
          cp -v /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/sherpa-onnx-go-windows*/lib/i686-pc-windows-gnu/*.dll .
          ls -lh

          git lfs install

          echo "Test transducer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-zipformer-en-2023-06-26
          ./run-transducer.sh
          rm -rf sherpa-onnx-zipformer-en-2023-06-26

          echo "Test paraformer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-paraformer-zh-2023-03-28
          ./run-paraformer.sh
          rm -rf sherpa-onnx-paraformer-zh-2023-03-28

          echo "Test NeMo CTC"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-nemo-ctc-en-conformer-medium
          ./run-nemo-ctc.sh
          rm -rf sherpa-onnx-nemo-ctc-en-conformer-medium

          echo "Test Whisper tiny.en"
          GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/sherpa-onnx-whisper-tiny.en
          cd sherpa-onnx-whisper-tiny.en
          git lfs pull --include "*.onnx"
          cd ..
          ./run-whisper.sh
          rm -rf sherpa-onnx-whisper-tiny.en

          echo "Test Tdnn yesno"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-tdnn-yesno
          ./run-tdnn-yesno.sh
          rm -rf sherpa-onnx-tdnn-yesno

      - name: Test streaming decoding files (Linux/macOS)
        if: matrix.os != 'windows-latest'
        shell: bash
        run: |
          cd go-api-examples/streaming-decode-files
          ls -lh
          go mod tidy
          cat go.mod
          go build
          ls -lh

          git lfs install

          echo "Test transducer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-streaming-zipformer-en-2023-06-26
          ./run-transducer.sh
          rm -rf sherpa-onnx-streaming-zipformer-en-2023-06-26

          echo "Test paraformer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-streaming-paraformer-bilingual-zh-en
          ./run-paraformer.sh
          rm -rf sherpa-onnx-streaming-paraformer-bilingual-zh-en

      - name: Test streaming decoding files (Win64)
        if: matrix.os == 'windows-latest' && matrix.arch == 'x64'
        shell: bash
        run: |
          cd go-api-examples/streaming-decode-files
          ls -lh
          go mod tidy
          cat go.mod
          go build
          ls -lh

          echo $PWD
          ls -lh /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/
          ls -lh /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/*
          cp -v /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/sherpa-onnx-go-windows*/lib/x86_64-pc-windows-gnu/*.dll .
          ls -lh

          git lfs install

          echo "Test transducer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-streaming-zipformer-en-2023-06-26
          ./run-transducer.sh
          rm -rf sherpa-onnx-streaming-zipformer-en-2023-06-26

          echo "Test paraformer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-streaming-paraformer-bilingual-zh-en
          ./run-paraformer.sh
          rm -rf sherpa-onnx-streaming-paraformer-bilingual-zh-en

      - name: Test streaming decoding files (Win32)
        if: matrix.os == 'windows-latest' && matrix.arch == 'x86'
        shell: bash
        run: |
          cd go-api-examples/streaming-decode-files
          ls -lh
          go mod tidy
          cat go.mod
          ls -lh

          go env GOARCH
          go env
          echo "------------------------------"
          go env -w GOARCH=386
          go env -w CGO_ENABLED=1
          go env

          go clean
          go build

          echo $PWD
          ls -lh /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/
          ls -lh /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/*
          cp -v /C/Users/runneradmin/go/pkg/mod/github.com/k2-fsa/sherpa-onnx-go-windows*/lib/i686-pc-windows-gnu/*.dll .
          ls -lh

          git lfs install

          echo "Test transducer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-streaming-zipformer-en-2023-06-26
          ./run-transducer.sh
          rm -rf sherpa-onnx-streaming-zipformer-en-2023-06-26

          echo "Test paraformer"
          git clone https://huggingface.co/csukuangfj/sherpa-onnx-streaming-paraformer-bilingual-zh-en
          ./run-paraformer.sh
          rm -rf sherpa-onnx-streaming-paraformer-bilingual-zh-en
