summaryrefslogtreecommitdiff
path: root/buildSrc/src
diff options
context:
space:
mode:
Diffstat (limited to 'buildSrc/src')
-rw-r--r--buildSrc/src/main/groovy/buildSrc/DownloadTask.groovy61
1 files changed, 61 insertions, 0 deletions
diff --git a/buildSrc/src/main/groovy/buildSrc/DownloadTask.groovy b/buildSrc/src/main/groovy/buildSrc/DownloadTask.groovy
new file mode 100644
index 0000000..1a49dd5
--- /dev/null
+++ b/buildSrc/src/main/groovy/buildSrc/DownloadTask.groovy
@@ -0,0 +1,61 @@
+package buildSrc
+
+import org.apache.commons.codec.binary.Hex
+import org.gradle.api.DefaultTask
+import org.gradle.api.tasks.*
+
+import java.security.MessageDigest
+
+class DownloadTask extends DefaultTask {
+ @OutputFile
+ File destFile
+
+ @Input
+ URL source
+
+ String sha256sum
+
+ void setSource(URL url) {
+ this.@source = url
+ if (destFile == null) {
+ final basename = url.path.substring(url.path.lastIndexOf('/') + 1)
+ destFile = new File(project.buildDir, basename)
+ }
+ }
+
+ void source(URL url) {
+ setSource(url)
+ }
+
+ void source(String sourceUrl) {
+ source new URL(sourceUrl)
+ }
+
+ void sha256sum(String sha256sum) {
+ this.@sha256sum = sha256sum
+ }
+
+ private void checkSha256Sum(File file, String sum) {
+ final md = MessageDigest.getInstance('SHA-256')
+ final digestBytes = md.digest(file.bytes)
+ final digestHex = Hex.encodeHexString(digestBytes)
+ if (digestHex != sum) {
+ throw new TaskExecutionException(this,
+ new Exception("Checksum mismatch, expected ${sum} got ${digestHex}"))
+ }
+ }
+
+ @TaskAction
+ void doExecute() {
+ final tempFile = new File(destFile.path + '_download')
+ project.logger.info("Download ${source} to ${tempFile}")
+ ant.get(src: source, dest: tempFile, verbose: true)
+
+ if (sha256sum) {
+ checkSha256Sum(tempFile, sha256sum)
+ }
+
+ project.logger.info("Rename downloaded ${tempFile} to ${destFile}")
+ ant.rename(src: tempFile, dest: destFile)
+ }
+} \ No newline at end of file