[
https://issues.apache.org/jira/browse/CAMEL-26350?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Federico Mariani reassigned CAMEL-26350:
----------------------------------------
Assignee: Federico Mariani
> camel-jbang - plugin update: re-select community plugin releases for the CLI,
> run after self-update
> ---------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26350
> URL: https://issues.apache.org/jira/browse/CAMEL-26350
> Project: Camel
> Issue Type: Improvement
> Components: camel-jbang
> Reporter: Federico Mariani
> Assignee: Federico Mariani
> Priority: Major
>
> h3. Problem
> {{camel self-update}} only replaces the CLI. It never touches
> {{~/.camel-jbang-plugins.json}}. Since CAMEL-26344, {{camel plugin add}}
> stores the exact plugin release built for the CLI (for example
> {{io.kaoto.forage:camel-jbang-plugin-forage:1.6.2}} with
> {{camelVersions=[4.22.0,4.23.0)}}) instead of {{LATEST}}. After a CLI upgrade:
> * the plugin stays on the release built for the previous Camel line
> * the load-time check prints {{forage 1.6.2 is built for Camel
> [4.22.0,4.23.0) but this CLI is 4.25.0. Run 'camel plugin add forage' ...}}
> * the user has to re-add every plugin by hand
> New plugin patches (for example Forage 1.6.3) are also no longer picked up
> automatically.
> Before CAMEL-26344, plugins registered as {{LATEST}} floated after an upgrade
> to the newest release, whichever Camel line it was built for.
> h3. Proposal
> # *{{camel plugin update [name]}}*: for every plugin entry that was
> auto-selected, re-run the CAMEL-26344 selection for the running CLI and
> rewrite the entry when a different release matches. Auto-selected entries are
> the ones with {{camelVersions}} stored; explicit {{--version}} / {{--gav}}
> registrations don't store it.
> ** Print what changed, e.g. {{forage 1.6.2 -> 1.7.0 (built for Camel
> 4.23.0)}}.
> ** Resolve the new release before rewriting the entry, so a failed download
> leaves the old one in place.
> ** Explicit registrations, built-in plugins and legacy entries without
> {{camelVersions}} are only reported, never changed. A legacy entry gets a
> hint to run {{camel plugin add <name>}}.
> ** No match: keep the current entry and warn, as {{plugin add}} does.
> # *{{camel self-update}}* runs the *new* binary's {{camel plugin update}}
> after a successful activation. Only the new CLI knows its version and range.
> Add an opt-out such as {{--skip-plugins}}. A plugin update failure prints a
> hint and never fails or rolls back the CLI update.
> # The plugin load path stays as it is: warning only, no network calls.
> h3. Example
> * Installed: CLI 4.22.3 with Forage 1.6.2 (auto-selected).
> * Line pin {{4.22}}: {{camel self-update}} installs 4.22.4. Forage 1.6.2
> still matches, so it is unchanged, or moves to a newer 1.6.x patch if one
> exists.
> * Unpinned: {{camel self-update}} installs 4.25.0, and Forage moves to the
> newest release built for 4.25. If none exists yet, it keeps 1.6.2 and warns.
> h3. Acceptance criteria
> * {{camel plugin update}} and {{camel plugin update <name>}} with the
> behaviour above. Entries without any changes are left untouched, byte for
> byte.
> * {{self-update}} invokes it after activation, and {{--skip-plugins}}
> disables it. {{--check}} reports the plugin changes that would follow without
> applying them, if feasible.
> * Works when offline or when repositories are unreachable: warn and keep the
> entries.
> * Docs: plugin page and self-update page.
> * Tests:
> ** auto-selected entry moved to the new line
> ** patch update within a line
> ** no match
> ** explicit and legacy entries untouched
> ** download failure keeps the old entry
> ** self-update hook, plus the opt-out
> ** a fixture plugin, to keep it generic
> h3. Notes
> * Builds on CAMEL-26344 (apache/camel#28581) and the release selectors of
> CAMEL-26345 (apache/camel#28582).
> * On 4.22.x it is useful together with the self-update fixes ([camel-4.22.x]
> #28583) and a backport of the CAMEL-26345 self-update selector support.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)