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
302 changes: 21 additions & 281 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,287 +1,27 @@
import dev.s7a.gradle.minecraft.server.tasks.LaunchMinecraftServerTask
import io.papermc.hangarpublishplugin.HangarPublishTask
import io.papermc.hangarpublishplugin.internal.util.capitalized

plugins {
id("java")
id("idea")
id("org.jetbrains.kotlin.jvm") version "2.3.0"
id("com.gradleup.shadow") version "9.4.1"
id("dev.s7a.gradle.minecraft.server") version "4.0.2"
id("io.insert-koin.compiler.plugin") version "1.0.0-RC1"
id("dev.detekt") version "2.0.0-alpha.2"
id("io.papermc.hangar-publish-plugin") version "0.1.3"
id("com.modrinth.minotaur") version "2.8.7"
id("org.flywaydb.flyway") version "11.10.5"
id("com.github.gmazzo.buildconfig") version "5.6.7"
}

val buildPaperVersion: String by project
val paperVersions: String by project

repositories {
mavenCentral()
maven {
url = uri("https://repo.papermc.io/repository/maven-public/")
}
}

java {
toolchain.languageVersion.set(JavaLanguageVersion.of(25))
}

kotlin {
jvmToolchain(25)
}

val kotlinVersion: String by project
val koinVersion: String by project
val bstatsVersion: String by project
val arrowVersion: String by project
val flywayVersion: String by project
val sqliteVersion: String by project
val mysqlVersion: String by project

buildscript {
dependencies {
classpath("org.flywaydb:flyway-mysql:11.10.5")
}
id("waystones.base")
id("waystones.build-config")
id("waystones.detekt")
id("waystones.shadow")
id("waystones.flyway")
id("waystones.minecraft-server")
id("waystones.hangar-publish")
id("waystones.modrinth-publish")
id("waystones.resource-processing")
}

dependencies {
compileOnly("io.papermc.paper:paper-api:$buildPaperVersion.build.+")
implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
implementation("io.insert-koin:koin-core:$koinVersion")
implementation("io.insert-koin:koin-annotations:$koinVersion")

implementation("org.bstats:bstats-bukkit:$bstatsVersion")
shadow("io.arrow-kt:arrow-core:$arrowVersion")
// Database dependencies
shadow("org.flywaydb:flyway-core:$flywayVersion")
shadow("org.xerial:sqlite-jdbc:$sqliteVersion")
shadow("com.mysql:mysql-connector-j:$mysqlVersion")


detektPlugins("dev.detekt:detekt-rules-ktlint-wrapper:2.0.0-alpha.2")

testImplementation("io.mockk:mockk:1.14.2")
testImplementation("io.kotest:kotest-runner-junit5:5.9.1")
}

buildConfig {
generateAtSync = true
documentation.set("Generated by BuildConfig plugin, do not edit")
packageName("xyz.atrius.waystones.autogenerated")
className("WaystoneDependencyVersions")
useKotlinOutput()
buildConfigField("kotlinVersion", kotlinVersion)
buildConfigField("koinVersion", koinVersion)
buildConfigField("arrowVersion", arrowVersion)
buildConfigField("flywayVersion", flywayVersion)
buildConfigField("sqliteVersion", sqliteVersion)
buildConfigField("mysqlVersion", mysqlVersion)
implementation(libs.kotlin.stdlib)
implementation(libs.koin.core)
implementation(libs.koin.annotations)
implementation(libs.bstats.bukkit)
implementation(libs.arrow.core)
implementation(libs.flyway.core)
implementation(libs.flyway.mysql)
implementation(libs.sqlite.jdbc)
implementation(libs.mysql.connector)
detektPlugins(libs.detekt.ktlint)
testImplementation(libs.mockk)
testImplementation(libs.kotest.runner)
}

flyway {
url = System.getenv("DB_URL")
user = System.getenv("DB_USER")
password = System.getenv("DB_USER_PASSWORD")
locations = arrayOf(
"filesystem:$projectDir/src/main/resources/db/migration/common/**",
"filesystem:$projectDir/src/main/resources/db/migration/${System.getenv("DB_TYPE")}/**",
)
cleanDisabled = false
}

tasks.flywayClean {
notCompatibleWithConfigurationCache("Plugin does not handle this well currently")
}

tasks.flywayValidate {
notCompatibleWithConfigurationCache("Plugin does not handle this well currently")
}

tasks.flywayMigrate {
notCompatibleWithConfigurationCache("Plugin does not handle this well currently")
}

group = "xyz.atrius"
description = "Waystones"

val pluginVersion = "$version-$buildPaperVersion"
val outputProjectName = "${project.name}-$pluginVersion"

tasks.shadowJar {
minimize()
archiveClassifier.set("")
archiveVersion.set(pluginVersion)
val location = project.group.toString()
relocate("kotlin", location)
relocate("org.bstats", location)
}

