name: "Go CI"
on:
  push:
    branches:
      - master
      - 'dev-*'
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up Go 1.20
        uses: actions/setup-go@v4
        with:
          go-version: "1.20"

      - name: Lint
        uses: golangci/golangci-lint-action@v3
        with:
            version: v1.54
            skip-pkg-cache: true
            args: --out-format=colored-line-number --timeout=20m

      - name: Format
        run: make fmt check_changes

  check:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up Go 1.20
        uses: actions/setup-go@v4
        with:
          go-version: "1.20"

      - name: Check
        run: make go_mod check_changes

  test:
    strategy:
      fail-fast: false
      matrix:
        os: ["ubuntu-latest", "macOS-latest", "windows-latest"]
        go: ["1.20", "1.21"]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up Go ${{ matrix.go }}
        uses: actions/setup-go@v4
        with:
          go-version: ${{ matrix.go }}

      - name: Run tests
        run: make test