Skip to content

Commit a75d6b0

Browse files
committed
Add release workflow
1 parent fec2d62 commit a75d6b0

File tree

3 files changed

+145
-67
lines changed

3 files changed

+145
-67
lines changed

.github/workflows/build.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ on:
66
pull_request:
77
branches:
88
- master
9+
create: # for Git tag creations
910

1011
jobs:
1112
compile-cubiomes:
@@ -124,3 +125,48 @@ jobs:
124125
with:
125126
name: SeedMapper
126127
path: build/libs/
128+
129+
# if a Git tag was created, verify it is for a stable version to make a release
130+
validate-tag:
131+
name: Validate tag
132+
needs: build
133+
if: github.ref_type == 'tag'
134+
runs-on: ubuntu-latest
135+
outputs:
136+
valid: ${{ steps.check_tag.outputs.valid }}
137+
steps:
138+
- name: Check tag format
139+
id: check_tag
140+
run: |
141+
TAG="${GITHUB_REF_NAME}"
142+
if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
143+
echo "valid=true" >> $GITHUB_OUTPUT
144+
else
145+
echo "valid=false" >> $GITHUB_OUTPUT
146+
fi
147+
148+
release:
149+
name: Release SeedMapper
150+
needs: validate-tag
151+
if: needs.validate-tag.outputs.valid == 'true'
152+
runs-on: ubuntu-latest
153+
steps:
154+
- name: Checkout repository
155+
uses: actions/checkout@v6
156+
- name: Capture JAR
157+
uses: actions/download-artifact@v8
158+
with:
159+
name: SeedMapper
160+
path: build/libs/
161+
- name: Setup JDK 25
162+
uses: actions/setup-java@v5
163+
with:
164+
java-version: 25
165+
distribution: 'temurin'
166+
- name: Make Gradle wrapper executable
167+
run: chmod +x ./gradlew
168+
- name: Release artifact
169+
env:
170+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
171+
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
172+
run: ./gradlew publishMods --stacktrace

build.gradle

Lines changed: 96 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -3,60 +3,60 @@ import dev.xpple.seedmapper.buildscript.GenerateBuildInfoTask
33
import net.fabricmc.loom.task.prod.ClientProductionRunTask
44

55
plugins {
6-
id 'net.fabricmc.fabric-loom' version "${fabric_loom_version}"
7-
id 'maven-publish'
6+
id 'net.fabricmc.fabric-loom' version "${fabric_loom_version}"
7+
id 'me.modmuss50.mod-publish-plugin' version "${mod_publish_plugin_version}"
88
}
99

1010
version = project.mod_version
1111
group = project.maven_group
1212

1313
base {
14-
archivesName = project.archives_base_name
14+
archivesName = project.archives_base_name
1515
}
1616

1717
loom {
18-
accessWidenerPath = file('src/main/resources/seedmapper.aw')
18+
accessWidenerPath = file('src/main/resources/seedmapper.aw')
1919
}
2020

2121
repositories {
22-
mavenCentral()
23-
maven {
24-
name = 'xpple'
25-
url = 'https://maven.xpple.dev/maven2'
26-
}
27-
maven {
28-
name = 'DJtheRedstoner'
29-
url = 'https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1'
30-
}
31-
maven {
32-
name = 'MeteorDevelopment'
33-
url = 'https://maven.meteordev.org/snapshots'
34-
}
22+
mavenCentral()
23+
maven {
24+
name = 'xpple'
25+
url = 'https://maven.xpple.dev/maven2'
26+
}
27+
maven {
28+
name = 'DJtheRedstoner'
29+
url = 'https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1'
30+
}
31+
maven {
32+
name = 'MeteorDevelopment'
33+
url = 'https://maven.meteordev.org/snapshots'
34+
}
3535
}
3636

3737
dependencies {
38-
minecraft "com.mojang:minecraft:${project.minecraft_version}"
39-
implementation "net.fabricmc:fabric-loader:${project.fabric_loader_version}"
38+
minecraft "com.mojang:minecraft:${project.minecraft_version}"
39+
implementation "net.fabricmc:fabric-loader:${project.fabric_loader_version}"
4040

41-
implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
42-
productionRuntimeMods "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
41+
implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
42+
productionRuntimeMods "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
4343

44-
include implementation("dev.xpple:clientarguments:${project.clientarguments_version}")
45-
include implementation("dev.xpple:betterconfig-fabric:${project.betterconfig_version}")
46-
include implementation("dev.xpple:simplewaypoints:${project.simplewaypoints_version}")
44+
include implementation("dev.xpple:clientarguments:${project.clientarguments_version}")
45+
include implementation("dev.xpple:betterconfig-fabric:${project.betterconfig_version}")
46+
include implementation("dev.xpple:simplewaypoints:${project.simplewaypoints_version}")
4747

48-
runtimeOnly("me.djtheredstoner:DevAuth-fabric:${project.devauth_version}") {
49-
exclude group: 'net.fabricmc', module: 'fabric-loader'
50-
}
51-
productionRuntimeMods("me.djtheredstoner:DevAuth-fabric:${project.devauth_version}") {
52-
exclude group: 'net.fabricmc', module: 'fabric-loader'
53-
}
48+
runtimeOnly("me.djtheredstoner:DevAuth-fabric:${project.devauth_version}") {
49+
exclude group: 'net.fabricmc', module: 'fabric-loader'
50+
}
51+
productionRuntimeMods("me.djtheredstoner:DevAuth-fabric:${project.devauth_version}") {
52+
exclude group: 'net.fabricmc', module: 'fabric-loader'
53+
}
5454

55-
compileOnly "meteordevelopment:baritone:${project.baritone_version}"
55+
compileOnly "meteordevelopment:baritone:${project.baritone_version}"
5656

57-
testImplementation platform("org.junit:junit-bom:${project.junit_version}")
58-
testImplementation 'org.junit.jupiter:junit-jupiter'
59-
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
57+
testImplementation platform("org.junit:junit-bom:${project.junit_version}")
58+
testImplementation 'org.junit.jupiter:junit-jupiter'
59+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
6060
}
6161

