# 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
on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

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

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Check license header
        run: docker run --rm -v $(pwd):/github/workspace -u $(id -u):$(id -g) ghcr.io/korandoru/hawkeye-native:v1 check

  unittest:
    name: Unit tests
    runs-on: ubuntu-latest
    timeout-minutes: 120
    strategy:
      fail-fast: false
      matrix:
        java: [8, 11]
    steps:
      - uses: actions/checkout@v3

      - name: Cache Local Maven Repository
        uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-

      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v3
        with:
          java-version: ${{ matrix.java }}
          distribution: 'temurin'

      - name: Build with ${{ matrix.java }}
        run: ./mvnw clean install -DskipTests

      - name: Test with ${{ matrix.java }}
        run: ./mvnw verify

  required:
    name: Required
    runs-on: ubuntu-latest
    if: ${{ always() }}
    needs:
      - check
      - unittest
    steps:
      - name: Guardian
        run: |
          if [[ ! ( \
                 "${{ needs.check.result }}" == "success" \
              && "${{ needs.unittest.result }}" == "success" \
              ) ]]; then
            echo "Required jobs haven't been completed successfully."
            exit -1
          fi
