sbt build config

This commit is contained in:
alari 2018-04-09 17:10:46 +03:00
parent aba255ef2e
commit 793eb4c687
7 changed files with 262 additions and 11 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.idea
target
log

64
.scalafmt.conf Normal file
View File

@ -0,0 +1,64 @@
docstrings = JavaDoc
maxColumn = 120
rewriteTokens {
"=>": "⇒"
"<-": "←"
}
align = none
align {
openParenCallSite = false
openParenDefnSite = false
tokens = [
"%", "%%", "%%%", ":=", "~="
]
}
assumeStandardLibraryStripMargin = true
includeCurlyBraceInSelectChains = false
continuationIndent {
callSite = 2
defnSite = 2
extendSite = 4
}
danglingParentheses = true
newlines {
alwaysBeforeTopLevelStatements = true
sometimesBeforeColonInMethodReturnType = true
penalizeSingleSelectMultiArgList = false
alwaysBeforeElseAfterCurlyIf = false
neverInResultType = false
}
spaces {
afterKeywordBeforeParen = true
}
binPack {
parentConstructors = true
literalArgumentLists = true
}
optIn {
breaksInsideChains = false
breakChainOnFirstMethodDot = true
configStyleArguments = true
}
runner {
optimizer {
forceConfigStyleOnOffset = 150
forceConfigStyleMinArgCount = 2
}
}
rewrite {
rules = [
SortImports
]
}

145
build.sbt Normal file
View File

@ -0,0 +1,145 @@
import de.heikoseeberger.sbtheader.License
import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._
import sbtcrossproject.crossProject
name := "codec"
scalacOptions in Compile ++= Seq("-Ypartial-unification", "-Xdisable-assertions")
javaOptions in Test ++= Seq("-ea")
val scalaV = scalaVersion := "2.12.5"
val commons = Seq(
scalaV,
version := "0.1",
fork in Test := true,
parallelExecution in Test := false,
organizationName := "Fluence Labs Limited",
organizationHomepage := Some(new URL("https://fluence.ai")),
startYear := Some(2017),
licenses += ("AGPL-3.0", new URL("http://www.gnu.org/licenses/agpl-3.0.en.html")),
headerLicense := Some(License.AGPLv3("2017", organizationName.value))
)
commons
val kindProjector = addCompilerPlugin("org.spire-math" %% "kind-projector" % "0.9.6")
val Cats1V = "1.1.0"
val ScodecBitsV = "1.1.5"
val CirceV = "0.9.3"
val ShapelessV = "2.3.+"
val chill = "com.twitter" %% "chill" % "0.9.2"
val ScalatestV = "3.0.+"
val ScalacheckV = "1.13.4"
val protobuf = Seq(
PB.targets in Compile := Seq(
scalapb.gen() -> (sourceManaged in Compile).value
),
libraryDependencies ++= Seq(
"com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf"
)
)
enablePlugins(AutomateHeaderPlugin)
lazy val `codec-core` = crossProject(JVMPlatform, JSPlatform)
.withoutSuffixFor(JVMPlatform)
.crossType(FluenceCrossType)
.in(file("core"))
.settings(
commons,
kindProjector,
libraryDependencies ++= Seq(
"org.typelevel" %%% "cats-core" % Cats1V,
"org.typelevel" %%% "cats-laws" % Cats1V % Test,
"org.typelevel" %%% "cats-testkit" % Cats1V % Test,
"com.github.alexarchambault" %%% "scalacheck-shapeless_1.13" % "1.1.8" % Test,
"org.scalacheck" %%% "scalacheck" % ScalacheckV % Test,
"org.scalatest" %%% "scalatest" % ScalatestV % Test
)
)
.jsSettings(
fork in Test := false
)
.enablePlugins(AutomateHeaderPlugin)
lazy val `codec-core-jvm` = `codec-core`.jvm
lazy val `codec-core-js` = `codec-core`.js
lazy val `codec-bits` = crossProject(JVMPlatform, JSPlatform)
.withoutSuffixFor(JVMPlatform)
.crossType(FluenceCrossType)
.in(file("bits"))
.settings(
commons,
libraryDependencies ++= Seq(
"org.scodec" %%% "scodec-bits" % ScodecBitsV,
"org.scalacheck" %%% "scalacheck" % ScalacheckV % Test,
"org.scalatest" %%% "scalatest" % ScalatestV % Test
)
)
.jsSettings(
fork in Test := false
)
.enablePlugins(AutomateHeaderPlugin)
.dependsOn(`codec-core`)
lazy val `codec-bits-js` = `codec-bits`.js
lazy val `codec-bits-jvm` = `codec-bits`.jvm
lazy val `codec-circe` = crossProject(JVMPlatform, JSPlatform)
.withoutSuffixFor(JVMPlatform)
.crossType(FluenceCrossType)
.in(file("circe"))
.settings(
commons,
libraryDependencies ++= Seq(
"io.circe" %%% "circe-core" % CirceV,
"io.circe" %%% "circe-parser" % CirceV,
"org.scalatest" %%% "scalatest" % ScalatestV % Test
)
)
.jsSettings(
fork in Test := false
)
.enablePlugins(AutomateHeaderPlugin)
.dependsOn(`codec-core`)
lazy val `codec-circe-js` = `codec-circe`.js
lazy val `codec-circe-jvm` = `codec-circe`.jvm
lazy val `codec-kryo` = project
.in(file("kryo"))
.settings(
commons,
libraryDependencies ++= Seq(
chill,
"com.chuusai" %% "shapeless" % ShapelessV,
"org.scalatest" %% "scalatest" % ScalatestV % Test
)
)
.dependsOn(`codec-core-jvm`)
lazy val `codec-protobuf` = crossProject(JVMPlatform, JSPlatform)
.withoutSuffixFor(JVMPlatform)
.crossType(FluenceCrossType)
.in(file("codec/protobuf"))
.settings(
commons,
protobuf
)
.jsSettings(
fork in Test := false,
scalaJSModuleKind := ModuleKind.CommonJSModule
)
.enablePlugins(AutomateHeaderPlugin)
.dependsOn(`codec-core`)
lazy val `codec-protobuf-jvm` = `codec-protobuf`.jvm
lazy val `codec-protobuf-js` = `codec-protobuf`.js

