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

  license-check:
    name: License check
    runs-on: ubuntu-latest
    timeout-minutes: 60

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

      - name: Tune Runner VM
        uses: ./.github/actions/tune-runner-vm

      - name: Detect changed files
        id:   changes
        uses: apache/pulsar-test-infra/paths-filter@master
        with:
          filters: .github/changes-filter.yaml

      - name: Check changed files
        id: check_changes
        run: echo "::set-output name=docs_only::${{ fromJSON(steps.changes.outputs.all_count) == fromJSON(steps.changes.outputs.docs_count) && fromJSON(steps.changes.outputs.docs_count) > 0 }}"

      - name: Cache local Maven repository
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        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 11
        uses: actions/setup-java@v2
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        with:
          distribution: 'temurin'
          java-version: 11


      # license check fails with 3.6.2 so we have to downgrade
      - name: Set up Maven
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        uses: apache/pulsar-test-infra/setup-maven@master
        with:
          maven-version: 3.6.1

      - name: build and check license
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        run: mvn -q -B -ntp -DskipTests apache-rat:check initialize license:check install

      - name: license check
        if: ${{ steps.check_changes.outputs.docs_only != 'true' }}
        run: src/check-binary-license ./distribution/server/target/apache-pulsar-*-bin.tar.gz
