You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

243 lines
8.8 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. val Http4sVersion = "0.21.16"
  2. val CirceVersion = "0.13.0"
  3. val MunitVersion = "0.7.20"
  4. val LogbackVersion = "1.2.3"
  5. val MunitCatsEffectVersion = "0.13.0"
  6. val FlywayVersion = "7.5.3"
  7. scalaVersion in ThisBuild := "2.13.4"
  8. resolvers in ThisBuild += "jitpack" at "https://jitpack.io"
  9. import com.github.tototoshi.sbt.slick.CodegenPlugin.autoImport.{
  10. slickCodegenDatabasePassword,
  11. slickCodegenDatabaseUrl,
  12. slickCodegenJdbcDriver
  13. }
  14. import slick.codegen.SourceCodeGenerator
  15. import slick.{model => m}
  16. lazy val codegenDbHost =
  17. sys.env.getOrElse("HTTP4S_DEMO_CODEGEN_DB_HOST", "localhost")
  18. lazy val codegenDbPort =
  19. sys.env.getOrElse("HTTP4S_DEMO_CODEGEN_DB_PORT", "5432")
  20. lazy val codegenDbName =
  21. sys.env.getOrElse("HTTP4S_DEMO_CODEGEN_DB_NAME", "test_db")
  22. lazy val databaseUrl =
  23. s"jdbc:postgresql://$codegenDbHost:$codegenDbPort/$codegenDbName"
  24. lazy val databaseUser =
  25. sys.env.getOrElse("HTTP4S_DEMO_CODEGEN_DB_USER", "test_user")
  26. lazy val databasePassword =
  27. sys.env.getOrElse("HTTP4S_DEMO_CODEGEN_DB_PASSWORD", "password")
  28. // alpine java docker image for smaller size - "azul/zulu-openjdk-alpine:11-jre-headless"
  29. lazy val dockerJavaImage =
  30. sys.env.getOrElse(
  31. "HTTP4S_DEMO_DOCKER_JAVA_IMAGE",
  32. "openjdk:11-jre-slim-buster"
  33. )
  34. lazy val flyway = (project in file("modules/flyway"))
  35. .enablePlugins(FlywayPlugin)
  36. .settings(
  37. libraryDependencies += "org.flywaydb" % "flyway-core" % FlywayVersion,
  38. flywayLocations := Seq("classpath:db/migration/default"),
  39. flywayUrl := databaseUrl,
  40. flywayUser := databaseUser,
  41. flywayPassword := databasePassword,
  42. flywayBaselineOnMigrate := true
  43. )
  44. lazy val testCommon = (project in file("modules/test-common"))
  45. .settings(
  46. libraryDependencies ++= Seq(
  47. "com.github.monix" % "monix-bio" % "0a2ad29275",
  48. "com.github.valskalla" %% "odin-monix" % "0.9.1",
  49. "de.lolhens" %% "munit-tagless-final" % "0.0.1"
  50. )
  51. )
  52. lazy val root = (project in file("."))
  53. .enablePlugins(
  54. CodegenPlugin,
  55. DockerPlugin,
  56. JavaAppPackaging,
  57. AshScriptPlugin,
  58. BuildInfoPlugin,
  59. GitBranchPrompt
  60. )
  61. .configs(IntegrationTest)
  62. .settings(
  63. organization := "wow.doge",
  64. name := "http4s-demo",
  65. version in Docker := sys.env
  66. .get("HTTP4S_DEMO_DOCKER_PUBLISH_TAG")
  67. .map(s => if (s.startsWith("v")) s.tail else s)
  68. .getOrElse(version.value),
  69. dockerBaseImage := dockerJavaImage,
  70. dockerExposedPorts := Seq(8081),
  71. dockerUsername := Some("rohansircar"),
  72. Defaults.itSettings,
  73. inConfig(IntegrationTest)(scalafixConfigSettings(IntegrationTest)),
  74. buildInfoOptions ++= Seq(BuildInfoOption.ToJson, BuildInfoOption.BuildTime),
  75. buildInfoPackage := "wow.doge.http4sdemo",
  76. scalacOptions ++= Seq(
  77. "-encoding",
  78. "UTF-8",
  79. "-deprecation",
  80. "-feature",
  81. "-language:existentials",
  82. "-language:experimental.macros",
  83. "-language:higherKinds",
  84. "-language:implicitConversions",
  85. "-unchecked",
  86. "-Xlint",
  87. "-Ywarn-numeric-widen",
  88. "-Ymacro-annotations",
  89. //silence warnings for by-name implicits
  90. "-Wconf:cat=lint-byname-implicit:s",
  91. //give errors on non exhaustive matches
  92. "-Wconf:msg=match may not be exhaustive:e",
  93. // """-Wconf:site=wow\.doge\.http4sdemo\.slickcodegen\Tables\$:i""",
  94. "-Wconf:msg=early initializers are deprecated:i",
  95. """-Wconf:site=wow\.doge\.http4sdemo\.slickcodegen\..*:i""",
  96. // """-Wconf:src=target/src_managed/Tables.scala:s""",
  97. "-explaintypes" // Explain type errors in more detail.
  98. ),
  99. scalacOptions ++= {
  100. if (insideCI.value) Seq("-Xfatal-warnings")
  101. else Seq.empty
  102. },
  103. javacOptions ++= Seq("-source", "11", "-target", "11"),
  104. //format: off
  105. libraryDependencies ++= Seq(
  106. "org.http4s" %% "http4s-blaze-server" % Http4sVersion,
  107. "org.http4s" %% "http4s-blaze-client" % Http4sVersion,
  108. "org.http4s" %% "http4s-circe" % Http4sVersion,
  109. "org.http4s" %% "http4s-dsl" % Http4sVersion,
  110. "io.circe" %% "circe-generic" % CirceVersion,
  111. "org.scalameta" %% "munit" % MunitVersion % "it,test",
  112. "org.typelevel" %% "munit-cats-effect-2" % MunitCatsEffectVersion % "it,test",
  113. "ch.qos.logback" % "logback-classic" % LogbackVersion,
  114. "org.scalameta" %% "svm-subs" % "20.2.0",
  115. "co.fs2" %% "fs2-reactive-streams" % "2.5.0",
  116. ),
  117. //format: on
  118. libraryDependencies ++= Seq(
  119. "io.monix" %% "monix" % "3.3.0",
  120. // "io.monix" %% "monix-bio" % "1.1.0",
  121. "com.github.monix" % "monix-bio" % "0a2ad29275",
  122. "io.circe" %% "circe-core" % "0.13.0",
  123. "io.circe" %% "circe-generic" % "0.13.0",
  124. "com.softwaremill.sttp.client" %% "core" % "2.2.9",
  125. "com.softwaremill.sttp.client" %% "monix" % "2.2.9",
  126. "com.softwaremill.sttp.client" %% "circe" % "2.2.9",
  127. "com.softwaremill.sttp.client" %% "httpclient-backend-monix" % "2.2.9",
  128. "com.softwaremill.quicklens" %% "quicklens" % "1.6.1",
  129. "com.softwaremill.common" %% "tagging" % "2.2.1",
  130. "com.softwaremill.macwire" %% "macros" % "2.3.6" % "provided",
  131. "com.github.valskalla" %% "odin-monix" % "0.9.1",
  132. "com.github.valskalla" %% "odin-slf4j" % "0.9.1",
  133. "com.github.valskalla" %% "odin-json" % "0.9.1",
  134. "com.github.valskalla" %% "odin-extras" % "0.9.1",
  135. "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2",
  136. "com.lihaoyi" %% "os-lib" % "0.7.1",
  137. "com.beachape" %% "enumeratum" % "1.6.1",
  138. "com.chuusai" %% "shapeless" % "2.3.3",
  139. "com.lihaoyi" %% "sourcecode" % "0.2.1",
  140. "eu.timepit" %% "refined" % "0.9.19",
  141. "com.zaxxer" % "HikariCP" % "3.4.2",
  142. "com.typesafe.slick" %% "slick" % "3.3.2",
  143. "com.typesafe.slick" %% "slick-hikaricp" % "3.3.2",
  144. "com.h2database" % "h2" % "1.4.199",
  145. "org.postgresql" % "postgresql" % "42.2.18",
  146. "com.github.pureconfig" %% "pureconfig" % "0.14.0",
  147. "io.scalaland" %% "chimney" % "0.6.0",
  148. "com.rms.miu" %% "slick-cats" % "0.10.4",
  149. "com.kubukoz" %% "slick-effect" % "0.3.0",
  150. "io.circe" %% "circe-fs2" % "0.13.0",
  151. // "org.scalameta" %% "munit" % "0.7.23" % "it,test",
  152. "de.lolhens" %% "munit-tagless-final" % "0.0.1" % "it,test",
  153. "org.scalameta" %% "munit-scalacheck" % "0.7.23" % "it,test",
  154. "org.scalacheck" %% "scalacheck" % "1.15.3" % "it,test",
  155. "com.dimafeng" %% "testcontainers-scala-munit" % "0.39.3" % IntegrationTest,
  156. "com.dimafeng" %% "testcontainers-scala-postgresql" % "0.39.3" % IntegrationTest
  157. ),
  158. testFrameworks += new TestFramework("munit.Framework"),
  159. buildInfoKeys := Seq[BuildInfoKey](
  160. name,
  161. version,
  162. scalaVersion,
  163. sbtVersion,
  164. libraryDependencies,
  165. javacOptions,
  166. dockerBaseImage
  167. )
  168. )
  169. .settings(
  170. slickCodegenDatabaseUrl := databaseUrl,
  171. slickCodegenDatabaseUser := databaseUser,
  172. slickCodegenDatabasePassword := databasePassword,
  173. slickCodegenDriver := _root_.slick.jdbc.PostgresProfile,
  174. slickCodegenJdbcDriver := "org.postgresql.Driver",
  175. slickCodegenOutputPackage := "wow.doge.http4sdemo.slickcodegen",
  176. slickCodegenExcludedTables := Seq("schema_version"),
  177. slickCodegenCodeGenerator := { (model: m.Model) =>
  178. new SourceCodeGenerator(model) {
  179. override def Table = new Table(_) {
  180. // override def EntityType = new EntityType {
  181. // override def caseClassFinal = true
  182. // }
  183. override def Column = new Column(_) {
  184. override def rawType = model.tpe match {
  185. case "java.sql.Timestamp" =>
  186. "java.time.LocalDateTime" // kill j.s.Timestamp
  187. case _ =>
  188. super.rawType
  189. }
  190. }
  191. }
  192. }
  193. },
  194. sourceGenerators in Compile += slickCodegen.taskValue
  195. )
  196. .dependsOn(flyway, testCommon)
  197. ThisBuild / scalafixDependencies += "com.github.liancheng" %% "organize-imports" % "0.4.3"
  198. inThisBuild(
  199. List(
  200. scalaVersion := scalaVersion.value, // 2.11.12, or 2.13.3
  201. semanticdbEnabled := true, // enable SemanticDB
  202. semanticdbVersion := "4.4.2", // use Scalafix compatible version
  203. addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.10.3"),
  204. addCompilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.1"),
  205. dynverSeparator := "-"
  206. )
  207. )
  208. addCommandAlias("lint-check", "scalafmtCheckAll; scalafixAll --check")
  209. addCommandAlias("lint-run", "scalafmtAll; scalafixAll")
  210. wartremoverErrors in (Compile, compile) ++=
  211. Warts.allBut(
  212. Wart.Any,
  213. Wart.NonUnitStatements,
  214. Wart.StringPlusAny,
  215. Wart.Overloading,
  216. Wart.PublicInference,
  217. Wart.Nothing,
  218. Wart.Var,
  219. Wart.DefaultArguments,
  220. Wart.OptionPartial,
  221. // Wart.MutableDataStructures,
  222. Wart.ImplicitConversion,
  223. Wart.ImplicitParameter,
  224. Wart.ToString,
  225. Wart.Recursion,
  226. Wart.While,
  227. Wart.ExplicitImplicitTypes,
  228. Wart.ListUnapply
  229. )
  230. wartremoverExcluded += (sourceManaged in Compile).value