From 3ebc85d9aa7fdaed7a508ad3f3e4d5e113c32de9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 May 2026 08:47:37 +0000 Subject: [PATCH 1/2] Initial plan From 7416a06e6d471726e1d3ae81165d73a6739a851a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 28 May 2026 08:53:44 +0000 Subject: [PATCH 2/2] Fix experimental flag always showing False in az extension list-available - Add `is_experimental_from_extension_meta` helper function in extension/__init__.py - Update `list_available_extensions` in operations.py to use the helper instead of hardcoded False - Fix incorrect test expectation in test_extension.py (ml extension with azext.isExperimental: True should show experimental=True) Fixes #30756 --- src/azure-cli-core/azure/cli/core/extension/__init__.py | 4 ++++ src/azure-cli-core/azure/cli/core/extension/operations.py | 3 ++- src/azure-cli-core/azure/cli/core/tests/test_extension.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/extension/__init__.py b/src/azure-cli-core/azure/cli/core/extension/__init__.py index 53afb00ecd9..a6d8eb2234d 100644 --- a/src/azure-cli-core/azure/cli/core/extension/__init__.py +++ b/src/azure-cli-core/azure/cli/core/extension/__init__.py @@ -363,6 +363,10 @@ def is_preview_from_extension_meta(extension_meta): is_preview_from_semantic_version(extension_meta.get('version'))) +def is_experimental_from_extension_meta(extension_meta): + return bool(extension_meta.get(EXT_METADATA_ISEXPERIMENTAL, False)) + + def is_preview_from_semantic_version(version): """ pre = [a, b] -> preview diff --git a/src/azure-cli-core/azure/cli/core/extension/operations.py b/src/azure-cli-core/azure/cli/core/extension/operations.py index e20aed58b03..db79dbe07af 100644 --- a/src/azure-cli-core/azure/cli/core/extension/operations.py +++ b/src/azure-cli-core/azure/cli/core/extension/operations.py @@ -20,6 +20,7 @@ from azure.cli.core.util import CLIError, reload_module, rmtree_with_retry from azure.cli.core.extension import (extension_exists, build_extension_path, get_extensions, get_extension_modname, get_extension, ext_compat_with_cli, is_preview_from_extension_meta, + is_experimental_from_extension_meta, WheelExtension, DevExtension, ExtensionNotInstalledException, WHEEL_INFO_RE) from azure.cli.core.telemetry import set_extension_management_detail @@ -466,7 +467,7 @@ def list_available_extensions(index_url=None, show_details=False, cli_ctx=None): 'version': latest['metadata']['version'], 'summary': latest['metadata']['summary'], 'preview': is_preview_from_extension_meta(latest['metadata']), - 'experimental': False, + 'experimental': is_experimental_from_extension_meta(latest['metadata']), 'installed': installed }) return results diff --git a/src/azure-cli-core/azure/cli/core/tests/test_extension.py b/src/azure-cli-core/azure/cli/core/tests/test_extension.py index 1b002025cc5..711d3b70d50 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_extension.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_extension.py @@ -299,7 +299,7 @@ def test_list_available_extensions_preview_details(self): self.assertEqual(res[0]['summary'], 'AzureMachineLearningWorkspaces Extension') self.assertEqual(res[0]['version'], '2.0.0a1') self.assertEqual(res[0]['preview'], True) - self.assertEqual(res[0]['experimental'], False) + self.assertEqual(res[0]['experimental'], True) self.assertEqual(res[1]['name'], 'test_sample_extension1') self.assertEqual(res[1]['version'], '1.15.0') self.assertEqual(res[1]['preview'], True)