# 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: E2E

on:
  pull_request:
  push:
    branches:
      - master
      - 6.x
    tags:
      - 'v*'

jobs:
  Single:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
        with:
          submodules: true
      - name: Set environment
        run: export MAVEN_OPTS='-Dmaven.repo.local=~/.m2/repository -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -Xmx3g'
      - name: Compile & Install Test Codes
        run: |
          ./mvnw checkstyle:check apache-rat:check
          ./mvnw -Dcheckstyle.skip -Drat.skip -T2 -Dmaven.compile.fork -Dmaven.compiler.maxmem=3072 -DskipTests clean install
          ./mvnw -f test/e2e/pom.xml -pl e2e-base clean install
      - name: Single Node Tests(JDK8)
        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh e2e-single-service
      - name: Single Node Tests(MySQL/JDK8)
        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh e2e-mysql
      - name: Single Node Tests(JDK9)
        run: export E2E_VERSION=jdk9-1.3 && bash -x test/e2e/run.sh e2e-single-service
      - name: Single Node Tests(JDK11)
        run: export E2E_VERSION=jdk11-1.3 && bash -x test/e2e/run.sh e2e-single-service
      - name: Single Node Tests(JDK12)
        run: export E2E_VERSION=jdk12-1.3 && bash -x test/e2e/run.sh e2e-single-service
      - name: Agent Reboot Tests(JDK8)
        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh e2e-agent-reboot

  Cluster:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
        with:
          submodules: true
      - uses: actions/cache@v1
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      - name: Set environment
        run: export MAVEN_OPTS='-Dmaven.repo.local=~/.m2/repository -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -Xmx3g'
      - name: Compile & Install Test Codes
        run: |
          ./mvnw checkstyle:check apache-rat:check
          ./mvnw -Dcheckstyle.skip -Drat.skip -T2 -Dmaven.compile.fork -Dmaven.compiler.maxmem=3072 -DskipTests clean install
          ./mvnw -f test/e2e/pom.xml -pl e2e-base clean install
      - name: Cluster Tests (ES6/ZK/JDK8)
        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh e2e-cluster/e2e-cluster-test-runner
      - name: Cluster With Gateway Tests (ES6/ZK/JDK8)
        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh e2e-cluster-with-gateway/e2e-cluster-with-gateway-test-runner
      - name: Cluster Tests (ES7/ZK/JDK8)
        run: export E2E_VERSION=jdk8-1.3 DIST_PACKAGE=apache-skywalking-apm-bin-es7.tar.gz ES_VERSION=7.4.2 && bash -x test/e2e/run.sh e2e-cluster/e2e-cluster-test-runner
      - name: TTL ES Tests(JDK8)
        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh e2e-ttl/e2e-ttl-es
      - name: TTL ES7 Tests(JDK8)
        run: export E2E_VERSION=jdk8-1.3 DIST_PACKAGE=apache-skywalking-apm-bin-es7.tar.gz ES_VERSION=7.4.2 && bash -x test/e2e/run.sh e2e-ttl/e2e-ttl-es
