我正在使用“sbt-releases”并且需要从任务内部执行“release”,但问题是“release”是一个命令而不是task。
那么是否可以从 sbt 的任务内部执行命令?
为什么我需要从任务内部执行发布?
如果满足某些条件,我想创建一个任务来执行发布,否则触发正常构建。我试图通过更改 sbt 中的 releaseProcess 来实现这一点,但问题是它是 SettingKey 而不是 taskKey,并且任务不能在设置中使用,因为设置在项目加载中被初始化一次。
我最终创建了一个命令。谢谢@Seth Tisue
lazy val myproject = (project in file("myproject").
settings(
commands += Command.command("releaseIfRequired") { state =>
val (stateAfterTask, condition) = Project.extract(state).runTask(conditionTask, state)
if (condition) {
Parser.parse(" with-defaults", ReleaseKeys.releaseCommand.parser(stateAfterTask)) match {
case Right(cmd) => cmd()
case Left(msg) => throw sys.error(s"Error triggering release command:\n$msg")
}
}
else {
Project.extract(stateAfterTask).runTask(build, stateAfterTask)._1
}
}
)