#
# 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: CI - Unit
on:
  pull_request:
    branches:
      - master
  push:
    branches:
      - branch-*

env:
  MAVEN_OPTS: -Dmaven.wagon.httpconnectionManager.ttlSeconds=25 -Dmaven.wagon.http.retryHandler.count=3

jobs:
  unit-test:
    name:
    runs-on: ubuntu-latest
    container:
      image: apachepulsar/pulsar-build:latest
    timeout-minutes: 120

    steps:
      - name: Cancel Previous Runs
        uses: styfle/cancel-workflow-action@0.6.0
        with:
          access_token: ${{ github.token }}

      - name: checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 25
          ref: ${{ github.event.pull_request.head.sha }}
          path: connectors

      - name: Clone Pulsar
        uses: actions/checkout@v2
        with:
          fetch-depth: 1
          repository: apache/pulsar
          ref: master
          path: pulsar

      - name: Cache local Maven repository
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-

      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      - name: Set up Maven
        uses: apache/pulsar-test-infra/setup-maven@master
        with:
          maven-version: 3.6.1

      - name: Build pulsar
        run: |
          cd pulsar
          mvn -B -DskipTests -Dcheckstyle.skip install

      - name: Build pulsar connectors
        run: |
          cd connectors
          mvn clean install

      - name: package surefire artifacts
        if: failure()
        run: |
          cd connectors
          rm -rf artifacts
          mkdir artifacts
          find . -type d -name "*surefire*" -exec cp --parents -R {} artifacts/ \;
          zip -r artifacts.zip artifacts

      - uses: actions/upload-artifact@master
        name: upload surefire-artifacts
        if: failure()
        with:
          name: surefire-artifacts
          path: connectors/artifacts.zip
