I want to automatically build documentation for my Java Play 2.3 application.
At the moment, I use a Makefile to generate images from *.dot
files and combine Mar
You can find some answers in External Processes in the official documentation of sbt, e.g.
To run an external command, follow it with an exclamation mark !:
"find project -name *.jar" !
Don't forget to use import scala.sys.process._
so !
can be resolved as a method of String
.
Do the following in activator console (aka sbt shell) to execute yourshell.sh
- mind the eval
command and the quotes around the name of the script:
eval "yourshell.sh" !
To have it available as a task add the following to build.sbt
of your project:
lazy val execScript = taskKey[Unit]("Execute the shell script")
execScript := {
"yourshell.sh" !
}
We had the requirement to execute some npm scripts as sbt task and let the build fail if one of the npm scripts fails. Took me some time to find a way to create a Task that works on Windows and Unix. And so here is what I came up with.
lazy val buildFrontend = taskKey[Unit]("Execute frontend scripts")
buildFrontend := {
val s: TaskStreams = streams.value
val shell: Seq[String] = if (sys.props("os.name").contains("Windows")) Seq("cmd", "/c") else Seq("bash", "-c")
val npmInstall: Seq[String] = shell :+ "npm install"
val npmTest: Seq[String] = shell :+ "npm run test"
val npmLint: Seq[String] = shell :+ "npm run lint"
val npmBuild: Seq[String] = shell :+ "npm run build"
s.log.info("building frontend...")
if((npmInstall #&& npmTest #&& npmLint #&& npmBuild !) == 0) {
s.log.success("frontend build successful!")
} else {
throw new IllegalStateException("frontend build failed!")
}
},
(run in Compile) <<= (run in Compile).dependsOn(buildFrontend)