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.

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