diff --git a/.gitignore b/.gitignore index a3093a91..dfe6d6db 100644 Binary files a/.gitignore and b/.gitignore differ diff --git a/build.gradle b/build.gradle index 3ff6b6ed..39d5dd26 100755 --- a/build.gradle +++ b/build.gradle @@ -109,7 +109,7 @@ jar { exclude { new File(file('jGui/src/main/resources'), it.relativePath.pathString).exists() } eachFile { if (getName() == 'LICENSE.txt') { - setName(getFile().getParentFile().getName().split('-')[0] + '-LICENSE.txt') + setName(getFile().getParentFile().getName().split('.jar_')[0] + '-LICENSE.txt') } } } @@ -165,7 +165,7 @@ sourceSets { resources { srcDir 'jGui/src/main/resources' } - refMap = "mixins.replaymod.refmap.json" + ext.refMap = "mixins.replaymod.refmap.json" } integrationTest { compileClasspath += main.runtimeClasspath + main.output diff --git a/gradle/reprod/patches/fernflower/0001-Add-build.gradle.patch b/gradle/reprod/patches/fernflower/0001-Add-build.gradle.patch new file mode 100644 index 00000000..3eeb1920 --- /dev/null +++ b/gradle/reprod/patches/fernflower/0001-Add-build.gradle.patch @@ -0,0 +1,42 @@ +From a1b7d25752424f267f5e9d299babc0403dbf7752 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 19:44:44 +0200 +Subject: [PATCH] Add build.gradle + +--- + build.gradle | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + create mode 100644 build.gradle + +diff --git a/build.gradle b/build.gradle +new file mode 100644 +index 0000000..22fa679 +--- /dev/null ++++ b/build.gradle +@@ -0,0 +1,23 @@ ++apply plugin: 'java' ++ ++sourceCompatibility = 1.8 ++ ++sourceSets { ++ main { ++ java { ++ srcDirs = ['src'] ++ } ++ } ++} ++ ++jar { ++ manifest { ++ attributes 'Main-Class': 'org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler' ++ } ++} ++ ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++} ++ +-- +2.5.5 + diff --git a/gradle/reprod/patches/forgegradle/0001-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/forgegradle/0001-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..ede5d050 --- /dev/null +++ b/gradle/reprod/patches/forgegradle/0001-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,28 @@ +From 21caf62b4f60cce47a5d3b8c939cc7b177904e00 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 19:52:13 +0200 +Subject: [PATCH 1/5] Configure gradle to build reproducible archives + +--- + build.gradle | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 78a2be1..468733e 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -138,6 +138,11 @@ jar { + } + } + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++} ++ + javadoc { + classpath += configurations.compileOnly + +-- +2.5.5 + diff --git a/gradle/reprod/patches/forgegradle/0002-Manually-force-reproducible-archives.patch b/gradle/reprod/patches/forgegradle/0002-Manually-force-reproducible-archives.patch new file mode 100644 index 00000000..3d104f7d --- /dev/null +++ b/gradle/reprod/patches/forgegradle/0002-Manually-force-reproducible-archives.patch @@ -0,0 +1,53 @@ +From 2f3f4c59239b66e4ce09d2bbef39d7ce4eda44e9 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 19:53:46 +0200 +Subject: [PATCH 2/5] Manually force reproducible archives + +For some reason shading one of the libs isn't done in an +reproducible way (produces different jar whenever jar task is run). +--- + build.gradle | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 468733e..91ea99a 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -122,6 +122,10 @@ processResources { + } + } + ++import java.util.jar.JarEntry ++import java.util.jar.JarFile ++import java.util.jar.JarOutputStream ++ + jar { + + configurations.shade.each { dep -> +@@ -136,6 +140,23 @@ jar { + attributes 'group':project.group + attributes 'Implementation-Version': project.version + getGitHash() + } ++ ++ // For some reason using gradle's reproducibleFileOrder and preserveFileTimestamps just isn't enough ++ doLast { ++ File newFile = new File(archivePath.parent, 'tmp-' + archiveName) ++ newFile.withOutputStream { fout -> ++ JarOutputStream out = new JarOutputStream(fout) ++ JarFile jf = new JarFile(archivePath) ++ jf.entries().unique {it.name}.sort {it.name}.each { ++ def copy = new JarEntry(it.name) ++ copy.time = 0 ++ out.putNextEntry(copy) ++ out << jf.getInputStream(it) ++ } ++ out.finish() ++ } ++ newFile.renameTo archivePath ++ } + } + + tasks.withType(AbstractArchiveTask) { +-- +2.5.5 + diff --git a/gradle/reprod/patches/forgegradle/0003-Remove-all-buildscript-dependencies.patch b/gradle/reprod/patches/forgegradle/0003-Remove-all-buildscript-dependencies.patch new file mode 100644 index 00000000..65920ac7 --- /dev/null +++ b/gradle/reprod/patches/forgegradle/0003-Remove-all-buildscript-dependencies.patch @@ -0,0 +1,161 @@ +From a4a52f38bd660caa61531ebecd2d11f764eb3691 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 19:52:46 +0200 +Subject: [PATCH 3/5] Remove all buildscript dependencies + +--- + build.gradle | 130 ----------------------------------------------------------- + 1 file changed, 130 deletions(-) + +diff --git a/build.gradle b/build.gradle +index 91ea99a..8959f8f 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,21 +1,7 @@ +-buildscript { +- repositories { +- maven { +- url "https://plugins.gradle.org/m2/" +- } +- } +- dependencies { +- classpath "com.gradle.publish:plugin-publish-plugin:0.9.1" +- classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0' +- } +-} +- + apply plugin: 'java' + apply plugin: 'idea' + apply plugin: 'eclipse' + apply plugin: 'maven' +-apply plugin: "com.gradle.plugin-publish" +-apply plugin: 'license' + + group = 'net.minecraftforge.gradle' + version = '2.3-SNAPSHOT' +@@ -188,122 +174,6 @@ test { + exclude "**/ExtensionMcpMappingTest*" + } + +-license { +- ext { +- description = 'A Gradle plugin for the creation of Minecraft mods and MinecraftForge plugins.' +- year = '2013' +- fullname = 'Minecraft Forge' +- } +- header rootProject.file('HEADER') +- include '**net/minecraftforge/gradle/**/*.java' +- excludes ([ +- '**net/minecraftforge/gradle/util/ZipFileTree.java', +- '**net/minecraftforge/gradle/util/json/version/*', +- '**net/minecraftforge/gradle/util/patching/Base64.java', +- '**net/minecraftforge/gradle/util/patching/ContextualPatch.java' +- ]) +- ignoreFailures false +- strictCheck true +- mapping { +- java = 'SLASHSTAR_STYLE' +- } +-} +- +-pluginBundle { +- website = 'http://www.gradle.org/' +- vcsUrl = 'https://github.com/MinecraftForge/ForgeGradle' +- description = 'Gradle plugin for all Minecraft mod development needs' +- tags = ['forge', 'minecraft', 'minecraftforge', 'sponge', 'mcp'] +- +- plugins { +- patcher { +- id = 'net.minecraftforge.gradle.patcher' +- displayName = 'Minicraft Patcher Plugin' +- } +- tweakerClient { +- id = 'net.minecraftforge.gradle.tweaker-client' +- displayName = 'Mincraft Client Tweaker Plugin' +- } +- tweakerServer { +- id = 'net.minecraftforge.gradle.tweaker-server' +- displayName = 'Mincraft Server Tweaker Plugin' +- } +- forge { +- id = 'net.minecraftforge.gradle.forge' +- displayName = 'MincraftForge Mod Development Plugin' +- } +- +- launch4j { +- id = 'net.minecraftforge.gradle.launch4j' +- displayName = 'Specialized Launch4J Gradle Plugin' +- } +- } +-} +- +-uploadArchives { +- repositories.mavenDeployer { +- +- dependsOn 'build' +- +- if (project.hasProperty('forgeMavenPass')) +- { +- repository(url: "http://files.minecraftforge.net/maven/manage/upload") { +- authentication(userName: "forge", password: project.getProperty('forgeMavenPass')) +- } +- } +- else +- { +- // local repo folder. Might wanna juset use gradle install if you wanans end it to maven-local +- repository(url: 'file://localhost/' + project.file('repo').getAbsolutePath()) +- } +- +- +- pom { +- groupId = project.group +- version = project.version +- artifactId = project.archivesBaseName +- project { +- name project.archivesBaseName +- packaging 'jar' +- description 'Gradle plugin for Forge' +- url 'https://github.com/MinecraftForge/ForgeGradle' +- +- scm { +- url 'https://github.com/MinecraftForge/ForgeGradle' +- connection 'scm:git:git://github.com/MinecraftForge/ForgeGradle.git' +- developerConnection 'scm:git:git@github.com:MinecraftForge/ForgeGradle.git' +- } +- +- issueManagement { +- system 'github' +- url 'https://github.com/MinecraftForge/ForgeGradle/issues' +- } +- +- licenses { +- license { +- name 'Lesser GNU Public License, Version 2.1' +- url 'https://www.gnu.org/licenses/lgpl-2.1.html' +- distribution 'repo' +- } +- } +- +- developers { +- developer { +- id 'AbrarSyed' +- name 'Abrar Syed' +- roles { role 'developer' } +- } +- developer { +- id 'LexManos' +- name 'Lex Manos' +- roles { role 'developer' } +- } +- } +- } +- } +- } +-} +- + // write out version so its convenient for doc deployment + file('build').mkdirs() + file('build/version.txt').text = version; +-- +2.5.5 + diff --git a/gradle/reprod/patches/forgegradle/0004-Shade-all-the-things-because-we-don-t-include-deps-a.patch b/gradle/reprod/patches/forgegradle/0004-Shade-all-the-things-because-we-don-t-include-deps-a.patch new file mode 100644 index 00000000..5e0806d5 --- /dev/null +++ b/gradle/reprod/patches/forgegradle/0004-Shade-all-the-things-because-we-don-t-include-deps-a.patch @@ -0,0 +1,57 @@ +From 130d406cbe105303f9b14c342f02fc9a20782e32 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 19:54:54 +0200 +Subject: [PATCH 4/5] Shade all the things (because we don't include deps as + maven deps) + +--- + build.gradle | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +diff --git a/build.gradle b/build.gradle +index 8959f8f..0bf7941 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -48,26 +48,26 @@ dependencies { + compile gradleApi() + + // moved to the beginning to be the overrider +- compile 'org.ow2.asm:asm-debug-all:5.1' +- compile 'com.google.guava:guava:18.0' ++ shade 'org.ow2.asm:asm-debug-all:5.1' ++ shade 'com.google.guava:guava:18.0' + +- compile 'net.sf.opencsv:opencsv:2.3' // reading CSVs.. also used by SpecialSource +- compile 'com.cloudbees:diff4j:1.1' // for difing and patching +- compile 'com.github.abrarsyed.jastyle:jAstyle:1.3' // formatting +- compile 'net.sf.trove4j:trove4j:2.1.0' // because its awesome. ++ shade 'net.sf.opencsv:opencsv:2.3' // reading CSVs.. also used by SpecialSource ++ shade 'com.cloudbees:diff4j:1.1' // for difing and patching ++ shade 'com.github.abrarsyed.jastyle:jAstyle:1.3' // formatting ++ shade 'net.sf.trove4j:trove4j:2.1.0' // because its awesome. + +- compile 'com.github.jponge:lzma-java:1.3' // replaces the LZMA binary +- compile 'com.nothome:javaxdelta:2.0.1' // GDIFF implementation for BinPatches +- compile 'com.google.code.gson:gson:2.2.4' // Used instead of Argo for buuilding changelog. +- compile 'com.github.tony19:named-regexp:0.2.3' // 1.7 Named regexp features +- compile 'net.minecraftforge:forgeflower:1.0.342-SNAPSHOT' // Fernflower Forge edition ++ shade 'com.github.jponge:lzma-java:1.3' // replaces the LZMA binary ++ shade 'com.nothome:javaxdelta:2.0.1' // GDIFF implementation for BinPatches ++ shade 'com.google.code.gson:gson:2.2.4' // Used instead of Argo for buuilding changelog. ++ shade 'com.github.tony19:named-regexp:0.2.3' // 1.7 Named regexp features ++ shade 'net.minecraftforge:forgeflower:1.0.342-SNAPSHOT' // Fernflower Forge edition + + shade 'net.md-5:SpecialSource:1.7.4' // deobf and reobs + // compile 'net.md-5:SpecialSource:1.7.4' // when md5 publishes + + // because curse +- compile 'org.apache.httpcomponents:httpclient:4.3.3' +- compile 'org.apache.httpcomponents:httpmime:4.3.3' ++ shade 'org.apache.httpcomponents:httpclient:4.3.3' ++ shade 'org.apache.httpcomponents:httpmime:4.3.3' + + // mcp stuff + shade 'de.oceanlabs.mcp:RetroGuard:3.6.6' +-- +2.5.5 + diff --git a/gradle/reprod/patches/forgegradle/0005-Add-witness-plugin.patch b/gradle/reprod/patches/forgegradle/0005-Add-witness-plugin.patch new file mode 100644 index 00000000..d3f45939 --- /dev/null +++ b/gradle/reprod/patches/forgegradle/0005-Add-witness-plugin.patch @@ -0,0 +1,90 @@ +From ffd1f38113d2ec550ae23be13df35c678bea5543 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 19:53:15 +0200 +Subject: [PATCH 5/5] Add witness plugin + +--- + build.gradle | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 59 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 0bf7941..d1530fd 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,7 +1,14 @@ ++buildscript { ++ dependencies { ++ classpath files('../gradle-witness.jar') ++ } ++} ++ + apply plugin: 'java' + apply plugin: 'idea' + apply plugin: 'eclipse' + apply plugin: 'maven' ++apply plugin: 'witness' + + group = 'net.minecraftforge.gradle' + version = '2.3-SNAPSHOT' +@@ -81,6 +88,58 @@ dependencies { + testCompile 'junit:junit:4.12' + } + ++dependencyVerification { ++ includedConfigurations += [configurations.shade, configurations.testCompile] ++ verify = [ ++ 'org.ow2.asm:asm-debug-all:5.1:f7ac3f642c36c406543bb56ae3db3a53f263f71bd857b04709986e2d5798c8c4', ++ 'net.sf.opencsv:opencsv:2.3:dc0ba5bff6140dc92339973026a0ecbddc2a3b01bdd46ed9d16becc2f6d78de6', ++ 'com.cloudbees:diff4j:1.1:e6509db2167c983d254d3530c66a060443e91a6ca38df9fdc4ef2a88ad813fa5', ++ 'com.github.abrarsyed.jastyle:jAstyle:1.3:4cad4ee2f1c379fa1f6496912fe026d8a4f2febf0a140ff867206b00a22f988f', ++ 'net.sf.trove4j:trove4j:2.1.0:294fb88c272598b9a5dcae15f13d228e64134256de941fbc28917a994beeb075', ++ 'com.github.jponge:lzma-java:1.3:75ccc0e24d37ed5b8916e1bcffad1e067c2b1cfa21b635287f968db5c3c1963a', ++ 'com.nothome:javaxdelta:2.0.1:a661dfcb749053fc26eada2a0a8e619a8ead1ca9eda29e1698687aa2cdd80152', ++ 'com.google.code.gson:gson:2.2.4:c0328cd07ca9e363a5acd00c1cf4afe8cf554bd6d373834981ba05cebec687fb', ++ 'com.github.tony19:named-regexp:0.2.3:c6ebd74cd6108b8c372c95b842725ee5bd6d3303ba26cb00f18bc92f80b47956', ++ 'net.minecraftforge:forgeflower:1.0.342-SNAPSHOT:ad7e63b8732da2c10d5923cc567386b8f172848259c3c2627298e6cd702df938', ++ 'net.md-5:SpecialSource:1.7.4:b47c5d5810643426a3147ddb2195ef2ab67c80b167e7c2ac64a5d0dee8c030dd', ++ 'org.apache.httpcomponents:httpclient:4.3.3:9844cc9b5440d65a88d28bcba9d771374d2dfdab898848cda164611091633013', ++ 'org.apache.httpcomponents:httpmime:4.3.3:61434dbb2314cbb8d28025feb6ae53bbc45d1042daa34371d8911e1e7f570b36', ++ 'de.oceanlabs.mcp:RetroGuard:3.6.6:22c45060f350fcaa94e503f4a420cf8237c26c0fcdb4ada4aa98389b75c7b231', ++ 'de.oceanlabs.mcp:mcinjector:3.4-SNAPSHOT:4ad11e0943fb343225dace0000215113c8cbdede6949fa8ba653bdcf770cb028', ++ 'net.minecraftforge.srg2source:Srg2Source:4.0-SNAPSHOT:99893440fe20bafc8193a790889239d4cc60dbe8b8be1e7698a31eaa3853e2fd', ++ 'org.jvnet.localizer:localizer:1.12:212f6eaa0491dd7359dc33c3a72e82a23b096e1890d984b4d92395abc9a6bf7f', ++ 'commons-io:commons-io:1.4:a7f713593007813bf07d19bd1df9f81c86c0719e9a0bb2ef1b98b78313fc940d', ++ 'trove:trove:1.0.2:ad68a86cfd0255a2bc0525ce11ec49640caea7e34ff91eb89c3193dcccd77f05', ++ 'net.sf.jopt-simple:jopt-simple:5.0.1:9f0c8d50fa4b79b6ff1502dbec8502179d6b9497cacbe17a13074001aed537ec', ++ 'org.apache.httpcomponents:httpcore:4.3.2:abd02320e2356f89d054dae4cf02306bef20a9cf7865b3ac94ec7552b4f1528b', ++ 'commons-logging:commons-logging:1.1.3:70903f6fc82e9908c8da9f20443f61d90f0870a312642991fe8462a0b9391784', ++ 'commons-codec:commons-codec:1.6:54b34e941b8e1414bd3e40d736efd3481772dc26db3296f6aa45cec9f6203d86', ++ 'org.eclipse.equinox:common:3.6.200-v20130402-1505:843414d0e457898b1615e4c9118f86ae0cf30dd5166b8b0a1d206fbdab5fbbae', ++ 'org.eclipse.text:org.eclipse.text:3.5.101:1bacf311ac3d39cc53b03f8de7a4ccffc89c208938f0004a90c652383e927f18', ++ 'org.eclipse.core:resources:3.2.1-R32x_v20060914:73f9a1a2403f7f9c44d11431c40be4641295f3620570bfef2168a66c5de68fee', ++ 'org.eclipse.jdt:org.eclipse.jdt.core:3.12.0.v20160315-2126:2082ffb0bb8f276ca164a6363e394f902163a81b7df44ede13aed33d84fdf27e', ++ 'fr.inria.gforge.spoon:spoon-core:5.1.0:08e0b3db3d116301f16142c88932daf954ac447427d609710c2a5ee8dfcfa1f7', ++ 'org.eclipse.equinox:registry:3.5.400-v20140428-1507:a6833a81795978d4ad8d2e54597171e2a3447fd6983b8e902710aa1dc946fa24', ++ 'org.eclipse.equinox:app:1.3.200-v20130910-1609:7b2ad6c43d922f3ba0d18d99879d1d56d6a994ba7b639d5d6276f1a167b6a7ac', ++ 'org.eclipse.core:org.eclipse.core.commands:3.6.0:e46a6444a6d7c0fe70f196ce42d9700c4514b68bf55bae296b2e3c287883ffdc', ++ 'org.eclipse.equinox:org.eclipse.equinox.common:3.6.0:32b046de57df2f4887fc5a2c343740d9d12c7fe17541e2cede73cfa4ccbc2436', ++ 'org.eclipse.core.runtime:compatibility:3.1.200-v20070502:ddf19054374a2617ba9c10d7a5ec8eeaeb8f62c2c6e430144e81da15718bb585', ++ 'org.eclipse.core:expressions:3.3.0-v20070606-0010:4a73a4a0ebf5ca5f7e9d5e8978b24cd72ebacd5b561de961517f4c976aa7e30f', ++ 'org.eclipse.core:filesystem:1.1.0-v20070606:b418d15acf94545248f4bd55b4a9b62fc49246488758729d6b3ff52ae149df24', ++ 'com.martiansoftware:jsap:2.1:331746fa62cfbc3368260c5a2e660936ad11be612308c120a044e120361d474e', ++ 'log4j:log4j:1.2.17:1d31696445697720527091754369082a6651bd49781b6005deb94e56753406f9', ++ 'org.eclipse.update:configurator:3.2.100-v20070615:88b506fa09a810b19517a2d45cb8f5eaa76c22b18abfbdcf36cd07aebfd56cb0', ++ 'com.google.guava:guava:19.0:58d4cc2e05ebb012bbac568b032f75623be1cb6fb096f3c60c72a86f7f057de4', ++ 'org.eclipse:osgi:3.10.0-v20140606-1445:fa1d59411d4d2667d8f15638af7c0ac44539234c0982c27a2b65ba06c32a0b3e', ++ 'org.eclipse.core:jobs:3.6.0-v20140424-0053:ef971ecb154fba0cc06d913448640fb2e5ab3f9079c1c7854385d1c30d81a94f', ++ 'org.eclipse.equinox:preferences:3.5.200-v20140224-1527:6498d32ab6503b49a44e0a0bfe1c2ac28ffb7e8f88acbdb4dda89d73092d8ca7', ++ 'org.eclipse.core:contenttype:3.4.200-v20140207-1251:4dd6ec1376693bd8ac4e2ceacc7be70880920978f3fef31db4968e6ade001c87', ++ 'org.eclipse.core:runtime:3.10.0-v20140318-2214:363ad8af4d8fc7f208b6fa640e490c7ba84b2aa78c26809e569bb1b0737ce9cb', ++ 'junit:junit:4.12:59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a', ++ 'org.hamcrest:hamcrest-core:1.3:66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9', ++ ] ++} ++ + task wrapper(type: Wrapper) { + gradleVersion = '2.14' + } +-- +2.5.5 + diff --git a/gradle/reprod/patches/gradle-witness/0001-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/gradle-witness/0001-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..3548dc79 --- /dev/null +++ b/gradle/reprod/patches/gradle-witness/0001-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,25 @@ +From e6caf7be3f8b7fbe6be79449b30a93c8a362997f Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 20:00:16 +0200 +Subject: [PATCH] Configure gradle to build reproducible archives + +--- + build.gradle | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 988a3bf..b75571c 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -8,3 +8,8 @@ dependencies { + sourceCompatibility = '1.7' + targetCompatibility = '1.7' + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++} ++ +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixin/0001-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/mixin/0001-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..8ef12d23 --- /dev/null +++ b/gradle/reprod/patches/mixin/0001-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,28 @@ +From e60dd702c247692529a7cece94a475650623482e Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 19:05:14 +0200 +Subject: [PATCH 1/7] Configure gradle to build reproducible archives + +--- + build.gradle | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 4f0aa28..e0c46ea 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -170,6 +170,11 @@ processResources { + from 'LICENSE.txt' + } + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++} ++ + // License header formatting + license { + ext { +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixin/0002-Remove-replace-all-buildscript-dependencies.patch b/gradle/reprod/patches/mixin/0002-Remove-replace-all-buildscript-dependencies.patch new file mode 100644 index 00000000..bd7244d1 --- /dev/null +++ b/gradle/reprod/patches/mixin/0002-Remove-replace-all-buildscript-dependencies.patch @@ -0,0 +1,59 @@ +From c245b961e83176a1731a7eaf1f1f3ffbefa1afb7 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 19:08:56 +0200 +Subject: [PATCH 2/7] Remove/replace all buildscript dependencies + +--- + build.gradle | 24 +----------------------- + 1 file changed, 1 insertion(+), 23 deletions(-) + +diff --git a/build.gradle b/build.gradle +index e0c46ea..165dbe4 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,17 +1,12 @@ + // Gradle repositories and dependencies + buildscript { +- repositories { +- jcenter() +- } + dependencies { +- classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0' +- classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3' ++ classpath files('../shadow.jar') + } + } + + // Apply plugin + apply plugin: 'java' +-apply plugin: 'license' + apply plugin: 'checkstyle' + apply plugin: 'maven' + apply plugin: 'eclipse' +@@ -175,23 +170,6 @@ tasks.withType(AbstractArchiveTask) { + reproducibleFileOrder = true + } + +-// License header formatting +-license { +- ext { +- name = project.name +- organization = project.organization +- url = project.url +- } +- include '**/*.java' +- header file("HEADER.txt") +- sourceSets = project.sourceSets +- ignoreFailures false +- strictCheck true +- mapping { +- java = 'SLASHSTAR_STYLE' +- } +-} +- + checkstyle { + configProperties = [ + "name" : project.name, +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixin/0003-Fix-for-Gradle-3.patch b/gradle/reprod/patches/mixin/0003-Fix-for-Gradle-3.patch new file mode 100644 index 00000000..0c79a7ed --- /dev/null +++ b/gradle/reprod/patches/mixin/0003-Fix-for-Gradle-3.patch @@ -0,0 +1,25 @@ +From 0f250141ba6515dbeffeb0722bf29976850bb323 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 19:13:17 +0200 +Subject: [PATCH 3/7] Fix for Gradle 3 + +--- + build.gradle | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/build.gradle b/build.gradle +index 165dbe4..0f189ec 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -92,7 +92,7 @@ dependencies { + + // Task to read ASM library and rename packages + task renamedASM { +- outputs.file files(configurations.asm.files.findAll{!it.name.contains("sources")}.collect { file -> ++ outputs.files files(configurations.asm.files.findAll{!it.name.contains("sources")}.collect { file -> + new File(project.repositories['renamed-packages'].dirs[0], "mixin-" + file.name).path + }) + doLast { +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixin/0004-Disable-checkstyle.patch b/gradle/reprod/patches/mixin/0004-Disable-checkstyle.patch new file mode 100644 index 00000000..7bd3f932 --- /dev/null +++ b/gradle/reprod/patches/mixin/0004-Disable-checkstyle.patch @@ -0,0 +1,42 @@ +From eb4fa04cf82067b20caa7222c154f8b6f7ab95ac Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 19:13:45 +0200 +Subject: [PATCH 4/7] Disable checkstyle + +--- + build.gradle | 12 ------------ + 1 file changed, 12 deletions(-) + +diff --git a/build.gradle b/build.gradle +index 0f189ec..f8598a3 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -7,7 +7,6 @@ buildscript { + + // Apply plugin + apply plugin: 'java' +-apply plugin: 'checkstyle' + apply plugin: 'maven' + apply plugin: 'eclipse' + apply plugin: 'idea' +@@ -170,17 +169,6 @@ tasks.withType(AbstractArchiveTask) { + reproducibleFileOrder = true + } + +-checkstyle { +- configProperties = [ +- "name" : project.name, +- "organization": project.organization, +- "url" : project.url, +- "year" : project.inceptionYear +- ] +- configFile = file("checkstyle.xml") +- toolVersion = '6.19' +-} +- + // Source compiler configuration + tasks.withType(JavaCompile) { + options.compilerArgs += ['-Xlint:all', '-Xlint:-path'] +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixin/0005-Replace-fernflower-SNAPSHOT-depencency.patch b/gradle/reprod/patches/mixin/0005-Replace-fernflower-SNAPSHOT-depencency.patch new file mode 100644 index 00000000..c78662d2 --- /dev/null +++ b/gradle/reprod/patches/mixin/0005-Replace-fernflower-SNAPSHOT-depencency.patch @@ -0,0 +1,27 @@ +From c66ba83e4b27f6f094c2dcdaaac095d3ca69b41c Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 19:35:08 +0200 +Subject: [PATCH 5/7] Replace fernflower SNAPSHOT depencency + +--- + build.gradle | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/build.gradle b/build.gradle +index f8598a3..e9a965b 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -143,8 +143,8 @@ dependencies { + fernflowerCompile 'commons-io:commons-io:2.4' + fernflowerCompile 'org.apache.logging.log4j:log4j-core:2.0-beta9' + fernflowerCompile 'com.google.guava:guava:17.0' +- fernflowerCompile 'org.jetbrains.java.decompiler:fernflower:sponge-SNAPSHOT' +- compile 'org.jetbrains.java.decompiler:fernflower:sponge-SNAPSHOT' ++ fernflowerCompile files('../fernflower.jar') ++ compile files('../fernflower.jar') + + compile('net.minecraft:launchwrapper:1.11') { + exclude module: 'lwjgl' +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixin/0006-Use-TreeMap-in-ReferenceMapper-for-reproducibility.patch b/gradle/reprod/patches/mixin/0006-Use-TreeMap-in-ReferenceMapper-for-reproducibility.patch new file mode 100644 index 00000000..07bbca64 --- /dev/null +++ b/gradle/reprod/patches/mixin/0006-Use-TreeMap-in-ReferenceMapper-for-reproducibility.patch @@ -0,0 +1,56 @@ +From 6422d5985faeff394237a499e5529b765dd46b7e Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 21:40:59 +0200 +Subject: [PATCH 6/7] Use TreeMap in ReferenceMapper for reproducibility + +--- + .../java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/src/main/java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java b/src/main/java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java +index 2a368e7..082b5dd 100644 +--- a/src/main/java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java ++++ b/src/main/java/org/spongepowered/asm/mixin/refmap/ReferenceMapper.java +@@ -29,7 +29,6 @@ import java.io.InputStream; + import java.io.InputStreamReader; + import java.io.Reader; + import java.io.Serializable; +-import java.util.HashMap; + import java.util.Map; + + import org.apache.logging.log4j.LogManager; +@@ -71,13 +70,13 @@ public final class ReferenceMapper implements Serializable { + * by the AP. Each entry is keyed by the owning mixin, with the value map + * containing the actual remappings for each owner + */ +- private final Map> mappings = Maps.newHashMap(); ++ private final Map> mappings = Maps.newTreeMap(); + + /** + * All mapping sets, keyed by environment type, eg. "notch", "searge". The + * format of each map within this map is the same as for {@link #mappings} + */ +- private final Map>> data = Maps.newHashMap(); ++ private final Map>> data = Maps.newTreeMap(); + + /** + * True if this refmap cannot be written. Only true for the +@@ -191,13 +190,13 @@ public final class ReferenceMapper implements Serializable { + if (context != null) { + mappings = this.data.get(context); + if (mappings == null) { +- mappings = Maps.newHashMap(); ++ mappings = Maps.newTreeMap(); + this.data.put(context, mappings); + } + } + Map classMappings = mappings.get(className); + if (classMappings == null) { +- classMappings = new HashMap(); ++ classMappings = Maps.newTreeMap(); + mappings.put(className, classMappings); + } + return classMappings.put(reference, newReference); +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixin/0007-Add-witness-plugin.patch b/gradle/reprod/patches/mixin/0007-Add-witness-plugin.patch new file mode 100644 index 00000000..28d18a24 --- /dev/null +++ b/gradle/reprod/patches/mixin/0007-Add-witness-plugin.patch @@ -0,0 +1,71 @@ +From 6a90175bbe1a7cbb9d0eb6bb0bbb27ad451f4587 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 19:20:46 +0200 +Subject: [PATCH 7/7] Add witness plugin + +--- + build.gradle | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +diff --git a/build.gradle b/build.gradle +index e9a965b..737be9e 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -2,6 +2,7 @@ + buildscript { + dependencies { + classpath files('../shadow.jar') ++ classpath files('../gradle-witness.jar') + } + } + +@@ -11,6 +12,7 @@ apply plugin: 'maven' + apply plugin: 'eclipse' + apply plugin: 'idea' + apply plugin: 'com.github.johnrengelman.shadow' ++apply plugin: 'witness' + + // Default tasks + defaultTasks 'licenseFormat', 'check', 'build' +@@ -158,6 +160,38 @@ dependencies { + bridgeCompile 'org.apache.logging.log4j:log4j-core:2.0-beta9' + } + ++dependencyVerification { ++ includedConfigurations += [configurations.asm, configurations.jarjar, configurations.apCompile, configurations.agentCompile, configurations.fernflowerCompile, configurations.bridgeCompile] ++ verify = [ ++ 'com.googlecode.jarjar:jarjar:1.1:4838f4f29a027522363cef1bcda1b48808880b0de4953fab6db4121ee27b649b', ++ 'com.google.guava:guava:17.0:8c36a80ea613d0b6b8040a17cf837c5bbe3677bc1b06a058a6c174fdb787ebbc', ++ 'com.google.code.gson:gson:2.2.4:c0328cd07ca9e363a5acd00c1cf4afe8cf554bd6d373834981ba05cebec687fb', ++ 'commons-io:commons-io:2.4:cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581', ++ 'net.minecraft:launchwrapper:1.11:e74b65b8948446982a506a96176dd8baf4688237ba4903f56ca6f667b6c7ee42', ++ 'org.apache.logging.log4j:log4j-core:2.0-beta9:dcde6033b205433d6e9855c93740f798951fa3a3f252035a768d9f356fde806d', ++ 'org.apache.logging.log4j:log4j-api:2.0-beta9:eb0ca9bdd938f80711152a758d6bc331a8b0d769199d457294dc67ed03f73498', ++ 'net.sf.jopt-simple:jopt-simple:4.5:64335a48be6b142a7d0c13ec5c82a707857aa58c0234e6eda3eaca0e96eea51b', ++ 'org.ow2.asm:asm-debug-all:5.0.3:2969356ac1e40fe4141948c563690238f5d79d76aec7fd873536867a331ede81', ++ 'org.ow2.asm:asm-debug-all:5.0.3-sources:1e9ee309d909b3dbf33291fcfd36c76adba4ed1215b8156c3ac61a774cc86bf1', ++ 'com.googlecode.jarjar:jarjar:1.1:4838f4f29a027522363cef1bcda1b48808880b0de4953fab6db4121ee27b649b', ++ 'com.google.guava:guava:17.0:8c36a80ea613d0b6b8040a17cf837c5bbe3677bc1b06a058a6c174fdb787ebbc', ++ 'net.minecraft:launchwrapper:1.11:e74b65b8948446982a506a96176dd8baf4688237ba4903f56ca6f667b6c7ee42', ++ 'org.apache.logging.log4j:log4j-core:2.0-beta9:dcde6033b205433d6e9855c93740f798951fa3a3f252035a768d9f356fde806d', ++ 'org.ow2.asm:asm-debug-all:5.0.3:2969356ac1e40fe4141948c563690238f5d79d76aec7fd873536867a331ede81', ++ 'org.apache.logging.log4j:log4j-api:2.0-beta9:eb0ca9bdd938f80711152a758d6bc331a8b0d769199d457294dc67ed03f73498', ++ 'net.sf.jopt-simple:jopt-simple:4.5:64335a48be6b142a7d0c13ec5c82a707857aa58c0234e6eda3eaca0e96eea51b', ++ 'commons-io:commons-io:2.4:cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581', ++ 'org.apache.logging.log4j:log4j-core:2.0-beta9:dcde6033b205433d6e9855c93740f798951fa3a3f252035a768d9f356fde806d', ++ 'com.google.guava:guava:17.0:8c36a80ea613d0b6b8040a17cf837c5bbe3677bc1b06a058a6c174fdb787ebbc', ++ 'org.apache.logging.log4j:log4j-api:2.0-beta9:eb0ca9bdd938f80711152a758d6bc331a8b0d769199d457294dc67ed03f73498', ++ 'org.ow2.asm:asm-commons:5.0.3:18c1e092230233c9d29e46f21943d769bdb48130cc279e4b0e663f423948c2da', ++ 'org.apache.logging.log4j:log4j-core:2.0-beta9:dcde6033b205433d6e9855c93740f798951fa3a3f252035a768d9f356fde806d', ++ 'org.ow2.asm:asm-tree:5.0.3:347a7a9400f9964e87c91d3980e48eebdc8d024bc3b36f7f22189c662853a51c', ++ 'org.apache.logging.log4j:log4j-api:2.0-beta9:eb0ca9bdd938f80711152a758d6bc331a8b0d769199d457294dc67ed03f73498', ++ 'org.ow2.asm:asm:5.0.3:71c4f78e437b8fdcd9cc0dfd2abea8c089eb677005a6a5cff320206cc52b46cc', ++ ] ++} ++ + // Filter, process, and include resources + processResources { + // Include in final JAR +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixingradle/0001-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/mixingradle/0001-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..ad6e368a --- /dev/null +++ b/gradle/reprod/patches/mixingradle/0001-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,28 @@ +From 34446d49be65c3a17e962c2e4053ed3e41aa2ab4 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 20:04:25 +0200 +Subject: [PATCH 1/3] Configure gradle to build reproducible archives + +--- + build.gradle | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 3127c7f..c34a8a2 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -71,6 +71,11 @@ task groovydocJar(type: Jar, dependsOn: groovydoc) { + classifier = 'groovydoc' + } + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++} ++ + artifacts { + archives jar + archives groovydocJar +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixingradle/0002-Remove-all-buildscript-dependencies.patch b/gradle/reprod/patches/mixingradle/0002-Remove-all-buildscript-dependencies.patch new file mode 100644 index 00000000..c9c2749e --- /dev/null +++ b/gradle/reprod/patches/mixingradle/0002-Remove-all-buildscript-dependencies.patch @@ -0,0 +1,125 @@ +From f1130f071e67235b27e2bca95584dec25a8dec37 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 20:04:56 +0200 +Subject: [PATCH 2/3] Remove all buildscript dependencies + +--- + build.gradle | 91 ------------------------------------------------------------ + 1 file changed, 91 deletions(-) + +diff --git a/build.gradle b/build.gradle +index c34a8a2..40169df 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,22 +1,6 @@ +-buildscript { +- repositories { +- maven { +- url "https://plugins.gradle.org/m2/" +- } +- } +- dependencies { +- classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0' +- classpath "com.gradle.publish:plugin-publish-plugin:0.9.1" +- } +-} +- + apply plugin: 'groovy' +-apply plugin: 'license' + apply plugin: 'maven' + apply plugin: 'eclipse' +-apply plugin: "com.gradle.plugin-publish" +- +-defaultTasks 'licenseFormat', 'build' + + group = 'org.spongepowered' + version = '0.4-SNAPSHOT' +@@ -43,22 +27,6 @@ processResources { + from 'LICENSE.txt' + } + +-license { +- ext { +- name = project.name +- organization = project.organization +- url = project.url +- } +- include '**/*.groovy' +- header file("HEADER.txt") +- sourceSets = project.sourceSets +- ignoreFailures false +- strictCheck true +- mapping { +- java = 'SLASHSTAR_STYLE' +- } +-} +- + jar.manifest.mainAttributes ( + "Built-By": System.properties['user.name'], + "Created-By": System.properties['java.vm.version'] + " (" + System.properties['java.vm.vendor'] + ")", +@@ -81,62 +49,3 @@ artifacts { + archives groovydocJar + } + +-pluginBundle { +- website = 'http://www.gradle.org/' +- vcsUrl = 'https://github.com/SpongePowered/MixinGradle' +- description = 'Gradle plugin for SpongePowered Mixin' +- tags = ['spongepowered', 'sponge', 'mixin'] +- plugins { +- patcher { +- id = 'org.spongepowered.mixin' +- displayName = 'SpongePowered Mixin Gradle Plugin' +- } +- } +-} +- +-uploadArchives { +- repositories { +- +- mavenDeployer { +- configuration = configurations.deployerJars +- +- if (project.hasProperty("chRepo")) +- { +- repository(url: project.chRepo) { +- authentication(userName: project.chUsername, password: project.chPassword) +- } +- } +- +- pom { +- groupId = project.group +- version = project.version +- artifactId = project.archivesBaseName +- project { +- name project.archivesBaseName +- packaging 'jar' +- description 'MixinGradle' +- url 'http://www.spongepowered.org/' +- +- scm { +- url 'https://github.com/SpongePowered/Mixin' +- connection 'scm:git:git://github.com/SpongePowered/Mixin.git' +- developerConnection 'scm:git:git@github.com:SpongePowered/Mixin.git' +- } +- +- issueManagement { +- system 'GitHub Issues' +- url 'https://github.com/SpongePowered/MixinGradle/issues' +- } +- +- licenses { +- license { +- name 'MIT license' +- url 'http://opensource.org/licenses/MIT' +- distribution 'repo' +- } +- } +- } +- } +- } +- } +-} +-- +2.5.5 + diff --git a/gradle/reprod/patches/mixingradle/0003-Add-witness-plugin.patch b/gradle/reprod/patches/mixingradle/0003-Add-witness-plugin.patch new file mode 100644 index 00000000..94d5b1d8 --- /dev/null +++ b/gradle/reprod/patches/mixingradle/0003-Add-witness-plugin.patch @@ -0,0 +1,44 @@ +From 7c2f6c0d86940142671615402ba758185448e3cf Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 20:05:30 +0200 +Subject: [PATCH 3/3] Add witness plugin + +--- + build.gradle | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 40169df..93f9764 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,6 +1,13 @@ ++buildscript { ++ dependencies { ++ classpath files('../gradle-witness.jar') ++ } ++} ++ + apply plugin: 'groovy' + apply plugin: 'maven' + apply plugin: 'eclipse' ++apply plugin: 'witness' + + group = 'org.spongepowered' + version = '0.4-SNAPSHOT' +@@ -23,6 +30,13 @@ dependencies { + deployerJars 'org.apache.maven.wagon:wagon-ftp:2.7' + } + ++dependencyVerification { ++ verify = [ ++ 'com.google.guava:guava:17.0:8c36a80ea613d0b6b8040a17cf837c5bbe3677bc1b06a058a6c174fdb787ebbc', ++ 'org.ow2.asm:asm-debug-all:5.0.3:2969356ac1e40fe4141948c563690238f5d79d76aec7fd873536867a331ede81', ++ ] ++} ++ + processResources { + from 'LICENSE.txt' + } +-- +2.5.5 + diff --git a/gradle/reprod/patches/replaymod/0001-Replace-buildscript-dependencies-with-manually-built.patch b/gradle/reprod/patches/replaymod/0001-Replace-buildscript-dependencies-with-manually-built.patch new file mode 100644 index 00000000..c7d6dc84 --- /dev/null +++ b/gradle/reprod/patches/replaymod/0001-Replace-buildscript-dependencies-with-manually-built.patch @@ -0,0 +1,43 @@ +From 493dbd8ed387d661eef3e33ee614c79d7487f1bd Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 20:41:05 +0200 +Subject: [PATCH 1/5] Replace buildscript dependencies with manually built ones + +--- + build.gradle | 19 ++----------------- + 1 file changed, 2 insertions(+), 17 deletions(-) + +diff --git a/build.gradle b/build.gradle +index ee24828..42d0607 100755 +--- a/build.gradle ++++ b/build.gradle +@@ -1,24 +1,9 @@ + import groovy.json.JsonOutput + + buildscript { +- repositories { +- mavenCentral() +- maven { +- name = "forge" +- url = "http://files.minecraftforge.net/maven" +- } +- maven { +- name = "sponge" +- url = "https://repo.spongepowered.org/maven" +- } +- maven { +- name = "sonatype" +- url = "https://oss.sonatype.org/content/repositories/snapshots/" +- } +- } + dependencies { +- classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' +- classpath 'org.spongepowered:mixingradle:0.4-SNAPSHOT' ++ classpath files('gradle/reprod/deps/forgegradle.jar') ++ classpath files('gradle/reprod/deps/mixingradle.jar') + } + } + +-- +2.5.5 + diff --git a/gradle/reprod/patches/replaymod/0002-Replace-mixin-dep-with-manually-built-one.patch b/gradle/reprod/patches/replaymod/0002-Replace-mixin-dep-with-manually-built-one.patch new file mode 100644 index 00000000..d9c21ef2 --- /dev/null +++ b/gradle/reprod/patches/replaymod/0002-Replace-mixin-dep-with-manually-built-one.patch @@ -0,0 +1,27 @@ +From 9e4e7ac3f8ee5508939cf71e731189e4c0e1c7b5 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 20:06:39 +0200 +Subject: [PATCH 2/5] Replace mixin dep with manually built one + +--- + build.gradle | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/build.gradle b/build.gradle +index 42d0607..bfa3914 100755 +--- a/build.gradle ++++ b/build.gradle +@@ -41,9 +41,7 @@ configurations { + dependencies { + compile 'org.projectlombok:lombok:1.16.4' + +- compile('org.spongepowered:mixin:0.6.11-SNAPSHOT') { +- exclude group: 'org.apache.logging.log4j' +- } ++ shade files('gradle/reprod/deps/mixin.jar') + shade 'com.googlecode.mp4parser:isoparser:1.1.7' + shade 'org.apache.commons:commons-exec:1.3' + shade 'com.google.apis:google-api-services-youtube:v3-rev178-1.22.0' +-- +2.5.5 + diff --git a/gradle/reprod/patches/replaymod/0003-Add-witness-plugin.patch b/gradle/reprod/patches/replaymod/0003-Add-witness-plugin.patch new file mode 100644 index 00000000..79686aff --- /dev/null +++ b/gradle/reprod/patches/replaymod/0003-Add-witness-plugin.patch @@ -0,0 +1,41 @@ +From 9baa28ace59f2036e93fff379438c2553f02b6a8 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 20:41:46 +0200 +Subject: [PATCH 3/5] Add witness plugin + +--- + build.gradle | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/build.gradle b/build.gradle +index bfa3914..bee78ee 100755 +--- a/build.gradle ++++ b/build.gradle +@@ -4,11 +4,13 @@ buildscript { + dependencies { + classpath files('gradle/reprod/deps/forgegradle.jar') + classpath files('gradle/reprod/deps/mixingradle.jar') ++ classpath files('gradle/reprod/deps/gradle-witness.jar') + } + } + + apply plugin: 'net.minecraftforge.gradle.forge' + apply plugin: 'org.spongepowered.mixin' ++apply plugin: 'witness' + + sourceCompatibility = 1.8 + targetCompatibility = 1.8 +@@ -56,6 +58,10 @@ dependencies { + testCompile 'junit:junit:4.11' + } + ++dependencyVerification { ++ includedConfigurations += [configurations.shade, configurations.testCompile] ++} ++ + tasks['idea'].dependsOn ':ReplayStudio:preshadowJar' + + jar { +-- +2.5.5 + diff --git a/gradle/reprod/patches/replaymod/0004-Add-checksums-for-witness-plugin.patch b/gradle/reprod/patches/replaymod/0004-Add-checksums-for-witness-plugin.patch new file mode 100644 index 00000000..ebc5f586 --- /dev/null +++ b/gradle/reprod/patches/replaymod/0004-Add-checksums-for-witness-plugin.patch @@ -0,0 +1,109 @@ +From cbba1bbb1010408adb5227b5a928ca00cc19699a Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Mon, 7 Aug 2017 20:42:06 +0200 +Subject: [PATCH 4/5] Add checksums for witness plugin + +--- + build.gradle | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 86 insertions(+) + +diff --git a/build.gradle b/build.gradle +index bee78ee..bda297b 100755 +--- a/build.gradle ++++ b/build.gradle +@@ -60,6 +60,92 @@ dependencies { + + dependencyVerification { + includedConfigurations += [configurations.shade, configurations.testCompile] ++ verify = [ ++ 'com.googlecode.mp4parser:isoparser:1.1.7:ddbbf392f8e61f770a509a49aed5f32ead19768283b4b512c626e09e1ba5cc46', ++ 'org.apache.commons:commons-exec:1.3:cb49812dc1bfb0ea4f20f398bcae1a88c6406e213e67f7524fb10d4f8ad9347b', ++ 'com.google.apis:google-api-services-youtube:v3-rev178-1.22.0:88debb16c533600c3b0290a088f2de3b3a8318ff86ebe0bdbcefeab0a0eafb9e', ++ 'com.google.api-client:google-api-client-gson:1.20.0:d68647ba10cfa33e0b6e538c704723229932795d5ee495288cec46a6156c5891', ++ 'com.google.api-client:google-api-client-java6:1.20.0:df4f423f33f467d248e51deb555404771f7bc41430b2d4d1e49966c79c0b207b', ++ 'com.google.oauth-client:google-oauth-client-jetty:1.20.0:daabf9d4e35d4015c2c917982463572856a5c8d7fa718e94edb2b6b114a2a8a2', ++ 'org.aspectj:aspectjrt:1.8.2:c7964f00c3d3889c5223e8fcb7476610c59453c86bccc68ef493a56d171bf655', ++ 'org.apache.commons:commons-lang3:3.3.2:6b81d10754dadf184d386011486e6509c2cc0c3d33565ced4fb4402b9413d47d', ++ 'org.apache.commons:commons-collections4:4.0:93f8dfcd20831a28d092427723f696bceb70b28e7fb89d7914f14d5ea492ce5a', ++ 'commons-cli:commons-cli:1.2:e7cd8951956d349b568b7ccfd4f5b2529a8c113e67c32b028f52ffda371259d9', ++ 'com.google.guava:guava:21.0:972139718abc8a4893fa78cba8cf7b2c903f35c97aaf44fa3031b0669948b480', ++ 'com.google.api-client:google-api-client:1.22.0:47c625c83a8cf97b8bbdff2acde923ff8fd3174e62aabcfc5d1b86692594ffba', ++ 'com.google.http-client:google-http-client-gson:1.20.0:cc144c70d40acf7c6e6f773ac19a2ac6e3ed9830d8e33e32421ff21a91450994', ++ 'com.google.oauth-client:google-oauth-client-java6:1.20.0:3149ae4fa222c7e804c5b7bc0d044702bc6bb8309b5ed94f6d350a5d4d657fc9', ++ 'org.mortbay.jetty:jetty:6.1.26:21091d3a9c1349f640fdc421504a604c040ed89087ecc12afbe32353326ed4e5', ++ 'com.google.code.gson:gson:2.1:35c94198255e95f6f11501eb4b3d43a5276bfdd142ab7c904722e69bff51f69e', ++ 'org.mortbay.jetty:jetty-util:6.1.26:9b974ce2b99f48254b76126337dc45b21226f383aaed616f59780adaf167c047', ++ 'org.mortbay.jetty:servlet-api:2.5-20081211:068756096996fe00f604ac3b6672d6f663dc777ea4a83056e240d0456e77e472', ++ 'com.google.code.findbugs:jsr305:1.3.9:905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed', ++ 'org.apache.httpcomponents:httpclient:4.0.1:752596ebdc7c9ae5d9a655de3bb06d078734679a9de23321dbf284ee44563c03', ++ 'org.apache.httpcomponents:httpcore:4.0.1:3b6bf92affa85d4169a91547ce3c7093ed993b41ad2df80469fc768ad01e6b6b', ++ 'commons-logging:commons-logging:1.1.1:ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f', ++ 'commons-codec:commons-codec:1.3:1bafd2ece2e88db4cdf835a7f8f0de65fab5b1147977a5dcc59b7c1b8c6f5080', ++ 'org.projectlombok:lombok:1.16.6:e0a471be03e1e6b02bf019480cec7a3ac9801702bf7bf62f15d077ad4df8dd5d', ++ 'com.google.http-client:google-http-client-jackson2:1.22.0:45b1e34b2dcef5cb496ef25a1223d19cf102b8c2ea4abf96491631b2faf4611c', ++ 'com.google.guava:guava-jdk5:17.0:59bf456547b6dda3ced968cb56f7f2d3e14474e2de2960a32c47e31c1e456c61', ++ 'com.fasterxml.jackson.core:jackson-core:2.1.3:754184022345800c2d066eceeaf2f7a88a7c2aaeae23eb1c76ef598854aa9157', ++ 'com.google.oauth-client:google-oauth-client:1.22.0:a4c56168b3e042105d68cf136e40e74f6e27f63ed0a948df966b332678e19022', ++ 'com.google.http-client:google-http-client:1.22.0:f88ffa329ac52fb4f2ff0eb877ef7318423ac9b791a107f886ed5c7a00e77e11', ++ 'com.googlecode.mp4parser:isoparser:1.1.7:ddbbf392f8e61f770a509a49aed5f32ead19768283b4b512c626e09e1ba5cc46', ++ 'org.apache.commons:commons-exec:1.3:cb49812dc1bfb0ea4f20f398bcae1a88c6406e213e67f7524fb10d4f8ad9347b', ++ 'com.google.apis:google-api-services-youtube:v3-rev178-1.22.0:88debb16c533600c3b0290a088f2de3b3a8318ff86ebe0bdbcefeab0a0eafb9e', ++ 'com.google.api-client:google-api-client-gson:1.20.0:d68647ba10cfa33e0b6e538c704723229932795d5ee495288cec46a6156c5891', ++ 'com.google.api-client:google-api-client-java6:1.20.0:df4f423f33f467d248e51deb555404771f7bc41430b2d4d1e49966c79c0b207b', ++ 'com.google.oauth-client:google-oauth-client-jetty:1.20.0:daabf9d4e35d4015c2c917982463572856a5c8d7fa718e94edb2b6b114a2a8a2', ++ 'org.aspectj:aspectjrt:1.8.2:c7964f00c3d3889c5223e8fcb7476610c59453c86bccc68ef493a56d171bf655', ++ 'com.google.api-client:google-api-client:1.22.0:47c625c83a8cf97b8bbdff2acde923ff8fd3174e62aabcfc5d1b86692594ffba', ++ 'com.google.http-client:google-http-client-gson:1.20.0:cc144c70d40acf7c6e6f773ac19a2ac6e3ed9830d8e33e32421ff21a91450994', ++ 'com.google.oauth-client:google-oauth-client-java6:1.20.0:3149ae4fa222c7e804c5b7bc0d044702bc6bb8309b5ed94f6d350a5d4d657fc9', ++ 'org.mortbay.jetty:jetty:6.1.26:21091d3a9c1349f640fdc421504a604c040ed89087ecc12afbe32353326ed4e5', ++ 'com.google.code.gson:gson:2.1:35c94198255e95f6f11501eb4b3d43a5276bfdd142ab7c904722e69bff51f69e', ++ 'org.mortbay.jetty:jetty-util:6.1.26:9b974ce2b99f48254b76126337dc45b21226f383aaed616f59780adaf167c047', ++ 'org.mortbay.jetty:servlet-api:2.5-20081211:068756096996fe00f604ac3b6672d6f663dc777ea4a83056e240d0456e77e472', ++ 'com.google.code.findbugs:jsr305:1.3.9:905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed', ++ 'org.apache.httpcomponents:httpclient:4.0.1:752596ebdc7c9ae5d9a655de3bb06d078734679a9de23321dbf284ee44563c03', ++ 'org.apache.httpcomponents:httpcore:4.0.1:3b6bf92affa85d4169a91547ce3c7093ed993b41ad2df80469fc768ad01e6b6b', ++ 'commons-logging:commons-logging:1.1.1:ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f', ++ 'commons-codec:commons-codec:1.3:1bafd2ece2e88db4cdf835a7f8f0de65fab5b1147977a5dcc59b7c1b8c6f5080', ++ 'com.google.http-client:google-http-client-jackson2:1.22.0:45b1e34b2dcef5cb496ef25a1223d19cf102b8c2ea4abf96491631b2faf4611c', ++ 'com.google.guava:guava-jdk5:17.0:59bf456547b6dda3ced968cb56f7f2d3e14474e2de2960a32c47e31c1e456c61', ++ 'com.fasterxml.jackson.core:jackson-core:2.1.3:754184022345800c2d066eceeaf2f7a88a7c2aaeae23eb1c76ef598854aa9157', ++ 'com.google.oauth-client:google-oauth-client:1.22.0:a4c56168b3e042105d68cf136e40e74f6e27f63ed0a948df966b332678e19022', ++ 'com.google.http-client:google-http-client:1.22.0:f88ffa329ac52fb4f2ff0eb877ef7318423ac9b791a107f886ed5c7a00e77e11', ++ 'com.googlecode.mp4parser:isoparser:1.1.7:ddbbf392f8e61f770a509a49aed5f32ead19768283b4b512c626e09e1ba5cc46', ++ 'org.apache.commons:commons-exec:1.3:cb49812dc1bfb0ea4f20f398bcae1a88c6406e213e67f7524fb10d4f8ad9347b', ++ 'com.google.apis:google-api-services-youtube:v3-rev178-1.22.0:88debb16c533600c3b0290a088f2de3b3a8318ff86ebe0bdbcefeab0a0eafb9e', ++ 'com.google.api-client:google-api-client-gson:1.20.0:d68647ba10cfa33e0b6e538c704723229932795d5ee495288cec46a6156c5891', ++ 'com.google.api-client:google-api-client-java6:1.20.0:df4f423f33f467d248e51deb555404771f7bc41430b2d4d1e49966c79c0b207b', ++ 'com.google.oauth-client:google-oauth-client-jetty:1.20.0:daabf9d4e35d4015c2c917982463572856a5c8d7fa718e94edb2b6b114a2a8a2', ++ 'org.aspectj:aspectjrt:1.8.2:c7964f00c3d3889c5223e8fcb7476610c59453c86bccc68ef493a56d171bf655', ++ 'junit:junit:4.11:90a8e1603eeca48e7e879f3afbc9560715322985f39a274f6f6070b43f9d06fe', ++ 'org.apache.commons:commons-lang3:3.3.2:6b81d10754dadf184d386011486e6509c2cc0c3d33565ced4fb4402b9413d47d', ++ 'org.apache.commons:commons-collections4:4.0:93f8dfcd20831a28d092427723f696bceb70b28e7fb89d7914f14d5ea492ce5a', ++ 'commons-cli:commons-cli:1.2:e7cd8951956d349b568b7ccfd4f5b2529a8c113e67c32b028f52ffda371259d9', ++ 'com.google.guava:guava:21.0:972139718abc8a4893fa78cba8cf7b2c903f35c97aaf44fa3031b0669948b480', ++ 'com.google.api-client:google-api-client:1.22.0:47c625c83a8cf97b8bbdff2acde923ff8fd3174e62aabcfc5d1b86692594ffba', ++ 'com.google.http-client:google-http-client-gson:1.20.0:cc144c70d40acf7c6e6f773ac19a2ac6e3ed9830d8e33e32421ff21a91450994', ++ 'com.google.oauth-client:google-oauth-client-java6:1.20.0:3149ae4fa222c7e804c5b7bc0d044702bc6bb8309b5ed94f6d350a5d4d657fc9', ++ 'org.mortbay.jetty:jetty:6.1.26:21091d3a9c1349f640fdc421504a604c040ed89087ecc12afbe32353326ed4e5', ++ 'org.hamcrest:hamcrest-core:1.3:66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9', ++ 'com.google.code.gson:gson:2.1:35c94198255e95f6f11501eb4b3d43a5276bfdd142ab7c904722e69bff51f69e', ++ 'org.mortbay.jetty:jetty-util:6.1.26:9b974ce2b99f48254b76126337dc45b21226f383aaed616f59780adaf167c047', ++ 'org.mortbay.jetty:servlet-api:2.5-20081211:068756096996fe00f604ac3b6672d6f663dc777ea4a83056e240d0456e77e472', ++ 'com.google.code.findbugs:jsr305:1.3.9:905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed', ++ 'org.apache.httpcomponents:httpclient:4.0.1:752596ebdc7c9ae5d9a655de3bb06d078734679a9de23321dbf284ee44563c03', ++ 'org.apache.httpcomponents:httpcore:4.0.1:3b6bf92affa85d4169a91547ce3c7093ed993b41ad2df80469fc768ad01e6b6b', ++ 'commons-logging:commons-logging:1.1.1:ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f', ++ 'commons-codec:commons-codec:1.3:1bafd2ece2e88db4cdf835a7f8f0de65fab5b1147977a5dcc59b7c1b8c6f5080', ++ 'org.projectlombok:lombok:1.16.6:e0a471be03e1e6b02bf019480cec7a3ac9801702bf7bf62f15d077ad4df8dd5d', ++ 'com.google.http-client:google-http-client-jackson2:1.22.0:45b1e34b2dcef5cb496ef25a1223d19cf102b8c2ea4abf96491631b2faf4611c', ++ 'com.google.guava:guava-jdk5:17.0:59bf456547b6dda3ced968cb56f7f2d3e14474e2de2960a32c47e31c1e456c61', ++ 'com.fasterxml.jackson.core:jackson-core:2.1.3:754184022345800c2d066eceeaf2f7a88a7c2aaeae23eb1c76ef598854aa9157', ++ 'com.google.oauth-client:google-oauth-client:1.22.0:a4c56168b3e042105d68cf136e40e74f6e27f63ed0a948df966b332678e19022', ++ 'com.google.http-client:google-http-client:1.22.0:f88ffa329ac52fb4f2ff0eb877ef7318423ac9b791a107f886ed5c7a00e77e11', ++ ] + } + + tasks['idea'].dependsOn ':ReplayStudio:preshadowJar' +-- +2.5.5 + diff --git a/gradle/reprod/patches/replaymod/0005-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/replaymod/0005-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..6bee4a7e --- /dev/null +++ b/gradle/reprod/patches/replaymod/0005-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,28 @@ +From 07de60f9e430063f398bcc86e15397afb8a00413 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Tue, 8 Aug 2017 21:29:01 +0200 +Subject: [PATCH 5/5] Configure gradle to build reproducible archives + +--- + build.gradle | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/build.gradle b/build.gradle +index bda297b..7ed5cfe 100755 +--- a/build.gradle ++++ b/build.gradle +@@ -194,6 +194,11 @@ jar { + } + } + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++} ++ + def gitDescribe() { + try { + def stdout = new ByteArrayOutputStream() +-- +2.5.5 + diff --git a/gradle/reprod/patches/shadow/0001-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/shadow/0001-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..364ec08a --- /dev/null +++ b/gradle/reprod/patches/shadow/0001-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,28 @@ +From 66c234d97042d31771df1c3633e1c7cb662e4882 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +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 + diff --git a/gradle/reprod/patches/shadow/0002-Remove-non-essential-parts-of-build.gradle.patch b/gradle/reprod/patches/shadow/0002-Remove-non-essential-parts-of-build.gradle.patch new file mode 100644 index 00000000..ffd98261 --- /dev/null +++ b/gradle/reprod/patches/shadow/0002-Remove-non-essential-parts-of-build.gradle.patch @@ -0,0 +1,117 @@ +From 8105c498cb064c102197cf13d7efe4ebb1da65a7 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +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 + diff --git a/gradle/reprod/patches/shadow/0003-Add-witness-plugin.patch b/gradle/reprod/patches/shadow/0003-Add-witness-plugin.patch new file mode 100644 index 00000000..5a720606 --- /dev/null +++ b/gradle/reprod/patches/shadow/0003-Add-witness-plugin.patch @@ -0,0 +1,49 @@ +From d06cec4bfa5981965faf2dad510d14e000d61ade Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +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 + diff --git a/gradle/reprod/patches/shadow/0004-Manually-shade-deps.patch b/gradle/reprod/patches/shadow/0004-Manually-shade-deps.patch new file mode 100644 index 00000000..d4656cd9 --- /dev/null +++ b/gradle/reprod/patches/shadow/0004-Manually-shade-deps.patch @@ -0,0 +1,54 @@ +From cfca21accce1fb3fbd32b81fb79f0363dd7b61f4 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +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 + diff --git a/gradle/reprod/setup.sh b/gradle/reprod/setup.sh new file mode 100755 index 00000000..dc61e9ba --- /dev/null +++ b/gradle/reprod/setup.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +set -e +set -x + +cd gradle/reprod + +sha256val () { + sha256sum $1 | cut -d' ' -f1 +} + +setup_dep () { + dep=$1 + url=$2 + commit=$3 + jar=$4 + jarhash=$5 + + [ -f "deps/$dep.jar" ] && [ "$(sha256val "deps/$dep.jar")" == "$jarhash" ] && return + rm -rf "deps/$dep.jar" + + if [ ! -d "deps/$dep" ] || [ "$(git -C "deps/$dep" rev-parse $commit^{commit})" != "$commit" ]; then + rm -rf "deps/$dep" + mkdir -p "deps/$dep" + pushd "deps/$dep" + git clone "$url" . + git fetch origin $commit + git checkout "$commit" + popd + fi + + pushd "deps/$dep" + git reset --hard "$commit" + find ../../patches/$dep/ -name *.patch | sort | xargs -r git am + git reset --soft "$commit" # Because forgegradle includes the commit hash in the jar + + rm -rf gradle/wrapper gradlew + [ ! -d gradle ] && mkdir gradle + cp -r ../../../wrapper gradle/ + cp ../../../wrapper/gradle-wrapper.properties gradle/wrapper/ + cp ../../../../gradlew . + + chmod +x gradlew + ./gradlew build -x test + + actual_hash=$(sha256val "build/libs/$jar") + if [ "$actual_hash" != "$jarhash" ]; then + echo "Failed to verify checksum of build artifact of dependency: $dep" + echo "Expected: $jarhash" + echo "But was: $actual_hash" + exit 1 + fi + + cp "build/libs/$jar" "../$dep.jar" + popd +} + +# Required for all +setup_dep "gradle-witness" "https://github.com/ReplayMod/gradle-witness.git" "c162a15841c2eba54b182fa81733c0aa9227f023" "gradle-witness.jar" "5e9ce687248029bf6364010168a65a4ad66fcb712dbd5ba69c59697ef564964b" + +# Required for mixin +setup_dep "shadow" "https://github.com/johnrengelman/shadow.git" "60d0f28103be076dc991a624bf79ca7a13835973" "shadow.jar" "0a7a280d5f7c58ff513f448537ceb77eda788df6cbdeacd60f63f70142ff39b3" +setup_dep "fernflower" "https://github.com/fesh0r/fernflower.git" "85f61bee8194ab69afa746b965973a18eda67608" "fernflower.jar" "577c2c4e04f0026675cacb25ec525f2ccba5de2eecac525b28bed18f9ccfd790" + +# Required for RM +setup_dep "mixingradle" "https://github.com/SpongePowered/MixinGradle.git" "3d81c8e202ec435056fb2068fdc34cfefa99be2d" "mixingradle-0.4-SNAPSHOT.jar" "a2b23727ed920ef2b9098f55634ede8d2ae5d04d910c0d572e45c33cff1cd281" +setup_dep "forgegradle" "https://github.com/MinecraftForge/ForgeGradle.git" "a228a836a2dc5ce546d2d53c48760f52f082d7ad" "ForgeGradle-2.3-SNAPSHOT.jar" "c885787f66811bf8edf0ced326d20c56428b447e8f0d29f37679f381d3e1f7ff" +setup_dep "mixin" "https://github.com/SpongePowered/Mixin.git" "b558323da3bd6ce94aeb442bfd7357f6c40d2fd4" "mixin-0.6.11-SNAPSHOT.jar" "0563b206db37f2f22b024b1736084afa2f30b0193b1a14e89cf9d99a3db26e1d" + +rm -rf tmp +mkdir tmp +pushd tmp + cp ../../../build.gradle build.gradle + git init + git add build.gradle + git commit -m "Add build.gradle" + git am ../patches/replaymod/*.patch +popd diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index b7612167..5ccda13e 100755 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9f34c5b3..4d183535 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun May 10 21:57:58 CEST 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-2.11-all.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-3.5.1-all.zip +distributionSha256Sum=69d99ade952de3727b65a88f3188ee72231ff4e28c2d00aacfc96a42c6d6f303 diff --git a/gradlew b/gradlew index 91a7e269..34c4fe99 100755 --- a/gradlew +++ b/gradlew @@ -6,6 +6,12 @@ ## ############################################################################## +if [ "$REPRODUCIBLE_BUILD" == "1" ] && [ -f ./gradle/reprod/setup.sh ] && [ "$1" != "-Preprod" ]; then + ./gradle/reprod/setup.sh || exit + ./gradlew -Preprod "$@" + exit +fi + # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS="" @@ -42,11 +48,6 @@ case "`uname`" in ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" @@ -61,9 +62,9 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- +cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" -cd "$SAVED" >&- +cd "$SAVED" >/dev/null CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -114,6 +115,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` diff --git a/gradlew.bat b/gradlew.bat index aec99730..72d362da 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -46,7 +46,7 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args if "%@eval[2+2]" == "4" goto 4NT_args diff --git a/settings.gradle b/settings.gradle index 28830758..bac5accf 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,5 @@ -include 'ReplayStudio' \ No newline at end of file +include 'ReplayStudio' + +if (System.getenv('REPRODUCIBLE_BUILD') == '1') { + rootProject.buildFileName = 'gradle/reprod/tmp/build.gradle' +}