Skip to content

[App Service] BREAKING CHANGE: Revamp az webapp list-runtimes with structured table output#32903

Open
seligj95 wants to merge 3 commits intoAzure:devfrom
seligj95:list-runtimes-v2
Open

[App Service] BREAKING CHANGE: Revamp az webapp list-runtimes with structured table output#32903
seligj95 wants to merge 3 commits intoAzure:devfrom
seligj95:list-runtimes-v2

Conversation

@seligj95
Copy link
Contributor

@seligj95 seligj95 commented Mar 4, 2026

Related command
az webapp list-runtimes

Description

Replace the flat string-list output of az webapp list-runtimes with a structured table showing OS, Runtime, Version, Config, Support lifecycle status, and End of Life date.

Add new --runtime filter (dotnet/node/php/python/java) and --support filter (supported/active/near/eol/all) parameters.

Include Java EOL dates by cross-referencing the Java stack data with container entries.

Remove deprecated --linux and --show-runtime-details parameters.

Breaking Change Pre-announcement: #32905 (must be merged and shipped 30 days before this PR is adopted)

Testing Guide

# Default output (supported runtimes, both OS)
az webapp list-runtimes -o table

# Filter by OS
az webapp list-runtimes --os linux -o table

# Filter by runtime family
az webapp list-runtimes --runtime python -o table
az webapp list-runtimes --runtime java -o table

# Filter by support lifecycle
az webapp list-runtimes --support near -o table
az webapp list-runtimes --support eol -o table
az webapp list-runtimes --support all -o table

# Combined filters
az webapp list-runtimes --os linux --runtime dotnet --support near -o table

History Notes

[App Service] BREAKING CHANGE: az webapp list-runtimes: Output changed from flat string list to structured list of dicts with keys: os, runtime, version, config, support, end_of_life. Added --runtime and --support filter parameters. Removed deprecated --linux and --show-runtime-details parameters.


This checklist is used to make sure that common guidelines for a pull request are followed.

Replace flat string-list output with structured table showing OS, Runtime,
Version, Config, Support status, and End of Life date.

Changes:
- Output is now a list of dicts instead of flat string list (breaking change)
- Add --runtime filter (dotnet/node/php/python/java)
- Add --support filter (supported/active/near/eol/all)
- Show EOL dates and support lifecycle status (Active/Near/EOL)
- Include Java EOL dates by cross-referencing the Java stack data
- Register table transformer for clean -o table rendering
- Remove deprecated --linux and --show-runtime-details params
- Update tests and recording
@azure-client-tools-bot-prd
Copy link

azure-client-tools-bot-prd bot commented Mar 4, 2026

️✔️AzureCLI-FullTest
️✔️acr
️✔️latest
️✔️3.12
️✔️3.13
️✔️acs
️✔️latest
️✔️3.12
️✔️3.13
️✔️advisor
️✔️latest
️✔️3.12
️✔️3.13
️✔️ams
️✔️latest
️✔️3.12
️✔️3.13
️✔️apim
️✔️latest
️✔️3.12
️✔️3.13
️✔️appconfig
️✔️latest
️✔️3.12
️✔️3.13
️✔️appservice
️✔️latest
️✔️3.12
️✔️3.13
️✔️aro
️✔️latest
️✔️3.12
️✔️3.13
️✔️backup
️✔️latest
️✔️3.12
️✔️3.13
️✔️batch
️✔️latest
️✔️3.12
️✔️3.13
️✔️batchai
️✔️latest
️✔️3.12
️✔️3.13
️✔️billing
️✔️latest
️✔️3.12
️✔️3.13
️✔️botservice
️✔️latest
️✔️3.12
️✔️3.13
️✔️cdn
️✔️latest
️✔️3.12
️✔️3.13
️✔️cloud
️✔️latest
️✔️3.12
️✔️3.13
️✔️cognitiveservices
️✔️latest
️✔️3.12
️✔️3.13
️✔️compute_recommender
️✔️latest
️✔️3.12
️✔️3.13
️✔️computefleet
️✔️latest
️✔️3.12
️✔️3.13
️✔️config
️✔️latest
️✔️3.12
️✔️3.13
️✔️configure
️✔️latest
️✔️3.12
️✔️3.13
️✔️consumption
️✔️latest
️✔️3.12
️✔️3.13
️✔️container
️✔️latest
️✔️3.12
️✔️3.13
️✔️containerapp
️✔️latest
️✔️3.12
️✔️3.13
️✔️core
️✔️latest
️✔️3.12
️✔️3.13
️✔️cosmosdb
️✔️latest
️✔️3.12
️✔️3.13
️✔️databoxedge
️✔️latest
️✔️3.12
️✔️3.13
️✔️dls
️✔️latest
️✔️3.12
️✔️3.13
️✔️dms
️✔️latest
️✔️3.12
️✔️3.13
️✔️eventgrid
️✔️latest
️✔️3.12
️✔️3.13
️✔️eventhubs
️✔️latest
️✔️3.12
️✔️3.13
️✔️feedback
️✔️latest
️✔️3.12
️✔️3.13
️✔️find
️✔️latest
️✔️3.12
️✔️3.13
️✔️hdinsight
️✔️latest
️✔️3.12
️✔️3.13
️✔️identity
️✔️latest
️✔️3.12
️✔️3.13
️✔️iot
️✔️latest
️✔️3.12
️✔️3.13
️✔️keyvault
️✔️latest
️✔️3.12
️✔️3.13
️✔️lab
️✔️latest
️✔️3.12
️✔️3.13
️✔️managedservices
️✔️latest
️✔️3.12
️✔️3.13
️✔️maps
️✔️latest
️✔️3.12
️✔️3.13
️✔️marketplaceordering
️✔️latest
️✔️3.12
️✔️3.13
️✔️monitor
️✔️latest
️✔️3.12
️✔️3.13
️✔️mysql
️✔️latest
️✔️3.12
️✔️3.13
️✔️netappfiles
️✔️latest
️✔️3.12
️✔️3.13
️✔️network
️✔️latest
️✔️3.12
️✔️3.13
️✔️policyinsights
️✔️latest
️✔️3.12
️✔️3.13
️✔️postgresql
️✔️latest
️✔️3.12
️✔️3.13
️✔️privatedns
️✔️latest
️✔️3.12
️✔️3.13
️✔️profile
️✔️latest
️✔️3.12
️✔️3.13
️✔️rdbms
️✔️latest
️✔️3.12
️✔️3.13
️✔️redis
️✔️latest
️✔️3.12
️✔️3.13
️✔️relay
️✔️latest
️✔️3.12
️✔️3.13
️✔️resource
️✔️latest
️✔️3.12
️✔️3.13
️✔️role
️✔️latest
️✔️3.12
️✔️3.13
️✔️search
️✔️latest
️✔️3.12
️✔️3.13
️✔️security
️✔️latest
️✔️3.12
️✔️3.13
️✔️servicebus
️✔️latest
️✔️3.12
️✔️3.13
️✔️serviceconnector
️✔️latest
️✔️3.12
️✔️3.13
️✔️servicefabric
️✔️latest
️✔️3.12
️✔️3.13
️✔️signalr
️✔️latest
️✔️3.12
️✔️3.13
️✔️sql
️✔️latest
️✔️3.12
️✔️3.13
️✔️sqlvm
️✔️latest
️✔️3.12
️✔️3.13
️✔️storage
️✔️latest
️✔️3.12
️✔️3.13
️✔️synapse
️✔️latest
️✔️3.12
️✔️3.13
️✔️telemetry
️✔️latest
️✔️3.12
️✔️3.13
️✔️util
️✔️latest
️✔️3.12
️✔️3.13
️✔️vm
️✔️latest
️✔️3.12
️✔️3.13

@azure-client-tools-bot-prd
Copy link

azure-client-tools-bot-prd bot commented Mar 4, 2026

❌AzureCLI-BreakingChangeTest
❌appservice
rule cmd_name rule_message suggest_message
1007 - ParaRemove webapp list-runtimes cmd webapp list-runtimes removed parameter linux please add back parameter linux for cmd webapp list-runtimes
1007 - ParaRemove webapp list-runtimes cmd webapp list-runtimes removed parameter show_runtime_details please add back parameter show_runtime_details for cmd webapp list-runtimes
⚠️ 1006 - ParaAdd webapp list-runtimes cmd webapp list-runtimes added parameter runtime
⚠️ 1006 - ParaAdd webapp list-runtimes cmd webapp list-runtimes added parameter support

