Skip to content

Commit

Permalink
Improve dist task
Browse files Browse the repository at this point in the history
  • Loading branch information
floscher committed Jan 29, 2022
1 parent 1675eaf commit 53fec10
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.openstreetmap.josm.gradle.plugin.task

import org.gradle.api.Transformer
import org.gradle.api.file.Directory
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.AbstractCopyTask
import org.gradle.api.tasks.Sync
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.AbstractArchiveTask
import javax.inject.Inject

/**
* Task that simply copies the archive file produced by the given [archiverTask]
*/
public open class RenameArchiveFile @Inject constructor(
private val archiverTask: TaskProvider<out AbstractArchiveTask>,
private val targetDir: Provider<out Directory>,
fileBaseName: Provider<out String>
): Sync() {

private val fileName by lazy(LazyThreadSafetyMode.PUBLICATION) {
"${fileBaseName.get()}.${archiverTask.get().archiveExtension.get()}"
}

init {
from(archiverTask.map { it.archiveFile })
into(targetDir)
rename { fileName }
duplicatesStrategy = DuplicatesStrategy.FAIL
}

final override fun from(vararg sourcePaths: Any?): AbstractCopyTask = super.from(*sourcePaths)
final override fun into(destDir: Any): AbstractCopyTask = super.into(destDir)
final override fun rename(renamer: Transformer<String, String>): AbstractCopyTask = super.rename(renamer)

@TaskAction
override fun copy() {
super.copy()
logger.lifecycle(
"Distribution {} (version {}) has been written into {}",
fileName,
project.version,
targetDir.get().asFile.canonicalPath
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.Sync
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
import org.openstreetmap.josm.gradle.plugin.MainConfigurationSetup
import org.openstreetmap.josm.gradle.plugin.task.github.CreateGithubReleaseTask
Expand All @@ -24,7 +24,7 @@ import java.util.Base64
* This method sets up all the [Task]s (and [Configuration]s) for a given project that should be there by default.
*/
@OptIn(ExperimentalUnsignedTypes::class)
fun Project.setupJosmTasks(mainConfigSetup: MainConfigurationSetup) {
public fun Project.setupJosmTasks(mainConfigSetup: MainConfigurationSetup) {

tasks.create("listJosmVersions", ListJosmVersions::class.java)

Expand Down Expand Up @@ -70,14 +70,15 @@ fun Project.setupJosmTasks(mainConfigSetup: MainConfigurationSetup) {

private fun setupPluginDistTasks(project: Project, sourceSetJosmPlugin: SourceSet) {
val archiverTask = project.tasks.withType(Jar::class.java).getByName(sourceSetJosmPlugin.jarTaskName)
val distDir = File(project.buildDir, "dist")
val archiverTaskProvider: TaskProvider<Jar> = project.tasks.named(sourceSetJosmPlugin.jarTaskName, Jar::class.java)
val distDir = project.layout.buildDirectory.map { it.dir("dist") }
val localDistDir = File(project.buildDir, "localDist")

val localDistTask = project.tasks.create("localDist", GeneratePluginList::class.java) { genListTask ->
genListTask.group = "JOSM"
genListTask.outputFile = File(localDistDir, "list")
genListTask.description = "Generate a local plugin site."
genListTask.dependsOn(archiverTask)
genListTask.dependsOn(archiverTaskProvider)

project.afterEvaluate {
val localDistReleaseFile = File(localDistDir, project.extensions.josm.pluginName + "-dev.${archiverTask.archiveExtension.get()}")
Expand Down Expand Up @@ -129,25 +130,13 @@ private fun setupPluginDistTasks(project: Project, sourceSetJosmPlugin: SourceSe
}
}

val distTask = project.tasks.create("dist", Sync::class.java) { distTask ->
distTask.from(project.tasks.getByName(sourceSetJosmPlugin.jarTaskName))
distTask.into(distDir)
distTask.duplicatesStrategy = DuplicatesStrategy.FAIL
project.afterEvaluate {
val fileName = "${project.extensions.josm.pluginName}.${archiverTask.archiveExtension.get()}"
distTask.doFirst {
distTask.rename { fileName }
}
distTask.doLast {
distTask.logger.lifecycle(
"Distribution {} (version {}) has been written into {}",
fileName,
project.version,
distDir.absolutePath
)
}
}
}
val distTask = project.tasks.register(
"dist",
RenameArchiveFile::class.java,
archiverTaskProvider,
distDir,
project.provider { project.extensions.josm.pluginName }
)

project.tasks.getByName(sourceSetJosmPlugin.jarTaskName).finalizedBy(distTask, localDistTask)
}
Expand Down

0 comments on commit 53fec10

Please sign in to comment.