in build.sbt [68:372]
def library(
theProject: Project,
projectDependencies: Seq[ClasspathDependency] = Seq(),
scalaSettings: SettingsDefinition = scala2Settings,
) =
theProject
.settings(scalaSettings, testSettings, scalafmtSettings)
.configs(EffectsTest, HealthCheckTest)
.dependsOn(projectDependencies *)
.settings(
Test / test := ((Test / test) dependsOn (projectDependencies.map(cp => cp.project / Test / test) *)).value,
Test / testOnly := ((Test / testOnly) dependsOn (projectDependencies.map(_.project / Test / test) *)).evaluated,
Test / testQuick := ((Test / testQuick) dependsOn (projectDependencies.map(_.project / Test / test) *)).evaluated,
)
// ==== START libraries ====
lazy val testLib = library(project in file("lib/test"))
.settings(
libraryDependencies ++= Seq(
scalatest,
playJson % "test",
),
)
val testDep = testLib % "test->test"
lazy val zuora = library(
project in file("lib/zuora"),
Seq(
restHttp,
testDep,
handler, // TODO only for the config, which needs to be split out
effects % "test->test",
),
)
.settings(
libraryDependencies ++= Seq(okhttp3, playJson, scalatest) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val `salesforce-core` = library(
project in file("lib/salesforce/core"),
Seq(`config-core`),
)
.settings(
libraryDependencies ++= Seq(playJson),
dependencyOverrides ++= jacksonDependencies,
)
lazy val `salesforce-client` = library(
project in file("lib/salesforce/client"),
Seq(
restHttp,
handler, // % "test->test" TODO make this dep only in test - SF client shouldn't depends on ApiGateway
effects % "test->test",
testDep,
`salesforce-core`,
),
)
.settings(
libraryDependencies ++= Seq(okhttp3, catsCore, playJson, scalatest) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val `salesforce-sttp-client` = library(
project in file("lib/salesforce/sttp-client"),
Seq(
`salesforce-core`,
`salesforce-sttp-test-stub` % Test,
),
)
.settings(
libraryDependencies ++=
Seq(sttp, sttpCirce, sttpAsyncHttpClientBackendCats % Test, scalatest, catsCore, catsEffect, circe) ++ logging,
dependencyOverrides ++= jacksonDependencies :+ asyncHttpClientOverride,
)
lazy val `salesforce-sttp-test-stub` = library(
project in file("lib/salesforce/sttp-test-stub"),
Seq(
`salesforce-core`,
),
)
.settings(
libraryDependencies ++= Seq(sttp, sttpCirce, scalatest) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val `holiday-stops` = library(
project in file("lib/holiday-stops"),
Seq(
`salesforce-client`,
effects % "test->test",
testDep,
`zuora-core` % "compile->compile;test->test",
),
)
.settings(
libraryDependencies ++= Seq(
okhttp3,
playJson,
scalatest,
scalaCheck,
circe,
circeParser,
sttp,
sttpCirce,
enumeratum,
zio,
) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val restHttp = library(project in file("lib/restHttp"), Seq(handler))
.settings(
libraryDependencies ++= Seq(okhttp3, catsCore, playJson, scalatest) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val s3ConfigValidator = library(
project in file("lib/s3ConfigValidator"),
Seq(
testDep,
handler,
zuora,
`digital-subscription-expiry`,
`identity-backfill`,
effectsDepIncludingTestFolder,
`cancellation-sf-cases-api`,
`sf-gocardless-sync`,
`holiday-stop-api`,
),
)
.settings(
libraryDependencies ++= Seq(scalatest),
dependencyOverrides ++= jacksonDependencies,
)
lazy val handler = library(
project in file("lib/handler"),
Seq(`effects-s3`, `config-core`),
)
.settings(
libraryDependencies ++= Seq(okhttp3, catsCore, playJson, scalatest, awsLambda) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
// to aid testability, only the actual handlers called as a lambda can depend on this
lazy val effects = library(
project in file("lib/effects"),
Seq(handler),
)
.settings(
dependencyOverrides ++= jacksonDependencies,
libraryDependencies ++= Seq(okhttp3, playJson, scalatest, awsS3) ++ logging,
)
lazy val `effects-s3` = library(project in file("lib/effects-s3"))
.settings(
libraryDependencies ++= Seq(awsS3) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val `effects-cloudwatch` = library(
project in file("lib/effects-cloudwatch"),
Seq(testDep),
)
.settings(
libraryDependencies ++= Seq(awsCloudwatch) ++ logging,
)
lazy val `effects-sqs` = library(project in file("lib/effects-sqs"), Seq(testDep))
.settings(
libraryDependencies ++= Seq(awsSQS) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val `effects-lambda` = library(project in file("lib/effects-lambda"), Seq(testDep))
.settings(
libraryDependencies ++= Seq(awsSdkLambda) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val `config-core` = library(project in file("lib/config-core"), Seq(), scala3Settings)
lazy val `config-cats` = library(project in file("lib/config-cats"), Seq(`effects-s3`))
.settings(
libraryDependencies ++= Seq(simpleConfig, catsEffect, circe, circeConfig),
dependencyOverrides ++= jacksonDependencies,
)
val effectsDepIncludingTestFolder: ClasspathDependency = effects % "compile->compile;test->test"
lazy val `zuora-reports` = library(
project in file("lib/zuora-reports"),
Seq(zuora, handler, effectsDepIncludingTestFolder, testDep),
)
.settings(dependencyOverrides ++= jacksonDependencies)
lazy val `fulfilment-dates` = library(
project in file("lib/fulfilment-dates"),
Seq(`effects-s3`, `config-core`, testDep, `zuora-core`),
)
.settings(
libraryDependencies ++= Seq(catsCore, circe, circeParser),
dependencyOverrides ++= jacksonDependencies,
)
lazy val `google-bigquery` = library(
project in file("lib/google-bigquery"),
Seq(testDep, `config-core`, `effects-s3` % "test", handler % "test"),
)
.settings(
libraryDependencies ++= Seq(googleBigQuery, playJson) ++ logging,
)
lazy val `zuora-baton` = library(
project in file("lib/zuora-baton"),
Seq(zuora, `config-core`),
)
.settings(
libraryDependencies ++= Seq(playJson),
dependencyOverrides ++= jacksonDependencies,
)
lazy val `zuora-core` = library(project in file("lib/zuora-core"))
.settings(
libraryDependencies ++= Seq(
playJson,
catsCore,
circe,
circeParser,
sttp,
sttpCirce,
scalatest,
diffx,
) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
// this lib is shared between ZIO and non zio projects so can't depend on json libs, http clients, effects etc.
lazy val `zuora-models` = library(
project in file("lib/zuora-models"),
Seq(`config-core`),
scala3Settings,
)
.settings(
libraryDependencies += "com.gu" %% "support-internationalisation" % "0.16" exclude ("com.typesafe.scala-logging", "scala-logging_2.13"),
)
lazy val `credit-processor` = library(
project in file("lib/credit-processor"),
Seq(
`zuora-core`,
`fulfilment-dates`,
),
)
.settings(
libraryDependencies ++= Seq(parallelCollections) ++ logging,
dependencyOverrides ++= jacksonDependencies,
)
lazy val `imovo-sttp-client` = library(project in file("lib/imovo/imovo-sttp-client"))
.settings(
libraryDependencies ++=
Seq(sttp, sttpCirce, sttpAsyncHttpClientBackendCats % Test, scalatest, catsCore, catsEffect, circe) ++ logging,
dependencyOverrides ++= Seq(asyncHttpClientOverride),
)
lazy val `imovo-sttp-test-stub` = library(
project in file("lib/imovo/imovo-sttp-test-stub"),
Seq(`imovo-sttp-client`),
)
.settings(
libraryDependencies ++= Seq(scalatest),
)
def lambdaProject(
projectName: String,
projectDescription: String,
externalDependencies: Seq[sbt.ModuleID] = Nil,
projectDependencies: Seq[ClasspathDependency] = Nil,
scalaSettings: SettingsDefinition = scala2Settings,
) = {
val cfName = "cfn.yaml"
Project(projectName, file(s"handlers/$projectName"))
.enablePlugins(RiffRaffArtifact)
.configs(EffectsTest, HealthCheckTest)
.dependsOn(projectDependencies *)
.settings(scalaSettings, testSettings, scalafmtSettings)
.settings(
name := projectName,
description := projectDescription,
assemblyJarName := s"$projectName.jar",
assemblyMergeStrategyDiscardModuleInfo,
riffRaffAwsRegion := "eu-west-1",
riffRaffPackageType := assembly.value,
riffRaffUploadArtifactBucket := Option("riffraff-artifact"),
riffRaffUploadManifestBucket := Option("riffraff-builds"),
riffRaffManifestProjectName := s"support-service-lambdas::$projectName",
riffRaffArtifactResources += (file(s"handlers/$projectName/$cfName"), s"cfn/$cfName"),
dependencyOverrides ++= jacksonDependencies :+ asyncHttpClientOverride,
libraryDependencies ++= externalDependencies ++ logging,
Test / test := ((Test / test) dependsOn (projectDependencies.map(_.project / Test / test) *)).value,
Test / testOnly := ((Test / testOnly) dependsOn (projectDependencies.map(_.project / Test / test) *)).evaluated,
Test / testQuick := ((Test / testQuick) dependsOn (projectDependencies.map(_.project / Test / test) *)).evaluated,
)
}