#
# 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: Continues Integration

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  golangci:
    name: lint
    runs-on: ubuntu-latest
    if: github.repository == 'apache/dubbo-kubernetes'
    steps:
      - uses: actions/checkout@v4
      - name: Set up Go 1.x
        uses: actions/setup-go@v4
        with:
          go-version-file: go.mod
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v3
        with:
          version: latest
          # Optional: golangci-lint command line arguments.
          args: --timeout=30m -v --disable-all --enable=gofumpt --enable=govet --enable=staticcheck --enable=ineffassign --enable=misspell

  unit-test:
    name: Go Test
    runs-on: ubuntu-latest
    if: github.repository == 'apache/dubbo-kubernetes'
    steps:
      - uses: actions/checkout@v4
      - name: Set up Go 1.x
        uses: actions/setup-go@v4
        with:
          go-version-file: go.mod
      - name: Download dependencies
        run: |
          go mod download
      - name: Go Test
        run: |
          go test ./... -gcflags=-l -coverprofile=coverage.txt -covermode=atomic
      - name: "Upload test result"
        if: always()
        uses: actions/upload-artifact@v3
        with:
          name: test-coverage
          path: "**/coverage.txt"
      - name: Coverage
        run: bash <(curl -s https://codecov.io/bash)

  license-check:
    name: License Check - Go
    runs-on: ubuntu-latest
    if: github.repository == 'apache/dubbo-kubernetes'
    steps:
      - uses: actions/checkout@v4
      - name: Set up Go 1.x
        uses: actions/setup-go@v4
        with:
          go-version-file: go.mod

      - name: Check License Header
        uses: apache/skywalking-eyes/header@main

  go-fmt:
    name: Go fmt
    runs-on: ubuntu-latest
    if: github.repository == 'apache/dubbo-kubernetes'
    steps:
      - uses: actions/checkout@v4
      - name: Set up Go 1.x
        uses: actions/setup-go@v4
        with:
          go-version-file: go.mod
      - name: Download dependencies
        run: |
          go mod download
      - name: Go Fmt
        run: |
          go fmt ./... && git status && [[ -z `git status -s` ]]
          # diff -u <(echo -n) <(gofmt -d -s .)
