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

on:
  pull_request:
  push:
    branches:
      - master
    tags:
      - 'v*'

jobs:
  PluginsTest:
    name: Plugin
    runs-on: ubuntu-18.04
    timeout-minutes: 90
    strategy:
      fail-fast: true
      matrix:
        case:
          - { name: 'mysql-scenario', title: 'MySQL 5.1.2-8.0.15 (30)' }
          - { name: 'undertow-scenario', title: 'Undertow 1.3.0-2.0.27 (23)' }
          - { name: 'webflux-scenario', title: 'Spring-WebFlux 2.x (7)' }
          - { name: 'zookeeper-scenario', title: 'Zookeeper 3.4.x (14)' }
          - { name: 'spring-3.1.x-scenario', title: 'Spring 3.1.x-4.0.x (25)' }
          - { name: 'spring-4.1.x-scenario', title: 'Spring 4.1.x-4.2.x (20)' }
          - { name: 'spring-4.3.x-scenario', title: 'Spring 4.3.x-5.2.x (54)' }
          - { name: 'spring-async-scenario', title: 'Spring Async 4.3.x-5.1.x (35)' }
          - { name: 'vertx-eventbus-3.x-scenario', title: 'Vert.x EventBus 3.2.0-3.9.0 (27)' }
          - { name: 'vertx-web-3.x-scenario', title: 'Vert.x Web 3.0.0-3.9.0 (29)' }
          - { name: 'mariadb-scenario', title: 'Mariadb 2.x (8)' }
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
      - uses: actions/setup-java@v1
        with:
          java-version: 8
      - name: Build SkyWalking Agent
        run: ./mvnw --batch-mode clean package -DskipTests -Pagent
      - name: Build Docker image
        run: ./mvnw --batch-mode -f test/plugin/pom.xml clean package -DskipTests docker:build -DBUILD_NO=local
      - name: ${{ matrix.case.title }}
        run: bash test/plugin/run.sh ${{ matrix.case.name }}
      - name: Report Coverage
        run: bash -x tools/coverage/report.sh

  Oracle:
    name: Oracle
    runs-on: ubuntu-18.04
    timeout-minutes: 90
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
      - uses: actions/setup-java@v1
        with:
          java-version: 8
      - name: Build SkyWalking Agent
        run: ./mvnw --batch-mode clean package -DskipTests -Pagent
      - name: Build Docker image
        run: ./mvnw --batch-mode -f test/plugin/pom.xml clean package -DskipTests docker:build -DBUILD_NO=local
      - name: Oracle 10.2.0.4.0 (1)
        run: |
          curl -O https://skyapm.github.io/ci-assist/jars/ojdbc14-10.2.0.4.0.jar
          curl -L -o ./skywalking-agent/plugins/apm-oracle-10.x-plugin-1.0.1.jar https://github.com/SkyAPM/java-plugin-extensions/releases/download/1.0.1/apm-oracle-10.x-plugin-1.0.1.jar
          ./mvnw --batch-mode install:install-file -Dfile=ojdbc14-10.2.0.4.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar
          bash test/plugin/run.sh oracle-scenario
      - name: Report Coverage
        run: bash -x tools/coverage/report.sh
