---
name: CI
on:
  push:
    tags:
      - v*
    branches:
      - master
  pull_request:
jobs:
  # Check if there any dirty change for go mod tidy
  go-mod:
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.16
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Check go mod
        run: |
          go mod tidy
          git diff --exit-code go.mod

  # We already run the current golangci-lint in tests, but here we test
  # our GitHub action with the latest stable golangci-lint.
  golangci-lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: lint
        uses: golangci/golangci-lint-action@v2.5.1
        with:
          version: latest
  tests-on-windows:
    needs: golangci-lint # run after golangci-lint action to not produce duplicated errors
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.16 # test only the latest go version to speed up CI
      - name: Run tests
        run: make.exe test
        continue-on-error: true
  tests-on-macos:
    needs: golangci-lint # run after golangci-lint action to not produce duplicated errors
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.16 # test only the latest go version to speed up CI
      - name: Run tests
        run: make test
  tests-on-unix:
    needs: golangci-lint # run after golangci-lint action to not produce duplicated errors
    runs-on: ubuntu-latest
    strategy:
      matrix:
        golang:
          - 1.14
          - 1.15
          - 1.16
    steps:
      - uses: actions/checkout@v2
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ matrix.golang }}
      - uses: actions/cache@v2.1.4
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ matrix.golang }}-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-${{ matrix.golang }}-
      - name: Run tests
        run: make test
  check_generated:
    needs: golangci-lint # run after golangci-lint action to not produce duplicated errors
    runs-on: ubuntu-latest
    env:
      # needed for github-action-config.json generation
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - uses: actions/checkout@v2
      - name: Unshallow
        run: git fetch --prune --unshallow
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.16
      - name: Check generated files are up to date
        run: make fast_check_generated
