Skip to content

List available migrations and let users choose on ng update (including optional migrations) #23205

Closed
@d-koppenhagen

Description

@d-koppenhagen

🚀 Feature request

Command (mark with an x)

  • new
  • build
  • serve
  • test
  • e2e
  • generate
  • add
  • update
  • lint
  • extract-i18n
  • run
  • config
  • help
  • version
  • doc

Description

Currently executing ng update will perform necessary migrations from one angular version to another which works smoothly.

However there there are two issues I see:

  1. Users can't select / see the available migrations with their details before executing ng update
  2. Optional migrations that may be available won't be executed and listed. In fact users that doesn't know about such probably very helpful but optional migrations aren't able to find and execute them.

One example for this which can be found at update.angular.io only when selecting 'medium' or 'advanced' option:

ng update @angular/cli@12 --migrate-only production-by-default

Identifying and executing such optional migrations can be tricky if there isn't a way to list/select them.

Describe the solution you'd like

Ideally during the execution, ng update should list the migrations with their default execution state and also include all available optional migrations with a non-preselected state like this:

> ng update
Which migrations do you want to execute:
[x] migration1Name: migration1Description
[x] migration2Name: migration1Description
[ ] optionalMigration1Name: optionalMigration1Description

After a user made the selection, all selected migrations will be executed including the selected optional ones.
This will cause a better developer experience as it's more clear what will happen during the update process before actually running the migrations.

It should be considered, that tools like renovate or dependabot can't handle such interactive selections.
Therefore a flag could be helpful to deactivate the prompt and switch back to the current behavior (only executing the pre-selected non-optional migrations):

ng update --interactive=false

As users may have already executed migrations previously or want to know what migrations are available at another point of time, a separate migration command/option could be helpful:

> ng update --list-migrations
- migration1Name: migration1Description
- migration2Name: migration1Description
- optionalMigration1Name: optionalMigration1Description

To execute a migration run: ng update --migrate-only <migration-name>

Describe alternatives you've considered

An alternative would be to implement a "small" solution that would at least list possible optional migrations at the end of the ng update log to give users a hint about possibly further migration they can execute manually

> ng update

...

Further optional migrations are available:

- migration1Name: migration1Description
- migration2Name: migration1Description
- optionalMigration1Name: optionalMigration1Description

To execute a migration run: ng update --migrate-only <migration-name>

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions