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
4 changes: 4 additions & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

Release History
===============
0.2.1
++++++
* `azdev extension cal-next-version`: Adjust `minor` or `patch` update for previous preview versioning pattern.

0.2.0
+++++
* `azdev generated-breaking-change-report`: Support multi-line upcoming breaking change announcement
Expand Down
2 changes: 1 addition & 1 deletion azdev/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
# license information.
# -----------------------------------------------------------------------------

__VERSION__ = '0.2.0'
__VERSION__ = '0.2.1'
2 changes: 1 addition & 1 deletion azdev/operations/extensions/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ def publish_extensions(extensions, storage_account, storage_account_key, storage

def cal_next_version(base_meta_file, diff_meta_file, current_version, is_preview=None, is_experimental=None,
next_version_pre_tag=None, next_version_segment_tag=None):
with open(base_meta_file, "r") as g:
with open(diff_meta_file, "r") as g:
command_tree = json.load(g)
module_name = command_tree["module_name"]
version_op = VersionUpgradeMod(module_name, current_version, is_preview, is_experimental,
Expand Down
36 changes: 32 additions & 4 deletions azdev/operations/extensions/version_upgrade.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ def __init__(self, module_name, current_version, is_preview, is_experimental,
self.is_preview = bool(is_preview or is_experimental or (self.version.pre and self.version.pre[0] in ["a", "b"]))
self.has_preview_tag = is_preview
self.has_exp_tag = is_experimental
# x.x.x + (isPreview/isExperimental: True)
# the versioning update rule for previous deprecated preview pattern is as following:
# 1) 1.0.4 + isPreview: true -> stable: increase minor num to 1.1.0 + no preview tag
# 2) 1.0.4 + isPreview: true -> preview: increase patch num to 1.0.5b1 + preview tag
self.is_preview_deprecate_pattern = bool((is_preview or is_experimental) and not self.version.pre)
self.version_raw = current_version
self.norm_versions()
self.base_meta_file = meta_diff_before
Expand Down Expand Up @@ -124,7 +129,12 @@ def update_next_version(self):
return

if self.next_version_pre_tag == VERSION_STABLE_TAG and self.is_preview:
# 2.0.0bN -> stable > 2.0.0
# normal case: 2.0.0bN -> stable > 2.0.0
if self.is_preview_deprecate_pattern:
# old preview tag pattern
# 1.0.5 + isPreview: true -> stable -> 1.1.0
self.next_version.minor = self.version.minor + 1
self.next_version.patch = 0
return

if self.next_version_segment_tag:
Expand Down Expand Up @@ -157,7 +167,13 @@ def update_version_from_differs(self):
if found_break:
if self.next_version_pre_tag == VERSION_PREVIEW_TAG and self.is_preview and self.last_stable_major < self.version.major:
# refer to rule: https://github.com/Azure/azure-cli/blob/release/doc/extensions/versioning_guidelines.md#notes-1
self.next_version.pre_num = self.version.pre[1] + 1
if self.is_preview_deprecate_pattern:
# 1.1.0 + isPreview:True -> preview -> 1.1.1b1
# if 1.1.0b2, then version cannot upgrade in core
self.next_version.patch = self.version.micro + 1
self.next_version.pre_num = 1
else:
self.next_version.pre_num = self.version.pre[1] + 1
else:
self.next_version.major = self.version.major + 1
self.next_version.minor = 0
Expand All @@ -166,13 +182,25 @@ def update_version_from_differs(self):
self.next_version.pre_num = 1
elif len(self.diffs) > 0:
if self.is_preview:
self.next_version.pre_num = self.version.pre[1] + 1
if self.is_preview_deprecate_pattern:
# 1.1.0 + isPreview:True -> preview -> 1.1.1b1
# if 1.1.0b2, then version cannot upgrade in core
self.next_version.patch = self.version.micro + 1
self.next_version.pre_num = 1
else:
self.next_version.pre_num = self.version.pre[1] + 1
else:
self.next_version.minor = self.version.minor + 1
self.next_version.patch = 0
else:
if self.is_preview:
self.next_version.pre_num = self.version.pre[1] + 1
if self.is_preview_deprecate_pattern:
# 1.1.0 + isPreview:True -> preview -> 1.1.1b1
# if 1.1.0b2, then version cannot upgrade in core
self.next_version.patch = self.version.micro + 1
self.next_version.pre_num = 1
else:
self.next_version.pre_num = self.version.pre[1] + 1
else:
self.next_version.patch = self.version.micro + 1

Expand Down
43 changes: 43 additions & 0 deletions azdev/operations/tests/test_extension_versioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,46 @@ def config_last_stable_version(_):
self.assertEqual("1.0.0b4", version_test.get("version"), "Version cal error")
self.assertEqual(False, version_test.get("is_stable"), "Version tag error")
self.assertEqual("add", version_test.get("preview_tag", False), "Version tag error")

@patch.object(VersionUpgradeMod, 'find_max_version')
def test_version_upgrade_pure_preview_pattern_to_preview(self, find_max_version):
# preview version update while no stable version before or stable version already lower in major
def config_last_stable_version(_):
return False, -1

find_max_version.side_effect = config_last_stable_version
version_test = cal_next_version(base_meta_file=os.path.join(TEST_DIR, "jsons",
"az_costmanagement_meta_before.json"),
diff_meta_file=os.path.join(TEST_DIR, "jsons",
"az_costmanagement_meta_after.json"),
current_version="1.0.0", is_preview=True)
self.assertEqual("1.0.1b1", version_test.get("version"), "Version cal error")
self.assertEqual(False, version_test.get("is_stable"), "Version tag error")
self.assertEqual(False, version_test.get("preview_tag", False), "Version tag error")

@patch.object(VersionUpgradeMod, 'find_max_version')
def test_version_upgrade_pure_preview_pattern_to_stable(self, find_max_version):
# preview version update while no stable version before or stable version already lower in major
def config_last_stable_version(_):
return False, -1

find_max_version.side_effect = config_last_stable_version
version_test = cal_next_version(base_meta_file=os.path.join(TEST_DIR, "jsons",
"az_costmanagement_meta_before.json"),
diff_meta_file=os.path.join(TEST_DIR, "jsons",
"az_costmanagement_meta_after.json"),
current_version="1.0.4", is_preview=True, next_version_pre_tag="stable")
self.assertEqual("1.1.0", version_test.get("version"), "Version cal error")
self.assertEqual(True, version_test.get("is_stable"), "Version tag error")
self.assertEqual("remove", version_test.get("preview_tag", False), "Version tag error")

def test_version_upgrade_pure_exp_pattern_to_stable(self):
version_test = cal_next_version(base_meta_file=os.path.join(TEST_DIR, "jsons",
"az_costmanagement_meta_before.json"),
diff_meta_file=os.path.join(TEST_DIR, "jsons",
"az_costmanagement_meta_after.json"),
current_version="1.0.4", is_experimental=True, next_version_pre_tag="stable")
self.assertEqual("1.1.0", version_test.get("version"), "Version cal error")
self.assertEqual(True, version_test.get("is_stable"), "Version tag error")
self.assertEqual(False, version_test.get("preview_tag", False), "Version tag error")
self.assertEqual("remove", version_test.get("exp_tag", False), "Version tag error")