# 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: "Cross Checks"

on:
  push:
    branches: ['master', 'pr-*']
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [master]
  schedule:
    - cron: '0 13 * * 4'

jobs:
  crosschecks:
    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        language: ['java']
        java: [ '11', '17' ]
        os: [ubuntu-latest, windows-latest, macos-latest]

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
    - name: Setup Java JDK
      uses: actions/setup-java@v3
      with:
        distribution: 'zulu'
        java-version: ${{ matrix.java }}
    - uses: actions/cache@v3
      with:
        path: ~/.m2
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: ${{ runner.os }}-m2
    - name: Build
      run: mvn -U -T 1C -P 'skipTests,all'
    - name: Validate
      run: mvn -T 1C checkstyle:check tools:verify-legal-files modernizer:modernizer apache-rat:check
    - name: Test
      run: mvn -T 1C clean test '-Dinvoker.streamLogs=true' '-Dmodernizer.skip=true' '-Dianal.phase=none' '-Drat.skip=true' '-Dcheckstyle.skip=true' '-Dsass.skip=true'
    - name: Verify
      run: mvn -f fit/core-reference/pom.xml verify '-Dit.test=RESTITCase' '-Dinvoker.streamLogs=true' '-Dmodernizer.skip=true' '-Drat.skip=true' '-Dcheckstyle.skip=true' '-Djacoco.skip=true'
