Skip to content

Commit 5c689f1

Browse files
committed
WIP: Helper to get effective ASF project metadata
1 parent 6a74201 commit 5c689f1

File tree

2 files changed

+73
-35
lines changed

2 files changed

+73
-35
lines changed

build-logic/src/main/kotlin/publishing/PublishingHelperExtension.kt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@
1919

2020
package publishing
2121

22+
import asf.AsfProject
2223
import java.io.File
2324
import javax.inject.Inject
2425
import org.gradle.api.Project
2526
import org.gradle.api.model.ObjectFactory
27+
import org.gradle.api.provider.Provider
28+
import org.gradle.internal.extensions.stdlib.capitalized
2629
import org.gradle.kotlin.dsl.property
2730

2831
/**
@@ -83,3 +86,53 @@ constructor(objectFactory: ObjectFactory, project: Project) {
8386
fun distributionFile(ext: String): File =
8487
distributionDir.get().file("${baseName.get()}.$ext").asFile
8588
}
89+
90+
/**
91+
* Provides the effective values for an ASF project using the ASF project metadata from `AsfProject`
92+
* with overrides from `PublishingHelperExtension`.
93+
*/
94+
class EffectiveAsfProject(val pubExt: PublishingHelperExtension, val asfProject: AsfProject) {
95+
fun githubRepoName(): Provider<String> = pubExt.githubRepositoryName.orElse(asfProject.apacheId)
96+
97+
fun tagPrefix(): Provider<String> =
98+
pubExt.overrideTagPrefix.orElse("apache-${asfProject.apacheId}")
99+
100+
fun issueTracker(): Provider<String> {
101+
val issuesUrl: Provider<String> =
102+
codeRepoUrl().map { r -> "$r/issues" }.orElse(asfProject.bugDatabase)
103+
return pubExt.overrideIssueManagement.orElse(issuesUrl)
104+
}
105+
106+
fun codeRepoUrl(): Provider<String> =
107+
pubExt.overrideScm.orElse(
108+
githubRepoName().map { r -> "https://github.com/apache/$r" }.orElse(asfProject.repository)
109+
)
110+
111+
fun fullName() = pubExt.overrideName.orElse("Apache ${asfProject.name}")
112+
113+
fun description() = pubExt.overrideDescription.orElse(asfProject.description)
114+
115+
fun projectUrl() = pubExt.overrideProjectUrl.orElse(asfProject.website)
116+
117+
fun mailingList(id: String) = MailingList(id, asfProject.apacheId)
118+
119+
companion object {
120+
fun forProject(project: Project): EffectiveAsfProject {
121+
val e = project.extensions.getByType(PublishingHelperExtension::class.java)
122+
val asfProject = AsfProject.memoized(project, e.asfProjectId.get())
123+
return EffectiveAsfProject(e, asfProject)
124+
}
125+
}
126+
}
127+
128+
class MailingList(val id: String, private val prj: String) {
129+
fun name(): String = "${id.capitalized()} Mailing List"
130+
131+
fun subscribe(): String = "$id-subscribe@$prj.apache.org"
132+
133+
fun unsubscribe(): String = "$id-unsubscribe@$prj.apache.org"
134+
135+
fun post(): String = "$id@$prj.apache.org"
136+
137+
fun archive(): String = "https://lists.apache.org/list.html?$id@$prj.apache.org"
138+
}

build-logic/src/main/kotlin/publishing/configurePom.kt

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,11 @@
1919

2020
package publishing
2121

22-
import asf.AsfProject
2322
import groovy.util.Node
2423
import org.gradle.api.Project
2524
import org.gradle.api.Task
2625
import org.gradle.api.artifacts.component.ModuleComponentSelector
27-
import org.gradle.api.provider.Provider
2826
import org.gradle.api.publish.maven.MavenPublication
29-
import org.gradle.internal.extensions.stdlib.capitalized
3027

