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

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

jobs:

  process:
    runs-on: ubuntu-latest
    timeout-minutes: 120

    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Changed files check
        id:   changes
        uses: apache/pulsar-test-infra/paths-filter@master
        with:
          filters: |
            # pattern syntax: https://github.com/micromatch/picomatch
            all:
              - '**'
            docs:
              - 'site2/**'
              - 'deployment/**'
              - '.asf.yaml'
              - '*.md'
              - '**/*.md'

      - name: Cache local Maven repository
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        uses: actions/cache@v2
        with:
          path: |
            ~/.m2/repository/*/*/*
            !~/.m2/repository/org/apache/pulsar
          key: ${{ runner.os }}-m2-dependencies-all-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-m2-dependencies-core-modules-${{ hashFiles('**/pom.xml') }}
            ${{ runner.os }}-m2-dependencies-core-modules-

      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        with:
          java-version: 1.8

      - name: Replace maven's wagon-http version
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        run: sudo ./build/replace_maven-wagon-http-version.sh

      - name: clean disk
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        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.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        run: mvn -q -B -ntp clean install -DskipTests

      - name: build pulsar image
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        run: mvn -B -f docker/pulsar/pom.xml install -am -Pdocker -DskipTests -Ddocker.nocache=true

      - name: build pulsar-all image
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        run: mvn -B -f docker/pulsar-all/pom.xml install -am -Pdocker -DskipTests -Ddocker.nocache=true

      - name: build artifacts and docker image
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        run: mvn -B -f tests/docker-images/pom.xml install -am -Pdocker -DskipTests

      - name: run integration tests
        if: ${{ steps.changes.outputs.all_count > steps.changes.outputs.docs_count }}
        run: ./build/run_integration_group.sh PULSAR_CONNECTORS_PROCESS