diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle new file mode 100644 index 0000000000..2f036797bc --- /dev/null +++ b/buildSrc/build.gradle @@ -0,0 +1,7 @@ +repositories { + mavenCentral() +} + +dependencies { + compile "com.google.guava:guava:19.0" +} diff --git a/buildSrc/src/main/groovy/CanonicalizerPlugin.groovy b/buildSrc/src/main/groovy/CanonicalizerPlugin.groovy new file mode 100644 index 0000000000..6b6b87b483 --- /dev/null +++ b/buildSrc/src/main/groovy/CanonicalizerPlugin.groovy @@ -0,0 +1,52 @@ +import com.google.common.io.ByteStreams +import org.gradle.api.* +import java.util.zip.ZipEntry +import java.util.zip.ZipFile +import java.util.zip.ZipOutputStream +import java.nio.file.Files +import java.nio.file.attribute.FileTime +import java.nio.file.Paths +import java.nio.file.StandardCopyOption + +// Custom Gradle plugin that attempts to make the resulting jar file deterministic. +// Ie. same contract definition should result when compiled in same jar file. +// This is done by removing date time stamps from the files inside the jar. +class CanonicalizerPlugin implements Plugin { + void apply(Project project) { + + project.getTasks().getByName('jar').doLast() { + + def zipPath = (String) project.jar.archivePath + def destPath = Files.createTempFile("processzip", null) + + def zeroTime = FileTime.fromMillis(0) + + def input = new ZipFile(zipPath) + def entries = input.entries().toList().sort { it.name } + + def output = new ZipOutputStream(new FileOutputStream(destPath.toFile())) + output.setMethod(ZipOutputStream.DEFLATED) + + entries.each { + def newEntry = new ZipEntry( it.name ) + + newEntry.setLastModifiedTime(zeroTime) + newEntry.setCreationTime(zeroTime) + newEntry.compressedSize = -1 + newEntry.size = it.size + newEntry.crc = it.crc + + output.putNextEntry(newEntry) + + ByteStreams.copy(input.getInputStream(it), output) + + output.closeEntry() + } + output.close() + input.close() + + Files.move(destPath, Paths.get(zipPath), StandardCopyOption.REPLACE_EXISTING) + } + + } +} diff --git a/contracts/build.gradle b/contracts/build.gradle index 3cbe693a47..05d7bee07d 100644 --- a/contracts/build.gradle +++ b/contracts/build.gradle @@ -1,68 +1,4 @@ -import com.google.common.io.ByteStreams - -import java.nio.file.Files -import java.nio.file.Paths -import java.nio.file.StandardCopyOption -import java.nio.file.attribute.FileTime -import java.util.zip.ZipEntry -import java.util.zip.ZipFile -import java.util.zip.ZipOutputStream - -buildscript { - repositories { - mavenCentral() - } - - dependencies { - classpath "com.google.guava:guava:19.0" - } -} - -// Custom Gradle plugin that attempts to make the resulting jar file deterministic. -// Ie. same contract definition should result when compiled in same jar file. -// This is done by removing date time stamps from the files inside the jar. -class CanonicalizerPlugin implements Plugin { - void apply(Project project) { - - project.getTasks().getByName('jar').doLast() { - - def zipPath = (String) project.jar.archivePath - def destPath = Files.createTempFile("processzip", null) - - def zeroTime = FileTime.fromMillis(0) - - def input = new ZipFile(zipPath) - def entries = input.entries().toList().sort { it.name } - - def output = new ZipOutputStream(new FileOutputStream(destPath.toFile())) - output.setMethod(ZipOutputStream.DEFLATED) - - entries.each { - def newEntry = new ZipEntry(it.name) - - newEntry.setLastModifiedTime(zeroTime) - newEntry.setCreationTime(zeroTime) - newEntry.compressedSize = -1 - newEntry.size = it.size - newEntry.crc = it.crc - - output.putNextEntry(newEntry) - - ByteStreams.copy(input.getInputStream(it), output) - - output.closeEntry() - } - output.close() - input.close() - - Files.move(destPath, Paths.get(zipPath), StandardCopyOption.REPLACE_EXISTING) - } - - } -} - apply plugin: 'kotlin' - apply plugin: CanonicalizerPlugin repositories { @@ -87,4 +23,4 @@ sourceSets { srcDir "../config/test" } } -} \ No newline at end of file +} diff --git a/contracts/isolated/build.gradle b/contracts/isolated/build.gradle index 480fc6df48..7e5dd359fa 100644 --- a/contracts/isolated/build.gradle +++ b/contracts/isolated/build.gradle @@ -1,68 +1,4 @@ -import com.google.common.io.ByteStreams - -import java.nio.file.Files -import java.nio.file.Paths -import java.nio.file.StandardCopyOption -import java.nio.file.attribute.FileTime -import java.util.zip.ZipEntry -import java.util.zip.ZipFile -import java.util.zip.ZipOutputStream - -buildscript { - repositories { - mavenCentral() - } - - dependencies { - classpath "com.google.guava:guava:19.0" - } -} - -// Custom Gradle plugin that attempts to make the resulting jar file deterministic. -// Ie. same contract definition should result when compiled in same jar file. -// This is done by removing date time stamps from the files inside the jar. -class CanonicalizerPlugin implements Plugin { - void apply(Project project) { - - project.getTasks().getByName('jar').doLast() { - - def zipPath = (String) project.jar.archivePath - def destPath = Files.createTempFile("processzip", null) - - def zeroTime = FileTime.fromMillis(0) - - def input = new ZipFile(zipPath) - def entries = input.entries().toList().sort { it.name } - - def output = new ZipOutputStream(new FileOutputStream(destPath.toFile())) - output.setMethod(ZipOutputStream.DEFLATED) - - entries.each { - def newEntry = new ZipEntry( it.name ) - - newEntry.setLastModifiedTime(zeroTime) - newEntry.setCreationTime(zeroTime) - newEntry.compressedSize = -1 - newEntry.size = it.size - newEntry.crc = it.crc - - output.putNextEntry(newEntry) - - ByteStreams.copy(input.getInputStream(it), output) - - output.closeEntry() - } - output.close() - input.close() - - Files.move(destPath, Paths.get(zipPath), StandardCopyOption.REPLACE_EXISTING) - } - - } -} - apply plugin: 'kotlin' - apply plugin: CanonicalizerPlugin repositories { @@ -85,4 +21,4 @@ sourceSets { srcDir "../../config/test" } } -} \ No newline at end of file +}