diff --git a/install.sh b/install.sh index 6cda59f8b..578fe1538 100755 --- a/install.sh +++ b/install.sh @@ -365,18 +365,6 @@ download_release_asset() { return 0 fi - # GitHub normalizes `~` to `.` in release asset names, while checksum files - # can still record package filenames with `~dev` for correct version ordering. - # Download the normalized asset but verify it against the checksum entry for - # the original package filename. - _normalized="$(printf '%s' "$_filename" | tr '~' '.')" - if [ "$_normalized" != "$_filename" ]; then - if download "${GITHUB_URL}/releases/download/${_tag}/${_normalized}" "$_output"; then - info "using GitHub-normalized asset name ${_normalized}" - return 0 - fi - fi - return 1 } diff --git a/python/release_tooling_test.py b/python/release_tooling_test.py index ccc97453f..60401f10a 100644 --- a/python/release_tooling_test.py +++ b/python/release_tooling_test.py @@ -36,12 +36,12 @@ def test_exact_tag_versions_are_stable_release_versions() -> None: def test_dev_versions_share_one_build_identity() -> None: versions = release._versions_from_parts((0, 0, 37), 108, "152d05940", "v0.0.37") - assert versions.python == "0.0.38.dev108+g152d05940" - assert versions.cargo == "0.0.38-dev.108+g152d05940" - assert versions.docker == "0.0.38-dev.108-g152d05940" - assert versions.deb == "0.0.38~dev.108+g152d05940-1" - assert versions.rpm_version == "0.0.38" - assert versions.rpm_release == "0.dev.108.g152d05940" + assert versions.python == "0.0.37.post108+g152d05940" + assert versions.cargo == "0.0.37+post.108.g152d05940" + assert versions.docker == "0.0.37-post.108.g152d05940" + assert versions.deb == "0.0.37+post.108.g152d05940-1" + assert versions.rpm_version == "0.0.37" + assert versions.rpm_release == "2.dev.108.g152d05940" def test_semver_tag_parser_excludes_vm_tags() -> None: diff --git a/tasks/scripts/release.py b/tasks/scripts/release.py index f00bd19d3..c7427ae0e 100644 --- a/tasks/scripts/release.py +++ b/tasks/scripts/release.py @@ -97,14 +97,18 @@ def _versions_from_parts( rpm_version = python_version rpm_release = "1" else: - next_version = _format_semver(_next_patch(base_version)) - python_version = f"{next_version}.dev{git_distance}+g{git_sha}" - rpm_version = next_version - rpm_release = f"0.dev.{git_distance}.g{git_sha}" - - # Convert PEP 440 to a SemVer-ish string for Cargo: - # 0.1.0.dev3+gabcdef -> 0.1.0-dev.3+gabcdef - cargo_version = re.sub(r"\.dev(\d+)", r"-dev.\1", python_version) + latest_version = _format_semver(base_version) + python_version = f"{latest_version}.post{git_distance}+g{git_sha}" + rpm_version = latest_version + rpm_release = f"2.dev.{git_distance}.g{git_sha}" + + # Convert PEP 440 to a SemVer-ish string for Cargo. Dev builds are + # post-release package-manager builds, represented as SemVer metadata so + # Cargo accepts the workspace version: + # 0.1.0.post3+gabcdef -> 0.1.0+post.3.gabcdef + cargo_version = re.sub( + r"\.post(\d+)\+g([0-9a-f]+)$", r"+post.\1.g\2", python_version + ) # Docker tags can't contain '+'. docker_version = cargo_version.replace("+", "-") @@ -114,10 +118,10 @@ def _versions_from_parts( if len(snap_version) > 32: raise ValueError(f"snap version must be at most 32 characters: {snap_version}") - # Debian versions use '~' so prereleases sort before the eventual release. + # Debian post-release versions use '+' so dev builds sort after the + # matching stable package. deb_version = cargo_version deb_version = deb_version[1:] if deb_version.startswith("v") else deb_version - deb_version = deb_version.replace("-dev.", "~dev.", 1) deb_version = f"{deb_version}-1" return Versions(