Allow for reproducible builds

REPRODUCIBLE_BUILD=1 ./gradlew clean :build
This commit is contained in:
Jonas Herzig
2017-08-08 20:30:42 +02:00
parent 41d2547f3c
commit ebbe363954
34 changed files with 1553 additions and 13 deletions

View File

@@ -0,0 +1,28 @@
From 66c234d97042d31771df1c3633e1c7cb662e4882 Mon Sep 17 00:00:00 2001
From: Jonas Herzig <me@johni0702.de>
Date: Tue, 8 Aug 2017 19:00:22 +0200
Subject: [PATCH 1/4] Configure gradle to build reproducible archives
---
build.gradle | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/build.gradle b/build.gradle
index 3d2095e..2292a4d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -91,6 +91,11 @@ idea {
}
}
+tasks.withType(AbstractArchiveTask) {
+ preserveFileTimestamps = false
+ reproducibleFileOrder = true
+}
+
sourceCompatibility = '1.6'
targetCompatibility = '1.6'
--
2.5.5

View File

@@ -0,0 +1,117 @@
From 8105c498cb064c102197cf13d7efe4ebb1da65a7 Mon Sep 17 00:00:00 2001
From: Jonas Herzig <me@johni0702.de>
Date: Tue, 8 Aug 2017 18:51:27 +0200
Subject: [PATCH 2/4] Remove non-essential parts of build.gradle
---
build.gradle | 78 ------------------------------------------------------------
1 file changed, 78 deletions(-)
diff --git a/build.gradle b/build.gradle
index 2292a4d..1b06411 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,48 +1,4 @@
-import org.gradle.wrapper.Download
-import org.gradle.wrapper.GradleUserHomeLookup
-import org.gradle.wrapper.Install
-import org.gradle.wrapper.PathAssembler
-import org.gradle.wrapper.WrapperConfiguration
-import org.gradle.wrapper.WrapperExecutor
-import org.gradle.wrapper.Logger
-
-buildscript {
- repositories {
- jcenter()
- maven {
- url "https://plugins.gradle.org/m2/"
- }
- }
- dependencies {
- classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5'
- classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.0"
- classpath "com.gradle.publish:plugin-publish-plugin:0.9.1"
- classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3'
- classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.11'
- classpath 'org.asciidoctor:asciidoctorj-groovy-dsl:1.0.0.preview2'
- classpath "com.bluepapa32:gradle-watch-plugin:0.1.5"
- classpath "org.kordamp.gradle:livereload-gradle-plugin:0.2.1"
- classpath 'org.ajoberstar:gradle-git:1.5.0'
- }
-}
-
-plugins {
- id 'com.gradle.build-scan' version '1.0'
-}
-
-buildScan {
- licenseAgreementUrl = 'https://gradle.com/terms-of-service'
- licenseAgree = 'yes'
-}
-
apply plugin: 'groovy'
-apply plugin: 'idea'
-apply plugin: 'project-report'
-
-apply from: file('gradle/docs.gradle')
-apply from: file('gradle/publish.gradle')
-apply from: file('gradle/asciidoc.gradle')
-apply from: file('gradle/ghPages.gradle')
repositories {
mavenLocal()
@@ -60,24 +16,6 @@ dependencies {
compile 'org.apache.ant:ant:1.9.4'
compile 'org.codehaus.plexus:plexus-utils:2.0.6'
compile 'org.codehaus.groovy:groovy-backports-compat23:2.4.4'
-
-
- testCompile gradleTestKit()
- testCompile("org.spockframework:spock-core:1.0-groovy-2.4") {
- exclude module: 'groovy-all'
- }
- testCompile 'xmlunit:xmlunit:1.3'
- testCompile 'commons-lang:commons-lang:2.6'
- testCompile 'com.google.guava:guava:17.0'
-}
-
-test {
- dependsOn publishToMavenLocal
- if (System.env.CI == 'true') {
- testLogging.showStandardStreams = true
- minHeapSize "1g"
- maxHeapSize "1g"
- }
}
jar {
@@ -85,12 +23,6 @@ jar {
from rootProject.file('NOTICE')
}
-idea {
- project {
- languageLevel = '1.6'
- }
-}
-
tasks.withType(AbstractArchiveTask) {
preserveFileTimestamps = false
reproducibleFileOrder = true
@@ -99,13 +31,3 @@ tasks.withType(AbstractArchiveTask) {
sourceCompatibility = '1.6'
targetCompatibility = '1.6'
-task installWrappers << {
- WrapperExecutor wrapperExecutor = WrapperExecutor.forWrapperPropertiesFile(file('gradle/wrapper/gradle-wrapper.properties'), System.out)
- ['1.12', '2.0', '2.5', '2.11', '2.12', '2.13', '2.14', '3.0'].each {
- WrapperConfiguration config = wrapperExecutor.config
- config.setDistribution(new URI("https://services.gradle.org/distributions/gradle-$it-bin.zip"))
- Install install = new Install(new Logger(true), new Download(new Logger(true), "gradlew", it),
- new PathAssembler(GradleUserHomeLookup.gradleUserHome()))
- install.createDist(config)
- }
-}
--
2.5.5

View File

@@ -0,0 +1,49 @@
From d06cec4bfa5981965faf2dad510d14e000d61ade Mon Sep 17 00:00:00 2001
From: Jonas Herzig <me@johni0702.de>
Date: Tue, 8 Aug 2017 18:53:57 +0200
Subject: [PATCH 3/4] Add witness plugin
---
build.gradle | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/build.gradle b/build.gradle
index 1b06411..a0d350b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,4 +1,11 @@
+buildscript {
+ dependencies {
+ classpath files('../gradle-witness.jar')
+ }
+}
+
apply plugin: 'groovy'
+apply plugin: 'witness'
repositories {
mavenLocal()
@@ -18,6 +25,20 @@ dependencies {
compile 'org.codehaus.groovy:groovy-backports-compat23:2.4.4'
}
+dependencyVerification {
+ verify = [
+ 'org.jdom:jdom2:2.0.5:32ed093f39c46a8d99f801240069478eac93b35f07351c001f2cef4330e97b4a',
+ 'org.ow2.asm:asm:5.0.3:71c4f78e437b8fdcd9cc0dfd2abea8c089eb677005a6a5cff320206cc52b46cc',
+ 'org.ow2.asm:asm-commons:5.0.3:18c1e092230233c9d29e46f21943d769bdb48130cc279e4b0e663f423948c2da',
+ 'commons-io:commons-io:2.4:cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581',
+ 'org.apache.ant:ant:1.9.4:649ae0730251de07b8913f49286d46bba7b92d47c5f332610aa426c4f02161d8',
+ 'org.codehaus.plexus:plexus-utils:2.0.6:8b909f4ca9788647942f883d4e559bcc642123f7c6bcd3846983a2e465469c33',
+ 'org.codehaus.groovy:groovy-backports-compat23:2.4.4:f07694998acb204782c72cc8067b237a04097a2170f07d440614883f14a67630',
+ 'org.ow2.asm:asm-tree:5.0.3:347a7a9400f9964e87c91d3980e48eebdc8d024bc3b36f7f22189c662853a51c',
+ 'org.apache.ant:ant-launcher:1.9.4:7bccea20b41801ca17bcbc909a78c835d0f443f12d639c77bd6ae3d05861608d',
+ ]
+}
+
jar {
from rootProject.file('LICENSE')
from rootProject.file('NOTICE')
--
2.5.5

View File

@@ -0,0 +1,54 @@
From cfca21accce1fb3fbd32b81fb79f0363dd7b61f4 Mon Sep 17 00:00:00 2001
From: Jonas Herzig <me@johni0702.de>
Date: Tue, 8 Aug 2017 19:59:34 +0200
Subject: [PATCH 4/4] Manually shade deps
---
build.gradle | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/build.gradle b/build.gradle
index a0d350b..b12a46d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,17 +12,22 @@ repositories {
jcenter()
}
+configurations {
+ shade
+ compile.extendsFrom shade
+}
+
dependencies {
compile localGroovy()
compile gradleApi()
- compile 'org.jdom:jdom2:2.0.5'
- compile 'org.ow2.asm:asm:5.0.3'
- compile 'org.ow2.asm:asm-commons:5.0.3'
- compile 'commons-io:commons-io:2.4'
- compile 'org.apache.ant:ant:1.9.4'
- compile 'org.codehaus.plexus:plexus-utils:2.0.6'
- compile 'org.codehaus.groovy:groovy-backports-compat23:2.4.4'
+ shade 'org.jdom:jdom2:2.0.5'
+ shade 'org.ow2.asm:asm:5.0.3'
+ shade 'org.ow2.asm:asm-commons:5.0.3'
+ shade 'commons-io:commons-io:2.4'
+ shade 'org.apache.ant:ant:1.9.4'
+ shade 'org.codehaus.plexus:plexus-utils:2.0.6'
+ shade 'org.codehaus.groovy:groovy-backports-compat23:2.4.4'
}
dependencyVerification {
@@ -42,6 +47,7 @@ dependencyVerification {
jar {
from rootProject.file('LICENSE')
from rootProject.file('NOTICE')
+ from (files(configurations.shade).collect {it.isDirectory() ? filesTree(it) : zipTree(it)})
}
tasks.withType(AbstractArchiveTask) {
--
2.5.5