#
# 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.
#

# This workflow will build a Java project with Maven
# See also:
#   https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
#   https://docs.github.com/en/actions/reference/events-that-trigger-workflows#manual-events
#   https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#fromjson

name: Full ITs

on:
  workflow_dispatch:
    inputs:
      buildRef:
        description: Ref to build
        required: true
        default: refs/heads/main
      numITsPerTask:
        description: Number of ITs per task
        required: true
        default: 15

jobs:
  # fast build to populate the local maven repository cache
  fastbuild:
    timeout-minutes: 20
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        ref: ${{ github.event.inputs.buildRef }}
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
    - name: Cache local maven repository
      uses: actions/cache@v2
      with:
        path: |
          ~/.m2/repository/
          !~/.m2/repository/org/apache/accumulo
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: ${{ runner.os }}-m2
    - name: Show the first log message
      run: git log -n1
    - name: Build with Maven (Fast Build)
      run: mvn -B -V -e -ntp "-Dstyle.color=always" clean package dependency:resolve -DskipTests -DskipFormat -DverifyFormat
      env:
        MAVEN_OPTS: -Djansi.force=true
  creatematrix:
    needs: fastbuild
    timeout-minutes: 5
    outputs:
      matrix: ${{ steps.set-matrix.outputs.matrix }}
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        ref: ${{ github.event.inputs.buildRef }}
    - id: set-matrix
      name: Create the IT build matrix
      run: contrib/ci/it-matrix.sh ${{ github.event.inputs.numITsPerTask }}
  # targeted builds that tests groups of ITs
  mvn:
    needs: creatematrix
    strategy:
      matrix: ${{ fromJson(needs.creatematrix.outputs.matrix) }}
      fail-fast: false
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        ref: ${{ github.event.inputs.buildRef }}
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
    - name: Cache local maven repository
      uses: actions/cache@v2
      with:
        path: |
          ~/.m2/repository/
          !~/.m2/repository/org/apache/accumulo
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: ${{ runner.os }}-m2
    - name: Build with Maven (${{ matrix.profile.its }})
      run: mvn -B -V -e -ntp "-Dstyle.color=always" verify -PskipQA -DskipTests=false -DskipITs=false -Dtest=nomatchingtest -Dit.test="${{ matrix.profile.its }}"
      env:
        MAVEN_OPTS: -Djansi.force=true
    - name: Upload unit test results
      if: ${{ failure() }}
      uses: actions/upload-artifact@v2
      with:
        name: surefire-reports-${{ matrix.profile.name }}
        path: ./**/target/surefire-reports/
        if-no-files-found: ignore
    - name: Upload integration test results
      if: ${{ failure() }}
      uses: actions/upload-artifact@v2
      with:
        name: failsafe-reports-${{ matrix.profile.name }}
        path: ./**/target/failsafe-reports/
        if-no-files-found: ignore
    - name: Upload mini test logs
      if: ${{ failure() }}
      uses: actions/upload-artifact@v2
      with:
        name: mini-tests-logs-${{ matrix.profile.name }}
        path: ./**/target/**/mini-tests/**/logs/
        if-no-files-found: ignore

