buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.codehaus.groovy.modules.http-builder:http-builder:0.7.2'
    }
}
import groovyx.net.http.RESTClient


preparePublication {
    doFirst {
        def client = new RESTClient()
        client.uri = 'https://oss.sonatype.org/service/local/staging/profiles/169b36e205a64e/start'
        client.auth.basic(username, password)

        def params = [
                body: "<promoteRequest><data><description>Repository for publishing $version</description></data></promoteRequest>",
                contentType: groovyx.net.http.ContentType.XML,
                requestContentType: groovyx.net.http.ContentType.XML
        ]

        def rootNode
        try {
            def serverResponse = client.post(params)
            rootNode = serverResponse.getData()
        } catch (groovyx.net.http.HttpResponseException e) {
            throw new GradleException(e.getResponse().getData().toString(), e)
        }

        def repoId = rootNode.data.stagedRepositoryId.text()
        ext.repoUrl = "https://oss.sonatype.org/service/local/staging/deployByRepositoryId/$repoId/".toString()
        println "##teamcity[setParameter name='system.deploy-url' value='${repoUrl}']"
    }
}


