def tag_docker_latest_maybe(repo: mzbuild.Repository, tag: str) -> None: """If this tag is greater than all other tags, and is a release, tag it `latest`""" this_tag = semver.VersionInfo.parse(tag.lstrip("v")) if this_tag.prerelease is not None: return highest_release = next(t for t in git.get_version_tags() if t.prerelease is None) if this_tag == highest_release: tag_docker(repo, "latest")
def confirm_on_latest_rc() -> None: tags = git.get_version_tags() latest_tag = tags[0] if not git.is_ancestor(f"v{latest_tag}", "HEAD"): ancestor_tag = git.describe() click.confirm( f"You are about to create a release based on: {ancestor_tag}\n" f"Which is not the latest prerelease: v{latest_tag}\n" "Are you sure?", abort=True, )
def test_tags_returns_ordered_newest_first() -> None: with patch("materialize.spawn.capture") as mock: # NOTE(benesch): we mock out the return value of `git tag` because local # Git clones are missing tags weirdly often. I'm not sure why. # Regardless, it's better for unit tests not to depend on the local Git # repository state. mock.return_value = """0.2.0 0.3.2-rc1 0.3.1""" tags = git.get_version_tags(fetch=False) assert tags == [ Version.parse("0.3.2-rc1"), Version.parse("0.3.1"), Version.parse("0.2.0"), ]
def test_tags_returns_ordered_newest_first() -> None: tags = git.get_version_tags(fetch=False) # use a couple hard coded tags for extra sanity current_latest = VersionInfo.parse("0.3.1") older = VersionInfo.parse("0.2.0") seen_latest = False prev = tags[0] for tag in tags: # ensure that actual versions are correctly ordered assert (prev.major, prev.minor, prev.patch) >= ( tag.major, tag.minor, tag.patch, ) if prev.prerelease and tag.prerelease: assert prev.prerelease >= tag.prerelease prev = tag if tag == current_latest: seen_latest = True elif tag == older: assert seen_latest, "We should see newer tags first"