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

import sbt._ import Keys._ import com.typesafe.sbt.packager.docker import com.typesafe.sbt.packager.docker._ enablePlugins(RiffRaffArtifact, DockerPlugin, SystemdPlugin) ThisBuild / libraryDependencySchemes += "org.scala-lang.modules" % "scala-java8-compat" % "pvp" scalacOptions := Seq("-unchecked", "-deprecation", "-feature", "-language:postfixOps") scalaVersion := "2.13.9" val akkaVersion = "2.6.18" val akkaClusterVersion = "1.1.3" val elastic4sVersion = "6.7.8" val awsSdkVersion = "1.12.641" val awsSdk2Version = "2.17.124" val jacksonVersion = "2.15.0" val jacksonCoreVersion = "2.15.0" lazy val commonSettings = Seq( version := "1.0", scalaVersion := "2.13.8", libraryDependencies ++= Seq("org.apache.logging.log4j" % "log4j-core" % "2.17.1", "com.beust" % "jcommander" % "1.75", //snyk identified as vulnerable "org.apache.logging.log4j" % "log4j-api" % "2.17.1", "com.amazonaws" % "aws-java-sdk-elastictranscoder"% awsSdkVersion, "com.amazonaws" % "aws-java-sdk-sqs"% awsSdkVersion, "com.dripower" %% "play-circe" % "2812.0", "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.15.0", "com.sksamuel.elastic4s" %% "elastic4s-http" % elastic4sVersion exclude("com.fasterxml.jackson.module","jackson-module-scala"), "com.sksamuel.elastic4s" %% "elastic4s-circe" % elastic4sVersion, "com.sksamuel.elastic4s" %% "elastic4s-http-streams" % elastic4sVersion, "com.sksamuel.elastic4s" %% "elastic4s-testkit" % elastic4sVersion % "test", "com.sksamuel.elastic4s" %% "elastic4s-embedded" % elastic4sVersion % "test", "com.typesafe.akka" %% "akka-actor" % akkaVersion, "software.amazon.awssdk" % "dynamodb" % awsSdk2Version, "software.amazon.awssdk" % "s3" % awsSdk2Version, "software.amazon.awssdk" % "aws-cbor-protocol" % awsSdk2Version, "com.lightbend.akka" %% "akka-stream-alpakka-dynamodb" % "2.0.2", "com.lightbend.akka" %% "akka-stream-alpakka-s3" % "2.0.2", "org.scanamo" %% "scanamo-alpakka" % "1.0.0-M16", "com.fasterxml.jackson.dataformat" % "jackson-dataformat-yaml" % jacksonVersion, "com.fasterxml.jackson.dataformat" % "jackson-dataformat-cbor" % jacksonVersion, "com.fasterxml.jackson.core" % "jackson-databind" % jacksonCoreVersion, "com.google.guava" % "guava" % "30.0-jre", specs2 % Test) ) lazy val `archivehunter` = (project in file(".")) .enablePlugins(PlayScala) .dependsOn(common) .settings(commonSettings, libraryDependencies ++= Seq( "com.dripower" %% "play-circe" % "2812.0", "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.13.1", "com.sksamuel.elastic4s" %% "elastic4s-http" % elastic4sVersion exclude("com.fasterxml.jackson.module","jackson-module-scala"), "com.sksamuel.elastic4s" %% "elastic4s-circe" % elastic4sVersion, "com.sksamuel.elastic4s" %% "elastic4s-testkit" % elastic4sVersion % "test", "com.sksamuel.elastic4s" %% "elastic4s-embedded" % elastic4sVersion % "test", "com.fasterxml.jackson.core" % "jackson-databind" % jacksonCoreVersion, "com.typesafe.akka" %% "akka-cluster-tools" % akkaVersion, "com.lightbend.akka" %% "akka-stream-alpakka-s3" % "3.0.2", "com.lightbend.akka.management" %% "akka-management-cluster-http" % akkaClusterVersion, "com.lightbend.akka.management" %% "akka-management-cluster-bootstrap" % akkaClusterVersion, "com.lightbend.akka.discovery" %% "akka-discovery-kubernetes-api" % akkaClusterVersion, "com.lightbend.akka.discovery" %% "akka-discovery-aws-api" % akkaClusterVersion, "com.typesafe.akka" %% "akka-cluster" % akkaVersion, "com.typesafe.akka" %% "akka-cluster-typed" % akkaVersion, "com.typesafe.akka" %% "akka-cluster-metrics" % akkaVersion, "com.typesafe.akka" %% "akka-actor" % akkaVersion, "com.typesafe.akka" %% "akka-stream" % akkaVersion, "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, "com.typesafe.akka" %% "akka-persistence" % akkaVersion, "com.typesafe.akka" %% "akka-cluster-sharding" % akkaVersion, "com.typesafe.akka" %% "akka-discovery" % akkaVersion, "com.typesafe.akka" %% "akka-actor-typed" % akkaVersion, "com.typesafe.akka" %% "akka-serialization-jackson" % akkaVersion, "com.typesafe.akka" %% "akka-http-spray-json" % "10.2.7", "com.typesafe.akka" %% "akka-http-xml" % "10.2.7", "com.typesafe.akka" %% "akka-http" % "10.2.7", "com.nimbusds" % "nimbus-jose-jwt" % "9.18", "com.gu" % "kinesis-logback-appender" % "2.0.3", "com.fasterxml.jackson.dataformat" % "jackson-dataformat-cbor" % jacksonVersion, "org.apache.logging.log4j" % "log4j-api" % "2.17.1", "com.typesafe.akka" %% "akka-testkit" % akkaVersion, "io.sentry" % "sentry-logback" % "6.25.2", guice, ehcache, ws) ) val lambdaDeps = Seq( ) val circeVersion = "0.12.0-M3" //required for compatibility with elastic4s-circe lazy val common = (project in file("common")) .settings(commonSettings, libraryDependencies ++= Seq( "com.amazonaws" % "aws-java-sdk-s3" % awsSdkVersion, "org.scanamo" %% "scanamo-alpakka" % "1.0.0-M16", "io.circe" %% "circe-core" % circeVersion, "io.circe" %% "circe-generic" % circeVersion, "io.circe" %% "circe-parser" % circeVersion, "org.scanamo" %% "scanamo" % "1.0.0-M16", "com.google.inject" % "guice" % "4.2.3", //keep this in sync with play version "com.amazonaws" % "aws-java-sdk-sns" % awsSdkVersion, "com.amazonaws" % "aws-java-sdk-sts" % awsSdkVersion, "com.amazonaws" % "aws-java-sdk-cloudformation" % awsSdkVersion, ) ) val meta = """META.INF(.)*""".r lazy val inputLambda = (project in file("lambda/input")) .dependsOn(common) .settings(commonSettings, // https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-lambda libraryDependencies ++= Seq( "org.apache.logging.log4j" % "log4j-core" % "2.17.1", "org.apache.logging.log4j" % "log4j-api" % "2.17.1", "org.apache.logging.log4j" % "log4j-1.2-api" % "2.17.1", "com.sksamuel.elastic4s" %% "elastic4s-http" % elastic4sVersion, "com.sksamuel.elastic4s" %% "elastic4s-circe" % elastic4sVersion, "com.sksamuel.elastic4s" %% "elastic4s-testkit" % elastic4sVersion % "test", "com.sksamuel.elastic4s" %% "elastic4s-embedded" % elastic4sVersion % "test", "com.amazonaws" % "aws-java-sdk-lambda" % awsSdkVersion, "com.amazonaws" % "aws-lambda-java-events" % "2.1.0", "com.amazonaws" % "aws-lambda-java-core" % "1.0.0", "com.typesafe.akka" %% "akka-actor-typed" % akkaVersion, "com.typesafe.akka" %% "akka-serialization-jackson" % akkaVersion, "com.typesafe.akka" %% "akka-stream" % akkaVersion, "com.typesafe.akka" %% "akka-protobuf" % akkaVersion, "com.typesafe.akka" %% "akka-protobuf-v3" % akkaVersion, ), assembly / assemblyJarName:= "inputLambda.jar", assembly / assemblyMergeStrategy:= { case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first case "application.conf" => MergeStrategy.concat case PathList("META-INF","org","apache","logging","log4j","core","config","plugins","Log4j2Plugins.dat") => MergeStrategy.last case PathList(ps @ _*) if ps.last == "module-info.class" => MergeStrategy.discard case PathList(ps @ _*) if ps.last=="mime.types" => MergeStrategy.last case meta(_)=>MergeStrategy.discard case x=> val oldStrategy = (assembly / assemblyMergeStrategy).value oldStrategy(x) } ) lazy val proxyStatsGathering = (project in file("ProxyStatsGathering")) .dependsOn(common) .enablePlugins(JavaAppPackaging, AshScriptPlugin, DockerPlugin) .settings(commonSettings, libraryDependencies ++= Seq( "com.amazonaws" % "aws-java-sdk-lambda" % awsSdkVersion, "com.amazonaws" % "aws-lambda-java-events" % "2.1.0", "com.amazonaws" % "aws-lambda-java-core" % "1.0.0", "com.sandinh" %% "akka-guice" % "3.3.0" ), version := sys.props.getOrElse("build.number","DEV"), dockerUsername := sys.props.get("docker.username"), dockerRepository := Some("andyg42"), dockerPermissionStrategy := DockerPermissionStrategy.None, Docker / packageName := "andyg42/archivehunter-proxystats", packageName := "archivehunter-proxystats", dockerAlias := docker.DockerAlias(sys.props.get("docker.host"),sys.props.get("docker.username"),"proxy-stats-gathering",Some(sys.props.getOrElse("build.number","DEV"))), dockerCommands ++= Seq( Cmd("USER", "root"), Cmd("RUN", "chown -R 1001 /opt/docker"), Cmd("USER", "demiourgos728") ) ) lazy val autoDowningLambda = (project in file("lambda/autodowning")).settings(commonSettings, name:="autoDowningLambda") .settings(commonSettings, libraryDependencies :=Seq( "com.amazonaws" % "aws-lambda-java-events" % "3.11.0", "software.amazon.awssdk" % "ec2" % awsSdk2Version, "software.amazon.awssdk" % "url-connection-client" % awsSdk2Version, "com.amazonaws" % "aws-lambda-java-core" % "1.0.0", //manual dependencies from common so that we don't pull in too much un-needed stuff "io.circe" %% "circe-core" % circeVersion, "io.circe" %% "circe-generic" % circeVersion, "io.circe" %% "circe-parser" % circeVersion, "org.scanamo" %% "scanamo" % "1.0.0-M16", specs2 % Test ), assembly / assemblyJarName := "autoDowningLambda.jar", assembly / assemblyMergeStrategy := { case PathList(ps @ _*) if ps.last=="module-info.class" => MergeStrategy.discard case meta(_) => MergeStrategy.discard case PathList(ps @ _*) if ps.last=="mime.types" => MergeStrategy.last case x=> val oldStrategy = (assembly / assemblyMergeStrategy).value oldStrategy(x) } ) val jsTargetDir = "target/riffraff/packages" riffRaffUploadArtifactBucket := Option("riffraff-artifact") riffRaffUploadManifestBucket := Option("riffraff-builds") riffRaffManifestProjectName := "multimedia:ArchiveHunter" riffRaffArtifactResources := Seq( (archivehunter / Debian / packageBin).value -> s"archivehunter-webapp/${(archivehunter / name).value}.deb", (inputLambda / Universal / assembly).value -> s"archivehunter-input-lambda/${(inputLambda / Universal / assembly).value.getName}", (autoDowningLambda / Universal / assembly).value -> s"archivehunter-autodowning-lambda/${(autoDowningLambda / Universal / assembly).value.getName}", (archivehunter / baseDirectory).value / "riff-raff.yaml" -> "riff-raff.yaml", ) resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases" Test / unmanagedResourceDirectories += { baseDirectory ( _ /"target/web/public/test" ).value }