build.sbt (115 lines of code) (raw):
import com.gu.riffraff.artifact.BuildInfo
import com.typesafe.sbt.packager.archetypes.systemloader.ServerLoader.Systemd
import java.time.format.DateTimeFormatter
import java.time.{ZoneId, ZonedDateTime}
name := "amigo"
version := "1.0-latest"
scalaVersion := "2.13.16"
Universal / javaOptions ++= Seq(
s"-Dpidfile.path=/dev/null",
"-J-XX:InitialRAMPercentage=50",
"-J-XX:MaxRAMPercentage=50",
"-J-XX:MaxMetaspaceSize=300m",
"-J-DpackerHome=/opt/packer",
"-J-Dlogger.resource=logback-PROD.xml",
s"-J-Dlogs.home=/var/log/${packageName.value}",
"-J-Xlog:gc*",
s"-J-Xlog:gc:/var/log/${packageName.value}/gc.log"
)
lazy val root = (project in file("."))
.aggregate(imageCopier)
.enablePlugins(
PlayScala,
RiffRaffArtifact,
JDebPackaging,
BuildInfoPlugin,
SystemdPlugin
)
.settings(
Universal / packageName := normalizedName.value,
maintainer := "Guardian Developer Experience <devx@theguardian.com>",
Debian / serverLoading := Some(Systemd),
riffRaffManifestProjectName := s"tools::${name.value}",
riffRaffPackageType := (Debian / packageBin).value,
riffRaffArtifactResources ++= Seq(
(imageCopier / Universal / packageBin).value -> "imagecopier/image-copier.zip",
baseDirectory.value / "cdk/cdk.out/AMIgo-CODE.template.json" -> "cloudformation/AMIgo-CODE.template.json",
baseDirectory.value / "cdk/cdk.out/AMIgo-PROD.template.json" -> "cloudformation/AMIgo-PROD.template.json"
),
// Include the roles dir in the tarball for now
Universal / mappings ++= (file("roles") ** "*").get.map { f =>
f.getAbsoluteFile -> f.toString
},
buildInfoPackage := "amigo",
buildInfoKeys := {
lazy val buildInfo = BuildInfo(baseDirectory.value)
// so this next one is constant to avoid it always recompiling on dev machines.
// we only really care about build time in CI, when a constant based on when
// it was loaded is just fine
lazy val buildTime: String = DateTimeFormatter.ISO_OFFSET_DATE_TIME
.format(ZonedDateTime.now(ZoneId.of("UTC")))
Seq[BuildInfoKey](
BuildInfoKey("buildNumber" -> buildInfo.buildIdentifier),
BuildInfoKey("buildTime" -> buildTime),
BuildInfoKey("gitCommitId" -> buildInfo.revision)
)
},
buildInfoOptions := Seq(
BuildInfoOption.Traits("management.BuildInfo"),
BuildInfoOption.ToJson
)
)
scalacOptions ++= Seq(
"-unchecked",
"-deprecation",
"-feature",
"-Xfatal-warnings"
)
val jacksonVersion = "2.18.2"
val circeVersion = "0.14.10"
// These can live in the same codebase, see: https://aws.amazon.com/blogs/developer/aws-sdk-for-java-2-x-released/
val awsV1SdkVersion = "1.12.783"
val awsV2SdkVersion = "2.31.22"
val playSecretRotationVersion = "13.2.0"
libraryDependencies ++= Seq(
ws,
"com.fasterxml.jackson.dataformat" % "jackson-dataformat-yaml" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-annotations" % jacksonVersion,
"com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion,
"org.scanamo" %% "scanamo" % "3.0.0",
"com.beachape" %% "enumeratum" % "1.7.5",
"com.gu" %% "simple-configuration-ssm" % "5.1.0",
"com.gu.play-secret-rotation" %% "play-v30" % playSecretRotationVersion,
"com.gu.play-secret-rotation" %% "aws-parameterstore-sdk-v2" % playSecretRotationVersion,
"com.gu.play-googleauth" %% "play-v30" % "20.1.0",
// Pin play-bootstrap because it is tied to the bootstrap version
"com.adrianhurt" %% "play-bootstrap" % "1.6.1-P28-B3", // scala-steward:off
"org.quartz-scheduler" % "quartz" % "2.5.0",
"com.lihaoyi" %% "fastparse" % "3.1.1",
"com.amazonaws" % "aws-java-sdk-ec2" % awsV1SdkVersion,
"com.amazonaws" % "aws-java-sdk-sns" % awsV1SdkVersion,
"com.amazonaws" % "aws-java-sdk-dynamodb" % awsV1SdkVersion,
"com.amazonaws" % "aws-java-sdk-sts" % awsV1SdkVersion,
"com.amazonaws" % "aws-java-sdk-kinesis" % awsV1SdkVersion,
"net.logstash.logback" % "logstash-logback-encoder" % "8.0",
// Transient dependency of Play. No newer version of Play with this vulnerability fixed.
"ch.qos.logback" % "logback-classic" % "1.5.16",
"software.amazon.awssdk" % "dynamodb" % awsV2SdkVersion,
"software.amazon.awssdk" % "auth" % awsV2SdkVersion,
"software.amazon.awssdk" % "regions" % awsV2SdkVersion,
"org.scalatest" %% "scalatest-flatspec" % "3.2.19" % Test,
"org.scalatest" %% "scalatest-shouldmatchers" % "3.2.19" % Test,
"org.scalatestplus" %% "mockito-3-4" % "3.2.10.0" % Test,
"fun.mike" % "diff-match-patch" % "0.0.2",
"com.gu" %% "anghammarad-client" % "4.0.0"
)
routesGenerator := InjectedRoutesGenerator
routesImport += "models._"
lazy val imageCopier = (project in file("imageCopier"))
.enablePlugins(JavaAppPackaging)
.settings(
scalaVersion := "2.13.16",
Universal / topLevelDirectory := None,
Universal / packageName := normalizedName.value,
libraryDependencies ++= Seq(
"software.amazon.awssdk" % "ec2" % awsV2SdkVersion,
"com.amazonaws" % "aws-lambda-java-core" % "1.2.3",
"com.amazonaws" % "aws-lambda-java-events" % "3.14.0",
"io.circe" %% "circe-parser" % circeVersion,
"io.circe" %% "circe-generic" % circeVersion
)
)