From 42a17ac297ac377d30b3de3e8e92380823f0db59 Mon Sep 17 00:00:00 2001 From: Allan Oliveira Date: Thu, 6 Aug 2026 23:32:34 +0100 Subject: [PATCH] Fix apiVersionToFloat crashing on preview API versions with a sub-version apiVersion.replace('-preview', '') only strips the literal "-preview" substring, leaving a dangling ".N" suffix for versions like "7.1-preview.1" (becomes "7.1.1"), which float() can't parse. Split on "-preview" instead and keep only the part before it, so any preview sub-version is dropped along with the marker. Fixes #946, #1454 --- azure-devops/azext_devops/dev/team/invoke.py | 2 +- .../tests/latest/team/test_invoke.py | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 azure-devops/azext_devops/tests/latest/team/test_invoke.py diff --git a/azure-devops/azext_devops/dev/team/invoke.py b/azure-devops/azext_devops/dev/team/invoke.py index 9b4cad38..7f095bdb 100644 --- a/azure-devops/azext_devops/dev/team/invoke.py +++ b/azure-devops/azext_devops/dev/team/invoke.py @@ -135,7 +135,7 @@ def invoke(area=None, resource=None, def apiVersionToFloat(apiVersion): - apiVersion = apiVersion.replace('-preview', '') + apiVersion = apiVersion.split('-preview')[0] return float(apiVersion) diff --git a/azure-devops/azext_devops/tests/latest/team/test_invoke.py b/azure-devops/azext_devops/tests/latest/team/test_invoke.py new file mode 100644 index 00000000..ae059da4 --- /dev/null +++ b/azure-devops/azext_devops/tests/latest/team/test_invoke.py @@ -0,0 +1,24 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +import unittest + +from azext_devops.dev.team.invoke import apiVersionToFloat + + +class TestApiVersionToFloat(unittest.TestCase): + + def test_plain_version(self): + self.assertEqual(apiVersionToFloat('7.1'), 7.1) + + def test_preview_version_without_subversion(self): + self.assertEqual(apiVersionToFloat('7.1-preview'), 7.1) + + def test_preview_version_with_subversion(self): + # e.g. "7.1-preview.1" - the sub-version suffix used to break float() conversion + self.assertEqual(apiVersionToFloat('7.1-preview.1'), 7.1) + + def test_preview_version_with_multi_digit_subversion(self): + self.assertEqual(apiVersionToFloat('5.0-preview.10'), 5.0)