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

import com.typesafe.sbt.packager.docker import com.typesafe.sbt.packager.docker.DockerPlugin.autoImport.dockerUsername import com.typesafe.sbt.packager.docker.{DockerChmodType, DockerPermissionStrategy} import sbt.Keys.{libraryDependencies, scalacOptions} name := "pluto-storagetier" javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint") scalacOptions += "-target:jvm-1.8" val akkaVersion = "2.6.16" val circeVersion = "0.14.1" val slf4jVersion = "1.7.32" val elastic4sVersion = "6.7.8" val sttpVersion = "1.7.2" val slickVersion = "3.3.3" lazy val commonSettings = Seq( version := "1.0", scalaVersion := "2.13.9", javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint"), scalacOptions += "-target:jvm-1.8", libraryDependencies ++= Seq( "com.novocode" % "junit-interface" % "0.11" % Test, "org.specs2" %% "specs2-junit" % "4.12.12" % Test ), Test / testOptions ++= Seq( Tests.Argument("junitxml", "junit.outdir", sys.env.getOrElse("SBT_JUNIT_OUTPUT","/tmp")), Tests.Argument("console") ) ) lazy val `common` = (project in file("common")) .enablePlugins(plugins.JUnitXmlReportPlugin) .settings(commonSettings, Docker / aggregate := false, Docker / publish := {}, libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-http" % "10.2.6", "com.typesafe.akka" %% "akka-http-xml" % "10.2.6", "com.typesafe.akka" %% "akka-stream" % akkaVersion, "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, "com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test, "com.rabbitmq" % "amqp-client" % "5.13.1", "commons-codec" % "commons-codec" % "1.15", "io.circe" %% "circe-core" % circeVersion, "io.circe" %% "circe-generic" % circeVersion, "io.circe" %% "circe-parser" % circeVersion, "com.typesafe.slick" %% "slick" % slickVersion, "com.typesafe.slick" %% "slick-hikaricp" % slickVersion, "org.postgresql" % "postgresql" % "42.7.2", "org.slf4j" % "slf4j-api" % slf4jVersion, "ch.qos.logback" % "logback-core" % "1.2.7", "ch.qos.logback" % "logback-classic" % "1.2.7", "org.specs2" %% "specs2-core" % "4.12.12" % Test, "org.specs2" %% "specs2-mock" % "4.12.12" % Test, "org.mockito" %% "mockito-scala-specs2" % "1.16.39" % Test ) ) lazy val `mxscopy` = (project in file("mxs-copy-components")) .enablePlugins(DockerPlugin, AshScriptPlugin, plugins.JUnitXmlReportPlugin) .dependsOn(common) .settings(commonSettings, Docker / aggregate := false, Docker / publish := {}, libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-stream" % akkaVersion, "com.typesafe.akka" %% "akka-testkit" % akkaVersion, "com.typesafe.akka" %% "akka-agent" % "2.5.32", "com.typesafe.akka" %% "akka-http" % "10.2.6", "com.typesafe.akka" %% "akka-http-xml" % "10.2.6", "io.circe" %% "circe-core" % circeVersion, "io.circe" %% "circe-generic" % circeVersion, "io.circe" %% "circe-parser" % circeVersion, "org.slf4j" % "slf4j-api" % slf4jVersion, "commons-codec" % "commons-codec" % "1.15", "commons-io" % "commons-io" % "2.7", "ch.qos.logback" % "logback-classic" % "1.2.7", "com.github.scopt" %% "scopt" % "4.0.1", "org.specs2" %% "specs2-core" % "4.12.12" % Test, "org.specs2" %% "specs2-mock" % "4.12.12" % Test, "org.mockito" %% "mockito-scala-specs2" % "1.16.39" % Test, "org.mockito" % "mockito-core" % "4.0.0" % Test ) ) val awsSdk2Version = "2.20.65" lazy val `online_archive` = (project in file("online_archive")) .enablePlugins(DockerPlugin, AshScriptPlugin, plugins.JUnitXmlReportPlugin) .dependsOn(common) .settings(commonSettings, version := sys.props.getOrElse("build.number","DEV"), dockerPermissionStrategy := DockerPermissionStrategy.MultiStage, Docker / daemonUserUid := None, Docker / daemonUser := "daemon", Docker / dockerUsername := sys.props.get("docker.username"), Docker / dockerRepository := Some("guardianmultimedia"), Docker / packageName := "guardianmultimedia/storagetier-online-archive", dockerChmodType := DockerChmodType.Custom("ugo=rx"), dockerAdditionalPermissions += (DockerChmodType.Custom( "ugo=rx" ), "/opt/docker/bin/online_archive"), packageName := "storagetier-online-archive", dockerBaseImage := "amazoncorretto:11", dockerAlias := docker.DockerAlias(None,Some("guardianmultimedia"),"storagetier-online-archive",Some(sys.props.getOrElse("build.number","DEV"))), libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-http" % "10.2.6", "javax.xml.bind" % "jaxb-api" % "2.3.1", //Fix "JAXB is unavailable." warning from AWS SDK "com.typesafe.akka" %% "akka-stream" % akkaVersion, "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, "com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test, "org.scala-lang.modules" %% "scala-xml" % "1.2.0", "org.specs2" %% "specs2-core" % "4.12.3" % Test, "org.specs2" %% "specs2-mock" % "4.12.3" % Test, "org.mockito" %% "mockito-scala-specs2" % "1.16.39" % Test, "software.amazon.awssdk" % "s3" % awsSdk2Version, "software.amazon.awssdk" % "s3-transfer-manager" % "2.20.65", "software.amazon.awssdk.crt" % "aws-crt" % "0.21.15", "software.amazon.awssdk" % "url-connection-client" % awsSdk2Version ) ) lazy val `online_nearline` = (project in file("online_nearline")) .enablePlugins(DockerPlugin, AshScriptPlugin, plugins.JUnitXmlReportPlugin) .dependsOn(common, mxscopy) .settings(commonSettings, version := sys.props.getOrElse("build.number","DEV"), dockerPermissionStrategy := DockerPermissionStrategy.MultiStage, Docker / daemonUserUid := None, Docker / daemonUser := "daemon", Docker / dockerUsername := sys.props.get("docker.username"), Docker / dockerRepository := Some("guardianmultimedia"), Docker / packageName := "guardianmultimedia/storagetier-online-nearline", dockerChmodType := DockerChmodType.Custom("ugo=rx"), dockerAdditionalPermissions += (DockerChmodType.Custom( "ugo=rx" ), "/opt/docker/bin/online_nearline"), packageName := "storagetier-online-nearline", dockerBaseImage := "amazoncorretto:8", dockerAlias := docker.DockerAlias(None,Some("guardianmultimedia"),"storagetier-online-nearline",Some(sys.props.getOrElse("build.number","DEV"))), libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-http" % "10.2.6", "com.typesafe.akka" %% "akka-stream" % akkaVersion, "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, "com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test, "org.scala-lang.modules" %% "scala-xml" % "1.2.0", "org.specs2" %% "specs2-core" % "4.12.3" % Test, "org.specs2" %% "specs2-mock" % "4.12.3" % Test, "org.mockito" %% "mockito-scala-specs2" % "1.16.39" % Test, ) ) lazy val `project_restorer` = (project in file("project_restorer")) .enablePlugins(DockerPlugin, AshScriptPlugin, plugins.JUnitXmlReportPlugin) .dependsOn(common, mxscopy) .settings(commonSettings, version := sys.props.getOrElse("build.number","DEV"), dockerPermissionStrategy := DockerPermissionStrategy.MultiStage, Docker / daemonUserUid := None, Docker / daemonUser := "daemon", Docker / dockerUsername := sys.props.get("docker.username"), Docker / dockerRepository := Some("guardianmultimedia"), Docker / packageName := "guardianmultimedia/project-restorer", dockerChmodType := DockerChmodType.Custom("ugo=rx"), dockerAdditionalPermissions += (DockerChmodType.Custom( "ugo=rx" ), "/opt/docker/bin/project_restorer"), packageName := "project-restorer", dockerBaseImage := "amazoncorretto:8", dockerAlias := docker.DockerAlias(None,Some("guardianmultimedia"),"storagetier-project-restorer",Some(sys.props.getOrElse("build.number","DEV"))), libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-http" % "10.2.6", "com.typesafe.akka" %% "akka-stream" % akkaVersion, "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, "com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test, "org.scala-lang.modules" %% "scala-xml" % "1.2.0", "org.specs2" %% "specs2-core" % "4.12.3" % Test, "org.specs2" %% "specs2-mock" % "4.12.3" % Test, "org.mockito" %% "mockito-scala-specs2" % "1.16.39" % Test, ) ) lazy val `media_remover` = (project in file("media_remover")) .enablePlugins(DockerPlugin, AshScriptPlugin, plugins.JUnitXmlReportPlugin) .dependsOn(common, mxscopy) .settings(commonSettings, version := sys.props.getOrElse("build.number","DEV"), dockerPermissionStrategy := DockerPermissionStrategy.MultiStage, Docker / daemonUserUid := None, Docker / daemonUser := "daemon", Docker / dockerUsername := sys.props.get("docker.username"), Docker / dockerRepository := Some("guardianmultimedia"), Docker / packageName := "guardianmultimedia/media-remover", dockerChmodType := DockerChmodType.Custom("ugo=rx"), dockerAdditionalPermissions += (DockerChmodType.Custom( "ugo=rx" ), "/opt/docker/bin/media_remover"), packageName := "media-remover", dockerBaseImage := "amazoncorretto:8", dockerAlias := docker.DockerAlias(None,Some("guardianmultimedia"),"storagetier-media-remover",Some(sys.props.getOrElse("build.number","DEV"))), libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-http" % "10.2.6", "com.typesafe.akka" %% "akka-stream" % akkaVersion, "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, "com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test, "org.scala-lang.modules" %% "scala-xml" % "1.2.0", "org.specs2" %% "specs2-core" % "4.12.3" % Test, "org.specs2" %% "specs2-mock" % "4.12.3" % Test, "org.mockito" %% "mockito-scala-specs2" % "1.16.39" % Test, "software.amazon.awssdk" % "s3" % awsSdk2Version, "software.amazon.awssdk" % "s3-transfer-manager" % "2.17.177-PREVIEW", "software.amazon.awssdk" % "url-connection-client" % awsSdk2Version, ) )