#
# 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: Camel Kafka Connect CI

env:
  MAVEN_ARGS: -V -ntp

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
    paths-ignore:
      - README.md
      - SECURITY.md
      - Jenkinsfile
      - Jenkinsfile.*
      - NOTICE.txt

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: [ '17' ]
    steps:
      - uses: actions/checkout@v4.1.1
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
          cache: 'maven'
      # first command builds the source check module,
      - name: Build tools
        run: |
          ./mvnw ${MAVEN_ARGS} \
            -DskipTests \
            -pl :parent \
            -pl :camel-kafka-connector-aggregator \
            -pl :camel-buildtools \
            clean install
      # second one source check and install :camel-kafka-connector-generator-maven-plugin
      # this is needed to add maven plugin metadata to it,
      - name: Build connector-generator-plugin
        run: |
          ./mvnw ${MAVEN_ARGS} \
            -Dcheckstyle.failOnViolation=true \
            -Psourcecheck \
            -DskipTests \
            -pl :camel-kafka-connector-model \
            -pl :camel-kafka-connector-generator-maven-plugin \
            -pl :camel-kafka-connector \
            clean install
      # third command source check everything else but :camel-kafka-connector-generator-maven-plugin
      - name: Build and itests
        run: |
          ./mvnw ${MAVEN_ARGS} \
            -Dfailsafe.rerunFailingTestsCount=2 \
            -Dcheckstyle.failOnViolation=true \
            -Psourcecheck \
            -DskipIntegrationTests=false \
            -Dhttp.keepAlive=false \
            -Dmaven.wagon.http.pool=false \
            -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 \
            -pl '!:camel-kafka-connector-generator-maven-plugin' \
            clean test
      - name: Archive logs
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: test-logs-java-${{ matrix.java }}
          path: tests/**/target/tests.log


