From c43d27fdd5a14b857c81b4bbc105fa5045ebb95a Mon Sep 17 00:00:00 2001 From: Raven Szewczyk Date: Thu, 7 Mar 2024 21:43:35 +0000 Subject: [PATCH] Migrate from CurseGradle to the maintained CurseForgeGradle plugin --- build.gradle.kts | 2 +- .../GTNHGradlePluginFunctionalTest.java | 2 +- .../gtnhgradle/GTNHGradlePlugin.java | 4 +- .../gtnhgradle/modules/CodeStyleModule.java | 2 +- .../modules/IdeIntegrationModule.java | 4 +- .../gtnhgradle/modules/ModernJavaModule.java | 2 +- .../gtnhgradle/modules/PublishingModule.java | 161 +++++++----------- .../gtnhgradle/modules/ShadowModule.java | 2 +- .../modules/StandardScriptsModules.java | 2 +- .../gtnhgradle/modules/ToolchainModule.java | 4 +- 10 files changed, 76 insertions(+), 109 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 702d4ef..7a6db4d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -54,7 +54,7 @@ dependencies { api(pluginDep("de.undercouch.download", "5.5.0")) api(pluginDep("com.github.gmazzo.buildconfig", "3.1.0")) // Unused, available for addon.gradle api(pluginDep("com.modrinth.minotaur", "2.8.7")) - api(pluginDep("com.matthewprenger.cursegradle", "1.4.0")) + api(pluginDep("net.darkhax.curseforgegradle", "1.1.18")) testImplementation("org.junit.jupiter:junit-jupiter:5.9.3") testRuntimeOnly("org.junit.platform:junit-platform-launcher") diff --git a/src/functionalTest/java/com/gtnewhorizons/gtnhgradle/GTNHGradlePluginFunctionalTest.java b/src/functionalTest/java/com/gtnewhorizons/gtnhgradle/GTNHGradlePluginFunctionalTest.java index aa52c3d..ef9247f 100644 --- a/src/functionalTest/java/com/gtnewhorizons/gtnhgradle/GTNHGradlePluginFunctionalTest.java +++ b/src/functionalTest/java/com/gtnewhorizons/gtnhgradle/GTNHGradlePluginFunctionalTest.java @@ -9,7 +9,7 @@ import java.io.FileWriter; import java.nio.file.Files; -import com.google.common.collect.ImmutableMap; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableMap; import org.gradle.testkit.runner.GradleRunner; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.TaskOutcome; diff --git a/src/main/java/com/gtnewhorizons/gtnhgradle/GTNHGradlePlugin.java b/src/main/java/com/gtnewhorizons/gtnhgradle/GTNHGradlePlugin.java index f22d67d..05edeaf 100644 --- a/src/main/java/com/gtnewhorizons/gtnhgradle/GTNHGradlePlugin.java +++ b/src/main/java/com/gtnewhorizons/gtnhgradle/GTNHGradlePlugin.java @@ -4,8 +4,8 @@ package com.gtnewhorizons.gtnhgradle; import com.diffplug.blowdryer.Blowdryer; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableList; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableMap; import com.gtnewhorizons.gtnhgradle.modules.AccessTransformerModule; import com.gtnewhorizons.gtnhgradle.modules.CodeStyleModule; import com.gtnewhorizons.gtnhgradle.modules.GitVersionModule; diff --git a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/CodeStyleModule.java b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/CodeStyleModule.java index f575b4c..d5bafd3 100644 --- a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/CodeStyleModule.java +++ b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/CodeStyleModule.java @@ -1,7 +1,7 @@ package com.gtnewhorizons.gtnhgradle.modules; import com.diffplug.blowdryer.Blowdryer; -import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableList; import com.gtnewhorizons.gtnhgradle.GTNHConstants; import com.gtnewhorizons.gtnhgradle.GTNHGradlePlugin; import com.gtnewhorizons.gtnhgradle.GTNHModule; diff --git a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/IdeIntegrationModule.java b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/IdeIntegrationModule.java index 8ea1f8b..2a6a212 100644 --- a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/IdeIntegrationModule.java +++ b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/IdeIntegrationModule.java @@ -1,7 +1,7 @@ package com.gtnewhorizons.gtnhgradle.modules; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableList; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableMap; import com.gtnewhorizons.gtnhgradle.GTNHGradlePlugin; import com.gtnewhorizons.gtnhgradle.GTNHModule; import com.gtnewhorizons.gtnhgradle.PropertiesConfiguration; diff --git a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ModernJavaModule.java b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ModernJavaModule.java index ac03275..0b81b8f 100644 --- a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ModernJavaModule.java +++ b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ModernJavaModule.java @@ -1,6 +1,6 @@ package com.gtnewhorizons.gtnhgradle.modules; -import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableList; import com.gtnewhorizons.gtnhgradle.GTNHGradlePlugin; import com.gtnewhorizons.gtnhgradle.GTNHModule; import com.gtnewhorizons.gtnhgradle.PropertiesConfiguration; diff --git a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/PublishingModule.java b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/PublishingModule.java index be44dde..acb6763 100644 --- a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/PublishingModule.java +++ b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/PublishingModule.java @@ -1,27 +1,23 @@ package com.gtnewhorizons.gtnhgradle.modules; -import com.google.common.collect.ImmutableSet; import com.gtnewhorizons.gtnhgradle.GTNHConstants; import com.gtnewhorizons.gtnhgradle.GTNHGradlePlugin; import com.gtnewhorizons.gtnhgradle.GTNHModule; import com.gtnewhorizons.gtnhgradle.PropertiesConfiguration; -import com.gtnewhorizons.retrofuturagradle.MinecraftExtension; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableSet; import com.gtnewhorizons.retrofuturagradle.shadow.org.apache.commons.lang3.ObjectUtils; -import com.matthewprenger.cursegradle.CurseArtifact; -import com.matthewprenger.cursegradle.CurseExtension; -import com.matthewprenger.cursegradle.CurseGradlePlugin; -import com.matthewprenger.cursegradle.CurseProject; -import com.matthewprenger.cursegradle.CurseRelation; -import com.matthewprenger.cursegradle.Options; import com.modrinth.minotaur.Minotaur; import com.modrinth.minotaur.ModrinthExtension; import com.modrinth.minotaur.dependencies.Dependency; import com.modrinth.minotaur.dependencies.ModDependency; import com.modrinth.minotaur.dependencies.VersionDependency; +import net.darkhax.curseforgegradle.CurseForgeGradlePlugin; +import net.darkhax.curseforgegradle.TaskPublishCurseForge; import org.gradle.api.Project; import org.gradle.api.plugins.ExtraPropertiesExtension; import org.gradle.api.publish.PublishingExtension; import org.gradle.api.publish.maven.MavenPublication; +import org.gradle.api.publish.plugins.PublishingPlugin; import org.gradle.api.tasks.TaskProvider; import org.gradle.jvm.tasks.Jar; import org.jetbrains.annotations.NotNull; @@ -46,8 +42,6 @@ public boolean isEnabled(@NotNull PropertiesConfiguration configuration) { public void apply(GTNHGradlePlugin.@NotNull GTNHExtension gtnh, @NotNull Project project) throws Throwable { final PublishingExtension publishing = project.getExtensions() .getByType(PublishingExtension.class); - final MinecraftExtension mc = project.getExtensions() - .getByType(MinecraftExtension.class); final ExtraPropertiesExtension ext = project.getExtensions() .getExtraProperties(); @@ -148,64 +142,63 @@ public void apply(GTNHGradlePlugin.@NotNull GTNHExtension gtnh, @NotNull Project // Curseforge final String cfToken = System.getenv("CURSEFORGE_TOKEN"); - if (!gtnh.configuration.curseForgeProjectId.isEmpty() && cfToken != null) { + if (!gtnh.configuration.curseForgeProjectId.isEmpty()) { project.getPlugins() - .apply(CurseGradlePlugin.class); - final CurseExtension curse = project.getExtensions() - .getByType(CurseExtension.class); - curse.setApiKey(cfToken); - final Options opts = curse.getCurseGradleOptions(); - opts.setJavaIntegration(false); - opts.setForgeGradleIntegration(false); - opts.setDebug(false); - - final CurseProject prj = new CurseProject(); - prj.setApiKey(cfToken); - prj.setId(gtnh.configuration.curseForgeProjectId); - if (changelogFile.exists()) { - prj.setChangelogType("markdown"); - prj.setChangelog(changelogFile); - } - prj.setReleaseType(modVersion.endsWith("-pre") ? "beta" : "release"); - prj.addGameVersion(gtnh.configuration.minecraftVersion); - prj.addGameVersion("Forge"); - @SuppressWarnings("unchecked") - final File obfFile = ((TaskProvider) Objects.requireNonNull(ext.get("publishableObfJar"))).get() - .getArchiveFile() - .get() - .getAsFile(); - prj.mainArtifact(obfFile); - for (final Object secondary : getSecondaryArtifacts(project, gtnh)) { - @SuppressWarnings("unchecked") - final File secondaryFile = ((TaskProvider) secondary).get() - .getArchiveFile() - .get() - .getAsFile(); - prj.addArtifact(secondaryFile); - } - curse.getCurseProjects() - .add(prj); - - if (!gtnh.configuration.curseForgeRelations.isEmpty()) { - final String[] deps = gtnh.configuration.curseForgeRelations.split(";"); - for (String dep : deps) { - dep = dep.trim(); - if (dep.isEmpty()) { - continue; - } - final String[] parts = dep.split(":"); - addCurseForgeRelation(project, parts[0], parts[1]); - } - } - if (gtnh.configuration.usesMixins) { - addCurseForgeRelation(project, "requiredDependency", "unimixins"); + .apply(CurseForgeGradlePlugin.class); + final TaskProvider publishCurseforge = project.getTasks() + .register("publishCurseforge", TaskPublishCurseForge.class, task -> { + task.setGroup(PublishingPlugin.PUBLISH_TASK_GROUP); + task.setDescription("Publishes the mod to Curseforge"); + task.dependsOn("assemble"); + + @SuppressWarnings("unchecked") + final File obfFile = ((TaskProvider) Objects.requireNonNull(ext.get("publishableObfJar"))) + .get() + .getArchiveFile() + .get() + .getAsFile(); + + task.apiToken = cfToken; + task.disableVersionDetection(); + task.upload(gtnh.configuration.curseForgeProjectId, obfFile, artifact -> { + if (changelogFile.exists()) { + artifact.changelogType = "markdown"; + artifact.changelog = changelogFile; + } + artifact.releaseType = modVersion.endsWith("-pre") ? "beta" : "release"; + artifact.addGameVersion(gtnh.configuration.minecraftVersion, "Forge"); + artifact.addModLoader("Forge"); + + if (!gtnh.configuration.curseForgeRelations.isEmpty()) { + final String[] deps = gtnh.configuration.curseForgeRelations.split(";"); + for (String dep : deps) { + dep = dep.trim(); + if (dep.isEmpty()) { + continue; + } + final String[] parts = dep.split(":"); + artifact.addRelation(parts[1], parts[0]); + } + } + if (gtnh.configuration.usesMixins) { + artifact.addRelation("unimixins", "requiredDependency"); + } + + for (final Object secondary : getSecondaryArtifacts(project, gtnh)) { + @SuppressWarnings("unchecked") + final File secondaryFile = ((TaskProvider) secondary).get() + .getArchiveFile() + .get() + .getAsFile(); + artifact.withAdditionalFile(secondaryFile); + } + }); + }); + if (cfToken != null) { + project.getTasks() + .named(PublishingPlugin.PUBLISH_LIFECYCLE_TASK_NAME) + .configure(task -> task.dependsOn(publishCurseforge)); } - project.getTasks() - .named("curseforge") - .configure(t -> t.dependsOn("build")); - project.getTasks() - .named("publish") - .configure(t -> t.dependsOn("curseforge")); } } @@ -217,43 +210,17 @@ private static void addModrinthDep(Project project, String scope, String type, S if (!VALID_MODRINTH_SCOPES.contains(scope)) { throw new IllegalArgumentException("Invalid modrinthh dependency scope: " + scope); } - switch (type) { - case "project": - dep = new ModDependency(name, scope); - break; - case "version": - dep = new VersionDependency(name, scope); - break; - default: - throw new IllegalArgumentException("Invalid modrinth dependency type: " + type); - } + dep = switch (type) { + case "project" -> new ModDependency(name, scope); + case "version" -> new VersionDependency(name, scope); + default -> throw new IllegalArgumentException("Invalid modrinth dependency type: " + type); + }; final ModrinthExtension mr = project.getExtensions() .getByType(ModrinthExtension.class); mr.getDependencies() .add(dep); } - private static final Set VALID_CF_RELATIONS = ImmutableSet - .of("requiredDependency", "embeddedLibrary", "optionalDependency", "tool", "incompatible"); - - private static void addCurseForgeRelation(Project project, String type, String name) { - if (!VALID_CF_RELATIONS.contains(type)) { - throw new IllegalArgumentException("Invalid CurseForge relation type: " + type); - } - final CurseExtension curse = project.getExtensions() - .getByType(CurseExtension.class); - final CurseArtifact artifact = curse.getCurseProjects() - .iterator() - .next() - .getMainArtifact(); - CurseRelation rel = artifact.getCurseRelations(); - if (rel == null) { - rel = new CurseRelation(); - artifact.setCurseRelations(rel); - } - rel.invokeMethod(type, new Object[] { name }); - } - private static List getSecondaryArtifacts(Project project, GTNHGradlePlugin.GTNHExtension gtnh) { final List out = new ArrayList<>(); final ExtraPropertiesExtension ext = project.getExtensions() diff --git a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ShadowModule.java b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ShadowModule.java index 6da36db..fb9acbd 100644 --- a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ShadowModule.java +++ b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ShadowModule.java @@ -2,7 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin; import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar; -import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableList; import com.gtnewhorizons.gtnhgradle.GTNHGradlePlugin; import com.gtnewhorizons.gtnhgradle.GTNHModule; import com.gtnewhorizons.gtnhgradle.PropertiesConfiguration; diff --git a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/StandardScriptsModules.java b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/StandardScriptsModules.java index 6858730..8d907ba 100644 --- a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/StandardScriptsModules.java +++ b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/StandardScriptsModules.java @@ -1,6 +1,6 @@ package com.gtnewhorizons.gtnhgradle.modules; -import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableList; import com.gtnewhorizons.gtnhgradle.GTNHGradlePlugin; import com.gtnewhorizons.gtnhgradle.GTNHModule; import com.gtnewhorizons.gtnhgradle.PropertiesConfiguration; diff --git a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ToolchainModule.java b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ToolchainModule.java index 1349aac..8980876 100644 --- a/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ToolchainModule.java +++ b/src/main/java/com/gtnewhorizons/gtnhgradle/modules/ToolchainModule.java @@ -1,7 +1,7 @@ package com.gtnewhorizons.gtnhgradle.modules; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableMap; +import com.gtnewhorizons.retrofuturagradle.shadow.com.google.common.collect.ImmutableSet; import com.gtnewhorizons.gtnhgradle.GTNHConstants; import com.gtnewhorizons.gtnhgradle.GTNHGradlePlugin; import com.gtnewhorizons.gtnhgradle.GTNHModule;