name: Lint

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]
    types: [opened, synchronize, reopened]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Go 1.x
        uses: actions/setup-go@v2
        with:
          go-version: ^1.14

      - name: Checkout codebase
        uses: actions/checkout@v2

      - name: Cache go module
        uses: actions/cache@v2
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: ${{ runner.os }}-go-

      - name: Lint *.go files
        if: ${{ always() }}
        run: |
          go vet $(go list ./... | grep -v /external/)
          if [[ $? != 0 ]]; then
            exit 1
          fi

      - name: Lint other files
        if: ${{ always() }}
        uses: github/super-linter@v3.9.4
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          VALIDATE_ALL_CODEBASE: false
          VALIDATE_BASH: false
          VALIDATE_DOCKERFILE: false
          VALIDATE_DOCKERFILE_HADOLINT: false
          VALIDATE_GO: false
          VALIDATE_JSON: false
          VALIDATE_MD: false
          VALIDATE_PROTOBUF: false

      - name: Show if need to format code
        if: ${{ always() }}
        run: |
          filesNeedToFormat=$(go fmt ./...)
          if [[ $filesNeedToFormat ]]; then
            echo -e "\033[0;36m[Error] The following Go files need to be formatted:\033[0m"
            echo -e "\033[0;31m$filesNeedToFormat\033[0m"
            exit 1
          fi
