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

import Tests._ Global / onChangedBuildSource := ReloadOnSourceChanges Global / excludeLintKeys += scalacOptions // All Twitter library releases are date versioned as YY.MM.patch val releaseVersion = "24.8.0-SNAPSHOT" val libthriftVersion = "0.10.0" val defaultNetty4Version = "4.1.100.Final" val defaultNetty4StaticSslVersion = "2.0.61.Final" val useNettySnapshot: Boolean = sys.env.get("FINAGLE_USE_NETTY_4_SNAPSHOT") match { case Some(useSnapshot) => useSnapshot.toBoolean case _ => false } val extraSnapshotResolvers = Seq(Resolver.sonatypeRepo("snapshots")) val netty4Version: String = if (useNettySnapshot) { sys.env("FINAGLE_NETTY_4_VERSION") } else { defaultNetty4Version } val netty4StaticSslVersion: String = if (useNettySnapshot) { sys.env("FINAGLE_NETTY_4_TCNATIVE_VERSION") } else { defaultNetty4StaticSslVersion } val nettyVersionInfo = settingKey[String]("A setting reference for printing the netty version info") // zkVersion should be kept in sync with the 'util-zk' dependency version val zkVersion = "3.5.6" val scalaCollectionCompat = "org.scala-lang.modules" %% "scala-collection-compat" % "2.1.2" val caffeineLib = "com.github.ben-manes.caffeine" % "caffeine" % "2.9.3" val hdrHistogramLib = "org.hdrhistogram" % "HdrHistogram" % "2.1.11" val jsr305Lib = "com.google.code.findbugs" % "jsr305" % "2.0.1" val jsqlParserLib = "com.github.jsqlparser" % "jsqlparser" % "4.6" val netty4StaticSsl = "io.netty" % "netty-tcnative-boringssl-static" % netty4StaticSslVersion val netty4Libs = Seq( "io.netty" % "netty-handler" % netty4Version, "io.netty" % "netty-transport" % netty4Version, "io.netty" % "netty-resolver-dns" % netty4Version, "io.netty" % "netty-transport-native-epoll" % netty4Version classifier "linux-x86_64", "io.netty" % "netty-transport-native-epoll" % netty4Version classifier "linux-aarch_64", // this package is a dep of native-epoll above, explicitly add this for coursier plugin "io.netty" % "netty-transport-native-unix-common" % netty4Version, "io.netty" % "netty-handler-proxy" % netty4Version, "com.github.luben" % "zstd-jni" % "1.5.2-1" ) val netty4LibsTest = Seq( "io.netty" % "netty-handler" % netty4Version % "test", "io.netty" % "netty-transport" % netty4Version % "test", "io.netty" % "netty-resolver-dns" % netty4Version % "test", "io.netty" % "netty-transport-native-epoll" % netty4Version % "test" classifier "linux-x86_64", "io.netty" % "netty-transport-native-epoll" % netty4Version % "test" classifier "linux-aarch_64", // this package is a dep of native-epoll above, explicitly add this for coursier plugin "io.netty" % "netty-transport-native-unix-common" % netty4Version % "test", "io.netty" % "netty-handler-proxy" % netty4Version % "test", netty4StaticSsl % "test" ) val netty4Http = "io.netty" % "netty-codec-http" % netty4Version val netty4Http2 = "io.netty" % "netty-codec-http2" % netty4Version val opencensusVersion = "0.24.0" val jacksonVersion = "2.14.3" val jacksonLibs = Seq( "com.fasterxml.jackson.core" % "jackson-core" % jacksonVersion, "com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion, "com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion exclude ("com.google.guava", "guava") ) val thriftLibs = Seq( "org.apache.thrift" % "libthrift" % libthriftVersion intransitive () ) val scroogeLibs = thriftLibs ++ Seq("com.twitter" %% "scrooge-core" % releaseVersion) val lz4Lib = "org.lz4" % "lz4-java" % "1.8.0" val zipkinLibs = Seq( "io.zipkin.java" % "zipkin" % "1.28.1", "io.zipkin.zipkin2" % "zipkin" % "2.22.1" ) def util(which: String) = "com.twitter" %% ("util-" + which) % releaseVersion excludeAll (ExclusionRule(organization = "junit"), ExclusionRule(organization = "org.scala-tools.testing"), ExclusionRule(organization = "org.mockito")) def travisTestJavaOptions: Seq[String] = { // We have some custom configuration for the Travis environment // https://docs.travis-ci.com/user/environment-variables/#default-environment-variables val travisBuild = sys.env.getOrElse("TRAVIS", "false").toBoolean if (travisBuild) { Seq( "-DSKIP_FLAKY=true", "-DSKIP_FLAKY_TRAVIS=true" ) } else { Seq( "-DSKIP_FLAKY=true" ) } } def gcJavaOptions: Seq[String] = { val javaVersion = System.getProperty("java.version") if (javaVersion.startsWith("1.8")) { jdk8GcJavaOptions } else { jdk11GcJavaOptions } } def jdk8GcJavaOptions: Seq[String] = { Seq( "-XX:+UseParNewGC", "-XX:+UseConcMarkSweepGC", "-XX:+CMSParallelRemarkEnabled", "-XX:+CMSClassUnloadingEnabled", "-XX:ReservedCodeCacheSize=128m", "-XX:SurvivorRatio=128", "-XX:MaxTenuringThreshold=0", "-Xss8M", "-Xms512M", "-Xmx3G" ) } def jdk11GcJavaOptions: Seq[String] = { Seq( "-XX:+UseConcMarkSweepGC", "-XX:+CMSParallelRemarkEnabled", "-XX:+CMSClassUnloadingEnabled", "-XX:ReservedCodeCacheSize=128m", "-XX:SurvivorRatio=128", "-XX:MaxTenuringThreshold=0", "-Xss8M", "-Xms512M", "-Xmx3G" ) } val sharedSettings = Seq( version := releaseVersion, organization := "com.twitter", scalaVersion := "2.13.6", crossScalaVersions := Seq("2.12.12", "2.13.6"), Test / fork := true, // We have to fork to get the JavaOptions libraryDependencies ++= Seq( // See https://www.scala-sbt.org/0.13/docs/Testing.html#JUnit "com.novocode" % "junit-interface" % "0.11" % "test", "org.scalacheck" %% "scalacheck" % "1.15.4" % "test", "org.scalatest" %% "scalatest" % "3.1.1" % "test", "org.scalatestplus" %% "junit-4-12" % "3.1.2.0" % "test", "org.scalatestplus" %% "mockito-3-3" % "3.1.2.0" % "test", "org.scalatestplus" %% "scalacheck-1-14" % "3.1.2.0" % "test", scalaCollectionCompat ), // Workaround for cross building Dtab.scala, which is not compatible between // 2.12- with 2.13+. Compile / unmanagedSourceDirectories += { val sourceDir = (Compile / sourceDirectory).value CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, n)) if n >= 13 => sourceDir / "scala-2.13+" case _ => sourceDir / "scala-2.12-" } }, Test / ScroogeSBT.autoImport.scroogeLanguages := Seq("java", "scala"), ivyXML := <dependencies> <exclude org="com.sun.jmx" module="jmxri" /> <exclude org="com.sun.jdmk" module="jmxtools" /> <exclude org="javax.jms" module="jms" /> </dependencies>, scalacOptions := Seq( "-target:jvm-1.8", "-deprecation", "-unchecked", "-feature", "-language:_", "-encoding", "utf8", "-Xlint:-missing-interpolator", "-Ypatmat-exhaust-depth", "40" ), javacOptions ++= Seq( "-Xlint:unchecked", "-source", "1.8", "-target", "1.8" ), doc / javacOptions := Seq("-source", "1.8"), javaOptions ++= Seq( "-Djava.net.preferIPv4Stack=true", "-DSKIP_SBT=1", "-XX:+AggressiveOpts", "-server" ), javaOptions ++= gcJavaOptions, Test / javaOptions ++= travisTestJavaOptions, // This is bad news for things like com.twitter.util.Time Test / parallelExecution := false, // -a: print stack traces for failing asserts testOptions += Tests.Argument(TestFrameworks.JUnit, "-a"), resolvers ++= extraSnapshotResolvers, // This effectively disables packageDoc, which craps out // on generating docs for generated thrift due to the use // of raw java types. // Compile / packageDoc := new java.io.File("nosuchjar"), // Sonatype publishing Test / publishArtifact := false, pomIncludeRepository := { _ => false }, publishMavenStyle := true, publishConfiguration := publishConfiguration.value.withOverwrite(true), publishLocalConfiguration := publishLocalConfiguration.value.withOverwrite(true), autoAPIMappings := true, apiURL := Some(url("https://twitter.github.io/finagle/docs/")), pomExtra := <url>https://github.com/twitter/finagle</url> <licenses> <license> <name>Apache License, Version 2.0</name> <url>https://www.apache.org/licenses/LICENSE-2.0</url> </license> </licenses> <scm> <url>git@github.com:twitter/finagle.git</url> <connection>scm:git:git@github.com:twitter/finagle.git</connection> </scm> <developers> <developer> <id>twitter</id> <name>Twitter Inc.</name> <url>https://www.twitter.com/</url> </developer> </developers>, publishTo := { val nexus = "https://oss.sonatype.org/" if (version.value.trim.endsWith("SNAPSHOT")) Some("snapshots" at nexus + "content/repositories/snapshots") else Some("releases" at nexus + "service/local/staging/deploy/maven2") }, // Prevent eviction warnings dependencyOverrides ++= (scalaVersion { vsn => Seq( "org.apache.thrift" % "libthrift" % libthriftVersion ) }).value, Compile / resourceGenerators += Def.task { val dir = (Compile / resourceManaged).value val file = dir / "com" / "twitter" / name.value / "build.properties" val buildRev = scala.sys.process.Process("git" :: "rev-parse" :: "HEAD" :: Nil).!!.trim val buildName = new java.text.SimpleDateFormat("yyyyMMdd-HHmmss").format(new java.util.Date) val contents = s"name=${name.value}\nversion=${version.value}\nbuild_revision=$buildRev\nbuild_name=$buildName" IO.write(file, contents) Seq(file) } ) val jmockSettings = Seq( libraryDependencies ++= Seq( "org.jmock" % "jmock" % "2.4.0" % "test", "cglib" % "cglib" % "2.2.2" % "test", "asm" % "asm" % "3.3.1" % "test", "org.objenesis" % "objenesis" % "1.1" % "test", "org.hamcrest" % "hamcrest-all" % "1.1" % "test" ) ) lazy val noPublishSettings = Seq( publish / skip := true ) lazy val projectList = Seq[sbt.ProjectReference]( // Core, support. finagleToggle, finagleCore, finagleNetty4, finagleStats, finagleStatsCore, finagleZipkinCore, finagleZipkinScribe, finagleServersets, finaglePartitioning, finagleTunable, finagleIntegration, finagleExp, finagleGrpcContext, finagleOpenCensusTracing, finagleInit, finagleScribe, // Protocols finagleHttp, finagleBaseHttp, finagleHttp2, finagleThrift, finagleMemcached, finagleMux, finagleThriftMux, finagleMySQL, finagleRedis, finagleNetty4Http, finaglePostgresql ) lazy val finagle = Project( id = "finagle", base = file(".") ).enablePlugins( ScalaUnidocPlugin ).settings( nettyVersionInfo := { val log = sLog.value log.info(s"Using Netty SNAPSHOT build mode: ${useNettySnapshot}") log.info(s"Netty version: ${netty4Version}") log.info(s"Netty tcnative version ${netty4StaticSslVersion}") "" }, sharedSettings ++ noPublishSettings ++ Seq( ScalaUnidoc / unidoc / unidocProjectFilter := inAnyProject -- inProjects( finagleBenchmark, finagleBenchmarkThrift, finagleExample ), // We don't generate javadoc for finagle-serversets, so exclude it from // unidoc. ScalaUnidoc / unidoc / unidocAllSources := (ScalaUnidoc / unidoc / unidocAllSources).value.map(_.filterNot { file => file.getPath.contains("finagle-serversets") && file.getName.endsWith(".java") }) ) ).aggregate(projectList: _*) lazy val finagleIntegration = Project( id = "finagle-integration", base = file("finagle-integration") ).settings( sharedSettings ).settings( name := "finagle-integration", libraryDependencies ++= Seq(util("core")) ++ scroogeLibs ).dependsOn( finagleCore % "compile->compile;test->test", finagleHttp, finagleHttp2, finagleMySQL % "test->compile;test->test", finagleMemcached, finagleMux, finagleNetty4Http, finagleRedis % "test", finagleThrift, finagleThriftMux % "test->compile;test->test", finaglePostgresql % "test->compile;test->test" ) lazy val finagleToggle = Project( id = "finagle-toggle", base = file("finagle-toggle") ).settings( sharedSettings ).settings( name := "finagle-toggle", libraryDependencies ++= Seq(util("app"), util("core"), util("logging"), util("stats")) ++ jacksonLibs ) lazy val finagleInit = Project( id = "finagle-init", base = file("finagle-init") ).settings( sharedSettings ).settings( name := "finagle-init" ) lazy val finagleCore = Project( id = "finagle-core", base = file("finagle-core") ).settings( sharedSettings ).settings( name := "finagle-core", libraryDependencies ++= Seq( util("app"), util("cache"), util("codec"), util("core"), util("hashing"), util("jvm"), util("lint"), util("logging"), util("registry"), util("routing"), util("security"), util("stats"), "com.twitter" %% "util-test" % releaseVersion % "test" excludeAll (ExclusionRule( organization = "junit"), ExclusionRule(organization = "org.scala-tools.testing"), ExclusionRule(organization = "org.mockito")), util("tunable"), caffeineLib, hdrHistogramLib, jsr305Lib ) ++ netty4LibsTest, Test / unmanagedClasspath ++= (LocalProject("finagle-netty4") / Compile / fullClasspath).value ).dependsOn(finagleToggle, finagleInit) lazy val finagleNetty4 = Project( id = "finagle-netty4", base = file("finagle-netty4") ).settings( sharedSettings ).settings( name := "finagle-netty4", libraryDependencies ++= Seq( util("app"), util("cache"), util("codec"), util("core"), util("codec"), util("lint"), util("stats") ) ++ netty4Libs ).dependsOn( finagleCore % "compile->compile;test->test", finagleToggle ) lazy val finagleStatsCore = Project( id = "finagle-stats-core", base = file("finagle-stats-core") ).settings( sharedSettings ).settings( name := "finagle-stats-core", libraryDependencies ++= Seq( util("app"), util("core"), util("lint"), util("logging"), util("registry"), util("stats"), util("tunable") ), libraryDependencies ++= jacksonLibs ).dependsOn( finagleCore, finagleHttp, finagleToggle, finagleTunable ) lazy val finagleStats = Project( id = "finagle-stats", base = file("finagle-stats") ).settings( sharedSettings ).settings( name := "finagle-stats" ).dependsOn( finagleStatsCore ) lazy val finagleZipkinCore = Project( id = "finagle-zipkin-core", base = file("finagle-zipkin-core") ).settings( sharedSettings ).settings( name := "finagle-zipkin-core", libraryDependencies ++= Seq( util("codec"), util("core"), util("stats")) ++ scroogeLibs ++ jacksonLibs ++ zipkinLibs ).dependsOn(finagleCore % "compile->compile;test->test", finagleThrift) lazy val finagleZipkinScribe = Project( id = "finagle-zipkin-scribe", base = file("finagle-zipkin-scribe") ).settings( sharedSettings ).settings( name := "finagle-zipkin-scribe", libraryDependencies ++= scroogeLibs ).dependsOn(finagleCore, finagleScribe, finagleThrift, finagleZipkinCore) lazy val finagleServersets = Project( id = "finagle-serversets", base = file("finagle-serversets") ).settings( sharedSettings ).settings( name := "finagle-serversets", libraryDependencies ++= Seq( caffeineLib, util("cache"), util("zk-test") % "test", "com.google.code.gson" % "gson" % "2.3.1", "org.apache.zookeeper" % "zookeeper" % zkVersion excludeAll ( ExclusionRule("com.sun.jdmk", "jmxtools"), ExclusionRule("com.sun.jmx", "jmxri"), ExclusionRule("javax.jms", "jms") ), "commons-lang" % "commons-lang" % "2.6" ), libraryDependencies ++= jacksonLibs, libraryDependencies ++= scroogeLibs, Compile / ScroogeSBT.autoImport.scroogeLanguages := Seq("java"), unmanagedSources / excludeFilter := "ZkTest.scala", Compile / doc / scalacOptions ++= { if (scalaVersion.value.startsWith("2.12")) Seq("-no-java-comments") else Nil } ).dependsOn(finagleCore, finaglePartitioning) lazy val finaglePartitioning = Project( id = "finagle-partitioning", base = file("finagle-partitioning") ).settings( sharedSettings ).settings( name := "finagle-partitioning", libraryDependencies ++= Seq( util("core"), util("hashing"), scalaCollectionCompat ) ).dependsOn( finagleNetty4, finagleCore % "compile->compile;test->test" ) lazy val finagleTunable = Project( id = "finagle-tunable", base = file("finagle-tunable") ).settings( sharedSettings ).settings( name := "finagle-tunable", libraryDependencies ++= Seq( util("core"), util("tunable") ), libraryDependencies ++= jacksonLibs ).dependsOn(finagleToggle) lazy val finagleScribe = Project( id = "finagle-scribe", base = file("finagle-scribe") ).settings( sharedSettings ).settings( name := "finagle-scribe", libraryDependencies ++= Seq( util("core") ), libraryDependencies ++= scroogeLibs ).dependsOn(finagleCore, finagleThrift) // Protocol support lazy val finagleHttp = Project( id = "finagle-http", base = file("finagle-http") ).settings( sharedSettings ).settings( name := "finagle-http", libraryDependencies ++= Seq( util("codec"), util("logging"), netty4StaticSsl ) ).dependsOn(finagleBaseHttp, finagleNetty4Http, finagleHttp2, finagleToggle) lazy val finagleBaseHttp = Project( id = "finagle-base-http", base = file("finagle-base-http") ).settings( sharedSettings ).settings( name := "finagle-base-http", libraryDependencies ++= Seq( util("logging"), netty4Http ) ++ netty4Libs ).dependsOn(finagleCore, finagleToggle) lazy val finagleLogging = Project( id = "finagle-logging", base = file("finagle-logging") ).settings( sharedSettings ).settings( name := "finagle-logging", libraryDependencies ++= Seq( hdrHistogramLib, util("core"), util("slf4j-api"), ) ).dependsOn(finagleCore) lazy val finagleNetty4Http = Project( id = "finagle-netty4-http", base = file("finagle-netty4-http") ).settings( sharedSettings ).settings( name := "finagle-netty4-http", libraryDependencies ++= Seq( util("app"), util("codec"), util("core"), util("jvm"), util("stats"), netty4Http ) ).dependsOn(finagleNetty4, finagleBaseHttp % "test->test;compile->compile") lazy val finagleHttp2 = Project( id = "finagle-http2", base = file("finagle-http2") ).settings( sharedSettings ).settings( name := "finagle-http2", libraryDependencies ++= Seq( netty4Http, netty4Http2, netty4StaticSsl, util("cache"), util("core"), util("logging") ) ++ netty4Libs ).dependsOn(finagleCore, finagleNetty4, finagleNetty4Http, finagleBaseHttp) lazy val finagleThrift = Project( id = "finagle-thrift", base = file("finagle-thrift") ).settings( sharedSettings ).settings( name := "finagle-thrift", libraryDependencies ++= scroogeLibs ).dependsOn(finagleCore, finagleNetty4, finaglePartitioning, finagleToggle) lazy val finagleMemcached = Project( id = "finagle-memcached", base = file("finagle-memcached") ).settings( sharedSettings ).settings( name := "finagle-memcached", libraryDependencies ++= Seq( util("hashing"), util("zk-test") % "test", "com.twitter" %% "bijection-core" % "0.9.7", "org.apache.thrift" % "libthrift" % libthriftVersion, lz4Lib ), libraryDependencies ++= jacksonLibs ).dependsOn( // NOTE: Order is important here. // finagleNetty4 must come before finagleCore here, otherwise // tests will fail with NoClassDefFound errors due to // StringClient and StringServer. finagleNetty4, finagleCore % "compile->compile;test->test", finagleServersets, finaglePartitioning, finagleStats, finagleToggle ) lazy val finagleRedis = Project( id = "finagle-redis", base = file("finagle-redis") ).settings( sharedSettings ).configs( IntegrationTest extend (Test) ).settings( Defaults.itSettings: _* ).settings( name := "finagle-redis", libraryDependencies ++= Seq( util("logging") ) ).dependsOn(finagleCore, finagleNetty4, finaglePartitioning) lazy val finagleMux = Project( id = "finagle-mux", base = file("finagle-mux") ).settings( sharedSettings ).settings( name := "finagle-mux", libraryDependencies ++= Seq( util("app"), util("core"), util("logging"), util("stats"), lz4Lib % "test" ) ).dependsOn(finagleCore % "compile->compile;test->test", finagleNetty4, finagleToggle) lazy val finagleThriftMux = Project( id = "finagle-thriftmux", base = file("finagle-thriftmux") ).settings( sharedSettings ).settings( name := "finagle-thriftmux", libraryDependencies ++= Seq(util("core"), util("logging"), util("stats")) ++ scroogeLibs ).dependsOn( finagleCore % "compile->compile;test->test", finagleMux, finagleThrift % "compile->compile;test->test") lazy val finagleMySQL = Project( id = "finagle-mysql", base = file("finagle-mysql") ).settings( sharedSettings ).settings( name := "finagle-mysql", libraryDependencies ++= Seq( util("logging"), util("cache"), util("core"), util("stats"), caffeineLib, jsr305Lib, jsqlParserLib ) ++ jacksonLibs, unmanagedSources / excludeFilter := { "EmbeddableMysql.scala" || "ClientTest.scala" } ).dependsOn(finagleCore, finagleNetty4, finagleToggle) lazy val finaglePostgresql = Project( id = "finagle-postgresql", base = file("finagle-postgresql") ).settings( sharedSettings ).settings( name := "finagle-postgresql", libraryDependencies ++= Seq( util("core"), util("stats") ) ).dependsOn(finagleCore, finagleNetty4) lazy val finagleExp = Project( id = "finagle-exp", base = file("finagle-exp") ).settings( sharedSettings ).settings( name := "finagle-exp", libraryDependencies ++= Seq( "com.netflix.concurrency-limits" % "concurrency-limits-core" % "0.3.0", "io.netty" % "netty-common" % netty4Version, "commons-io" % "commons-io" % "2.11.0" ) ).dependsOn( finagleCore % "compile->compile;test->test", finagleNetty4 % "test" ) lazy val finagleGrpcContext = Project( id = "finagle-grpc-context", base = file("finagle-grpc-context") ).settings( sharedSettings ).settings( name := "finagle-grpc-context", libraryDependencies ++= Seq( util("core"), "io.grpc" % "grpc-context" % "1.13.2" ) ) lazy val finagleOpenCensusTracing = Project( id = "finagle-opencensus-tracing", base = file("finagle-opencensus-tracing") ).settings( sharedSettings ).settings( name := "finagle-opencensus-tracing", libraryDependencies ++= Seq( "io.opencensus" % "opencensus-api" % opencensusVersion, "io.opencensus" % "opencensus-impl" % opencensusVersion, "io.opencensus" % "opencensus-contrib-http-util" % opencensusVersion % "test" ) ++ scroogeLibs ).dependsOn( finagleCore, finagleHttp, finagleGrpcContext, // needs the thruftmux test dependency for testing finagleThriftMux % "compile->compile;test->test" ) lazy val finagleExample = Project( id = "finagle-example", base = file("finagle-example") ).settings( sharedSettings ).settings( name := "finagle-example", libraryDependencies ++= Seq( util("codec"), "org.slf4j" % "slf4j-nop" % "1.7.30" % "provided" ) ++ scroogeLibs ).dependsOn( finagleCore, finagleHttp, finagleMemcached, finagleMySQL, finagleRedis, finagleStats, finagleThrift) lazy val finagleBenchmarkThrift = Project( id = "finagle-benchmark-thrift", base = file("finagle-benchmark-thrift") ).settings( sharedSettings ++ Seq(Compile / scroogeLanguages := Seq("java", "scala")) ).settings( libraryDependencies ++= scroogeLibs ).dependsOn(finagleThrift) lazy val finagleBenchmark = Project( id = "finagle-benchmark", base = file("finagle-benchmark") ).settings( sharedSettings ).enablePlugins( JmhPlugin ).settings( name := "finagle-benchmark", libraryDependencies ++= Seq( util("codec"), "org.apache.curator" % "curator-test" % "2.8.0", "org.apache.curator" % "curator-framework" % "2.8.0" ) ).dependsOn( finagleBenchmarkThrift, finagleCore % "compile->compile;compile->test", finagleExp, finagleHttp, finagleMemcached, finagleMux, finagleMySQL, finagleNetty4, finaglePostgresql, finagleStats, finagleThriftMux, finagleZipkinScribe ).aggregate(finagleBenchmarkThrift) lazy val finagleDoc = Project( id = "finagle-doc", base = file("doc") ).enablePlugins( SphinxPlugin ).settings( sharedSettings ).settings( doc / scalacOptions ++= Seq("-doc-title", "Finagle", "-doc-version", version.value), Sphinx / includeFilter := ("*.html" | "*.png" | "*.svg" | "*.js" | "*.css" | "*.gif" | "*.txt"), // Workaround for sbt bug: Without a testGrouping for all test configs, // the wrong tests are run testGrouping := (Test / definedTests map partitionTests).value, DocTest / testGrouping := (DocTest / definedTests map partitionTests).value ).configs( DocTest ).settings( inConfig(DocTest)(Defaults.testSettings): _* ).settings( DocTest / unmanagedSourceDirectories += baseDirectory.value / "src/sphinx/code", DocTest / //resourceDirectory <<= baseDirectory { _ / "src/test/resources" } // Make the "test" command run both, test and doctest:test test := Seq(Test / test, DocTest / test).dependOn.value ).dependsOn(finagleCore, finagleHttp, finagleMySQL) /* Test Configuration for running tests on doc sources */ lazy val DocTest = config("doctest") extend Test // A dummy partitioning scheme for tests def partitionTests(tests: Seq[TestDefinition]) = { Seq(new Group("inProcess", tests, InProcess)) }