name: linux

on:
  push:
    branches:
      - master
    paths:
      - '.github/workflows/linux.yaml'
      - '.github/scripts/run-test.sh'
      - '.github/scripts/test-vad.sh'
      - 'CMakeLists.txt'
      - 'cmake/**'
      - 'sherpa-ncnn/csrc/*'
  pull_request:
    branches:
      - master
    paths:
      - '.github/workflows/linux.yaml'
      - '.github/scripts/run-test.sh'
      - '.github/scripts/test-vad.sh'
      - 'CMakeLists.txt'
      - 'cmake/**'
      - 'sherpa-ncnn/csrc/*'
      - 'sherpa-ncnn/csrc/*'

  workflow_dispatch:

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

permissions:
  contents: read

jobs:
  linux:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]

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

      - name: ccache
        uses: hendrikmuhs/ccache-action@v1.2
        with:
          key: ${{ matrix.os }}-linux

      - name: Configure CMake
        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 -D CMAKE_BUILD_TYPE=Release -DSHERPA_NCNN_ENABLE_FFMPEG_EXAMPLES=OFF ..

      - name: Build sherpa-ncnn for ubuntu
        run: |
          export CMAKE_CXX_COMPILER_LAUNCHER=ccache
          export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"

          cd build
          make -j2

          ls -lh lib
          ls -lh bin

          ls -lh bin/sherpa-ncnn
          file bin/sherpa-ncnn

          ls -lh bin/sherpa-ncnn-vad
          file bin/sherpa-ncnn-vad

          ls -lh bin/sherpa-ncnn-microphone
          file bin/sherpa-ncnn-microphone

          ls -lh bin/decode-file-c-api
          file bin/decode-file-c-api

      - name: Upload binary sherpa-ncnn and sherpa-ncnn-microphone
        uses: actions/upload-artifact@v2
        with:
          name: sherpa-ncnn-pre-built-binaries-os-${{ matrix.os }}
          path: ./build/bin

      - name: Test vad
        run: |
          export PATH=$PWD/build/bin:$PATH
          export EXE=sherpa-ncnn-vad

          .github/scripts/test-vad.sh

      - name: Test sherpa-ncnn
        run: |
          export PATH=$PWD/build/bin:$PATH
          export EXE=sherpa-ncnn

          .github/scripts/run-test.sh

      - name: Test C API
        run: |
          export PATH=$PWD/build/bin:$PATH
          export EXE=decode-file-c-api

          .github/scripts/run-test.sh
