#
# 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: Backend

on:
  push:
    branches:
      - dev
    paths:
      - '.github/workflows/backend.yml'
      - 'package.xml'
      - 'pom.xml'
      - 'dolphinscheduler-alert/**'
      - 'dolphinscheduler-api/**'
      - 'dolphinscheduler-common/**'
      - 'dolphinscheduler-dao/**'
      - 'dolphinscheduler-rpc/**'
      - 'dolphinscheduler-server/**'
  pull_request:

concurrency:
  group: backend-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  paths-filter:
    name: Backend-Path-Filter
    runs-on: ubuntu-latest
    outputs:
      not-ignore: ${{ steps.filter.outputs.not-ignore }}
    steps:
      - uses: actions/checkout@v2
      - uses: dorny/paths-filter@b2feaf19c27470162a626bd6fa8438ae5b263721
        id: filter
        with:
          filters: |
            not-ignore:
              - '!(docs/**)'
  build:
    name: Backend-Build
    needs: paths-filter
    if: ${{ (needs.paths-filter.outputs.not-ignore == 'true') || (github.event_name == 'push') }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: [ '8', '11' ]
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v2
        with:
          java-version: ${{ matrix.java }}
          distribution: 'adopt'
      - name: Sanity Check
        uses: ./.github/actions/sanity-check
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven
      - name: Build and Package on ${{ matrix.java }}
        run: |
          ./mvnw -B clean install \
                 -Prelease,docker \
                 -Dmaven.test.skip=true \
                 -Dcheckstyle.skip=true \
                 -Dhttp.keepAlive=false \
                 -Dmaven.wagon.http.pool=false \
                 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120
      - name: Check dependency license
        run: tools/dependencies/check-LICENSE.sh
      - uses: actions/upload-artifact@v2
        if: ${{ matrix.java == '8' }}
        name: Upload Binary Package
        with:
          name: binary-package-${{ matrix.java }}
          path: ./dolphinscheduler-dist/target/apache-dolphinscheduler-*-SNAPSHOT-bin.tar.gz
          retention-days: 1
  cluster-test:
    name: ${{ matrix.case.name }}
    needs: build
    runs-on: ubuntu-latest
    timeout-minutes: 20
    strategy:
      matrix:
        case:
          - name: cluster-test-mysql
            script: .github/workflows/cluster-test/mysql/start-job.sh
          - name: cluster-test-postgresql
            script: .github/workflows/cluster-test/postgresql/start-job.sh
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
      - uses: actions/download-artifact@v2
        name: Download Binary Package
        with:
          # Only run cluster test on jdk8
          name: binary-package-8
          path: ./
      - name: Running cluster test
        run: |
          /bin/bash ${{ matrix.case.script }}
  result:
    name: Build
    runs-on: ubuntu-latest
    timeout-minutes: 30
    needs: [ build, paths-filter, cluster-test ]
    if: always()
    steps:
      - name: Status
        run: |
          if [[ ${{ needs.paths-filter.outputs.not-ignore }} == 'false' && ${{ github.event_name }} == 'pull_request' ]]; then
            echo "Skip Build!"
            exit 0
          fi
          if [[ ${{ needs.build.result }} != 'success' || ${{ needs.cluster-test.result }} != 'success' ]]; then
            echo "Build Failed!"
            exit -1
          fi
