# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Java CI with Maven

on:
  push:
    branches: [ "main", "release/**" ]
  pull_request:
    branches: [ "main", "release/**" ]

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        language: [ 'java' ]
        os: [ubuntu-latest, windows-latest]
        jdk: [17]

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

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
        ref: ${{ github.head_ref || github.ref }}

    - name: Set up JDK ${{ matrix.jdk }}
      uses: actions/setup-java@v4
      with:
        java-version: ${{ matrix.jdk }}
        distribution: 'temurin'
        cache: maven
        server-id: apache.snapshots.https
        server-username: NEXUS_USERNAME
        server-password: NEXUS_PASSWORD

    - name: Set up Maven
      uses: stCarolas/setup-maven@v5
      with:
        maven-version: 3.9.9

    - name: Set up cache date
      run: echo "CACHE_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV

    - name: Build with Maven
      run: mvn --show-version --batch-mode --no-transfer-progress clean verify

    - name: Publish Test Report
      uses: mikepenz/action-junit-report@v5
      if: success() || failure() # always run even if the previous step fails
      with:
        report_paths: '**/target/surefire-reports/TEST-*.xml'

    - name: Upload to Nexus
      if: matrix.os == 'ubuntu-latest' && github.event_name != 'pull_request'
      env:
        # `NEXUS_USERNAME` and `NEXUS_PASSWORD` are used in `~/.m2/settings.xml` created by `setup-java` action
        NEXUS_USERNAME: ${{ secrets.NEXUS_USER }}
        NEXUS_PASSWORD: ${{ secrets.NEXUS_PW }}
      run: mvn --show-version --batch-mode --errors --no-transfer-progress -DskipTests deploy
