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

on:
  pull_request:
  push:
    branches:
      - master

concurrency:
  group: swck-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  check:
    name: Check
    runs-on: ubuntu-20.04
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
          id: go
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: Check License
        uses: apache/skywalking-eyes/header@501a28d2fb4a9b962661987e50cf0219631b32ff
      - name: Check
        run: make check
  build:
    name: Build
    runs-on: ubuntu-20.04
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: Build
        run: make build
      - name: Build docker image
        run: make docker-build
  unit-tests:
    name: Unit tests
    runs-on: ubuntu-20.04
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
        id: go
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: "install kubebuilder"
        run: ./hack/install-kubebuilder.sh
      - name: tests
        run: make test
  e2e-tests:
    name: e2e tests(oap+ui+agent)
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
        id: go
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: Run E2E Test(oap+ui+agent)
        uses: apache/skywalking-infra-e2e@996ed8902e941e2883fcf0ac5b3090364942d205      # always prefer to use a revision instead of `main`.
        with:
          e2e-file: test/e2e/oap-ui-agent/e2e.yaml               # need to run E2E file path
  internel-storage-e2e-tests:
    name: e2e tests(oap+ui+agent+internel-storage)
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
        id: go
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: Run E2E Test
        uses: apache/skywalking-infra-e2e@996ed8902e941e2883fcf0ac5b3090364942d205     
        with:
          e2e-file: test/e2e/oap-ui-agent-internal-storage/e2e.yaml   
  external-storage-e2e-tests:          
    name: e2e tests(oap+ui+agent+external-storage)
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
        id: go
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: Run E2E Test
        uses: apache/skywalking-infra-e2e@996ed8902e941e2883fcf0ac5b3090364942d205
        with:
          e2e-file: test/e2e/oap-ui-agent-external-storage/e2e.yaml     
  adapter-hpa-e2e-tests:          
    name: e2e tests(oap+agent+adapter+hpa)
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
        id: go
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: Run E2E Test
        uses: apache/skywalking-infra-e2e@996ed8902e941e2883fcf0ac5b3090364942d205
        with:
          e2e-file: test/e2e/oap-agent-adapter-hpa/e2e.yaml
  e2e-tests-with-satellite:
    name: e2e tests(oap+ui+agent+satellite)
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
        id: go
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: Run E2E Test
        uses: apache/skywalking-infra-e2e@996ed8902e941e2883fcf0ac5b3090364942d205
        with:
          e2e-file: test/e2e/oap-ui-agent-satellite/e2e.yaml
  adapter-satellite-hpa-e2e-tests:
    name: e2e tests(oap+agent+satellite+adapter+hpa)
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17
        id: go
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: Run E2E Test
        uses: apache/skywalking-infra-e2e@996ed8902e941e2883fcf0ac5b3090364942d205
        with:
          e2e-file: test/e2e/oap-satellite-adapter-hpa/e2e.yaml
  checks:
    name: build
    runs-on: ubuntu-20.04
    needs: [check, build, unit-tests, e2e-tests, internel-storage-e2e-tests, external-storage-e2e-tests , adapter-hpa-e2e-tests]
    steps:
      - run: echo 'success'
