name: Validate Microsoft build of Go

on:
  push:
    branches:
      - main
    paths-ignore:
      - '**.md'
  pull_request:
    paths-ignore:
      - '**.md'

jobs:
  microsoft-basic:
    name: 'Microsoft build of Go ${{ matrix.go-version }} on ${{ matrix.os }}'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        go-version: ['1.25', '1.24']
    steps:
      - uses: actions/checkout@v6

      - name: Setup Microsoft build of Go ${{ matrix.go-version }}
        uses: ./
        with:
          go-version: ${{ matrix.go-version }}
          go-download-base-url: 'https://aka.ms/golang/release/latest'
          cache: false

      - name: Verify Go installation
        run: go version

      - name: Verify Go env
        run: go env

      - name: Verify Go is functional
        shell: bash
        run: |
          # Create a simple Go program and run it
          mkdir -p /tmp/test-go && cd /tmp/test-go
          cat > main.go << 'EOF'
          package main
          import "fmt"
          func main() {
            fmt.Println("Hello from Microsoft build of Go!")
          }
          EOF
          go run main.go

  microsoft-env-var:
    name: 'Microsoft build of Go via env var on ${{ matrix.os }}'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
    env:
      GO_DOWNLOAD_BASE_URL: 'https://aka.ms/golang/release/latest'
    steps:
      - uses: actions/checkout@v6

      - name: Setup Microsoft build of Go via environment variable
        uses: ./
        with:
          go-version: '1.25'
          cache: false

      - name: Verify Go installation
        run: go version

      - name: Verify Go is functional
        shell: bash
        run: |
          mkdir -p /tmp/test-go && cd /tmp/test-go
          cat > main.go << 'EOF'
          package main
          import "fmt"
          func main() {
            fmt.Println("Hello from Microsoft build of Go via env var!")
          }
          EOF
          go run main.go

  microsoft-architecture:
    name: 'Microsoft build of Go arch ${{ matrix.architecture }} on ${{ matrix.os }}'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
        architecture: [x64]
        include:
          - os: macos-latest
            architecture: arm64
    steps:
      - uses: actions/checkout@v6

      - name: Setup Microsoft build of Go with architecture
        uses: ./
        with:
          go-version: '1.25'
          go-download-base-url: 'https://aka.ms/golang/release/latest'
          architecture: ${{ matrix.architecture }}
          cache: false

      - name: Verify Go installation
        run: go version

  microsoft-with-cache:
    name: 'Microsoft build of Go with caching on ${{ matrix.os }}'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
    steps:
      - uses: actions/checkout@v6

      - name: Setup Microsoft build of Go with caching
        uses: ./
        with:
          go-version: '1.25'
          go-download-base-url: 'https://aka.ms/golang/release/latest'
          cache: true

      - name: Verify Go installation
        run: go version

      - name: Verify Go is functional
        shell: bash
        run: |
          mkdir -p /tmp/test-go && cd /tmp/test-go
          go mod init test
          cat > main.go << 'EOF'
          package main
          import "fmt"
          func main() {
            fmt.Println("Hello from cached Microsoft build of Go!")
          }
          EOF
          go run main.go
