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

import sbtrelease.ReleaseStateTransformations._ resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/" val Scala212 = "2.12.20" val Scala213 = "2.13.15" val Scala3 = "3.3.4" ThisBuild / scalaVersion := Scala213 ThisBuild / publishTo := sonatypePublishToBundle.value lazy val sharedSettings = Seq( scalacOptions ++= Seq("-feature", "-deprecation"), libraryDependencies ++= Seq( "org.scalatest" %% "scalatest" % "3.2.17" % Test ), Test / publishArtifact := false, publishConfiguration := publishConfiguration.value.withOverwrite(true) ) val Brotli4jVersion = "1.18.0" lazy val common = project .settings( name:="brotli4s", description := "A scala wrapper for brotli4j", sharedSettings, crossScalaVersions := Seq(Scala212, Scala213, Scala3), libraryDependencies ++= Seq( "com.aayushatharva.brotli4j" % "brotli4j" % Brotli4jVersion ), artifactPomMetadataSettings, assemblySettings ) val AkkaVersion = "2.6.21" lazy val akka = project.dependsOn(common) .settings( name:="akka-stream-brotli", description := "A brotli stream extension for Akka 2.6", sharedSettings, crossScalaVersions := Seq(Scala212, Scala213, Scala3), libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-stream" % AkkaVersion % Provided, "com.typesafe.akka" %% "akka-stream-testkit" % AkkaVersion % Test, ), artifactPomMetadataSettings ) val PekkoVersion = "1.0.3" lazy val pekko = project.dependsOn(common) .settings( name:="pekko-stream-brotli", description := "A brotli stream extension for Pekko 1.0", sharedSettings, crossScalaVersions := Seq(Scala213, Scala3), libraryDependencies ++= Seq( "org.apache.pekko" %% "pekko-stream" % PekkoVersion % Provided, "org.apache.pekko" %% "pekko-stream-testkit" % PekkoVersion % Test, ), artifactPomMetadataSettings ) val artifactPomMetadataSettings = Seq( organization := "com.gu", licenses := Seq("Apache V2" -> url("https://www.apache.org/licenses/LICENSE-2.0.html")), scmInfo := Some(ScmInfo( url("https://github.com/guardian/play-brotli-filter"), "scm:git:git@github.com:guardian/play-brotli-filter.git" )), pomExtra := { <url>https://github.com/guardian/play-brotli-filter</url> <developers> <developer> <id>mchv</id> <name>Mariot Chauvin</name> <url>https://github.com/mchv</url> </developer> </developers> } ) val assemblySettings = Seq( /* Use assembly output as packaged jar */ Compile / packageBin := assembly.value, /* Use same packaged jar name that packageBin task */ assembly / assemblyJarName := s"${name.value}_${scalaBinaryVersion.value}-${version.value}.jar", /* Exclude the scala library from being included in assembled jar*/ assembly / assemblyOption ~= { _.withIncludeScala(false) }, /* Exclude brotli4j library from being included in assembled jar*/ assembly / assemblyExcludedJars := { val cp = (assembly / fullClasspath).value cp filter {_.data.getName == s"brotli4j-${Brotli4jVersion}.jar"} }, assembly / assemblyMergeStrategy := { case PathList("META-INF", "versions", xs @ _, "module-info.class") => MergeStrategy.discard case x => val oldStrategy = (assembly / assemblyMergeStrategy).value oldStrategy(x) } ) lazy val `play-v28` = project .dependsOn(akka) .settings( sharedSettings, name:="play-v28-brotli-filter", description := "A brotli filter module for Play 2.8", crossScalaVersions := Seq(Scala212, Scala213), libraryDependencies ++= Seq( "com.typesafe.play" %% "play" % "2.8.22" % Provided, "com.typesafe.play" %% "filters-helpers" % "2.8.22" % Test, "com.typesafe.play" %% "play-specs2" % "2.8.22" % Test, "ch.qos.logback" % "logback-classic" % "1.4.14" % Test, /* override guice version below to fix reflection issue see https://github.com/google/guice/issues/1133 */ "com.google.inject" % "guice" % "6.0.0" % Test, "com.google.inject.extensions" % "guice-assistedinject" % "6.0.0" % Test ), artifactPomMetadataSettings ) lazy val `play-v29` = project .dependsOn(akka) .settings( sharedSettings, name:="play-v29-brotli-filter", description := "A brotli filter module for Play 2.9", crossScalaVersions := Seq(Scala213, Scala3), libraryDependencies ++= Seq( "com.typesafe.play" %% "play" % "2.9.6" % Provided, "com.typesafe.play" %% "filters-helpers" % "2.9.0-M6" % Test, "com.typesafe.play" %% "play-specs2" % "2.9.6" % Test, ), artifactPomMetadataSettings ) lazy val `play-v30` = project .dependsOn(pekko) .settings( sharedSettings, name:="play-v30-brotli-filter", description := "A brotli filter module for Play 3", crossScalaVersions := Seq(Scala213, Scala3), libraryDependencies ++= Seq( "org.playframework" %% "play" % "3.0.6" % Provided, "org.playframework" %% "play-filters-helpers" % "3.0.6" % Test, "org.playframework" %% "play-specs2" % "3.0.6" % Test, ), artifactPomMetadataSettings ) lazy val `play-brotli-filter-root` = (project in file(".")) .aggregate(common, akka, pekko, `play-v28`,`play-v29` ,`play-v30`) .settings( publish / skip := true, crossScalaVersions := Nil, organization := "com.gu", /* deactivate cross-building and use `+` on `test` and `publishSigned` see https://www.scala-sbt.org/1.x/docs/Cross-Build.html */ releaseCrossBuild := false, releaseProcess := Seq( checkSnapshotDependencies, inquireVersions, runClean, releaseStepCommandAndRemaining("+test"), setReleaseVersion, commitReleaseVersion, tagRelease, releaseStepCommandAndRemaining("+publishSigned"), releaseStepCommand("sonatypeBundleRelease"), setNextVersion, commitNextVersion, ) )