buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.8.1"
    }
}

// apply the plugin with its class name rather than its Id to work around gradle limitation of
// not being able to find the plugin by Id despite the dependencies being added right above. Gradle
// is currently not capable of loading plugins by Id if the dependency is anywhere else than
// in the main project build.gradle. This file is "imported" into the project's build.gradle
// through a "apply from:".
apply plugin: org.jfrog.gradle.plugin.artifactory.ArtifactoryPlugin
apply plugin: 'maven-publish'

task sourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

publishing {
    publications {
        library(MavenPublication) {
            groupId 'com.android.volley'
            artifactId 'volley'
            version project.version
            pom {
                packaging 'aar'
            }

            // Release AAR, Sources, and JavaDoc
            artifact "$buildDir/outputs/aar/volley-release.aar"
            artifact sourcesJar
            artifact javadocJar
        }
    }
}

artifactory {
    contextUrl = "https://oss.jfrog.org"
    publish {
        repository {
            repoKey = 'oss-snapshot-local'
            username = System.env.CI_DEPLOY_USERNAME
            password = System.env.CI_DEPLOY_PASSWORD
        }
        defaults {
            publications('library')
            publishArtifacts = true
        }
    }
    resolve {
        repoKey = 'jcenter'
    }
}
