|
1 | 1 | import dev.kikugie.stonecutter.build.StonecutterBuildExtension |
| 2 | +import me.modmuss50.mpp.PublishModTask |
| 3 | +import me.modmuss50.mpp.ReleaseType |
2 | 4 | import org.gradle.api.file.DuplicatesStrategy |
3 | 5 | import org.gradle.api.tasks.Copy |
4 | 6 | import org.gradle.api.tasks.SourceSetContainer |
| 7 | +import org.gradle.api.tasks.bundling.AbstractArchiveTask |
5 | 8 | import org.gradle.api.tasks.bundling.Zip |
6 | 9 | import org.gradle.api.tasks.javadoc.Javadoc |
7 | 10 | import org.gradle.external.javadoc.CoreJavadocOptions |
8 | 11 | import org.gradle.external.javadoc.StandardJavadocDocletOptions |
| 12 | +import org.gradle.internal.extensions.stdlib.capitalized |
9 | 13 | import java.io.File |
10 | 14 | import java.time.ZoneId |
11 | 15 | import java.time.ZonedDateTime |
12 | 16 | import java.time.format.DateTimeFormatter |
| 17 | +import java.util.Locale |
| 18 | + |
| 19 | +plugins { |
| 20 | + id("me.modmuss50.mod-publish-plugin") version "1.1.0" |
| 21 | +} |
13 | 22 |
|
14 | 23 | // Check if this is a Stonecutter versioned project by looking at the project path |
15 | 24 | // Versioned projects have paths like ":1.21.10", ":common:1.21.10", etc. |
@@ -303,6 +312,94 @@ if (isVersionedProject && hasMinecraftVersion) { |
303 | 312 | println(mcVersion) |
304 | 313 | } |
305 | 314 | } |
| 315 | + |
| 316 | + val releaseType = when (channel) { |
| 317 | + "release" -> ReleaseType.STABLE |
| 318 | + "beta" -> ReleaseType.BETA |
| 319 | + else -> ReleaseType.ALPHA |
| 320 | + } |
| 321 | + |
| 322 | + val modrinthProjectId = providers.gradleProperty("modrinth_id") |
| 323 | + .orElse(providers.environmentVariable("MODRINTH_PROJECT")) |
| 324 | + val modrinthToken = providers.gradleProperty("modrinth_token") |
| 325 | + .orElse(providers.environmentVariable("MODRINTH_TOKEN")) |
| 326 | + val githubRepo = providers.gradleProperty("github_repository") |
| 327 | + .orElse(providers.environmentVariable("GITHUB_REPOSITORY")) |
| 328 | + .orElse("JsMacrosCE/JsMacros") |
| 329 | + val githubToken = providers.environmentVariable("GITHUB_TOKEN") |
| 330 | + val githubCommitish = providers.environmentVariable("GITHUB_SHA").orElse("main") |
| 331 | + val githubTagName = providers.provider { "v${project.version}" } |
| 332 | + val targetMcVersion = mcVersion |
| 333 | + |
| 334 | + fun modrinthChangelog(loader: String): String = """ |
| 335 | + JsMacrosCE ${project.version} for $loader on Minecraft $targetMcVersion. |
| 336 | + Source: https://github.com/JsMacrosCE/JsMacros |
| 337 | + """.trimIndent() |
| 338 | + |
| 339 | + fun githubChangelog(): String = """ |
| 340 | + ${releaseType.toString().lowercase(Locale.getDefault()).capitalized()} Release for JsMacrosCE ${project.version}. |
| 341 | + Built game version: $targetMcVersion |
| 342 | + Alpha, beta, and release builds are available on Modrinth: https://modrinth.com/mod/jsmacrosce/versions |
| 343 | + """.trimIndent() |
| 344 | + |
| 345 | + |
| 346 | + publishMods { |
| 347 | + val publishModrinth = modrinthToken.isPresent && channel != "dev" |
| 348 | + |
| 349 | + if (publishModrinth) { |
| 350 | + loaders.forEach { loader -> |
| 351 | + val platformName = "modrinth${loader.replaceFirstChar { it.uppercase() }}${targetMcVersion.replace(".", "")}" |
| 352 | + val sourceTaskName = if (loader == "fabric") "remapJar" else "jar" |
| 353 | + val loaderProject = project(":$loader") |
| 354 | + |
| 355 | + modrinth(platformName) { |
| 356 | + projectId.set(modrinthProjectId) |
| 357 | + accessToken.set(modrinthToken) |
| 358 | + minecraftVersions.add(targetMcVersion) |
| 359 | + modLoaders.set(listOf(loader)) |
| 360 | + |
| 361 | + version.set("${project.version}+$targetMcVersion-$loader") |
| 362 | + displayName.set("JsMacrosCE ${project.version} ($loader $targetMcVersion)") |
| 363 | + changelog.set(modrinthChangelog(loader)) |
| 364 | + type.set(releaseType) |
| 365 | + file.set( |
| 366 | + loaderProject.tasks.named(sourceTaskName, AbstractArchiveTask::class.java) |
| 367 | + .flatMap { it.archiveFile } |
| 368 | + ) |
| 369 | + } |
| 370 | + } |
| 371 | + } |
| 372 | + |
| 373 | + github("githubRelease") { |
| 374 | + accessToken.set(githubToken) |
| 375 | + repository.set(githubRepo) |
| 376 | + commitish.set(githubCommitish) |
| 377 | + tagName.set(githubTagName) |
| 378 | + displayName.set("JsMacrosCE ${project.version}") |
| 379 | + changelog.set(githubChangelog()) |
| 380 | + type.set(releaseType) |
| 381 | + allowEmptyFiles.set(true) |
| 382 | + additionalFiles.from( |
| 383 | + providers.provider { |
| 384 | + distDir.asFileTree.matching { |
| 385 | + include("jsmacrosce-*-fabric-${project.version}.jar") |
| 386 | + include("jsmacrosce-*-neoforge-${project.version}.jar") |
| 387 | + include("jsmacrosce-devkit-*-${project.version}.zip") |
| 388 | + include("jsmacrosce-extensions-*-${project.version}.zip") |
| 389 | + include("extensions/jsmacrosce-ext-*-${project.version}.jar") |
| 390 | + } |
| 391 | + } |
| 392 | + ) |
| 393 | + } |
| 394 | + } |
| 395 | + |
| 396 | + tasks.named("publishMods") { |
| 397 | + dependsOn("createDist") |
| 398 | + } |
| 399 | + |
| 400 | + tasks.withType(PublishModTask::class.java).configureEach { |
| 401 | + dependsOn("createDist") |
| 402 | + } |
306 | 403 | } |
307 | 404 | } |
308 | 405 |
|
|
0 commit comments