Skip to content

Commit

Permalink
Publish mod from Gradle
Browse files Browse the repository at this point in the history
  • Loading branch information
Erdragh committed May 27, 2024
1 parent cc889fd commit fe29aa2
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 132 deletions.
136 changes: 12 additions & 124 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,142 +16,30 @@ permissions:

jobs:
build:
strategy:
matrix:
# Use these Java versions
java: [
17, # Current Java LTS & minimum supported by Minecraft
]
# and run on Linux
os: [ ubuntu-latest ]

runs-on: ${{ matrix.os }}
runs-on: ubuntu-latest
steps:
- name: checkout repository
uses: actions/checkout@v4

- name: setup jdk ${{ matrix.java }}
- name: setup jdk 21
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
java-version: 21
distribution: 'temurin'

- name: Build with Gradle
uses: gradle/gradle-build-action@v2
with:
arguments: build

- name: Prepare Changelog
run: ./gradlew -q prepareChangelog > prepared_changelog.md

- name: Capture Fabric Artifacts
if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS
uses: actions/upload-artifact@v4
with:
name: build-fabric
path: fabric/build/libs
- name: Capture Neo Artifacts
if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS
uses: actions/upload-artifact@v4
with:
name: build-neo
path: neoforge/build/libs
- name: Capture Changelog
if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS
uses: actions/upload-artifact@v4
with:
name: build-changelog
path: prepared_changelog.md

publish:
if: ${{ github.event.inputs.publish }}
needs:
- build
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Download Fabric artifacts
uses: actions/download-artifact@v4
with:
path: build/fabric
pattern: build-fabric
merge-multiple: true
- name: Download Neo artifacts
uses: actions/download-artifact@v4
with:
path: build/neo
pattern: build-neo
merge-multiple: true
- name: Download Changelog
uses: actions/download-artifact@v4
with:
path: .
pattern: build-changelog

- name: List build artifacts
run: ls -R build
- name: Show Changelog
run: cat build-changelog/prepared_changelog.md

- name: Get Version and Platform
id: properties
uses: christian-draeger/[email protected]
with:
path: "./gradle.properties"
properties: "version enabledPlatforms minecraftVersion"

- name: Upload Neo Releases (Curse/Modrinth)
id: neo_release
if: contains(steps.properties.outputs.enabledPlatforms, 'neoforge')
uses: Kir-Antipov/[email protected]
with:
curseforge-id: ${{ vars.CURSE_ID }}
curseforge-token: ${{ secrets.CURSE_TOKEN }}

modrinth-id: ${{ vars.MODRINTH_ID }}
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}

files: ./build/forge/!(*-@(dev|sources|dev-shadow)).jar
name: "AstralBot ${{ steps.properties.outputs.version }} NeoForge ${{ steps.properties.output.minecraftVersion }}"
version: ${{ steps.properties.outputs.version }}
version-type: release
changelog-file: build-changelog/prepared_changelog.md
loaders: forge
game-versions: ${{ steps.properties.outputs.minecraftVersion }}

curseforge-dependencies: |
kotlin-for-forge(required)
forge-config-api-port-fabric(required)
modrinth-dependencies: |
kotlin-for-forge(required)
forge-config-api-port(required)
- name: Publish with Gradle
if: ${{ github.event.inputs.publish }}
uses: gradle/gradle-build-action@v2
env:
MODRINTH_TOKEN: ${{secrets.MODRINTH_TOKEN}}
CURSEFORGE_TOKEN: ${{secrets.CURSE_TOKEN}}

- name: Upload Fabric Releases (Curse/Modrinth)
id: fabric_release
if: contains(steps.properties.outputs.enabledPlatforms, 'fabric')
uses: Kir-Antipov/[email protected]
MODRINTH_ID: ${{vars.MODRINTH_ID}}
CURSEFORGE_ID: ${{vars.CURSE_ID}}
with:
curseforge-id: ${{ vars.CURSE_ID }}
curseforge-token: ${{ secrets.CURSE_TOKEN }}

modrinth-id: ${{ vars.MODRINTH_ID }}
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}

files: ./build/fabric/!(*-@(dev|sources|dev-shadow)).jar
name: "AstralBot ${{ steps.properties.outputs.version }} Fabric ${{ steps.properties.output.minecraftVersion }}"
version: ${{ steps.properties.outputs.version }}
version-type: release
changelog-file: build-changelog/prepared_changelog.md
loaders: fabric
game-versions: ${{ steps.properties.outputs.minecraftVersion }}

curseforge-dependencies: |
fabric-api(required)
fabric-language-kotlin(required)
forge-config-api-port-fabric(required)
modrinth-dependencies: |
fabric-api(required)
fabric-language-kotlin(required)
forge-config-api-port(required)
arguments: publishMods
File renamed without changes.
55 changes: 47 additions & 8 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,12 @@ plugins {
java
// Required for NeoGradle
id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.7"
// For publishing the mod
id("me.modmuss50.mod-publish-plugin") version "0.5.1"
}

val minecraftVersion: String by project

