Skip to content

Commit 297fc15

Browse files
committed
Add support for publishing to Modrinth and Hangar
1 parent ece3fc0 commit 297fc15

7 files changed

Lines changed: 194 additions & 2 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: Publish to Hangar
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
release:
8+
types: [published]
9+
10+
jobs:
11+
publish:
12+
runs-on: ubuntu-latest
13+
permissions:
14+
contents: read
15+
if: (github.event_name == 'push' && !contains(github.event.head_commit.message, '[ci skip]')) || github.event_name == 'release'
16+
steps:
17+
- uses: actions/checkout@v6
18+
with:
19+
fetch-depth: 0
20+
21+
- name: Set up JDK 21
22+
uses: actions/setup-java@v5
23+
with:
24+
java-version: '21'
25+
distribution: 'temurin'
26+
27+
- name: Setup Gradle
28+
uses: gradle/actions/setup-gradle@v5
29+
30+
- name: Grant execute permission for gradlew
31+
run: chmod +x gradlew
32+
33+
- name: Publish to Hangar
34+
run: ./gradlew :eternaleconomy-core:publishPluginPublicationToHangar
35+
env:
36+
HANGAR_API_TOKEN: ${{ secrets.HANGAR_API_TOKEN }}
37+
GITHUB_EVENT_NAME: ${{ github.event_name }}
38+
CHANGELOG: ${{ github.event_name == 'release' && github.event.release.body || github.event.head_commit.message }}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: Publish to Modrinth
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
release:
8+
types: [published]
9+
10+
jobs:
11+
publish:
12+
runs-on: ubuntu-latest
13+
permissions:
14+
contents: read
15+
if: (github.event_name == 'push' && !contains(github.event.head_commit.message, '[ci skip]')) || github.event_name == 'release'
16+
steps:
17+
- uses: actions/checkout@v6
18+
with:
19+
fetch-depth: 0
20+
21+
- name: Set up JDK 21
22+
uses: actions/setup-java@v5
23+
with:
24+
java-version: '21'
25+
distribution: 'temurin'
26+
27+
- name: Setup Gradle
28+
uses: gradle/actions/setup-gradle@v5
29+
30+
- name: Grant execute permission for gradlew
31+
run: chmod +x gradlew
32+
33+
- name: Publish to Modrinth
34+
run: ./gradlew :eternaleconomy-core:modrinth
35+
env:
36+
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
37+
GITHUB_EVENT_NAME: ${{ github.event_name }}
38+
CHANGELOG: ${{ github.event_name == 'release' && github.event.release.body || github.event.head_commit.message }}

buildSrc/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ repositories {
99

1010
dependencies {
1111
implementation("com.gradleup.shadow:shadow-gradle-plugin:9.3.1")
12+
implementation("com.modrinth.minotaur:Minotaur:2.9.0")
13+
implementation("io.papermc.hangar-publish-plugin:io.papermc.hangar-publish-plugin.gradle.plugin:0.1.4")
1214
implementation("net.minecrell:plugin-yml:0.6.0")
1315
implementation("xyz.jpenilla:run-task:3.0.2")
1416
implementation("me.champeau.jmh:jmh-gradle-plugin:0.7.3")
@@ -26,4 +28,4 @@ sourceSets {
2628
groovy.setSrcDirs(emptyList<String>())
2729
resources.setSrcDirs(emptyList<String>())
2830
}
29-
}
31+
}

buildSrc/src/main/kotlin/economy-java.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ plugins {
33
}
44

55
group = "com.eternalcode"
6-
version = "1.0.0"
6+
version = "1.0.1-SNAPSHOT"
77

88
java {
99
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
import io.papermc.hangarpublishplugin.model.Platforms
2+
3+
plugins {
4+
id("com.gradleup.shadow")
5+
id("com.modrinth.minotaur")
6+
id("io.papermc.hangar-publish-plugin")
7+
}
8+
9+
val buildNumber = providers.environmentVariable("GITHUB_RUN_NUMBER").orNull
10+
val isRelease = providers.environmentVariable("GITHUB_EVENT_NAME").orNull == "release"
11+
12+
if (buildNumber != null && !isRelease) {
13+
var offset = "0"
14+
15+
try {
16+
val describeResult = providers.exec {
17+
commandLine("git", "describe", "--tags", "--long")
18+
isIgnoreExitValue = true
19+
}
20+
val exitCode = describeResult.result.get().exitValue
21+
22+
if (exitCode == 0) {
23+
val description = describeResult.standardOutput.asText.get().trim()
24+
val parts = description.split("-")
25+
26+
if (parts.size >= 3) {
27+
offset = parts[parts.size - 2]
28+
}
29+
}
30+
}
31+
catch (exception: Exception) {
32+
}
33+
34+
if (offset == "0") {
35+
try {
36+
val revListResult = providers.exec {
37+
commandLine("git", "rev-list", "--count", "HEAD")
38+
isIgnoreExitValue = true
39+
}
40+
41+
if (revListResult.result.get().exitValue == 0) {
42+
offset = revListResult.standardOutput.asText.get().trim()
43+
}
44+
}
45+
catch (exception: Exception) {
46+
}
47+
}
48+
49+
val baseVersion = project.version.toString().replace("-SNAPSHOT", "")
50+
version = "$baseVersion-SNAPSHOT+$offset"
51+
}
52+
53+
val changelogText = providers.environmentVariable("CHANGELOG").orElse(providers.exec {
54+
commandLine("git", "log", "-1", "--format=%B")
55+
isIgnoreExitValue = true
56+
}.standardOutput.asText)
57+
58+
logger.lifecycle("Building version: $version")
59+
60+
val paperVersions = (property("paperVersion") as String)
61+
.split(",")
62+
.map { it.trim() }
63+
64+
val hangarToken = providers.environmentVariable("HANGAR_API_TOKEN")
65+
.orElse(providers.gradleProperty("hangarToken"))
66+
67+
val projectVersion = project.version.toString()
68+
val releaseChannel = if (isRelease) "Release" else "Snapshot"
69+
70+
afterEvaluate {
71+
val shadowJarTask = tasks.named<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>("shadowJar")
72+
73+
modrinth {
74+
token.set(providers.environmentVariable("MODRINTH_TOKEN"))
75+
projectId.set(project.findProperty("modrinthProjectId") as String? ?: project.name)
76+
versionNumber.set(projectVersion)
77+
versionType.set(if (isRelease) "release" else "beta")
78+
uploadFile.set(shadowJarTask)
79+
gameVersions.addAll(paperVersions)
80+
loaders.addAll(listOf("paper", "folia", "purpur"))
81+
changelog.set(changelogText)
82+
83+
val readmeFile = rootProject.file("README.md")
84+
85+
if (readmeFile.exists()) {
86+
syncBodyFrom.set(readmeFile.readText())
87+
}
88+
}
89+
90+
hangarPublish {
91+
publications.register("plugin") {
92+
version.set(projectVersion)
93+
channel.set(releaseChannel)
94+
changelog.set(changelogText)
95+
id.set(project.findProperty("hangarProjectId") as String? ?: project.name)
96+
apiKey.set(hangarToken)
97+
98+
platforms {
99+
register(Platforms.PAPER) {
100+
jar.set(shadowJarTask.flatMap { it.archiveFile })
101+
platformVersions.set(paperVersions)
102+
}
103+
}
104+
}
105+
}
106+
}

eternaleconomy-core/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,18 @@ import net.minecrell.pluginyml.paper.PaperPluginDescription
44
plugins {
55
`economy-java`
66
`economy-repositories`
7+
`economy-publish-plugin`
78

89
id("net.minecrell.plugin-yml.paper")
910
id("com.gradleup.shadow")
1011
id("xyz.jpenilla.run-paper")
1112
id("me.champeau.jmh")
1213
}
1314

15+
ext {
16+
set("modrinthProjectId", "EternalEconomy")
17+
set("hangarProjectId", "EternalEconomy")
18+
}
1419

1520
repositories {
1621
maven {

gradle.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@
44
org.gradle.parallel=true
55
org.gradle.caching=true
66
org.gradle.daemon=true
7+
8+
# Platforms
9+
paperVersion=1.19.4,1.20,1.20.1,1.20.2,1.20.3,1.20.4,1.20.5,1.20.6,1.21,1.21.1,1.21.2,1.21.3,1.21.4,1.21.5,1.21.6,1.21.7,1.21.8,1.21.9,1.21.10,1.21.11,26.1,26.1.1,26.1.2

0 commit comments

Comments
 (0)