/*
 * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 * 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.
 *
 */

plugins {
    id "com.github.spotbugs"
    id "com.github.johnrengelman.shadow"
    id "de.undercouch.download"
    id "net.researchgate.release"
}

allprojects {
    group = project.group
    version = project.version

    apply plugin: 'jacoco'
    apply plugin: 'maven-publish'

    repositories {
        mavenLocal()
        maven {
            url = 'https://maven.wso2.org/nexus/content/repositories/releases/'
        }

        maven {
            url = 'https://maven.wso2.org/nexus/content/groups/wso2-public/'
        }

        maven {
            url = 'https://repo.maven.apache.org/maven2'
        }

        maven {
            url = 'https://maven.pkg.github.com/ballerina-platform/*'
            credentials {
                username System.getenv("packageUser")
                password System.getenv("packagePAT")
            }
        }
    }

    ext {
        snapshotVersion= '-SNAPSHOT'
        timestampedVersionRegex = '.*-\\d{8}-\\d{6}-\\w.*\$'
    }
}

subprojects {

    configurations {
        externalJars
        ballerinaStdLibs
        jbalTools
    }

    dependencies {
        /* JBallerina Tools */
        jbalTools ("org.ballerinalang:jballerina-tools:${ballerinaLangVersion}") {
            transitive = false
        }

        ballerinaStdLibs "io.ballerina.stdlib:io-ballerina:${stdlibIoVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:os-ballerina:${stdlibOsVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:time-ballerina:${stdlibTimeVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:log-ballerina:${stdlibLogVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:file-ballerina:${stdlibFileVersion}"

        ballerinaStdLibs "io.ballerina.stdlib:constraint-ballerina:${stdlibConstraintVersion}"
        ballerinaStdLibs "org.ballerinalang:transaction-ballerina:${stdlibTransactionVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:task-ballerina:${stdlibTaskVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:crypto-ballerina:${stdlibCryptoVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:uuid-ballerina:${stdlibUuidVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:mime-ballerina:${stdlibMimeVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:cache-ballerina:${stdlibCacheVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:auth-ballerina:${stdlibAuthVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:jwt-ballerina:${stdlibJwtVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:oauth2-ballerina:${stdlibOAuth2Version}"
        ballerinaStdLibs "io.ballerina.stdlib:url-ballerina:${stdlibUrlVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:http-ballerina:${stdlibHttpVersion}"
        ballerinaStdLibs "io.ballerina.stdlib:observe-ballerina:${observeVersion}"
        ballerinaStdLibs "io.ballerina:observe-ballerina:${observeInternalVersion}"
        ballerinaStdLibs "io.ballerina.lib:data.jsondata-ballerina:${stdlibDataJsonDataVersion}"

        externalJars (group: 'com.zaxxer', name: 'HikariCP', version: "${hikariLibVersion}") {
            transitive = false
        }
        externalJars (group: 'org.hsqldb', name: 'hsqldb', version: "${hsqlDriverVersion}") {
            transitive = false
        }
    }
}

def moduleVersion = project.version.replace("-SNAPSHOT", "")

release {
    failOnPublishNeeded = false
    failOnSnapshotDependencies = true

    buildTasks = ['build']
    versionPropertyFile = 'gradle.properties'
    tagTemplate = 'v$version'

    git {
        requireBranch = "release-${moduleVersion}"
        pushToRemote = 'origin'
    }
}

task build {
    dependsOn(':sql-native:build')
    dependsOn(':sql-compiler-plugin:build')
    dependsOn(':sql-ballerina:build')
    dependsOn(':sql-compiler-plugin-tests:build')
}

publishToMavenLocal.dependsOn build
publish.dependsOn build
