language: scala os: linux dist: xenial jobs: include: # compile website, to check for documentation regressions for docs only PRs - stage: docs name: Compile Website env: - TEST_COMMAND="docs/mdoc" scala: 2.13.3 - stage: trivial os: linux name: "Compile & Formatting Check" env: - TEST_COMMAND="test:compile scalafmtCheck test:scalafmtCheck" scala: 2.12.12 - stage: compile os: linux name: "Compile & Formatting Check" env: - TEST_COMMAND="test:compile scalafmtCheck test:scalafmtCheck" scala: 2.12.12 # compile website, to check for documentation regressions - stage: test name: Compile website env: - TEST_COMMAND="docs/mdoc" scala: 2.13.3 - stage: test name: Linux 2.13.3 bitcoind and eclair rpc tests os: linux env: - TEST_COMMAND="bitcoindRpcTest/test bitcoindRpc/coverageReport bitcoindRpc/coverageAggregate bitcoindRpc/coveralls eclairRpcTest/test eclairRpc/coverageReport eclairRpc/coverageAggregate eclairRpc/coveralls" scala: 2.13.3 - stage: test name: Linux 2.12.12 bitcoind and eclair rpc tests os: linux env: - TEST_COMMAND="bitcoindRpcTest/test bitcoindRpc/coverageReport bitcoindRpc/coverageAggregate bitcoindRpc/coveralls eclairRpcTest/test eclairRpc/coverageReport eclairRpc/coverageAggregate eclairRpc/coveralls" scala: 2.12.12 - stage: test name: Linux 2.13.3 App, Chain, Node, and Core Tests os: linux env: - TEST_COMMAND="chainTest/test chain/coverageReport chain/coverageAggregate chain/coveralls nodeTest/test node/coverageReport node/coverageAggregate node/coveralls cryptoTest/test crypto/coverageReport crypto/coverageAggregate crypto/coveralls coreTest/test core/coverageReport core/coverageAggregate core/coveralls secp256k1jni/test zmq/test zmq/coverageReport zmq/coverageAggregate zmq/coveralls appCommonsTest/test appServerTest/test" scala: 2.13.3 - stage: test name: Linux 2.12.12 App, Chain, Node, and Core Tests os: linux env: - TEST_COMMAND="chainTest/test chain/coverageReport chain/coverageAggregate chain/coveralls nodeTest/test node/coverageReport node/coverageAggregate node/coveralls cryptoTest/test crypto/coverageReport crypto/coverageAggregate crypto/coveralls coreTest/test core/coverageReport core/coverageAggregate core/coveralls secp256k1jni/test zmq/test zmq/coverageReport zmq/coverageAggregate zmq/coveralls appCommonsTest/test appServerTest/test" scala: 2.12.12 - stage: test name: Linux 2.13.3 KeyManager Wallet, dlc tests os: linux env: - TEST_COMMAND="keyManagerTest/test keyManager/coverageReport keyManager/coverageAggregate keyManager/coveralls walletTest/test wallet/coverageReport wallet/coverageAggregate wallet/coveralls dlcOracleTest/test dlcOracle/coverageReport dlcOracle/coverageAggregate dlcOracle/coveralls" scala: 2.13.3 - stage: test name: Linux 2.12.12 KeyManager, Wallet, dlc tests os: linux env: - TEST_COMMAND="keyManagerTest/test keyManager/coverageReport keyManager/coverageAggregate keyManager/coveralls walletTest/test wallet/coverageReport wallet/coverageAggregate wallet/coveralls dlcOracleTest/test dlcOracle/coverageReport dlcOracle/coverageAggregate dlcOracle/coveralls" scala: 2.12.12 - stage: test os: linux name: "Secp256k1 Disabled Core Test" env: - DISABLE_SECP256K1="true" - TEST_COMMAND="coreTest/test cryptoTest/test" scala: 2.13.3 - stage: test os: linux name: "PostgreSQL tests" env: - PG_ENABLED="1" - TEST_COMMAND="dbCommonsTest/test chainTest/test nodeTest/test walletTest/test" scala: 2.13.3 - stage: test os: osx name: "macOS bitcoind and eclair tests" env: - TEST_COMMAND="cryptoTest/test coreTest/test appCommonsTest/test bitcoindRpcTest/test bitcoindRpc/coverageReport bitcoindRpc/coverageAggregate bitcoindRpc/coveralls eclairRpcTest/test eclairRpc/coverageReport eclairRpc/coverageAggregate eclairRpc/coveralls" scala: 2.13.3 # skip all test tagged as UsesExperimentalBitcoind # TODO remove this condition once we have a neutrino enabled bitcoind binary for OSX - stage: test os: osx name: "macOS wallet, node, dlc tests" env: - TEST_COMMAND="walletTest/test wallet/coverageReport wallet/coverageAggregate wallet/coveralls nodeTest/test node/coverageReport node/coverageAggregate node/coveralls dlcOracleTest/test dlcOracle/coverageReport dlcOracle/coveralls" scala: 2.13.3 # Release snapshots/versions of all libraries # run ci-release only if previous stages passed - stage: release jdk: openjdk8 name: Publish library script: sbt ci-release # run website push only if website compilation passed # we use custom sbt task that first compiles Scaladocs # and then calls the docusaurusPublishGhpages task - script: sbt docs/publishWebsite name: Publish website # These directories are cached to S3 at the end of the build # https://www.scala-sbt.org/1.x/docs/Travis-CI-with-sbt.html#Caching cache: directories: - $HOME/.ivy2/cache - $HOME/.sbt - $HOME/.m2 - $HOME/.bitcoin-s/binaries/ - $HOME/build/bitcoin-s/bitcoin-s/app/server/target - $HOME/build/bitcoin-s/bitcoin-s/app/server-test/target - $HOME/build/bitcoin-s/bitcoin-s/app-commons/target - $HOME/build/bitcoin-s/bitcoin-s/app-commons-test/target - $HOME/build/bitcoin-s/bitcoin-s/bitcoind-rpc/target - $HOME/build/bitcoin-s/bitcoin-s/bitcoind-rpc-test/target - $HOME/build/bitcoin-s/bitcoin-s/chain/target - $HOME/build/bitcoin-s/bitcoin-s/chain-test/target - $HOME/build/bitcoin-s/bitcoin-s/core/target - $HOME/build/bitcoin-s/bitcoin-s/core-test/target - $HOME/build/bitcoin-s/bitcoin-s/crypto/target - $HOME/build/bitcoin-s/bitcoin-s/crypto-test/target - $HOME/build/bitcoin-s/bitcoin-s/db-commons/target - $HOME/build/bitcoin-s/bitcoin-s/db-commons-test/target - $HOME/build/bitcoin-s/bitcoin-s/eclair-rpc/target - $HOME/build/bitcoin-s/bitcoin-s/eclair-rpc-test/target - $HOME/build/bitcoin-s/bitcoin-s/fee-provider/target - $HOME/build/bitcoin-s/bitcoin-s/fee-provider-test/target - $HOME/build/bitcoin-s/bitcoin-s/key-manager/target - $HOME/build/bitcoin-s/bitcoin-s/key-manager-test/target - $HOME/build/bitcoin-s/bitcoin-s/node/target - $HOME/build/bitcoin-s/bitcoin-s/node-test/target - $HOME/build/bitcoin-s/bitcoin-s/secp256k1jni/target - $HOME/build/bitcoin-s/bitcoin-s/testkit/target - $HOME/build/bitcoin-s/bitcoin-s/wallet/target - $HOME/build/bitcoin-s/bitcoin-s/wallet-test/target - $HOME/build/bitcoin-s/bitcoin-s/zmq/target # https://www.scala-sbt.org/1.x/docs/Travis-CI-with-sbt.html#Caching before_cache: # Cleanup the cached directories to avoid unnecessary cache updates - rm -fv $HOME/.ivy2/.sbt.ivy.lock - find $HOME/.ivy2/cache -name "ivydata-*.properties" -print -delete - find $HOME/.sbt -name "*.lock" -print -delete before_script: - git fetch --tags - git submodule sync stages: - name: docs if: commit_message =~ /(?i)^docs:/ AND commit_message !~ /(?i)^trivial:/ AND NOT ((branch = master AND type = push) OR (tag IS present)) - name: trivial if: commit_message =~ /(?i)^trivial:/ AND commit_message !~ /(?i)^docs:/ AND NOT ((branch = master AND type = push) OR (tag IS present)) # don't run tests on merge builds, just publish library # and website - name: compile if: commit_message !~ /(?i)^docs:/ AND commit_message !~ /(?i)^trivial:/ AND NOT ((branch = master AND type = push) OR (tag IS present)) # don't run tests on merge builds, just publish library # and website - name: test if: commit_message !~ /(?i)^docs:/ AND commit_message !~ /(?i)^trivial:/ AND NOT ((branch = master AND type = push) OR (tag IS present)) # don't run tests on merge builds, just publish library # and website - name: release if: ((branch = master AND type = push) OR (tag IS present)) AND NOT fork script: # Modify PATH to include binaries we are about to download - sbt ++$TRAVIS_SCALA_VERSION downloadBitcoind downloadEclair coverage $TEST_COMMAND