Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
# Used when a commit is tagged and pushed to the repository
# Used when a developer decides to publish a release
# This makes use of caching for faster builds and uploads the resulting artifacts
name: build-tag
name: Release GH+MR+CF
permissions:
contents: write # Needed to publish a GitHub release

on:
push:
tags:
- '*'
workflow_dispatch:
inputs:
platform:
type: choice
description: Platform
options:
- both
- fabric
- neoforge

jobs:
build:
Expand All @@ -19,8 +27,10 @@ jobs:
# bash pattern expansion to grab branch name without slashes
run: ref="${GITHUB_REF#refs/heads/}" && echo "branch=${ref////-}" >> $GITHUB_OUTPUT
id: ref

- name: Checkout sources
uses: actions/checkout@v6

- uses: actions/setup-java@v5
with:
distribution: temurin
Expand All @@ -39,6 +49,13 @@ jobs:
with:
name: sodium-artifacts-${{ steps.ref.outputs.branch }}
path: build/mods/*.jar

- name: Publish Modrinth, Curseforge and Github Releases
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CURSEFORGE_API_KEY: ${{ secrets.CURSEFORGE_API_KEY }}
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
run: ./gradlew publishMods -Pbuild.release=true -Pbuild.release.platform=${{ inputs.platform }}

- name: Publish Tag Release to CaffeineMC Maven
env:
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[ReleaseTag]() is automatically replaced with the release tag, e.g. mc26.1-0.8.9
[MCVersion]() is automatically replaced with the minecraft version, e.g. 26.1
[SodiumVersion]() is automatically replaced with the sodium version, e.g. 0.8.9
Everything above the line is ignored and not included in the changelog. Everything below will be in the
changelog on GitHub, Modrinth and CurseForge.
----------
Sodium [SodiumVersion]() is the first release for Minecraft [MCVersion]().

82 changes: 82 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import me.modmuss50.mpp.ReleaseType
import me.modmuss50.mpp.platforms.curseforge.CurseforgeOptions
import me.modmuss50.mpp.platforms.modrinth.ModrinthOptions
import java.util.Locale

plugins {
id("me.modmuss50.mod-publish-plugin") version("1.1.0")
}

gradle.projectsEvaluated {
publishMods {
if (!project.hasProperty("build.release")) {
return@publishMods println("Publishing is disabled, please use the CI publishing workflow")
}

val releasePlatform: String = project.providers.gradleProperty("build.release.platform").orNull
?: return@publishMods println("build.release.platform must be defined (expected: both, fabric, neoforge)")

val modVersion = BuildConfig.createVersionString(project);

type = when {
modVersion.contains("alpha") -> ReleaseType.ALPHA
modVersion.contains("beta") -> ReleaseType.BETA
else -> ReleaseType.STABLE
}
version = modVersion
changelog = BuildConfig.getChangelog(project)

val curseforgeShared = curseforgeOptions {
accessToken = project.providers.environmentVariable("CURSEFORGE_API_KEY")
projectId = BuildConfig.CURSEFORGE_PROJECT_ID
minecraftVersions.add(BuildConfig.MINECRAFT_VERSION)
}

val modrinthShared = modrinthOptions {
accessToken = project.providers.environmentVariable("MODRINTH_API_KEY")
projectId = BuildConfig.MODRINTH_PROJECT_ID
minecraftVersions.add(BuildConfig.MINECRAFT_VERSION)
}

setupFor("Fabric", releasePlatform, curseforgeShared, modrinthShared)
setupFor("NeoForge", releasePlatform, curseforgeShared, modrinthShared)

github {
accessToken = project.providers.environmentVariable("GITHUB_TOKEN")
repository = "CaffeineMC/sodium"
commitish = BuildConfig.calculateGitHash(project)
tagName = BuildConfig.RELEASE_TAG
file.unset()
file.unsetConvention()

allowEmptyFiles = true
}
}
}

fun me.modmuss50.mpp.ModPublishExtension.setupFor(loaderName: String, releasePlatform: String, curseforgeOptions: Provider<CurseforgeOptions>, modrinthOptions: Provider<ModrinthOptions>) {
val loaderLowercase = loaderName.lowercase(Locale.ROOT)

if (releasePlatform == "both" || releasePlatform == loaderLowercase) {
val jar = project(":$loaderLowercase").tasks.named<Jar>("jar").get().archiveFile

curseforge("curseforge$loaderName") {
Comment thread
jellysquid3 marked this conversation as resolved.
from(curseforgeOptions)

file.set(jar)
displayName = "Sodium ${BuildConfig.MOD_VERSION} for $loaderName ${BuildConfig.MINECRAFT_VERSION}"
modLoaders.add(loaderLowercase)

clientRequired = true
serverRequired = false
}

modrinth("modrinth$loaderName") {
from(modrinthOptions)

file.set(jar)
displayName = "Sodium ${BuildConfig.MOD_VERSION} for $loaderName ${BuildConfig.MINECRAFT_VERSION}"
modLoaders.add(loaderLowercase)
}
}
}
29 changes: 24 additions & 5 deletions buildSrc/src/main/kotlin/BuildConfig.kt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import org.gradle.api.Project
import org.gradle.api.Project

object BuildConfig {
val MINECRAFT_VERSION: String = "26.1.2"
Expand All @@ -7,11 +7,13 @@ object BuildConfig {
val FABRIC_API_VERSION: String = "0.145.4+26.1.2"
val SUPPORT_FRAPI : Boolean = true

// This value can be set to null to disable Parchment.
val PARCHMENT_VERSION: String? = null

// https://semver.org/
var MOD_VERSION: String = "0.8.9"
val MOD_VERSION: String = "0.8.9"

val RELEASE_TAG: String = "mc$MINECRAFT_VERSION-$MOD_VERSION"

val CURSEFORGE_PROJECT_ID = "394468"
val MODRINTH_PROJECT_ID = "AANobbMI"

fun createVersionString(project: Project): String {
val builder = StringBuilder()
Expand All @@ -38,4 +40,21 @@ object BuildConfig {

return builder.toString()
}

fun calculateGitHash(project: Project): String = try {
val output = project.providers.exec {
workingDir(project.projectDir)
commandLine("git", "rev-parse", "HEAD")
}
output.standardOutput.asText.get().trim()
} catch (_: Throwable) {
"unknown"
}

fun getChangelog(project: Project): String = project.rootProject.file("CHANGELOG.md").readText()
.split("----------")[1]
.trim()
.replace("[ReleaseTag]()", RELEASE_TAG)
.replace("[MCVersion]()", MINECRAFT_VERSION)
.replace("[SodiumVersion]()", MOD_VERSION)
}
7 changes: 0 additions & 7 deletions neoforge/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -137,13 +137,6 @@ sourceSets {
neoForge {
version = BuildConfig.NEOFORGE_VERSION

if (BuildConfig.PARCHMENT_VERSION != null) {
parchment {
minecraftVersion = BuildConfig.MINECRAFT_VERSION
mappingsVersion = BuildConfig.PARCHMENT_VERSION
}
}

runs {
create("Client") {
client()
Expand Down