Include create-daml-app tests in compatibility tests (#5945)

This is the first part of #5700

It adds tests that build create-daml-app using `daml build` and then
run the codegen and build the UI. Contrary to our main tests these
also run on Windows. This is actually reasonably simple by first
building the typescript libraries on Linux and then downloading them
on Windows.

There are two parts that are still missing from the tests in the main
workspace:

1. Building the extra feature. This should be fairly easy to add.
2. Running the pupeeter tests. At least MacOS and Linux should be
   reasonably easy. I don’t know what horrors Windows will throw at
   us. This step is what actually makes this a compatibility
   test. Currently it doesn’t actually launch Sandbox and the JSON API.

Since this PR is already pretty large, I’d like to tackle those things
separately.

changelog_begin
changelog_end
This commit is contained in:
Moritz Kiefer 2020-05-13 10:39:51 +02:00 committed by GitHub
parent bda565fa44
commit 4916a28682
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 800 additions and 27 deletions

View File

@ -189,9 +189,24 @@ jobs:
trigger_sha: '$(trigger_sha)'
- template: ci/report-end.yml
- job: compatibility_ts_libs
dependsOn:
- check_for_release
timeoutInMinutes: 60
pool:
name: linux-pool
demands: assignment -equals default
steps:
- template: ci/report-start.yml
- checkout: self
- template: ci/compatibility_ts_libs.yml
- template: ci/tell-slack-failed.yml
- template: ci/report-end.yml
- job: compatibility_linux
dependsOn:
- check_for_release
- compatibility_ts_libs
timeoutInMinutes: 60
pool:
name: linux-pool
@ -208,6 +223,7 @@ jobs:
- job: compatibility_macos
dependsOn:
- check_for_release
- compatibility_ts_libs
timeoutInMinutes: 60
pool:
name: macOS-pool
@ -223,6 +239,7 @@ jobs:
- job: compatibility_windows
dependsOn:
- check_for_release
- compatibility_ts_libs
- patch_bazel_windows
timeoutInMinutes: 60
pool:

View File

@ -20,6 +20,10 @@ steps:
IS_FORK: $(System.PullRequest.IsFork)
# to upload to the bazel cache
GOOGLE_APPLICATION_CREDENTIALS_CONTENT: $(GOOGLE_APPLICATION_CREDENTIALS_CONTENT)
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'typescript-libs'
targetPath: $(Build.SourcesDirectory)/compatibility/head_sdk
- powershell: '.\compatibility\build-release-artifacts-windows.ps1'
displayName: 'Build release artifacts'
- powershell: '.\compatibility\test-windows.ps1 ${{ parameters.test_flags }}'

View File

@ -22,6 +22,10 @@ steps:
IS_FORK: $(System.PullRequest.IsFork)
# to upload to the bazel cache
GOOGLE_APPLICATION_CREDENTIALS_CONTENT: $(GOOGLE_APPLICATION_CREDENTIALS_CONTENT)
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'typescript-libs'
targetPath: $(Build.SourcesDirectory)/compatibility/head_sdk
- bash: |
set -euo pipefail
./compatibility/build-release-artifacts.sh

View File

@ -0,0 +1,25 @@
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
parameters:
- name: test_flags
type: string
default: ''
steps:
- bash: ci/dev-env-install.sh
displayName: 'Build/Install the Developer Environment'
- bash: ci/configure-bazel.sh
displayName: 'Configure Bazel for root workspace'
env:
IS_FORK: $(System.PullRequest.IsFork)
# to upload to the bazel cache
GOOGLE_APPLICATION_CREDENTIALS_CONTENT: $(GOOGLE_APPLICATION_CREDENTIALS_CONTENT)
- bash: |
set -euo pipefail
./compatibility/build-ts-libs.sh "${BUILD_ARTIFACTSTAGINGDIRECTORY}"
displayName: 'Build typescript libraries'
- task: PublishPipelineArtifact@0
inputs:
targetPath: $(Build.StagingDirectory)/
artifactName: "typescript-libs"

View File

@ -23,7 +23,17 @@ schedules:
always: true
jobs:
- job: compatibility_ts_libs
timeoutInMinutes: 60
pool:
name: linux-pool
demands: assignment -equals default
steps:
- checkout: self
- template: ../compatibility_ts_libs.yml
- job: compatibility
dependsOn: compatibility_ts_libs
timeoutInMinutes: 240
strategy:
matrix:
@ -54,6 +64,7 @@ jobs:
condition: always()
- job: compatibility_windows
dependsOn: compatibility_ts_libs
timeoutInMinutes: 240
pool:
name: windows-pool

View File

@ -33,6 +33,7 @@ load("@daml//bazel_tools/dev_env_tool:dev_env_tool.bzl", "dadew_sh_posix_configu
dadew_sh_posix_configure() if is_windows else None
load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories")
load(
"@rules_haskell//haskell:nixpkgs.bzl",
"haskell_register_ghc_nixpkgs",
@ -166,6 +167,40 @@ nixpkgs_package(
repositories = dev_env_nix_repos,
)
nixpkgs_package(
name = "node_nix",
attribute_path = "nodejsNested",
build_file_content = 'exports_files(glob(["node_nix/**"]))',
fail_not_supported = False,
nix_file = "@daml//nix:bazel.nix",
nix_file_deps = common_nix_file_deps,
repositories = dev_env_nix_repos,
)
dev_env_tool(
name = "nodejs_dev_env",
nix_include = [
"bin",
"include",
"lib",
"share",
],
nix_label = "@node_nix",
nix_paths = [],
prefix = "nodejs_dev_env",
tools = [],
win_include = [
".",
],
win_paths = [],
win_tool = "nodejs-10.16.3",
)
node_repositories(
vendored_node = "@nodejs_dev_env" if is_windows else "@node_nix",
yarn_version = "1.22.4",
)
load("//:bazel-haskell-deps.bzl", "daml_haskell_deps")
daml_haskell_deps()
@ -178,6 +213,9 @@ local_repository(
)
daml_sdk_head(
daml_ledger_tarball = "@head_sdk//:daml-ledger-0.0.0.tgz",
daml_react_tarball = "@head_sdk//:daml-react-0.0.0.tgz",
daml_types_tarball = "@head_sdk//:daml-types-0.0.0.tgz",
ledger_api_test_tool = "@head_sdk//:ledger-api-test-tool_deploy.jar",
os_name = os_name,
sdk_tarball = "@head_sdk//:sdk-release-tarball.tar.gz",
@ -185,6 +223,9 @@ daml_sdk_head(
[
daml_sdk(
daml_ledger_sha256 = version_sha256s.get(ver).get("daml_ledger"),
daml_react_sha256 = version_sha256s.get(ver).get("daml_react"),
daml_types_sha256 = version_sha256s.get(ver).get("daml_types"),
os_name = os_name,
sdk_sha256 = version_sha256s.get(ver),
test_tool_sha256 = version_sha256s.get(ver).get("test_tool"),

View File

@ -43,6 +43,8 @@ def daml_haskell_deps():
"async",
"base",
"bytestring",
"conduit",
"conduit-extra",
"containers",
"cryptonite",
"directory",
@ -52,6 +54,7 @@ def daml_haskell_deps():
"jwt",
"lens",
"memory",
"mtl",
"monad-loops",
"network",
"optparse-applicative",
@ -61,10 +64,12 @@ def daml_haskell_deps():
"semver",
"split",
"tagged",
"tar-conduit",
"tasty",
"tasty-hunit",
"text",
"optparse-applicative",
"unix-compat",
"unordered-containers",
] + (["unix"] if not is_windows else ["Win32"]),
stack = "@stack_windows//:stack.exe" if is_windows else None,

View File

@ -1,4 +1,5 @@
exports_files([
"daml_ledger_test.sh",
"create_daml_app_test.sh",
"sandbox-with-postgres.sh",
])

View File

@ -0,0 +1,37 @@
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
load(
"@daml//bazel_tools:haskell.bzl",
"da_haskell_binary",
"da_haskell_library",
)
da_haskell_binary(
name = "runner",
srcs = ["Main.hs"],
hackage_deps = [
"aeson",
"base",
"bytestring",
"conduit",
"conduit-extra",
"containers",
"extra",
"filepath",
"jwt",
"mtl",
"unix-compat",
"process",
"tagged",
"tar-conduit",
"tasty",
"tasty-hunit",
"text",
],
visibility = ["//visibility:public"],
deps = [
"//bazel_tools/test_utils",
"@rules_haskell//tools/runfiles",
],
)

View File

@ -0,0 +1,239 @@
-- Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
-- SPDX-License-Identifier: Apache-2.0
module Main (main) where
import qualified Bazel.Runfiles
import Control.Applicative
import Control.Exception.Extra
import Control.Monad
import DA.Test.Process
import DA.Test.Tar
import DA.Test.Util
import qualified Data.Aeson as Aeson
import Data.Conduit ((.|), runConduitRes)
import qualified Data.Conduit.Combinators as Conduit
import qualified Data.Conduit.Tar as Tar
import qualified Data.Conduit.Zlib as Zlib
import Data.List.Extra
import Data.Maybe
import Data.Proxy
import Data.Tagged
import qualified Data.Text as T
import System.Directory.Extra
import System.Environment.Blank
import System.FilePath
import System.IO.Extra
import System.Process
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.Options
data Tools = Tools
{ damlBinary :: FilePath
, sandboxBinary :: FilePath
, sandboxArgs :: [String]
, jsonApiBinary :: FilePath
, jsonApiArgs :: [String]
, damlLedgerPath :: FilePath
, damlTypesPath :: FilePath
, damlReactPath :: FilePath
, yarnPath :: FilePath
}
newtype DamlOption = DamlOption FilePath
instance IsOption DamlOption where
defaultValue = DamlOption $ "daml"
parseValue = Just . DamlOption
optionName = Tagged "daml"
optionHelp = Tagged "runfiles path to the daml executable"
newtype SandboxOption = SandboxOption FilePath
instance IsOption SandboxOption where
defaultValue = SandboxOption $ "sandbox"
parseValue = Just . SandboxOption
optionName = Tagged "sandbox"
optionHelp = Tagged "runfiles path to the sandbox executable"
newtype SandboxArgsOption = SandboxArgsOption { unSandboxArgsOption :: [String] }
instance IsOption SandboxArgsOption where
defaultValue = SandboxArgsOption []
parseValue = Just . SandboxArgsOption . (:[])
optionName = Tagged "sandbox-arg"
optionHelp = Tagged "extra arguments to pass to sandbox executable"
optionCLParser = concatMany (mkOptionCLParser mempty)
where concatMany = fmap (SandboxArgsOption . concat) . many . fmap unSandboxArgsOption
newtype JsonApiOption = JsonApiOption FilePath
instance IsOption JsonApiOption where
defaultValue = JsonApiOption $ "json-api"
parseValue = Just . JsonApiOption
optionName = Tagged "json-api"
optionHelp = Tagged "runfiles path to the json-api executable"
newtype JsonApiArgsOption = JsonApiArgsOption { unJsonApiArgsOption :: [String] }
instance IsOption JsonApiArgsOption where
defaultValue = JsonApiArgsOption []
parseValue = Just . JsonApiArgsOption . (:[])
optionName = Tagged "json-api-arg"
optionHelp = Tagged "extra arguments to pass to json-api executable"
optionCLParser = concatMany (mkOptionCLParser mempty)
where concatMany = fmap (JsonApiArgsOption . concat) . many . fmap unJsonApiArgsOption
newtype DamlLedgerOption = DamlLedgerOption FilePath
instance IsOption DamlLedgerOption where
defaultValue = DamlLedgerOption []
parseValue = Just . DamlLedgerOption
optionName = Tagged "daml-ledger"
optionHelp = Tagged "path to extracted daml-ledger package"
newtype DamlTypesOption = DamlTypesOption FilePath
instance IsOption DamlTypesOption where
defaultValue = DamlTypesOption []
parseValue = Just . DamlTypesOption
optionName = Tagged "daml-types"
optionHelp = Tagged "path to extracted daml-types package"
newtype DamlReactOption = DamlReactOption FilePath
instance IsOption DamlReactOption where
defaultValue = DamlReactOption []
parseValue = Just . DamlReactOption
optionName = Tagged "daml-react"
optionHelp = Tagged "path to extracted daml-react package"
newtype YarnOption = YarnOption FilePath
instance IsOption YarnOption where
defaultValue = YarnOption ""
parseValue = Just . YarnOption
optionName = Tagged "yarn"
optionHelp = Tagged "path to yarn"
withTools :: (IO Tools -> TestTree) -> TestTree
withTools tests = do
askOption $ \(DamlOption damlPath) -> do
askOption $ \(SandboxOption sandboxPath) -> do
askOption $ \(SandboxArgsOption sandboxArgs) -> do
askOption $ \(JsonApiOption jsonApiPath) -> do
askOption $ \(JsonApiArgsOption jsonApiArgs) -> do
askOption $ \(DamlLedgerOption damlLedgerPath) -> do
askOption $ \(DamlTypesOption damlTypesPath) -> do
askOption $ \(DamlReactOption damlReactPath) -> do
askOption $ \(YarnOption yarnPath) -> do
let createRunfiles :: IO (FilePath -> FilePath)
createRunfiles = do
runfiles <- Bazel.Runfiles.create
mainWorkspace <- fromMaybe "compatibility" <$> getEnv "TEST_WORKSPACE"
pure (\path -> Bazel.Runfiles.rlocation runfiles $ mainWorkspace </> path)
withResource createRunfiles (\_ -> pure ()) $ \locateRunfiles -> do
let tools = do
damlBinary <- locateRunfiles <*> pure damlPath
sandboxBinary <- locateRunfiles <*> pure sandboxPath
jsonApiBinary <- locateRunfiles <*> pure jsonApiPath
pure Tools
{ damlBinary
, sandboxBinary
, jsonApiBinary
, sandboxArgs
, jsonApiArgs
, damlLedgerPath
, damlTypesPath
, damlReactPath
, yarnPath
}
tests tools
main :: IO ()
main = do
setEnv "TASTY_NUM_THREADS" "1" True
let options =
[ Option @DamlOption Proxy
, Option @SandboxOption Proxy
, Option @SandboxArgsOption Proxy
, Option @JsonApiOption Proxy
, Option @JsonApiArgsOption Proxy
, Option @DamlLedgerOption Proxy
, Option @DamlTypesOption Proxy
, Option @DamlReactOption Proxy
, Option @YarnOption Proxy
]
let ingredients = defaultIngredients ++ [includingOptions options]
defaultMainWithIngredients ingredients $
withTools $ \getTools -> do
testGroup "Create DAML App tests"
[ test getTools
]
where
test getTools = testCaseSteps "Getting Starte Guide" $ \step -> withTempDir $ \tmpDir -> do
Tools{..} <- getTools
-- daml codegen js assumes Yarn is in PATH.
-- To keep things as simple as possible, we just use `setEnv`
-- instead of copying `withEnv` from the `daml` workspace.
path <- getSearchPath
setEnv "PATH" (intercalate [searchPathSeparator] (takeDirectory yarnPath : path)) True
step "Create app from template"
withCurrentDirectory tmpDir $ do
callProcess damlBinary ["new", "create-daml-app", "create-daml-app"]
let cdaDir = tmpDir </> "create-daml-app"
-- First test the base application (without the user-added feature).
withCurrentDirectory cdaDir $ do
step "Build DAML model for base application"
callProcess damlBinary ["build"]
step "Set up TypeScript libraries and Yarn workspaces for codegen"
setupYarnEnv tmpDir (Workspaces ["create-daml-app/daml.js"])
[(DamlTypes, damlTypesPath), (DamlLedger, damlLedgerPath)]
step "Run JavaScript codegen"
callProcess damlBinary ["codegen", "js", "-o", "daml.js", ".daml/dist/create-daml-app-0.1.0.dar"]
assertFileDoesNotExist (cdaDir </> "ui" </> "build" </> "index.html")
withCurrentDirectory (cdaDir </> "ui") $ do
-- NOTE(MH): We set up the yarn env again to avoid having all the
-- dependencies of the UI already in scope when `daml2js` runs
-- `yarn install`. Some of the UI dependencies are a bit flaky to
-- install and might need some retries.
step "Set up libraries and workspaces again for UI build"
setupYarnEnv tmpDir (Workspaces ["create-daml-app/ui"])
[(DamlLedger, damlLedgerPath), (DamlReact, damlReactPath), (DamlTypes, damlTypesPath)]
step "Install dependencies for UI"
retry 3 (callProcessSilent yarnPath ["install"])
step "Run linter"
callProcessSilent yarnPath ["lint", "--max-warnings", "0"]
step "Build the application UI"
callProcessSilent yarnPath ["build"]
assertFileExists (cdaDir </> "ui" </> "build" </> "index.html")
data TsLibrary
= DamlLedger
| DamlReact
| DamlTypes
deriving (Bounded, Enum)
newtype Workspaces = Workspaces [FilePath]
tsLibraryName :: TsLibrary -> String
tsLibraryName = \case
DamlLedger -> "daml-ledger"
DamlReact -> "daml-react"
DamlTypes -> "daml-types"
-- NOTE(MH): In some tests we need our TS libraries like `@daml/types` in
-- scope. We achieve this by putting a `package.json` file further up in the
-- directory tree. This file sets up a yarn workspace that includes the TS
-- libraries via the `resolutions` field.
setupYarnEnv :: FilePath -> Workspaces -> [(TsLibrary, FilePath)] -> IO ()
setupYarnEnv rootDir (Workspaces workspaces) tsLibs = do
forM_ tsLibs $ \(tsLib, libLocation) -> do
let name = tsLibraryName tsLib
removePathForcibly (rootDir </> name)
runConduitRes
$ Conduit.sourceFile libLocation
.| Zlib.ungzip
.| Tar.untar (restoreFile (\a b -> fail (T.unpack $ a <> b)) (rootDir </> name))
Aeson.encodeFile (rootDir </> "package.json") $ Aeson.object
[ "private" Aeson..= True
, "workspaces" Aeson..= workspaces
, "resolutions" Aeson..= Aeson.object
[ pkgName Aeson..= ("file:./" ++ name)
| (tsLib, _) <- tsLibs
, let name = tsLibraryName tsLib
, let pkgName = "@" <> T.replace "-" "/" (T.pack name)
]
]

View File

@ -0,0 +1,33 @@
#!/usr/bin/env bash
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
# Copy-pasted from the Bazel Bash runfiles library v2.
set -uo pipefail; f=bazel_tools/tools/bash/runfiles/runfiles.bash
source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \
source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \
source "$0.runfiles/$f" 2>/dev/null || \
source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
{ echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e
# --- end runfiles.bash initialization v2 ---
set -euox pipefail
RUNNER="$(rlocation "$TEST_WORKSPACE/$1")"
DAML="$(rlocation "$TEST_WORKSPACE/$2")"
SANDBOX="$(rlocation "$TEST_WORKSPACE/$3")"
JSON_API="$(rlocation "$TEST_WORKSPACE/$4")"
DAML_TYPES="$(rlocation "$TEST_WORKSPACE/$5")"
DAML_LEDGER="$(rlocation "$TEST_WORKSPACE/$6")"
DAML_REACT="$(rlocation "$TEST_WORKSPACE/$7")"
YARN="$(rlocation "$TEST_WORKSPACE/$8")"
"$RUNNER" \
--daml "$DAML" \
--sandbox "$SANDBOX" \
--json-api "$JSON_API" \
--daml-types "$DAML_TYPES" \
--daml-ledger "$DAML_LEDGER" \
--daml-react "$DAML_REACT" \
--yarn "$YARN" \
"${@:9}"

View File

@ -43,6 +43,7 @@ da_haskell_binary(
visibility = ["//visibility:public"],
deps = [
":sandbox-helper",
"//bazel_tools/test_utils",
"@rules_haskell//tools/runfiles",
],
)

View File

@ -4,7 +4,7 @@
module Main (main) where
import Control.Applicative (many)
import Control.Monad (unless, void)
import DA.Test.Process
import Data.Function ((&))
import Data.Maybe (fromMaybe)
import Data.Proxy (Proxy (..))
@ -12,11 +12,8 @@ import Data.Tagged (Tagged (..))
import System.Directory.Extra (withCurrentDirectory)
import System.Environment (lookupEnv)
import System.Environment.Blank (setEnv)
import System.Exit (ExitCode(..), exitFailure)
import System.FilePath ((</>), takeBaseName)
import System.IO (hPutStrLn, stderr)
import System.IO.Extra (withTempDir,writeFileUTF8)
import System.Process (CreateProcess,proc,readCreateProcessWithExitCode)
import Test.Tasty (TestTree,askOption,defaultMainWithIngredients,defaultIngredients,includingOptions,testGroup,withResource)
import Test.Tasty.Options (IsOption(..), OptionDescription(..), mkOptionCLParser)
import Test.Tasty.HUnit (testCaseSteps, testCase)
@ -252,21 +249,3 @@ writeMinimalProject (SdkVersion sdkVersion) = do
, "module Main where"
, "template T with p : Party where signatory p"
]
callProcessSilent :: FilePath -> [String] -> IO ()
callProcessSilent cmd args =
void $ run (proc cmd args)
callProcessForStdout :: FilePath -> [String] -> IO String
callProcessForStdout cmd args =
run (proc cmd args)
run :: CreateProcess -> IO String
run cp = do
(exitCode, out, err) <- readCreateProcessWithExitCode cp ""
unless (exitCode == ExitSuccess) $ do
hPutStrLn stderr $ "Failure: Command \"" <> show cp <> "\" exited with " <> show exitCode
hPutStrLn stderr $ unlines ["stdout: ", out]
hPutStrLn stderr $ unlines ["stderr: ", err]
exitFailure
return out

View File

@ -56,6 +56,20 @@ def _daml_sdk_impl(ctx):
output = "extracted-test-tool",
)
for lib in ["types", "ledger", "react"]:
tarball_name = "daml_{}_tarball".format(lib)
if getattr(ctx.attr, tarball_name):
ctx.symlink(
getattr(ctx.attr, tarball_name),
"daml-{}.tgz".format(lib),
)
else:
ctx.download(
output = "daml-{}.tgz".format(lib),
url = "https://registry.npmjs.org/@daml/{}/-/{}-{}.tgz".format(lib, lib, ctx.attr.version),
sha256 = getattr(ctx.attr, "daml_{}_sha256".format(lib)),
)
ctx.symlink(out_dir.get_child("daml").get_child("daml" + (".exe" if is_windows else "")), "sdk/bin/daml")
ctx.file(
"sdk/daml-config.yaml",
@ -107,6 +121,7 @@ filegroup(
name = "dar-files",
srcs = glob(["extracted-test-tool/ledger/test-common/**"]),
)
exports_files(["daml-types.tgz", "daml-ledger.tgz", "daml-react.tgz"])
""",
)
return None
@ -120,6 +135,12 @@ _daml_sdk = repository_rule(
"sdk_tarball": attr.label(allow_single_file = True, mandatory = False),
"test_tool_sha256": attr.string(mandatory = False),
"test_tool": attr.label(allow_single_file = True, mandatory = False),
"daml_types_tarball": attr.label(allow_single_file = True, mandatory = False),
"daml_ledger_tarball": attr.label(allow_single_file = True, mandatory = False),
"daml_react_tarball": attr.label(allow_single_file = True, mandatory = False),
"daml_types_sha256": attr.string(mandatory = False),
"daml_ledger_sha256": attr.string(mandatory = False),
"daml_react_sha256": attr.string(mandatory = False),
},
)
@ -130,12 +151,15 @@ def daml_sdk(version, **kwargs):
**kwargs
)
def daml_sdk_head(sdk_tarball, ledger_api_test_tool, **kwargs):
def daml_sdk_head(sdk_tarball, ledger_api_test_tool, daml_types_tarball, daml_ledger_tarball, daml_react_tarball, **kwargs):
version = "0.0.0"
_daml_sdk(
name = "daml-sdk-{}".format(version),
version = version,
sdk_tarball = sdk_tarball,
test_tool = ledger_api_test_tool,
daml_types_tarball = daml_types_tarball,
daml_ledger_tarball = daml_ledger_tarball,
daml_react_tarball = daml_react_tarball,
**kwargs
)

View File

@ -0,0 +1,31 @@
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
load(
"@daml//bazel_tools:haskell.bzl",
"da_haskell_library",
)
da_haskell_library(
name = "test_utils",
srcs = glob(["DA/Test/**/*.hs"]),
hackage_deps = [
"base",
"bytestring",
"tar-conduit",
"conduit",
"directory",
"extra",
"filepath",
"network",
"process",
"safe-exceptions",
"tasty",
"tasty-hunit",
"text",
"unix-compat",
],
visibility = ["//visibility:public"],
deps = [
],
)

View File

@ -0,0 +1,31 @@
-- Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
-- SPDX-License-Identifier: Apache-2.0
module DA.Test.Process
( callProcessSilent
, callProcessForStdout
) where
import Control.Monad
import System.Exit
import System.IO
import System.Process
callProcessSilent :: FilePath -> [String] -> IO ()
callProcessSilent cmd args =
void $ run (proc cmd args)
callProcessForStdout :: FilePath -> [String] -> IO String
callProcessForStdout cmd args =
run (proc cmd args)
run :: CreateProcess -> IO String
run cp = do
(exitCode, out, err) <- readCreateProcessWithExitCode cp ""
unless (exitCode == ExitSuccess) $ do
hPutStrLn stderr $ "Failure: Command \"" <> show cp <> "\" exited with " <> show exitCode
hPutStrLn stderr $ unlines ["stdout: ", out]
hPutStrLn stderr $ unlines ["stderr: ", err]
exitFailure
return out

View File

@ -0,0 +1,79 @@
-- Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
-- SPDX-License-Identifier: Apache-2.0
-- This matches the code in Data.Conduit.Tar.Extra
-- in da-hs-base.
module DA.Test.Tar (restoreFile) where
import Conduit
import Control.Monad
import qualified Data.ByteString as BS
import qualified Data.Conduit.Tar as Tar
import Data.List.Extra
import Data.Maybe
import qualified Data.Text as T
import System.Directory
import System.Info.Extra
import System.FilePath
import System.PosixCompat.Files (createSymbolicLink, setFileMode)
-- | This is intended to be used in combination with `Data.Conduit.Tar.untar`.
-- It writes the given file to the given directory stripping the first component
-- thereby emulating tars --strip-components=1 option.
restoreFile
:: MonadResource m
=> (T.Text -> T.Text -> m ())
-> FilePath
-> Tar.FileInfo
-> ConduitT BS.ByteString Void m ()
restoreFile throwError extractPath info = do
let oldPath = Tar.decodeFilePath (Tar.filePath info)
newPath = dropDirectory1 oldPath
targetPath = extractPath </> dropTrailingPathSeparator newPath
parentPath = takeDirectory targetPath
when (pathEscapes newPath) $ do
lift $ throwError
"file path escapes tarball."
("path = " <> T.pack oldPath)
when (notNull newPath) $ do
case Tar.fileType info of
Tar.FTNormal -> do
liftIO $ createDirectoryIfMissing True parentPath
Conduit.sinkFileBS targetPath
liftIO $ setFileMode targetPath (Tar.fileMode info)
Tar.FTDirectory -> do
liftIO $ createDirectoryIfMissing True targetPath
Tar.FTSymbolicLink bs | not isWindows -> do
let path = Tar.decodeFilePath bs
unless (isRelative path) $
lift $ throwError
"symbolic link target is absolute."
("target = " <> T.pack path <> ", path = " <> T.pack oldPath)
when (pathEscapes (takeDirectory newPath </> path)) $
lift $ throwError
"symbolic link target escapes tarball."
("target = " <> T.pack path <> ", path = " <> T.pack oldPath)
liftIO $ createDirectoryIfMissing True parentPath
liftIO $ createSymbolicLink path targetPath
unsupported ->
lift $ throwError
"unsupported file type."
("type = " <> T.pack (show unsupported) <> ", path = " <> T.pack oldPath)
-- | Check whether a relative path escapes its root.
pathEscapes :: FilePath -> Bool
pathEscapes path = isNothing $ foldM step "" (splitDirectories path)
where
step acc "." = Just acc
step "" ".." = Nothing
step acc ".." = Just (takeDirectory acc)
step acc name = Just (acc </> name)
-- | Drop first component from path
dropDirectory1 :: FilePath -> FilePath
dropDirectory1 = joinPath . tail . splitPath

View File

@ -0,0 +1,17 @@
-- Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
-- SPDX-License-Identifier: Apache-2.0
module DA.Test.Util
( assertFileExists
, assertFileDoesNotExist
) where
import System.Directory
import Test.Tasty.HUnit
assertFileExists :: FilePath -> IO ()
assertFileExists file = doesFileExist file >>= assertBool (file ++ " was expected to exist, but does not exist")
assertFileDoesNotExist :: FilePath -> IO ()
assertFileDoesNotExist file = doesFileExist file >>= assertBool (file ++ " was expected to not exist, but does exist") . not

View File

@ -22,6 +22,12 @@ excluded_test_tool_tests = {
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
"1.1.0-snapshot.20200506.4107.0.7e448d81": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
"0.0.0": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
@ -58,6 +64,12 @@ excluded_test_tool_tests = {
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
"1.1.0-snapshot.20200506.4107.0.7e448d81": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
},
"1.0.1-snapshot.20200424.3917.0.16093690": {
"1.0.0": [
@ -76,6 +88,10 @@ excluded_test_tool_tests = {
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
],
"1.1.0-snapshot.20200506.4107.0.7e448d81": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
],
"0.0.0": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
@ -98,6 +114,10 @@ excluded_test_tool_tests = {
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
],
"1.1.0-snapshot.20200506.4107.0.7e448d81": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
],
"0.0.0": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
@ -118,6 +138,12 @@ excluded_test_tool_tests = {
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
"1.1.0-snapshot.20200506.4107.0.7e448d81": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
"0.0.0": [
# This restriction has been removed in https://github.com/digital-asset/daml/pull/5611.
"ContractKeysSubmitterIsMaintainerIT",
@ -139,6 +165,20 @@ excluded_test_tool_tests = {
"ContractKeysIT",
],
},
"1.1.0-snapshot.20200506.4107.0.7e448d81": {
"1.0.0": [
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
"1.0.1-snapshot.20200417.3908.1.722bac90": [
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
"1.1.0-snapshot.20200422.3991.0.6391ee9f": [
# Fix for https://github.com/digital-asset/daml/issues/5562
"ContractKeysIT",
],
},
"0.0.0": {
"1.0.0": [
# Fix for https://github.com/digital-asset/daml/issues/5562
@ -209,6 +249,51 @@ def daml_ledger_test(
**kwargs
)
def create_daml_app_test(
name,
daml,
sandbox,
json_api,
daml_types,
daml_react,
daml_ledger,
sandbox_args = [],
json_api_args = [],
data = [],
**kwargs):
native.sh_test(
name = name,
# See the comment on daml_ledger_test for why
# we need the sh_test.
srcs = ["//bazel_tools:create_daml_app_test.sh"],
args = [
"$(rootpath //bazel_tools/create-daml-app:runner)",
#"--daml",
"$(rootpath %s)" % daml,
#"--sandbox",
"$(rootpath %s)" % sandbox,
#"--json-api",
"$(rootpath %s)" % json_api,
"$(rootpath %s)" % daml_types,
"$(rootpath %s)" % daml_ledger,
"$(rootpath %s)" % daml_react,
"$(rootpath @nodejs//:yarn)",
] + _concat([["--sandbox-arg", arg] for arg in sandbox_args]) +
_concat([["--json-api-arg", arg] for arg in json_api_args]),
data = data + depset(direct = [
"//bazel_tools/create-daml-app:runner",
"@nodejs//:yarn",
# Deduplicate if daml and sandbox come from the same release.
daml,
sandbox,
json_api,
daml_types,
daml_react,
daml_ledger,
]).to_list(),
**kwargs
)
def sdk_platform_test(sdk_version, platform_version):
# SDK components
daml_assistant = "@daml-sdk-{sdk_version}//:daml".format(
@ -226,10 +311,16 @@ def sdk_platform_test(sdk_version, platform_version):
platform_version = platform_version,
)
json_api = "@daml-sdk-{platform_version}//:daml".format(
platform_version = platform_version,
)
# We need to use weak seeding to avoid our tests timing out
# if the CI machine does not have enough entropy.
sandbox_args = ["sandbox", "--contract-id-seeding=testing-weak"]
json_api_args = ["json-api"]
# ledger-api-test-tool test-cases
name = "ledger-api-test-tool-{sdk_version}-platform-{platform_version}".format(
sdk_version = version_to_name(sdk_version),
@ -290,3 +381,18 @@ def sdk_platform_test(sdk_version, platform_version):
size = "large",
tags = extra_tags(sdk_version, platform_version),
)
create_daml_app_test(
name = "create-daml-app-{sdk_version}-platform-{platform_version}".format(sdk_version = version_to_name(sdk_version), platform_version = version_to_name(platform_version)),
daml = daml_assistant,
sandbox = sandbox,
json_api = json_api,
daml_types = "@daml-sdk-{}//:daml-types.tgz".format(sdk_version),
daml_react = "@daml-sdk-{}//:daml-react.tgz".format(sdk_version),
daml_ledger = "@daml-sdk-{}//:daml-ledger.tgz".format(sdk_version),
sandbox_args = sandbox_args,
json_api_args = json_api_args,
size = "large",
# Yarn gets really unhappy on Windows if it is called in parallel
# so we mark this exclusive for now.
tags = extra_tags(sdk_version, platform_version) + (["exclusive"] if is_windows else []),
)

25
compatibility/build-ts-libs.sh Executable file
View File

@ -0,0 +1,25 @@
#!/usr/bin/env bash
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
set -eou pipefail
cd "$(dirname "$0")/.."
eval "$(./dev-env/bin/dade-assist)"
# We allow overwriting this since on CI we build this in a separate step and upload it first
# before fetching it in another step.
HEAD_TARGET_DIR=${1:-compatibility/head_sdk}
function cleanup {
rm -rf "daml-types-0.0.0.tar.gz" "daml-ledger-0.0.0.tar.gz" "daml-react-0.0.0.tar.gz"
}
trap cleanup EXIT
bazel run //language-support/ts/daml-types:npm_package.pack
bazel run //language-support/ts/daml-ledger:npm_package.pack
bazel run //language-support/ts/daml-react:npm_package.pack
cp -f daml-types-0.0.0.tgz daml-react-0.0.0.tgz daml-ledger-0.0.0.tgz "$HEAD_TARGET_DIR"

View File

@ -36,6 +36,8 @@ load(
"rules_haskell_version",
"rules_nixpkgs_sha256",
"rules_nixpkgs_version",
"rules_nodejs_sha256",
"rules_nodejs_version",
"zlib_sha256",
"zlib_version",
)
@ -80,3 +82,15 @@ def daml_deps():
urls = ["https://github.com/madler/zlib/archive/{}.tar.gz".format(zlib_version)],
sha256 = zlib_sha256,
)
if "build_bazel_rules_nodejs" not in native.existing_rules():
http_archive(
name = "build_bazel_rules_nodejs",
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/{}/rules_nodejs-{}.tar.gz".format(rules_nodejs_version, rules_nodejs_version)],
sha256 = rules_nodejs_sha256,
patches = [
# Work around for https://github.com/bazelbuild/rules_nodejs/issues/1565
"@daml//bazel_tools:rules_nodejs_npm_cli_path.patch",
],
patch_args = ["-p1"],
)

View File

@ -1,5 +1,7 @@
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
# This file is autogenerated and should not be modified manually.
# Update versions/UpdateVersions.hs instead.
sdk_versions = [
"1.0.0",
"1.0.1-snapshot.20200417.3908.1.722bac90",
@ -7,6 +9,7 @@ sdk_versions = [
"1.0.1",
"1.1.0-snapshot.20200422.3991.0.6391ee9f",
"1.1.0-snapshot.20200430.4057.0.681c862d",
"1.1.0-snapshot.20200506.4107.0.7e448d81",
"0.0.0",
]
platform_versions = [
@ -16,6 +19,7 @@ platform_versions = [
"1.0.1",
"1.1.0-snapshot.20200422.3991.0.6391ee9f",
"1.1.0-snapshot.20200430.4057.0.681c862d",
"1.1.0-snapshot.20200506.4107.0.7e448d81",
"0.0.0",
]
stable_versions = [
@ -30,35 +34,62 @@ version_sha256s = {
"macos": "feb2086a9a01048300270c71eb212c8541cdec1082f541408250d6124bc307a8",
"windows": "2028efe1f505c1994e1abc41c0fb5181669cd46834818aa8276d04b0fb6eb034",
"test_tool": "cf66efafd9490e1256e825f377b208b8ae90151f56e411b596fbaaef91353e14",
"daml_types": "f85e5dd7ef1c5733826c1c79e316d2733344ac0da67f0d381ba70fc83a64fc78",
"daml_ledger": "5aab9a6cbdc987fc4279481152ff65bda503425f7e338c5123237b283aae44d6",
"daml_react": "30ab9db8a20df6cbfed7c1b42a45ca0ea55af6e150c013105d46c94afa5f9a46",
},
"1.0.1-snapshot.20200417.3908.1.722bac90": {
"linux": "aaf832ceda1a66a8469460d5a4b6c14f681ce692d4e9ef6010896febbaf4b6e1",
"macos": "c2f89e394332b6ff19f547ccb399bacd3cd50d2493249c2d3a1ecaad0b87ac8b",
"windows": "7033ef0c5cbe75910a27730643076d3919b5694f3dc75f8daa57d5c22d04c593",
"test_tool": "762cd4836a8359dca0fb3271ba2e1d0629138f7d8d914298324418a174c5d22a",
"daml_types": "5ef8c162c0ea7d9bb8e40e2ea1bc632e0e842c33d2da6b45ad9e14c34fe41d66",
"daml_ledger": "af92004ec98f9439785a3a8cf9659341ee000c47a0d63d0088668915ed1462e7",
"daml_react": "562609f975c4d98d202b8400cb1f80398c7b38195546b73cb57d3257ec384446",
},
"1.0.1-snapshot.20200424.3917.0.16093690": {
"linux": "c46d3b24b34078e974a958cd30deb8628a42d85ac2c0159341ad13eff25a7d22",
"macos": "f8cae6ff524d0050e323218196d47c7c8ecd0399dca8a0571324ca3f4380da23",
"windows": "2c884302b4cc80777cd084dc68d58f00102a043e4f1ac001d3be023d743e2670",
"test_tool": "a88bf4594aea82a218871b6966d298ddafcd7a9deb83e337e83ed100e86ea316",
"daml_types": "6ce2173fe407e6e5c9496b58a66f48db8f191c6c2bf66d1db3e2318d12d12f62",
"daml_ledger": "872733ef3dbd19a972e360935d747e3673ab1b972f713db08ce89f5e83c802a3",
"daml_react": "705d7ad62204a389de5cfaf0c0cc50e071aedc9168247ea806a64dc430f7c306",
},
"1.0.1": {
"linux": "9cff04c29bb28503b41dcde310a2f3307984b1d976f8bccfb38268672e730c8f",
"macos": "a7e094e2d8766c852a247e0601b7c062c435b0d91f9ab256bbf4fcb40971ee36",
"windows": "41ecd44f3ea7c2a64a7f677f36b3f26dabaa5de913bc57bd680ea8f40f00ff0b",
"test_tool": "038de725b74f128fc0cb6f3ce8eef7d62da9527d0cbf25b93b7c1623bbb413c9",
"daml_types": "c50d5f37dbb42f45ae1f4f4013a72006ae7bbd531c68c363b54212a3458c5b6e",
"daml_ledger": "12fc3ef723171162128fb5951dec5452f75b1a3de7facf85a2b0126f46de159b",
"daml_react": "dc4cbf95f22cc0300af1f450be316bd55ebbc2816e9806231b13edce85bea44c",
},
"1.1.0-snapshot.20200422.3991.0.6391ee9f": {
"linux": "d3bddaa903ebaebb6f714a3ac39598ba7fd71e8b80636c1275054ed7b883a0d9",
"macos": "66f1713057800ed75db1b967a8ea2d9b6c18da1a76b8224abdec0d33ed5533ae",
"windows": "2c779776d923d990870fbb2aa1c71e6081258a9b9ccc7cf8242c419a765d4821",
"test_tool": "649ecf7a7e98caef7dac20082526444b33d85dfe79b4b9b66d069ad67aac74fa",
"daml_types": "cad498131eb60f2651303cc26d520fe3614750ef2705db23ffbefeae0be3b7cf",
"daml_ledger": "527b6353c6d88d79f69aa78a51b9707e541555c42f1a2331f2bf075a730b3305",
"daml_react": "18f3363aa9c4f32b1fac48028a73a56dfdd8a73058d4b8d119adb16c72cb70fb",
},
"1.1.0-snapshot.20200430.4057.0.681c862d": {
"linux": "199cb51a5b406c8968f2352fe04ace8368ce95beaee81f19073b0f998c5518bf",
"macos": "f4844d54a62999ced90a3435a6c7b97c21e96882151489451d88774fdd4a05bc",
"windows": "1367d103cd514c759dc55ff4600cc73dd68d67cf89fa6ec5260634b0bdad08d0",
"test_tool": "7f693a9384df622136d5a039fdd5ffd22a9fd12439064017f339002fbf509da2",
"daml_types": "3329d1c1fc7382e86af2bff305effd31e22387149dc3231e9ed03ccd1b25bc30",
"daml_ledger": "1c5a3eb196a90685f406d4a91a8514ab22d0ebeaf1302f22854c6ac1e49c5ae4",
"daml_react": "8a217c7af7c828f41b532640914ed83f3d19bf5b8b42a52671db427ed9dd770c",
},
"1.1.0-snapshot.20200506.4107.0.7e448d81": {
"linux": "36d192d7004b2d307437a97bf86af9ffdea8adde99419867cf51740dd7a89a94",
"macos": "2359fb405497784781c0c9a94737d6c1999e15a33789eda1372e7bea57068c71",
"windows": "d1e521ca254d6768acb4efc0f3e53e8f464a0f09948c60128fafdcddc96d2232",
"test_tool": "1f6dacd2e37022bb3d6de567408f4b0f009281115513e4c6a7c4ace11f093361",
"daml_types": "987560f3b2268bc8dffcbad2f257a182f7145884afc9c69c62658cea037459c1",
"daml_ledger": "3762cd5185d69121a3277fe2d3520cf2762e23e09049ef771d3e44c8c5891f2f",
"daml_react": "35d892da1844358e032adbfd987c5fcf7eb279209d846126c37c8d993401a792",
},
}

View File

@ -73,6 +73,9 @@ renderVersionsFile (Versions (Set.toAscList -> versions)) checksums =
, " \"macos\": " <> renderDigest macosHash <> ","
, " \"windows\": " <> renderDigest windowsHash <> ","
, " \"test_tool\": " <> renderDigest testToolHash <> ","
, " \"daml_types\": " <> renderDigest damlTypesHash <> ","
, " \"daml_ledger\": " <> renderDigest damlLedgerHash <> ","
, " \"daml_react\": " <> renderDigest damlReactHash <> ","
, " },"
]
renderDigest digest = T.pack $ show (convertToBase Base16 digest :: ByteString)
@ -88,13 +91,23 @@ data Checksums = Checksums
, macosHash :: Digest SHA256
, windowsHash :: Digest SHA256
, testToolHash :: Digest SHA256
, damlTypesHash :: Digest SHA256
, damlLedgerHash :: Digest SHA256
, damlReactHash :: Digest SHA256
}
getChecksums :: Version -> IO Checksums
getChecksums ver = do
putStrLn ("Requesting hashes for " <> SemVer.toString ver)
[linuxHash, macosHash, windowsHash, testToolHash] <-
forConcurrently [sdkUrl "linux", sdkUrl "macos", sdkUrl "windows", testToolUrl] $ \url -> do
[ linuxHash, macosHash, windowsHash, testToolHash,
damlTypesHash, damlLedgerHash, damlReactHash ] <-
forConcurrently
[ sdkUrl "linux", sdkUrl "macos", sdkUrl "windows"
, testToolUrl
, tsLib "types"
, tsLib "ledger"
, tsLib "react"
] $ \url -> do
req <- parseRequestThrow url
bs <- httpLbs req
let !hash = hashlazy (getResponseBody bs)
@ -107,6 +120,9 @@ getChecksums ver = do
testToolUrl =
"https://repo1.maven.org/maven2/com/daml/ledger-api-test-tool/" <>
SemVer.toString ver <> "/ledger-api-test-tool-" <> SemVer.toString ver <> ".jar"
tsLib name =
"https://registry.npmjs.org/@daml/" <> name <>
"/-/" <> name <> "-" <> SemVer.toString ver <> ".tgz"
optsParser :: Parser Opts
optsParser = Opts

View File

@ -39,6 +39,8 @@ buildifier_version = "0.26.0"
buildifier_sha256 = "86592d703ecbe0c5cbb5139333a63268cf58d7efd2c459c8be8e69e77d135e29"
zlib_version = "cacf7f1d4e3d44d871b605da3b647f07d718623f"
zlib_sha256 = "6d4d6640ca3121620995ee255945161821218752b551a1a180f4215f7d124d45"
rules_nodejs_version = "1.6.0"
rules_nodejs_sha256 = "f9e7b9f42ae202cc2d2ce6d698ccb49a9f7f7ea572a78fd451696d03ef2ee116"
# Recent davl.
davl_version = "f2d7480d118f32626533d6a150a8ee7552cc0222" # 2020-03-23, "Deploy upgrade to DAML SDK 0.13.56-snapshot.20200318",https://github.com/digital-asset/davl/pull/233/commits.
@ -184,8 +186,8 @@ def daml_deps():
if "build_bazel_rules_nodejs" not in native.existing_rules():
http_archive(
name = "build_bazel_rules_nodejs",
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/1.6.0/rules_nodejs-1.6.0.tar.gz"],
sha256 = "f9e7b9f42ae202cc2d2ce6d698ccb49a9f7f7ea572a78fd451696d03ef2ee116",
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/{}/rules_nodejs-{}.tar.gz".format(rules_nodejs_version, rules_nodejs_version)],
sha256 = rules_nodejs_sha256,
patches = [
# Work around for https://github.com/bazelbuild/rules_nodejs/issues/1565
"@com_github_digital_asset_daml//bazel_tools:rules_nodejs_npm_cli_path.patch",