name: Func Unit Test

on: [pull_request]

jobs:
  test:
    name: Unit Test
    strategy:
      matrix:
        java: [21]
        os: ["ubuntu-latest", "windows-latest", "macos-latest"]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Install Bash 4 on Mac
        if: matrix.os == 'macos-latest'
        run: |
          /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
          brew update

          brew install bash
          brew install gnu-sed

          echo "/usr/local/bin" >> $GITHUB_PATH
          echo "$(brew --prefix)/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH
      - run: git config --global core.autocrlf false
      - uses: actions/checkout@v4
      - uses: knative/actions/setup-go@main
      - uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java }}
          distribution: 'temurin'
      - uses: actions-rust-lang/setup-rust-toolchain@v1
      - name: Core Unit Tests
        run: make test
        env:
          FUNC_REPO_REF: ${{ github.event.pull_request.head.repo.full_name }}
          FUNC_REPO_BRANCH_REF: ${{ github.head_ref }}
      - name: Template Unit Tests on Ubuntu
        if: matrix.os == 'ubuntu-latest'
        run: |
          python3 -m venv ${{ github.workspace }}/.venv
          . ${{ github.workspace }}/.venv/bin/activate
          make test-templates
      - name: Template Unit Tests
        if: matrix.os != 'ubuntu-latest'
        run: make test-templates
      - uses: codecov/codecov-action@v5
        with:
          files: ./coverage.txt
          flags: unit-tests
