54 lines
1022 B
Groovy
54 lines
1022 B
Groovy
|
import org.gradle.api.tasks.*
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// download and use checksum to verify that we got what we expected
|
||
|
//
|
||
|
|
||
|
@CacheableTask
|
||
|
class VerifiedDownload extends org.gradle.api.DefaultTask {
|
||
|
|
||
|
// URL of resource to download
|
||
|
def @Input src
|
||
|
|
||
|
// expected checksum of resource as hex digits
|
||
|
def @Input checksum
|
||
|
|
||
|
// algorithm to use for computing checksum
|
||
|
def @Input algorithm = 'MD5'
|
||
|
|
||
|
// whether to use ETag for selective downloading
|
||
|
def @Input useETag = true
|
||
|
|
||
|
// local file into which resource should be saved
|
||
|
def @OutputFile dest
|
||
|
|
||
|
File getDest() {
|
||
|
return project.file(dest)
|
||
|
}
|
||
|
|
||
|
VerifiedDownload() {
|
||
|
outputs.upToDateWhen {
|
||
|
getDest().exists()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@TaskAction
|
||
|
downloadAndVerify() {
|
||
|
def destFile = getDest()
|
||
|
project.download {
|
||
|
src this.src
|
||
|
dest destFile
|
||
|
overwrite true
|
||
|
onlyIfModified true
|
||
|
useETag this.useETag
|
||
|
}
|
||
|
project.verifyChecksum {
|
||
|
src destFile
|
||
|
algorithm this.algorithm
|
||
|
checksum this.checksum
|
||
|
}
|
||
|
}
|
||
|
}
|