#
# 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 - Shade - Test
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:

  shade-check:
    name:
    runs-on: ubuntu-latest
    timeout-minutes: 120

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

      - 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: 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: Set up JDK 1.8
        uses: actions/setup-java@v1
        if: steps.docs.outputs.changed_only == 'no'
        with:
          java-version: 1.8

      - name: clean disk
        if: steps.docs.outputs.changed_only == 'no'
        run: |
          sudo swapoff -a
          sudo rm -rf /swapfile /usr/share/dotnet /usr/local/lib/android /opt/ghc
          sudo apt clean
          docker rmi $(docker images -q) -f
          df -h

      - name: run install by skip tests
        if: steps.docs.outputs.changed_only == 'no'
        run: mvn -q -B -ntp clean install -DskipTests

      - name: build pulsar image
        if: steps.docs.outputs.changed_only == 'no'
        run: mvn -B -f docker/pulsar/pom.xml install -am -Pdocker -DskipTests -Ddocker.nocache=true

      - name: build pulsar-all image
        if: steps.docs.outputs.changed_only == 'no'
        run: mvn -B -f docker/pulsar-all/pom.xml install -am -Pdocker -DskipTests -Ddocker.nocache=true

      - name: build artifacts and docker pulsar latest test image
        if: steps.docs.outputs.changed_only == 'no'
        run: mvn -B -f tests/docker-images/pom.xml install -am -Pdocker -DskipTests

      - name: run shade tests
        if: steps.docs.outputs.changed_only == 'no'
        run: ./build/run_integration_group.sh SHADE
