-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbuild.gradle.kts
More file actions
105 lines (90 loc) · 3.31 KB
/
build.gradle.kts
File metadata and controls
105 lines (90 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import com.vanniktech.maven.publish.MavenPublishBaseExtension
import com.vanniktech.maven.publish.SonatypeHost
import helpers.configureMavenCentralMetadata
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import kotlin.io.encoding.ExperimentalEncodingApi
val kotlinJvmTarget: String by project
val projectGroup: String by project
val projectVersion: String by project
plugins {
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.maven.publish) apply false
}
subprojects {
if (projectGroup.isBlank() || projectVersion.isBlank()) {
throw GradleException("Project group and version must be defined in gradle.properties")
}
group = projectGroup
version = projectVersion
apply(plugin = "org.jetbrains.kotlin.jvm")
apply(plugin = "com.vanniktech.maven.publish")
apply(plugin = "signing")
pluginManager.withPlugin("com.vanniktech.maven.publish") {
pluginManager.withPlugin("signing") {
extensions.configure<MavenPublishBaseExtension> {
publishToMavenCentral(
SonatypeHost.CENTRAL_PORTAL,
automaticRelease = true
)
signIfKeyPresent(this@subprojects)
pom {
configureMavenCentralMetadata(this@subprojects)
}
}
}
}
plugins.withType<JavaPlugin>().configureEach {
extensions.configure<JavaPluginExtension> {
toolchain {
languageVersion.set(JavaLanguageVersion.of(kotlinJvmTarget))
vendor.set(JvmVendorSpec.AMAZON)
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}
}
plugins.withId("org.jetbrains.kotlin.jvm") {
extensions.configure<KotlinJvmProjectExtension> {
jvmToolchain(kotlinJvmTarget.toInt())
}
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = kotlinJvmTarget
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
}
fun MavenPublishBaseExtension.signIfKeyPresent(project: Project) {
val keyId = System.getenv("SIGNING_KEY_ID")
val signingKey = System.getenv("SIGNING_KEY")
val signingKeyPassphrase = System.getenv("SIGNING_KEY_PASSPHRASE")
if (!signingKey.isNullOrBlank()) {
project.logger.info("Signing artifacts with in-memory PGP key for ${project.path}")
project.extensions.configure<SigningExtension>("signing") {
useInMemoryPgpKeys(keyId, preprocessPrivateGpgKey(signingKey), signingKeyPassphrase)
signAllPublications()
}
} else {
project.logger.warn("Skipping signing of artifacts: PGP key or password not found in environment variables for ${project.path}")
}
}
private fun preprocessPrivateGpgKey(key: String): String {
val prefix = "-----BEGIN PGP PRIVATE KEY BLOCK-----"
val suffix = "-----END PGP PRIVATE KEY BLOCK-----"
val body = key
.replace(prefix, "")
.replace(suffix, "")
.replace("\\n", "\n")
.trim()
return "$prefix\n\n$body\n$suffix"
}
tasks.register("printVersion") {
doLast {
println(projectVersion)
}
}