diff --git a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/BaseGettextTask.kt b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/BaseGettextTask.kt index b6494981..b40e527b 100644 --- a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/BaseGettextTask.kt +++ b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/BaseGettextTask.kt @@ -17,6 +17,7 @@ package com.github.vlsi.gradle.gettext import org.gradle.api.DefaultTask +import org.gradle.api.file.FileSystemOperations import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.Input import org.gradle.kotlin.dsl.property @@ -31,4 +32,7 @@ abstract class BaseGettextTask @Inject constructor( @get:Inject protected abstract val execOperations: ExecOperations + + @get:Inject + protected abstract val fileSystemOperations: FileSystemOperations } diff --git a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/GettextTask.kt b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/GettextTask.kt index 2e7eaf25..f421c32c 100644 --- a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/GettextTask.kt +++ b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/GettextTask.kt @@ -16,6 +16,8 @@ */ package com.github.vlsi.gradle.gettext +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.ProjectLayout import org.gradle.api.file.RegularFileProperty import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.IgnoreEmptyDirectories @@ -32,6 +34,7 @@ import org.gradle.kotlin.dsl.setProperty import javax.inject.Inject abstract class GettextTask @Inject constructor( + layout: ProjectLayout, objects: ObjectFactory ) : BaseGettextEditTask(objects) { @Input @@ -55,20 +58,24 @@ abstract class GettextTask @Inject constructor( @OutputFile val outputPot = objects.fileProperty() - .convention(project.layout.buildDirectory.file("gettext/$name/messages.pot")) + .convention(layout.buildDirectory.file("gettext/$name/messages.pot")) @get:Internal protected abstract val inputFilesList: RegularFileProperty + @get:Internal + protected abstract val projectDir: DirectoryProperty + init { executable.convention("xgettext") - inputFilesList.set(project.layout.buildDirectory.file("gettext/$name/input_files.txt")) + inputFilesList.set(layout.buildDirectory.file("gettext/$name/input_files.txt")) + projectDir.set(layout.projectDirectory) } @TaskAction fun run() { val inputFilesList = this.inputFilesList.get().asFile - val baseDir = project.projectDir + val baseDir = projectDir.get().asFile inputFilesList.writer().buffered().use { f -> sourceFiles.files.forEach { f.append(it.relativeTo(baseDir).path).append(System.lineSeparator()) diff --git a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgAttribTask.kt b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgAttribTask.kt index 9a1664f3..16086dc6 100644 --- a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgAttribTask.kt +++ b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgAttribTask.kt @@ -16,6 +16,7 @@ */ package com.github.vlsi.gradle.gettext +import org.gradle.api.file.FileSystemOperations import org.gradle.api.file.FileType import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.Input @@ -63,7 +64,9 @@ abstract class MsgAttribTask @Inject constructor( val outFile = File(outDir, po.file.name) if (po.changeType == ChangeType.REMOVED) { logger.debug("Removing output {}", outFile) - project.delete(outFile) + fileSystemOperations.delete { + delete(outFile) + } continue } logger.debug("Processing {} with {} {}", po.file, cmd, arg) diff --git a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgFmtTask.kt b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgFmtTask.kt index 316add3d..aed8f2d6 100644 --- a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgFmtTask.kt +++ b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgFmtTask.kt @@ -37,7 +37,7 @@ import java.nio.charset.Charset import javax.inject.Inject abstract class MsgFmtTask @Inject constructor( - objects: ObjectFactory + objects: ObjectFactory, ) : BaseGettextTask(objects) { @InputFiles @Incremental @@ -96,11 +96,15 @@ abstract class MsgFmtTask @Inject constructor( val outFile = File(outDir, outputName) if (po.changeType == ChangeType.REMOVED) { logger.debug("Removing output {}", outFile) - project.delete(outFile) + fileSystemOperations.delete { + delete(outFile) + } continue } logger.debug("Processing {} with {} {}", po.file, cmd, arg) - project.delete(tmpDir) + fileSystemOperations.delete { + delete(tmpDir) + } tmpDir.mkdirs() execOperations.exec { executable = cmd diff --git a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgMergeTask.kt b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgMergeTask.kt index bd5c1988..6d300031 100644 --- a/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgMergeTask.kt +++ b/plugins/gettext-plugin/src/main/kotlin/com/github/vlsi/gradle/gettext/MsgMergeTask.kt @@ -68,7 +68,9 @@ abstract class MsgMergeTask @Inject constructor( val outFile = File(outDir, po.file.name) if (po.changeType == ChangeType.REMOVED) { logger.debug("Removing output {}", outFile) - project.delete(outFile) + fileSystemOperations.delete { + delete(outFile) + } continue } logger.debug("Processing {} with {} {}", po.file, cmd, arg) diff --git a/plugins/license-gather-plugin/src/main/kotlin/com/github/vlsi/gradle/license/GatherLicenseTask.kt b/plugins/license-gather-plugin/src/main/kotlin/com/github/vlsi/gradle/license/GatherLicenseTask.kt index afbed426..1ee2c993 100644 --- a/plugins/license-gather-plugin/src/main/kotlin/com/github/vlsi/gradle/license/GatherLicenseTask.kt +++ b/plugins/license-gather-plugin/src/main/kotlin/com/github/vlsi/gradle/license/GatherLicenseTask.kt @@ -34,6 +34,8 @@ import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.component.ComponentIdentifier import org.gradle.api.artifacts.component.ModuleComponentIdentifier import org.gradle.api.artifacts.component.ProjectComponentIdentifier +import org.gradle.api.file.FileSystemOperations +import org.gradle.api.file.ProjectLayout import org.gradle.api.internal.artifacts.DefaultModuleIdentifier import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Provider @@ -97,8 +99,10 @@ enum class ErrorLanguage { KOTLIN, GROOVY, ENGLISH } -open class GatherLicenseTask @Inject constructor( - objectFactory: ObjectFactory, +abstract class GatherLicenseTask @Inject constructor( + layout: ProjectLayout, + private val objectFactory: ObjectFactory, + private val fileSystemOperations: FileSystemOperations, private val workerExecutor: WorkerExecutor ) : DefaultTask() { init { @@ -169,14 +173,14 @@ open class GatherLicenseTask @Inject constructor( @OutputDirectory val licenseDir = objectFactory.directoryProperty().convention( - project.layout.buildDirectory.dir("licenses/$name") + layout.buildDirectory.dir("licenses/$name") ) @InputFiles @Optional @PathSensitive(PathSensitivity.RELATIVE) val extraLicenseDir = objectFactory.directoryProperty().convention( - project.layout.projectDirectory.dir("licenses") + layout.projectDirectory.dir("licenses") ) // Used in test @@ -445,7 +449,9 @@ open class GatherLicenseTask @Inject constructor( val outDir = outDirectoryName + if (outDirectoryName.endsWith(".jar")) ".contents" else "" val artLicenseTexts = File(licenseTextDir, outDir) if (artLicenseTexts.isDirectory) { - project.delete(artLicenseTexts) + fileSystemOperations.delete { + delete(artLicenseTexts) + } } val licenseOverride = licenseOverrides[compId] @@ -470,7 +476,7 @@ open class GatherLicenseTask @Inject constructor( } if (licenseFiles != null) { - project.copy { + fileSystemOperations.copy { into(artLicenseTexts) from(licenseFiles) } @@ -582,7 +588,7 @@ open class GatherLicenseTask @Inject constructor( continue } val bestLicenses = - project.fileTree(licenseDir) { + objectFactory.fileTree().from(licenseDir).matching { include("**") }.flatMap { f -> // For each file take best 5 predictions diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/DefaultGitTask.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/DefaultGitTask.kt index 9afb57c8..2f3b8bb4 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/DefaultGitTask.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/DefaultGitTask.kt @@ -20,28 +20,42 @@ import com.github.vlsi.gradle.release.jgit.dsl.useRun import org.ajoberstar.grgit.Grgit import org.eclipse.jgit.api.Git import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.ProjectLayout +import org.gradle.api.provider.Property import org.gradle.api.tasks.Internal -import org.gradle.kotlin.dsl.property +import javax.inject.Inject abstract class DefaultGitTask : DefaultTask() { - @Internal - val repository = project.objects.property() + @get:Inject + protected abstract val layout: ProjectLayout - @Internal - val repositoryLocation = project.objects.directoryProperty() - .convention(project.layout.buildDirectory.dir(repository.map { it.name })) + @get:Internal + abstract val repository: Property + + @get:Internal + abstract val repositoryLocation: DirectoryProperty + + @get:Internal + abstract val rootDir: DirectoryProperty + + @get:Internal + protected val grgit = project.property("grgit") as Grgit init { // Never up to date outputs.upToDateWhen { false } + repositoryLocation.convention( + layout.buildDirectory.dir(repository.map { it.name }) + ) + rootDir.set(project.rootProject.layout.projectDirectory) } protected fun jgit(action: Git.() -> R): R { val location = repositoryLocation.get().asFile - if (location != project.rootDir) { + if (location != rootDir.get().asFile) { return Git.open(location).useRun(action) } - val grgit = project.property("grgit") as Grgit return grgit.repository.jgit.use(action) } } diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitCommitAndPush.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitCommitAndPush.kt index 97536126..990456bb 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitCommitAndPush.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitCommitAndPush.kt @@ -18,13 +18,14 @@ package com.github.vlsi.gradle.release import com.github.vlsi.gradle.release.jgit.dsl.* import org.eclipse.jgit.api.errors.EmptyCommitException +import org.gradle.api.provider.Property import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.property -open class GitCommitAndPush : DefaultGitTask() { - @Input - val commitMessage = project.objects.property() +abstract class GitCommitAndPush : DefaultGitTask() { + @get:Input + abstract val commitMessage: Property @TaskAction fun execute() { diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitCreateTagTask.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitCreateTagTask.kt index 2971788f..fcd08e94 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitCreateTagTask.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitCreateTagTask.kt @@ -18,18 +18,19 @@ package com.github.vlsi.gradle.release import com.github.vlsi.gradle.release.jgit.dsl.tag import org.eclipse.jgit.lib.Constants +import org.gradle.api.provider.Property import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.property -open class GitCreateTagTask : DefaultGitTask() { - @Input - val tag = project.objects.property() +abstract class GitCreateTagTask : DefaultGitTask() { + @get:Input + abstract val tag : Property - @Input - @Optional - val taggedRef = project.objects.property() + @get:Input + @get:Optional + abstract val taggedRef : Property init { onlyIf { diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitPrepareRepo.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitPrepareRepo.kt index 52b47482..c446d9d0 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitPrepareRepo.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitPrepareRepo.kt @@ -23,7 +23,7 @@ import org.eclipse.jgit.util.FileUtils import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction -open class GitPrepareRepo : DefaultGitTask() { +abstract class GitPrepareRepo : DefaultGitTask() { // Tell Gradle the directory is output, so it does not clean it on Gradle upgrades @OutputDirectory val outputDir = repositoryLocation diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitPushTask.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitPushTask.kt index ee36c61d..ce6e5a35 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitPushTask.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/GitPushTask.kt @@ -22,14 +22,15 @@ import com.github.vlsi.gradle.release.jgit.dsl.updateRemoteParams import org.eclipse.jgit.lib.Constants import org.eclipse.jgit.lib.ObjectId import org.eclipse.jgit.transport.RefSpec +import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Provider import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.listProperty -open class GitPushTask : DefaultGitTask() { - @Input - val refSpecs = project.objects.listProperty() +abstract class GitPushTask : DefaultGitTask() { + @get:Input + abstract val refSpecs : ListProperty fun tag(tagName: String) { val ref = Constants.R_TAGS + tagName diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/PromoteSvnRelease.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/PromoteSvnRelease.kt index 11efa7c0..075face7 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/PromoteSvnRelease.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/PromoteSvnRelease.kt @@ -17,30 +17,27 @@ package com.github.vlsi.gradle.release import com.github.vlsi.gradle.release.svn.LsDepth +import org.gradle.api.provider.Property import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Internal -import org.gradle.kotlin.dsl.property -import org.gradle.kotlin.dsl.the import org.gradle.work.InputChanges abstract class PromoteSvnRelease : SvnmuccTask() { + @get:Input + abstract val useCpWorkaround : Property + init { outputs.upToDateWhen { false } + useCpWorkaround.convention(true) } - @Input - val useCpWorkaround = project.objects.property().convention(true) - - private val ext = project.the() - override fun message() = - project.the().run { + releaseExtension.run { "Promoting ${componentName.get()} ${rcTag.get()} -> ${releaseTag.get()} to release area" } override fun operations(inputChanges: InputChanges): List { return mutableListOf().apply { - val svnDist = ext.svnDist + val svnDist = releaseExtension.svnDist val stageFolder = svnDist.stageFolder.get() val releaseFolder = svnDist.releaseFolder.get() diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/ReleaseExtension.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/ReleaseExtension.kt index b4429333..7b4154c7 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/ReleaseExtension.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/ReleaseExtension.kt @@ -56,11 +56,12 @@ open class ReleaseExtension @Inject constructor( val validateNexusCredentials = project.validate { nexus.credentials }.toMutableList() + protected val grgit = project.property("grgit") as Grgit + val validateBeforeBuildingReleaseArtifacts = mutableListOf(Runnable { if (allowUncommittedChanges.get()) { return@Runnable } - val grgit = project.property("grgit") as Grgit val jgit = grgit.repository.jgit jgit.status().call().apply { if (!hasUncommittedChanges()) { @@ -323,7 +324,7 @@ open class GitConfig @Inject constructor( open class Credentials @Inject constructor( val name: String, - private val ext: ReleaseExtension, + ext: ReleaseExtension, objects: ObjectFactory ) { operator fun invoke(action: Credentials.() -> Unit) = apply { action() } @@ -344,7 +345,7 @@ open class Credentials @Inject constructor( fun password(project: Project, required: Boolean = false): String? { val property = password.get() val value = project.stringProperty(property, required) - project.logger.debug("Using password from property {}", property, value?.let { "***" }) + project.logger.debug("Using password from property {}", property) return value } } diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/RemoveStaleArtifactsTask.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/RemoveStaleArtifactsTask.kt index d2d1531e..300e4b14 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/RemoveStaleArtifactsTask.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/RemoveStaleArtifactsTask.kt @@ -32,7 +32,7 @@ abstract class RemoveStaleArtifactsTask @Inject constructor( @get:Input val foldersToList = objects.listProperty() .convention(project.provider { - project.the().let { + releaseExtension.let { val tlpUrl = it.tlpUrl.get() it.svnDist.releaseSubfolder.get() .values @@ -48,15 +48,9 @@ abstract class RemoveStaleArtifactsTask @Inject constructor( @Internal val staleRemovalFilters = objects.newInstance() .apply { - includes.addAll(project.provider { - project.the().svnDist.staleRemovalFilters.includes.get() - }) - excludes.addAll(project.provider { - project.the().svnDist.staleRemovalFilters.excludes.get() - }) - validates.addAll(project.provider { - project.the().svnDist.staleRemovalFilters.validates.get() - }) + includes.addAll(releaseExtension.svnDist.staleRemovalFilters.includes) + excludes.addAll(releaseExtension.svnDist.staleRemovalFilters.excludes) + validates.addAll(releaseExtension.svnDist.staleRemovalFilters.validates) } init { diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageToSvnTask.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageToSvnTask.kt index e03e1743..8464ab63 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageToSvnTask.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageToSvnTask.kt @@ -16,6 +16,8 @@ */ package com.github.vlsi.gradle.release +import org.gradle.api.file.ConfigurableFileCollection +import org.gradle.api.provider.Property import org.gradle.api.tasks.* import org.gradle.kotlin.dsl.property import org.gradle.kotlin.dsl.the @@ -24,23 +26,23 @@ import org.gradle.work.Incremental import org.gradle.work.InputChanges abstract class StageToSvnTask() : SvnmuccTask() { - @Incremental - @InputFiles - @PathSensitive(PathSensitivity.NAME_ONLY) - val files = project.files() + @get:Incremental + @get:InputFiles + @get:PathSensitive(PathSensitivity.NAME_ONLY) + abstract val files : ConfigurableFileCollection - @Input - val folder = project.objects.property() - .convention(project.the().svnDist.stageFolder) + @get:Input + abstract val folder: Property init { dependsOn(files) // The task produces no outputs => we specify it as "always stale" outputs.upToDateWhen { false } + folder.convention(releaseExtension.svnDist.stageFolder) } override fun message() = - project.the().run { + releaseExtension.run { "Uploading release candidate ${componentName.get()} ${rcTag.get()} to dev area" } diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageVoteReleasePlugin.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageVoteReleasePlugin.kt index 6445137c..69a8dfb1 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageVoteReleasePlugin.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/StageVoteReleasePlugin.kt @@ -170,7 +170,7 @@ class StageVoteReleasePlugin @Inject constructor( val pushRcTag = createPushRcTag(releaseExt, validateRcIndexSpecified, validateBeforeBuildingReleaseArtifacts, closeRepository) val pushReleaseTag = createPushReleaseTag(releaseExt, validateRcIndexSpecified, releaseRepository) - val pushPreviewSite = addPreviewSiteTasks(validateBeforeBuildingReleaseArtifacts) + val pushPreviewSite = addPreviewSiteTasks(releaseExt, validateBeforeBuildingReleaseArtifacts) val stageSvnDist = tasks.register(STAGE_SVN_DIST_TASK_NAME) { description = "Stage release artifacts to SVN dist repository" @@ -280,7 +280,7 @@ class StageVoteReleasePlugin @Inject constructor( // prepareVote depends on all the publish tasks // prepareVote depends on publish SVN - val generateVote = generateVoteText() + val generateVote = generateVoteText(releaseExt) generateVote { mustRunAfter(pushPreviewSite, stageDist) dependsOn(validateRcIndexSpecified) @@ -308,6 +308,7 @@ class StageVoteReleasePlugin @Inject constructor( } // Validations should be performed before tasks start execution + val grgit = project.property("grgit") as Grgit project.gradle.taskGraph.whenReady { val validations = mutableListOf() if (hasTask(validateRcIndexSpecified.get())) { @@ -322,7 +323,6 @@ class StageVoteReleasePlugin @Inject constructor( // Tag won't be created as a part of the release validations += Runnable { if (releaseExt.release.get()) { - val grgit = project.property("grgit") as Grgit val repository = grgit.repository.jgit.repository val tagName = releaseExt.rcTag.get() repository.exactRef(Constants.R_TAGS + tagName)?.commitId @@ -518,9 +518,9 @@ class StageVoteReleasePlugin @Inject constructor( } private fun Project.addPreviewSiteTasks( - validateBeforeBuildingReleaseArtifacts: TaskProvider<*> + releaseExt: ReleaseExtension, + validateBeforeBuildingReleaseArtifacts: TaskProvider<*>, ): TaskProvider { - val releaseExt = project.the() val preparePreviewSiteRepo = tasks.register("preparePreviewSiteRepo", GitPrepareRepo::class) { onlyIf { releaseExt.sitePreviewEnabled.get() } @@ -628,27 +628,25 @@ class StageVoteReleasePlugin @Inject constructor( } } - private fun Project.generateVoteText() = + private fun Project.generateVoteText(releaseExt: ReleaseExtension) = tasks.register(GENERATE_VOTE_TEXT_TASK_NAME) { // Note: task is not incremental, and we enforce Gradle to re-execute it // Otherwise we would have to duplicate ReleaseParams logic as "inputs" outputs.upToDateWhen { false } - val releaseExt = project.the() - val voteMailFile = layout.buildDirectory.file("$PREPARE_VOTE_TASK_NAME/mail.txt") val projectDir = layout.projectDirectory outputs.file(file(voteMailFile)) + val nexusPublish = project.the() + val grgit = project.property("grgit") as Grgit + doLast { - val nexusPublish = project.the() val nexusRepoName = REPOSITORY_NAME val repositoryId = releaseExt.repositoryIdStore[nexusRepoName] val repoUri = nexusPublish.repositories[nexusRepoName].nexusUrl.get() .replacePath("/content/repositories/$repositoryId") - val grgit = project.property("grgit") as Grgit - val svnDist = releaseExt.svnDist val svnStagingUri = svnDist.url.get() diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt index 04b6f202..09cadb32 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt @@ -24,8 +24,10 @@ import java.io.File import java.net.URI import javax.inject.Inject import org.gradle.api.DefaultTask +import org.gradle.api.file.ProjectLayout +import org.gradle.api.model.ObjectFactory +import org.gradle.api.provider.ProviderFactory import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.property @@ -38,21 +40,31 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() { @get:Inject abstract val execOperations: ExecOperations + @get:Inject + protected abstract val objects: ObjectFactory + + @get:Inject + protected abstract val providers: ProviderFactory + + @get:Inject + protected abstract val layout: ProjectLayout + + @get:Internal + protected val releaseExtension = project.the() + @Input - val repository = project.objects.property() - .convention(project.provider { - project.the().svnDist.url.get() - }) + val repository = objects.property() + .convention(releaseExtension.svnDist.url) @Internal - protected val projectDir = project.layout.projectDirectory + protected val projectDir = layout.projectDirectory abstract fun operations(inputChanges: InputChanges): List abstract fun message(): String // TODO: remove project access at execution time protected fun SvnCredentials.withCredentials() { - project.the().svnDist.credentials { + releaseExtension.svnDist.credentials { this@withCredentials.username = username(project) this@withCredentials.password = password(project) } @@ -60,7 +72,7 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() { // TODO: remove project access at execution time protected fun ExecSpec.svnCredentials() { - project.the().svnDist.credentials { + releaseExtension.svnDist.credentials { username(project)?.let { args("--username", it) } password(project)?.let { args("--password", it) } } @@ -92,12 +104,12 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() { } @Internal - protected val commandsFile = project.layout.buildDirectory.file("svnmucc/$name.txt") + protected val commandsFile = layout.buildDirectory.file("svnmucc/$name.txt") @Input - protected val asfDryRun = project.objects.property() + protected val asfDryRun = objects.property() .convention( - project.providers.gradleProperty("asfDryRun") + providers.gradleProperty("asfDryRun") .map { it.toBool() } .orElse(false) )