Please submit your Breaking Change Pre-announcement ASAP if you haven't already. Please note:

  • Breaking changes can only be merged during the designated breaking change window
  • A pre-announcement must be released at least one month in advance

For more details on how to introduce breaking changes, refer to the documentation: azure-cli/doc/how_to_introduce_breaking_changes.md

@yonzhan
Copy link
Collaborator

yonzhan commented Mar 4, 2026

Thank you for your contribution! We will review the pull request and get back to you soon.

@github-actions
Copy link

github-actions bot commented Mar 4, 2026

The git hooks are available for azure-cli and azure-cli-extensions repos. They could help you run required checks before creating the PR.

Please sync the latest code with latest dev branch (for azure-cli) or main branch (for azure-cli-extensions).
After that please run the following commands to enable git hooks:

pip install azdev --upgrade
azdev setup -c <your azure-cli repo path> -r <your azure-cli-extensions repo path>

@microsoft-github-policy-service microsoft-github-policy-service bot added the Auto-Assign Auto assign by bot label Mar 4, 2026
@seligj95 seligj95 changed the title Revamp az webapp list-runtimes with structured table output [App Service] BREAKING CHANGE: Revamp az webapp list-runtimes with structured table output Mar 4, 2026
@seligj95 seligj95 marked this pull request as ready for review March 4, 2026 21:46
Copilot AI review requested due to automatic review settings March 4, 2026 21:46
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Revamps az webapp list-runtimes from a flat string list to a structured runtime table and introduces filtering by runtime family and support lifecycle.

Changes:

  • Updated webapp list-runtimes to return structured rows with OS/runtime/version/config/support/EOL and added table transformer.
  • Added --runtime and --support filters; removed deprecated --linux and --show-runtime-details.
  • Updated stack parsing to compute support status and attach Java EOL dates by cross-referencing Java stack metadata.

Reviewed changes

Copilot reviewed 4 out of 5 changed files in this pull request and generated 4 comments.

File Description
src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_webapp_commands.py Adds basic scenario invocations for new --runtime and --support filters.
src/azure-cli/azure/cli/command_modules/appservice/custom.py Implements structured stack output, support/EOL computation, new filters, and Java EOL cross-referencing.
src/azure-cli/azure/cli/command_modules/appservice/commands.py Adds table transformer for ordered table columns for list-runtimes.
src/azure-cli/azure/cli/command_modules/appservice/_params.py Removes deprecated params and adds new --runtime/--support CLI arguments.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +6262 to +6269
results.append({
'OS': stack.os,
'runtime': stack.runtime_family,
'version': stack.version_label or '',
'config': stack.display_name,
'support': support_status,
'end_of_life': stack.eol_date or '-',
})
Copy link

Copilot AI Mar 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The structured output mixes casing/styles in its keys (OS vs end_of_life vs lowercase keys). Since this command’s JSON output is a breaking-change surface, it would be better to pick one consistent schema (all lowercase snake_case is common in CLI JSON) and let the table transformer control human-friendly column titles. This also avoids forcing API consumers to handle special-case keys like OS.

Copilot uses AI. Check for mistakes.
if support_status == 'EOL':
continue
elif support_filter == 'active':
if support_status not in ('Active', 'n/a'):
Copy link

Copilot AI Mar 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The --support active filter currently includes stacks with support_status == 'n/a' (i.e., missing/unparseable EOL), which makes the filter semantics ambiguous: active usually implies a known, non-EOL lifecycle. Consider either (1) excluding n/a from active, or (2) renaming n/a to something explicit like Unknown and documenting/handling it as a separate category.

Suggested change
if support_status not in ('Active', 'n/a'):
# Only treat stacks with a known, non-EOL lifecycle as "active".
# Stacks with unknown support status ('n/a') are intentionally excluded.
if support_status != 'Active':

Copilot uses AI. Check for mistakes.
@seligj95
Copy link
Contributor Author

seligj95 commented Mar 4, 2026

@yonzhan Can you please update the milestone to the next breaking change milestone as stated in the docs? I have the Breaking Change Pre-announcement: #32905 which should get added to the next milestone in April (I see this is already done).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Auto-Assign Auto assign by bot Breaking Change Web Apps az webapp

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants