# 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: Build and Test

on:
  pull_request:
  push:
    branches:
      - main

jobs:
  CI:
    runs-on: ${{ matrix.runner }}-latest
    timeout-minutes: 30
    strategy:
      matrix:
        go-version: [ 1.19 ]
        runner: [ ubuntu, macos, windows ]
      fail-fast: true
    steps:
      - name: Set up Go ${{ matrix.go-version }}
        uses: actions/setup-go@v2
        with:
          go-version: ${{ matrix.go-version }}
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
        with:
          submodules: true
      - name: Check License
        if: matrix.runner == 'ubuntu'
        uses: apache/skywalking-eyes@9bd5feb86b5817aa6072b008f9866a2c3bbc8587
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Get dependencies
        run: make deps
      - name: Lint
        run: make lint
      - name: Test
        run: make test
      - name: Build
        run: make build
      - name: Check CI Consistency
        if: matrix.runner == 'ubuntu'
        run: make check
      - name: Build Docker
        if: matrix.runner == 'ubuntu'
        run: make docker

  result:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    needs: [ CI ]
    steps:
      - name: Build Result
        run: echo "Just to make the GitHub merge button green"
