Skip to content

Commit

Permalink
Several changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
Deftu committed Jan 18, 2024
1 parent 5696747 commit b9cb0eb
Show file tree
Hide file tree
Showing 9 changed files with 75 additions and 7 deletions.
5 changes: 3 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ dependencies {

// Architectury Loom
implementation("gg.essential:architectury-loom:1.3.12")
implementation("dev.architectury:architectury-pack200:0.1.3")

// Preprocessing/multi-versioning
implementation("dev.deftu:preprocessor:0.4.2")
Expand All @@ -49,8 +50,8 @@ dependencies {
implementation("net.kyori:blossom:1.3.1")

// Publishing
implementation("com.modrinth.minotaur:Minotaur:2.8.2")
implementation("net.darkhax.curseforgegradle:CurseForgeGradle:1.1.16")
implementation("com.modrinth.minotaur:Minotaur:2.8.7")
implementation("net.darkhax.curseforgegradle:CurseForgeGradle:1.1.17")
implementation("com.github.breadmoirai:github-release:2.4.1")
}

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ kotlin.code.style=official

# Project properties
project.name=gradle-toolkit
project.version=1.22.0
project.version=1.22.3
project.group=dev.deftu.gradle
2 changes: 1 addition & 1 deletion src/main/kotlin/dev/deftu/gradle/GameInfo.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.deftu.gradle

object GameInfo {
const val FABRIC_LOADER_VERSION = "0.15.1"
const val FABRIC_LOADER_VERSION = "0.15.2"
const val FABRIC_LANGUAGE_KOTLIN_VERSION = "1.7.4+kotlin.1.6.21"

private val fabricApiVersions: Map<Int, String> = mapOf(
Expand Down
25 changes: 22 additions & 3 deletions src/main/kotlin/dev/deftu/gradle/ToolkitExtension.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package dev.deftu.gradle

import dev.deftu.gradle.utils.Constants
import org.gradle.api.Project
import dev.deftu.gradle.utils.DependencyHelper
import org.jetbrains.kotlin.gradle.utils.projectCacheDir
import java.io.File

@Suppress("unused")
abstract class ToolkitExtension(
Expand All @@ -15,7 +18,14 @@ abstract class ToolkitExtension(

val mcData = MCData.from(project)
val loaderDependency = "gg.essential:" + if (mcData.isForge) "loader-launchwrapper" else "loader-fabric"
val loaderVersion = DependencyHelper.fetchLatestRelease(repo, loaderDependency)

val cacheDir = File(project.gradle.projectCacheDir, ".essential-version-cache").apply { mkdirs() }
val globalCacheDir = File(Constants.dir, ".essential-version-cache").apply { mkdirs() }

val cachedLoaderFilename = "${mcData.versionStr}-${mcData.loader.name}-LOADER.txt"
val loaderVersion = DependencyHelper.fetchLatestReleaseOrCached(repo, loaderDependency, cacheDir.resolve(cachedLoaderFilename)) ?:
DependencyHelper.fetchLatestReleaseOrCached(repo, loaderDependency, globalCacheDir.resolve(cachedLoaderFilename)) ?:
throw IllegalStateException("Failed to fetch latest Essential loader version.")

if (mcData.isFabric) {
// JiJ (Jar-in-Jar) the loader
Expand All @@ -27,8 +37,11 @@ abstract class ToolkitExtension(
if (!usingShadow) project.logger.warn("It is recommended to use DGT Shadow to embed the Essential loader inside your built mod JAR.")
}

val cachedApiFilename = "${mcData.versionStr}-${mcData.loader.name}-API.txt"
val apiDependency = "gg.essential:essential-${mcData.versionStr}-${mcData.loader.name}"
val apiVersion = DependencyHelper.fetchLatestRelease(repo, apiDependency)
val apiVersion = DependencyHelper.fetchLatestReleaseOrCached(repo, apiDependency, cacheDir.resolve(cachedApiFilename)) ?:
DependencyHelper.fetchLatestReleaseOrCached(repo, apiDependency, globalCacheDir.resolve(cachedApiFilename)) ?:
throw IllegalStateException("Failed to fetch latest Essential API version.")
project.dependencies.add("compileOnly", "$apiDependency:$apiVersion")
}

Expand All @@ -39,9 +52,15 @@ abstract class ToolkitExtension(
}

val mcData = MCData.from(project)

val cacheDir = File(project.gradle.projectCacheDir, ".devauth-version-cache").apply { mkdirs() }
val globalCacheDir = File(Constants.dir, ".devauth-version-cache").apply { mkdirs() }

val module = if (mcData.isFabric) "fabric" else if (mcData.isForge && mcData.version <= 11202) "forge-legacy" else "forge-latest"
val dependency = "me.djtheredstoner:DevAuth-$module"
val version = DependencyHelper.fetchLatestRelease(repo, dependency)
val version = DependencyHelper.fetchLatestReleaseOrCached(repo, dependency, cacheDir.resolve("$module.txt")) ?:
DependencyHelper.fetchLatestReleaseOrCached(repo, dependency, globalCacheDir.resolve("$module.txt")) ?:
throw IllegalStateException("Failed to fetch latest DevAuth version.")
project.dependencies.add("modRuntimeOnly", "$dependency:$version")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,11 @@ abstract class PublishingCurseForgeExtension {
abstract val projectId: Property<String>
abstract val relations: ListProperty<CurseRelation>
abstract val changelogType: Property<String>
abstract val debug: Property<Boolean>

init {
changelogType.convention("text")
debug.convention(false)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ loom {
isIdeConfigGenerated = true
}
}

if (mcData.isLegacyForge) {
forge {
pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter())
}
}
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ fun setupCurseForge(apiKey: String) {
val publishToCurseForge by tasks.registering(TaskPublishCurseForge::class) {
group = "publishing"
this.apiToken = apiKey
this.debugMode = extension.curseforge.debug.getOrElse(false)

upload(projectId, extension.getUploadFile()).apply {
disableVersionDetection()
Expand Down
4 changes: 4 additions & 0 deletions src/main/kotlin/dev/deftu/gradle/utils/Constants.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package dev.deftu.gradle.utils

import java.io.File

object Constants {
val debug: Boolean
get() = System.getProperty("dgt.debug", "false").toBoolean()
val dir: File
get() = File(System.getenv("DGT_DIR") ?: File(System.getProperty("user.home"), ".dgt").absolutePath)
}
34 changes: 34 additions & 0 deletions src/main/kotlin/dev/deftu/gradle/utils/DependencyHelper.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.deftu.gradle.utils

import java.io.File
import java.net.URL

object DependencyHelper {
Expand All @@ -19,4 +20,37 @@ object DependencyHelper {
if (group.size != 2) throw IllegalArgumentException("Dependency must be in format group:artifact")
return fetchLatestRelease(repository, group[0], group[1])
}

fun fetchLatestReleaseOrCached(
repository: String,
group: String,
artifact: String,
file: File
): String? {
val content = try {
val url = "$repository/${group.replace('.', '/')}/$artifact/maven-metadata.xml"
val response = URL(url).readText()
if (Constants.debug) println("DependencyHelper#fetchLatestRelease:\n$response")

if (!file.exists()) file.createNewFile()
file.writeText(response)

response
} catch (e: Exception) {
if (file.exists()) file.readText() else null
} ?: return null

val match = latestReleaseRegex.find(content)
return match!!.groupValues[1]
}

fun fetchLatestReleaseOrCached(
repository: String,
dependency: String,
file: File
): String? {
val group = dependency.split(":")
if (group.size != 2) throw IllegalArgumentException("Dependency must be in format group:artifact")
return fetchLatestReleaseOrCached(repository, group[0], group[1], file)
}
}

0 comments on commit b9cb0eb

Please sign in to comment.