From f39b7a5d3f2f1e8711d700991a3df4bf79f04fb0 Mon Sep 17 00:00:00 2001 From: Leonid Shlyapnikov Date: Thu, 18 Apr 2019 09:49:53 -0400 Subject: [PATCH] Update Scala Codegen SBT Example (#558) * Update scala codegen sbt example to use the latest codegen binaries Use DAR to generate Scala code, no reason to unzip DALFs. * Add support for `DA.sdkVersion` system property. To override the default sdkVersion: ``` > sbt -DDA.sdkVersion=100.12.6 compile ``` * Simplify the way examples run --- .../scala/codegen-sbt-example/README.md | 4 ++-- .../scala/codegen-sbt-example/build.sbt | 16 ++++------------ .../codegen-sbt-example/project/Versions.scala | 7 ++++++- .../com/digitalasset/example/ExampleMain.scala | 10 +++------- 4 files changed, 15 insertions(+), 22 deletions(-) diff --git a/language-support/scala/codegen-sbt-example/README.md b/language-support/scala/codegen-sbt-example/README.md index fe55394759..55290612bc 100644 --- a/language-support/scala/codegen-sbt-example/README.md +++ b/language-support/scala/codegen-sbt-example/README.md @@ -1,5 +1,5 @@ # Mock scala/codegen example (does not send any commands just prints them to STD OUT) -$ sbt "mock-example/runMain com.digitalasset.example.ExampleMain" +$ sbt -DDA.sdkVersion=100.12.6 mock-example/run # Sandbox scala/codegen example (sends commands to sandbox and receives transactions) -$ sbt "sandbox-example/runMain com.digitalasset.example.ExampleMain ./scala-codegen/target/repository/daml-codegen/Main.dar" \ No newline at end of file +$ sbt -DDA.sdkVersion=100.12.6 sandbox-example/run diff --git a/language-support/scala/codegen-sbt-example/build.sbt b/language-support/scala/codegen-sbt-example/build.sbt index 28a37eb0d7..432648157b 100644 --- a/language-support/scala/codegen-sbt-example/build.sbt +++ b/language-support/scala/codegen-sbt-example/build.sbt @@ -82,7 +82,7 @@ lazy val commonSettings = Seq( lazy val sandboxDependencies = Seq( "com.daml.scala" %% "bindings-akka" % sdkVersion, - "com.digitalasset.platform" % "sandbox" % sdkVersion, + "com.digitalasset.platform" %% "sandbox" % sdkVersion, ) lazy val codeGenDependencies = Seq( @@ -145,23 +145,15 @@ def generateScalaFrom( // directory containing the dar is used as a work directory val outDir = darFile.getParentFile - // Unpack all dalf files in the dar. Note that there may be many ("fat dar"), but at least daml-prim.dalf - val dalfFiles = IO.unzip(darFile, outDir, new SimpleFilter(_ endsWith ".dalf")) - // use a FileFunction.cached on the dar - val cache = FileFunction.cached(cacheDir, FileInfo.hash) { theDalfs => - val mainDalf = theDalfs - .find(_.getName endsWith mainDalfName) - .getOrElse(sys.error(s"Main dalf file ($mainDalfName) not found in $theDalfs")) - val otherDalfs = theDalfs.filterNot(_ == mainDalf).toList - + val cache = FileFunction.cached(cacheDir, FileInfo.hash) { _ => if (srcManagedDir.exists) // purge output if exists IO.delete(srcManagedDir.listFiles) - CodeGen.generateCode(mainDalf, otherDalfs.map(_.toURI.toURL), packageName, srcManagedDir, Novel) + CodeGen.generateCode(List(darFile), packageName, srcManagedDir, Novel) (srcManagedDir ** "*.scala").get.toSet } - cache(dalfFiles) + cache(Set(darFile)) } // ##################################### end sbt-daml ############################## diff --git a/language-support/scala/codegen-sbt-example/project/Versions.scala b/language-support/scala/codegen-sbt-example/project/Versions.scala index a2d944f353..334e3e4361 100644 --- a/language-support/scala/codegen-sbt-example/project/Versions.scala +++ b/language-support/scala/codegen-sbt-example/project/Versions.scala @@ -2,10 +2,15 @@ // SPDX-License-Identifier: Apache-2.0 object Versions { - lazy val sdkVersion: String = "100.11.25" + val sdkVersion: String = sdkVersionFromSysProps().getOrElse("100.12.6") + + println(s"DA sdkVersion: $sdkVersion") lazy val detectedOs: String = sys.props("os.name") match { case "Mac OS X" => "osx" case _ => "linux" } + + private def sdkVersionFromSysProps(): Option[String] = + sys.props.get("DA.sdkVersion").map(_.toString) } diff --git a/language-support/scala/codegen-sbt-example/sandbox-example/src/main/scala/com/digitalasset/example/ExampleMain.scala b/language-support/scala/codegen-sbt-example/sandbox-example/src/main/scala/com/digitalasset/example/ExampleMain.scala index 04ce19ea4f..0f6f9ab083 100644 --- a/language-support/scala/codegen-sbt-example/sandbox-example/src/main/scala/com/digitalasset/example/ExampleMain.scala +++ b/language-support/scala/codegen-sbt-example/sandbox-example/src/main/scala/com/digitalasset/example/ExampleMain.scala @@ -40,20 +40,16 @@ import scala.concurrent.duration._ import scala.concurrent.{Await, ExecutionContext, ExecutionContextExecutor, Future} object ExampleMain extends App { - if (args.length == 0) - throw new IllegalArgumentException( - "Expected at least one DAR or DALF file passed as an argument") + + private val dar = new File("./scala-codegen/target/repository/daml-codegen/Main.dar") private val ledgerId = "codegen-sbt-example-with-sandbox" private val port: Int = findOpenPort().fold(e => throw new IllegalStateException(e), identity) - private def archives(fileNames: List[String]): List[File] = - toFiles(args.toList).fold(e => throw new IllegalStateException(e), identity) - private val serverConfig = SandboxConfig.default.copy( port = port, - damlPackageContainer = DamlPackageContainer(archives(args.toList)), + damlPackageContainer = DamlPackageContainer(List(dar)), timeProviderType = TimeProviderType.WallClock, ledgerIdMode = LedgerIdMode.HardCoded(ledgerId), )