name: Java CI Test
env:
  junit_platform_version: '1.9.3'
on:
  - push
  - pull_request

defaults:
  run:
    shell: bash

jobs:

  test:
    runs-on: ${{ matrix.os }}
    env:
      LANG: en_US.UTF-8
    strategy:
      fail-fast: false
      matrix:
        # test against latest update of each major Java version, as well as specific updates of LTS versions:
        java: [11, 21, 25]
        os: [ubuntu-latest, macos-latest, windows-latest]
    name: Java ${{ matrix.java }} on ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 256

      - name: Cache
        uses: actions/cache@v5
        with:
          path: |
            ~/.ivy2/cache/
            ~/work/josm/josm/tools/
          key: ${{ runner.os }}-ivy2-${{ hashFiles('build.xml', 'ivy.xml', 'tools/ivy.xml') }}

      - name: Setup Java ${{ matrix.java }}
        uses: actions/setup-java@v5
        with:
          distribution: 'zulu'
          java-version: ${{ matrix.java }}

      - name: Install Ant
        uses: JOSM/JOSMPluginAction/actions/setup-ant@v3

      - name: Test with Ant
        run: |
          ANT="ant -DnoJavaFX=true test-unit-hardfail"
          $ANT -Dtest.headless=true

      - name: Dump errors if failed
        if: ${{ failure() }}
        run: "grep -L ', Failures: 0, Skipped: ' test/report/*.txt | xargs cat"

      - name: Upload Ant reports
        if: ${{ always() }}
        uses: actions/upload-artifact@v7
        with:
          name: Ant reports for JOSM on java ${{ matrix.java }} on ${{ matrix.os }}
          path: |
            test/report/*.txt
            test/report/TEST*.xml
            hs_err*

  publish-test-results:
    name: "Publish Unit Tests Results"
    needs: test
    runs-on: ubuntu-latest
    # the test job might be skipped, we don't need to run this job then
    if: success() || failure()

    steps:
      - name: Download Artifacts
        uses: actions/download-artifact@v8
        with:
          path: artifacts

      - name: Publish Test Report with action-junit-report
        if: ${{ always() }}
        uses: mikepenz/action-junit-report@v6
        with:
          report_paths: 'artifacts/**/*.xml'
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Publish Test Report with publish-unit-test-result-action
        uses: EnricoMi/publish-unit-test-result-action@v2
        with:
          files: 'artifacts/**/*.xml'
