#
# 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: "Build"

on: [push, pull_request, workflow_dispatch]

jobs:
  build:
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false
      matrix:
        java: [ 11, 17, 21 ]

    steps:
      - uses: actions/checkout@v4
      - uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      - name: Install JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java }}
          distribution: 'temurin'

      - name: Licence Check
        run: mvn -Papache-release,dependency-check clean apache-rat:check verify -DskipTests -Dgpg.skip -Denforcer.skip=true -Dmaven.javadoc.skip=true

      - name: Archive rat.txt On Failure
        if: failure()
        run: tar -czvf licence-check-${{ matrix.java }}.tar.gz **/target/rat.txt

      - name: Install
        run: mvn clean install -DskipTests=true

      - name: Unit Tests
        run: mvn test

      - name: Integration Tests
        run: mvn verify -pl systests/protocol-tests-amqp-0-8,systests/protocol-tests-amqp-0-10,systests/protocol-tests-amqp-1-0,systests/qpid-systests-jms_1.1,systests/qpid-systests-jms_2.0,systests/qpid-systests-http-management -DskipTests=false -DskipITs=false

      - name: Archive Test Logs On Failure
        if: failure()
        run: tar -czvf surefire-reports-jdk-${{ matrix.java }}.tar.gz **/target/surefire-reports/*

      - name: Upload Test Logs On Failure
        if: failure()
        uses: actions/upload-artifact@v3
        with:
          name: surefire-reports-jdk-${{ matrix.java }}
          path: surefire-reports-jdk-${{ matrix.java }}.tar.gz

      - name: Clean Up Before Caching
        run: rm -rf ~/.m2/repository/org/apache/qpid
