name: Unit Test Coverage
on:
  push:
    paths-ignore:
      - "**.md"
      - "channel.yaml"
      - "install.sh"
      - "tests/snapshotter/**"
      - "tests/install/**"
      - "tests/cgroup/**"
      - ".github/**"
      - "!.github/workflows/unitcoverage.yaml"
  pull_request:
    paths-ignore:
      - "**.md"
      - "channel.yaml"
      - "install.sh"
      - "tests/snapshotter/**"
      - "tests/install/**"
      - "tests/cgroup/**"
      - ".github/**"
      - "!.github/workflows/unitcoverage.yaml"
  workflow_dispatch: {}

permissions:
  contents: read

jobs:
  test-unit-linux:
    name: Unit Tests (linux)
    runs-on: ubuntu-24.04
    timeout-minutes: 20
    steps:
    - name: Checkout
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      with:
        fetch-depth: 1
    - name: Install Go
      uses: ./.github/actions/setup-go
    - name: Run Unit Tests
      run: |
        go test -coverpkg ./pkg/... -coverprofile coverage.out ./pkg/... -run Unit
        go tool cover -func coverage.out
    - name: On Failure, Launch Debug Session
      if: ${{ failure() }}
      uses: lhotari/action-upterm@b0357f23233f5ea6d58947c0c402e0631bab7334 # v1
      with:
        wait-timeout-minutes: 5
    - name: Upload Results To Codecov
      uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v5
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
        files: ./coverage.out
        flags: unittests # optional
        verbose: true # optional (default = false)
  test-unit-windows:
    name: Unit Tests (windows)
    runs-on: windows-2022
    timeout-minutes: 20
    steps:
    - name: Checkout
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      with:
        fetch-depth: 1
    - name: Install Go
      uses: ./.github/actions/setup-go
    - name: Run Unit Tests
      run: |
        go test -coverpkg ./pkg/... -coverprofile coverage.out ./pkg/... -run Unit
        go tool cover -func coverage.out
    - name: Upload Results To Codecov
      uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v5
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
        files: ./coverage.out
        flags: unittests # optional
        verbose: true # optional (default = false)
  test-mods:
    name: Test K8s Modules
    runs-on: ubuntu-24.04
    steps:
    - name: Checkout
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
    - name: Build test-mods
      run: docker build --target test-mods -t k3s:mod -f Dockerfile.test .
    - name: Run test-mods
      run: docker run -i k3s:mod
