################################################################################
#  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 / Java

on:
  workflow_call:
    inputs:
      matrix:
        description: Java suites selected by tools/ci/plan.py
        required: true
        type: string

permissions:
  contents: read

env:
  MAVEN_OPTS: -Xmx4096m -Dmaven.wagon.httpconnectionManager.ttlSeconds=30 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true

jobs:
  test:
    name: ${{ matrix.name }}
    runs-on: ubuntu-latest
    timeout-minutes: ${{ matrix.timeout }}
    strategy:
      # Keep independent results when one engine fails.
      fail-fast: false
      matrix: ${{ fromJSON(inputs.matrix) }}
    steps:
      - uses: actions/checkout@v6
        with:
          persist-credentials: false
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v5
        with:
          java-version: ${{ matrix.java }}
          distribution: temurin
      - name: Cache Maven dependencies
        uses: actions/cache@v5
        with:
          path: ~/.m2/repository
          key: ci-maven-${{ runner.os }}-${{ runner.arch }}-${{ matrix.suite }}-jdk${{ matrix.java }}-scala${{ matrix.scala }}-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ci-maven-${{ runner.os }}-${{ runner.arch }}-${{ matrix.suite }}-jdk${{ matrix.java }}-scala${{ matrix.scala }}-
      - name: Build dependencies and run tests
        env:
          CI_SUITE: ${{ matrix.suite }}
          CI_SCALA: ${{ matrix.scala }}
          CI_JAVA: ${{ matrix.java }}
        run: bash tools/ci/run-java-tests.sh "$CI_SUITE" "$CI_SCALA" "$CI_JAVA"
      - name: Upload failed test reports
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: test-reports-${{ matrix.suite }}-jdk${{ matrix.java }}-scala${{ matrix.scala }}
          path: '**/target/surefire-reports/**'
          if-no-files-found: ignore
          retention-days: 7
