# 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.
#
version: 2
general:
jobs:
  build_jdk8:
    machine:
      enabled: true
      image: circleci/classic:latest
    parallelism: 1 # TODO: 1. Configuring Parallel Jobs for Running Tests https://circleci.com/docs/2.0/parallelism-faster-jobs/

    working_directory: ~/drill

    steps:
      - checkout
      - restore_cache:
          keys:
            - m2-{{ checksum "pom.xml" }}
            - m2- # used if checksum fails
      - run:
          name: Update maven version
          # TODO: Could be removed, once Machine Executor image is updated https://github.com/circleci/image-builder/issues/140
          # and the possibility of specifying Maven version is added https://github.com/circleci/image-builder/issues/143
          command:
            curl -fsSL https://git.io/vpDIf | bash -s -- 3.6.3
      - run:
          name: Update packages list
          command:
            sudo apt-get update
      - run:
          name: Install libaio1.so library for MySQL integration tests
          command:
            sudo apt-get install libaio1 libaio-dev
      - run:
          name: Drill project build
          # TODO: 2. Optimizing Maven Builds on CircleCI - https://circleci.com/blog/optimizing-maven-builds-on-circleci/
          # TODO: 3. Resolving memory issues without "SlowTest" and "UnlikelyTest" excludedGroups in the build
          command: >
            mvn install -Drat.skip=false -Dlicense.skip=false -DmemoryMb=2560 -DdirectMemoryMb=4608
            -DexcludedGroups="org.apache.drill.categories.SlowTest,org.apache.drill.categories.UnlikelyTest" --batch-mode
      - run:
          name: Save test results
          command: |
            mkdir -p ~/test-results/junit/
            find . -type f -regex ".*/target/surefire-reports/.*xml" -exec cp {} ~/test-results/junit/ \;
          when: always
      - store_test_results:
          path: ~/test-results
      - save_cache:
          paths:
            - ~/.m2
          key: m2-{{ checksum "pom.xml" }}

  build_jdk11:
    machine:
      enabled: true
      image: circleci/classic:latest
    parallelism: 1

    working_directory: ~/drill

    steps:
      - checkout
      - restore_cache:
          keys:
            - m2-{{ checksum "pom.xml" }}
            - m2- # used if checksum fails
      - run:
          name: Update packages list
          command:
            sudo apt-get update
      - run:
          name: Install java 11
          command:
            sudo apt-get -y install openjdk-11-jdk
      - run:
          name: Set default java 11
          command:
            sudo update-java-alternatives --set java-1.11.0-openjdk-amd64
      - run:
          name: Update maven version
          command:
            curl -fsSL https://git.io/vpDIf | bash -s -- 3.6.3
      - run:
          name: Install libaio1.so library for MySQL integration tests
          command:
            sudo apt-get install libaio1 libaio-dev
      - run:
          name: Drill project build
          command: >
            mvn install -Drat.skip=false -Dlicense.skip=false -DmemoryMb=2560 -DdirectMemoryMb=4608
            -DexcludedGroups="org.apache.drill.categories.SlowTest,org.apache.drill.categories.UnlikelyTest" --batch-mode
      - run:
          name: Save test results
          command: |
            mkdir -p ~/test-results/junit/
            find . -type f -regex ".*/target/surefire-reports/.*xml" -exec cp {} ~/test-results/junit/ \;
          when: always
      - store_test_results:
          path: ~/test-results
      - save_cache:
          paths:
            - ~/.m2
          key: m2-{{ checksum "pom.xml" }}

  build_jdk12:
    machine:
      enabled: true
      image: circleci/classic:latest
    parallelism: 1

    working_directory: ~/drill

    steps:
      - checkout
      - restore_cache:
          keys:
            - m2-{{ checksum "pom.xml" }}
            - m2- # used if checksum fails
      - run:
          name: Update packages list
          command:
            sudo apt-get update
      - run:
          name: Install java 12
          command:
            sudo apt-get -y install openjdk-12-jdk
      - run:
          name: Set default java 12
          command:
            sudo update-java-alternatives --set java-1.12.0-openjdk-amd64
      - run:
          name: Update maven version
          command:
            curl -fsSL https://git.io/vpDIf | bash -s -- 3.6.3
      - run:
          name: Install libaio1.so library for MySQL integration tests
          command:
            sudo apt-get install libaio1 libaio-dev
      - run:
          name: Drill project build
          command: >
            mvn install -Drat.skip=false -Dlicense.skip=false -DmemoryMb=2560 -DdirectMemoryMb=4608
            -DexcludedGroups="org.apache.drill.categories.SlowTest,org.apache.drill.categories.UnlikelyTest" --batch-mode
      - run:
          name: Save test results
          command: |
            mkdir -p ~/test-results/junit/
            find . -type f -regex ".*/target/surefire-reports/.*xml" -exec cp {} ~/test-results/junit/ \;
          when: always
      - store_test_results:
          path: ~/test-results
      - save_cache:
          paths:
            - ~/.m2
          key: m2-{{ checksum "pom.xml" }}

  build_jdk13:
    machine:
      enabled: true
      image: circleci/classic:latest
    parallelism: 1

    working_directory: ~/drill

    steps:
      - checkout
      - restore_cache:
          keys:
            - m2-{{ checksum "pom.xml" }}
            - m2- # used if checksum fails
      - run:
          name: Update packages list
          command:
            sudo apt-get update
      - run:
          name: Install java 13
          command:
            sudo apt-get -y install openjdk-13-jdk
      - run:
          name: Set default java 13
          command:
            sudo update-java-alternatives --set java-1.13.0-openjdk-amd64
      - run:
          name: Update maven version
          command:
            curl -fsSL https://git.io/vpDIf | bash -s -- 3.6.3
      - run:
          name: Install libaio1.so library for MySQL integration tests
          command:
            sudo apt-get install libaio1 libaio-dev
      - run:
          name: Drill project build
          command: >
            mvn install -Drat.skip=false -Dlicense.skip=false -DmemoryMb=2560 -DdirectMemoryMb=4608
            -DexcludedGroups="org.apache.drill.categories.SlowTest,org.apache.drill.categories.UnlikelyTest" --batch-mode
      - run:
          name: Save test results
          command: |
            mkdir -p ~/test-results/junit/
            find . -type f -regex ".*/target/surefire-reports/.*xml" -exec cp {} ~/test-results/junit/ \;
          when: always
      - store_test_results:
          path: ~/test-results
      - save_cache:
          paths:
            - ~/.m2
          key: m2-{{ checksum "pom.xml" }}

workflows:
  version: 2
  build_and_test:
    jobs:
      - build_jdk8
      - build_jdk11
      - build_jdk12
      - build_jdk13
