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.

215 lines
8.7 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
  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 += "jitpack" at "https://jitpack.io"
  9. import com.github.tototoshi.sbt.slick.CodegenPlugin.autoImport.{
  10. slickCodegenDatabasePassword,
  11. slickCodegenDatabaseUrl,
  12. slickCodegenJdbcDriver
  13. }
  14. import _root_.slick.codegen.SourceCodeGenerator
  15. import _root_.slick.{model => m}
  16. lazy val codegenDbHost = sys.env.getOrElse("CODEGEN_DB_HOST", "localhost")
  17. lazy val codegenDbPort = sys.env.getOrElse("CODEGEN_DB_PORT", "5432")
  18. lazy val codegenDbName = sys.env.getOrElse("CODEGEN_DB_NAME", "test_db")
  19. lazy val databaseUrl =
  20. s"jdbc:postgresql://$codegenDbHost:$codegenDbPort/$codegenDbName"
  21. lazy val databaseUser = sys.env.getOrElse("CODEGEN_DB_USER", "test_user")
  22. lazy val databasePassword = sys.env.getOrElse("CODEGEN_DB_PASSWORD", "password")
  23. // alpine java docker image for smaller size - "azul/zulu-openjdk-alpine:11-jre-headless"
  24. lazy val dockerJavaImage =
  25. sys.env.getOrElse("DOCKER_JAVA_IMAGE", "openjdk:11-jre-slim-buster")
  26. // lazy val releaseVersion = {
  27. // val str = sys.env.get("RELEASE_VERSION")
  28. // str.map(s => if (s.startsWith("v")) s.tail else s)
  29. // }
  30. // lazy val dockerPublishTag = {
  31. // val s = sys.env
  32. // .get("DOCKER_PUBLISH_TAG")
  33. // .orElse(sys.env.get("RELEASE_VERSION"))
  34. // .getOrElse("latest")
  35. // if (s.startsWith("v")) s.tail else s
  36. // }
  37. lazy val flyway = (project in file("modules/flyway"))
  38. .enablePlugins(FlywayPlugin)
  39. .settings(
  40. libraryDependencies += "org.flywaydb" % "flyway-core" % FlywayVersion,
  41. flywayLocations := Seq("classpath:db/migration/default"),
  42. flywayUrl := databaseUrl,
  43. flywayUser := databaseUser,
  44. flywayPassword := databasePassword,
  45. flywayBaselineOnMigrate := true
  46. )
  47. lazy val root = (project in file("."))
  48. .enablePlugins(CodegenPlugin, DockerPlugin, JavaAppPackaging, AshScriptPlugin)
  49. .settings(
  50. organization := "wow.doge",
  51. name := "http4s-demo",
  52. // version := releaseVersion.getOrElse(dynver.value),
  53. version in Docker := sys.env
  54. .getOrElse(
  55. "DOCKER_PUBLISH_TAG", {
  56. val s = version.value
  57. if (s.startsWith("v")) s.tail else s
  58. }
  59. ),
  60. dockerBaseImage := dockerJavaImage,
  61. dockerExposedPorts := Seq(8081),
  62. dockerUsername := Some("rohansircar"),
  63. scalacOptions ++= Seq(
  64. "-encoding",
  65. "UTF-8",
  66. "-deprecation",
  67. "-feature",
  68. "-language:existentials",
  69. "-language:experimental.macros",
  70. "-language:higherKinds",
  71. "-language:implicitConversions",
  72. "-unchecked",
  73. "-Xlint",
  74. "-Ywarn-numeric-widen",
  75. "-Ymacro-annotations",
  76. //silence warnings for by-name implicits
  77. "-Wconf:cat=lint-byname-implicit:s",
  78. //give errors on non exhaustive matches
  79. "-Wconf:msg=match may not be exhaustive:e",
  80. "-explaintypes" // Explain type errors in more detail.
  81. ),
  82. javacOptions ++= Seq("-source", "11", "-target", "11"),
  83. //format: off
  84. libraryDependencies ++= Seq(
  85. "org.http4s" %% "http4s-blaze-server" % Http4sVersion,
  86. "org.http4s" %% "http4s-blaze-client" % Http4sVersion,
  87. "org.http4s" %% "http4s-circe" % Http4sVersion,
  88. "org.http4s" %% "http4s-dsl" % Http4sVersion,
  89. "io.circe" %% "circe-generic" % CirceVersion,
  90. "org.scalameta" %% "munit" % MunitVersion % Test,
  91. "org.typelevel" %% "munit-cats-effect-2" % MunitCatsEffectVersion % Test,
  92. "ch.qos.logback" % "logback-classic" % LogbackVersion,
  93. "org.scalameta" %% "svm-subs" % "20.2.0",
  94. "co.fs2" %% "fs2-reactive-streams" % "2.5.0",
  95. ),
  96. //format: on
  97. libraryDependencies ++= Seq(
  98. "io.monix" %% "monix" % "3.3.0",
  99. // "io.monix" %% "monix-bio" % "1.1.0",
  100. "com.github.monix" % "monix-bio" % "0a2ad29275",
  101. "io.circe" %% "circe-core" % "0.13.0",
  102. "io.circe" %% "circe-generic" % "0.13.0",
  103. "com.softwaremill.sttp.client" %% "core" % "2.2.9",
  104. "com.softwaremill.sttp.client" %% "monix" % "2.2.9",
  105. "com.softwaremill.sttp.client" %% "circe" % "2.2.9",
  106. "com.softwaremill.sttp.client" %% "httpclient-backend-monix" % "2.2.9",
  107. "com.softwaremill.quicklens" %% "quicklens" % "1.6.1",
  108. "com.softwaremill.common" %% "tagging" % "2.2.1",
  109. "com.softwaremill.macwire" %% "macros" % "2.3.6" % "provided",
  110. "com.github.valskalla" %% "odin-monix" % "0.9.1",
  111. "com.github.valskalla" %% "odin-slf4j" % "0.9.1",
  112. "com.github.valskalla" %% "odin-json" % "0.9.1",
  113. "com.github.valskalla" %% "odin-extras" % "0.9.1",
  114. "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2",
  115. "com.lihaoyi" %% "os-lib" % "0.7.1",
  116. "com.beachape" %% "enumeratum" % "1.6.1",
  117. "com.chuusai" %% "shapeless" % "2.3.3",
  118. "com.lihaoyi" %% "sourcecode" % "0.2.1",
  119. "eu.timepit" %% "refined" % "0.9.19",
  120. "com.zaxxer" % "HikariCP" % "3.4.2",
  121. "com.typesafe.slick" %% "slick" % "3.3.2",
  122. "com.typesafe.slick" %% "slick-hikaricp" % "3.3.2",
  123. "com.h2database" % "h2" % "1.4.199",
  124. "org.postgresql" % "postgresql" % "42.2.18",
  125. "com.github.pureconfig" %% "pureconfig" % "0.14.0",
  126. "io.scalaland" %% "chimney" % "0.6.0",
  127. "com.rms.miu" %% "slick-cats" % "0.10.4",
  128. "com.kubukoz" %% "slick-effect" % "0.3.0",
  129. "io.circe" %% "circe-fs2" % "0.13.0",
  130. // "org.scalameta" %% "munit" % "0.7.23" % Test,
  131. "de.lolhens" %% "munit-tagless-final" % "0.0.1" % Test,
  132. "org.scalameta" %% "munit-scalacheck" % "0.7.23" % Test,
  133. "org.scalacheck" %% "scalacheck" % "1.15.3" % Test,
  134. "com.dimafeng" %% "testcontainers-scala-munit" % "0.39.3" % Test,
  135. "com.dimafeng" %% "testcontainers-scala-postgresql" % "0.39.3" % Test
  136. ),
  137. addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.10.3"),
  138. addCompilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.1"),
  139. ThisBuild / scalafixDependencies += "com.github.liancheng" %% "organize-imports" % "0.4.3",
  140. inThisBuild(
  141. List(
  142. scalaVersion := scalaVersion.value, // 2.11.12, or 2.13.3
  143. semanticdbEnabled := true, // enable SemanticDB
  144. semanticdbVersion := "4.4.2" // use Scalafix compatible version
  145. )
  146. ),
  147. testFrameworks += new TestFramework("munit.Framework"),
  148. assemblyMergeStrategy in assembly := {
  149. case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first
  150. case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
  151. case "application.conf" => MergeStrategy.concat
  152. case "unwanted.txt" => MergeStrategy.discard
  153. case x if Assembly.isConfigFile(x) =>
  154. MergeStrategy.concat
  155. case PathList("META-INF", xs @ _*) =>
  156. (xs map { _.toLowerCase }) match {
  157. case ("manifest.mf" :: Nil) | ("index.list" :: Nil) |
  158. ("dependencies" :: Nil) =>
  159. MergeStrategy.discard
  160. case ps @ (x :: xs)
  161. if ps.last.endsWith(".sf") || ps.last.endsWith(".dsa") =>
  162. MergeStrategy.discard
  163. case "plexus" :: xs =>
  164. MergeStrategy.discard
  165. case "services" :: xs =>
  166. MergeStrategy.filterDistinctLines
  167. case ("spring.schemas" :: Nil) | ("spring.handlers" :: Nil) =>
  168. MergeStrategy.filterDistinctLines
  169. case _ => MergeStrategy.first // Changed deduplicate to first
  170. }
  171. case PathList(_*) => MergeStrategy.first
  172. }
  173. )
  174. .settings(
  175. // libraryDependencies ++= Seq(
  176. // "com.zaxxer" % "HikariCP" % "3.4.2",
  177. // "com.typesafe.slick" %% "slick" % "3.3.2",
  178. // "com.typesafe.slick" %% "slick-hikaricp" % "3.3.2",
  179. // "com.h2database" % "h2" % "1.4.199"
  180. // ),
  181. slickCodegenDatabaseUrl := databaseUrl,
  182. slickCodegenDatabaseUser := databaseUser,
  183. slickCodegenDatabasePassword := databasePassword,
  184. slickCodegenDriver := _root_.slick.jdbc.PostgresProfile,
  185. slickCodegenJdbcDriver := "org.postgresql.Driver",
  186. slickCodegenOutputPackage := "wow.doge.http4sdemo.slickcodegen",
  187. slickCodegenExcludedTables := Seq("schema_version"),
  188. slickCodegenCodeGenerator := { (model: m.Model) =>
  189. new SourceCodeGenerator(model) {
  190. override def Table = new Table(_) {
  191. override def Column = new Column(_) {
  192. override def rawType = model.tpe match {
  193. case "java.sql.Timestamp" =>
  194. "java.time.LocalDateTime" // kill j.s.Timestamp
  195. case _ =>
  196. super.rawType
  197. }
  198. }
  199. }
  200. }
  201. },
  202. sourceGenerators in Compile += slickCodegen.taskValue
  203. )
  204. .dependsOn(flyway)