Skip to content

Commit

Permalink
added support to gradle's configuration avoidance api
Browse files Browse the repository at this point in the history
  • Loading branch information
Joaquimmnetto committed Apr 29, 2021
1 parent 0c08f0a commit ff2f68e
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 45 deletions.
81 changes: 40 additions & 41 deletions src/main/groovy/wooga/gradle/paket/base/PaketBasePlugin.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.specs.Spec
import org.gradle.api.tasks.Delete
import org.gradle.api.tasks.TaskProvider
import org.gradle.internal.reflect.Instantiator
import org.gradle.language.base.plugins.LifecycleBasePlugin
import wooga.gradle.paket.base.dependencies.internal.DefaultPaketDependencyHandler
Expand Down Expand Up @@ -106,53 +107,49 @@ class PaketBasePlugin implements Plugin<Project> {
}

private static void configurePaketTasks(final Project project, PaketPluginExtension extension) {
project.tasks.withType(AbstractPaketTask, new Action<AbstractPaketTask>() {
@Override
void execute(AbstractPaketTask task) {

final taskConvention = task.conventionMapping
taskConvention.map("executable", { extension.getExecutable() })
taskConvention.map("monoExecutable", { extension.getMonoExecutable() })
taskConvention.map("logFile", { new File("${project.buildDir}/logs/${task.name}.log") })
taskConvention.map("dependenciesFile", {

if(extension.getPaketDependenciesFile().exists()){
return project.files(extension.getPaketDependenciesFile())
}
return project.files()

})
}
})
project.tasks.withType(AbstractPaketTask).configureEach { task ->
final taskConvention = task.conventionMapping
taskConvention.map("executable", { extension.getExecutable() })
taskConvention.map("monoExecutable", { extension.getMonoExecutable() })
taskConvention.map("logFile", { new File("${project.buildDir}/logs/${task.name}.log") })
taskConvention.map("dependenciesFile", {
if(extension.getPaketDependenciesFile().exists()){
return project.files(extension.getPaketDependenciesFile())
}
return project.files()
})
}
}

private static void addDependenciesTask(final Project project) {
project.tasks.create(name: PAKET_DEPENDENCIES_TASK_NAME, type: PaketDependenciesTask)
project.tasks.register(PAKET_DEPENDENCIES_TASK_NAME, PaketDependenciesTask)
}

private static void addInitTask(final Project project, PaketPluginExtension extension) {
final task = project.tasks.create(name: INIT_TASK_NAME, type: PaketInit, group: TASK_GROUP_NAME)
task.conventionMapping.map("dependenciesFile", { extension.getPaketDependenciesFile() })
project.tasks.register(INIT_TASK_NAME, PaketInit).configure {t ->
t.group = TASK_GROUP_NAME
t.conventionMapping.map("dependenciesFile", { extension.getPaketDependenciesFile() })
}
}

