/**
 * 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.
 */

plugins {
    id 'com.gradle.enterprise' version '3.16.1'
    id 'com.gradle.common-custom-user-data-gradle-plugin' version '1.12.1'
}

def isCI = System.getenv('JENKINS_URL') != null

gradleEnterprise {
    server = "https://ge.apache.org"
    buildScan {
        capture { taskInputFiles = true }
        uploadInBackground = !isCI
        publishAlways()
        publishIfAuthenticated()
        obfuscation {
            ipAddresses { addresses ->
                addresses.collect { address ->
                    "0.0.0.0"
                }
            }
        }
    }
}

buildCache {
    local {
        enabled = !isCI
    }
}

rootProject.name='fineract'
include ':fineract-core'
include ':fineract-provider'
include ':fineract-investor'
include ':fineract-loan'
include ':fineract-war'
include ':integration-tests'
include ':twofactor-tests'
include ':oauth2-tests'
include ':fineract-client'
include ':fineract-doc'
include ':fineract-avro-schemas'
// NOTE: custom Docker image with all custom modules included
include ':custom:docker'
// NOTE: dynamically load custom modules with pattern "custom -> company -> category -> module"
file("${rootDir}/custom").eachDir { companyDir ->
    if('build' != companyDir.name && 'docker' != companyDir.name) {
        file("${rootDir}/custom/${companyDir.name}").eachDir { categoryDir ->
            if('build' != categoryDir.name) {
                file("${rootDir}/custom/${companyDir.name}/${categoryDir.name}").eachDir { moduleDir ->
                    if('build' != moduleDir.name) {
                        include ":custom:${companyDir.name}:${categoryDir.name}:${moduleDir.name}"
                    }
                }
            }
        }
    }
}
