Plugins in the registry support a field
deprecate:
automigrate: true/false
migrateTo: <new plugin ID>
however, there is no defined policy on when this property should be used, and it's thus left up to whoever opens the PR to update a particular plugin. A consideration here is that there are two ways of specifying which plugin you want in your workspace:
latest (the default): you're only affected by deprecate when one plugin is deprecated in favor of another plugin; the use of deprecate is clear here.latest and explicitly set a plugin version in your meta.yaml. Currently, there's not much reason to do this, but we offer it as an option, so we need to consider it.In increasing order of "how often deprecate is used":
We deprecate plugins when we don't think users should use them, even if they chose that version specifically. Examples include
camel-tooling/vscode-apache-camel to redhat/vscode-apache-camel)Almost no chance of incompatability
Highest requirement in terms of maintaining plugins (basically have to keep every plugin release, forever)
We deprecate plugins when their version is outdated by some metric. For example we could deprecate plugins within major semver versions:
1.2.0 is released, deprecate all 1.1.x releases.2.0.0 is released, keep latest 1.x.y version.Provided semantic versioning is used as intended, this supports a common-sense use of the registry ("I want the latest release in major version 1.x")
Some maintenance / manual work required when releasing a new version of a plugin.
When a new plugin is released, the previous version is deprecated.
Simplest option, allows trimming number of supported plugin releases in registry (3mo after a plugin is deprecated, we could remove it)
Makes the option of choosing any version other than latest meaningless.
Historically, we've used option 1, and the registry supports creating a workspace with che-theia version 7.0.0-rc-4.0 (which IMO is an argument against it).
cc: @l0rd @slemeur @nickboldt
+1 for option 3
cc @ericwill
I think option 2 is nice, but then we are at the mercy of relying on plugins to follow semantic versioning and that's not a guarantee. So +1 to option 3.
Are users in Che informed when a plugin they've selected for a workspace is deprecated? I.e. some sort of message like "Version x.x.x of this plugin is deprecated, please use the latest version"?
@ericwill currently they are only informed if they go to the workspace details, AFAIK:

Also, autoMigrate does nothing at the moment: https://github.com/eclipse/che/issues/15461
@l0rd With option 3, would we also set autoMigrate for old versions?
I am not sure I understand the autoMigrate use case.
My reasoning was based on the fact that the default version of a plugin is latest. Hence plugins gets "potentially" updated at every restart of a workspace. In other words deprecating and removing older versions of plugins has a minimal impact on users whereas maintaining multiple versions, migration mechanisms etc...is complicated and takes time to maintain.
I would not enable/implement the auto-migrate mechanism. I would rather:
So to re-iterate for my understanding: plugins are deprecated when a new version of the plugin is added to the registry (and this version becomes the "latest).
When do we remove plugins? Is it based on time, how many more "newer" versions there are, or something else?
Issues go stale after 180 days of inactivity. lifecycle/stale issues rot after an additional 7 days of inactivity and eventually close.
Mark the issue as fresh with /remove-lifecycle stale in a new comment.
If this issue is safe to close now please do so.
Moderators: Add lifecycle/frozen label to avoid stale mode.
To clarify, the policy I am following (which seems to be working) is: