Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions sdk/daml-lf/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ genrule(
srcs = ["@maven//:com_daml_daml_lf_language_2_13"],
outs = ["daml-lf-versions-generated.json"],
cmd = """
# Extract the specific file by its name inside the zip
$(location @bazel_tools//tools/zip:zipper) x $(SRCS) -d $(RULEDIR) daml-lf-versions.json
# Extract the dto file from the jar
$(location @bazel_tools//tools/zip:zipper) x $(SRCS) -d $(RULEDIR) daml-lf-versions-dto.json
# Rename it to match our declared output
mv $(RULEDIR)/daml-lf-versions.json $@
mv $(RULEDIR)/daml-lf-versions-dto.json $@
""",
tools = ["@bazel_tools//tools/zip:zipper"],
visibility = ["//visibility:private"],
Expand Down
252 changes: 224 additions & 28 deletions sdk/daml-lf/daml-lf-versions.json
Original file line number Diff line number Diff line change
@@ -1,45 +1,241 @@
{
"explicitVersions" : [
"2.3-rc1",
"2.1",
"2.dev",
"2.3-rc1",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we have 2.3-rc1 twice in this list? I see we still repeat it below

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its a consequence of defining both "2.3" and "2.3.1" canton side. It gets deduplicated to account for this

"2.2"
{
"major" : 2,
"minor" : {
"Staging" : {
"version" : 3,
"revision" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Dev" : {

}
}
},
{
"major" : 2,
"minor" : {
"Staging" : {
"version" : 3,
"revision" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 2
}
}
}
],
"namedVersions" : {
"defaultLfVersion" : "2.2",
"devLfVersion" : "2.dev",
"latestStableLfVersion" : "2.2",
"stagingLfVersion" : "2.3-rc1"
"defaultLfVersion" : {
"major" : 2,
"minor" : {
"Stable" : {
"version" : 2
}
}
},
"devLfVersion" : {
"major" : 2,
"minor" : {
"Dev" : {

}
}
},
"latestStableLfVersion" : {
"major" : 2,
"minor" : {
"Stable" : {
"version" : 2
}
}
},
"stagingLfVersion" : {
"major" : 2,
"minor" : {
"Staging" : {
"version" : 3,
"revision" : 1
}
}
}
},
"versionLists" : {
"compilerOutputLfVersions" : [
"2.1",
"2.2",
"2.3-rc1",
"2.dev"
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 2
}
}
},
{
"major" : 2,
"minor" : {
"Staging" : {
"version" : 3,
"revision" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Dev" : {

}
}
}
],
"allLfVersions" : [
"2.1",
"2.2",
"2.3-rc1",
"2.dev"
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 2
}
}
},
{
"major" : 2,
"minor" : {
"Staging" : {
"version" : 3,
"revision" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Dev" : {

}
}
}
],
"stableLfVersions" : [
"2.1",
"2.2"
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 2
}
}
}
],
"compilerInputLfVersions" : [
"2.1",
"2.2",
"2.3-rc1",
"2.dev"
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 2
}
}
},
{
"major" : 2,
"minor" : {
"Staging" : {
"version" : 3,
"revision" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Dev" : {

}
}
}
],
"compilerLfVersions" : [
"2.1",
"2.2",
"2.3-rc1",
"2.dev"
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Stable" : {
"version" : 2
}
}
},
{
"major" : 2,
"minor" : {
"Staging" : {
"version" : 3,
"revision" : 1
}
}
},
{
"major" : 2,
"minor" : {
"Dev" : {

}
}
}
]
}
}
}
62 changes: 32 additions & 30 deletions sdk/daml-lf/daml-lf.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -14,33 +14,30 @@ def _camel_to_upper_snake(text):
result += char
return result.upper()

def _parse_version(v_str):
def _parse_version(v):
"""
Parses a version string according to specific rules:
- "2.dev" -> status="dev", minor="dev"
- "2.n-rcm" -> status="staging", minor="n", revision="m"
- "2.n" -> status="stable", minor="n"
Parses a structured version dict from the JSON:
- {"major": 2, "minor": {"Dev": {}}} -> status="dev"
- {"major": 2, "minor": {"Staging": {"version": 3, "revision": 1}}} -> status="staging"
- {"major": 2, "minor": {"Stable": {"version": 1}}} -> status="stable"
"""
parts = v_str.split(".")
major = parts[0]
remainder = parts[1] # "dev", "1", "3-rc1"
major = str(v["major"])
minor_map = v["minor"]

if "dev" in remainder:
if "Dev" in minor_map:
return struct(
dotted = v_str,
mangled_java = "{}_{}".format(major, "dev"),
mangled_damlc = "{}{}".format(major, "dev"),
dotted = "{}.dev".format(major),
mangled_java = "{}_dev".format(major),
mangled_damlc = "{}dev".format(major),
major = major,
minor = "dev",
status = "dev",
)

if "-rc" in remainder:
# split "3-rc1" into "3" and "1"
rc_parts = remainder.split("-rc")
minor = rc_parts[0]
revision = rc_parts[1]

elif "Staging" in minor_map:
info = minor_map["Staging"]
minor = str(info["version"])
revision = str(info["revision"])
return struct(
dotted = "{}.{}-staging".format(major, minor),
mangled_java = "{}_{}_staging".format(major, minor),
Expand All @@ -51,14 +48,18 @@ def _parse_version(v_str):
status = "staging",
)

return struct(
dotted = v_str,
mangled_java = "{}_{}".format(major, remainder),
mangled_damlc = "{}{}".format(major, remainder),
major = major,
minor = remainder,
status = "stable",
)
elif "Stable" in minor_map:
minor = str(minor_map["Stable"]["version"])
return struct(
dotted = "{}.{}".format(major, minor),
mangled_java = "{}_{}".format(major, minor),
mangled_damlc = "{}{}".format(major, minor),
major = major,
minor = minor,
status = "stable",
)

fail("Unknown minor version format: {}".format(minor_map))

def _build_versions_struct():
"""
Expand All @@ -67,20 +68,21 @@ def _build_versions_struct():
"""
fields = {}

for val in sorted(DATA["explicitVersions"]):
# explicitVersions is now a list of dicts; deduplicate by mangled_java key
for val in DATA["explicitVersions"]:
version_obj = _parse_version(val)
field_name = version_obj.mangled_java
fields[field_name] = version_obj

for key, val in sorted(DATA["namedVersions"].items()):
for key, val in DATA["namedVersions"].items():
field_name = _camel_to_upper_snake(key)
version_obj = _parse_version(val)
fields[field_name] = version_obj

for key, val_list in sorted(DATA["versionLists"].items()):
for key, val_list in DATA["versionLists"].items():
field_name = _camel_to_upper_snake(key)

# Parse every string in the list into a struct
# Parse every dict in the list into a struct
fields[field_name] = [_parse_version(v) for v in val_list]

return struct(**fields)
Expand Down
Loading
Loading