Skip to content

Commit cba8882

Browse files
authored
Merge pull request #180 from refinedmods/feat/GH-176/config-cache
Config cache support
2 parents 25d1201 + f0738f7 commit cba8882

File tree

9 files changed

+94
-69
lines changed

9 files changed

+94
-69
lines changed

.github/workflows/publish-release.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ jobs:
162162
- name: Setup Java
163163
uses: refinedmods/refinedarchitect/.github/actions/setup-java@develop
164164
- name: Deploy to CurseForge
165-
run: ./gradlew publishCurseForge
165+
run: ./gradlew publishCurseforge
166166

167167
deploy-modrinth:
168168
name: Deploy to Modrinth
@@ -179,7 +179,7 @@ jobs:
179179
- name: Setup Java
180180
uses: refinedmods/refinedarchitect/.github/actions/setup-java@develop
181181
- name: Deploy to Modrinth
182-
run: ./gradlew modrinth
182+
run: ./gradlew publishModrinth
183183

184184
announce-discord:
185185
name: Announce to Discord

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- Support for the Gradle config cache.
13+
14+
### Changed
15+
16+
- The CurseForge and Modrinth publishing has been updated to use modmuss' mod-publish-plugin.
17+
1018
## [0.18.0] - 2024-09-09
1119

1220
### Fixed

gradle.properties

+4
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
# Gradle
22
org.gradle.jvmargs=-Xmx1G
3+
org.gradle.configureondemand=true
4+
org.gradle.caching=true
5+
org.gradle.configuration-cache=true
6+
org.gradle.configuration-cache.problems=warn

gradle/wrapper/gradle-wrapper.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

refinedarchitect-plugin/build.gradle.kts

+3-4
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@ repositories {
2525
}
2626

2727
dependencies {
28-
implementation("net.neoforged:moddev-gradle:2.0.5-beta")
29-
implementation("fabric-loom:fabric-loom.gradle.plugin:1.7-SNAPSHOT")
28+
implementation("net.neoforged:moddev-gradle:2.0.27-beta")
29+
implementation("fabric-loom:fabric-loom.gradle.plugin:1.8.0-alpha.9")
3030
implementation("gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:1.1.8")
3131
implementation("info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.15.0")
3232
implementation("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:4.4.1.3373")
33-
implementation("net.darkhax.curseforgegradle:CurseForgeGradle:1.1.18")
34-
implementation("com.modrinth.minotaur:Minotaur:2.8.7")
33+
implementation("me.modmuss50:mod-publish-plugin:0.7.3")
3534
}
3635

