# 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: "Grails Joint Validation Build"
#  GROOVY_2_5_X == Grails 4.0.x
#  GROOVY_3_0_X == grails master
#  Groovy master branch does not map to any due to changed package names.
on:
  push:
    branches:
      - GROOVY_2_5_X
      - GROOVY_3_0_X
  #      - master
  pull_request:
    branches:
      - GROOVY_2_5_X
      - GROOVY_3_0_X
#      - master
permissions:
  contents: read

jobs:
  build:
    strategy:
      fail-fast: true
      matrix:
        os: [ubuntu-latest]
    runs-on: ${{ matrix.os }}
    env:
        GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: 11
      - uses: gradle/actions/setup-gradle@v3
      - name: Env
        run: env

      # Select correct Grails branch for this build:
      - name: Checkout Grails 4.1.x (master)
        run: cd .. && git clone --depth 1 https://github.com/grails/grails-core.git -b master
        if: ${{ (github.event_name == 'pull_request' && github.base_ref == 'GROOVY_3_0_X') || github.ref == 'refs/heads/GROOVY_3_0_X' }}
      - name: Checkout Grails 4.0.x (4.0.x)
        run: cd .. && git clone --depth 1 https://github.com/grails/grails-core.git -b 4.0.x
        if: ${{ (github.event_name == 'pull_request' && github.base_ref == 'GROOVY_2_5_X') || github.ref == 'refs/heads/GROOVY_2_5_X' }}

      - name: Build and install groovy (no docs)
        run: ./gradlew clean install -x groovydoc -x javadoc -x javadocAll -x groovydocAll -x asciidoc -x docGDK --no-build-cache --no-scan --no-daemon
        timeout-minutes: 60

      - name: Set CI_GROOVY_VERSION for Grails
        run: echo "CI_GROOVY_VERSION=$(cat gradle.properties | grep groovyVersion | cut -d\= -f2 |  tr -d '[:space:]')" >> $GITHUB_ENV
      - name: echo CI_GROOVY_VERSION
        run: echo $CI_GROOVY_VERSION
      - name: Build Grails
        run: cd ../grails-core && ./gradlew clean build test -x groovydoc --no-build-cache --no-scan --no-daemon
        timeout-minutes: 60
