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

on:
  push:
    branches:
      - '*'
  pull_request:
    branches:
      - '*'

# https://help.github.com/en/actions/automating-your-workflow-with-github-actions/software-installed-on-github-hosted-runners

jobs:
  windows:
    name: 'Windows (JDK 11)'
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 50
    - name: 'Set up JDK 11'
      uses: actions/setup-java@v1
      with:
        java-version: 11
    - name: 'Test'
      shell: cmd
      run: |
        ./gradlew --no-parallel --no-daemon build javadoc

  linux-avatica:
    name: 'Linux (JDK 8), Avatica master'
    runs-on: ubuntu-latest
    steps:
    - name: 'Set up JDK 8'
      uses: actions/setup-java@v1
      with:
        java-version: 8
    - uses: actions/checkout@v2
      with:
        fetch-depth: 50
    - name: 'Install Avatica to Maven Local'
      run: |
        ./gradlew publishToMavenLocal -Pcalcite.avatica.version=1.0.0-dev-master -PskipJavadoc
    - name: 'Test Calcite'
      run: |
        git clone --depth 100 https://github.com/apache/calcite.git ../calcite
        cd ../calcite
        ./gradlew --no-parallel --no-daemon build -Pcalcite.avatica.version=1.0.0-dev-master-SNAPSHOT -PenableMavenLocal

  mac:
    name: 'macOS (JDK 14)'
    runs-on: macos-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 50
    - name: 'Set up JDK 14'
      uses: actions/setup-java@v1
      with:
        java-version: 14
    - name: 'Test'
      run: |
        ./gradlew --no-parallel --no-daemon build javadoc
