mirror of
https://github.com/apple/pkl.git
synced 2026-07-08 14:05:17 +02:00
7e948d317c
The maven publish plugin isn't setting up dependencies correctly, and we are getting errors like: "Task ':pkl-config-java:publishFatJarPublicationToMavenLocal' uses this output of task ':pkl-config-java:signLibraryPublication' without declaring an explicit or implicit dependency." This adds a workaround for this type of error.
130 lines
4.0 KiB
Kotlin
130 lines
4.0 KiB
Kotlin
import org.gradle.api.publish.maven.tasks.GenerateMavenPom
|
|
import java.nio.charset.StandardCharsets
|
|
import java.util.Base64
|
|
|
|
plugins {
|
|
`maven-publish`
|
|
signing
|
|
}
|
|
|
|
publishing {
|
|
publications {
|
|
components.findByName("java")?.let { javaComponent ->
|
|
create<MavenPublication>("library") {
|
|
from(javaComponent)
|
|
}
|
|
}
|
|
withType<MavenPublication>().configureEach {
|
|
pom {
|
|
name.set(artifactId)
|
|
licenses {
|
|
license {
|
|
name.set("The Apache Software License, Version 2.0")
|
|
url.set("https://github.com/apple/pkl/blob/main/LICENSE.txt")
|
|
}
|
|
}
|
|
developers {
|
|
developer {
|
|
id.set("pkl-authors")
|
|
name.set("The Pkl Authors")
|
|
email.set("pkl-oss@group.apple.com")
|
|
}
|
|
}
|
|
scm {
|
|
connection.set("scm:git:git://github.com/apple/pkl.git")
|
|
developerConnection.set("scm:git:ssh://github.com/apple/pkl.git")
|
|
val buildInfo = project.extensions.getByType<BuildInfo>()
|
|
url.set("https://github.com/apple/pkl/tree/${buildInfo.commitish}")
|
|
}
|
|
issueManagement {
|
|
system.set("GitHub Issues")
|
|
url.set("https://github.com/apple/pkl/issues")
|
|
}
|
|
ciManagement {
|
|
system.set("Circle CI")
|
|
url.set("https://app.circleci.com/pipelines/github/apple/pkl")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
val validatePom by tasks.registering {
|
|
if (tasks.findByName("generatePomFileForLibraryPublication") == null) {
|
|
return@registering
|
|
}
|
|
val generatePomFileForLibraryPublication by tasks.existing(GenerateMavenPom::class)
|
|
val outputFile = layout.buildDirectory.file("validatePom") // dummy output to satisfy up-to-date check
|
|
|
|
dependsOn(generatePomFileForLibraryPublication)
|
|
inputs.file(generatePomFileForLibraryPublication.get().destination)
|
|
outputs.file(outputFile)
|
|
|
|
doLast {
|
|
outputFile.get().asFile.delete()
|
|
|
|
val pomFile = generatePomFileForLibraryPublication.get().destination
|
|
assert(pomFile.exists())
|
|
|
|
val text = pomFile.readText()
|
|
|
|
run {
|
|
val unresolvedVersion = Regex("<version>.*[+,()\\[\\]].*</version>")
|
|
val matches = unresolvedVersion.findAll(text).toList()
|
|
if (matches.isNotEmpty()) {
|
|
throw GradleException(
|
|
"""
|
|
Found unresolved version selector(s) in generated POM:
|
|
${matches.joinToString("\n") { it.groupValues[0] }}
|
|
""".trimIndent()
|
|
)
|
|
}
|
|
}
|
|
|
|
val buildInfo = project.extensions.getByType<BuildInfo>()
|
|
if (buildInfo.isReleaseBuild) {
|
|
val snapshotVersion = Regex("<version>.*-SNAPSHOT</version>")
|
|
val matches = snapshotVersion.findAll(text).toList()
|
|
if (matches.isNotEmpty()) {
|
|
throw GradleException(
|
|
"""
|
|
Found snapshot version(s) in generated POM of Pkl release version:
|
|
${matches.joinToString("\n") { it.groupValues[0] }}
|
|
""".trimIndent()
|
|
)
|
|
}
|
|
}
|
|
|
|
outputFile.get().asFile.writeText("OK")
|
|
}
|
|
}
|
|
|
|
tasks.publish {
|
|
dependsOn(validatePom)
|
|
}
|
|
|
|
// Workaround for maven publish plugin not setting up dependencies correctly.
|
|
// Taken from https://github.com/gradle/gradle/issues/26091#issuecomment-1798137734
|
|
val dependsOnTasks = mutableListOf<String>()
|
|
tasks.withType<AbstractPublishToMaven>().configureEach {
|
|
dependsOnTasks.add(name.replace("publish", "sign").replaceAfter("Publication", ""))
|
|
dependsOn(dependsOnTasks)
|
|
}
|
|
|
|
signing {
|
|
// provided as env vars `ORG_GRADLE_PROJECT_signingKey` and `ORG_GRADLE_PROJECT_signingPassword`
|
|
// in CI.
|
|
val signingKey = (findProperty("signingKey") as String?)
|
|
?.let { Base64.getDecoder().decode(it).toString(StandardCharsets.US_ASCII) }
|
|
val signingPassword = findProperty("signingPassword") as String?
|
|
if (signingKey != null && signingPassword != null) {
|
|
useInMemoryPgpKeys(signingKey, signingPassword)
|
|
}
|
|
publishing.publications.findByName("library")?.let { sign(it) }
|
|
}
|
|
|
|
artifacts {
|
|
project.tasks.findByName("javadocJar")?.let { archives(it) }
|
|
project.tasks.findByName("sourcesJar")?.let { archives(it) }
|
|
}
|