#
# 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 Quarkus CI

on:
  push:
    branches:
      - master
      - camel-quarkus-master
    paths-ignore:
      - '**.adoc'
      - 'Jenkinsfile'
      - 'KEYS'
      - 'LICENSE.txt'
      - 'NOTICE.txt'
  pull_request:
    branches:
      - master
      - camel-quarkus-master
    paths-ignore:
      - '**.adoc'
      - 'Jenkinsfile'
      - 'KEYS'
      - 'LICENSE.txt'
      - 'NOTICE.txt'

env:
  LANG: en_US.UTF-8
  MAVEN_OPTS: -Xmx3000m
  MAVEN_ARGS: -V -ntp -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -e

jobs:
  mvn-verify:
    runs-on: ubuntu-latest
    steps:
      - name: Cancel Previous Runs
        uses: n1hility/cancel-previous-runs@v2
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
      - name: Set up JDK 11
        uses: AdoptOpenJDK/install-jdk@v1
        with:
          version: '11'
      - name: Checkout
        uses: actions/checkout@v2
      - name: Build Camel Quarkus
        if: github.ref == 'refs/heads/camel-quarkus-master' || github.base_ref == 'camel-quarkus-master'
        run: |
          git clone --depth 1 --branch master https://github.com/apache/camel-quarkus.git \
            && cd camel-quarkus \
            && echo "Current Camel Quarkus commit:" $(git rev-parse HEAD) \
            && ./mvnw ${MAVEN_ARGS} clean install -DskipTests -Denforcer.skip -Dquarkus.build.skip
      - name: mvn license:check formatter:validate impsort:check cq:sync-example-properties
        run: |
          ./mvnw-for-each.sh ${MAVEN_ARGS} \
            license:check \
            net.revelc.code.formatter:formatter-maven-plugin:validate \
            net.revelc.code:impsort-maven-plugin:check \
            org.l2x6.cq:cq-maven-plugin:0.23.2:sync-example-properties
      - name: mvn clean verify -Pnative,docker
        run: |
          ./mvnw-for-each.sh ${MAVEN_ARGS} clean verify -Pnative,docker
      - name: Fail if there are uncommitted changes
        shell: bash
        run: |
          [[ -z $(git status --porcelain) ]] || { echo 'There are uncommitted changes'; git status; exit 1; }
