diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f1f17c2..a9c84bf 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,7 +8,7 @@ jobs: build: runs-on: ubuntu-20.04 container: - image: openjdk:8-jdk + image: openjdk:16-jdk options: --user root steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/test-push.yml b/.github/workflows/test-push.yml index 93cfb7a..5cce91d 100644 --- a/.github/workflows/test-push.yml +++ b/.github/workflows/test-push.yml @@ -5,20 +5,12 @@ jobs: strategy: fail-fast: false matrix: - gradle: [4.9, 4.10.2, 6.8.3] - java: [jdk8, jdk11, jdk15] - exclude: # Dont run older gradle versions on newer java - - java: jdk15 - gradle: 4.9 - - java: jdk15 - gradle: 4.10.2 - - java: jdk11 - gradle: 4.9 - - java: jdk11 - gradle: 4.10.2 + gradle: [7.0-rc-2] + java: [jdk8, jdk11, jdk16] + jvm: [hotspot] runs-on: ubuntu-20.04 container: - image: gradle:${{ matrix.gradle }}-${{ matrix.java }} + image: ghcr.io/modmuss50/gradle:${{ matrix.gradle }}-${{ matrix.java }}-hotspot options: --user root steps: - uses: actions/checkout@v2 @@ -32,7 +24,7 @@ jobs: runs-on: ubuntu-20.04 container: - image: gradle:6.8.3-jdk15 + image: ghcr.io/modmuss50/gradle:7.0-rc-2-jdk16-hotspot options: --user root steps: @@ -51,12 +43,15 @@ jobs: strategy: fail-fast: false matrix: - java: [jdk8, jdk11, jdk15] + java: [jdk8, jdk11, jdk16] test: ${{ fromJson(needs.prepare_test_matrix.outputs.matrix) }} + exclude: + - java: jdk16 + test: net.fabricmc.loom.test.intergration.KotlinTest runs-on: ubuntu-20.04 container: - image: gradle:6.8.3-${{ matrix.java }} + image: ghcr.io/modmuss50/gradle:7.0-rc-2-${{ matrix.java }}-hotspot options: --user root steps: @@ -78,7 +73,7 @@ jobs: strategy: fail-fast: false matrix: - java: [ 1.8, 11, 15 ] + java: [ 1.8, 11, 16 ] os: [ windows-2019, ubuntu-20.04, macos-10.15 ] runs-on: ${{ matrix.os }} diff --git a/build.gradle b/build.gradle index 7e1216a..caf30c7 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,15 @@ plugins { sourceCompatibility = 1.8 targetCompatibility = 1.8 +tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" + + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = 8 + } +} + + group = 'net.fabricmc' archivesBaseName = project.name def baseVersion = '0.7' @@ -36,9 +45,6 @@ repositories { dependencies { implementation gradleApi() - // Compile against groovy 3 to aid with gradle 7 support. Remove when updating to gradle 7 - compileOnly 'org.codehaus.groovy:groovy-all:3.0.7' - // libraries implementation ('commons-io:commons-io:2.8.0') implementation ('org.zeroturnaround:zt-zip:1.14') @@ -74,11 +80,11 @@ dependencies { implementation ('org.cadixdev:mercury:0.1.0-rc1') // Kapt integration - compileOnly('org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21') + compileOnly('org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32') // Testing testImplementation(gradleTestKit()) - testImplementation('org.spockframework:spock-core:1.3-groovy-2.4') { + testImplementation('org.spockframework:spock-core:2.0-M5-groovy-3.0') { exclude module: 'groovy-all' } testImplementation 'io.javalin:javalin:3.13.4' @@ -93,12 +99,12 @@ jar { } task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' + archiveClassifier = 'sources' from sourceSets.main.allSource } task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' + archiveClassifier = 'javadoc' from javadoc.destinationDir } @@ -112,7 +118,7 @@ license { checkstyle { configFile = file('checkstyle.xml') - toolVersion = '8.39' + toolVersion = '8.41.1' } codenarc { @@ -145,6 +151,7 @@ jacocoTestReport { test { maxHeapSize = "4096m" + useJUnitPlatform() } import org.w3c.dom.Document diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 87b738c..0d4a951 100644 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 071bbc5..76d741b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Mon Jun 24 11:09:08 BST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-rc-2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip diff --git a/gradlew b/gradlew index af6708f..cccdd3d 100755 --- a/gradlew +++ b/gradlew @@ -28,7 +28,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' +DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" diff --git a/gradlew.bat b/gradlew.bat index 6d57edc..f955316 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" +set DEFAULT_JVM_OPTS= @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff --git a/src/main/java/net/fabricmc/loom/configuration/RemappedConfigurationEntry.java b/src/main/java/net/fabricmc/loom/configuration/RemappedConfigurationEntry.java index a796b62..01b0d94 100644 --- a/src/main/java/net/fabricmc/loom/configuration/RemappedConfigurationEntry.java +++ b/src/main/java/net/fabricmc/loom/configuration/RemappedConfigurationEntry.java @@ -27,9 +27,6 @@ package net.fabricmc.loom.configuration; import org.gradle.api.artifacts.ConfigurationContainer; import org.gradle.api.plugins.JavaPlugin; -import net.fabricmc.loom.util.Constants; -import net.fabricmc.loom.util.gradle.GradleSupport; - public class RemappedConfigurationEntry { private final String sourceConfiguration; private final String targetConfiguration; @@ -65,7 +62,7 @@ public class RemappedConfigurationEntry { public String getTargetConfiguration(ConfigurationContainer container) { if (container.findByName(targetConfiguration) == null) { - return GradleSupport.IS_GRADLE_7_OR_NEWER ? JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME : Constants.Configurations.COMPILE; + return JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME; } return targetConfiguration; diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index 2e69f12..79e2f23 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -61,7 +61,6 @@ import net.fabricmc.loom.configuration.accesswidener.AccessWidenerJarProcessor; import net.fabricmc.loom.configuration.providers.mappings.MappingsProvider; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.TinyRemapperMappingsHelper; -import net.fabricmc.loom.util.gradle.GradleSupport; import net.fabricmc.loom.util.ZipReprocessorUtil; import net.fabricmc.stitch.util.Pair; import net.fabricmc.tinyremapper.TinyRemapper; @@ -79,7 +78,7 @@ public class RemapJarTask extends Jar { public RemapJarTask() { super(); - input = GradleSupport.getfileProperty(getProject()); + input = getProject().getObjects().fileProperty(); addNestedDependencies = getProject().getObjects().property(Boolean.class); addDefaultNestedDependencies = getProject().getObjects().property(Boolean.class); remapAccessWidener = getProject().getObjects().property(Boolean.class); diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java index beff10d..eb6576a 100644 --- a/src/main/java/net/fabricmc/loom/util/Constants.java +++ b/src/main/java/net/fabricmc/loom/util/Constants.java @@ -31,7 +31,6 @@ import org.gradle.api.plugins.JavaPlugin; import org.objectweb.asm.Opcodes; import net.fabricmc.loom.configuration.RemappedConfigurationEntry; -import net.fabricmc.loom.util.gradle.GradleSupport; public class Constants { public static final String LIBRARIES_BASE = "https://libraries.minecraft.net/"; @@ -42,23 +41,13 @@ public class Constants { public static final int ASM_VERSION = Opcodes.ASM9; - private static final List LEGACY_MOD_COMPILE_ENTRIES = ImmutableList.of( - new RemappedConfigurationEntry("modCompile", Configurations.COMPILE, true, "compile"), + public static final List MOD_COMPILE_ENTRIES = ImmutableList.of( new RemappedConfigurationEntry("modApi", JavaPlugin.API_CONFIGURATION_NAME, true, "compile"), new RemappedConfigurationEntry("modImplementation", JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, true, "runtime"), new RemappedConfigurationEntry("modRuntime", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, ""), new RemappedConfigurationEntry("modCompileOnly", JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, true, "") ); - private static final List MODERN_MOD_COMPILE_ENTRIES = ImmutableList.of( - new RemappedConfigurationEntry("modApi", JavaPlugin.API_CONFIGURATION_NAME, true, "compile"), - new RemappedConfigurationEntry("modImplementation", JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, true, "runtime"), - new RemappedConfigurationEntry("modRuntime", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, ""), - new RemappedConfigurationEntry("modCompileOnly", JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, true, "") - ); - - public static final List MOD_COMPILE_ENTRIES = GradleSupport.IS_GRADLE_7_OR_NEWER ? MODERN_MOD_COMPILE_ENTRIES : LEGACY_MOD_COMPILE_ENTRIES; - private Constants() { } @@ -77,8 +66,6 @@ public class Constants { public static final String MAPPINGS_FINAL = "mappingsFinal"; public static final String LOADER_DEPENDENCIES = "loaderLibraries"; public static final String LOOM_DEVELOPMENT_DEPENDENCIES = "loomDevelopmentDependencies"; - @Deprecated // Not to be used in gradle 7+ - public static final String COMPILE = "compile"; public static final String MAPPING_CONSTANTS = "mappingsConstants"; public static final String UNPICK_CLASSPATH = "unpick"; diff --git a/src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java b/src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java index 4e587e1..4a31a28 100644 --- a/src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java +++ b/src/main/java/net/fabricmc/loom/util/GroovyXmlUtil.java @@ -31,8 +31,6 @@ import java.util.stream.Stream; import groovy.util.Node; import groovy.xml.QName; -import net.fabricmc.loom.util.gradle.GradleSupport; - public final class GroovyXmlUtil { private GroovyXmlUtil() { } @@ -66,18 +64,13 @@ public final class GroovyXmlUtil { } // New groovy 3 (gradle 7) class - if (GradleSupport.IS_GRADLE_7_OR_NEWER && nodeName.getClass().getName().equals("groovy.namespace.QName")) { - return isSameNameGroovy3(nodeName, givenName); + if (nodeName instanceof groovy.namespace.QName) { + return ((groovy.namespace.QName) nodeName).matches(givenName); } throw new UnsupportedOperationException("Cannot determine if " + nodeName.getClass() + " is the same as a String"); } - // TODO Move out of its own method when requiring gradle 7 - private static boolean isSameNameGroovy3(Object nodeName, String givenName) { - return ((groovy.namespace.QName) nodeName).matches(givenName); - } - public static Stream childrenNodesStream(Node node) { //noinspection unchecked return (Stream) (Stream) (((List) node.children()).stream().filter((i) -> i instanceof Node)); diff --git a/src/main/java/net/fabricmc/loom/util/gradle/GradleSupport.java b/src/main/java/net/fabricmc/loom/util/gradle/GradleSupport.java index 068b543..6c72d5b 100644 --- a/src/main/java/net/fabricmc/loom/util/gradle/GradleSupport.java +++ b/src/main/java/net/fabricmc/loom/util/gradle/GradleSupport.java @@ -24,45 +24,12 @@ package net.fabricmc.loom.util.gradle; -import java.lang.reflect.Method; - -import org.gradle.api.Project; -import org.gradle.api.file.RegularFileProperty; import org.gradle.util.GradleVersion; // This is used to bridge the gap over large gradle api changes. public class GradleSupport { public static final boolean IS_GRADLE_7_OR_NEWER = isIsGradle7OrNewer(); - public static RegularFileProperty getfileProperty(Project project) { - try { - // First try the new method, if that fails fall back. - return getfilePropertyModern(project); - } catch (Exception e) { - // Nope - } - - try { - return getfilePropertyLegacy(project); - } catch (Exception e) { - throw new RuntimeException("Failed to find file property", e); - } - } - - private static RegularFileProperty getfilePropertyModern(Project project) throws Exception { - return getfilePropertyLegacyFromObject(project.getObjects()); - } - - private static RegularFileProperty getfilePropertyLegacy(Project project) throws Exception { - return getfilePropertyLegacyFromObject(project.getLayout()); - } - - private static RegularFileProperty getfilePropertyLegacyFromObject(Object object) throws Exception { - Method method = object.getClass().getDeclaredMethod("fileProperty"); - method.setAccessible(true); - return (RegularFileProperty) method.invoke(object); - } - public static boolean isIsGradle7OrNewer() { String version = GradleVersion.current().getVersion(); return Integer.parseInt(version.substring(0, version.indexOf("."))) >= 7; diff --git a/src/test/groovy/net/fabricmc/loom/test/intergration/DecompileTest.groovy b/src/test/groovy/net/fabricmc/loom/test/intergration/DecompileTest.groovy index 4e4c182..fdab32c 100644 --- a/src/test/groovy/net/fabricmc/loom/test/intergration/DecompileTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/intergration/DecompileTest.groovy @@ -47,7 +47,6 @@ class DecompileTest extends Specification implements ProjectTestTrait { where: decompiler | task | gradle 'fernflower' | "genSources" | DEFAULT_GRADLE - 'fernflower' | "genSources" | LEGACY_GRADLE 'fernflower' | "genSources" | PRE_RELEASE_GRADLE 'cfr' | "genSourcesWithExperimentalCfr" | DEFAULT_GRADLE } diff --git a/src/test/groovy/net/fabricmc/loom/test/intergration/KotlinTest.groovy b/src/test/groovy/net/fabricmc/loom/test/intergration/KotlinTest.groovy index a2d2ec0..6d738a6 100644 --- a/src/test/groovy/net/fabricmc/loom/test/intergration/KotlinTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/intergration/KotlinTest.groovy @@ -25,11 +25,13 @@ package net.fabricmc.loom.test.intergration import net.fabricmc.loom.test.util.ProjectTestTrait +import spock.lang.IgnoreIf import spock.lang.Specification import spock.lang.Unroll import static org.gradle.testkit.runner.TaskOutcome.SUCCESS +@IgnoreIf({ jvm.java16Compatible }) // Fails on J16 > due to https://youtrack.jetbrains.com/issue/KT-45566 class KotlinTest extends Specification implements ProjectTestTrait { @Override String name() { diff --git a/src/test/groovy/net/fabricmc/loom/test/intergration/LegacyProjectTest.groovy b/src/test/groovy/net/fabricmc/loom/test/intergration/LegacyProjectTest.groovy index 6187f02..da40281 100644 --- a/src/test/groovy/net/fabricmc/loom/test/intergration/LegacyProjectTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/intergration/LegacyProjectTest.groovy @@ -40,7 +40,7 @@ class LegacyProjectTest extends Specification implements ProjectTestTrait { @Unroll def "build"() { when: - def result = create("build", LEGACY_GRADLE) + def result = create("build", DEFAULT_GRADLE) then: result.task(":build").outcome == SUCCESS } diff --git a/src/test/groovy/net/fabricmc/loom/test/intergration/ReproducibleBuildTest.groovy b/src/test/groovy/net/fabricmc/loom/test/intergration/ReproducibleBuildTest.groovy index 8bcac7b..ef9a914 100644 --- a/src/test/groovy/net/fabricmc/loom/test/intergration/ReproducibleBuildTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/intergration/ReproducibleBuildTest.groovy @@ -48,9 +48,9 @@ class ReproducibleBuildTest extends Specification implements ProjectTestTrait { getOutputHash("fabric-example-mod-1.0.0.jar") == modHash getOutputHash("fabric-example-mod-1.0.0-sources.jar") in sourceHash // Done for different line endings. where: - gradle | modHash | sourceHash - '6.8.3' | "6132ffb4117adb7e258f663110552952" | ["be31766e6cafbe4ae3bca9e35ba63169", "7348b0bd87d36d7ec6f3bca9c2b66062"] - '7.0-rc-1' | "6132ffb4117adb7e258f663110552952" | ["be31766e6cafbe4ae3bca9e35ba63169", "7348b0bd87d36d7ec6f3bca9c2b66062"] + gradle | modHash | sourceHash + DEFAULT_GRADLE | "6132ffb4117adb7e258f663110552952" | ["be31766e6cafbe4ae3bca9e35ba63169", "7348b0bd87d36d7ec6f3bca9c2b66062"] + PRE_RELEASE_GRADLE | "6132ffb4117adb7e258f663110552952" | ["be31766e6cafbe4ae3bca9e35ba63169", "7348b0bd87d36d7ec6f3bca9c2b66062"] } String getOutputHash(String name) { diff --git a/src/test/groovy/net/fabricmc/loom/test/util/ProjectTestTrait.groovy b/src/test/groovy/net/fabricmc/loom/test/util/ProjectTestTrait.groovy index 619973e..7a827cb 100644 --- a/src/test/groovy/net/fabricmc/loom/test/util/ProjectTestTrait.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/util/ProjectTestTrait.groovy @@ -28,8 +28,7 @@ import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner trait ProjectTestTrait { - final static String LEGACY_GRADLE = "4.9" - final static String DEFAULT_GRADLE = "6.8.3" + final static String DEFAULT_GRADLE = "7.0-rc-2" final static String PRE_RELEASE_GRADLE = "7.0-rc-2" static File gradleHome = File.createTempDir() @@ -95,10 +94,6 @@ trait ProjectTestTrait { } String warningMode(String gradleVersion) { - if (gradleVersion == LEGACY_GRADLE) { - return "all" - } - 'fail' } diff --git a/src/test/resources/projects/legacy/build.gradle b/src/test/resources/projects/legacy/build.gradle index 92e5147..3b460c4 100644 --- a/src/test/resources/projects/legacy/build.gradle +++ b/src/test/resources/projects/legacy/build.gradle @@ -19,23 +19,20 @@ dependencies { processResources { inputs.property "version", project.version - from(sourceSets.main.resources.srcDirs) { - include "fabric.mod.json" + filesMatching("fabric.mod.json") { expand "version": project.version } - - from(sourceSets.main.resources.srcDirs) { - exclude "fabric.mod.json" - } } tasks.withType(JavaCompile) { options.encoding = "UTF-8" } -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = "sources" - from sourceSets.main.allSource +java { + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. + withSourcesJar() } jar {