Skip to content

Commit c0629a7

Browse files
authored
Upgrade minor for next stable and patch for next preview version if last version is deprecated preview version (#516)
* adjust version num for previous preview version
1 parent 999cfff commit c0629a7

File tree

5 files changed

+81
-6
lines changed

5 files changed

+81
-6
lines changed

HISTORY.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
33
Release History
44
===============
5+
0.2.1
6+
++++++
7+
* `azdev extension cal-next-version`: Adjust `minor` or `patch` update for previous preview versioning pattern.
8+
59
0.2.0
610
+++++
711
* `azdev generated-breaking-change-report`: Support multi-line upcoming breaking change announcement

azdev/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
# license information.
55
# -----------------------------------------------------------------------------
66

7-
__VERSION__ = '0.2.0'
7+
__VERSION__ = '0.2.1'

azdev/operations/extensions/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ def publish_extensions(extensions, storage_account, storage_account_key, storage
363363

364364
def cal_next_version(base_meta_file, diff_meta_file, current_version, is_preview=None, is_experimental=None,
365365
next_version_pre_tag=None, next_version_segment_tag=None):
366-
with open(base_meta_file, "r") as g:
366+
with open(diff_meta_file, "r") as g:
367367
command_tree = json.load(g)
368368
module_name = command_tree["module_name"]
369369
version_op = VersionUpgradeMod(module_name, current_version, is_preview, is_experimental,

azdev/operations/extensions/version_upgrade.py

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ def __init__(self, module_name, current_version, is_preview, is_experimental,
6060
self.is_preview = bool(is_preview or is_experimental or (self.version.pre and self.version.pre[0] in ["a", "b"]))
6161
self.has_preview_tag = is_preview
6262
self.has_exp_tag = is_experimental
63+
# x.x.x + (isPreview/isExperimental: True)
64+
# the versioning update rule for previous deprecated preview pattern is as following:
65+
# 1) 1.0.4 + isPreview: true -> stable: increase minor num to 1.1.0 + no preview tag
66+
# 2) 1.0.4 + isPreview: true -> preview: increase patch num to 1.0.5b1 + preview tag
67+
self.is_preview_deprecate_pattern = bool((is_preview or is_experimental) and not self.version.pre)
6368
self.version_raw = current_version
6469
self.norm_versions()
6570
self.base_meta_file = meta_diff_before
@@ -124,7 +129,12 @@ def update_next_version(self):
124129
return
125130

126131
if self.next_version_pre_tag == VERSION_STABLE_TAG and self.is_preview:
127-
# 2.0.0bN -> stable > 2.0.0
132+
# normal case: 2.0.0bN -> stable > 2.0.0
133+
if self.is_preview_deprecate_pattern:
134+
# old preview tag pattern
135+
# 1.0.5 + isPreview: true -> stable -> 1.1.0
136+
self.next_version.minor = self.version.minor + 1
137+
self.next_version.patch = 0
128138
return
129139

130140
if self.next_version_segment_tag:
@@ -157,7 +167,13 @@ def update_version_from_differs(self):
157167
if found_break:
158168
if self.next_version_pre_tag == VERSION_PREVIEW_TAG and self.is_preview and self.last_stable_major < self.version.major:
159169
# refer to rule: https://github.com/Azure/azure-cli/blob/release/doc/extensions/versioning_guidelines.md#notes-1
160-
self.next_version.pre_num = self.version.pre[1] + 1
170+
if self.is_preview_deprecate_pattern:
171+
# 1.1.0 + isPreview:True -> preview -> 1.1.1b1
172+
# if 1.1.0b2, then version cannot upgrade in core
173+
self.next_version.patch = self.version.micro + 1
174+
self.next_version.pre_num = 1
175+
else:
176+
self.next_version.pre_num = self.version.pre[1] + 1
161177
else:
162178
self.next_version.major = self.version.major + 1
163179
self.next_version.minor = 0
@@ -166,13 +182,25 @@ def update_version_from_differs(self):
166182
self.next_version.pre_num = 1
167183
elif len(self.diffs) > 0:
168184
if self.is_preview:
169-
self.next_version.pre_num = self.version.pre[1] + 1
185+
if self.is_preview_deprecate_pattern:
186+
# 1.1.0 + isPreview:True -> preview -> 1.1.1b1
187+
# if 1.1.0b2, then version cannot upgrade in core
188+
self.next_version.patch = self.version.micro + 1
189+
self.next_version.pre_num = 1
190+
else:
191+
self.next_version.pre_num = self.version.pre[1] + 1
170192
else:
171193
self.next_version.minor = self.version.minor + 1
172194
self.next_version.patch = 0
173195
else:
174196
if self.is_preview:
175-
self.next_version.pre_num = self.version.pre[1] + 1
197+
if self.is_preview_deprecate_pattern:
198+
# 1.1.0 + isPreview:True -> preview -> 1.1.1b1
199+
# if 1.1.0b2, then version cannot upgrade in core
200+
self.next_version.patch = self.version.micro + 1
201+
self.next_version.pre_num = 1
202+
else:
203+
self.next_version.pre_num = self.version.pre[1] + 1
176204
else:
177205
self.next_version.patch = self.version.micro + 1
178206

azdev/operations/tests/test_extension_versioning.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,46 @@ def config_last_stable_version(_):
146146
self.assertEqual("1.0.0b4", version_test.get("version"), "Version cal error")
147147
self.assertEqual(False, version_test.get("is_stable"), "Version tag error")
148148
self.assertEqual("add", version_test.get("preview_tag", False), "Version tag error")
149+
150+
@patch.object(VersionUpgradeMod, 'find_max_version')
151+
def test_version_upgrade_pure_preview_pattern_to_preview(self, find_max_version):
152+
# preview version update while no stable version before or stable version already lower in major
153+
def config_last_stable_version(_):
154+
return False, -1
155+
156+
find_max_version.side_effect = config_last_stable_version
157+
version_test = cal_next_version(base_meta_file=os.path.join(TEST_DIR, "jsons",
158+
"az_costmanagement_meta_before.json"),
159+
diff_meta_file=os.path.join(TEST_DIR, "jsons",
160+
"az_costmanagement_meta_after.json"),
161+
current_version="1.0.0", is_preview=True)
162+
self.assertEqual("1.0.1b1", version_test.get("version"), "Version cal error")
163+
self.assertEqual(False, version_test.get("is_stable"), "Version tag error")
164+
self.assertEqual(False, version_test.get("preview_tag", False), "Version tag error")
165+
166+
@patch.object(VersionUpgradeMod, 'find_max_version')
167+
def test_version_upgrade_pure_preview_pattern_to_stable(self, find_max_version):
168+
# preview version update while no stable version before or stable version already lower in major
169+
def config_last_stable_version(_):
170+
return False, -1
171+
172+
find_max_version.side_effect = config_last_stable_version
173+
version_test = cal_next_version(base_meta_file=os.path.join(TEST_DIR, "jsons",
174+
"az_costmanagement_meta_before.json"),
175+
diff_meta_file=os.path.join(TEST_DIR, "jsons",
176+
"az_costmanagement_meta_after.json"),
177+
current_version="1.0.4", is_preview=True, next_version_pre_tag="stable")
178+
self.assertEqual("1.1.0", version_test.get("version"), "Version cal error")
179+
self.assertEqual(True, version_test.get("is_stable"), "Version tag error")
180+
self.assertEqual("remove", version_test.get("preview_tag", False), "Version tag error")
181+
182+
def test_version_upgrade_pure_exp_pattern_to_stable(self):
183+
version_test = cal_next_version(base_meta_file=os.path.join(TEST_DIR, "jsons",
184+
"az_costmanagement_meta_before.json"),
185+
diff_meta_file=os.path.join(TEST_DIR, "jsons",
186+
"az_costmanagement_meta_after.json"),
187+
current_version="1.0.4", is_experimental=True, next_version_pre_tag="stable")
188+
self.assertEqual("1.1.0", version_test.get("version"), "Version cal error")
189+
self.assertEqual(True, version_test.get("is_stable"), "Version tag error")
190+
self.assertEqual(False, version_test.get("preview_tag", False), "Version tag error")
191+
self.assertEqual("remove", version_test.get("exp_tag", False), "Version tag error")

0 commit comments

Comments
 (0)