从 sbt 中的任务内部执行 "release" 命令

execute a "release" command from inside a task in sbt

我正在使用 "sbt-releases" 并且需要从任务内部执行 "release",但问题是 "release" 是 command not 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
    }
  }
)