#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

name: CI - Go Functions style check
on:
  pull_request:
    branches:
      - master
      - branch-*
    paths:
      - '.github/workflows/**'
      - 'pulsar-function-go/**'
  push:
    branches:
      - branch-*
    paths:
      - '.github/workflows/**'
      - 'pulsar-function-go/**'

env:
  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3

jobs:
  check-style:

    name: Go ${{ matrix.go-version }} Functions style check
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [1.11, 1.12, 1.13, 1.14]

    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2

      - name: Tune Runner VM
        uses: ./.github/actions/tune-runner-vm

      - name: Detect changed files
        id:   changes
        uses: apache/pulsar-test-infra/paths-filter@master
        with:
          filters: .github/changes-filter.yaml

      - name: Check changed files
        id: check_changes
        run: echo "::set-output name=docs_only::${{ fromJSON(steps.changes.outputs.all_count) == fromJSON(steps.changes.outputs.docs_count) && fromJSON(steps.changes.outputs.docs_count) > 0 }}"

      - name: Set up Go
        uses: actions/setup-go@v2
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        with:
          go-version: ${{ matrix.go-version }}
        id: go

      - name: InstallTool
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        run: |
          cd pulsar-function-go
          wget -O - -q https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s v1.18.0
          ./bin/golangci-lint --version

      - name: Build
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        run: |
          cd pulsar-function-go
          go build ./...

      - name: CheckStyle
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        run: |
          cd pulsar-function-go
          ./bin/golangci-lint run -c ./golangci.yml ./pf
