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

# The default workflow for GitHub Actions that is used for continuous
# integration. A configuration file that is used to control when, where,
# and how different CI jobs are executed.
# For more information on how to modify this file check the following link:
# https://help.github.com/en/actions/automating-your-workflow-with-github-actions

name: CI

on:
  push:
    paths-ignore:
      - 'site/**'
    branches:
      - '*'
  pull_request:
    types: [opened, synchronize, reopened, labeled]
    paths-ignore:
      - 'site/**'
    branches:
      - '*'

# Throw OutOfMemoryError in case less than 35% is free after full GC
# This avoids never-ending GC trashing if memory gets too low in case of a memory leak
env:
  _JAVA_OPTIONS: '-XX:GCTimeLimit=90 -XX:GCHeapFreeLimit=35'

jobs:
  windows:
    if: github.event.action != 'labeled'
    name: 'Windows (JDK 8)'
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 50
    - name: 'Set up JDK 8'
      uses: actions/setup-java@v1
      with:
        java-version: 8
    - uses: burrunan/gradle-cache-action@v1
      name: Test
      with:
        job-id: jdk${{ matrix.jdk }}
        arguments: --scan --no-parallel --no-daemon build javadoc

  linux-avatica:
    if: github.event.action != 'labeled'
    name: 'Linux (JDK 11), Avatica master'
    runs-on: ubuntu-latest
    steps:
    - name: 'Set up JDK 11'
      uses: actions/setup-java@v1
      with:
        java-version: 11
    - name: 'Clone Avatica to Maven Local repository'
      run: |
        git clone --branch master --depth 100 https://github.com/apache/calcite-avatica.git ../calcite-avatica
    - uses: burrunan/gradle-cache-action@v1
      name: Build Avatica
      with:
        job-id: avatica-jdk${{ matrix.jdk }}
        build-root-directory: ../calcite-avatica
        arguments: publishToMavenLocal
        properties: |
          calcite.avatica.version=1.0.0-dev-master
          skipJavadoc=
    - uses: actions/checkout@v2
      with:
        fetch-depth: 50
    - uses: burrunan/gradle-cache-action@v1
      name: Test
      with:
        job-id: jdk${{ matrix.jdk }}
        execution-only-caches: true
        arguments: --scan --no-parallel --no-daemon build javadoc
        properties: |
          calcite.avatica.version=1.0.0-dev-master-SNAPSHOT
          enableMavenLocal=

  mac:
    if: github.event.action != 'labeled'
    name: 'macOS (JDK 15)'
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 50
      - name: 'Set up JDK 15'
        uses: actions/setup-java@v1
        with:
          java-version: 15
      - uses: burrunan/gradle-cache-action@v1
        name: Test
        with:
          job-id: jdk15
          arguments: --scan --no-parallel --no-daemon build javadoc

  linux-slow:
    # Run slow tests when the commit is on master or it is requested explicitly by adding an
    # appropriate label in the PR
    if: github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'slow-tests-needed')
    name: 'Linux (JDK 8) Slow Tests'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 50
      - name: 'Set up JDK 8'
        uses: actions/setup-java@v1
        with:
          java-version: 8
      - uses: burrunan/gradle-cache-action@v1
        name: Test
        with:
          job-id: jdk8
          arguments: --scan --no-parallel --no-daemon testSlow
  linux-druid:
    if: github.event.action != 'labeled'
    name: 'Linux (JDK 8) Druid Tests'
    runs-on: ubuntu-latest
    steps:
    - name: 'Set up JDK 8'
      uses: actions/setup-java@v1
      with:
        java-version: 8
    - name: 'Checkout Druid dataset'
      uses: actions/checkout@master
      with:
        repository: zabetak/calcite-druid-dataset
        fetch-depth: 1
        path: druid-dataset
    - name: 'Start Druid containers'
      working-directory: ./druid-dataset
      run: |
        chmod -R 777 storage
        docker-compose up -d
    - name: 'Wait Druid nodes to startup'
      run: |
        until docker logs coordinator | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done
        until docker logs router | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done
        until docker logs historical | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done
        until docker logs middlemanager | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done
        until docker logs broker | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done
    - name: 'Index Foodmart/Wikipedia datasets'
      working-directory: ./druid-dataset
      run: ./index.sh 30s
    - uses: actions/checkout@v2
      with:
        fetch-depth: 1
        path: calcite
    - uses: burrunan/gradle-cache-action@v1
      name: 'Run Druid tests'
      with:
        build-root-directory: ./calcite
        job-id: Druid8
        arguments: --scan --no-parallel --no-daemon :druid:test -Dcalcite.test.druid=true
