Autoformat build.sbt

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

199
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
@ -57,106 +58,143 @@ 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) =
Seq(
maintainer := "Eike Kettner <eike.kettner@posteo.de>", maintainer := "Eike Kettner <eike.kettner@posteo.de>",
packageSummary := description.value, packageSummary := description.value,
packageDescription := description.value, packageDescription := description.value,
mappings in Universal += { mappings in Universal += {
val conf = (Compile / resourceDirectory).value / "reference.conf" val conf = (Compile / resourceDirectory).value / "reference.conf"
if (!conf.exists) { if (!conf.exists)
sys.error(s"File $conf not found") 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)
.addMapping(CustomMapping.forType({
case TypeDef("LocalDateTime", _) => 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 =
TypeDef("CollectiveState", Imports("docspell.common.CollectiveState"))
)
case "userstate" =>
field =>
field.copy(typeDef = TypeDef("UserState", Imports("docspell.common.UserState"))) field.copy(typeDef = TypeDef("UserState", Imports("docspell.common.UserState")))
case "password" => field => case "password" =>
field =>
field.copy(typeDef = TypeDef("Password", Imports("docspell.common.Password"))) field.copy(typeDef = TypeDef("Password", Imports("docspell.common.Password")))
case "contactkind" => field => case "contactkind" =>
field.copy(typeDef = TypeDef("ContactKind", Imports("docspell.common.ContactKind"))) field =>
case "direction" => field => field.copy(typeDef =
TypeDef("ContactKind", Imports("docspell.common.ContactKind"))
)
case "direction" =>
field =>
field.copy(typeDef = TypeDef("Direction", Imports("docspell.common.Direction"))) field.copy(typeDef = TypeDef("Direction", Imports("docspell.common.Direction")))
case "priority" => field => case "priority" =>
field =>
field.copy(typeDef = TypeDef("Priority", Imports("docspell.common.Priority"))) field.copy(typeDef = TypeDef("Priority", Imports("docspell.common.Priority")))
case "jobstate" => field => case "jobstate" =>
field =>
field.copy(typeDef = TypeDef("JobState", Imports("docspell.common.JobState"))) field.copy(typeDef = TypeDef("JobState", Imports("docspell.common.JobState")))
case "loglevel" => field => case "loglevel" =>
field =>
field.copy(typeDef = TypeDef("LogLevel", Imports("docspell.common.LogLevel"))) field.copy(typeDef = TypeDef("LogLevel", Imports("docspell.common.LogLevel")))
case "mimetype" => field => case "mimetype" =>
field =>
field.copy(typeDef = TypeDef("MimeType", Imports("docspell.common.MimeType"))) field.copy(typeDef = TypeDef("MimeType", Imports("docspell.common.MimeType")))
case "itemstate" => field => case "itemstate" =>
field =>
field.copy(typeDef = TypeDef("ItemState", Imports("docspell.common.ItemState"))) field.copy(typeDef = TypeDef("ItemState", Imports("docspell.common.ItemState")))
case "nertag" => field => case "nertag" =>
field =>
field.copy(typeDef = TypeDef("NerTag", Imports("docspell.common.NerTag"))) field.copy(typeDef = TypeDef("NerTag", Imports("docspell.common.NerTag")))
case "language" => field => case "language" =>
field =>
field.copy(typeDef = TypeDef("Language", Imports("docspell.common.Language"))) field.copy(typeDef = TypeDef("Language", Imports("docspell.common.Language")))
case "calevent" => field => case "calevent" =>
field.copy(typeDef = TypeDef("CalEvent", Imports("com.github.eikek.calev.CalEvent", field =>
"com.github.eikek.calev.circe.CalevCirceCodec._"))) 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 ++
@ -169,22 +207,23 @@ val common = project.in(file("modules/common")).
// 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,11 +592,22 @@ 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)
@ -565,7 +615,11 @@ def compileElm(logger: Logger, wd: File, outBase: File, artifact: String, versio
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
@ -584,29 +638,38 @@ def packageTools(logger: Logger, dir: File, version: String): Seq[File] = {
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(
Seq(
wx / "_locales/de/messages.json" -> "_locales/de/messages.json", wx / "_locales/de/messages.json" -> "_locales/de/messages.json",
wx / "_locales/en/messages.json" -> "_locales/en/messages.json", wx / "_locales/en/messages.json" -> "_locales/en/messages.json",
wx / "docspell.js" -> "docspell.js", wx / "docspell.js" -> "docspell.js",
wx / "icons" / "logo-48.png" -> "icons/logo-48.png", wx / "icons" / "logo-48.png" -> "icons/logo-48.png",
wx / "icons" / "logo-96.png" -> "icons/logo-96.png", wx / "icons" / "logo-96.png" -> "icons/logo-96.png",
wx / "manifest.json" -> "manifest.json" wx / "manifest.json" -> "manifest.json"
), webext) ),
webext
)
IO.zip(Seq( IO.zip(
Seq(
webext -> s"docspell-tools-${version}/firefox/docspell-extension.xpi", webext -> s"docspell-tools-${version}/firefox/docspell-extension.xpi",
wx / "native/app_manifest.json" -> s"docspell-tools-${version}/firefox/native/app_manifest.json", wx / "native/app_manifest.json" -> s"docspell-tools-${version}/firefox/native/app_manifest.json",
wx / "native/native.py" -> s"docspell-tools-${version}/firefox/native/native.py", wx / "native/native.py" -> s"docspell-tools-${version}/firefox/native/native.py",
dir / "ds.sh" -> s"docspell-tools-${version}/ds.sh", dir / "ds.sh" -> s"docspell-tools-${version}/ds.sh",
dir / "consumedir.sh" -> s"docspell-tools-${version}/consumedir.sh" dir / "consumedir.sh" -> s"docspell-tools-${version}/consumedir.sh"
), archive) ),
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")