Skip to content

Commit

Permalink
correctly handle unexecuted downloadEs task (elastic#10555)
Browse files Browse the repository at this point in the history
  • Loading branch information
colinsurprenant authored Mar 13, 2019
1 parent a1f6da6 commit 5ae5386
Showing 1 changed file with 45 additions and 26 deletions.
71 changes: 45 additions & 26 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -423,54 +423,71 @@ bootstrap.dependsOn installTestGems
runIntegrationTests.shouldRunAfter tasks.getByPath(":logstash-core:test")
check.dependsOn runIntegrationTests

String artifactsVersionApi = "https://artifacts-api.elastic.co/v1/versions/"

task downloadEs(type: Download) {
description "Download ES Snapshot for current branch version: ${version}"

String artifactsVersionApi = "https://artifacts-api.elastic.co/v1/versions/"
doFirst {
if (!project.ext.versionFound) {
throw new GradleException("could not find the current artifact from the artifact-api ${artifactsVersionApi} for version: ${version}")
}
}

String apiResponse = artifactsVersionApi.toURL().text
def dlVersions = new JsonSlurper().parseText(apiResponse)
// the version string can be either '7.0.0' or '7.0.0-alpha1', i.e. with the qualifier.
// in the normal PR type builds it is plain '7.0.0'
// in the build invoked by the release manager it is '7.0.0-alpha1' etc.
// the artifacts-api will return JSON like this: `{"versions":["5.6.13-SNAPSHOT","6.4.3-SNAPSHOT","6.5.0-SNAPSHOT","6.6.0-SNAPSHOT","7.0.0-alpha1-SNAPSHOT"]}`
String qualifiedVersion = dlVersions['versions'].grep(~/^${version}.*/)[0]
if (qualifiedVersion == "null") {
throw new GradleException("could not find the current artifact from the artifact-api for version: ${version}, api response was: ${apiResponse}")
}
if (qualifiedVersion == null) {
// the version is not found in the versions API, for now just set dummy values so the
// task parameters like src and dest below sees these dummy values but also set
// versionFound to false so that we can fail the task in the doFirst closure.
// this is somewhat convoluted and there is certainly a better way to do this but
// it seems to be an acceptable solution for now.
project.ext.set("versionFound", false)
project.ext.set("elasticsearchSnapshotURL", "http://elastic.co/invalid")
project.ext.set("elasticsearchDownloadLocation", "${projectDir}/build/invalid")
} else {
project.ext.set("versionFound", true)

String arch = "x86_64"
String osName = System.properties['os.name']
String arch = "x86_64"
String osName = System.properties['os.name']

if (osName ==~ /Mac OS X/) {
osName = "darwin"
} else {
osName = "linux"
}
if (osName ==~ /Mac OS X/) {
osName = "darwin"
} else {
osName = "linux"
}

String architecture = "${osName}-${arch}"
String architecture = "${osName}-${arch}"

String downloadedElasticsearchName = "elasticsearch-${qualifiedVersion}-${architecture}"
project.ext.set("unpackedElasticsearchName", "elasticsearch-${qualifiedVersion}")
String downloadedElasticsearchName = "elasticsearch-${qualifiedVersion}-${architecture}"
project.ext.set("unpackedElasticsearchName", "elasticsearch-${qualifiedVersion}")

// find latest reference to last build
String buildsListApi = "https://artifacts-api.elastic.co/v1/versions/${qualifiedVersion}/builds/"
apiResponse = buildsListApi.toURL().text
def dlBuilds = new JsonSlurper().parseText(apiResponse)
String build = dlBuilds["builds"][0]
// find latest reference to last build
String buildsListApi = "https://artifacts-api.elastic.co/v1/versions/${qualifiedVersion}/builds/"
apiResponse = buildsListApi.toURL().text
def dlBuilds = new JsonSlurper().parseText(apiResponse)
String build = dlBuilds["builds"][0]

// find url of build artifact
String artifactApiUrl = "https://artifacts-api.elastic.co/v1/versions/${qualifiedVersion}/builds/${build}/projects/elasticsearch/packages/${downloadedElasticsearchName}.tar.gz"
apiResponse = artifactApiUrl.toURL().text
def buildUrls = new JsonSlurper().parseText(apiResponse)
// find url of build artifact
String artifactApiUrl = "https://artifacts-api.elastic.co/v1/versions/${qualifiedVersion}/builds/${build}/projects/elasticsearch/packages/${downloadedElasticsearchName}.tar.gz"
apiResponse = artifactApiUrl.toURL().text
def buildUrls = new JsonSlurper().parseText(apiResponse)

String elasticsearchSnapshotURL = System.getenv("ELASTICSEARCH_SNAPSHOT_URL") ?: buildUrls["package"]["url"]
project.ext.set("elasticsearchDownloadLocation", "${projectDir}/build/${downloadedElasticsearchName}.tar.gz")
project.ext.set("elasticsearchSnapshotURL", System.getenv("ELASTICSEARCH_SNAPSHOT_URL") ?: buildUrls["package"]["url"])
project.ext.set("elasticsearchDownloadLocation", "${projectDir}/build/${downloadedElasticsearchName}.tar.gz")
}

src elasticsearchSnapshotURL
src project.ext.elasticsearchSnapshotURL
onlyIfNewer true
inputs.file("${projectDir}/versions.yml")
outputs.file(project.ext.elasticsearchDownloadLocation)
dest new File(project.ext.elasticsearchDownloadLocation)

doLast {
System.out.println "Downloaded to ${project.ext.elasticsearchDownloadLocation}"
}
Expand All @@ -483,8 +500,10 @@ task deleteLocalEs(type: Delete) {
task copyEs(type: Copy, dependsOn: [downloadEs, deleteLocalEs]) {
from tarTree(resources.gzip(project.ext.elasticsearchDownloadLocation))
into "./build/"

doLast {
file("./build/${project.ext.unpackedElasticsearchName}").renameTo('./build/elasticsearch')
System.out.println "Unzipped ${project.ext.elasticsearchDownloadLocation} to ./build/elasticsearch"
}
}

Expand Down

0 comments on commit 5ae5386

Please sign in to comment.