#
# 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: Integration Tests
on:
  pull_request:
    types: [opened, reopened, synchronize]
env:
  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3
jobs:
  build:
    runs-on: ubuntu-20.04
    # TODO: Possibly point to the ./build-ci-image.yaml with the "uses" key
    container: ghcr.io/${{ github.repository_owner }}/livy-ci:latest
    strategy:
      matrix:
        maven_profile:
        - "-Pscala-2.11 -Pspark2"
        - "-Pscala-2.12 -Pspark2"
        - "-Pscala-2.12 -Pspark3"
    steps:
    - 
      name: Checkout
      uses: actions/checkout@v3
    - 
      name: Cache local Maven repository
      uses: actions/cache@v3
      with:
        path: |
          /root/.m2/repository
          !/root/.m2/repository/org/apache/livy
        key: ${{ runner.os }}-maven-${{ hashFiles('pom.xml', '*/pom.xml', 'thriftserver/*/pom.xml', 'core/*/pom.xml', 'repl/*/pom.xml', 'scala-api/*/pom.xml') }}
        restore-keys: |
          ${{ runner.os }}-maven-
    - 
      name: Build with Maven
      run: mvn -Pthriftserver ${{ matrix.mvn_profile }} -DskipTests -Dmaven.javadoc.skip=true -B -V -e verify
    -
      name: Upload coverage to codecov
      uses: codecov/codecov-action@v3
