build.sbt (60 lines of code) (raw):
name := "status-app"
version := "1.0"
import com.gu.riffraff.artifact.BuildInfo
import com.typesafe.sbt.packager.archetypes.systemloader.SystemdPlugin
import com.typesafe.sbt.packager.archetypes.systemloader.ServerLoader.Systemd
enablePlugins(PlayScala, SbtWeb, RiffRaffArtifact, BuildInfoPlugin, JDebPackaging, SystemdPlugin)
scalaVersion := "2.13.10"
scalacOptions ++= List("-feature", "-deprecation")
val jacksonVersion = "2.15.0"
// Until all dependencies are on scala-java8-compat v1.x, this avoids unnecessary fatal eviction errors
ThisBuild / libraryDependencySchemes += "org.scala-lang.modules" %% "scala-java8-compat" % VersionScheme.Always
libraryDependencies ++= Seq(
specs2 % Test,
ehcache,
ws,
"com.gu.play-googleauth" %% "play-v30" % "6.0.0",
"org.webjars.bower" % "react" % "0.14.0",
"org.webjars" % "bootstrap" % "3.4.1",
"org.webjars" % "d3js" % "3.5.17",
"org.webjars" % "zeroclipboard" % "2.2.0",
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.15.0",
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-annotations" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-core" % jacksonVersion,
"com.fasterxml.jackson.dataformat" % "jackson-dataformat-cbor" % jacksonVersion,
"com.fasterxml.jackson.datatype" % "jackson-datatype-jdk8" % jacksonVersion,
"com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % jacksonVersion,
"software.amazon.awssdk" % "ssm" % "2.30.37"
) ++ Seq(
"ec2", "elasticloadbalancing", "s3", "autoscaling", "cloudwatch", "sqs"
).map(artifact => "com.amazonaws" % s"aws-java-sdk-$artifact" % "1.12.694")
maintainer := "Paul Brown <paul.brown@theguardian.com>"
packageSummary := "AWS status web-app"
packageDescription := """Web app that shows an overview of the status of autoscaling groups in an AWS account"""
Universal / javaOptions ++= Seq(
"-Dpidfile.path=/dev/null",
"-J-XX:MaxRAMPercentage=50",
"-J-XX:InitialRAMPercentage=50",
"-J-XX:MaxMetaspaceSize=500m",
s"-J-Xloggc:/var/log/${packageName.value}/gc.log"
)
Debian / serverLoading := Some(Systemd)
riffRaffPackageType := (Debian / packageBin).value
riffRaffUploadArtifactBucket := Some("riffraff-artifact")
riffRaffUploadManifestBucket := Some("riffraff-builds")
buildInfoPackage := "controllers"
def env(key: String): Option[String] = Option(System.getenv(key))
buildInfoKeys := {
lazy val buildInfo = BuildInfo(baseDirectory.value)
Seq[BuildInfoKey](
Compile / libraryDependencies,
name,
version,
"buildNumber" -> buildInfo.buildIdentifier,
"gitCommitId" -> buildInfo.revision,
// 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
"buildTime" -> System.currentTimeMillis
)
}
testListeners += new JUnitXmlTestsListener(
env("CI_REPORTS").getOrElse(s"${baseDirectory.value}/shippable/testresults"))
// see http://www.scala-sbt.org/0.13/docs/Cached-Resolution.html
updateOptions := updateOptions.value.withCachedResolution(true)