-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathbuild.sbt
180 lines (169 loc) · 7.18 KB
/
build.sbt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import com.gu.riffraff.artifact.BuildInfo
import sys.process._
name := "typerighter"
ThisBuild / organization := "com.gu"
ThisBuild / scalaVersion := "2.13.11"
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" % "1.6.4",
"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)