Skip to content

Commit

Permalink
check LF version do not decrease with upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
remyhaemmerle-da committed May 23, 2024
1 parent b06a9e8 commit a78534a
Show file tree
Hide file tree
Showing 3 changed files with 218 additions and 108 deletions.
8 changes: 7 additions & 1 deletion sdk/daml-lf/validation/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,20 @@ da_scala_library(
scaladoc = False,
visibility = ["//visibility:public"],
deps = [
"//:sdk-version-scala-lib",
"//bazel_tools/runfiles:scala_runfiles",
"//canton:community_admin-api",
"//canton:community_ledger_ledger-common",
"//canton:community_util-logging",
"//canton:ledger_api_proto_scala",
"//daml-lf/archive:daml_lf_archive_reader",
"//daml-lf/archive:daml_lf_dev_archive_proto_java",
"//daml-lf/archive/encoder",
"//daml-lf/data",
"//daml-lf/encoder",
"//daml-lf/language",
"//daml-lf/parser",
"//libs-scala/crypto",
"//libs-scala/ledger-resources",
"//libs-scala/ports",
"//libs-scala/resources",
Expand All @@ -97,7 +104,6 @@ da_scala_test_suite(
srcs = glob(
["src/test/**/*.scala"],
exclude = [
"src/test/**/*SpecUtil.scala",
"src/test/**/*SpecUtil.scala",
"src/test/**/upgrade/*",
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.daml.lf.language.Ast
import scala.util.{Try, Success, Failure}
import com.daml.lf.validation.AlphaEquiv
import com.daml.lf.data.ImmArray
import com.daml.lf.language.LanguageVersion

case class Upgrading[A](past: A, present: A) {
def map[B](f: A => B): Upgrading[B] = Upgrading(f(past), f(present))
Expand Down Expand Up @@ -169,6 +170,14 @@ object UpgradeError {
override def message: String =
s"Implementation of interface $iface by template $tpl appears in package that is being upgraded, but does not appear in this package."
}

final case class DecreasingLfVersion(
pastVersion: LanguageVersion,
presentVersion: LanguageVersion,
) extends Error {
override def message: String =
s"The upgraded package uses an older LF version (${presentVersion.pretty} < ${pastVersion.pretty})"
}
}

sealed abstract class UpgradedRecordOrigin
Expand Down Expand Up @@ -291,6 +300,16 @@ object TypecheckUpgrades {
}
}

private def checkLfVersions(
arg: Upgrading[LanguageVersion]
): Try[Unit] = {
import Ordering.Implicits._
if (arg.past > arg.present)
fail(UpgradeError.DecreasingLfVersion(arg.past, arg.present))
else
Success(())
}

private def tryAll[A, B](t: Iterable[A], f: A => Try[B]): Try[Seq[B]] =
Try(t.map(f(_).get).toSeq)

Expand All @@ -316,6 +335,7 @@ case class TypecheckUpgrades(packagesAndIds: Upgrading[(Ref.PackageId, Ast.Packa

private def check(): Try[Unit] = {
for {
_ <- checkLfVersions(_package.map(_.languageVersion))
(upgradedModules, newModules @ _) <-
checkDeleted(
_package.map(_.modules),
Expand Down

0 comments on commit a78534a

Please sign in to comment.