buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.0'
    }
}

plugins {
    id 'io.github.gradle-nexus.publish-plugin' version '1.1.0'
}

group = 'software.amazon.awssdk.crt'
version = '1.0.0-dev'


if (project.hasProperty("sonatypeUsername") && project.hasProperty("sonatypePassword")) {
    apply plugin: 'io.github.gradle-nexus.publish-plugin'
    nexusPublishing {
        repositories {
            create("awsNexus") {
                nexusUrl.set(uri("https://aws.oss.sonatype.org/service/local/"))
                snapshotRepositoryUrl.set(uri("https://aws.oss.sonatype.org/content/repositories/snapshots/"))
                username.set(project.property("sonatypeUsername") as String)
                password.set(project.property("sonatypePassword") as String)
            }
        }
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
