/*
 * Copyright 2018 The Android Open Source Project
 *
 * Licensed 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.
 */

include ":jetpad-integration"
include ":plugins"
include ":private"
include ":public"

dependencyResolutionManagement {
    versionCatalogs {
        libs {
            from(files("../gradle/libs.versions.toml"))
            def agpOverride = System.getenv("GRADLE_PLUGIN_VERSION")
            if (agpOverride != null) {
                logger.warn("Using custom version ${agpOverride} of AGP due to GRADLE_PLUGIN_VERSION being set.")
                version('androidGradlePlugin', agpOverride)
            }
            def lintOverride = System.getenv("LINT_VERSION")
            if (lintOverride != null) {
                logger.warn("Using custom version ${lintOverride} of Lint due to LINT_VERSION being set.")
                version('androidLint', lintOverride)
            }
        }
    }
}
