Skip to content

Commit

Permalink
[#4] Reuse common properties from NexUsRepository in Task
Browse files Browse the repository at this point in the history
  • Loading branch information
szpak committed Dec 27, 2019
1 parent 092b317 commit 2531bac
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,59 +25,37 @@ import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional
import org.gradle.kotlin.dsl.property
import java.net.URI
import java.time.Duration
import javax.inject.Inject

@Suppress("UnstableApiUsage")
abstract class AbstractNexusStagingRepositoryTask @Inject
constructor(objects: ObjectFactory, extension: NexusPublishExtension, repository: NexusRepository) : DefaultTask() {

@get:Input
protected val serverUrl: Property<URI> = objects.property()

@get:Optional
@get:Input
protected val username: Property<String> = objects.property()

@get:Optional
@get:Input
protected val password: Property<String> = objects.property()

@get:Optional
@get:Input
protected val packageGroup: Property<String> = objects.property()

@get:Optional
@get:Input
protected val stagingProfileId: Property<String> = objects.property()

@get:Input
protected val repositoryName: Property<String> = objects.property()

@get:Internal
protected val clientTimeout: Property<Duration> = objects.property()

@get:Internal
protected val connectTimeout: Property<Duration> = objects.property()

private val repository: Property<NexusRepository> = objects.property()
//TODO: Expose externally as interface with getters only
//@get:Nested //FIXME: @Nested switch values in NexusRepository to state = Final which prevent settings stagingRepositoryId in init task
protected val repository: Property<NexusRepository> = objects.property()

init {
serverUrl.set(repository.nexusUrl)
username.set(repository.username)
password.set(repository.password)
packageGroup.set(extension.packageGroup)
stagingProfileId.set(repository.stagingProfileId)
repositoryName.set(repository.name)
clientTimeout.set(extension.clientTimeout)
connectTimeout.set(extension.connectTimeout)
this.repository.set(repository)
this.onlyIf { extension.useStaging.getOrElse(false) }
}

protected fun determineStagingProfileId(client: NexusClient): String {
var stagingProfileId = stagingProfileId.orNull
var stagingProfileId = repository.get().stagingProfileId.orNull
if (stagingProfileId == null) {
val packageGroup = packageGroup.get()
logger.debug("No stagingProfileId set, querying for packageGroup '{}'", packageGroup)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ constructor(objects: ObjectFactory, extension: NexusPublishExtension, repository

@TaskAction
fun closeStagingRepo() {
val client = NexusClient(serverUrl.get(), username.orNull, password.orNull, clientTimeout.orNull, connectTimeout.orNull)
val client = NexusClient(repository.get().nexusUrl.get(), repository.get().username.orNull, repository.get().password.orNull, clientTimeout.orNull, connectTimeout.orNull)
val stagingProfileId = determineStagingProfileId(client)
logger.info("Closing staging repository with id '{}' for stagingProfileId '{}'", stagingRepositoryId.get(), stagingProfileId)
client.closeStagingRepository(stagingRepositoryId.get())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import org.gradle.api.internal.NamedDomainObjectContainerConfigureDelegate
import org.gradle.util.ConfigureUtil
import java.net.URI

@Suppress("UnstableApiUsage")
internal class DefaultNexusRepositoryContainer(delegate: NamedDomainObjectContainer<NexusRepository>) : NexusRepositoryContainer, NamedDomainObjectContainer<NexusRepository> by delegate {

override fun sonatype(): NexusRepository = sonatype {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ constructor(objects: ObjectFactory, extension: NexusPublishExtension, repository
}

internal fun createStagingRepo(): URI {
return serverUrlToStagingRepoUrl.computeIfAbsent(serverUrl.get()) { serverUrl ->
val client = NexusClient(serverUrl, username.orNull, password.orNull, clientTimeout.orNull, connectTimeout.orNull)
return serverUrlToStagingRepoUrl.computeIfAbsent(repository.get().nexusUrl.get()) { serverUrl ->
val client = NexusClient(serverUrl, repository.get().username.orNull, repository.get().password.orNull, clientTimeout.orNull, connectTimeout.orNull)
val stagingProfileId = determineStagingProfileId(client) // TODO: It would be good to keep/cache value in Extension/Repository
logger.info("Creating staging repository for stagingProfileId '{}'", stagingProfileId)
val stagingRepositoryIdAsString = client.createStagingRepository(stagingProfileId)
Expand All @@ -62,7 +62,7 @@ constructor(objects: ObjectFactory, extension: NexusPublishExtension, repository

private fun replacePublishingRepoUrl(url: URI) {
val publishing = project.the<PublishingExtension>()
val repository = publishing.repositories.getByName(repositoryName.get()) as MavenArtifactRepository
val repository = publishing.repositories.getByName(repository.get().name) as MavenArtifactRepository
logger.info("Updating URL of publishing repository '{}' to '{}'", repository.name, url)
repository.setUrl(url.toString())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,39 @@ package io.github.gradlenexus.publishplugin

import org.gradle.api.Project
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.kotlin.dsl.property
import java.net.URI
import javax.inject.Inject

@Suppress("UnstableApiUsage")
open class NexusRepository @Inject constructor(val name: String, project: Project) {
open class NexusRepository @Inject constructor(@get:Input val name: String, project: Project) {

@get:Input
val nexusUrl: Property<URI> = project.objects.property()

@get:Input
val snapshotRepositoryUrl: Property<URI> = project.objects.property()

@get:Optional
@get:Input
val username: Property<String> = project.objects.property<String>().apply {
set(project.provider { project.findProperty("${name}Username") as? String })
}

@get:Optional
@get:Input
val password: Property<String> = project.objects.property<String>().apply {
set(project.provider { project.findProperty("${name}Password") as? String })
}

@get:Optional
@get:Input
val stagingProfileId: Property<String> = project.objects.property()

@get:Optional
@get:Input
val stagingRepositoryId: Property<String> = project.objects.property()

internal fun capitalizedName(): String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ constructor(objects: ObjectFactory, extension: NexusPublishExtension, repository

@TaskAction
fun releaseStagingRepo() {
val client = NexusClient(serverUrl.get(), username.orNull, password.orNull, clientTimeout.orNull, connectTimeout.orNull)
val client = NexusClient(repository.get().nexusUrl.get(), repository.get().username.orNull, repository.get().password.orNull, clientTimeout.orNull, connectTimeout.orNull)
val stagingProfileId = determineStagingProfileId(client) // TODO: Will it update value in extension?
logger.info("Releasing staging repository with id '{}' for stagingProfileId '{}'", stagingRepositoryId.get(), stagingProfileId)
client.releaseStagingRepository(stagingRepositoryId.get())
Expand Down

0 comments on commit 2531bac

Please sign in to comment.