tasks.withType<Test>().configureEach {
useJUnitPlatform()
}

fun buildProviders(vararg properties: String): Map<String, Provider<Any>> = properties
.associateWith { providers.provider { project.properties[it] } }

tasks.processResources {
val providers = buildProviders(
"version",
"buildPaperVersion",
"pluginApiVersion",
"paperVersions",
"pluginWebsite",
)

// doLast {
filesMatching("paper-plugin.yml") {
expand(providers.mapValues { it.value.get() })
}
// }
}

tasks.build {
delete(
"build/MinecraftServer/plugins/waystones",
"build/MinecraftServer/plugins/$outputProjectName.jar",
"build/libs"
)
}

tasks.register("buildPlugin") {
notCompatibleWithConfigurationCache("Do not cache artifacts")
dependsOn("shadowJar")

doFirst {
copy {
from(rootDir.resolve("build/libs"))
.include("$outputProjectName.jar")
into(rootDir.resolve("build/MinecraftServer/plugins"))
}
}
}

detekt {
autoCorrect = true
buildUponDefaultConfig = true
config.setFrom("$projectDir/config/detekt.yml")
}

tasks.register<LaunchMinecraftServerTask>("testPlugin") {
notCompatibleWithConfigurationCache("Do not cache artifacts")
dependsOn("buildPlugin")
jarUrl.set(LaunchMinecraftServerTask.JarUrl.Paper(buildPaperVersion))
agreeEula.set(true)
}

val gitHash: String by lazy {
providers
.exec { commandLine("git", "rev-parse", "--short", "HEAD") }
.standardOutput
.asText
.map { it.trim() }
.get()
}
val supported = paperVersions
.split(",")
.map { it.trim() }

tasks.withType<HangarPublishTask> {
notCompatibleWithConfigurationCache("Do not cache artifacts")
}

private fun extractChangelog(content: String): String {
val lines = content.split("\n")
var skip = true

if (lines.size == 1) {
return content
}

for (i in lines.indices) {
if (!lines[i].startsWith("## ")) {
continue
}

if (skip) {
skip = false
continue
}

return lines
.subList(0, i)
.joinToString("\n")
.trim()
}

return content
}

hangarPublish {
publications.register("WaystonesRelease") {
version = pluginVersion
id = "waystones"
channel = "Release"
changelog = file("CHANGELOG.md")
.readText()
.let(::extractChangelog)
apiKey = System.getenv("HANGAR_API_TOKEN")

platforms {
paper {
jar = tasks.shadowJar.flatMap { it.archiveFile }
platformVersions = supported
}
}
}

publications.register("WaystonesSnapshot") {
version = "$pluginVersion-SNAPSHOT+$gitHash"
id = "waystones"
channel = "Snapshot"
changelog = "${project.name.capitalized()} Dev Snapshot [$gitHash]"
apiKey = System.getenv("HANGAR_API_TOKEN")

platforms {
paper {
jar = tasks.shadowJar.flatMap { it.archiveFile }
platformVersions = supported
}
}
}
}

tasks.modrinth {
notCompatibleWithConfigurationCache("Do not cache artifacts")
}

modrinth {
val channel = System
.getenv("MODRINTH_PUBLISH_CHANNEL")
?: "alpha"

when (channel) {
"release" -> {
versionNumber = pluginVersion
changelog = file("CHANGELOG.md")
.readText()
.let(::extractChangelog)
}

else -> {
versionNumber = "$pluginVersion-SNAPSHOT+$gitHash"
changelog = "${project.name.capitalized()} Dev Snapshot [$gitHash]"
}
}
// Common values
token = System.getenv("MODRINTH_TOKEN")
projectId = "atri-waystones"
versionName = "${project.name.capitalized()} $pluginVersion"
uploadFile.set(tasks.shadowJar)
gameVersions = supported
loaders = listOf("paper")
versionType = channel
}
20 changes: 20 additions & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
plugins {
`kotlin-dsl`
}

fun DependencyHandlerScope.plugin(plugin: Provider<PluginDependency>) =
plugin.map { "${it.pluginId}:${it.pluginId}.gradle.plugin:${it.version.requiredVersion}" }

dependencies {
implementation(plugin(libs.plugins.kotlin.jvm))
implementation(plugin(libs.plugins.koin.compiler))
implementation(plugin(libs.plugins.shadow))
implementation(plugin(libs.plugins.minecraft.server))
implementation(plugin(libs.plugins.detekt))
implementation(plugin(libs.plugins.hangar))
implementation(plugin(libs.plugins.modrinth))
implementation(plugin(libs.plugins.flyway))
implementation(plugin(libs.plugins.buildconfig))

implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
}
14 changes: 14 additions & 0 deletions buildSrc/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
dependencyResolutionManagement {
repositories {
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://plugins.gradle.org/m2/")
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}

rootProject.name = "buildSrc"
Loading
Loading