name: Build and Test Go Project
on: [push, pull_request]

permissions:
  contents: read

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]

    runs-on: ${{ matrix.os }}

    steps:
      - name: Force git to use LF
        # This step is required on Windows to work around go mod tidy -diff issues caused by CRLF line endings.
        # TODO: replace with a checkout option when https://github.com/actions/checkout/issues/226 is implemented
        if: runner.os == 'Windows'
        run: |
          git config --global core.autocrlf false
          git config --global core.eol lf

      - name: Check out code
        uses: actions/checkout@v6

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
          cache: "npm"
          cache-dependency-path: ui/package-lock.json

      - name: Build UI
        shell: bash
        run: script/build-ui

      - name: Set up Go
        uses: actions/setup-go@v6
        with:
          go-version-file: "go.mod"

      - name: Tidy dependencies
        run: go mod tidy -diff

      - name: Run unit tests
        shell: bash
        run: script/test

      - name: Build
        run: go build -v ./cmd/github-mcp-server
