bitcoin-s/project/CommonSettings.scala

177 lines
5.8 KiB
Scala
Raw Normal View History

// these two imports are needed for sbt syntax to work
import com.typesafe.sbt.SbtNativePackager.Docker
import com.typesafe.sbt.SbtNativePackager.autoImport.packageName
import java.nio.file.Paths
import com.typesafe.sbt.packager.Keys.{daemonUser, daemonUserUid, dockerAlias, dockerAliases, dockerRepository, dockerUpdateLatest, maintainer}
import com.typesafe.sbt.packager.docker.DockerPlugin.autoImport.dockerBaseImage
import sbt._
import sbt.Keys._
import sbtprotoc.ProtocPlugin.autoImport.PB
import scala.util.Properties
object CommonSettings {
Implement caching of bitcoind in the walletTest,nodeTest, and partially bitcoindRpcTest project (#2792) * Create CachedBitcoind, implement it in FundTransactionHandlingTest * Add BaseWalletTest, extend it with BitcoinSWalletTest & BitcoinSWalletTestCachedBitcoind, add CachedBitcoinV19 and use it RescanHandlingTest * Make ProcessBlockTest work with cached bitcoind * Make trait for CachedBitcoindNewest for the newest version of bitcoind * Make UTXOLifeCycleTest use cached bitcoind * Add WalletBloom, WalletSyncTest to use cached bitcoinds * Add WalletIntegrationTest * Rework beforeAll() and afterAll() into the super trait like BaseWalletTest * Add standlone BitcoindFixtures, use it in BitcoindBackendTest * Use new BitcoindFixtures in BitcoindBlockPollingTest * Introduce BaseNodeTest, start implementing the usage of cached bitcoinds in the nodeTest project * Use cached bitcoind's with SpvNodeTest & SpvNodeWithWalletTest * Fix bug on postgres with reusing database, upsert the genesis header rather than create it * Get NeutrinoNode tests workign with cached bitcoinds * Fix NeutrinoNodeWithWallet by destroying wallet state for Postgres * Add teardown helper method for bitcoind * Teardown chain project when using node fixtures since node is dependent upon the chain project. * Turn off parallelExecution again * Switch the parallelExecution flag to only be set on CI, so we can get better performance when running locally * Start implementing BitcoindFixtures, use BitcoindFixturesCachedTriple on TestUtilRpcTest * Fix compiler errors, begin implementing NodePair * Refactor TestRpcUtilTest to use 2 bitcoinds rather than 2 * Reduce the number of bitcoinds that MultiWalletRpcTest needs from 3 -> 1 * Reduce number of bitcoinds used in WalletRpcTest from 3 -> 2 * Add some documentation * Try to re-add parallelExecution * Reduce the number of bitcoinds used in PsbtRpcTest from 3 -> 2 * Disable parallelExecution in Test again * Make BitcoindV21RpcClientTest & BitcoindV20RpcClientTest reduce bitcoind usage from 2 -> 1 * Make BitcoindV19RpcClienttest reduce bitcoind usage from 2 -> 1 * Rework MempoolRpcTest to use fixtures, add BitcoindVersion to CachedBitcoindCollection * Make sure clientAccumm has to be specified as a paramter now rather than filling in by default * Begin parameterizing NodePair/NodeTriple to retain type information for the specific version of bitcoind that was used * Don't implement version in super trait * Fix docs * Fix async issue in V21 test suite * Append to vectors in CachedBitcoinCollection rather than replace * Fix rebase issues * Add scaladocs * Fix BitcoindV18RpcClient address info test * Implement fixtures in BitcoindV17RpcClientTest fixtures * Cleanup v17 PsbtRpcTest * Reduce bitcoind usage from 3 -> 1 in BitcoindV18RpcClientTest * Remove abandon transaction test, this allows us to reduce the number of bitcoind's used in MempoolRpcTest from 3 -> 2 * Remove the requirement to inject BitcoinSAsyncFixtureTest, add it in the test traits explicitly to make things easier. Also add explicit afterAll() method to tear down both the CachedBitcoind & BitcoinSAsyncFixtureTest * Fix missing Await.result() in BitcoindRpcTest.afterAll() * Rework MultiWalletRpcTest to use a NodePair * Rework BlockchainRpcTest to use fixtures * Rework Client start()/stop() methods. Now use an AtomicBoolean to indicate when a user has requested a client to start/stop rather than sending pings to bitcoind that can fail because the conneciton pool has been shutdown in test cases * Try my luck with turning on parallelExecution in CI again * Revert parallelExecution, now testes do not run in parallel on CI * Only turn off parallelExecution for bitcoindRpcTest * Adjust build to only have bitcoindRpcTest NOT in run parallel on mac, reduce number of blocks used in BitcoindRpcTestUtil.createNodeSequence * Run less tests in the rpc test suite as that takes the longest, move them over to node/wallet/dlc test suite on mac osx CI * Don't run eclair tests in parallel either * Remove CachedBitcoind from BitcoinSWalletTest * Fix async bug in test case * Push to github to force re-run of CI * Push to github to force re-run of CI * Push to github to force re-run of CI
2021-03-19 12:37:53 +01:00
private def isCI = {
Properties
.envOrNone("CI")
.isDefined
}
lazy val settings: Seq[Setting[_]] = Vector(
organization := "org.bitcoin-s",
homepage := Some(url("https://bitcoin-s.org")),
maintainer := "Chris Stewart <stewart.chris1234@gmail.com>",
developers := List(
Developer(
"christewart",
"Chris Stewart",
"stewart.chris1234@gmail.com",
url("https://twitter.com/Chris_Stewart_5")
)
),
Compile / scalacOptions ++= compilerOpts(scalaVersion = scalaVersion.value),
Test / scalacOptions ++= testCompilerOpts(scalaVersion =
scalaVersion.value),
//remove annoying import unused things in the scala console
//https://stackoverflow.com/questions/26940253/in-sbt-how-do-you-override-scalacoptions-for-console-in-all-configurations
Compile / console / scalacOptions ~= (_ filterNot (s =>
s == "-Ywarn-unused-import"
|| s == "-Ywarn-unused"
|| s == "-Xfatal-warnings"
//for 2.13 -- they use different compiler opts
|| s == "-Xlint:unused")),
//we don't want -Xfatal-warnings for publishing with publish/publishLocal either
Compile / doc / scalacOptions ~= (_ filterNot (s =>
s == "-Xfatal-warnings")),
Test / console / scalacOptions ++= (Compile / console / scalacOptions).value,
Test / scalacOptions ++= testCompilerOpts(scalaVersion.value),
licenses += ("MIT", url("http://opensource.org/licenses/MIT")),
//you need to build protoc manually to get it working on the new
//mac m1 chip. For instructions on how to do so see
//see: https://github.com/scalapb/ScalaPB/issues/1024
PB.protocExecutable := (
if (protocbridge.SystemDetector.detectedClassifier()=="osx-aarch_64")
file("/usr/local/bin/protoc") // to change if needed, this is where protobuf manual compilation put it for me
else
PB.protocExecutable.value
)
)
lazy val jvmSettings: Seq[Setting[_]] = List(
////
// scaladoc settings
Compile / doc / scalacOptions ++= List(
"-doc-title",
"Bitcoin-S",
"-doc-version",
version.value
),
// Set apiURL to define the base URL for the Scaladocs for our library.
// This will enable clients of our library to automatically link against
// the API documentation using autoAPIMappings.
apiURL := homepage.value.map(_.toString + "/api").map(url(_)),
// scaladoc settings end
////
Compile / compile / javacOptions ++= {
//https://github.com/eclipse/jetty.project/issues/3244#issuecomment-495322586
Seq("--release", "8")
}
)
private val commonCompilerOpts = {
List(
//https://stackoverflow.com/a/43103038/967713
"-release",
"8"
)
}
/** Linting options for scalac */
private val scala2_13CompilerLinting = {
Seq(
"-Xlint:unused",
"-Xlint:adapted-args",
"-Xlint:nullary-unit",
"-Xlint:inaccessible",
"-Xlint:infer-any",
"-Xlint:missing-interpolator",
"-Xlint:eta-sam"
)
}
/** Compiler options for source code */
private val scala2_13SourceCompilerOpts = {
Seq("-Xfatal-warnings") ++ scala2_13CompilerLinting
}
private val nonScala2_13CompilerOpts = Seq(
"-Xmax-classfile-name",
"128",
"-Ywarn-unused",
"-Ywarn-unused-import"
)
//https://docs.scala-lang.org/overviews/compiler-options/index.html
def compilerOpts(scalaVersion: String): Seq[String] = {
Seq(
"-unchecked",
"-feature",
"-deprecation",
"-Ywarn-dead-code",
"-Ywarn-value-discard",
"-Ywarn-unused",
"-unchecked",
"-deprecation",
"-feature",
"-Ypatmat-exhaust-depth",
"off"
) ++ commonCompilerOpts ++ {
if (scalaVersion.startsWith("2.13")) {
scala2_13SourceCompilerOpts
} else nonScala2_13CompilerOpts
}
}
def testCompilerOpts(scalaVersion: String): Seq[String] = {
(commonCompilerOpts ++
//initialization checks: https://docs.scala-lang.org/tutorials/FAQ/initialization-order.html
Vector("-Xcheckinit") ++
compilerOpts(scalaVersion))
.filterNot(_ == "-Xfatal-warnings")
}
lazy val testSettings: Seq[Setting[_]] = Seq(
//show full stack trace (-oF) of failed tests and duration of tests (-oD)
Test / testOptions += Tests.Argument(TestFrameworks.ScalaTest, "-oDF"),
Test / logBuffered := false,
skip / publish := true
) ++ settings
lazy val prodSettings: Seq[Setting[_]] = settings
lazy val appSettings: Seq[Setting[_]] = prodSettings ++ Vector(
//gives us the 'universal' directory in build artifacts
Compile / unmanagedResourceDirectories += baseDirectory.value / "src" / "universal"
)
lazy val dockerSettings: Seq[Setting[_]] = {
Vector(
//https://sbt-native-packager.readthedocs.io/en/latest/formats/docker.html
dockerBaseImage := "openjdk:15.0.2-jdk-buster",
dockerRepository := Some("bitcoinscala"),
//set the user to be 'bitcoin-s' rather than
//the default provided by sbt native packager
//which is 'demiourgos728'
Docker / daemonUser := "bitcoin-s",
Docker / packageName := packageName.value,
Docker / version := version.value,
dockerUpdateLatest := isSnapshot.value
)
}
lazy val binariesPath =
Paths.get(Properties.userHome, ".bitcoin-s", "binaries")
}