Skip to content
Open
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
1 change: 1 addition & 0 deletions src/azure-cli/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Release History
* `az appservice plan`: Remove preview flag for managed instance app service plans (#33690)
* `az appservice plan`: Add Premium V3 SKU support (`P0V3`, `P1-3V3`, `P1-5MV3`) for managed instances (#33690)
* `az webapp troubleshoot status`: Provide latest application startup attempt data (#33673)
* `az webapp list-runtimes`: Change `config` field delimiter from `|` to `:` so the value can be passed directly to `az webapp create --runtime` on all platforms including Windows (#33822)

**ARM**

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -797,7 +797,7 @@ def load_arguments(self, _):
c.argument('login_with_github', help='Interactively log in with GitHub to retrieve the Personal Access Token', action='store_true')

with self.argument_context('webapp deployment github-actions add')as c:
c.argument('runtime', options_list=['--runtime', '-r'], help='Canonicalized web runtime in the format of Framework|Version, e.g. "PHP|5.6". Use "az webapp list-runtimes" for available list.')
c.argument('runtime', options_list=['--runtime', '-r'], help='Canonicalized web runtime in the format of Framework:Version, e.g. "PHP:5.6". Use "az webapp list-runtimes" for available list.')
c.argument('force', options_list=['--force', '-f'], help='When true, the command will overwrite any workflow file with a conflicting name.', action='store_true')

with self.argument_context('webapp deployment source config-zip')as c:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7719,7 +7719,7 @@ def get_stacks_as_table(self, runtime_filter=None, support_filter=None):
'os': stack.os,
'runtime': stack.runtime_family,
'version': stack.version_label or '',
'config': stack.display_name,
'config': stack.display_name.replace(self.DEFAULT_DELIMETER, ':'),
'support': support_status,
Comment on lines 7719 to 7723
'end_of_life': stack.eol_date or '-',
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2025,9 +2025,15 @@ class TestStackRuntimeJavaSELinux(unittest.TestCase):
aggregate container's position in the response mattering.
"""

EXPECTED = {
EXPECTED_DISPLAY_NAMES = {
'JAVA|25-java25', 'JAVA|21-java21', 'JAVA|17-java17', 'JAVA|11-java11', 'JAVA|8-jre8',
}
# config field uses ':' delimiter so the value can be passed directly to 'az webapp create --runtime'
EXPECTED_CONFIGS = {
'JAVA:25-java25', 'JAVA:21-java21', 'JAVA:17-java17', 'JAVA:11-java11', 'JAVA:8-jre8',
}
Comment on lines +2028 to +2034
# Keep EXPECTED as an alias for backward-compat with display_name-based assertions
EXPECTED = EXPECTED_DISPLAY_NAMES

FULL_RUNTIMES = [
{'runtimeVersion': '8', 'runtime': 'JAVA|8-jre8'},
Expand Down Expand Up @@ -2094,7 +2100,7 @@ def test_aggregate_runtimes_array_complete(self):
aggregate = self._minor('SE', _TypespecContainerSettings(
{'isAutoUpdate': True, 'runtimes': self.FULL_RUNTIMES}, is_auto_update=True))
stack = self._java_se_stack([aggregate] + self._patch_minors())
self.assertEqual(self._java_se_configs(stack), self.EXPECTED)
self.assertEqual(self._java_se_configs(stack), self.EXPECTED_CONFIGS)

def test_aggregate_javaNNRuntime_keys(self):
# Fallback path: no 'runtimes' array, but the Mapping exposes individual
Expand All @@ -2110,15 +2116,15 @@ def test_aggregate_javaNNRuntime_keys(self):
},
is_auto_update=True))
stack = self._java_se_stack([aggregate] + self._patch_minors())
self.assertEqual(self._java_se_configs(stack), self.EXPECTED)
self.assertEqual(self._java_se_configs(stack), self.EXPECTED_CONFIGS)

def test_aggregate_not_first_selected_by_auto_update(self):
# The aggregate auto-update container must be chosen by its is_auto_update
# flag, not its position -- here it is returned last, after the per-patch minors.
aggregate = self._minor('SE', _TypespecContainerSettings(
{'isAutoUpdate': True, 'runtimes': self.FULL_RUNTIMES}, is_auto_update=True))
stack = self._java_se_stack(self._patch_minors() + [aggregate])
self.assertEqual(self._java_se_configs(stack), self.EXPECTED)
self.assertEqual(self._java_se_configs(stack), self.EXPECTED_CONFIGS)

def test_typed_attrs_only_expose_java_8_11_but_mapping_has_all(self):
# Reproduces the exact regression: the SDK types only java8_runtime /
Expand All @@ -2131,7 +2137,7 @@ def test_typed_attrs_only_expose_java_8_11_but_mapping_has_all(self):
# Sanity-check the model: typed attrs cover only 8/11, additional_properties empty.
self.assertEqual(aggregate.stack_settings.linux_container_settings.additional_properties, [])
stack = self._java_se_stack([aggregate] + self._patch_minors())
self.assertEqual(self._java_se_configs(stack), self.EXPECTED)
self.assertEqual(self._java_se_configs(stack), self.EXPECTED_CONFIGS)

def test_runtimes_array_entries_flagged_auto_update(self):
# Entries derived from the aggregate must be flagged auto-update so they
Expand Down