blob: 0f1cc9a958201bed9aae84de29e275b3f78f1a2a [file] [log] [blame]
/*
* Copyright (C) 2015 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.
*/
package android.databinding;
import org.gradle.api.DefaultTask
import org.gradle.api.artifacts.maven.MavenPom
import org.gradle.api.file.FileCollection
import org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.TaskAction;
import groovy.json.JsonSlurper;
public class UploadToBintrayTask extends DefaultTask {
static final String API_URL = "https://api.bintray.com";
static final String PACKAGE_HEADER = "X-Bintray-Package"
static final String VERSION_HEADER = "X-Bintray-Version"
static final String PUBLISH_HEADER = "X-Bintray-Publish"
static final String OVERRIDE_HEADER = "X-Bintray-Override"
static final String EXPLODE_HEADER = "X-Bintray-Explode"
static final String CONTENT_PREFIX = "content/android/android-tools"
String username;
String apiKey;
String pkg;
String version;
FileCollection localFiles;
String mavenRepoAbsPath;
String targetPath;
public void configureFrom(DefaultGroovyMavenDeployer deployer) {
String repoUrl = deployer.repository.url
if (repoUrl == null) {
throw new RuntimeException("Cannot find repo url for $deployer")
}
def pom = deployer.pom
pkg = pom.groupId + "." + pom.artifactId
version = pom.version
mavenRepoAbsPath = repoUrl
targetPath = "${pkg.replaceAll("\\.", "/")}/${version}"
localFiles = project.fileTree(mavenRepoAbsPath + "/" + targetPath)
}
@TaskAction
public void upload() {
if (username == null || apiKey == null) {
throw new IllegalArgumentException("You should pass your bintray user and " +
"api key as params e.g. ./gradlew ${BintrayPlugin.DEFAULT_TASK_NAME}" +
" -P${BintrayPlugin.USER_PROP}=<my username>" +
" -P${BintrayPlugin.API_KEY_PROP}=<my api key>")
}
println(log())
for (File localFile : localFiles) {
def p = ['curl', '-u', "$username:$apiKey", "-H",
"$PACKAGE_HEADER: $pkg", "-H", "$VERSION_HEADER: $version",
"-X", "PUT", "--data-binary", "@${localFile.getAbsolutePath()}",
"$API_URL/$CONTENT_PREFIX/$targetPath/${localFile.name}"]
println("executing $p")
def execute = p.execute()
execute.waitFor()
if (execute.exitValue() != 0) {
throw new RuntimeException("failed to upload artifact. error: ${execute.err.text}")
}
def responseText = execute.text
def json = new JsonSlurper().parseText(responseText)
if (json.getAt("message") != "success") {
throw new RuntimeException("Cannot upload artifact. Error response: " +
"${json.getAt("message")}")
}
println("uploaded $localFile")
}
}
public String log() {
return "UploadToBintrayTask{" +
"username='" + username + '\'' +
", apiKey='" + apiKey + '\'' +
", pkg='" + pkg + '\'' +
", version='" + version + '\'' +
", localFile=" + localFiles +
", mavenRepo=" + mavenRepoAbsPath +
'}';
}
}