#
# 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: Sync Camel Kafka Connector main Branch with latest Camel main

env:
  MAVEN_ARGS: -V -ntp

on:
  schedule:
    # Run at 2 AM every day
    - cron:  '0 2 * * *'
  workflow_dispatch:
jobs:
  build:
    name: Sync Camel Kafka Connector main Branch with latest Camel main
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: [ '11' ]
    steps:
      - name: Checkout Camel project
        uses: actions/checkout@v3.4.0
        with:
          repository: apache/camel
          ref: main
          path: camel
      - name: Set up JDK ${{ matrix.java }}
        uses: AdoptOpenJDK/install-jdk@v1
        with:
          version: ${{ matrix.java }}
      - name: Cache local Maven repository
        uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      - name: Build Camel Project
        run: |
          ./mvnw ${MAVEN_ARGS} \
            -DskipTests \
            clean install
        working-directory: ${{ github.workspace }}/camel
      - name: Checkout camel-kafka-connector project
        uses: actions/checkout@v3.4.0
        with:
          ref: main
          fetch-depth: 0
      # 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} \
            -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@v3
        if: always()
        with:
          name: test-logs-java-${{ matrix.java }}
          path: tests/**/target/tests.log
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v4.2.3
        with:
          base: main
          token: ${{ secrets.GITHUB_TOKEN }}
          branch: automatic-periodic-sync
          title: '[Github Actions] Periodic Sync Camel-kafka-connector main Branch'
          body: |
            Periodic Sync of Camel Kafka connector main Branch with main Camel Main.
            see https://github.com/apache/camel-kafka-connector/blob/main/.github/workflows/automatic-sync-camel-main.yml
