support-workers/build.sbt (70 lines of code) (raw):
import LibraryVersions._
import sbt.Keys.libraryDependencies
version := "0.1-SNAPSHOT"
scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-Xfatal-warnings")
libraryDependencies ++= Seq(
"org.joda" % "joda-convert" % "2.2.3",
"org.typelevel" %% "cats-core" % catsVersion,
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.0",
"com.squareup.okhttp3" % "okhttp" % okhttpVersion,
"io.lemonlabs" %% "scala-uri" % scalaUriVersion,
"com.amazonaws" % "aws-lambda-java-core" % "1.2.3",
"software.amazon.awssdk" % "sqs" % awsClientVersion2,
// This is required to force aws libraries to use the latest version of jackson
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonDatabindVersion,
"com.fasterxml.jackson.core" % "jackson-annotations" % jacksonVersion,
"com.fasterxml.jackson.dataformat" % "jackson-dataformat-cbor" % jacksonVersion,
"org.mockito" %% "mockito-scala" % "1.17.22" % "it,test",
"org.mockito" %% "mockito-scala-scalatest" % "1.17.22" % "it,test",
"org.scalatestplus" %% "scalatestplus-mockito" % "1.0.0-M2" % "it,test",
"com.squareup.okhttp3" % "mockwebserver" % okhttpVersion % "it,test",
"io.circe" %% "circe-core" % circeVersion,
"io.circe" %% "circe-generic" % circeVersion,
"io.circe" %% "circe-generic-extras" % "0.14.3",
"io.circe" %% "circe-parser" % circeVersion,
"io.sentry" % "sentry-logback" % "1.7.30",
"com.google.code.findbugs" % "jsr305" % "3.0.2",
"com.gocardless" % "gocardless-pro" % "2.10.0",
"com.lihaoyi" %% "pprint" % "0.8.1",
)
assemblyJarName := s"${name.value}.jar"
Project.inConfig(IntegrationTest)(baseAssemblySettings)
IntegrationTest / assembly / assemblyJarName := s"${name.value}-it.jar"
IntegrationTest / assembly / assemblyMergeStrategy := {
case PathList("models", xs @ _*) => MergeStrategy.discard
case x if x.endsWith("io.netty.versions.properties") => MergeStrategy.first
case x if x.endsWith("logback.xml") => MergeStrategy.first
case x if x.endsWith("module-info.class") => MergeStrategy.discard
case "mime.types" => MergeStrategy.first
case name if name.endsWith("execution.interceptors") => MergeStrategy.filterDistinctLines
case PathList("javax", "annotation", _ @_*) => MergeStrategy.first
case y =>
val oldStrategy = (assembly / assemblyMergeStrategy).value
oldStrategy(y)
}
IntegrationTest / assembly / test := {}
assembly / aggregate := false
lazy val deployToCode =
inputKey[Unit]("Directly update AWS lambda code from CODE instead of via RiffRaff for faster feedback loop")
deployToCode := {
import scala.sys.process._
val log = streams.value.log
val s3Bucket = "support-workers-dist"
val s3Path = "support/CODE/support-workers/support-workers.jar"
val assemblyJar = assembly.value
log.info(s"generated jar $assemblyJar, about to upload to S3...")
log.info((s"aws s3 cp $assemblyJar s3://" + s3Bucket + "/" + s3Path + " --profile membership --region eu-west-1").!!)
List(
"-CreatePaymentMethodLambda-",
"-CreateSalesforceContactLambda-",
"-CreateZuoraSubscriptionLambda-",
"-SendThankYouEmailLambda-",
"-UpdateSupporterProductDataLambda-",
"-FailureHandlerLambda-",
"-SendAcquisitionEventLambda-",
"-PreparePaymentMethodForReuseLambda-",
).foreach { functionPartial =>
log.info("updating " + functionPartial + "...")
s"aws lambda update-function-code --function-name support${functionPartial}CODE --s3-bucket $s3Bucket --s3-key $s3Path --profile membership --region eu-west-1".!!
log.info("finished " + functionPartial)
}
}