Factor out recurring pattern in download tasks

This commit is contained in:
Ben Liblit 2018-03-06 10:26:36 -06:00
parent 848530f39a
commit 1d2a8a3e7e
6 changed files with 84 additions and 150 deletions

View File

@ -0,0 +1,46 @@
import org.gradle.api.tasks.*
////////////////////////////////////////////////////////////////////////
//
// download and use checksum to verify that we got what we expected
//
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)
}
@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
}
}
}

View File

@ -6,31 +6,10 @@ sourceSets.test.java.srcDirs = ['src']
// download JLex
//
class VerifiedDownload extends org.gradle.api.DefaultTask {
@Input String src
@Input String checksum
@OutputFile File dest
@TaskAction
downloadAndVerify() {
download {
src this.src
dest this.dest
overwrite true
onlyIfModified true
}
verifyChecksum {
src this.dest
checksum this.checksum
}
}
}
task downloadJLex(type: VerifiedDownload) {
src 'http://www.cs.princeton.edu/~appel/modern/java/JLex/current/Main.java'
checksum 'fe0cff5db3e2f0f5d67a153cf6c783af'
dest file('src/JLex/Main.java')
dest 'src/JLex/Main.java'
}
task cleanDownloadJLex(type: Delete) {

View File

@ -10,21 +10,10 @@ dependencies {
)
}
task downloadNodeJS {
outputs.file "$temporaryDir/nodejs.zip"
doLast {
download {
src 'https://api.github.com/repos/nodejs/node/zipball/0a604e92e258c5ee2752d763e50721e35053f135'
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag true
}
verifyChecksum {
src outputs.files.singleFile
checksum '33c5ba7a5d45644e70d268d8ad3e57df'
}
}
task downloadNodeJS(type: VerifiedDownload) {
src 'https://api.github.com/repos/nodejs/node/zipball/0a604e92e258c5ee2752d763e50721e35053f135'
dest "$temporaryDir/nodejs.zip"
checksum '33c5ba7a5d45644e70d268d8ad3e57df'
}
task unpackNodeJSLib(type: Copy, dependsOn: downloadNodeJS) {

View File

@ -1,22 +1,11 @@
apply plugin: 'base'
task downloadAjaxslt {
task downloadAjaxslt(type: VerifiedDownload) {
def version = '0.8.1'
def versionedArchive = "ajaxslt-${version}.tar.gz"
outputs.file "$temporaryDir/$versionedArchive"
doLast {
download {
src "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ajaxslt/$versionedArchive"
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag true
}
verifyChecksum {
src outputs.files.singleFile
checksum 'c995abe3310a401bb4db7f28a6409756'
}
}
src "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ajaxslt/$versionedArchive"
dest "$temporaryDir/$versionedArchive"
checksum 'c995abe3310a401bb4db7f28a6409756'
}
task unpackAjaxslt(type: Sync, dependsOn: downloadAjaxslt) {

View File

@ -10,25 +10,13 @@ sourceSets.test.java.srcDirs = ['src']
// download and extract "bcel-5.2.jar"
//
task downloadBcel {
ext {
version = '5.2'
}
task downloadBcel(type: VerifiedDownload) {
ext.version = '5.2'
def archive = "bcel-${version}.tar.gz"
outputs.file "$temporaryDir/$archive"
doLast {
download {
src "http://archive.apache.org/dist/jakarta/bcel/binaries/$archive"
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag false // server does not provide ETags
}
verifyChecksum {
src outputs.files.singleFile
checksum '19bffd7f217b0eae415f1ef87af2f0bc'
}
}
src "http://archive.apache.org/dist/jakarta/bcel/binaries/$archive"
dest "$temporaryDir/$archive"
checksum '19bffd7f217b0eae415f1ef87af2f0bc'
useETag false
}
task extractBcel(type: Copy, dependsOn: downloadBcel) {
@ -56,22 +44,11 @@ clean.dependsOn cleanExtractBcel
// download "java-cup-11a.jar"
//
task downloadJavaCup {
task downloadJavaCup(type: VerifiedDownload) {
def archive = 'java-cup-11a.jar'
outputs.file "$projectDir/$archive"
doLast {
download {
src "http://www2.cs.tum.edu/projects/cup/$archive"
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag true
}
verifyChecksum {
src outputs.files.singleFile
checksum '2bda8c40abd0cbc295d3038643d6e4ec'
}
}
src "http://www2.cs.tum.edu/projects/cup/$archive"
dest "$projectDir/$archive"
checksum '2bda8c40abd0cbc295d3038643d6e4ec'
}
task cleanDownloadJavaCup(type: Delete) {
@ -106,24 +83,13 @@ clean.dependsOn cleanCollectJLex
// generate "hello_hash.jar"
//
task downloadOcamlJava {
task downloadOcamlJava(type: VerifiedDownload) {
def version = '2.0-alpha1'
ext.basename = "ocamljava-$version"
def archive = "${basename}.tar.gz"
outputs.file "$temporaryDir/$archive"
doLast {
download {
src "http://www.ocamljava.org/downloads/download.php?version=$version-bin"
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag true
}
verifyChecksum {
src outputs.files.singleFile
checksum '45feec6e3889f5073a39c2c4c84878d1'
}
}
src "http://www.ocamljava.org/downloads/download.php?version=$version-bin"
dest "$temporaryDir/$archive"
checksum '45feec6e3889f5073a39c2c4c84878d1'
}
task unpackOcamlJava(type: Sync, dependsOn: downloadOcamlJava) {

View File

@ -16,39 +16,26 @@ task cloneDroidBench(type: Exec) {
commandLine 'git', 'clone', "--branch=$inputs.properties.branch", '--config=advice.detachedHead=false', '--depth=1', '--quiet', inputs.properties.repository, destDir
}
task downloadAndroidSdk {
task downloadAndroidSdk(type: VerifiedDownload) {
def sdkOs
def sdkChecksum
switch (System.getProperty('os.name')) {
case ~/Linux/:
sdkOs = 'linux'
sdkChecksum = '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0'
checksum '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0'
break
case ~/Mac OS X/:
sdkOs = 'darwin'
sdkChecksum = '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9'
checksum '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9'
break
case ~/Windows.*/:
sdkOs = 'windows'
sdkChecksum = '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2'
checksum '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2'
break
}
def archive = "sdk-tools-$sdkOs-3859397.zip"
outputs.file "$temporaryDir/$archive"
doLast {
download {
src "https://dl.google.com/android/repository/$archive"
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag true
}
verifyChecksum {
src outputs.files.singleFile
algorithm 'SHA-256'
checksum sdkChecksum
}
}
src "https://dl.google.com/android/repository/$archive"
dest "$temporaryDir/$archive"
algorithm 'SHA-256'
}
task unpackAndroidSdk(type: Sync, dependsOn: downloadAndroidSdk) {
@ -86,38 +73,16 @@ task copyAndroidJar(type: Sync, dependsOn: installAndroidPlatforms) {
into temporaryDir
}
task downloadSampleCup {
outputs.file 'data/sample.cup'
doLast {
download {
src 'http://www.cc.gatech.edu/gvu/people/faculty/hudson/java_cup/classes.v0.9e/java_cup/parser.cup'
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag true
}
verifyChecksum {
src outputs.files.singleFile
checksum '76b549e7c6e802b811a374248175ecf4'
}
}
task downloadSampleCup(type: VerifiedDownload) {
src 'http://www.cc.gatech.edu/gvu/people/faculty/hudson/java_cup/classes.v0.9e/java_cup/parser.cup'
dest 'data/sample.cup'
checksum '76b549e7c6e802b811a374248175ecf4'
}
task downloadSampleLex {
outputs.file 'data/sample.lex'
doLast {
download {
src 'https://www.cs.princeton.edu/~appel/modern/java/JLex/current/sample.lex'
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag true
}
verifyChecksum {
src outputs.files.singleFile
checksum 'ae887758b2657981d023a72a165da830'
}
}
task downloadSampleLex(type: VerifiedDownload) {
src 'https://www.cs.princeton.edu/~appel/modern/java/JLex/current/sample.lex'
dest 'data/sample.lex'
checksum 'ae887758b2657981d023a72a165da830'
}
clean.dependsOn cleanCopyDxJar