diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 2aa4b34..9dc3fae 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -33,4 +33,4 @@ jobs: docker run --env CURSEFORGE_API_TOKEN=${{ secrets.CURSEFORGE_API_TOKEN }} luckyblock - ./gradlew :tools:uploadToCurseForge + ./gradlew :tools:cli --args="upload-to-curseforge ../dist/${releaseName}-${releaseVersion}" diff --git a/tools/build.gradle.kts b/tools/build.gradle.kts index 6a2f791..18920f3 100644 --- a/tools/build.gradle.kts +++ b/tools/build.gradle.kts @@ -41,14 +41,9 @@ application { mainClass.set("mod.lucky.tools.MainKt") } -tasks.register("uploadToCurseForge") { +tasks.register("cli") { classpath = fileTree("$rootDir/tools/build/install/tools/lib") mainClass.set("mod.lucky.tools.MainKt") - args = listOf( - "upload-to-curseforge", - "--inputDistFolder", - "../dist" - ) dependsOn("installDist") } diff --git a/tools/src/main/kotlin/uploadToCurseForge/LuckyBlockDist.kt b/tools/src/main/kotlin/uploadToCurseForge/LuckyBlockDist.kt index 2c1fdd5..fde0c9c 100644 --- a/tools/src/main/kotlin/uploadToCurseForge/LuckyBlockDist.kt +++ b/tools/src/main/kotlin/uploadToCurseForge/LuckyBlockDist.kt @@ -51,20 +51,19 @@ data class LuckyBlockDist( val jarFile: File, ) -fun readLuckyBlockDists(distFolder: File): List { - return distFolder.listFiles()!!.mapNotNull { distVersionFolder -> - val loader = when { - distVersionFolder.isDirectory && distVersionFolder.name.startsWith("lucky-block-forge") -> - LuckyBlockLoader.FORGE - distVersionFolder.isDirectory && distVersionFolder.name.startsWith("lucky-block-fabric") -> - LuckyBlockLoader.FABRIC - else -> null - } - if (loader != null) { - val metaText = distVersionFolder.resolve("meta.yaml").readText() - val meta = Yaml.default.decodeFromString(metaText) - val jarFile = distVersionFolder.resolve("${distVersionFolder.name}.jar") - LuckyBlockDist(loader=loader, meta=meta, jarFile=jarFile) - } else null +fun readLuckyBlockDist(distFolder: File): LuckyBlockDist { + val distFolderName = distFolder.relativeTo(distFolder.parentFile).name + val loader = when { + distFolder.isDirectory && distFolderName.startsWith("lucky-block-forge") -> + LuckyBlockLoader.FORGE + distFolder.isDirectory && distFolderName.startsWith("lucky-block-fabric") -> + LuckyBlockLoader.FABRIC + else -> throw Exception("Invalid folder name $distFolderName") } + + val metaText = distFolder.resolve("meta.yaml").readText() + val meta = Yaml.default.decodeFromString(metaText) + val jarFile = distFolder.resolve("${distFolder.name}.jar") + + return LuckyBlockDist(loader=loader, meta=meta, jarFile=jarFile) } diff --git a/tools/src/main/kotlin/uploadToCurseForge/UploadToCurseForge.kt b/tools/src/main/kotlin/uploadToCurseForge/UploadToCurseForge.kt index a474617..e4be127 100644 --- a/tools/src/main/kotlin/uploadToCurseForge/UploadToCurseForge.kt +++ b/tools/src/main/kotlin/uploadToCurseForge/UploadToCurseForge.kt @@ -6,7 +6,6 @@ import kotlinx.cli.* import kotlinx.coroutines.runBlocking import java.io.File import io.github.cdimascio.dotenv.dotenv -import io.github.g00fy2.versioncompare.Version as ComparableVersion fun findCompatibleGameVersions( gameVersions: List, @@ -45,23 +44,21 @@ fun uploadToCurseForge( curseForgeClient: CurseForgeClient, inputDistFolder: File ) = runBlocking { - val luckyBlockDists = readLuckyBlockDists(inputDistFolder).sortedBy { ComparableVersion(it.meta.version) } + val luckyBlockDist = readLuckyBlockDist(inputDistFolder) val gameVersions = curseForgeClient.getGameVersions() - luckyBlockDists.forEach { luckyBlockDist -> - val compatibleGameVersions = findCompatibleGameVersions(gameVersions, luckyBlockDist) - val uploadMeta = CurseForgeUploadMetadata( - changelog = "", - displayName = luckyBlockDist.jarFile.nameWithoutExtension, - gameVersions = compatibleGameVersions.map { it.id }, - releaseType = "release", - ) - curseForgeClient.uploadDist(luckyBlockDist.jarFile, uploadMeta) - } + val compatibleGameVersions = findCompatibleGameVersions(gameVersions, luckyBlockDist) + val uploadMeta = CurseForgeUploadMetadata( + changelog = "", + displayName = luckyBlockDist.jarFile.nameWithoutExtension, + gameVersions = compatibleGameVersions.map { it.id }, + releaseType = "release", + ) + curseForgeClient.uploadDist(luckyBlockDist.jarFile, uploadMeta) } class UploadToCurseForge: Subcommand("upload-to-curseforge", "Upload mod files to CurseForge") { - val inputDistFolder by option(ArgType.String, description = "Folder containing mod files").default("./dist") + private val inputDistFolder by argument(ArgType.String, description = "Folder containing mod distrubution file") override fun execute() = runBlocking { val dotenv = dotenv {