#
# 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@v2
        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@v2
        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@v2
        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 \
            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@v2
        if: always()
        with:
          name: test-logs-java-${{ matrix.java }}
          path: tests/**/target/tests.log
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v2.4.1
        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
