/*
 *  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.
 */
import org.gradle.util.GradleVersion

pluginManagement {
    repositories {
        gradlePluginPortal()
        mavenCentral()
//        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
    }

    includeBuild("build-logic")
}

// check https://gradle.com/enterprise/releases with new versions. GE plugin version should not lag behind Gradle version
plugins {
    // Before updating this, please check the compatibility from https://docs.gradle.com/enterprise/compatibility/#develocity_compatibility and https://ge.apache.org/scans.
    id "com.gradle.develocity" version "3.17.2"
    id 'com.gradle.common-custom-user-data-gradle-plugin' version '2.0.1'
}

apply from: 'gradle/build-scans.gradle'

dependencyResolutionManagement {
    repositories {
        mavenCentral()
    }
}

enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")

def subprojects = [
        'groovy-all',
        'groovy-ant',
        'groovy-astbuilder',
        'groovy-binary',
        'groovy-bom',
        'groovy-cli-commons',
        'groovy-cli-picocli',
        'groovy-console',
        'groovy-contracts',
        'groovy-datetime',
        'groovy-dateutil',
        'groovy-docgenerator',
        'groovy-groovydoc',
        'groovy-groovysh',
        'groovy-jmx',
        'groovy-json',
        'groovy-jsr223',
        'groovy-ginq',
        'groovy-macro',
        'groovy-macro-library',
        'groovy-nio',
        'groovy-servlet',
        'groovy-sql',
        'groovy-swing',
        'groovy-templates',
        'groovy-test',
        'groovy-test-junit5',
        'groovy-testng',
        'groovy-toml',
        'groovy-typecheckers',
        'groovy-xml',
        'groovy-yaml',
        'performance',
        'tests-preview',
        'binary-compatibility',
        'stress'
]

include(subprojects as String[])

rootProject.children.each { prj ->
    prj.projectDir = new File("$rootDir/subprojects/$prj.name")
}

rootProject.name = 'groovy'

enableFeaturePreview('GROOVY_COMPILATION_AVOIDANCE')
System.setProperty("sonar.gradle.skipCompile", "true")
