#
# 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
    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: Changed files check
        id:   changes
        uses: apache/pulsar-test-infra/paths-filter@master
        with:
          filters: |
            # pattern syntax: https://github.com/micromatch/picomatch
            all:
              - '**'
            docs:
              - 'site2/**'
              - 'deployment/**'
              - '.asf.yaml'
              - '*.md'
              - '**/*.md'

      - name: Set up Go
        uses: actions/setup-go@v2
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        with:
          go-version: ${{ matrix.go-version }}
        id: go

      - name: InstallTool
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        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.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        run: |
          cd pulsar-function-go
          go build ./...

      - name: CheckStyle
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        run: |
          cd pulsar-function-go
          ./bin/golangci-lint run -c ./golangci.yml ./pf
