Skip to content

Commit 535705a

Browse files
TWiStErRobszpak
andauthored
Gradle 6.2 as minimum (#251)
* Bump minimum version to Gradle 6.1 * Use build service all the way (Gradle 6.1) * Bump minimum version to Gradle 6.2 * Use providers.gradleProperty (Gradle 6.2) * forUseAtConfigurationTime compatibility * Use full plugin name in error message Co-authored-by: Róbert Papp <[email protected]> --------- Co-authored-by: Marcin Zajączkowski <[email protected]>
1 parent a17b85a commit 535705a

File tree

7 files changed

+62
-41
lines changed

7 files changed

+62
-41
lines changed

.github/workflows/java-versions.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
- name: Reduce number of Gradle regressions builds
3030
run: |
3131
# Keep only the last Gradle version per Stutter matrix; for each line this transformation is done:
32-
# java11=6.0.1,6.9.4,7.0.2,7.6.1,8.0.2,8.1.1,8.2-rc-1
32+
# java11=6.2.2,6.9.4,7.0.2,7.6.1,8.0.2,8.1.1,8.2-rc-1
3333
# ->
3434
# java11=8.2-rc-1
3535
# The trick is that \2 will greedily eat everything before the last comma.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ This plugin is intended as a replacement of the [Gradle Nexus Staging Plugin](ht
1212

1313
### Applying the plugin
1414

15-
The plugin must be applied to the root project and requires Gradle 6.0 or later. It is important to
15+
The plugin must be applied to the root project and requires Gradle 6.2 or later. It is important to
1616
set the group and the version to the root project, so the plugin can detect if it is a snapshot
1717
version or not in order to select the correct repository where artifacts will be published.
1818

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,15 @@ stutter {
109109
languageVersion = JavaLanguageVersion.of(8)
110110
}
111111
gradleVersions {
112-
compatibleRange("6.0")
112+
compatibleRange("6.2")
113113
}
114114
}
115115
register("java11") {
116116
javaToolchain {
117117
languageVersion = JavaLanguageVersion.of(11)
118118
}
119119
gradleVersions {
120-
compatibleRange("6.0")
120+
compatibleRange("6.2")
121121
}
122122
}
123123
register("java17") {
@@ -164,7 +164,7 @@ sourceSets {
164164
}
165165

166166
kotlin.target.compilations.configureEach {
167-
// Supporting Gradle 6.0+ needs to use Kotlin 1.3.
167+
// Supporting Gradle 6.2+ needs to use Kotlin 1.3.
168168
// See https://docs.gradle.org/current/userguide/compatibility.html
169169
// For future maintainer: Kotlin 1.9.0 dropped support for Kotlin 1.3, it'll only support 1.4+.
170170
// This means Gradle 7.0 will be the lowest supportable version for plugins.

src/main/kotlin/io/github/gradlenexus/publishplugin/FindStagingRepository.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package io.github.gradlenexus.publishplugin
1818

19-
import io.github.gradlenexus.publishplugin.internal.InvalidatingStagingRepositoryDescriptorRegistry
19+
import io.github.gradlenexus.publishplugin.internal.StagingRepositoryDescriptorRegistryBuildService
2020
import io.github.gradlenexus.publishplugin.internal.determineStagingProfileId
2121
import org.gradle.api.Incubating
2222
import org.gradle.api.provider.Property
@@ -29,7 +29,8 @@ import org.gradle.api.tasks.TaskAction
2929
abstract class FindStagingRepository : AbstractNexusStagingRepositoryTask() {
3030

3131
@get:Internal
32-
abstract val registry: Property<InvalidatingStagingRepositoryDescriptorRegistry>
32+
// TODO use @ServiceReference instead of @Internal when minimum is Gradle 8.0.
33+
abstract val registry: Property<StagingRepositoryDescriptorRegistryBuildService>
3334

3435
@get:Optional
3536
@get:Input
@@ -58,6 +59,6 @@ abstract class FindStagingRepository : AbstractNexusStagingRepositoryTask() {
5859
val descriptor = client.findStagingRepository(stagingProfileId, Regex(descriptionRegex))
5960
logger.lifecycle("Staging repository for {} at {}, stagingProfileId '{}', descriptionRegex '{}' is '{}'", repository.name, serverUrl, stagingProfileId, descriptionRegex, descriptor.stagingRepositoryId)
6061
stagingRepositoryId.set(descriptor.stagingRepositoryId)
61-
registry.get()[repository.name] = descriptor
62+
registry.get().registry[repository.name] = descriptor
6263
}
6364
}

src/main/kotlin/io/github/gradlenexus/publishplugin/InitializeNexusStagingRepository.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package io.github.gradlenexus.publishplugin
1818

19-
import io.github.gradlenexus.publishplugin.internal.InvalidatingStagingRepositoryDescriptorRegistry
19+
import io.github.gradlenexus.publishplugin.internal.StagingRepositoryDescriptorRegistryBuildService
2020
import io.github.gradlenexus.publishplugin.internal.determineStagingProfileId
2121
import okhttp3.HttpUrl
2222
import org.gradle.api.provider.Property
@@ -28,7 +28,8 @@ import org.gradle.api.tasks.TaskAction
2828
abstract class InitializeNexusStagingRepository : AbstractNexusStagingRepositoryTask() {
2929

3030
@get:Internal
31-
abstract val registry: Property<InvalidatingStagingRepositoryDescriptorRegistry>
31+
// TODO use @ServiceReference instead of @Internal when minimum is Gradle 8.0.
32+
abstract val registry: Property<StagingRepositoryDescriptorRegistryBuildService>
3233

3334
@get:Optional
3435
@get:Input
@@ -44,6 +45,6 @@ abstract class InitializeNexusStagingRepository : AbstractNexusStagingRepository
4445
val descriptor = client.createStagingRepository(stagingProfileId, repositoryDescription.get())
4546
val consumerUrl = HttpUrl.get(serverUrl)!!.newBuilder().addEncodedPathSegments("repositories/${descriptor.stagingRepositoryId}/content/").build()
4647
logger.lifecycle("Created staging repository '{}' at {}", descriptor.stagingRepositoryId, consumerUrl)
47-
registry.get()[repository.name] = descriptor
48+
registry.get().registry[repository.name] = descriptor
4849
}
4950
}

src/main/kotlin/io/github/gradlenexus/publishplugin/NexusPublishPlugin.kt

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package io.github.gradlenexus.publishplugin
1818

1919
import io.github.gradlenexus.publishplugin.NexusRepository.PublicationType
20-
import io.github.gradlenexus.publishplugin.internal.InvalidatingStagingRepositoryDescriptorRegistry
2120
import io.github.gradlenexus.publishplugin.internal.StagingRepositoryDescriptorRegistryBuildService
2221
import org.gradle.api.Action
2322
import org.gradle.api.Plugin
@@ -54,8 +53,8 @@ class NexusPublishPlugin : Plugin<Project> {
5453
"Plugin must be applied to the root project but was applied to ${project.path}"
5554
}
5655

57-
require(GradleVersion.current() >= GradleVersion.version("6.0")) {
58-
"The plugin requires Gradle version 6.0+"
56+
require(GradleVersion.current() >= GradleVersion.version("6.2")) {
57+
"io.github.gradle-nexus.publish-plugin requires Gradle version 6.2+"
5958
}
6059

6160
val registry = createRegistry(project)
@@ -78,19 +77,18 @@ class NexusPublishPlugin : Plugin<Project> {
7877
}
7978
}
8079

81-
private fun createRegistry(rootProject: Project): Provider<InvalidatingStagingRepositoryDescriptorRegistry> {
82-
if (GradleVersion.current() >= GradleVersion.version("6.1")) {
83-
return rootProject.gradle.sharedServices.registerIfAbsent(
84-
"stagingRepositoryUrlRegistry",
85-
StagingRepositoryDescriptorRegistryBuildService::class,
86-
Action { }
87-
).map { it.registry }
88-
}
89-
val registry = InvalidatingStagingRepositoryDescriptorRegistry()
90-
return rootProject.provider { registry }
91-
}
80+
private fun createRegistry(rootProject: Project): Provider<StagingRepositoryDescriptorRegistryBuildService> =
81+
rootProject.gradle.sharedServices.registerIfAbsent(
82+
"stagingRepositoryUrlRegistry",
83+
StagingRepositoryDescriptorRegistryBuildService::class,
84+
Action { }
85+
)
9286

93-
private fun configureNexusTasks(rootProject: Project, extension: NexusPublishExtension, registry: Provider<InvalidatingStagingRepositoryDescriptorRegistry>) {
87+
private fun configureNexusTasks(
88+
rootProject: Project,
89+
extension: NexusPublishExtension,
90+
registryService: Provider<StagingRepositoryDescriptorRegistryBuildService>
91+
) {
9492
rootProject.tasks.withType(AbstractNexusStagingRepositoryTask::class.java).configureEach {
9593
clientTimeout.convention(extension.clientTimeout)
9694
connectTimeout.convention(extension.connectTimeout)
@@ -100,13 +98,14 @@ class NexusPublishPlugin : Plugin<Project> {
10098
}
10199
rootProject.tasks.withType(AbstractTransitionNexusStagingRepositoryTask::class.java).configureEach {
102100
transitionCheckOptions.convention(extension.transitionCheckOptions)
103-
stagingRepositoryId.convention(registry.map { it[repository.get().name].stagingRepositoryId })
101+
usesService(registryService)
102+
stagingRepositoryId.convention(registryService.map { it.registry[repository.get().name].stagingRepositoryId })
104103
}
105104
extension.repositories.all {
106-
username.convention(rootProject.provider { rootProject.findProperty("${name}Username") as? String })
107-
password.convention(rootProject.provider { rootProject.findProperty("${name}Password") as? String })
105+
username.convention(rootProject.providers.gradleProperty("${name}Username").forUseAtConfigurationTimeCompat())
106+
password.convention(rootProject.providers.gradleProperty("${name}Password").forUseAtConfigurationTimeCompat())
108107
publicationType.convention(PublicationType.MAVEN)
109-
configureRepositoryTasks(rootProject.tasks, extension, this, registry)
108+
configureRepositoryTasks(rootProject.tasks, extension, this, registryService)
110109
}
111110
extension.repositories.whenObjectRemoved {
112111
rootProject.tasks.named("initialize${capitalizedName}StagingRepository").configure {
@@ -136,7 +135,7 @@ class NexusPublishPlugin : Plugin<Project> {
136135
tasks: TaskContainer,
137136
extension: NexusPublishExtension,
138137
repo: NexusRepository,
139-
registryProvider: Provider<InvalidatingStagingRepositoryDescriptorRegistry>
138+
registryService: Provider<StagingRepositoryDescriptorRegistryBuildService>
140139
) {
141140
@Suppress("UNUSED_VARIABLE") // Keep it consistent.
142141
val retrieveStagingProfileTask = tasks.register<RetrieveStagingProfile>(
@@ -154,7 +153,8 @@ class NexusPublishPlugin : Plugin<Project> {
154153
) {
155154
group = PublishingPlugin.PUBLISH_TASK_GROUP
156155
description = "Initializes the staging repository in '${repo.name}' Nexus instance."
157-
registry.set(registryProvider)
156+
registry.set(registryService)
157+
usesService(registryService)
158158
repository.convention(repo)
159159
packageGroup.convention(extension.packageGroup)
160160
}
@@ -163,7 +163,8 @@ class NexusPublishPlugin : Plugin<Project> {
163163
) {
164164
group = PublishingPlugin.PUBLISH_TASK_GROUP
165165
description = "Finds the staging repository for ${repo.name}"
166-
registry.set(registryProvider)
166+
registry.set(registryService)
167+
usesService(registryService)
167168
repository.convention(repo)
168169
packageGroup.convention(extension.packageGroup)
169170
descriptionRegex.convention(extension.repositoryDescription.map { "\\b" + Regex.escape(it) + "(\\s|$)" })
@@ -203,7 +204,11 @@ class NexusPublishPlugin : Plugin<Project> {
203204
}
204205
}
205206

206-
private fun configurePublishingForAllProjects(rootProject: Project, extension: NexusPublishExtension, registry: Provider<InvalidatingStagingRepositoryDescriptorRegistry>) {
207+
private fun configurePublishingForAllProjects(
208+
rootProject: Project,
209+
extension: NexusPublishExtension,
210+
registry: Provider<StagingRepositoryDescriptorRegistryBuildService>
211+
) {
207212
rootProject.afterEvaluate {
208213
allprojects {
209214
val publishingProject = this
@@ -242,7 +247,7 @@ class NexusPublishPlugin : Plugin<Project> {
242247
private fun addPublicationRepositories(
243248
project: Project,
244249
extension: NexusPublishExtension,
245-
registry: Provider<InvalidatingStagingRepositoryDescriptorRegistry>
250+
registry: Provider<StagingRepositoryDescriptorRegistryBuildService>
246251
): Map<NexusRepository, ArtifactRepository> = extension.repositories.associateWith { nexusRepo ->
247252
createArtifactRepository(nexusRepo.publicationType.get(), project, nexusRepo, extension, registry)
248253
}
@@ -252,7 +257,7 @@ class NexusPublishPlugin : Plugin<Project> {
252257
project: Project,
253258
nexusRepo: NexusRepository,
254259
extension: NexusPublishExtension,
255-
registry: Provider<InvalidatingStagingRepositoryDescriptorRegistry>
260+
registry: Provider<StagingRepositoryDescriptorRegistryBuildService>
256261
): ArtifactRepository = when (publicationType) {
257262
PublicationType.MAVEN -> project.theExtension<PublishingExtension>().repositories.maven {
258263
configureArtifactRepo(nexusRepo, extension, registry, false)
@@ -271,7 +276,7 @@ class NexusPublishPlugin : Plugin<Project> {
271276
private fun <T> T.configureArtifactRepo(
272277
nexusRepo: NexusRepository,
273278
extension: NexusPublishExtension,
274-
registry: Provider<InvalidatingStagingRepositoryDescriptorRegistry>,
279+
registry: Provider<StagingRepositoryDescriptorRegistryBuildService>,
275280
provideFallback: Boolean
276281
) where T : UrlArtifactRepository, T : ArtifactRepository, T : AuthenticationSupported {
277282
name = nexusRepo.name
@@ -327,13 +332,13 @@ class NexusPublishPlugin : Plugin<Project> {
327332
private fun getRepoUrl(
328333
nexusRepo: NexusRepository,
329334
extension: NexusPublishExtension,
330-
registry: Provider<InvalidatingStagingRepositoryDescriptorRegistry>,
335+
registry: Provider<StagingRepositoryDescriptorRegistryBuildService>,
331336
provideFallback: Boolean,
332337
artifactRepo: ArtifactRepository
333338
): Provider<URI> =
334339
extension.useStaging.flatMap { useStaging ->
335340
if (useStaging) {
336-
registry.map { descriptorRegistry ->
341+
registry.map { it.registry }.map { descriptorRegistry ->
337342
if (provideFallback) {
338343
descriptorRegistry.invalidateLater(nexusRepo.name, artifactRepo)
339344
descriptorRegistry.tryGet(nexusRepo.name)?.stagingRepositoryUrl ?: nexusRepo.nexusUrl.get()
@@ -375,3 +380,17 @@ private inline fun <reified T : Any> Project.theExtension(): T =
375380
this.extensions.findByType(it)
376381
?: error("The plugin cannot be applied without the publishing plugin")
377382
}
383+
384+
private fun <T> Provider<T>.forUseAtConfigurationTimeCompat(): Provider<T> =
385+
if (GradleVersion.current() < GradleVersion.version("6.5")) {
386+
// Gradle < 6.5 doesn't have this function.
387+
this
388+
} else if (GradleVersion.current() < GradleVersion.version("7.4")) {
389+
// Gradle 6.5 - 7.3 requires this function to be called.
390+
@Suppress("DEPRECATION")
391+
this.forUseAtConfigurationTime()
392+
} else {
393+
// Gradle >= 7.4 deprecated this function in favor of not calling it (became no-op, and will eventually nag).
394+
// https://docs.gradle.org/current/userguide/upgrading_version_7.html#for_use_at_configuration_time_deprecation
395+
this
396+
}

stutter.lockfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# DO NOT MODIFY: Generated by Stutter plugin.
2-
java11=6.0.1,6.9.4,7.0.2,7.6.2,8.0.2,8.2.1
2+
java11=6.2.2,6.9.4,7.0.2,7.6.2,8.0.2,8.2.1
33
java17=7.3.3,7.6.2,8.0.2,8.2.1
4-
java8=6.0.1,6.9.4,7.0.2,7.6.2,8.0.2,8.2.1
4+
java8=6.2.2,6.9.4,7.0.2,7.6.2,8.0.2,8.2.1

0 commit comments

Comments
 (0)