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

on:
  workflow_call:
    inputs:
      maven_args:
        description: The arguments to pass to all Maven commands when building the code
        required: false
        default: '-D"invoker.streamLogsOnFailures"'
        type: string

      maven_version:
        description: The Maven version used for builds
        required: false
        default: '3.8.4'
        type: string

      os-matrix:
        description: 'os matrix as json array'
        required: false
        default: '[ "ubuntu-latest", "windows-latest", "macOS-latest" ]'
        type: string

      jdk-matrix:
        description: 'jdk matrix as json array'
        required: false
        default: '[ "8", "11", "17" ]'
        type: string

      matrix-exclude:
        description: 'exclude for matrix as json'
        required: false
        default: '[]'
        type: string

      jdk-distribution-matrix:
        description: "jdk distribution matrix"
        required: false
        default: '[ "temurin" ]'
        type: string

      # fail fast job setup
      ff-os:
        description: The os used during fail-fast-build job
        required: false
        default: 'ubuntu-latest'
        type: string

      ff-jdk:
        description: The jdk version used during fail-fast-build job
        required: false
        default: '11'
        type: string

      ff-jdk-distribution:
        description: The jdk distribution used during fail-fast-build job
        required: false
        default: 'temurin'
        type: string

      ff-goal:
        description: The Maven goal used by fail-fast-build job
        required: false
        default: '-P run-its verify'
        type: string

      ff-site-goal:
        description: The Maven goal used by fail-fast-build job to build site
        required: false
        default: '-DskipTests -P reporting site'
        type: string

      verify-goal:
        description: The Maven goal used by verfy jobs
        required: false
        default: '-P run-its verify'
        type: string

      verify-site-goal:
        description: The Maven goal used by verfy jobs to build site
        required: false
        default: '-DskipTests -P reporting site'
        type: string

      verify-fail-fast:
        description: Determinate if verification matrix should fail fast
        required: false
        default: true
        type: boolean


jobs:

  # verify build on one node - before matrix will start
  fail-fast-build:
    name: ${{ inputs.ff-os }} jdk-${{ inputs.ff-jdk }}-${{ inputs.ff-jdk-distribution }}
    runs-on: ${{ inputs.ff-os }}

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Set up JDK
        uses: actions/setup-java@v4
        with:
          java-version: ${{ inputs.ff-jdk }}
          distribution: ${{ inputs.ff-jdk-distribution }}
          cache: 'maven'

      - name: Set up Maven
        run: mvn --errors --batch-mode --show-version wrapper:wrapper "-Dmaven=${{ inputs.maven_version }}"

      - name: Build with Maven
        run: ./mvnw --errors --batch-mode --show-version ${{ inputs.maven_args }} ${{ inputs.ff-goal }}

      - name: Build Maven Site
        run: ./mvnw --errors --batch-mode --show-version ${{ inputs.maven_args }} ${{ inputs.ff-site-goal }}


  verify:
    needs: fail-fast-build
    name: ${{ matrix.os }} jdk-${{ matrix.jdk }}-${{ matrix.distribution }}

    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: ${{ inputs.verify-fail-fast }}
      matrix:
        os: ${{ fromJSON( inputs.os-matrix ) }}
        jdk: ${{ fromJSON( inputs.jdk-matrix ) }}
        distribution: ${{ fromJSON( inputs.jdk-distribution-matrix ) }}
        exclude: ${{ fromJSON( inputs.matrix-exclude ) }}

    steps:
      - name: Should run
        id: should-run
        if: >
          matrix.os != inputs.ff-os ||
          matrix.jdk != inputs.ff-jdk ||
          matrix.distribution != inputs.ff-jdk-distribution ||
          inputs.verify-goal != inputs.ff-goal ||
          inputs.verify-site-goal != inputs.ff-site-goal
        run: echo ok

      - name: Checkout
        if: steps.should-run.conclusion == 'success'
        uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Set up JDK
        if: steps.should-run.conclusion == 'success'
        uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.jdk }}
          distribution: ${{ matrix.distribution }}
          cache: 'maven'

      - name: Set up Maven
        if: steps.should-run.conclusion == 'success'
        run: mvn --errors --batch-mode --show-version wrapper:wrapper "-Dmaven=${{ inputs.maven_version }}"

      - name: Build with Maven
        if: steps.should-run.conclusion == 'success'
        run: ./mvnw --errors --batch-mode --show-version ${{ inputs.maven_args }} ${{ inputs.verify-goal }}

      - name: Build Maven Site
        if: steps.should-run.conclusion == 'success'
        run: ./mvnw --errors --batch-mode --show-version ${{ inputs.maven_args }} ${{ inputs.verify-site-goal }}
