Calling a TaskKey with different settings

104 Views Asked by At

I'm using the plugin sbt-assembly (version 0.13.0), and I would like to call assemblyPackageDependency with or without appendContentHash depending on some InputKey

Basically, I would like to do something like this:

lazy val isGlobalCached = InputKey[Boolean]("")

lazy val myTask = taskKey[sbt.File]("myTask")

myTask := {
    if (isGlobalCached.value)
        //run with the modified assemblyOption
        //assemblyOption in assemblyPackageDependency ~= { x => x.copy(appendContentHash = true) }
        assemblyPackageDependency.value
    else
        assemblyPackageDependency.value
}

but I can't figure out how to set the assemblyOption only if the condition is true, and not globally


Here are a couple of things I tried that didn't work:

lazy val isGlobalCached = InputKey[Boolean]("")

lazy val myTask = taskKey[sbt.File]("myTask")

lazy val assemblyPackageDependencyWithHash = taskKey[sbt.File]("assemblyPackageDependencyWithHash")


assemblyPackageDependencyWithHash <<= assemblyPackageDependency
assemblyOption in assemblyPackageDependencyWithHash ~= { x => x.copy(appendContentHash = true) }

myTask := {
    //run with the modified assemblyOption
    if (isGlobalCached.value)
        assemblyPackageDependencyWithHash.value
    else
        assemblyPackageDependency.value
}

and:

lazy val isGlobalCached = InputKey[Boolean]("")

lazy val myTask = taskKey[sbt.File]("myTask")

lazy val globalCacheConf = config("globalCacheConf")

assemblyOption  in globalCacheConf := (assemblyOption in assemblyPackageDependency).value.copy(appendContentHash = true)

myTask := {
    //run with the modified assemblyOption
    if (isGlobalCached.value)
        assemblyPackageDependency.in(globalCacheConf).value
    else
        assemblyPackageDependency.value
}
1

There are 1 best solutions below

3
On
import complete.DefaultParsers._

val myCmd : Command = Command("myCmd")(_ => Space ~> Bool) { (state, globalCached) =>
  val extracted = Project extract state
  import extracted._
  Project.runTask(
    assemblyPackageDependency,
    append(Seq(assemblyOption in assemblyPackageDependency := globalCached), state)
  )
  state
}

commands += myCmd