build.sbt (88 lines of code) (raw):

import scala.sys.process.* import scala.io.Source import scala.util.Try val appVersion = "1.0-SNAPSHOT" name := "members-data-api" ThisBuild / resolvers ++= Resolver.sonatypeOssRepos("releases") // libraries that haven't yet synced to maven central def commitId(): String = try { "git rev-parse HEAD".!!.trim } catch { case _: Exception => "unknown" } def buildInfoSettings = Seq( buildInfoKeys := Seq[BuildInfoKey]( name, ("buildNumber", Option(System.getenv("BUILD_NUMBER")) getOrElse "DEV"), ("buildTime", System.currentTimeMillis), ("gitCommitId", Option(System.getenv("BUILD_VCS_NUMBER")) getOrElse (commitId())), ), buildInfoPackage := "app", buildInfoOptions += BuildInfoOption.ToMap, ) val commonSettings = Seq( organization := "com.gu", version := appVersion, scalaVersion := "2.13.12", Compile / doc / sources := Seq.empty, Compile / packageDoc / publishArtifact := false, Global / parallelExecution := false, updateOptions := updateOptions.value.withCachedResolution(true), Test / javaOptions += "-Dconfig.resource=TEST.public.conf", Test / fork := true, ) ++ buildInfoSettings import com.typesafe.sbt.packager.archetypes.systemloader.ServerLoader.Systemd val buildDebSettings = Seq( Debian / serverLoading := Some(Systemd), maintainer := "Membership Dev <membership.dev@theguardian.com>", packageSummary := "Members Data API", packageDescription := """Members Data API""", riffRaffManifestProjectName := s"MemSub::Membership::members-data-api", riffRaffPackageType := (Debian / packageBin).value, riffRaffArtifactResources += (file("cloudformation/membership-attribute-service.yaml") -> "cloudformation/membership-attribute-service.yaml"), Universal / javaOptions ++= Seq( "-Dpidfile.path=/dev/null", "-J-XX:MaxRAMPercentage=50", "-J-XX:InitialRAMPercentage=50", "-J-XX:MaxMetaspaceSize=500m", "-J-XX:+PrintGCDetails", s"-J-Xlog:gc:/var/log/${packageName.value}/gc.log", ), ) val `membership-common` = (project in file("membership-common")) .settings( Seq( name := "membership-common", organization := "com.gu", scalaVersion := "2.13.12", scalacOptions := Seq("-feature", "-deprecation"), crossScalaVersions := Seq(scalaVersion.value), Compile / doc / sources := List(), // no docs please scmInfo := Some( ScmInfo( url("https://github.com/guardian/membership-common"), "scm:git:git@github.com:guardian/membership-common.git", ), ), description := "Scala library for common Guardian Membership/Subscriptions functionality.", licenses := Seq("Apache V2" -> url("http://www.apache.org/licenses/LICENSE-2.0.html")), Compile / unmanagedResourceDirectories += baseDirectory.value / "conf", libraryDependencies ++= MembershipCommonDependencies.dependencies, dependencyOverrides += MembershipCommonDependencies.jacksonDatabind, ), ) val api = Project("membership-attribute-service", file("membership-attribute-service")) .enablePlugins(SystemdPlugin, PlayScala, BuildInfoPlugin, RiffRaffArtifact, JDebPackaging) .settings(commonSettings) .settings(buildDebSettings) .settings( libraryDependencies ++= Dependencies.apiDependencies, dependencyOverrides ++= Dependencies.dependencyOverrides, excludeDependencies ++= Dependencies.excludeDependencies, ) .settings(routesGenerator := InjectedRoutesGenerator) .settings( addCommandAlias("devrun", "run 9400"), addCommandAlias("batch-load", "runMain BatchLoader"), addCommandAlias("play-artifact", "riffRaffNotifyTeamcity"), ) .dependsOn(`membership-common` % "test->test;compile->compile") val root = project.in(file(".")).aggregate(api)