feat(plugins): install an older version of a plugin (#2035)

Adds a version picker to the plugin admin panel, on desktop and mobile: every
published version with its own server-computed compatibility verdict, so the
client never re-derives semver range logic.

A deliberate non-latest pick sets an update hold on the row, which keeps the
update banner and "Update all" from immediately nagging the rollback away. The
hold releases when an install lands back on the newest compatible version by any
path, or when the admin resumes updates explicitly. An unresolvable registry
never sets one: refusing to pin on missing information beats silently muting
future updates.
This commit is contained in:
jubnl
2026-08-25 17:30:27 +02:00
committed by GitHub
parent b5c8182410
commit 4ba407aead
37 changed files with 1383 additions and 42 deletions
+13
View File
@@ -421,6 +421,19 @@ const admin: TranslationStrings = {
'admin.plugins.sortUpdates': 'Najpierw aktualizacje',
'admin.plugins.sortDownloads': 'Najczęściej pobierane',
'admin.plugins.updatesAvailable': 'Dostępne aktualizacje dla Twoich wtyczek: {count}.',
'admin.plugins.newerNeedsTrek': 'v{version} dostępna — wymaga TREK {range}',
'admin.plugins.versionsTitle': 'Wersje',
'admin.plugins.versionPickerTitle': 'Zmień wersję — {name}',
'admin.plugins.versionSwitch': 'Przełącz na {version}',
'admin.plugins.versionNeedsTrek': 'wymaga TREK {range}',
'admin.plugins.changeVersion': 'Zmień wersję…',
'admin.plugins.noVersions': 'Nie znaleziono opublikowanych wersji w rejestrze.',
'admin.plugins.downgradeTitle': 'Przywrócić starszą wersję tej wtyczki?',
'admin.plugins.downgradeBody': 'Przejście z v{from} na v{to}: dane zapisane przez nowszą wersję pozostają, a starsza wersja może ich nie rozumieć.',
'admin.plugins.downgradeConfirm': 'Przywróć',
'admin.plugins.updatesHeld': 'Aktualizacje wstrzymane na v{version}',
'admin.plugins.resumeUpdates': 'Wznów aktualizacje',
'admin.plugins.updatesResumed': 'Wznowiono aktualizacje',
'admin.plugins.updateAll': 'Zaktualizuj wszystkie',
'admin.plugins.noMatchInstalled': 'Żadna zainstalowana wtyczka nie pasuje do wyszukiwania.',
'admin.plugins.noMatchRegistry': 'Żadna wtyczka w rejestrze nie pasuje do wyszukiwania.',