From a34a3f16ede1f71a6481bf2dd0f1abc2f68aabec Mon Sep 17 00:00:00 2001
From: booky10 <boooky10@gmail.com>
Date: Wed, 2 Oct 2024 20:59:05 +0200
Subject: [PATCH] Add auto publishing gradle plugin

---
 .github/workflows/release.yml | 30 ++++++++++++++++++++
 build.gradle.kts              | 53 +++++++++++++++++++++++++++++++++--
 gradle.properties             |  1 +
 gradle/libs.versions.toml     |  2 ++
 settings.gradle.kts           |  4 +++
 5 files changed, 88 insertions(+), 2 deletions(-)
 create mode 100644 .github/workflows/release.yml
 create mode 100644 gradle.properties

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..2c0b3b2
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,30 @@
+name: Release
+on:
+  workflow_dispatch:
+
+permissions:
+  contents: write
+
+jobs:
+  release:
+    name: Publish Release
+    runs-on: ubuntu-24.04
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+
+      - name: Validate gradle wrapper
+        uses: gradle/actions/wrapper-validation@v3
+
+      - name: Setup java 21
+        uses: actions/setup-java@v4
+        with:
+          java-version: 21
+          distribution: temurin
+
+      - name: Publish plugin
+        env:
+          GITHUB_API_TOKEN: ${{ github.token }}
+          MODRINTH_API_TOKEN: ${{ secrets.MODRINTH_PUBLISH_TOKEN }}
+        run: ./gradlew publishMods --no-daemon -PnoDryPublish
diff --git a/build.gradle.kts b/build.gradle.kts
index 761228d..392fa40 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,3 +1,6 @@
+import me.modmuss50.mpp.ModPublishExtension
+import me.modmuss50.mpp.PublishModTask
+
 plugins {
     id("java-library")
     id("maven-publish")
@@ -5,10 +8,10 @@ plugins {
     alias(libs.plugins.pluginyml.bukkit)
     alias(libs.plugins.runtask.paper)
     alias(libs.plugins.shadow)
+    alias(libs.plugins.publishing)
 }
 
 group = "dev.booky"
-version = "1.1.1-SNAPSHOT"
 
 val plugin: Configuration by configurations.creating {
     isTransitive = false
@@ -27,7 +30,7 @@ dependencies {
     compileOnly(libs.commandapi.bukkit.core)
 
     // testserver dependency plugins
-    plugin(variantOf(libs.cloudcore) {classifier("all")})
+    plugin(variantOf(libs.cloudcore) { classifier("all") })
     plugin(libs.commandapi.bukkit.plugin)
 }
 
@@ -67,3 +70,49 @@ tasks {
         dependsOn(shadowJar)
     }
 }
+
+configure<ModPublishExtension> {
+    val repositoryName = "CloudCraftProjects/CloudVanish"
+    changelog = "See https://github.com/$repositoryName/releases/tag/v${project.version}"
+    type = if (project.version.toString().endsWith("-SNAPSHOT")) BETA else STABLE
+    dryRun = !hasProperty("noDryPublish")
+
+    file = tasks.named<Jar>("shadowJar").flatMap { it.archiveFile }
+    additionalFiles.from(tasks.named<Jar>("sourcesJar"))
+
+    github {
+        accessToken = providers.environmentVariable("GITHUB_API_TOKEN")
+            .orElse(providers.gradleProperty("ccGithubToken"))
+
+        displayName = "${rootProject.name} v${project.version}"
+
+        repository = repositoryName
+        commitish = "master"
+        tagName = "v${project.version}"
+
+        if (project != rootProject) {
+            parent(rootProject.tasks.named("publishGithub"))
+        }
+    }
+    modrinth {
+        accessToken = providers.environmentVariable("MODRINTH_API_TOKEN")
+            .orElse(providers.gradleProperty("ccModrinthToken"))
+
+        version = "${project.version}"
+        displayName = "${rootProject.name} v${project.version}"
+        modLoaders.add("paper")
+
+        projectId = "CtTP3zU8"
+        minecraftVersionRange {
+            start = rootProject.libs.versions.paper.get().split("-")[0]
+            end = "latest"
+        }
+
+        requires("commandapi", "cloudcore")
+    }
+}
+
+tasks.withType<PublishModTask> {
+    dependsOn(tasks.named<Jar>("shadowJar"))
+    dependsOn(tasks.named<Jar>("sourcesJar"))
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..ef0464d
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1 @@
+version=1.1.1
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 5da5c43..dc05bb3 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -2,6 +2,7 @@
 pluginyml = "0.6.0"
 runtask = "2.3.1"
 shadow = "8.3.0"
+publishing = "0.7.4"
 
 paper = "1.21.1-R0.1-SNAPSHOT"
 bstats = "3.1.0"
@@ -13,6 +14,7 @@ commandapi = "9.5.3"
 pluginyml-bukkit = { id = "net.minecrell.plugin-yml.bukkit", version.ref = "pluginyml" }
 runtask-paper = { id = "xyz.jpenilla.run-paper", version.ref = "runtask" }
 shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
+publishing = { id = "me.modmuss50.mod-publish-plugin", version.ref = "publishing" }
 
 [libraries]
 paper-api = { module = "io.papermc.paper:paper-api", version.ref = "paper" }
diff --git a/settings.gradle.kts b/settings.gradle.kts
index b183182..1c78b7c 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1 +1,5 @@
 rootProject.name = "CloudVanish"
+
+plugins {
+    id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
+}