OpenSearch/x-pack/plugin/ml/cpp-snapshot/build.gradle

53 lines
1.8 KiB
Groovy

import java.net.HttpURLConnection
import org.elasticsearch.gradle.VersionProperties
apply plugin: 'distribution'
ext.version = VersionProperties.elasticsearch
// This project pulls a snapshot version of the ML cpp artifacts and sets that as the artifact
// for this project so it can be used with dependency substitution.
void getZip(File snapshotZip) {
String zipUrl = "http://prelert-artifacts.s3.amazonaws.com/maven/org/elasticsearch/ml/ml-cpp/${version}/ml-cpp-${version}.zip"
File snapshotMd5 = new File(snapshotZip.toString() + '.md5')
HttpURLConnection conn = (HttpURLConnection) new URL(zipUrl).openConnection();
// do a HEAD first to check the zip hash against the local file
conn.setRequestMethod('HEAD');
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new GradleException('ML cpp snapshot does not exist')
}
String remoteMd5 = conn.getHeaderField('ETag')
if (snapshotZip.exists()) {
// do a HEAD first to check the zip hash against the local file
String localMd5 = snapshotMd5.getText('UTF-8')
if (remoteMd5.equals(localMd5)) {
logger.info('Using cached ML snapshot')
return
}
}
snapshotZip.bytes = new URL(zipUrl).bytes
snapshotMd5.setText(remoteMd5, 'UTF-8')
}
File snapshotZip = new File(projectDir, ".cache/ml-cpp-${version}.zip")
task downloadMachineLearningSnapshot {
onlyIf {
// skip if ml-cpp is being built locally
findProject(':ml-cpp') == null &&
// skip for offline builds - just rely on the artifact already having been downloaded before here
project.gradle.startParameter.isOffline() == false
}
doFirst {
snapshotZip.parentFile.mkdirs()
getZip(snapshotZip)
}
}
artifacts {
'default' file: snapshotZip, name: 'ml-cpp', type: 'zip', builtBy: downloadMachineLearningSnapshot
}