name: go test

on:
  push:
    paths: backend/**

jobs:
  check-runner:
    runs-on: ubuntu-latest
    outputs:
      runner-label: ${{ steps.set-runner.outputs.runner-label }}
    steps:
      - name: Set runner
        id: set-runner
        run: |
          runners=$(curl -s -H "Accept: application/vnd.github+json" -H "Authorization: token ${{ secrets.REPO_ACCESS_TOKEN }}" "https://api.github.com/repos/${{ github.repository }}/actions/runners")
          available=$(echo "$runners" | jq '.runners[] | select(.status == "online" and .busy == false and .labels[] .name == "self-hosted")')
          if [ -n "$available" ]; then
            echo "runner-label=self-hosted" >> "$GITHUB_OUTPUT"
          else
            echo "runner-label=ubuntu-latest" >> "$GITHUB_OUTPUT"
          fi

  build:
    needs: check-runner
    runs-on: ${{ needs.check-runner.outputs.runner-label }}
    steps:
      - uses: actions/checkout@v4
      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: ">=1.21"
      - name: Test
        run: |
          cd backend
          go test -exec sudo -v ./...
