build.sbt (309 lines of code) (raw):
import sbt.Keys.{organization, publishTo, resolvers, scalaVersion, skip, updateOptions}
import sbtrelease.ReleaseStateTransformations._
import LibraryVersions._
import scala.sys.process._
val scalatest = "org.scalatest" %% "scalatest" % "3.2.16"
lazy val integrationTestSettings: Seq[Def.Setting[_]] = Defaults.itSettings ++ Seq(
IntegrationTest / scalaSource := baseDirectory.value / "src" / "test" / "scala",
IntegrationTest / javaSource := baseDirectory.value / "src" / "test" / "java",
IntegrationTest / resourceDirectory := baseDirectory.value / "src" / "test" / "resources",
Test / testOptions += Tests
.Argument(TestFrameworks.ScalaTest, "-l", "com.gu.test.tags.annotations.IntegrationTest", "-oIS"),
libraryDependencies += scalatest % "it",
)
lazy val scalafmtSettings = Seq(
scalafmtFilter.withRank(KeyRanks.Invisible) := "diff-dirty",
(Test / test) := ((Test / test) dependsOn (Test / scalafmtCheckAll)).value,
(Test / testOnly) := ((Test / testOnly) dependsOn (Test / scalafmtCheckAll)).evaluated,
(Test / testQuick) := ((Test / testQuick) dependsOn (Test / scalafmtCheckAll)).evaluated,
)
lazy val release = Seq[ReleaseStep](
checkSnapshotDependencies,
inquireVersions,
runClean,
runTest,
setReleaseVersion,
commitReleaseVersion,
tagRelease,
ReleaseStep(action = Command.process("publishSigned", _), enableCrossBuild = false),
ReleaseStep(action = Command.process("sonatypeReleaseAll", _), enableCrossBuild = false),
setNextVersion,
commitNextVersion,
pushChanges,
)
inThisBuild(
Seq(
organization := "com.gu",
scalaVersion := "2.13.13",
// https://www.scala-sbt.org/1.x/docs/Cached-Resolution.html
updateOptions := updateOptions.value.withCachedResolution(true),
resolvers ++= Resolver.sonatypeOssRepos("releases"), // libraries that haven't yet synced to maven central
assembly / assemblyMergeStrategy := {
case PathList("models", xs @ _*) => MergeStrategy.discard
case x if x.endsWith("io.netty.versions.properties") => MergeStrategy.first
case x if x.endsWith("git.properties") => MergeStrategy.discard
case x if x.endsWith("module-info.class") => MergeStrategy.discard
case "mime.types" => MergeStrategy.first
case str if str.contains("simulacrum") => MergeStrategy.first
case name if name.endsWith("execution.interceptors") => MergeStrategy.filterDistinctLines
case PathList("javax", "annotation", _ @_*) => MergeStrategy.first
case PathList("deriving.conf") => MergeStrategy.concat
case y =>
val oldStrategy = (assembly / assemblyMergeStrategy).value
oldStrategy(y)
},
),
)
lazy val releaseSettings = Seq(
isSnapshot := false,
publishTo := {
val nexus = "https://oss.sonatype.org/"
if (isSnapshot.value)
Some("snapshots" at nexus + "content/repositories/snapshots")
else
Some("releases" at nexus + "service/local/staging/deploy/maven2")
},
licenses := Seq("Apache V2" -> url("http://www.apache.org/licenses/LICENSE-2.0.html")),
releaseTagName := s"${name.value}-${version.value}",
releaseProcess := release,
releaseUseGlobalVersion := false,
releaseVersionFile := file(name.value + "/version.sbt"),
scmInfo := Some(
ScmInfo(
url("https://github.com/guardian/support-frontend"),
"scm:git:git@github.com:guardian/support-frontend.git",
),
),
)
lazy val commonDependencies = Seq(
"com.typesafe" % "config" % "1.4.2",
scalatest % "test",
"com.typesafe.scala-logging" % "scala-logging_2.13" % "3.9.5",
"ch.qos.logback" % "logback-classic" % "1.4.14",
)
lazy val root = (project in file("."))
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype, AssemblyPlugin)
.settings(
name := "support-frontend-root",
moduleName := "support-frontend-root",
publish / skip := true,
)
.aggregate(
`support-frontend`,
`support-workers`,
`supporter-product-data`,
`supporter-product-data-dynamo`,
`stripe-patrons-data`,
`support-models`,
`support-config`,
`support-internationalisation`,
`support-services`,
`stripe-intent`,
`it-test-runner`,
`module-aws`,
`module-acquisition-events`,
`module-rest`,
`support-payment-api`,
`support-lambdas`,
)
lazy val `support-frontend` = (project in file("support-frontend"))
.enablePlugins(PlayScala, BuildInfoPlugin, RiffRaffArtifact, JDebPackaging)
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype)
.configs(IntegrationTest)
.settings(
integrationTestSettings,
buildInfoKeys := BuildInfoSettings.buildInfoKeys,
buildInfoPackage := "app",
buildInfoOptions += BuildInfoOption.ToMap,
scalacOptions += "-Ytasty-reader",
scalafmtSettings,
)
.dependsOn(
// Include tests from support-services, for use by PriceSummaryServiceSpec
`support-services` % "compile->compile;test->test",
`support-models`,
`support-config`,
`support-internationalisation`,
`module-retry`,
)
.aggregate(
`support-services`,
`support-models`,
`support-config`,
`support-internationalisation`,
`module-retry`,
)
lazy val `support-workers` = (project in file("support-workers"))
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype)
.configs(IntegrationTest)
.settings(
integrationTestSettings,
scalafmtSettings,
libraryDependencies ++= commonDependencies,
scalacOptions += "-Ytasty-reader",
)
.dependsOn(
`support-services` % "test->test;it->test;compile->compile",
`support-models` % "test->test;it->test;compile->compile",
`support-config`,
`support-internationalisation`,
`module-acquisition-events`,
`supporter-product-data-dynamo`,
)
.aggregate(
`support-services`,
`support-models`,
`support-config`,
`support-internationalisation`,
`supporter-product-data-dynamo`,
)
lazy val `supporter-product-data` = (project in file("supporter-product-data"))
.enablePlugins(RiffRaffArtifact)
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype)
.configs(IntegrationTest)
.settings(
integrationTestSettings,
scalafmtSettings,
libraryDependencies ++= commonDependencies,
)
.dependsOn(`module-rest`, `module-aws`, `supporter-product-data-dynamo`)
.aggregate(`module-rest`, `module-aws`, `supporter-product-data-dynamo`)
lazy val `supporter-product-data-dynamo` = (project in file("support-modules/supporter-product-data-dynamo"))
.settings(
libraryDependencies ++= commonDependencies,
releaseSettings,
scalafmtSettings,
)
lazy val `stripe-patrons-data` = (project in file("stripe-patrons-data"))
.enablePlugins(RiffRaffArtifact)
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype)
.configs(IntegrationTest)
.settings(
integrationTestSettings,
scalafmtSettings,
libraryDependencies ++= commonDependencies,
)
.dependsOn(`module-rest`, `module-aws`, `supporter-product-data-dynamo`)
.aggregate(`module-rest`, `module-aws`, `supporter-product-data-dynamo`)
lazy val `support-payment-api` = (project in file("support-payment-api"))
.enablePlugins(RiffRaffArtifact, SystemdPlugin, PlayService, RoutesCompiler, JDebPackaging, BuildInfoPlugin)
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype)
.settings(
buildInfoKeys := BuildInfoSettings.buildInfoKeys,
buildInfoPackage := "app",
buildInfoOptions += BuildInfoOption.ToMap,
libraryDependencies ++= commonDependencies,
scalacOptions += "-Ytasty-reader",
scalafmtSettings,
)
.dependsOn(
`support-models`,
`support-internationalisation`,
`module-acquisition-events`,
`supporter-product-data-dynamo`,
`module-retry`,
)
.aggregate(
`support-models`,
`support-internationalisation`,
`module-acquisition-events`,
`supporter-product-data-dynamo`,
`module-retry`,
)
lazy val `support-models` = (project in file("support-models"))
.configs(IntegrationTest)
.settings(
releaseSettings,
integrationTestSettings,
scalafmtSettings,
scalacOptions += "-Ytasty-reader",
libraryDependencies ++= commonDependencies,
)
.dependsOn(`support-internationalisation`)
.aggregate(`support-internationalisation`)
lazy val `support-config` = (project in file("support-config"))
.configs(IntegrationTest)
.settings(
releaseSettings,
integrationTestSettings,
scalafmtSettings,
scalacOptions += "-Ytasty-reader",
libraryDependencies ++= commonDependencies,
)
.dependsOn(`support-models`, `support-internationalisation`)
.aggregate(`support-models`, `support-internationalisation`)
lazy val `support-services` = (project in file("support-services"))
.configs(IntegrationTest)
.settings(
releaseSettings,
integrationTestSettings,
scalafmtSettings,
scalacOptions += "-Ytasty-reader",
libraryDependencies ++= commonDependencies,
)
.dependsOn(`support-internationalisation`, `support-models`, `support-config`, `module-rest`, `module-aws`)
.aggregate(`support-internationalisation`, `support-models`, `support-config`, `module-rest`, `module-aws`)
lazy val `module-rest` = (project in file("support-modules/rest"))
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype, AssemblyPlugin)
.settings(
scalafmtSettings,
libraryDependencies ++= commonDependencies,
)
lazy val `module-aws` = (project in file("support-modules/aws"))
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype, AssemblyPlugin)
.settings(
scalafmtSettings,
libraryDependencies ++= commonDependencies,
)
lazy val `module-retry` = (project in file("support-modules/retry"))
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype, AssemblyPlugin)
.settings(
scalafmtSettings,
libraryDependencies ++= commonDependencies,
)
lazy val `module-acquisition-events` = (project in file("support-modules/acquisition-events"))
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype, AssemblyPlugin)
.settings(
scalafmtSettings,
scalacOptions += "-Ytasty-reader",
libraryDependencies ++= commonDependencies,
)
.dependsOn(`support-config`, `module-aws`, `support-services`)
lazy val `support-internationalisation` = (project in file("support-internationalisation"))
.configs(IntegrationTest)
.settings(
releaseSettings,
integrationTestSettings,
scalafmtSettings,
libraryDependencies ++= commonDependencies,
)
lazy val `stripe-intent` = (project in file("support-lambdas/stripe-intent"))
.enablePlugins(RiffRaffArtifact)
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype)
.configs(IntegrationTest)
.settings(
integrationTestSettings,
scalafmtSettings,
libraryDependencies ++= commonDependencies,
)
.dependsOn(`module-rest`, `support-config`, `module-aws`)
.aggregate(`module-rest`, `support-config`, `module-aws`)
lazy val `it-test-runner` = (project in file("support-lambdas/it-test-runner"))
.enablePlugins(RiffRaffArtifact)
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype)
.dependsOn(`module-aws`)
lazy val `acquisition-events-api` = (project in file("support-lambdas/acquisition-events-api"))
.enablePlugins(RiffRaffArtifact)
.disablePlugins(ReleasePlugin, SbtPgp, Sonatype)
.settings(
scalafmtSettings,
scalacOptions += "-Ytasty-reader",
libraryDependencies ++= commonDependencies,
)
.dependsOn(`module-acquisition-events`, `module-aws`)
.aggregate(`module-acquisition-events`)
lazy val `support-lambdas` = (project in file("support-lambdas"))
.settings(scalafmtSettings)
.aggregate(
`stripe-intent`,
`it-test-runner`,
`acquisition-events-api`,
)