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

env:
  MAVEN_OPTS: -Xmx3000m
  MAVEN_ARGS: -V -ntp -Dhttp.keepAlive=false -e
concurrency:
  group: ${{ github.ref }}-${{ github.workflow }}
  cancel-in-progress: true

on:
  push:
    branches:
      - main
      - camel-quarkus-3
      - "release-*"
    paths-ignore:
      - '**.adoc'
      - 'KEYS'
      - 'LICENSE'
      - 'NOTICE'
      - 'Jenkinsfile'
  pull_request:
    branches:
      - main
      - camel-quarkus-3
      - "release-*"
    paths-ignore:
      - '**.adoc'
      - 'KEYS'
      - 'LICENSE'
      - 'NOTICE'
      - 'Jenkinsfile'
  workflow_dispatch:
jobs:

  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java:
          - '17'
    steps:
    - uses: actions/checkout@v3
      with:
        persist-credentials: false
    - name: Set up JDK ${{ matrix.java }}
      uses: actions/setup-java@v3
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Build camel-k-runtime
      run: ./mvnw -V -ntp clean install
    - name: Tar Maven Repo
      shell: bash
      run: tar -czf maven-repo-${{ github.run_id }}-${{ github.run_number }}.tgz -C ~ .m2/repository
    - name: Persist Maven Repo
      uses: actions/upload-artifact@v3
      with:
        name: maven-repo-${{ github.run_id }}-${{ github.run_number }}
        path: maven-repo-${{ github.run_id }}-${{ github.run_number }}.tgz

  build-native:
    runs-on: ubuntu-latest
    needs: build
    strategy:
      fail-fast: false
      matrix:
        native-image-project:
          - :camel-k-itests-core
          - :camel-k-itests-cron
          - :camel-k-itests-kamelet
          - :camel-k-itests-knative
          - :camel-k-itests-knative-env-from-registry
          - :camel-k-itests-knative-env-from-properties
          - :camel-k-itests-knative-producer
          - :camel-k-itests-knative-consumer
          - :camel-k-itests-knative-sinkbinding
          - :camel-k-itests-loader-xml
          - :camel-k-itests-loader-yaml
          - :camel-k-itests-loader-polyglot
          - :camel-k-itests-runtime
          - :camel-k-itests-runtime-xml
          - :camel-k-itests-runtime-yaml
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          persist-credentials: false
      - name: Set up JDK 17
        uses: AdoptOpenJDK/install-jdk@v1
        with:
          version: '17'
      - name: Download Maven Repo
        uses: actions/download-artifact@v3
        with:
          name: maven-repo-${{ github.run_id }}-${{ github.run_number }}
          path: .
      - name: Extract Maven Repo
        shell: bash
        run: tar -xzf maven-repo-${{ github.run_id }}-${{ github.run_number }}.tgz -C ~
      - name: Integration Test - ${{ matrix.native-image-project }}
        run: |
          ./mvnw ${MAVEN_ARGS} -B -nsu clean install \
            -Dnative \
            -Dnative-image.xmx=6g \
            -Ddocker \
            -pl ${{ matrix.native-image-project }}

  build-native-examples:
    runs-on: ubuntu-latest
    needs: build
    strategy:
      fail-fast: false
      matrix:
        native-image-project:
          - :camel-k-runtime-example-xml
          - :camel-k-runtime-example-yaml
          - :camel-k-runtime-example-knative
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          persist-credentials: false
      - name: Set up JDK 17
        uses: AdoptOpenJDK/install-jdk@v1
        with:
          version: '17'
      - name: Download Maven Repo
        uses: actions/download-artifact@v3
        with:
          name: maven-repo-${{ github.run_id }}-${{ github.run_number }}
          path: .
      - name: Extract Maven Repo
        shell: bash
        run: tar -xzf maven-repo-${{ github.run_id }}-${{ github.run_number }}.tgz -C ~
      - name: Integration Test - ${{ matrix.native-image-project }}
        run: |
          ./mvnw ${MAVEN_ARGS} -B -nsu clean install \
            -Dnative \
            -Dnative-image.xmx=6g \
            -Ddocker \
            -pl ${{ matrix.native-image-project }}

  deploy:
    runs-on: ubuntu-latest
    needs:
      - build-native
      - build-native-examples
    # Run only when pushing to the branches (either main or release), never on merge requests
    if: ${{ github.event_name == 'push' }}
    env:
      NEXUS_DEPLOY_USERNAME: ${{ secrets.NEXUS_USER }}
      NEXUS_DEPLOY_PASSWORD: ${{ secrets.NEXUS_PW }}
    steps:
    - uses: actions/checkout@v3
      with:
        persist-credentials: false
    - name: Set up JDK 17
      uses: AdoptOpenJDK/install-jdk@v1
      with:
        version: '17'
    - name: Deploy to ASF Snapshots Repository
      # Deploy both artifacts and sources (may be required by Camel K)
      run: |
        ./mvnw ${MAVEN_ARGS} clean deploy -DskipTests -DskipITs --settings .github/asf-deploy-settings.xml
