# 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.0
    - 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_jdk9:
    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 9
        command:
          sudo apt-get -y install openjdk-9-jdk
    - run:
        name: Set default java 9
        command:
          sudo update-java-alternatives --set java-1.9.0-openjdk-amd64
    - run:
        name: Update maven version
        command:
          curl -fsSL https://git.io/vpDIf | bash -s -- 3.6.0
    - 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_jdk10:
    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 10
        command:
          sudo apt-get -y install openjdk-10-jdk
    - run:
        name: Set default java 10
        command:
          sudo update-java-alternatives --set java-1.10.0-openjdk-amd64
    - run:
        name: Update maven version
        command:
          curl -fsSL https://git.io/vpDIf | bash -s -- 3.6.0
    - 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_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.0
    - run:
        name: Install libaio1.so library for MySQL integration tests
        command:
          sudo apt-get install libaio1 libaio-dev
    - run:
        name: Drill project build
        # Set forkCount to 1 since tests use more memory and memory limitations for CircleCI is reached
        # for default value of forkCount.
        command: >
          mvn install -Drat.skip=false -Dlicense.skip=false -DmemoryMb=2560 -DdirectMemoryMb=4608 -DforkCount=1
          -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_jdk9
    - build_jdk10
    - build_jdk11