repositories {
mavenCentral()
}
Expand All @@ -26,10 +30,10 @@ subprojects {
apply(plugin = "java")
apply(plugin = "kotlin")
apply(plugin = "org.jetbrains.dokka")
apply(plugin = "me.modmuss50.mod-publish-plugin")

// Gets some values from the gradle.properties files in the
// sub- and root projects
val minecraftVersion: String by project
val modLoader = project.name
val modId: String by project
val modName = rootProject.name
Expand Down Expand Up @@ -209,19 +213,54 @@ subprojects {
targetCompatibility = JavaVersion.VERSION_17.majorVersion
sourceCompatibility = JavaVersion.VERSION_17.majorVersion
}

// Publishing settings
publishMods {
// These titles get used based on subproject name
val titles by extra {
mapOf(
"fabric" to "Fabric",
"neoforge" to "NeoForge",
"forge" to "Forge",
"quilt" to "Quilt"
)
}
val curseforgePublish by extra {
curseforgeOptions {
accessToken = providers.environmentVariable("CURSEFORGE_TOKEN")
minecraftVersions.add(minecraftVersion)
projectId = providers.environmentVariable("CURSEFORGE_ID")
embeds("sqlite-jdbc")
}
}
val modrinthPublish by extra {
modrinthOptions {
accessToken = providers.environmentVariable("MODRINTH_TOKEN")
minecraftVersions.add(minecraftVersion)
projectId = providers.environmentVariable("MODRINTH_ID")
embeds("sqlite-jdbc")
}
}
val changelog by extra {
// Only gets the lines for the latest version from the Changelog
// file. This allows me to keep all previous changes in the file
// without having to worry about them being included on new file
// uploads.
File("CHANGELOG.md")
.readText(StandardCharsets.UTF_8)
.replace(Regex("[^^](#(#|\\n|.)+)|(^#.+)"), "")
.trim()
}
val type by extra {
STABLE
}
}
}

kotlin {
jvmToolchain(17)
}

tasks.register<Task>("prepareChangelog") {
group = "common"
description = "Prepares the changelog by removing irrelevant parts from Changelog.md"
var changelog = File("Changelog.md").readText(StandardCharsets.UTF_8)
changelog = changelog.replace(Regex("[^^](#(#|\\n|.)+)|(^#.+)"), "")
println(changelog.trim())
}

// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
idea {
Expand Down
35 changes: 35 additions & 0 deletions fabric/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import me.modmuss50.mpp.ReleaseType
import me.modmuss50.mpp.platforms.curseforge.CurseforgeOptions
import me.modmuss50.mpp.platforms.modrinth.ModrinthOptions
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
Expand All @@ -7,6 +10,7 @@ plugins {
`maven-publish`
id("fabric-loom") version "1.6-SNAPSHOT"
id("io.github.goooler.shadow")
id("me.modmuss50.mod-publish-plugin")
}

val modId: String by project
Expand Down Expand Up @@ -115,4 +119,35 @@ publishing {
repositories {
maven("file://${System.getenv("local_maven")}")
}
}

publishMods {
val minecraftVersion: String by project
val title: String by project
val version: String by project

val titles: Map<String, String> by extra
val curseforgePublish: Provider<CurseforgeOptions> by extra
val modrinthPublish: Provider<ModrinthOptions> by extra

changelog = extra.get("changelog") as String
type = extra.get("type") as ReleaseType

curseforge("curseFabric") {
from(curseforgePublish)
modLoaders.add(project.name)
file.set(tasks.remapJar.get().archiveFile)
displayName = "$title $version ${titles[project.name]} $minecraftVersion"
this.version = "$version-mc$minecraftVersion-${project.name}"
requires("fabric-language-kotlin", "forge-config-api-port-fabric", "fabric-api")
}

modrinth("modrinthFabric") {
from(modrinthPublish)
modLoaders.add(project.name)
file.set(tasks.remapJar.get().archiveFile)
displayName = "$title $version ${titles[project.name]} $minecraftVersion"
this.version = "$version-mc$minecraftVersion-${project.name}"
requires("fabric-language-kotlin", "forge-config-api-port-fabric", "fabric-api")
}
}
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ modId=astralbot
modAuthor=Erdragh

license=MIT
title=AstralBot
description=Discord Bot and Minecraft Mod in one bundle.
credits=Erdragh

Expand Down
34 changes: 34 additions & 0 deletions neoforge/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import me.modmuss50.mpp.ReleaseType
import me.modmuss50.mpp.platforms.curseforge.CurseforgeOptions
import me.modmuss50.mpp.platforms.modrinth.ModrinthOptions
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
Expand Down Expand Up @@ -134,4 +137,35 @@ publishing {
repositories {
maven("file://${System.getenv("local_maven")}")
}
}

publishMods {
val minecraftVersion: String by project
val title: String by project
val version: String by project

val titles: Map<String, String> by extra
val curseforgePublish: Provider<CurseforgeOptions> by extra
val modrinthPublish: Provider<ModrinthOptions> by extra

changelog = extra.get("changelog") as String
type = extra.get("type") as ReleaseType

curseforge("curseNeo") {
from(curseforgePublish)
modLoaders.add(project.name)
file.set(tasks.jarJar.get().archiveFile)
displayName = "$title $version ${titles[project.name]} $minecraftVersion"
this.version = "$version-mc$minecraftVersion-${project.name}"
requires("kotlin-for-forge")
}

modrinth("modrinthNeo") {
from(modrinthPublish)
modLoaders.add(project.name)
file.set(tasks.jarJar.get().archiveFile)
displayName = "$title $version ${titles[project.name]} $minecraftVersion"
this.version = "$version-mc$minecraftVersion-${project.name}"
requires("kotlin-for-forge")
}
}

0 comments on commit fe29aa2

Please sign in to comment.