#
# 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:
      - branch-*
    paths:
      - '.github/workflows/**'
      - 'pulsar-function-go/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

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
