#
#    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
#  
#       https://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.
#

# Builds JDO and runs the TCK
#
# This workflow is run for every submitted pull request and every push on the main branch
name: Build JDO & Run TCK

on:
  push:
    branches:
      - 'main'
  pull_request:

jobs:
  format-check:
    name: Check Code Formatting
    continue-on-error: true
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
        fetch-depth: 1
    - name: Check Format
      run: |
        mvn -Pverify-format clean compile
      shell: 'bash'

  build-jdo:
    name: Build JDO & Run TCK
    needs: format-check
    runs-on: ubuntu-latest
    strategy:
      matrix:
        # test against Java 8 and 11
        java: [ 8, 11, 17 ]
    defaults:
      run:
        shell: bash

    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 1

      - name: Setup java
        uses: actions/setup-java@v1
        with:
          java-version: ${{ matrix.java }}

      # Builds JDO & Runs the TCK
      # Skips JNDI-related tests as they require external libraries
      - name: Build JDO & Run TCK
        run: |
          mvn -Djdo.tck.skipJndi clean install
