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

on:
  pull_request:
    branches:
      - main
    paths:
      - "java/**"
      - ".github/workflows/java.yml"
  push:
    paths:
      - "java/**"
      - ".github/workflows/java.yml"

concurrency:
  group: ${{ github.repository }}-${{ github.ref }}-${{ github.workflow }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  java:
    name: "Java ${{ matrix.java }}/Linux"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: ['8', '11']
    services:
      postgres:
        image: postgres
        env:
          POSTGRES_DB: postgres
          POSTGRES_PASSWORD: password
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          persist-credentials: false
      - uses: actions/setup-java@v3
        with:
          cache: "maven"
          distribution: "temurin"
          java-version: ${{ matrix.java }}
      - name: Start SQLite server
        shell: bash -l {0}
        run: |
          docker-compose up -d golang-sqlite-flightsql
      - name: Build/Test
        env:
          ADBC_SQLITE_FLIGHTSQL_URI: "grpc+tcp://localhost:8080"
          ADBC_JDBC_POSTGRESQL_URL: "localhost:5432/postgres"
          ADBC_JDBC_POSTGRESQL_USER: "postgres"
          ADBC_JDBC_POSTGRESQL_PASSWORD: "password"
        run: |
          cd java
          mvn install

  java-errorprone:
    name: "Java ${{ matrix.java }}/Linux with ErrorProne"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: ['11']
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          persist-credentials: false
      - uses: actions/setup-java@v3
        with:
          cache: "maven"
          distribution: "temurin"
          java-version: ${{ matrix.java }}
      - name: Build/Test
        run: |
          cd java
          mkdir .mvn
          cat <<HERE > .mvn/jvm.config
          --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
          --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
          --add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
          --add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
          --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
          --add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
          --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
          --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
          --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
          --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
          HERE
          mvn -P errorprone install
