Move Maven database to a separate rule (#527)

* Move Maven database to a separate rule

This should make sure that we get a cached version far more often and
thereby speed up the integration tests.
This commit is contained in:
Moritz Kiefer 2019-04-16 14:37:39 +02:00 committed by GitHub
parent a790a0d60d
commit ac5bdc3a5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 70 additions and 60 deletions

View File

@ -2,22 +2,71 @@
# SPDX-License-Identifier: Apache-2.0
load("//bazel_tools:haskell.bzl", "da_haskell_test")
genrule(
name = "integration-tests-mvn",
srcs = [
"@mvn_nix//:bin/mvn",
"//:component-version",
"//daml-lf/archive:daml_lf_archive_java.jar",
"//daml-lf/archive:daml_lf_archive_java_pom.xml",
"//language-support/java/bindings:libbindings-java.jar",
"//language-support/java/bindings:bindings-java_pom.xml",
"//language-support/java/bindings-rxjava:libbindings-rxjava.jar",
"//language-support/java/bindings-rxjava:bindings-rxjava_pom.xml",
"//language-support/java/codegen:shaded_binary.jar",
"//language-support/java/codegen:shaded_binary_pom.xml",
"//ledger-api/rs-grpc-bridge:librs-grpc-bridge.jar",
"//ledger-api/rs-grpc-bridge:rs-grpc-bridge_pom.xml",
"//docs:quickstart-java.tar.gz",
],
outs = ["integration-tests-mvn.tar"],
cmd = """
set -euxo pipefail
TMP_DIR=$$(mktemp -d)
MVN_DB="$$TMP_DIR/m2"
VERSION=$$(cat $(location //:component-version))
install_mvn() {
$(location @mvn_nix//:bin/mvn) -q install:install-file \
-Dmaven.repo.local=$$MVN_DB \
"-DgroupId=$$1" \
"-DartifactId=$$2" \
"-Dfile=$$3" \
"-DpomFile=$$4" \
-Dpackaging=jar \
-Dversion=$$VERSION
}
tar xf $(location //docs:quickstart-java.tar.gz) -C "$$TMP_DIR"
install_mvn \
"com.digitalasset" "daml-lf-archive" \
$(location //daml-lf/archive:daml_lf_archive_java.jar) \
$(location //daml-lf/archive:daml_lf_archive_java_pom.xml)
install_mvn \
"com.daml.ledger" "bindings-java" \
$(location //language-support/java/bindings:libbindings-java.jar) \
$(location //language-support/java/bindings:bindings-java_pom.xml)
install_mvn \
"com.daml.ledger" "bindings-rxjava" \
$(location //language-support/java/bindings-rxjava:libbindings-rxjava.jar) \
$(location //language-support/java/bindings-rxjava:bindings-rxjava_pom.xml)
install_mvn \
"com.daml.java" "codegen" \
$(location //language-support/java/codegen:shaded_binary.jar) \
$(location //language-support/java/codegen:shaded_binary_pom.xml)
install_mvn \
"com.digitalasset.ledger-api" "rs-grpc-bridge" \
$(location //ledger-api/rs-grpc-bridge:librs-grpc-bridge.jar) \
$(location //ledger-api/rs-grpc-bridge:rs-grpc-bridge_pom.xml)
$(location @mvn_nix//:bin/mvn) -q -Dmaven.repo.local=$$MVN_DB -f "$$TMP_DIR/quickstart-java/pom.xml" dependency:resolve dependency:resolve-plugins
tar cf $(location integration-tests-mvn.tar) -C $$(dirname $$MVN_DB) $$(basename $$MVN_DB)
""",
)
da_haskell_test(
name = "integration-tests",
timeout = "long",
srcs = ["src/Main.hs"],
data = [
"//:component-version",
"//daml-lf/archive:daml_lf_archive_java.jar",
"//daml-lf/archive:daml_lf_archive_java_pom.xml",
"//language-support/java/bindings:bindings-java",
"//language-support/java/bindings:bindings-java_pom.xml",
"//language-support/java/bindings-rxjava",
"//language-support/java/bindings-rxjava:bindings-rxjava_pom.xml",
"//language-support/java/codegen:shaded_binary.jar",
"//language-support/java/codegen:shaded_binary_pom.xml",
"//ledger-api/rs-grpc-bridge:librs-grpc-bridge.jar",
"//ledger-api/rs-grpc-bridge:rs-grpc-bridge_pom.xml",
":integration-tests-mvn",
"//release:sdk-release-tarball",
"@local_jdk//:bin/java",
"@mvn_nix//:bin/mvn",
@ -35,6 +84,7 @@ da_haskell_test(
"main-tester",
"network",
"process",
"tar",
"tasty",
"tasty-hunit",
"text",

View File

@ -3,11 +3,11 @@
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import qualified Codec.Archive.Tar as Tar
import Control.Concurrent
import Control.Concurrent.Async
import Control.Exception
import Control.Monad
import qualified Data.Text as T
import Data.Typeable
import Network.HTTP.Client
import Network.HTTP.Types
@ -27,8 +27,6 @@ import DamlHelper
main :: IO ()
main =
withTempDir $ \tmpDir -> do
compVersionFile <- locateRunfiles (mainWorkspace </> "COMPONENT-VERSION")
compVersion <- T.unpack . T.strip . T.pack <$> readFileUTF8 compVersionFile
-- We manipulate global state via the working directory and
-- the environment so running tests in parallel will cause trouble.
setEnv "TASTY_NUM_THREADS" "1"
@ -39,10 +37,10 @@ main =
withEnv
[ ("DAML_HOME", Just damlDir)
, ("PATH", Just $ (damlDir </> "bin") <> ":" <> javaPath <> ":" <> mvnPath <> ":" <> oldPath)
] $ defaultMain (tests compVersion tmpDir)
] $ defaultMain (tests tmpDir)
tests :: String -> FilePath -> TestTree
tests compVersion tmpDir = testGroup "Integration tests"
tests :: FilePath -> TestTree
tests tmpDir = testGroup "Integration tests"
[ testCase "install" $ do
releaseTarball <- locateRunfiles (mainWorkspace </> "release" </> "sdk-release-tarball.tar.gz")
createDirectory tarballDir
@ -51,14 +49,14 @@ tests compVersion tmpDir = testGroup "Integration tests"
, testCase "daml version" $ callProcessQuiet "daml" ["version"]
, testCase "daml --help" $ callProcessQuiet "daml" ["--help"]
, testCase "daml new --list" $ callProcessQuiet "daml" ["new", "--list"]
, quickstartTests compVersion quickstartDir mvnDir
, quickstartTests quickstartDir mvnDir
]
where quickstartDir = tmpDir </> "quickstart"
mvnDir = tmpDir </> "m2"
tarballDir = tmpDir </> "tarball"
quickstartTests :: String -> FilePath -> FilePath -> TestTree
quickstartTests compVersion quickstartDir mvnDir = testGroup "quickstart"
quickstartTests :: FilePath -> FilePath -> TestTree
quickstartTests quickstartDir mvnDir = testGroup "quickstart"
[ testCase "daml new" $
callProcessQuiet "daml" ["new", quickstartDir]
, testCase "daml init" $ withCurrentDirectory quickstartDir $
@ -87,31 +85,8 @@ quickstartTests compVersion quickstartDir mvnDir = testGroup "quickstart"
(\s -> connect s (addrAddress addr))
, testCase "mvn compile" $
withCurrentDirectory quickstartDir $ do
installMvn
("daml-lf" </> "archive" </> "daml_lf_archive_java.jar")
("daml-lf" </> "archive" </> "daml_lf_archive_java_pom.xml")
"com.digitalasset"
"daml-lf-archive"
installMvn
("language-support" </> "java" </> "bindings" </> "libbindings-java.jar")
("language-support" </> "java" </> "bindings" </> "bindings-java_pom.xml")
"com.daml.ledger"
"bindings-java"
installMvn
("language-support" </> "java" </> "bindings-rxjava" </> "libbindings-rxjava.jar")
("language-support" </> "java" </> "bindings-rxjava" </> "bindings-rxjava_pom.xml")
"com.daml.ledger"
"bindings-rxjava"
installMvn
("language-support" </> "java" </> "codegen" </> "shaded_binary.jar")
("language-support" </> "java" </> "codegen" </> "shaded_binary_pom.xml")
"com.daml.java"
"codegen"
installMvn
("ledger-api" </> "rs-grpc-bridge" </> "librs-grpc-bridge.jar")
("ledger-api" </> "rs-grpc-bridge" </> "rs-grpc-bridge_pom.xml")
"com.digitalasset.ledger-api"
"rs-grpc-bridge"
mvnDbTarball <- locateRunfiles (mainWorkspace </> "daml-assistant" </> "integration-tests" </> "integration-tests-mvn.tar")
Tar.extract (takeDirectory mvnDir) mvnDbTarball
callProcess "mvn" [mvnRepoFlag, "-q", "compile"]
, testCase "mvn exec:java@run-quickstart" $
withCurrentDirectory quickstartDir $
@ -136,21 +111,6 @@ quickstartTests compVersion quickstartDir mvnDir = testGroup "quickstart"
]
where
mvnRepoFlag = "-Dmaven.repo.local=" <> mvnDir
installMvn jarPath pomPath groupId artifactId = do
jar <- locateRunfiles (mainWorkspace </> jarPath)
pom <- locateRunfiles (mainWorkspace </> pomPath)
callProcess "mvn"
[ "install:install-file",
mvnRepoFlag
, "-q"
, "-Dfile=" <> jar
, "-DpomFile=" <> pom
, "-DgroupId=" <> groupId
, "-DartifactId=" <> artifactId
, "-Dpackaging=jar"
, "-Dversion=" <> compVersion
]
-- | Like call process but hides stdout.
callProcessQuiet :: FilePath -> [String] -> IO ()