Вот пример для дополнения ответа Jasper-M.
Например, добавьте клиентскую библиотеку liahoy requests-scala
HTTP и библиотеку десериализации upickle
JSON в project/builds.sbt
libraryDependencies ++= List(
"com.lihaoyi" %% "requests" % "0.6.0",
"com.lihaoyi" %% "upickle" % "1.1.0"
)
Затем в project/Preconditions.scala
добавьте следующий объект, который будет содержать утверждения, которые вы хотите проверить перед запуском сборки
object Preconditions {
import scala.util.Try
import requests._
import upickle.default._
case class User(login: String, id: Int)
implicit val userRW: ReadWriter[User] = macroRW
def validateUserJson() = {
val result = Try(read[User](get("https://api.github.com/users/lihaoyi").text)).isSuccess
assert(result, "User JSON should be valid")
}
}
Теперь эти средства будут доступны для build.sbt
в рамках проекта root , Позволяет создать задачу в build.sbt
для запуска утверждений
lazy val checkPreconditions = taskKey[Unit]("Validate pre-conditions before building")
checkPreconditions := {
Preconditions.validateUserJson()
println("All preconditions passed!")
}
и, наконец, позволяет сделать задачу compile
зависимой от задачи checkPreconditions
, используя dependsOn
, например,
Compile / compile := (Compile / compile).dependsOn(checkPreconditions).value
Теперь выполнение sbt compile
должно проверить предварительные условия перед продолжением компиляции.