3128
/**
3229
* Configures the content of the generated `pom.xml` files.
@@ -47,8 +44,6 @@ import org.gradle.internal.extensions.stdlib.capitalized
4744
*/
4845
internal fun configurePom(project: Project, mavenPublication: MavenPublication, task: Task) =
4946
mavenPublication.run {
50-
val e = project.extensions.getByType(PublishingHelperExtension::class.java)
51-
5247
pom {
5348
if (project != project.rootProject) {
5449
// Add the license to every pom to make it easier for downstream projects to retrieve the
@@ -75,9 +70,9 @@ internal fun configurePom(project: Project, mavenPublication: MavenPublication,
7570

7671
task.doFirst {
7772
mavenPom.run {
73+
val prj = EffectiveAsfProject.forProject(project)
7874
val gitInfo = GitInfo.memoized(project)
79-
val asfProject = AsfProject.memoized(project, e.asfProjectId.get())
80-
val asfProjectId = asfProject.apacheId
75+
val asfProjectId = prj.asfProject.apacheId
8176

8277
organization {
8378
name.set("The Apache Software Foundation")
@@ -97,47 +92,37 @@ internal fun configurePom(project: Project, mavenPublication: MavenPublication,
9792
}
9893
}
9994
mailingLists {
100-
e.mailingLists.get().forEach { ml ->
101-
mailingList {
102-
name.set("${ml.capitalized()} Mailing List")
103-
subscribe.set("$ml-subscribe@$asfProjectId.apache.org")
104-
unsubscribe.set("$ml-unsubscribe@$asfProjectId.apache.org")
105-
post.set("$ml@$asfProjectId.apache.org")
106-
archive.set("https://lists.apache.org/list.html?$ml@$asfProjectId.apache.org")
95+
prj.pubExt.mailingLists
96+
.get()
97+
.map { id -> prj.mailingList(id) }
98+
.forEach { ml ->
99+
mailingList {
100+
name.set(ml.name())
101+
subscribe.set(ml.subscribe())
102+
unsubscribe.set(ml.unsubscribe())
103+
post.set(ml.post())
104+
archive.set(ml.archive())
105+
}
107106
}
108-
}
109107
}
110108

111-
val githubRepoName: Provider<String> = e.githubRepositoryName.orElse(asfProjectId)
112-
val codeRepo: Provider<String> =
113-
e.overrideScm.orElse(
114-
githubRepoName
115-
.map { r -> "https://github.com/apache/$r" }
116-
.orElse(asfProject.repository)
117-
)
118-
119109
scm {
120-
val codeRepoString: String = codeRepo.get()
110+
val codeRepoString: String = prj.codeRepoUrl().get()
121111
connection.set("scm:git:$codeRepoString")
122112
developerConnection.set("scm:git:$codeRepoString")
123113
url.set("$codeRepoString/tree/main")
124114
val version = project.version.toString()
125115
if (!version.endsWith("-SNAPSHOT")) {
126-
val tagPrefix: String =
127-
e.overrideTagPrefix.orElse("apache-${asfProject.apacheId}").get()
116+
val tagPrefix: String = prj.tagPrefix().get()
128117
tag.set("$tagPrefix-$version")
129118
}
130119
}
131-
issueManagement {
132-
val issuesUrl: Provider<String> =
133-
codeRepo.map { r -> "$r/issues" }.orElse(asfProject.bugDatabase)
134-
url.set(e.overrideIssueManagement.orElse(issuesUrl))
135-
}
120+
issueManagement { url.set(prj.issueTracker()) }
136121

137-
name.set(e.overrideName.orElse("Apache ${asfProject.name}"))
138-
description.set(e.overrideDescription.orElse(asfProject.description))
139-
url.set(e.overrideProjectUrl.orElse(asfProject.website))
140-
inceptionYear.set(asfProject.inceptionYear.toString())
122+
name.set(prj.fullName())
123+
description.set(prj.description())
124+
url.set(prj.projectUrl())
125+
inceptionYear.set(prj.asfProject.inceptionYear.toString())
141126

142127
developers { developer { url.set("https://$asfProjectId.apache.org/community/") } }
143128
}

0 commit comments

Comments
 (0)