build.gradle.kts (191 lines of code) (raw):

import com.vanniktech.maven.publish.MavenPublishBaseExtension import org.jetbrains.exposed.gradle.configureDetekt import org.jetbrains.exposed.gradle.configureMavenCentralMetadata import org.jetbrains.exposed.gradle.testDb plugins { kotlin("jvm") apply true id(libs.plugins.detekt.get().pluginId) apply true alias(libs.plugins.binary.compatibility.validator) id(libs.plugins.docker.compose.get().pluginId) alias(libs.plugins.dokka) alias(libs.plugins.maven.publish) alias(libs.plugins.kover) } dokka { dokkaPublications.html { outputDirectory.set(project.file("docs/api")) } } dependencies { dokka(projects.exposed.exposedCore) dokka(projects.exposed.exposedCrypt) dokka(projects.exposed.exposedDao) dokka(projects.exposed.exposedJavaTime) dokka(projects.exposed.exposedJdbc) dokka(projects.exposed.exposedJodatime) dokka(projects.exposed.exposedJson) dokka(projects.exposed.exposedKotlinDatetime) dokka(projects.exposed.exposedMigrationCore) dokka(projects.exposed.exposedMigrationJdbc) dokka(projects.exposed.exposedMigrationR2dbc) dokka(projects.exposed.exposedMoney) dokka(projects.exposed.exposedR2dbc) dokka(projects.exposed.exposedSpringBootStarter) dokka(projects.exposed.springTransaction) // Kover aggregated coverage dependencies // Include all source modules for coverage aggregation kover(project(":exposed-core")) kover(project(":exposed-dao")) kover(project(":exposed-jodatime")) kover(project(":exposed-java-time")) kover(project(":spring-transaction")) kover(project(":exposed-spring-boot-starter")) kover(project(":exposed-jdbc")) kover(project(":exposed-money")) kover(project(":exposed-kotlin-datetime")) kover(project(":exposed-crypt")) kover(project(":exposed-json")) kover(project(":exposed-migration-core")) kover(project(":exposed-migration-jdbc")) kover(project(":exposed-migration-r2dbc")) kover(project(":exposed-r2dbc")) // Include test modules to ensure their tests are executed and coverage is collected kover(project(":exposed-tests")) kover(project(":exposed-r2dbc-tests")) } repositories { mavenLocal() mavenCentral() } allprojects { if (this.name != "exposed-tests" && this.name != "exposed-r2dbc-tests" && this.name != "exposed-jdbc-r2dbc-tests" && this != rootProject ) { apply(plugin = "com.vanniktech.maven.publish") apply(plugin = "signing") this@allprojects.mavenPublishing { pom { configureMavenCentralMetadata(this@allprojects) } publishToMavenCentral(automaticRelease = true) signPublicationIfKeyPresent(this@allprojects, this) } } } apiValidation { ignoredProjects.addAll(listOf("exposed-tests", "exposed-bom", "exposed-r2dbc-tests", "exposed-jdbc-r2dbc-tests")) } subprojects { configureDetekt() dependencies { detektPlugins(rootProject.libs.detekt.formatting) } } subprojects { if (name == "exposed-bom") return@subprojects apply(plugin = rootProject.libs.plugins.jvm.get().pluginId) apply(plugin = rootProject.libs.plugins.kover.get().pluginId) testDb("h2_v2") { withContainer = false dialects("H2_V2", "H2_V2_MYSQL", "H2_V2_PSQL", "H2_V2_MARIADB", "H2_V2_ORACLE", "H2_V2_SQLSERVER") dependencies { dependency(rootProject.libs.h2) } } testDb("sqlite") { withContainer = false dialects("SQLITE") dependencies { dependency(rootProject.libs.sqlite.jdbc) } } testDb("mysql_v5") { port = 3001 container = "mysql5" dialects("MYSQL_V5") dependencies { dependency(rootProject.libs.mysql51) } } testDb("mysql_v8") { port = 3002 container = "mysql8" dialects("MYSQL_V8") dependencies { dependency(rootProject.libs.mysql) } } testDb("mariadb") { dialects("MARIADB") container = "mariadb" port = 3000 dependencies { dependency(rootProject.libs.mariadb) } } testDb("oracle") { port = 3003 dialects("ORACLE") dependencies { dependency(rootProject.libs.oracle) } } testDb("postgres") { port = 3004 dialects("POSTGRESQL") dependencies { dependency(rootProject.libs.postgre) } } testDb("postgresNG") { port = 3004 dialects("POSTGRESQLNG") container = "postgres" dependencies { dependency(rootProject.libs.postgre) dependency(rootProject.libs.pgjdbc.ng) } } testDb("sqlserver") { port = 3005 dialects("SQLSERVER") dependencies { dependency(rootProject.libs.mssql) } } } fun signPublicationIfKeyPresent(project: Project, publication: MavenPublishBaseExtension) { val keyId = System.getenv("SIGNING_KEY_ID") val signingKey = System.getenv("SIGNING_KEY") val signingKeyPassphrase = System.getenv("SIGNING_PASSWORD") if (!signingKey.isNullOrBlank()) { println("In-memory GPG key found. Signing artifacts for ${project.path}.") project.extensions.configure<SigningExtension>("signing") { useInMemoryPgpKeys(keyId, preprocessPrivateGpgKey(signingKey), signingKeyPassphrase) publication.signAllPublications() } } } private fun preprocessPrivateGpgKey(key: String): String { val prefix = "-----BEGIN PGP PRIVATE KEY BLOCK-----" val suffix = "-----END PGP PRIVATE KEY BLOCK-----" val delimiter = "\r\n" return prefix + delimiter + key .replace(prefix, "") .replace(suffix, "") .replace(" ", "\r\n") + delimiter + suffix } // Configure Kover for aggregated project coverage kover { reports { total { // Generate HTML report html { onCheck.set(true) } // Generate XML report for CI/CD integration xml { onCheck.set(true) } // Generate verification report verify { onCheck.set(true) } } } }