6262
clean {
@@ -71,63 +71,92 @@ compileJava.dependsOn('createJavaBindings')
7171
createJavaBindings.dependsOn(clean)
7272

7373
tasks.register('generateBuildInfo', GenerateBuildInfoTask) {
74-
outputFile = new File(temporaryDir, "build_info.json")
74+
outputFile = new File(temporaryDir, "build_info.json")
7575
}
7676

7777
tasks.register("prodClient", ClientProductionRunTask) {
78-
runDir = file("run")
78+
runDir = file("run")
7979

80-
jvmArgs.add("-Ddevauth.enabled=true")
80+
jvmArgs.add("-Ddevauth.enabled=true")
8181

82-
javaLauncher = javaToolchains.launcherFor {
83-
languageVersion = JavaLanguageVersion.of(25)
84-
}
82+
javaLauncher = javaToolchains.launcherFor {
83+
languageVersion = JavaLanguageVersion.of(25)
84+
}
8585
}
8686

8787
processResources {
88-
def props = [version: project.mod_version, minecraft_version_dependency: project.minecraft_version_dependency, loader_version: project.fabric_loader_version]
89-
inputs.properties props
90-
filteringCharset "UTF-8"
88+
def props = [version: project.mod_version, minecraft_version_dependency: project.minecraft_version_dependency, loader_version: project.fabric_loader_version]
89+
inputs.properties props
90+
filteringCharset "UTF-8"
9191

92-
filesMatching("fabric.mod.json") {
93-
expand props
94-
}
92+
filesMatching("fabric.mod.json") {
93+
expand props
94+
}
9595

96-
from("LICENSE") {
97-
rename {"${it}_${project.base.archivesName.get()}"}
98-
}
96+
from("LICENSE") {
97+
rename {"${it}_${project.base.archivesName.get()}"}
98+
}
9999

100-
from("src/main/c/cubiomes/LICENSE") {
101-
rename {"${it}_cubiomes"}
102-
}
100+
from("src/main/c/cubiomes/LICENSE") {
101+
rename {"${it}_cubiomes"}
102+
}
103103

104-
from("src/main/c/cubiomes/loot/LICENSE_loot_library.h.txt")
104+
from("src/main/c/cubiomes/loot/LICENSE_loot_library.h.txt")
105105

106-
from generateBuildInfo
106+
from generateBuildInfo
107107
}
108108

109109
tasks.withType(JavaCompile).configureEach {
110-
it.options.release = 25
110+
it.options.release = 25
111111
}
112112

113113
java {
114-
sourceCompatibility = JavaVersion.VERSION_25
115-
targetCompatibility = JavaVersion.VERSION_25
114+
sourceCompatibility = JavaVersion.VERSION_25
115+
targetCompatibility = JavaVersion.VERSION_25
116116
}
117117

118118
test {
119-
useJUnitPlatform()
119+
useJUnitPlatform()
120120
}
121121

122-
publishing {
123-
publications {
124-
mavenJava(MavenPublication) {
125-
artifactId = project.base.archivesName.get()
126-
from components.java
127-
}
128-
}
122+
publishMods {
123+
def artifactFile = base.getLibsDirectory().file(jar.archiveFileName)
124+
if (!artifactFile.isPresent()) {
125+
logger.lifecycle("Artifact not present!")
126+
return
127+
}
128+
def changeLogText = providers.fileContents(layout.projectDirectory.file("changelog.md")).asText
129+
if (!changeLogText.isPresent()) {
130+
logger.lifecycle("Changelog file not found!")
131+
return
132+
}
129133

130-
repositories {
134+
displayName = "Release ${project.mod_version}"
135+
type = STABLE
136+
modLoaders.add('fabric')
137+
github {
138+
changelog = changeLogText.map {"Download available [on Modrinth](https://modrinth.com/mod/seedmapper/version/${project.mod_version}).\n\n${it}"}
131139

132-
}
140+
repository = 'xpple/SeedMapper'
141+
accessToken = providers.environmentVariable("GITHUB_TOKEN")
142+
commitish = 'master'
143+
tagName = "v${project.mod_version}"
144+
145+
allowEmptyFiles = true
146+
}
147+
modrinth {
148+
file = artifactFile
149+
changelog = changeLogText
150+
151+
projectId = "C4GbEnuY"
152+
accessToken = providers.environmentVariable("MODRINTH_TOKEN")
153+
project.minecraft_version_list.split('\\s*,\\s*').toList().forEach {minecraftVersions.add(it)}
154+
155+
embeds {
156+
slug = 'betterconfig'
157+
}
158+
embeds {
159+
slug = 'simplewaypoints'
160+
}
161+
}
133162
}

gradle.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ archives_base_name=seedmapper
1010
# Minecraft properties
1111
minecraft_version=26.1-rc-2
1212
minecraft_version_dependency=>=26.1-rc.1 <26.2
13+
minecraft_version_list=26.1-rc-2
1314

1415
# Fabric Properties
1516
# check these on https://fabricmc.net/develop
@@ -22,6 +23,8 @@ betterconfig_version=2.6.0
2223
clientarguments_version=1.12.0
2324
simplewaypoints_version=1.3.0
2425

26+
mod_publish_plugin_version=1.1.0
27+
2528
# Optional library dependencies
2629
baritone_version=1.21.11-SNAPSHOT
2730

0 commit comments

Comments
 (0)