|
|
|
|
import com.fasterxml.jackson.core.type.TypeReference
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper
|
|
|
|
|
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
|
|
|
|
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
|
|
|
import java.io.FileInputStream
|
|
|
|
|
|
|
|
|
|
plugins {
|
|
|
|
|
id("org.springframework.boot") version "3.2.2"
|
|
|
|
|
id("io.spring.dependency-management") version "1.1.4"
|
|
|
|
|
kotlin("jvm") version "1.9.22"
|
|
|
|
|
kotlin("plugin.spring") version "1.9.22"
|
|
|
|
|
kotlin("plugin.jpa") version "1.9.22"
|
|
|
|
|
|
|
|
|
|
id("org.liquibase.gradle") version "2.2.1"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
buildscript {
|
|
|
|
|
dependencies {
|
|
|
|
|
classpath("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.16.1")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
group = "com.example"
|
|
|
|
|
version = "0.0.1-SNAPSHOT"
|
|
|
|
|
|
|
|
|
|
java {
|
|
|
|
|
sourceCompatibility = JavaVersion.VERSION_21
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
repositories {
|
|
|
|
|
mavenCentral()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
|
implementation("org.jetbrains.kotlin:kotlin-reflect")
|
|
|
|
|
|
|
|
|
|
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
|
|
|
|
implementation("org.springframework.boot:spring-boot-starter-validation")
|
|
|
|
|
|
|
|
|
|
liquibaseRuntime("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.16.1")
|
|
|
|
|
liquibaseRuntime("org.liquibase:liquibase-core")
|
|
|
|
|
liquibaseRuntime("org.liquibase.ext:liquibase-hibernate6:4.25.1")
|
|
|
|
|
liquibaseRuntime("info.picocli:picocli:4.6.3")
|
|
|
|
|
liquibaseRuntime("com.h2database:h2")
|
|
|
|
|
liquibaseRuntime("org.postgresql:postgresql")
|
|
|
|
|
|
|
|
|
|
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tasks.withType<KotlinCompile> {
|
|
|
|
|
kotlinOptions {
|
|
|
|
|
freeCompilerArgs += "-Xjsr305=strict"
|
|
|
|
|
jvmTarget = "21"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tasks.withType<Test> {
|
|
|
|
|
useJUnitPlatform()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val profile: String by project
|
|
|
|
|
val profileDbConf = getDbConf(profile)
|
|
|
|
|
val referencedProfile: String? by project
|
|
|
|
|
val referencedProfileDbConf = getDbConf(referencedProfile)
|
|
|
|
|
val defaultChangeLogFile: String by project
|
|
|
|
|
|
|
|
|
|
liquibase {
|
|
|
|
|
activities.register(profile) {
|
|
|
|
|
this.arguments = (profileDbConf?.toMap() ?: emptyMap()) +
|
|
|
|
|
(referencedProfileDbConf?.toReferenceMap() ?: emptyMap()) +
|
|
|
|
|
mapOf("changelogFile" to defaultChangeLogFile)
|
|
|
|
|
}
|
|
|
|
|
runList = profile
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
data class DbConf(
|
|
|
|
|
val url: String? = null,
|
|
|
|
|
val username: String? = null,
|
|
|
|
|
val password: String? = null
|
|
|
|
|
) {
|
|
|
|
|
fun toMap(): Map<String, String?> = mapOf(
|
|
|
|
|
"url" to url,
|
|
|
|
|
"username" to username,
|
|
|
|
|
"password" to password
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
fun toReferenceMap(): Map<String, String?> = mapOf(
|
|
|
|
|
"reference-url" to url,
|
|
|
|
|
"reference-username" to username,
|
|
|
|
|
"reference-password" to password
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun getDbConf(profile: String?): DbConf? = profile?.let {
|
|
|
|
|
ObjectMapper(YAMLFactory())
|
|
|
|
|
.readValue(
|
|
|
|
|
FileInputStream(File(projectDir, "db.yaml")),
|
|
|
|
|
object : TypeReference<Map<String, DbConf>>() {}
|
|
|
|
|
)[profile]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tasks.getByName("generateChangelog").doFirst {
|
|
|
|
|
delete(defaultChangeLogFile)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tasks.getByName("diffChangelog").doFirst {
|
|
|
|
|
delete(defaultChangeLogFile)
|
|
|
|
|
}
|