private static void addBootstrapTask(final Project project, PaketPluginExtension extension) {
DownloadPaketBootstrapper d = project.tasks.create("downloadPaketBootstrapper", DownloadPaketBootstrapper)
final dTaskConvention = d.conventionMapping
dTaskConvention.map("paketBootstrapperExecutable", { extension.getBootstrapperExecutable() })
dTaskConvention.map("bootstrapURL", { extension.getPaketBootstrapperUrl() })

PaketBootstrap task = project.tasks.create(name: BOOTSTRAP_TASK_NAME, type: PaketBootstrap)
task.dependsOn(d, project.tasks.getByName(PAKET_DEPENDENCIES_TASK_NAME))

final taskConvention = task.conventionMapping
taskConvention.map("executable", { extension.getBootstrapperExecutable() })
taskConvention.map("paketExecutable", { extension.getExecutable() })
taskConvention.map("paketVersion", { extension.getVersion() })

task.outputs.upToDateWhen(new Spec<PaketBootstrap>() {
@Override
boolean isSatisfiedBy(PaketBootstrap t) {
if(t.paketExecutable.exists()) {
def downloadTaskProvider = project.tasks.register("downloadPaketBootstrapper", DownloadPaketBootstrapper)
downloadTaskProvider.configure {d ->
final dTaskConvention = d.conventionMapping
dTaskConvention.map("paketBootstrapperExecutable", { extension.getBootstrapperExecutable() })
dTaskConvention.map("bootstrapURL", { extension.getPaketBootstrapperUrl() })
}

project.tasks.register(BOOTSTRAP_TASK_NAME, PaketBootstrap).configure { task ->
task.dependsOn(downloadTaskProvider, project.tasks.named(PAKET_DEPENDENCIES_TASK_NAME))

final taskConvention = task.conventionMapping
taskConvention.map("executable", { extension.getBootstrapperExecutable() })
taskConvention.map("paketExecutable", { extension.getExecutable() })
taskConvention.map("paketVersion", { extension.getVersion() })

task.outputs.upToDateWhen { t ->
if (t.paketExecutable.exists()) {
ByteArrayOutputStream stdOut = new ByteArrayOutputStream()

String osName = System.getProperty("os.name").toLowerCase()
Expand All @@ -176,7 +173,7 @@ class PaketBasePlugin implements Plugin<Project> {
}
return false
}
})
}
}

private static void setConfigurations(final Project project) {
Expand All @@ -187,7 +184,9 @@ class PaketBasePlugin implements Plugin<Project> {
}

private static void setCleanTargets(final Project project) {
final clean = project.tasks.getByName(LifecycleBasePlugin.CLEAN_TASK_NAME) as Delete
clean.delete(project.file("paket-files"), project.file("packages"), project.file(".paket"))
final cleanProvider = project.tasks.named(LifecycleBasePlugin.CLEAN_TASK_NAME)
cleanProvider.configure { clean ->
clean.delete(project.file("paket-files"), project.file("packages"), project.file(".paket"))
}
}
}
19 changes: 15 additions & 4 deletions src/test/groovy/wooga/gradle/paket/base/PaketBasePluginSpec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ package wooga.gradle.paket.base

import nebula.test.PluginProjectSpec
import nebula.test.ProjectSpec
import org.gradle.api.Project
import org.gradle.api.UnknownTaskException
import wooga.gradle.paket.base.internal.DefaultPaketPluginExtension
import wooga.gradle.paket.base.tasks.PaketBootstrap

Expand All @@ -34,7 +36,7 @@ class PaketBasePluginSpec extends ProjectSpec {
def 'Creates the [paket] extension'() {
given:
assert !project.plugins.hasPlugin(PLUGIN_NAME)
assert !project.extensions.findByName(PaketBasePlugin.EXTENSION_NAME)
assert !hasTask(project, PaketBasePlugin.EXTENSION_NAME)

when:
project.plugins.apply(PLUGIN_NAME)
Expand All @@ -47,7 +49,7 @@ class PaketBasePluginSpec extends ProjectSpec {
def 'Creates the paket bootstrap task'() {
given:
assert !project.plugins.hasPlugin(PLUGIN_NAME)
assert !project.tasks.findByName(PaketBasePlugin.BOOTSTRAP_TASK_NAME)
assert !hasTask(project, PaketBasePlugin.BOOTSTRAP_TASK_NAME)

when:
project.plugins.apply(PLUGIN_NAME)
Expand All @@ -60,7 +62,7 @@ class PaketBasePluginSpec extends ProjectSpec {
def 'Creates the [nupkg] configuration'() {
given:
assert !project.plugins.hasPlugin(PLUGIN_NAME)
assert !project.configurations.findByName(PaketBasePlugin.PAKET_CONFIGURATION)
assert !hasTask(project, PaketBasePlugin.PAKET_CONFIGURATION)

when:
project.plugins.apply(PLUGIN_NAME)
Expand All @@ -72,7 +74,7 @@ class PaketBasePluginSpec extends ProjectSpec {
def 'Configures the [nupkg] configuration'() {
given:
assert !project.plugins.hasPlugin(PLUGIN_NAME)
assert !project.configurations.findByName(PaketBasePlugin.PAKET_CONFIGURATION)
assert !hasTask(project, PaketBasePlugin.PAKET_CONFIGURATION)

when:
project.plugins.apply(PLUGIN_NAME)
Expand All @@ -81,4 +83,13 @@ class PaketBasePluginSpec extends ProjectSpec {
def config = project.configurations.findByName(PaketBasePlugin.PAKET_CONFIGURATION)
!config.transitive
}

def hasTask(Project project, String taskName) {
try {
project.tasks.named(taskName)
return true
} catch(UnknownTaskException _) {
return false
}
}
}

0 comments on commit ff2f68e

Please sign in to comment.