From 95fc9a524835533a397e7bf812cde16105e9753e Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sat, 26 Aug 2017 18:38:06 +0200 Subject: [PATCH] Build FG SNAPSHOT deps manually --- ...radle-to-build-reproducible-archives.patch | 28 ++++ ...ace-plugins-with-manually-built-ones.patch | 28 ++++ ...APSHOT-deps-with-manually-built-ones.patch | 86 +++++++++++ ...radle-to-build-reproducible-archives.patch | 30 ++++ ...-non-essential-parts-of-build.gradle.patch | 79 ++++++++++ ...-Replace-groovy-dep-with-localGroovy.patch | 25 ++++ ...n-essential-parts-and-shade-manually.patch | 127 ++++++++++++++++ ...radle-to-build-reproducible-archives.patch | 30 ++++ ...radle-to-build-reproducible-archives.patch | 30 ++++ ...-non-essential-parts-of-build.gradle.patch | 141 ++++++++++++++++++ .../srg2source/0003-Manually-shade-deps.patch | 25 ++++ gradle/reprod/setup.sh | 25 +++- 12 files changed, 646 insertions(+), 8 deletions(-) create mode 100644 gradle/reprod/patches/forgeflower/0001-Configure-gradle-to-build-reproducible-archives.patch create mode 100644 gradle/reprod/patches/forgeflower/0002-Replace-plugins-with-manually-built-ones.patch create mode 100644 gradle/reprod/patches/forgegradle/0006-Replace-SNAPSHOT-deps-with-manually-built-ones.patch create mode 100644 gradle/reprod/patches/gitpatcher/0001-Configure-gradle-to-build-reproducible-archives.patch create mode 100644 gradle/reprod/patches/gitpatcher/0002-Remove-non-essential-parts-of-build.gradle.patch create mode 100644 gradle/reprod/patches/gitpatcher/0003-Replace-groovy-dep-with-localGroovy.patch create mode 100644 gradle/reprod/patches/mcinjector/0001-Remove-non-essential-parts-and-shade-manually.patch create mode 100644 gradle/reprod/patches/mcinjector/0002-Configure-gradle-to-build-reproducible-archives.patch create mode 100644 gradle/reprod/patches/srg2source/0001-Configure-gradle-to-build-reproducible-archives.patch create mode 100644 gradle/reprod/patches/srg2source/0002-Remove-non-essential-parts-of-build.gradle.patch create mode 100644 gradle/reprod/patches/srg2source/0003-Manually-shade-deps.patch diff --git a/gradle/reprod/patches/forgeflower/0001-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/forgeflower/0001-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..41679570 --- /dev/null +++ b/gradle/reprod/patches/forgeflower/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] Configure gradle to build reproducible archives + +--- + fernflower.gradle | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/fernflower.gradle b/fernflower.gradle +index 78a2be1..468733e 100644 +--- a/fernflower.gradle ++++ b/fernflower.gradle +@@ -12,4 +12,11 @@ compileJava { + } + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++ dirMode = 0775 ++ fileMode = 0664 ++} ++ + sourceSets { + main.java.srcDirs = ['src'] +-- +2.5.5 + diff --git a/gradle/reprod/patches/forgeflower/0002-Replace-plugins-with-manually-built-ones.patch b/gradle/reprod/patches/forgeflower/0002-Replace-plugins-with-manually-built-ones.patch new file mode 100644 index 00000000..0672baf4 --- /dev/null +++ b/gradle/reprod/patches/forgeflower/0002-Replace-plugins-with-manually-built-ones.patch @@ -0,0 +1,28 @@ +From 3c7c6fa56f1b70129c0eb4c178aff3805bc8f03a Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:12:58 +0200 +Subject: [PATCH] Replace plugins with manually built ones + +--- + build.gradle | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/build.gradle b/build.gradle +index da78c2f..6dd1fb4 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,6 +1,9 @@ +-plugins { +- id 'net.minecrell.gitpatcher' version '0.9.0' ++buildscript { ++ dependencies { ++ classpath files('../gitpatcher.jar') ++ } + } ++apply plugin: 'net.minecrell.gitpatcher' + + patches { + submodule = 'FernFlower' +-- +2.5.5 + diff --git a/gradle/reprod/patches/forgegradle/0006-Replace-SNAPSHOT-deps-with-manually-built-ones.patch b/gradle/reprod/patches/forgegradle/0006-Replace-SNAPSHOT-deps-with-manually-built-ones.patch new file mode 100644 index 00000000..65d5b87c --- /dev/null +++ b/gradle/reprod/patches/forgegradle/0006-Replace-SNAPSHOT-deps-with-manually-built-ones.patch @@ -0,0 +1,86 @@ +From 2309fc9515d4010c5d9db89008660e3e60ea529b Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:40:48 +0200 +Subject: [PATCH] Replace SNAPSHOT deps with manually built ones + +--- + build.gradle | 49 +++---------------------------------------------- + 1 file changed, 3 insertions(+), 46 deletions(-) + +diff --git a/build.gradle b/build.gradle +index bfadecd..774a015 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -67,7 +67,7 @@ dependencies { + 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 files('../forgeflower.jar') // 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 +@@ -78,8 +78,8 @@ dependencies { + + // mcp stuff + shade 'de.oceanlabs.mcp:RetroGuard:3.6.6' +- shade 'de.oceanlabs.mcp:mcinjector:3.4-SNAPSHOT' +- shade 'net.minecraftforge.srg2source:Srg2Source:4.0-SNAPSHOT' ++ shade files('../mcinjector.jar') ++ shade files('../srg2source.jar') + + //Stuff used in the GradleStart classes + compileOnly 'com.mojang:authlib:1.5.16' +@@ -91,49 +91,6 @@ dependencies { + 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:6c9134708589bf7ea8300b2c077445a13d02446dcfd24af78240388fde38845e', +- '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', +- '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', +- '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', + ] + } + +-- +2.5.5 + diff --git a/gradle/reprod/patches/gitpatcher/0001-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/gitpatcher/0001-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..34b7ca5c --- /dev/null +++ b/gradle/reprod/patches/gitpatcher/0001-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,30 @@ +From ef56dfff6da10203e6319289b88571e8aa511ae4 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 16:58:15 +0200 +Subject: [PATCH 1/3] Configure gradle to build reproducible archives + +--- + build.gradle | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 9d0e832..bc6d5bb 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -18,6 +18,13 @@ description = 'A Gradle plugin to manage patches for Git repositories' + sourceCompatibility = '1.7' + targetCompatibility = '1.7' + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++ dirMode = 0775 ++ fileMode = 0664 ++} ++ + repositories { + jcenter() + } +-- +2.5.5 + diff --git a/gradle/reprod/patches/gitpatcher/0002-Remove-non-essential-parts-of-build.gradle.patch b/gradle/reprod/patches/gitpatcher/0002-Remove-non-essential-parts-of-build.gradle.patch new file mode 100644 index 00000000..42417bb2 --- /dev/null +++ b/gradle/reprod/patches/gitpatcher/0002-Remove-non-essential-parts-of-build.gradle.patch @@ -0,0 +1,79 @@ +From ff9f001be5beca28f04ec0669a300b9c6d06836c Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:01:51 +0200 +Subject: [PATCH 2/3] Remove non-essential parts of build.gradle + +--- + build.gradle | 52 ---------------------------------------------------- + 1 file changed, 52 deletions(-) + +diff --git a/build.gradle b/build.gradle +index bc6d5bb..07d5ce5 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,14 +1,6 @@ + plugins { + id 'java-gradle-plugin' + id 'groovy' +- +- id 'eclipse' +- id 'idea' +- +- id 'maven-publish' +- id 'com.gradle.plugin-publish' version '0.9.5' +- +- id 'net.minecrell.licenser' version '0.3' + } + + group = 'net.minecrell' +@@ -37,47 +29,3 @@ tasks.withType(GroovyCompile) { + groovyOptions.optimizationOptions.indy = true + } + +-license { +- header = file('LICENSE') +- include '**/*.java' +- include '**/*.groovy' +-} +- +-task sourceJar(type: Jar) { +- classifier = 'sources' +- from sourceSets.main.allSource +-} +- +-publishing { +- publications { +- mavenJava(MavenPublication) { +- from components.java +- +- artifact sourceJar +- +- repositories { +- maven { +- url = System.getenv('REPO_' + (version.endsWith('-SNAPSHOT') ? 'SNAPSHOTS' : 'RELEASES')) ?: "$buildDir/repo" +- } +- } +- } +- } +-} +- +-pluginBundle { +- website = 'https://github.com/Minecrell/gitpatcher' +- vcsUrl = website +- description = project.description +- tags = ['git'] +- +- plugins { +- gitpatcherPlugin { +- id = 'net.minecrell.gitpatcher' +- displayName = 'gitpatcher' +- } +- } +-} +- +-task wrapper(type: Wrapper) { +- gradleVersion = '3.3' +-} +-- +2.5.5 + diff --git a/gradle/reprod/patches/gitpatcher/0003-Replace-groovy-dep-with-localGroovy.patch b/gradle/reprod/patches/gitpatcher/0003-Replace-groovy-dep-with-localGroovy.patch new file mode 100644 index 00000000..9e196b25 --- /dev/null +++ b/gradle/reprod/patches/gitpatcher/0003-Replace-groovy-dep-with-localGroovy.patch @@ -0,0 +1,25 @@ +From b0ca1d31124a2c27f8e29d44cf3f59b1bb1f070e Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:07:06 +0200 +Subject: [PATCH 3/3] Replace groovy dep with localGroovy() + +--- + build.gradle | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/build.gradle b/build.gradle +index 07d5ce5..1515570 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -22,7 +22,7 @@ repositories { + } + + dependencies { +- compileOnly'org.codehaus.groovy:groovy-all:2.4.7:indy' ++ compile localGroovy() + } + + tasks.withType(GroovyCompile) { +-- +2.5.5 + diff --git a/gradle/reprod/patches/mcinjector/0001-Remove-non-essential-parts-and-shade-manually.patch b/gradle/reprod/patches/mcinjector/0001-Remove-non-essential-parts-and-shade-manually.patch new file mode 100644 index 00000000..b84754e6 --- /dev/null +++ b/gradle/reprod/patches/mcinjector/0001-Remove-non-essential-parts-and-shade-manually.patch @@ -0,0 +1,127 @@ +From 85e6315018dd8ff9f613b1f0c4d00c5b0c6c37d6 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:27:06 +0200 +Subject: [PATCH 1/2] Remove non-essential parts and shade manually + +--- + build.gradle | 92 +----------------------------------------------------------- + 1 file changed, 1 insertion(+), 91 deletions(-) + +diff --git a/build.gradle b/build.gradle +index 2e5f949..b6c63bb 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,15 +1,5 @@ +-buildscript { +- repositories { +- mavenCentral() +- } +- dependencies { +- classpath 'eu.appsatori:gradle-fatjar-plugin:0.2-rc1' +- } +-} +- + apply plugin: 'java' + apply plugin: 'eclipse' +-apply plugin: 'fatjar' + apply plugin: 'maven' + + group = 'de.oceanlabs.mcp' +@@ -22,93 +12,13 @@ repositories { + } + + jar { ++ from ({files(configurations.compile).collect {it.isDirectory() ? filesTree(it) : zipTree(it)}}) + manifest.attributes('Main-Class': 'de.oceanlabs.mcp.mcinjector.MCInjector') + } +-fatJar { +- classifier 'fatjar' +- manifest.attributes('Main-Class': 'de.oceanlabs.mcp.mcinjector.MCInjector') +-} +- +-artifacts { +- archives jar +- archives fatJar +-} + + dependencies { + compile 'org.ow2.asm:asm-debug-all:5.0.4' + compile 'net.sf.jopt-simple:jopt-simple:4.5' + compile 'com.google.code.gson:gson:2.2.4' + } +-configurations { deployJars } +-uploadArchives { +- repositories { +- add project.repositories.mavenLocal() +- } +- repositories.mavenDeployer { +- configuration = configurations.deployJars + +- if (project.hasProperty("filesmaven")) { +- logger.info('Publishing to files server') +- repository(url: project.filesmaven.url) { +- authentication(userName: project.filesmaven.username, privateKey: project.filesmaven.key) +- } +- } else { +- logger.info('Publishing to repo folder') +- repository(url: 'file://localhost/' + project.file('repo').getAbsolutePath()) +- } +- +- pom { +- groupId = project.group +- version = project.version +- artifactId = project.archivesBaseName +- } +- pom.project { +- name project.archivesBaseName +- packaging 'jar' +- description 'Java class metadata injector' +- url 'https://github.com/ModCoderPack/MCInjector' +- +- scm { +- url 'https://github.com/ModCoderPack/MCInjector' +- connection 'scm:git:git://github.com/ModCoderPack/MCInjector.git' +- developerConnection 'scm:git:git@github.com:ModCoderPack/MCInjector.git' +- } +- +- issueManagement { +- system 'github' +- url 'https://github.com/ModCoderPack/MCInjector/issues' +- } +- +- licenses { +- license { +- name '' +- url '' +- distribution 'repo' +- } +- } +- +- developers { +- developer { +- id 'Fesh0r' +- name 'Fesh0r' +- roles { role 'developer' } +- } +- developer { +- id 'Searge' +- name 'Searge' +- roles { role 'developer' } +- } +- developer { +- id 'cpw' +- name 'cpw' +- roles { role 'developer' } +- } +- developer { +- id 'LexManos' +- name 'Lex Manos' +- roles { role 'developer' } +- } +- } +- } +- } +-} +-- +2.5.5 + diff --git a/gradle/reprod/patches/mcinjector/0002-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/mcinjector/0002-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..8803cda9 --- /dev/null +++ b/gradle/reprod/patches/mcinjector/0002-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,30 @@ +From e00b13e31dde9e889a177b905db0f384f20eaf05 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:29:13 +0200 +Subject: [PATCH 2/2] Configure gradle to build reproducible archives + +--- + build.gradle | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/build.gradle b/build.gradle +index b6c63bb..da0fdb9 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -16,6 +16,13 @@ jar { + manifest.attributes('Main-Class': 'de.oceanlabs.mcp.mcinjector.MCInjector') + } + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++ dirMode = 0775 ++ fileMode = 0664 ++} ++ + dependencies { + compile 'org.ow2.asm:asm-debug-all:5.0.4' + compile 'net.sf.jopt-simple:jopt-simple:4.5' +-- +2.5.5 + diff --git a/gradle/reprod/patches/srg2source/0001-Configure-gradle-to-build-reproducible-archives.patch b/gradle/reprod/patches/srg2source/0001-Configure-gradle-to-build-reproducible-archives.patch new file mode 100644 index 00000000..f07e1d5d --- /dev/null +++ b/gradle/reprod/patches/srg2source/0001-Configure-gradle-to-build-reproducible-archives.patch @@ -0,0 +1,30 @@ +From 0b256e84ff52a8a83b629cdfd404b4d28d0d8450 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:33:25 +0200 +Subject: [PATCH 1/2] Configure gradle to build reproducible archives + +--- + build.gradle | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/build.gradle b/build.gradle +index 8a9dfbe..fda0b61 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -22,6 +22,13 @@ archivesBaseName = 'Srg2Source' + targetCompatibility = '1.6' + sourceCompatibility = '1.6' + ++tasks.withType(AbstractArchiveTask) { ++ preserveFileTimestamps = false ++ reproducibleFileOrder = true ++ dirMode = 0775 ++ fileMode = 0664 ++} ++ + configurations { + deployerJars + } +-- +2.5.5 + diff --git a/gradle/reprod/patches/srg2source/0002-Remove-non-essential-parts-of-build.gradle.patch b/gradle/reprod/patches/srg2source/0002-Remove-non-essential-parts-of-build.gradle.patch new file mode 100644 index 00000000..b0a09fd1 --- /dev/null +++ b/gradle/reprod/patches/srg2source/0002-Remove-non-essential-parts-of-build.gradle.patch @@ -0,0 +1,141 @@ +From 29d6f245fb91762580540180d4ec6ca4abb18322 Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:35:04 +0200 +Subject: [PATCH 2/2] Remove non-essential parts of build.gradle + +--- + build.gradle | 103 ----------------------------------------------------------- + 1 file changed, 103 deletions(-) + +diff --git a/build.gradle b/build.gradle +index fda0b61..eefeafe 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -1,16 +1,3 @@ +-buildscript { +- repositories { +- mavenCentral() +- maven { +- name = "forge" +- url = "http://files.minecraftforge.net/maven" +- } +- maven { +- name = "eclipse" +- url = "https://repo.eclipse.org/content/groups/eclipse/" +- } +- } +-} + apply plugin: 'java' + apply plugin: 'idea' + apply plugin: 'eclipse' +@@ -29,10 +16,6 @@ tasks.withType(AbstractArchiveTask) { + fileMode = 0664 + } + +-configurations { +- deployerJars +-} +- + dependencies { + testCompile "junit:junit:4.12" + +@@ -56,9 +39,6 @@ dependencies { + + // Potential Eclipse AST replacement (not used yet) + //compile 'fr.inria.gforge.spoon:spoon-core:5.1.0' +- +- // maven deployer jar +- deployerJars "org.apache.maven.wagon:wagon-ssh:2.2" + } + + repositories { +@@ -84,86 +64,3 @@ jar { + exclude 'data/**' + } + +-task javadocJar(type: Jar, dependsOn: javadoc) { +- classifier = 'javadoc' +- from 'build/docs/javadoc' +-} +- +-task sourcesJar(type: Jar) { +- from sourceSets.main.allSource +- classifier = 'sources' +-} +- +-artifacts { +- archives jar +- archives javadocJar +- archives sourcesJar +-} +- +-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 'Srg2Source library for ForgeGradle' +- url 'https://github.com/MinecraftForge/Srg2Source' +- +- scm { +- url 'https://github.com/MinecraftForge/Srg2Source' +- connection 'scm:git:git://github.com/MinecraftForge/Srg2Source.git' +- developerConnection 'scm:git:git@github.com:MinecraftForge/Srg2Source.git' +- } +- +- issueManagement { +- system 'github' +- url 'https://github.com/MinecraftForge/Srg2Source/issues' +- } +- +- licenses { +- license { +- name 'The BSD 3-Clause License' +- url 'http://opensource.org/licenses/BSD-3-Clause' +- distribution 'repo' +- } +- } +- +- developers { +- developer { +- id 'agaricusb' +- name 'Agaricusb' +- roles { role 'developer' } +- } +- developer { +- id 'LexManos' +- name 'Lex Manos' +- roles { role 'developer' } +- } +- developer { +- id 'AbrarSyed' +- name 'Abrar Syed' +- roles { role 'developer' } +- } +- } +- } +- } +- } +-} +-- +2.5.5 + diff --git a/gradle/reprod/patches/srg2source/0003-Manually-shade-deps.patch b/gradle/reprod/patches/srg2source/0003-Manually-shade-deps.patch new file mode 100644 index 00000000..dda26a73 --- /dev/null +++ b/gradle/reprod/patches/srg2source/0003-Manually-shade-deps.patch @@ -0,0 +1,25 @@ +From 7266eb65165cfe18ea21a3c183da4efc37ff54cf Mon Sep 17 00:00:00 2001 +From: Jonas Herzig +Date: Sat, 26 Aug 2017 17:46:46 +0200 +Subject: [PATCH] Manually shade deps + +--- + build.gradle | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/build.gradle b/build.gradle +index eefeafe..368f6be 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -61,6 +61,8 @@ jar { + } + + jar { ++ duplicatesStrategy = DuplicatesStrategy.EXCLUDE ++ from (files(configurations.compile).collect {it.isDirectory() ? filesTree(it) : zipTree(it)}) + exclude 'data/**' + } + +-- +2.5.5 + diff --git a/gradle/reprod/setup.sh b/gradle/reprod/setup.sh index e6db42eb..1bfdb276 100755 --- a/gradle/reprod/setup.sh +++ b/gradle/reprod/setup.sh @@ -32,6 +32,7 @@ setup_dep () { pushd "deps/$dep" git reset --hard "$commit" + git submodule update --init --recursive patches=$(find ../../patches/$dep/ -name *.patch | sort) [ "$patches" != "" ] && echo "$patches" | xargs git am git reset --soft "$commit" # Because forgegradle includes the commit hash in the jar @@ -45,7 +46,7 @@ setup_dep () { chmod +x gradlew ./gradlew build -x test - actual_hash=$(sha256val "build/libs/$jar") + actual_hash=$(sha256val "$jar") if [ "$actual_hash" != "$jarhash" ]; then echo "Failed to verify checksum of build artifact of dependency: $dep" echo "Expected: $jarhash" @@ -53,21 +54,29 @@ setup_dep () { exit 1 fi - cp "build/libs/$jar" "../$dep.jar" + cp "$jar" "../$dep.jar" popd } # Required for all -setup_dep "gradle-witness" "https://github.com/ReplayMod/gradle-witness.git" "c162a15841c2eba54b182fa81733c0aa9227f023" "gradle-witness.jar" "5e9ce687248029bf6364010168a65a4ad66fcb712dbd5ba69c59697ef564964b" +setup_dep "gradle-witness" "https://github.com/ReplayMod/gradle-witness.git" "c162a15841c2eba54b182fa81733c0aa9227f023" "build/libs/gradle-witness.jar" "5e9ce687248029bf6364010168a65a4ad66fcb712dbd5ba69c59697ef564964b" # Required for mixin -setup_dep "shadow" "https://github.com/johnrengelman/shadow.git" "60d0f28103be076dc991a624bf79ca7a13835973" "shadow.jar" "eec0417a8cd44457551c80335cd384a187647b6429ed7b5ae3ce1b26f78a2c1f" -setup_dep "fernflower" "https://github.com/fesh0r/fernflower.git" "85f61bee8194ab69afa746b965973a18eda67608" "fernflower.jar" "577c2c4e04f0026675cacb25ec525f2ccba5de2eecac525b28bed18f9ccfd790" +setup_dep "shadow" "https://github.com/johnrengelman/shadow.git" "60d0f28103be076dc991a624bf79ca7a13835973" "build/libs/shadow.jar" "eec0417a8cd44457551c80335cd384a187647b6429ed7b5ae3ce1b26f78a2c1f" +setup_dep "fernflower" "https://github.com/fesh0r/fernflower.git" "85f61bee8194ab69afa746b965973a18eda67608" "build/libs/fernflower.jar" "577c2c4e04f0026675cacb25ec525f2ccba5de2eecac525b28bed18f9ccfd790" + +# Required for forgeflower +setup_dep "gitpatcher" "https://github.com/Minecrell/gitpatcher.git" "e815821d516bac0da01d579575f895b2a8abefe7" "build/libs/gitpatcher-0.9.0.jar" "95cc738b92b5f37466593880177e236519c9b2f10e3d38f97e36fd3ad3bd4448" + +# Required for forgegradle +setup_dep "forgeflower" "https://github.com/MinecraftForge/ForgeFlower.git" "32a04b9840fb6b10a8e2c178af86e20bdb85e366" "ForgeFlower/build/libs/forgeflower-1.0.342-SNAPSHOT.jar" "4b32e3140decbe39eaf77399f0390fbece6b3a1f3ff3424e4754adefe1c7c932" +setup_dep "mcinjector" "https://github.com/ModCoderPack/MCInjector.git" "7258466461baf7dc4f313b06b0d589407e4e1fba" "build/libs/mcinjector-3.4-SNAPSHOT.jar" "98cd0c13030aa8103585621fdab5db6b74ea0db7b8b30bc74061e7b5d314aa01" +setup_dep "srg2source" "https://github.com/MinecraftForge/Srg2Source.git" "ea4ea624672e8b75fb2a78f0fb9105db13d5a4a6" "build/libs/Srg2Source-4.0-SNAPSHOT.jar" "575e5fa1d6834edb34e0bf1d56ae7237b02b2d87a6e2d30c8605d5287fd2ef53" # Required for RM -setup_dep "mixingradle" "https://github.com/SpongePowered/MixinGradle.git" "3d81c8e202ec435056fb2068fdc34cfefa99be2d" "mixingradle-0.4-SNAPSHOT.jar" "8b3508867128a5d564631635dff898a36f9aca8db54b7bb3af6f4924e3f4bead" -setup_dep "forgegradle" "https://github.com/MinecraftForge/ForgeGradle.git" "a228a836a2dc5ce546d2d53c48760f52f082d7ad" "ForgeGradle-2.3-SNAPSHOT.jar" "aaa19067cd51397756be850bd3e621667b535c0e897fc77e1bb1eb72550e4a63" -setup_dep "mixin" "https://github.com/SpongePowered/Mixin.git" "b558323da3bd6ce94aeb442bfd7357f6c40d2fd4" "mixin-0.6.11-SNAPSHOT.jar" "8ec6ce24b8192f043976344305ba6afbc35b052056f1559ca5914a77c5eae71d" +setup_dep "mixingradle" "https://github.com/SpongePowered/MixinGradle.git" "3d81c8e202ec435056fb2068fdc34cfefa99be2d" "build/libs/mixingradle-0.4-SNAPSHOT.jar" "8b3508867128a5d564631635dff898a36f9aca8db54b7bb3af6f4924e3f4bead" +setup_dep "forgegradle" "https://github.com/MinecraftForge/ForgeGradle.git" "a228a836a2dc5ce546d2d53c48760f52f082d7ad" "build/libs/ForgeGradle-2.3-SNAPSHOT.jar" "96d290b4297805d401251334680217cafa7cf8806ac0b3a1d09639d5c1b8f9f7" +setup_dep "mixin" "https://github.com/SpongePowered/Mixin.git" "b558323da3bd6ce94aeb442bfd7357f6c40d2fd4" "build/libs/mixin-0.6.11-SNAPSHOT.jar" "8ec6ce24b8192f043976344305ba6afbc35b052056f1559ca5914a77c5eae71d" rm -rf tmp mkdir tmp