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 // 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) { task downloadJLex(type: VerifiedDownload) {
src 'http://www.cs.princeton.edu/~appel/modern/java/JLex/current/Main.java' src 'http://www.cs.princeton.edu/~appel/modern/java/JLex/current/Main.java'
checksum 'fe0cff5db3e2f0f5d67a153cf6c783af' checksum 'fe0cff5db3e2f0f5d67a153cf6c783af'
dest file('src/JLex/Main.java') dest 'src/JLex/Main.java'
} }
task cleanDownloadJLex(type: Delete) { task cleanDownloadJLex(type: Delete) {

View File

@ -10,21 +10,10 @@ dependencies {
) )
} }
task downloadNodeJS { task downloadNodeJS(type: VerifiedDownload) {
outputs.file "$temporaryDir/nodejs.zip" src 'https://api.github.com/repos/nodejs/node/zipball/0a604e92e258c5ee2752d763e50721e35053f135'
doLast { dest "$temporaryDir/nodejs.zip"
download { checksum '33c5ba7a5d45644e70d268d8ad3e57df'
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 unpackNodeJSLib(type: Copy, dependsOn: downloadNodeJS) { task unpackNodeJSLib(type: Copy, dependsOn: downloadNodeJS) {

View File

@ -1,22 +1,11 @@
apply plugin: 'base' apply plugin: 'base'
task downloadAjaxslt { task downloadAjaxslt(type: VerifiedDownload) {
def version = '0.8.1' def version = '0.8.1'
def versionedArchive = "ajaxslt-${version}.tar.gz" def versionedArchive = "ajaxslt-${version}.tar.gz"
outputs.file "$temporaryDir/$versionedArchive" src "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ajaxslt/$versionedArchive"
doLast { dest "$temporaryDir/$versionedArchive"
download { checksum 'c995abe3310a401bb4db7f28a6409756'
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'
}
}
} }
task unpackAjaxslt(type: Sync, dependsOn: downloadAjaxslt) { task unpackAjaxslt(type: Sync, dependsOn: downloadAjaxslt) {

View File

@ -10,25 +10,13 @@ sourceSets.test.java.srcDirs = ['src']
// download and extract "bcel-5.2.jar" // download and extract "bcel-5.2.jar"
// //
task downloadBcel { task downloadBcel(type: VerifiedDownload) {
ext { ext.version = '5.2'
version = '5.2'
}
def archive = "bcel-${version}.tar.gz" def archive = "bcel-${version}.tar.gz"
outputs.file "$temporaryDir/$archive" src "http://archive.apache.org/dist/jakarta/bcel/binaries/$archive"
doLast { dest "$temporaryDir/$archive"
download { checksum '19bffd7f217b0eae415f1ef87af2f0bc'
src "http://archive.apache.org/dist/jakarta/bcel/binaries/$archive" useETag false
dest outputs.files.singleFile
overwrite true
onlyIfModified true
useETag false // server does not provide ETags
}
verifyChecksum {
src outputs.files.singleFile
checksum '19bffd7f217b0eae415f1ef87af2f0bc'
}
}
} }
task extractBcel(type: Copy, dependsOn: downloadBcel) { task extractBcel(type: Copy, dependsOn: downloadBcel) {
@ -56,22 +44,11 @@ clean.dependsOn cleanExtractBcel
// download "java-cup-11a.jar" // download "java-cup-11a.jar"
// //
task downloadJavaCup { task downloadJavaCup(type: VerifiedDownload) {
def archive = 'java-cup-11a.jar' def archive = 'java-cup-11a.jar'
outputs.file "$projectDir/$archive" src "http://www2.cs.tum.edu/projects/cup/$archive"
doLast { dest "$projectDir/$archive"
download { checksum '2bda8c40abd0cbc295d3038643d6e4ec'
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'
}
}
} }
task cleanDownloadJavaCup(type: Delete) { task cleanDownloadJavaCup(type: Delete) {
@ -106,24 +83,13 @@ clean.dependsOn cleanCollectJLex
// generate "hello_hash.jar" // generate "hello_hash.jar"
// //
task downloadOcamlJava { task downloadOcamlJava(type: VerifiedDownload) {
def version = '2.0-alpha1' def version = '2.0-alpha1'
ext.basename = "ocamljava-$version" ext.basename = "ocamljava-$version"
def archive = "${basename}.tar.gz" def archive = "${basename}.tar.gz"
outputs.file "$temporaryDir/$archive" src "http://www.ocamljava.org/downloads/download.php?version=$version-bin"
doLast { dest "$temporaryDir/$archive"
download { checksum '45feec6e3889f5073a39c2c4c84878d1'
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'
}
}
} }
task unpackOcamlJava(type: Sync, dependsOn: downloadOcamlJava) { 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 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 sdkOs
def sdkChecksum
switch (System.getProperty('os.name')) { switch (System.getProperty('os.name')) {
case ~/Linux/: case ~/Linux/:
sdkOs = 'linux' sdkOs = 'linux'
sdkChecksum = '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0' checksum '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0'
break break
case ~/Mac OS X/: case ~/Mac OS X/:
sdkOs = 'darwin' sdkOs = 'darwin'
sdkChecksum = '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9' checksum '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9'
break break
case ~/Windows.*/: case ~/Windows.*/:
sdkOs = 'windows' sdkOs = 'windows'
sdkChecksum = '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2' checksum '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2'
break break
} }
def archive = "sdk-tools-$sdkOs-3859397.zip" def archive = "sdk-tools-$sdkOs-3859397.zip"
outputs.file "$temporaryDir/$archive" src "https://dl.google.com/android/repository/$archive"
doLast { dest "$temporaryDir/$archive"
download { algorithm 'SHA-256'
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
}
}
} }
task unpackAndroidSdk(type: Sync, dependsOn: downloadAndroidSdk) { task unpackAndroidSdk(type: Sync, dependsOn: downloadAndroidSdk) {
@ -86,38 +73,16 @@ task copyAndroidJar(type: Sync, dependsOn: installAndroidPlatforms) {
into temporaryDir into temporaryDir
} }
task downloadSampleCup { task downloadSampleCup(type: VerifiedDownload) {
outputs.file 'data/sample.cup' src 'http://www.cc.gatech.edu/gvu/people/faculty/hudson/java_cup/classes.v0.9e/java_cup/parser.cup'
doLast { dest 'data/sample.cup'
download { checksum '76b549e7c6e802b811a374248175ecf4'
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 downloadSampleLex { task downloadSampleLex(type: VerifiedDownload) {
outputs.file 'data/sample.lex' src 'https://www.cs.princeton.edu/~appel/modern/java/JLex/current/sample.lex'
doLast { dest 'data/sample.lex'
download { checksum 'ae887758b2657981d023a72a165da830'
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'
}
}
} }
clean.dependsOn cleanCopyDxJar clean.dependsOn cleanCopyDxJar