name: Go

on:
  pull_request:
    branches:
    - main
  push:
    branches:
    - main

jobs:
  build:
    name: Build ${{ matrix.go-version }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [1.21.9, 1.22.3]
    steps:
    - name: Set up Go ${{ matrix.go-version }}
      uses: actions/setup-go@v3
      with:
        go-version: ${{ matrix.go-version }}
    - name: Check out code into the Go module directory
      uses: actions/checkout@v3
    - name: Build and Lint
      run: |
         go build ./...
         go vet ./...
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - name: "Set up Go"
        uses: actions/setup-go@v3
        with:
          go-version: 1.22.3
      - name: Check out code
        uses: actions/checkout@v3
      - name: Lint
        uses: golangci/golangci-lint-action@v3
        with:
          version: latest
          args: --config ./.golangci.yml --timeout=2m
  test:
    name: Text ${{ matrix.os }} | ${{ matrix.go-version }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        go-version: [1.21.9, 1.22.3]
        os: [ubuntu-latest, windows-latest, macos-latest]
    steps:
    - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
      uses: actions/setup-go@v3
      with:
        go-version: ${{ matrix.go-version }}
    - name: Check out code into the Go module directory
      uses: actions/checkout@v3
    - name: Test on ${{ matrix.os }}
      run: |
         go test ./...
  vulncheck:
    name: Vulncheck ${{ matrix.go-version }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [1.21.9, 1.22.3]
    steps:
    - name: Set up Go ${{ matrix.go-version }}
      uses: actions/setup-go@v3
      with:
        go-version: ${{ matrix.go-version }}
    - name: Check out code into the Go module directory
      uses: actions/checkout@v3
    - name: Get govulncheck
      run: go install golang.org/x/vuln/cmd/govulncheck@latest
      shell: bash
    - name: Run govulncheck
      run: govulncheck ./...
      shell: bash
