#
# 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 - Brokers - Broker Group 1
on:
  pull_request:
    branches:
      - master
  push:
    branches:
      - branch-*

env:
  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.count=3

jobs:

  unit-tests:
    name:
    runs-on: ubuntu-latest
    container:
      image: apachepulsar/pulsar-build:latest
    timeout-minutes: 45

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

      - name: Check if this pull request only changes documentation
        id:   docs
        uses: apache/pulsar-test-infra/diff-only@master
        with:
          args: site2 deployment .asf.yaml .ci ct.yaml

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

      - name: build modules
        if: steps.docs.outputs.changed_only == 'no'
        run: mvn -B -ntp -q clean install -Pcore-modules -DskipTests

      - name: run unit test 'BROKER_GROUP_1'
        if: steps.docs.outputs.changed_only == 'no'
        run: ./build/run_unit_group.sh BROKER_GROUP_1

      - name: package surefire artifacts
        if: failure()
        run: |
          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: artifacts.zip