View File

@ -1,11 +0,0 @@
import SbtCommons._
enablePlugins(AutomateHeaderPlugin)
commons
libraryDependencies ++= Seq(
chill,
shapeless,
scalatest
)

View File

@ -0,0 +1,29 @@
import sbt._
import sbtcrossproject.CrossPlugin.autoImport._
import scalajscrossproject.ScalaJSCrossPlugin.autoImport._
/**
* cross types https://github.com/portable-scala/sbt-crossproject
* http://xuwei-k.github.io/slides/scala-js-matsuri/#21
* avoid move files
*/
object FluenceCrossType extends sbtcrossproject.CrossType {
override def projectDir(crossBase: File, projectType: String) =
crossBase / projectType
override def projectDir(crossBase: File, projectType: sbtcrossproject.Platform) = {
val dir = projectType match {
case JVMPlatform "jvm"
case JSPlatform "js"
}
crossBase / dir
}
def shared(projectBase: File, conf: String) =
projectBase.getParentFile / "src" / conf / "scala"
override def sharedSrcDir(projectBase: File, conf: String) =
Some(shared(projectBase, conf))
}

1
project/build.properties Normal file
View File

@ -0,0 +1 @@
sbt.version = 1.1.2

20
project/plugins.sbt Normal file
View File

@ -0,0 +1,20 @@
addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "1.4.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.2")
addSbtPlugin("de.heikoseeberger" % "sbt-header" % "4.1.0")
addSbtPlugin("com.thesamet" % "sbt-protoc" % "0.99.18")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.22")
addSbtPlugin("org.portable-scala" % "sbt-crossproject" % "0.3.1")
addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.3.1")
addSbtPlugin("ch.epfl.scala" % "sbt-scalajs-bundler" % "0.10.0")
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.0")
addSbtPlugin("com.lihaoyi" % "workbench" % "0.4.0")
libraryDependencies += "com.thesamet.scalapb" %% "compilerplugin" % "0.7.1"