Autoformat build.sbt

This commit is contained in:
Eike Kettner 2020-07-30 20:32:04 +02:00
parent 9bc6c60dfe
commit 9af02cd90b

297
build.sbt
View File

@ -20,7 +20,8 @@ val sharedSettings = Seq(
scalaVersion := "2.13.2", scalaVersion := "2.13.2",
scalacOptions ++= Seq( scalacOptions ++= Seq(
"-deprecation", "-deprecation",
"-encoding", "UTF-8", "-encoding",
"UTF-8",
"-language:higherKinds", "-language:higherKinds",
"-feature", "-feature",
"-Werror", // fail when there are warnings "-Werror", // fail when there are warnings
@ -31,10 +32,10 @@ val sharedSettings = Seq(
"-Wvalue-discard", "-Wvalue-discard",
"-Wnumeric-widen" "-Wnumeric-widen"
), ),
LocalRootProject/toolsPackage := { LocalRootProject / toolsPackage := {
val v = version.value val v = version.value
val logger = streams.value.log val logger = streams.value.log
val dir = (LocalRootProject/baseDirectory).value / "tools" val dir = (LocalRootProject / baseDirectory).value / "tools"
packageTools(logger, dir, v) packageTools(logger, dir, v)
}, },
scalacOptions in (Compile, console) := scalacOptions in (Compile, console) :=
@ -56,135 +57,173 @@ lazy val noPublish = Seq(
val elmSettings = Seq( val elmSettings = Seq(
elmCompileMode := ElmCompileMode.Debug, elmCompileMode := ElmCompileMode.Debug,
Compile/resourceGenerators += Def.task { Compile / resourceGenerators += Def.task {
compileElm(streams.value.log compileElm(
, (Compile/baseDirectory).value streams.value.log,
, (Compile/resourceManaged).value (Compile / baseDirectory).value,
, name.value (Compile / resourceManaged).value,
, version.value name.value,
, elmCompileMode.value) version.value,
elmCompileMode.value
)
}.taskValue, }.taskValue,
watchSources += Watched.WatchSource( watchSources += Watched.WatchSource(
(Compile/sourceDirectory).value/"elm" (Compile / sourceDirectory).value / "elm",
, FileFilter.globFilter("*.elm") FileFilter.globFilter("*.elm"),
, HiddenFileFilter HiddenFileFilter
) )
) )
val webjarSettings = Seq( val webjarSettings = Seq(
Compile/resourceGenerators += Def.task { Compile / resourceGenerators += Def.task {
copyWebjarResources(Seq((sourceDirectory in Compile).value/"webjar") copyWebjarResources(
, (Compile/resourceManaged).value Seq((sourceDirectory in Compile).value / "webjar"),
, name.value (Compile / resourceManaged).value,
, version.value name.value,
, streams.value.log version.value,
streams.value.log
) )
}.taskValue, }.taskValue,
watchSources += Watched.WatchSource( watchSources += Watched.WatchSource(
(Compile / sourceDirectory).value/"webjar" (Compile / sourceDirectory).value / "webjar",
, FileFilter.globFilter("*.js") || FileFilter.globFilter("*.css") FileFilter.globFilter("*.js") || FileFilter.globFilter("*.css"),
, HiddenFileFilter HiddenFileFilter
) )
) )
def debianSettings(cfgFile: String) = Seq( def debianSettings(cfgFile: String) =
maintainer := "Eike Kettner <eike.kettner@posteo.de>", Seq(
packageSummary := description.value, maintainer := "Eike Kettner <eike.kettner@posteo.de>",
packageDescription := description.value, packageSummary := description.value,
mappings in Universal += { packageDescription := description.value,
val conf = (Compile / resourceDirectory).value / "reference.conf" mappings in Universal += {
if (!conf.exists) { val conf = (Compile / resourceDirectory).value / "reference.conf"
sys.error(s"File $conf not found") if (!conf.exists)
} sys.error(s"File $conf not found")
conf -> s"conf/$cfgFile.conf" conf -> s"conf/$cfgFile.conf"
}, },
bashScriptExtraDefines += s"""addJava "-Dconfig.file=$${app_home}/../conf/$cfgFile.conf"""" bashScriptExtraDefines += s"""addJava "-Dconfig.file=$${app_home}/../conf/$cfgFile.conf""""
) )
val buildInfoSettings = Seq( val buildInfoSettings = Seq(
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion, gitHeadCommit, gitHeadCommitDate, gitUncommittedChanges, gitDescribedVersion), buildInfoKeys := Seq[BuildInfoKey](
name,
version,
scalaVersion,
sbtVersion,
gitHeadCommit,
gitHeadCommitDate,
gitUncommittedChanges,
gitDescribedVersion
),
buildInfoOptions += BuildInfoOption.ToJson, buildInfoOptions += BuildInfoOption.ToJson,
buildInfoOptions += BuildInfoOption.BuildTime buildInfoOptions += BuildInfoOption.BuildTime
) )
val openapiScalaSettings = Seq( val openapiScalaSettings = Seq(
openapiScalaConfig := ScalaConfig().withJson(ScalaJson.circeSemiauto). openapiScalaConfig := ScalaConfig()
addMapping(CustomMapping.forType({ .withJson(ScalaJson.circeSemiauto)
case TypeDef("LocalDateTime", _) => .addMapping(CustomMapping.forType({
case TypeDef("LocalDateTime", _) =>
TypeDef("Timestamp", Imports("docspell.common.Timestamp")) TypeDef("Timestamp", Imports("docspell.common.Timestamp"))
})). }))
addMapping(CustomMapping.forFormatType({ .addMapping(CustomMapping.forFormatType({
case "ident" => field => case "ident" =>
field.copy(typeDef = TypeDef("Ident", Imports("docspell.common.Ident"))) field => field.copy(typeDef = TypeDef("Ident", Imports("docspell.common.Ident")))
case "collectivestate" => field => case "collectivestate" =>
field.copy(typeDef = TypeDef("CollectiveState", Imports("docspell.common.CollectiveState"))) field =>
case "userstate" => field => field.copy(typeDef =
field.copy(typeDef = TypeDef("UserState", Imports("docspell.common.UserState"))) TypeDef("CollectiveState", Imports("docspell.common.CollectiveState"))
case "password" => field => )
field.copy(typeDef = TypeDef("Password", Imports("docspell.common.Password"))) case "userstate" =>
case "contactkind" => field => field =>
field.copy(typeDef = TypeDef("ContactKind", Imports("docspell.common.ContactKind"))) field.copy(typeDef = TypeDef("UserState", Imports("docspell.common.UserState")))
case "direction" => field => case "password" =>
field.copy(typeDef = TypeDef("Direction", Imports("docspell.common.Direction"))) field =>
case "priority" => field => field.copy(typeDef = TypeDef("Password", Imports("docspell.common.Password")))
field.copy(typeDef = TypeDef("Priority", Imports("docspell.common.Priority"))) case "contactkind" =>
case "jobstate" => field => field =>
field.copy(typeDef = TypeDef("JobState", Imports("docspell.common.JobState"))) field.copy(typeDef =
case "loglevel" => field => TypeDef("ContactKind", Imports("docspell.common.ContactKind"))
field.copy(typeDef = TypeDef("LogLevel", Imports("docspell.common.LogLevel"))) )
case "mimetype" => field => case "direction" =>
field.copy(typeDef = TypeDef("MimeType", Imports("docspell.common.MimeType"))) field =>
case "itemstate" => field => field.copy(typeDef = TypeDef("Direction", Imports("docspell.common.Direction")))
field.copy(typeDef = TypeDef("ItemState", Imports("docspell.common.ItemState"))) case "priority" =>
case "nertag" => field => field =>
field.copy(typeDef = TypeDef("NerTag", Imports("docspell.common.NerTag"))) field.copy(typeDef = TypeDef("Priority", Imports("docspell.common.Priority")))
case "language" => field => case "jobstate" =>
field.copy(typeDef = TypeDef("Language", Imports("docspell.common.Language"))) field =>
case "calevent" => field => field.copy(typeDef = TypeDef("JobState", Imports("docspell.common.JobState")))
field.copy(typeDef = TypeDef("CalEvent", Imports("com.github.eikek.calev.CalEvent", case "loglevel" =>
"com.github.eikek.calev.circe.CalevCirceCodec._"))) field =>
field.copy(typeDef = TypeDef("LogLevel", Imports("docspell.common.LogLevel")))
case "mimetype" =>
field =>
field.copy(typeDef = TypeDef("MimeType", Imports("docspell.common.MimeType")))
case "itemstate" =>
field =>
field.copy(typeDef = TypeDef("ItemState", Imports("docspell.common.ItemState")))
case "nertag" =>
field =>
field.copy(typeDef = TypeDef("NerTag", Imports("docspell.common.NerTag")))
case "language" =>
field =>
field.copy(typeDef = TypeDef("Language", Imports("docspell.common.Language")))
case "calevent" =>
field =>
field.copy(typeDef =
TypeDef(
"CalEvent",
Imports(
"com.github.eikek.calev.CalEvent",
"com.github.eikek.calev.circe.CalevCirceCodec._"
)
)
)
})) }))
) )
// --- Modules // --- Modules
// Base module, everything depends on this including restapi and // Base module, everything depends on this including restapi and
// joexapi modules. This should aim to have least possible // joexapi modules. This should aim to have least possible
// dependencies // dependencies
val common = project.in(file("modules/common")). val common = project
disablePlugins(RevolverPlugin). .in(file("modules/common"))
settings(sharedSettings). .disablePlugins(RevolverPlugin)
settings(testSettings). .settings(sharedSettings)
settings( .settings(testSettings)
.settings(
name := "docspell-common", name := "docspell-common",
libraryDependencies ++= libraryDependencies ++=
Dependencies.fs2 ++ Dependencies.fs2 ++
Dependencies.circe ++ Dependencies.circe ++
Dependencies.loggingApi ++ Dependencies.loggingApi ++
Dependencies.calevCore ++ Dependencies.calevCore ++
Dependencies.calevCirce ++ Dependencies.calevCirce ++
Dependencies.pureconfig.map(_ % "optional") Dependencies.pureconfig.map(_ % "optional")
) )
// Some example files for testing // Some example files for testing
// https://file-examples.com/index.php/sample-documents-download/sample-doc-download/ // https://file-examples.com/index.php/sample-documents-download/sample-doc-download/
val files = project.in(file("modules/files")). val files = project
disablePlugins(RevolverPlugin). .in(file("modules/files"))
settings(sharedSettings). .disablePlugins(RevolverPlugin)
settings(testSettings). .settings(sharedSettings)
settings( .settings(testSettings)
.settings(
name := "docspell-files", name := "docspell-files",
libraryDependencies ++= libraryDependencies ++=
Dependencies.tika ++ Dependencies.tika ++
Dependencies.icu4j, Dependencies.icu4j,
Test / sourceGenerators += Def.task { Test / sourceGenerators += Def.task {
val base = (Test/resourceDirectory).value val base = (Test / resourceDirectory).value
val files = (base ** (_.isFile)) pair sbt.io.Path.relativeTo(base) val files = (base ** (_.isFile)).pair(sbt.io.Path.relativeTo(base))
val lines = files.toList.map(_._2).map(s => { val lines = files.toList.map(_._2).map { s =>
val ident = s.replaceAll("[^a-zA-Z0-9_]+", "_") val ident = s.replaceAll("[^a-zA-Z0-9_]+", "_")
ident -> s"""val $ident = createUrl("${s}")""" ident -> s"""val $ident = createUrl("${s}")"""
}) }
val content = s"""package docspell.files val content = s"""package docspell.files
object ExampleFiles extends ExampleFilesSupport { object ExampleFiles extends ExampleFilesSupport {
@ -553,19 +592,34 @@ def copyWebjarResources(
} }
} }
def compileElm(logger: Logger, wd: File, outBase: File, artifact: String, version: String, mode: ElmCompileMode): Seq[File] = { def compileElm(
logger: Logger,
wd: File,
outBase: File,
artifact: String,
version: String,
mode: ElmCompileMode
): Seq[File] = {
logger.info("Compile elm files ...") logger.info("Compile elm files ...")
val target = outBase/"META-INF"/"resources"/"webjars"/artifact/version/"docspell-app.js" val target =
outBase / "META-INF" / "resources" / "webjars" / artifact / version / "docspell-app.js"
val cmd = Seq("elm", "make") ++ mode.flags ++ Seq("--output", target.toString) val cmd = Seq("elm", "make") ++ mode.flags ++ Seq("--output", target.toString)
val proc = Process(cmd ++ Seq(wd/"src"/"main"/"elm"/"Main.elm").map(_.toString), Some(wd)) val proc = Process(
cmd ++ Seq(wd / "src" / "main" / "elm" / "Main.elm").map(_.toString),
Some(wd)
)
val out = proc.!! val out = proc.!!
logger.info(out) logger.info(out)
Seq(target) Seq(target)
} }
def createWebjarSource(wj: Seq[ModuleID], out: File): Seq[File] = { def createWebjarSource(wj: Seq[ModuleID], out: File): Seq[File] = {
val target = out/"Webjars.scala" val target = out / "Webjars.scala"
val fields = wj.map(m => s"""val ${m.name.toLowerCase.filter(_ != '-')} = "/${m.name}/${m.revision}" """).mkString("\n\n") val fields = wj
.map(m =>
s"""val ${m.name.toLowerCase.filter(_ != '-')} = "/${m.name}/${m.revision}" """
)
.mkString("\n\n")
val content = s"""package docspell.restserver.webapp val content = s"""package docspell.restserver.webapp
|object Webjars { |object Webjars {
|$fields |$fields
@ -577,36 +631,45 @@ def createWebjarSource(wj: Seq[ModuleID], out: File): Seq[File] = {
} }
def packageTools(logger: Logger, dir: File, version: String): Seq[File] = { def packageTools(logger: Logger, dir: File, version: String): Seq[File] = {
val target = dir/"target" val target = dir / "target"
IO.delete(target) IO.delete(target)
IO.createDirectory(target) IO.createDirectory(target)
val archive = target/s"docspell-tools-${version}.zip" val archive = target / s"docspell-tools-${version}.zip"
logger.info(s"Packaging tools to $archive ...") logger.info(s"Packaging tools to $archive ...")
val webext = target/"docspell-firefox-extension.xpi" val webext = target / "docspell-firefox-extension.xpi"
val wx = dir/"webextension" val wx = dir / "webextension"
IO.zip(Seq( IO.zip(
wx/"_locales/de/messages.json" -> "_locales/de/messages.json", Seq(
wx/"_locales/en/messages.json" -> "_locales/en/messages.json", wx / "_locales/de/messages.json" -> "_locales/de/messages.json",
wx/"docspell.js" -> "docspell.js", wx / "_locales/en/messages.json" -> "_locales/en/messages.json",
wx/"icons"/"logo-48.png" -> "icons/logo-48.png", wx / "docspell.js" -> "docspell.js",
wx/"icons"/"logo-96.png" -> "icons/logo-96.png", wx / "icons" / "logo-48.png" -> "icons/logo-48.png",
wx/"manifest.json" -> "manifest.json" wx / "icons" / "logo-96.png" -> "icons/logo-96.png",
), webext) wx / "manifest.json" -> "manifest.json"
),
webext
)
IO.zip(Seq( IO.zip(
webext -> s"docspell-tools-${version}/firefox/docspell-extension.xpi", Seq(
wx/"native/app_manifest.json" ->s"docspell-tools-${version}/firefox/native/app_manifest.json", webext -> s"docspell-tools-${version}/firefox/docspell-extension.xpi",
wx/"native/native.py" ->s"docspell-tools-${version}/firefox/native/native.py", wx / "native/app_manifest.json" -> s"docspell-tools-${version}/firefox/native/app_manifest.json",
dir/"ds.sh" -> s"docspell-tools-${version}/ds.sh", wx / "native/native.py" -> s"docspell-tools-${version}/firefox/native/native.py",
dir/"consumedir.sh" -> s"docspell-tools-${version}/consumedir.sh" dir / "ds.sh" -> s"docspell-tools-${version}/ds.sh",
), archive) dir / "consumedir.sh" -> s"docspell-tools-${version}/consumedir.sh"
),
archive
)
Seq(archive) Seq(archive)
} }
// --- aliases // --- aliases
addCommandAlias("make", ";set webapp/elmCompileMode := ElmCompileMode.Production ;root/openapiCodegen ;root/test:compile") addCommandAlias(
"make",
";set webapp/elmCompileMode := ElmCompileMode.Production ;root/openapiCodegen ;root/test:compile"
)
addCommandAlias("make-zip", ";restserver/universal:packageBin ;joex/universal:packageBin") addCommandAlias("make-zip", ";restserver/universal:packageBin ;joex/universal:packageBin")
addCommandAlias("make-deb", ";restserver/debian:packageBin ;joex/debian:packageBin") addCommandAlias("make-deb", ";restserver/debian:packageBin ;joex/debian:packageBin")
addCommandAlias("make-tools", ";root/toolsPackage") addCommandAlias("make-tools", ";root/toolsPackage")