Skip to content

Commit 4e944c2

Browse files
committed
fix(release): make dev packages post-stable
Dev releases now use post-stable package versions in tasks/scripts/release.py:99: Python: 0.0.37.post108+g152d05940 Cargo: 0.0.37+post.108.g152d05940 Debian: 0.0.37+post.108.g152d05940-1 RPM: Version 0.0.37, Release 2.dev.108.g152d05940 That makes dev sort after the latest stable 0.0.37-1, while still sorting below the next stable 0.0.38-1. This allows us to do an upgrade installation from a stable release to a dev release, but then still be able to upgrade that dev release to the next stable release. Signed-off-by: Kris Hicks <khicks@nvidia.com>
1 parent d64542f commit 4e944c2

2 files changed

Lines changed: 20 additions & 16 deletions

File tree

python/release_tooling_test.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ def test_exact_tag_versions_are_stable_release_versions() -> None:
3636
def test_dev_versions_share_one_build_identity() -> None:
3737
versions = release._versions_from_parts((0, 0, 37), 108, "152d05940", "v0.0.37")
3838

39-
assert versions.python == "0.0.38.dev108+g152d05940"
40-
assert versions.cargo == "0.0.38-dev.108+g152d05940"
41-
assert versions.docker == "0.0.38-dev.108-g152d05940"
42-
assert versions.deb == "0.0.38~dev.108+g152d05940-1"
43-
assert versions.rpm_version == "0.0.38"
44-
assert versions.rpm_release == "0.dev.108.g152d05940"
39+
assert versions.python == "0.0.37.post108+g152d05940"
40+
assert versions.cargo == "0.0.37+post.108.g152d05940"
41+
assert versions.docker == "0.0.37-post.108.g152d05940"
42+
assert versions.deb == "0.0.37+post.108.g152d05940-1"
43+
assert versions.rpm_version == "0.0.37"
44+
assert versions.rpm_release == "2.dev.108.g152d05940"
4545

4646

4747
def test_semver_tag_parser_excludes_vm_tags() -> None:

tasks/scripts/release.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,18 @@ def _versions_from_parts(
9797
rpm_version = python_version
9898
rpm_release = "1"
9999
else:
100-
next_version = _format_semver(_next_patch(base_version))
101-
python_version = f"{next_version}.dev{git_distance}+g{git_sha}"
102-
rpm_version = next_version
103-
rpm_release = f"0.dev.{git_distance}.g{git_sha}"
104-
105-
# Convert PEP 440 to a SemVer-ish string for Cargo:
106-
# 0.1.0.dev3+gabcdef -> 0.1.0-dev.3+gabcdef
107-
cargo_version = re.sub(r"\.dev(\d+)", r"-dev.\1", python_version)
100+
latest_version = _format_semver(base_version)
101+
python_version = f"{latest_version}.post{git_distance}+g{git_sha}"
102+
rpm_version = latest_version
103+
rpm_release = f"2.dev.{git_distance}.g{git_sha}"
104+
105+
# Convert PEP 440 to a SemVer-ish string for Cargo. Dev builds are
106+
# post-release package-manager builds, represented as SemVer metadata so
107+
# Cargo accepts the workspace version:
108+
# 0.1.0.post3+gabcdef -> 0.1.0+post.3.gabcdef
109+
cargo_version = re.sub(
110+
r"\.post(\d+)\+g([0-9a-f]+)$", r"+post.\1.g\2", python_version
111+
)
108112

109113
# Docker tags can't contain '+'.
110114
docker_version = cargo_version.replace("+", "-")
@@ -114,10 +118,10 @@ def _versions_from_parts(
114118
if len(snap_version) > 32:
115119
raise ValueError(f"snap version must be at most 32 characters: {snap_version}")
116120

117-
# Debian versions use '~' so prereleases sort before the eventual release.
121+
# Debian post-release versions use '+' so dev builds sort after the
122+
# matching stable package.
118123
deb_version = cargo_version
119124
deb_version = deb_version[1:] if deb_version.startswith("v") else deb_version
120-
deb_version = deb_version.replace("-dev.", "~dev.", 1)
121125
deb_version = f"{deb_version}-1"
122126

123127
return Versions(

0 commit comments

Comments
 (0)