build.sbt (54 lines of code) (raw):
lazy val root = (project in file("."))
.enablePlugins(RiffRaffArtifact)
.settings(
name := "invoicing-api",
description := "Zuora Invoice management for supporters (refund, etc.)",
version := "0.1.0",
organization := "com.gu",
organizationName := "The Guardian",
scalaVersion := "2.13.16",
libraryDependencies ++= List(
"org.scalameta" %% "munit" % "1.1.0" % Test,
"org.scalaj" %% "scalaj-http" % "2.4.2",
"com.lihaoyi" %% "upickle" % "4.1.0",
"com.gu" %% "spy" % "0.1.1",
"org.scala-lang.modules" %% "scala-async" % "1.0.1",
"com.lihaoyi" %% "pprint" % "0.9.0",
"com.amazonaws" % "aws-lambda-java-core" % "1.2.3",
"com.amazonaws" % "aws-lambda-java-events" % "3.15.0",
),
testFrameworks += new TestFramework("munit.Framework"),
assemblyJarName := s"${name.value}.jar",
riffRaffPackageType := assembly.value,
riffRaffUploadArtifactBucket := Option("riffraff-artifact"),
riffRaffUploadManifestBucket := Option("riffraff-builds"),
riffRaffManifestProjectName := "support:invoicing-api",
riffRaffArtifactResources += (file("cfn.yaml"), "cfn/cfn.yaml"),
scalacOptions ++= Seq( // Needed to support Scala async/await https://www.baeldung.com/scala/scala-async
"-Xasync",
),
)
lazy val deployTo =
inputKey[Unit](
"Directly update AWS lambda code from your local machine instead of via RiffRaff for faster feedback loop",
)
deployTo := {
import scala.sys.process._
import complete.DefaultParsers._
val jarFile = assembly.value
val Seq(stage) = spaceDelimited("<arg>").parsed
val s3Bucket = "membership-dist"
val s3Path = s"support/$stage/invoicing-api/invoicing-api.jar"
s"aws s3 cp $jarFile s3://$s3Bucket/$s3Path --profile membership --region eu-west-1".!!
List(
"invoicing-api-refund",
"invoicing-api-invoices",
"invoicing-api-pdf",
"invoicing-api-nextinvoicedate",
"invoicing-api-preview",
"invoicing-api-refund-erroneous-payment",
).foreach { functionName =>
System.out.println(s"Updating lambda $functionName")
s"aws lambda update-function-code --function-name $functionName-$stage --s3-bucket $s3Bucket --s3-key $s3Path --profile membership --region eu-west-1".!!
}
}