#
# 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 - Broker Auth SASL
on:
  pull_request:
    branches:
      - master
  push:
    branches:
      - branch-*

jobs:

  unit-tests:
    name:
    runs-on: ubuntu-latest
    timeout-minutes: 120

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

      - name: Check if this pull request only changes documentation
        id:   docs
        run: echo "::set-output name=changed_only::no"

      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        if: steps.docs.outputs.changed_only == 'no'
        with:
          java-version: 1.8

      - name: Set up Maven
        uses: apache/pulsar-test-infra/setup-maven@master
        if: steps.docs.outputs.changed_only == 'no'
        with:
          maven-version: 3.6.1

      - name: run unit tests install by skip tests
        if: steps.docs.outputs.changed_only == 'no'
        run: mvn clean install -DskipTests -pl pulsar-broker-auth-sasl -am

      - name: run unit tests pulsar auth sasl
        if: steps.docs.outputs.changed_only == 'no'
        run: mvn test -DfailIfNoTests=false -pl pulsar-broker-auth-sasl

      - 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
