feat(cabana): plugin updates and marketplace search on the Plugins screen

- GET /plugins looks up each versioned plugin's releases through
  kiosk.Client and applies plugin:update's rule (NewestCompatible above
  the BaseVersion), with the update command and the framework a newer
  release needs
- GET /plugins/marketplace forwards q and category (validated like the
  registry), marks installed and incompatible plugins and returns the
  install command; ids outside the plugin ID shape are dropped
- 4 s per-call timeout, at most 4 lookups at once, in-process cache
  (searches 5 min, releases 15 min, failures 1 min); a failing registry
  gives status unavailable, an empty plugins.registry_url sends nothing
- SPA: update badges and Marketplace tab with copy buttons (clipboard
  fallback), hidden when the registry is disabled; no install button
- OpenAPI, SPA types, inventories, conformance case, en/pl strings, docs
This commit is contained in:
Jakub Zych
2026-10-29 19:20:14 +01:00
parent c4b1ac4076
commit 7e8a19399d
18 changed files with 1624 additions and 79 deletions

View File

@@ -560,6 +560,23 @@ plugins:
no_version: "No version"
empty: "No plugins are installed."
load_failed: "The plugin list could not be loaded."
registry_unavailable: "The plugin registry is not answering, so update information and the marketplace are unavailable for now."
update_available: "Update to :version available"
needs_framework: "A newer release needs framework :version."
command_label: "Command"
copy: "Copy"
copied: "Copied"
copied_announce: "Command copied to the clipboard."
copy_failed: "Copying failed. The command is selected; copy it with Ctrl+C."
search_label: "Search plugins"
search_placeholder: "Search by name or description"
category_label: "Category"
category_all: "All categories"
install_hint: "Plugins are installed and updated from the command line: run the command in the application's directory, then summer build, and deploy the new binary."
marketplace_empty: "No plugins match."
marker_installed: "Installed"
marker_needs_framework: "Needs framework :version"
featured: "Featured"
permissions:
tab_system: "System"
manage_users: "Manage administrators"

View File

@@ -596,6 +596,23 @@ plugins:
no_version: "Brak wersji"
empty: "Brak zainstalowanych wtyczek."
load_failed: "Nie udało się wczytać listy wtyczek."
registry_unavailable: "Katalog wtyczek nie odpowiada, więc informacje o aktualizacjach i katalog są chwilowo niedostępne."
update_available: "Dostępna aktualizacja do :version"
needs_framework: "Nowsze wydanie wymaga frameworka :version."
command_label: "Polecenie"
copy: "Kopiuj"
copied: "Skopiowano"
copied_announce: "Skopiowano polecenie do schowka."
copy_failed: "Nie udało się skopiować. Polecenie jest zaznaczone; skopiuj je skrótem Ctrl+C."
search_label: "Szukaj wtyczek"
search_placeholder: "Szukaj po nazwie lub opisie"
category_label: "Kategoria"
category_all: "Wszystkie kategorie"
install_hint: "Wtyczki instaluje się i aktualizuje z wiersza poleceń: uruchom polecenie w katalogu aplikacji, potem summer build, i wdróż nowy plik binarny."
marketplace_empty: "Brak pasujących wtyczek."
marker_installed: "Zainstalowana"
marker_needs_framework: "Wymaga frameworka :version"
featured: "Wyróżniona"
permissions:
tab_system: "System"
manage_users: "Zarządzanie administratorami"