3736
publishing {

refinedarchitect-plugin/src/main/kotlin/BaseExtension.kt

+52-46
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
import com.modrinth.minotaur.Minotaur
2-
import com.modrinth.minotaur.ModrinthExtension
31
import info.solidsoft.gradle.pitest.PitestPlugin
42
import info.solidsoft.gradle.pitest.PitestPluginExtension
5-
import net.darkhax.curseforgegradle.TaskPublishCurseForge
3+
import me.modmuss50.mpp.ModPublishExtension
4+
import me.modmuss50.mpp.MppPlugin
5+
import me.modmuss50.mpp.ReleaseType
6+
import net.fabricmc.loom.task.RemapJarTask
67
import org.gradle.api.Action
78
import org.gradle.api.Project
89
import org.gradle.api.publish.PublishingExtension
910
import org.gradle.api.publish.maven.MavenPublication
1011
import org.gradle.api.tasks.testing.Test
12+
import org.gradle.jvm.tasks.Jar
1113
import org.gradle.kotlin.dsl.*
1214
import org.sonarqube.gradle.SonarExtension
1315
import org.sonarqube.gradle.SonarQubePlugin
@@ -25,49 +27,50 @@ open class BaseExtension(private val project: Project) {
2527
if (options.maven == true) {
2628
enableMavenPublishing()
2729
}
28-
options.curseForge?.let { enableCurseForgePublishing(it) }
29-
options.modrinth?.let { enableModrinthPublishing(it) }
30-
}
31-
32-
private fun enableCurseForgePublishing(projectId: String) {
33-
project.tasks.register<TaskPublishCurseForge>("publishCurseForge") {
34-
apiToken = System.getenv("CURSEFORGE_TOKEN")
35-
val isNeoForge = project.pluginManager.hasPlugin("net.neoforged.moddev")
36-
val mainFile = upload(projectId, project.tasks.getByName(if (isNeoForge) "jar" else "remapJar"))
37-
mainFile.releaseType = if (project.version.toString().contains("beta")) "beta" else if (project.version.toString().contains("alpha")) "alpha" else "release"
38-
mainFile.changelog = System.getenv("RELEASE_CHANGELOG")
39-
mainFile.changelogType = "markdown"
40-
mainFile.displayName = "v" + project.version.toString()
41-
mainFile.addGameVersion(mcVersion)
42-
// https://github.com/refinedmods/refinedarchitect/issues/149
43-
if (isNeoForge) {
44-
mainFile.addModLoader("NeoForge")
45-
} else {
46-
mainFile.addRequirement("fabric-api")
47-
}
48-
}
49-
}
50-
51-
private fun enableModrinthPublishing(projId: String) {
52-
project.plugins.apply(Minotaur::class.java)
53-
val isNeoForge = project.pluginManager.hasPlugin("net.neoforged.moddev")
54-
project.extensions.getByType<ModrinthExtension>().apply {
55-
token.set(System.getenv("MODRINTH_TOKEN"))
56-
projectId.set(projId)
57-
uploadFile = project.tasks.getByName(if (isNeoForge) "jar" else "remapJar")
58-
versionType.set(if (project.version.toString().contains("beta")) "beta" else if (project.version.toString().contains("alpha")) "alpha" else "release")
59-
versionNumber.set(project.version.toString())
60-
versionName.set("v" + project.version)
61-
// https://github.com/refinedmods/refinedarchitect/issues/149
62-
if (isNeoForge) {
63-
loaders.add("neoforge")
64-
gameVersions.add(mcVersion)
65-
} else {
66-
dependencies.apply {
67-
required.project("fabric-api")
30+
if (options.curseForge != null || options.modrinth != null) {
31+
project.plugins.apply(MppPlugin::class)
32+
project.extensions.getByType(ModPublishExtension::class).apply {
33+
val isNeoForge = project.pluginManager.hasPlugin("net.neoforged.moddev")
34+
if (isNeoForge) {
35+
val jar by project.tasks.getting(Jar::class)
36+
file.set(jar.archiveFile)
37+
modLoaders.add("NeoForge")
38+
} else {
39+
val remapJar by project.tasks.getting(RemapJarTask::class)
40+
file.set(remapJar.archiveFile)
41+
modLoaders.add("Fabric")
42+
}
43+
type.set(
44+
if (project.version.toString()
45+
.contains("beta")
46+
) ReleaseType.BETA else if (project.version.toString()
47+
.contains("alpha")
48+
) ReleaseType.ALPHA else ReleaseType.STABLE
49+
)
50+
changelog.set(System.getenv("RELEASE_CHANGELOG"))
51+
displayName.set("v" + project.version.toString())
52+
options.curseForge?.let {
53+
curseforge {
54+
accessToken.set(System.getenv("CURSEFORGE_TOKEN"))
55+
minecraftVersions.add(mcVersion)
56+
changelogType.set("markdown")
57+
projectId.set(it)
58+
if (!isNeoForge) {
59+
requires("fabric-api")
60+
}
61+
}
62+
}
63+
options.modrinth?.let {
64+
modrinth {
65+
accessToken.set(System.getenv("MODRINTH_TOKEN"))
66+
projectId.set(it)
67+
minecraftVersions.add(mcVersion)
68+
if (!isNeoForge) {
69+
requires("fabric-api")
70+
}
71+
}
6872
}
6973
}
70-
changelog.set(System.getenv("RELEASE_CHANGELOG"))
7174
}
7275
}
7376

@@ -81,7 +84,7 @@ open class BaseExtension(private val project: Project) {
8184
coverageThreshold.set(80)
8285
}
8386
project.dependencies.add("testRuntimeOnly", "org.junit.platform:junit-platform-launcher")
84-
?.because("required for pitest")
87+
?.because("required for pitest")
8588
}
8689

8790
fun testing() {
@@ -131,7 +134,10 @@ open class BaseExtension(private val project: Project) {
131134
property("sonar.projectKey", projectKey)
132135
property("sonar.organization", organization)
133136
property("sonar.host.url", "https://sonarcloud.io")
134-
property("sonar.coverage.jacoco.xmlReportPaths", "${project.layout.buildDirectory.get()}/reports/jacoco/codeCoverageReportAggregate/codeCoverageReportAggregate.xml")
137+
property(
138+
"sonar.coverage.jacoco.xmlReportPaths",
139+
"${project.layout.buildDirectory.get()}/reports/jacoco/codeCoverageReportAggregate/codeCoverageReportAggregate.xml"
140+
)
135141
}
136142
}
137143
}

refinedarchitect-plugin/src/main/kotlin/FabricExtension.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import net.fabricmc.loom.api.LoomGradleExtensionAPI
22
import org.gradle.api.Project
3-
import org.gradle.api.plugins.JavaPluginExtension
43
import org.gradle.api.tasks.compile.JavaCompile
54
import org.gradle.jvm.tasks.Jar
65
import org.gradle.kotlin.dsl.get
@@ -56,6 +55,11 @@ open class FabricExtension(private val project: Project) : BaseExtension(project
5655
source(project.configurations["commonJava"])
5756
}
5857
project.tasks.withType<ProcessResources>().configureEach {
58+
val properties = mapOf("version" to project.version)
59+
inputs.properties(properties)
60+
filesMatching(listOf("fabric.mod.json")) {
61+
expand(properties)
62+
}
5963
dependsOn(project.configurations["commonResources"])
6064
from(project.configurations["commonResources"])
6165
}

refinedarchitect-plugin/src/main/kotlin/NeoForgeExtension.kt

+19-7
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import org.gradle.api.tasks.compile.JavaCompile
44
import org.gradle.jvm.tasks.Jar
55
import org.gradle.kotlin.dsl.get
66
import org.gradle.kotlin.dsl.getByType
7+
import org.gradle.kotlin.dsl.register
78
import org.gradle.kotlin.dsl.withType
89
import org.gradle.language.jvm.tasks.ProcessResources
9-
import net.neoforged.moddevgradle.dsl.NeoForgeExtension as NfExtension
10+
import net.neoforged.moddevgradle.dsl.NeoForgeExtension as NeoForge
1011

1112
open class NeoForgeExtension(private val project: Project) : BaseExtension(project) {
1213
var modId: String? = null
@@ -17,7 +18,16 @@ open class NeoForgeExtension(private val project: Project) : BaseExtension(proje
1718
project.configurations["commonJava"].isCanBeConsumed = modId == null
1819
project.configurations["commonResources"].isCanBeResolved = true
1920
project.configurations["commonResources"].isCanBeConsumed = modId == null
20-
project.extensions.getByType<NfExtension>().apply {
21+
val generateModMetadata = project.tasks.register("generateModMetadata", ProcessResources::class) {
22+
val properties = mapOf("version" to project.version)
23+
inputs.properties(properties)
24+
expand(properties)
25+
from("src/main/templates")
26+
into("build/generated/sources/modMetadata")
27+
}
28+
sourceSets["main"].resources.srcDir(generateModMetadata)
29+
sourceSets["main"].resources.srcDirs.add(project.file("src/generated/resources"))
30+
project.extensions.getByType<NeoForge>().apply {
2131
version.set(neoForgeVersion)
2232
addModdingDependenciesTo(sourceSets["test"])
2333
if (modId != null) {
@@ -40,15 +50,17 @@ open class NeoForgeExtension(private val project: Project) : BaseExtension(proje
4050
minecraftVersion.set(parchmentMcVersion)
4151
mappingsVersion.set(parchmentVersion)
4252
}
53+
ideSyncTask(generateModMetadata)
4354
}
44-
sourceSets["main"].resources.srcDirs.add(project.file("src/generated/resources"))
4555
project.tasks.withType<JavaCompile>().configureEach {
4656
dependsOn(project.configurations["commonJava"])
4757
source(project.configurations["commonJava"])
4858
}
4959
project.tasks.withType<ProcessResources>().configureEach {
50-
dependsOn(project.configurations["commonResources"])
51-
from(project.configurations["commonResources"])
60+
if (name != "generateModMetadata") {
61+
dependsOn(project.configurations["commonResources"])
62+
from(project.configurations["commonResources"])
63+
}
5264
}
5365
project.tasks.withType<Jar>().configureEach {
5466
from("../LICENSE.md")
@@ -58,7 +70,7 @@ open class NeoForgeExtension(private val project: Project) : BaseExtension(proje
5870
fun gameTests() {
5971
project.dependencies.add("testImplementation", "net.neoforged:testframework:${neoForgeVersion}")
6072
val sourceSets = project.extensions.getByType<JavaPluginExtension>().sourceSets
61-
project.extensions.getByType<NfExtension>().apply {
73+
project.extensions.getByType<NeoForge>().apply {
6274
runs {
6375
register("gameTestServer") {
6476
type.set("gameTestServer")
@@ -74,7 +86,7 @@ open class NeoForgeExtension(private val project: Project) : BaseExtension(proje
7486
}
7587

7688
fun dataGeneration(sourceProject: Project = project) {
77-
project.extensions.getByType<NfExtension>().apply {
89+
project.extensions.getByType<NeoForge>().apply {
7890
runs {
7991
create("data") {
8092
data()

refinedarchitect-plugin/src/main/kotlin/refinedarchitect.gradle.kts

-8
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,6 @@ checkstyle {
5252
toolVersion = "10.17.0"
5353
}
5454

55-
tasks.withType<ProcessResources> {
56-
inputs.property("version", project.version)
57-
58-
filesMatching(listOf("fabric.mod.json", "META-INF/neoforge.mods.toml")) {
59-
expand("version" to project.version)
60-
}
61-
}
62-
6355
artifacts {
6456
add("commonJava", sourceSets["main"].java.sourceDirectories.singleFile)
6557
add("commonResources", sourceSets["main"].resources.sourceDirectories.singleFile)

0 commit comments

Comments
 (0)