diff options
Diffstat (limited to 'buildSrc/src/main/groovy')
-rw-r--r-- | buildSrc/src/main/groovy/buildSrc/DownloadTask.groovy | 61 |
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 |