build.sbt (160 lines of code) (raw):

import com.gu.riffraff.artifact.BuildInfo import sys.process._ name := "typerighter" ThisBuild / organization := "com.gu" ThisBuild / scalaVersion := "2.13.16" ThisBuild / version := "1.0-SNAPSHOT" ThisBuild / scalacOptions := Seq( "-encoding", "UTF-8", "-release:11", "-deprecation", "-Xfatal-warnings", "-Xlint:unused", "-feature", "-unchecked", "-language:implicitConversions", "-language:postfixOps", // https://github.com/playframework/twirl/issues/105 "-Wconf:src=twirl/.*:s" ) // Prevent the output of dependencyTree being truncated to avoid misreporting dependencies. // See https://support.snyk.io/hc/en-us/articles/9590215676189-Deeply-nested-Scala-projects-have-dependencies-truncated ThisBuild / asciiGraphWidth := 999999999 val languageToolVersion = "6.4" val awsSdkVersion = "1.12.749" val capiModelsVersion = "17.5.1" val capiClientVersion = "19.2.1" val pandaVersion = "7.0.0" val circeVersion = "0.14.1" val scalikejdbcVersion = scalikejdbc.ScalikejdbcBuildInfo.version val scalikejdbcPlayVersion = "2.8.0-scalikejdbc-3.5" val appsFolder = "apps" def javaVersionNumber = { IO.read(new File(".java-version")) } val jackson = { val version = "2.14.2" Seq( "com.fasterxml.jackson.module" %% "jackson-module-scala" % version, "com.fasterxml.jackson.core" % "jackson-core" % version, "com.fasterxml.jackson.core" % "jackson-databind" % version, "com.fasterxml.jackson.dataformat" % "jackson-dataformat-cbor" % version ) } val commonSettings = Seq( Test / fork := false, // Enables attaching debugger in tests buildInfoPackage := "typerighter", buildInfoKeys := { lazy val buildInfo = BuildInfo(baseDirectory.value) Seq[BuildInfoKey]( BuildInfoKey.constant("buildNumber", buildInfo.buildIdentifier), // so this next one is constant to avoid it always recompiling on dev machines. // we only really care about build time on teamcity, when a constant based on when // it was loaded is just fine BuildInfoKey.constant("buildTime", System.currentTimeMillis), BuildInfoKey.constant("gitCommitId", buildInfo.revision) ) }, //Necessary to override jackson versions due to AWS and Play incompatibility dependencyOverrides ++= jackson, //Necessary to override json to resolve vulnerabilities introduced by languagetool-core dependencyOverrides ++= Seq("org.json" % "json" % "20231013"), libraryDependencies ++= Seq( "com.amazonaws" % "aws-java-sdk-secretsmanager" % awsSdkVersion, "net.logstash.logback" % "logstash-logback-encoder" % "7.2", "org.scalatestplus.play" %% "scalatestplus-play" % "6.0.1" % Test, "com.softwaremill.diffx" %% "diffx-scalatest-should" % "0.8.2" % Test, "org.mockito" %% "mockito-scala-scalatest" % "1.17.30", "com.gu" %% "simple-configuration-ssm" % "5.0.2", "com.gu" %% "pan-domain-auth-play_2-9" % pandaVersion, "com.google.api-client" % "google-api-client" % "2.0.1", "com.google.apis" % "google-api-services-sheets" % "v4-rev20221216-2.0.0", "org.languagetool" % "languagetool-core" % languageToolVersion, "org.languagetool" % "language-en" % languageToolVersion, "com.gu" %% "content-api-models-scala" % capiModelsVersion, "com.gu" %% "content-api-models-json" % capiModelsVersion, "com.gu" %% "content-api-client-aws" % "0.7", "com.gu" %% "content-api-client-default" % capiClientVersion, "com.gu" %% "panda-hmac-play_2-9" % pandaVersion, "net.sourceforge.htmlcleaner" % "htmlcleaner" % "2.29", "com.scalawilliam" %% "xs4s-core" % "0.9.1", "ch.qos.logback" % "logback-classic" % "1.4.14", // manually overwriting logback-classic to resolve issue in Play framework: https://github.com/playframework/playframework/issues/11499 ), libraryDependencySchemes += "org.scala-lang.modules" %% "scala-xml" % VersionScheme.Always ) val commonLib = (project in file(s"$appsFolder/common-lib")) .enablePlugins(BuildInfoPlugin) .settings( commonSettings, libraryDependencies ++= Seq( ws, // @todo – we're repeating ourselves. Can we derive this from the plugin? "com.typesafe.play" %% "play" % "2.9.4", ) ) def playProject(label: String, projectName: String, domainPrefix: String, devHttpPorts: Map[String, String]) = Project(projectName, file(s"$appsFolder/$projectName")) .dependsOn(commonLib) .enablePlugins(PlayScala, BuildInfoPlugin, JDebPackaging, SystemdPlugin) .settings( PlayKeys.devSettings ++= devHttpPorts.map { case (protocol, value) => s"play.server.$protocol.port" -> value }.toSeq, PlayKeys.playRunHooks += new ViteBuildHook(label, domainPrefix), Universal / javaOptions ++= Seq( s"-Dpidfile.path=/dev/null", "-J-XX:MaxRAMFraction=2", "-J-XX:InitialRAMFraction=2", "-J-XX:MaxMetaspaceSize=300m", "-J-XX:+PrintGCDetails", s"-J-Dlogs.home=/var/log/${packageName.value}", s"-J-Xloggc:/var/log/${packageName.value}/gc.log" ), commonSettings, ) val checker = playProject( "Rule checker", "checker", "checker", Map("http" -> "9100") ) .enablePlugins(GatlingPlugin) .settings( Universal / javaOptions += s"-Dconfig.file=/etc/gu/${packageName.value}.conf", packageName := "typerighter-checker", libraryDependencies ++= Seq( "com.amazonaws" % "aws-java-sdk-ec2" % awsSdkVersion, "com.amazonaws" % "aws-java-sdk-s3" % awsSdkVersion, "com.amazonaws" % "aws-java-sdk-ssm" % awsSdkVersion, "com.amazonaws" % "aws-java-sdk-cloudwatch" % awsSdkVersion, "net.logstash.logback" % "logstash-logback-encoder" % "6.0", "org.webjars" % "bootstrap" % "4.6.2", "com.gu" %% "content-api-models-scala" % capiModelsVersion, "com.gu" %% "content-api-models-json" % capiModelsVersion, "com.gu" %% "content-api-client-aws" % "0.7", "com.gu" %% "content-api-client-default" % capiClientVersion, "org.apache.opennlp" % "opennlp" % "2.1.0", "io.gatling.highcharts" % "gatling-charts-highcharts" % "3.7.2" % "test,it", "io.gatling" % "gatling-test-framework" % "3.7.2" % "test,it", "org.carrot2" % "morfologik-tools" % "2.1.7" ) ++ Seq( "io.circe" %% "circe-core", "io.circe" %% "circe-generic", "io.circe" %% "circe-parser" ).map(_ % circeVersion) ) val ruleManager = playProject( "Rule manager", "rule-manager", "manager", Map("http" -> "9101") ) .enablePlugins(ScalikejdbcPlugin) .settings( packageName := "typerighter-rule-manager", libraryDependencies ++= Seq( guice, jdbc, evolutions, "org.postgresql" % "postgresql" % "42.5.5", "org.scalikejdbc" %% "scalikejdbc" % scalikejdbcVersion, "org.scalikejdbc" %% "scalikejdbc-config" % scalikejdbcVersion, "org.scalikejdbc" %% "scalikejdbc-play-initializer" % scalikejdbcPlayVersion, "org.scalikejdbc" %% "scalikejdbc-test" % scalikejdbcVersion % Test, "org.scalikejdbc" %% "scalikejdbc-syntax-support-macro" % scalikejdbcVersion, "com.gu" %% "editorial-permissions-client" % "2.14", "com.github.tototoshi" %% "scala-csv" % "2.0.0", ), libraryDependencySchemes += "org.scala-lang.modules" %% "scala-xml" % VersionScheme.Always ) val root = (project in file(".")).aggregate(commonLib, checker, ruleManager)