Skip to content

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 16:54
· 21 commits to dev since this release

Added

  • Shared plugin registry on the Plugins page, for the dev team. The host app answers GET /api/plugins/registry
    with configured: true for dev-team members only, and everyone else sees the page as before.
    • Each plugin's row shows its registry state (not published, update ready, published, registry ahead, name
      taken). Expanding a mounted plugin's row publishes it, or says why it can't.
    • A "Registry" tab lists the published registry plugins, including ones this organization has no copy of,
      with a Mine filter. Owners can remove a version or a plugin.
    • Platform admins get a "Visible to" column: a searchable organization picker that grants the latest version.
      The expanded row lists the organizations with access, pins each to a version or the latest, and revokes.
    • Publishing and removing a version or plugin each ask for confirmation. A retired version can be deleted for
      good, which frees its version number.
    • If the registry fails to load, the dev team sees the Registry tab with the reason instead of losing the tab.
    • After a registry write, the page re-reads the plugins shared with this organization and says what changed
      ("… is now shared with your organization", a re-pinned version, a revoked share), so nothing waits for a reload.
  • New types in @collabdt/core/core/components/viewers/plugins/types: RegistryPlugin, RegistryVersion,
    RegistryGrant, RegistryState, RegistryOrganization and the RegistryActions port.
    RegistryActions.setGrant(slug, organizationId, pinnedVersion) takes null for the latest version.
  • Promoting registry plugins between deployments by package file.
    • Each published version has an Export button that downloads <slug>-<version>.cdtplugin.json.
    • Platform admins get an Import package button on the Registry tab. Its confirmation shows the version,
      hostApi and sha256 before publishing.
    • RegistryActions.exportPackage(slug, version) and RegistryActions.importPackage(pkg) back them.
      They default to the host's GET …/versions/<version>/package and POST /api/plugins/registry/import.
    • A mounted plugin's publish strip has an Export button too, so a local build can be promoted without
      publishing it to the dev registry first. RegistryActions.exportMountedPackage(slug) backs it and defaults
      to the host's GET /api/plugins/registry/mounted/<slug>/package. It shows only where canPublishFromDisk is set.
    • RegistryState.viewer.canPublishFromDisk: publishing a mounted build is offered only when the host sets it,
      so staging and production never show it. If it is missing, publishing from disk is off.
    • PluginRegistry i18n keys emptyImport, exportPackage, exportPackageLabel, toastExported,
      toastExportFailed, importPackage, importInvalidFile, importTitle, importDescription,
      importFacts, importConfirm, toastImported and toastImportFailed (en/es/fr).
  • PluginsManager takes an optional registryActions prop. It defaults to the host's /api/plugins/registry/* routes.
  • PluginListing.registryVersion. A plugin shared with the organization through the registry shows a
    "Shared v{version}" badge in the Registry column.
  • @collabdt/core/plugins-sdk/semver: compareVersions, highestVersion and isValidVersion, the semver rules
    the registry applies. Use them anywhere a version is compared, so the page and the host never disagree.
  • Uninstalling a plugin asks for confirmation, from the expanded row and from the collapsed row's Install checkbox.
  • PluginRegistry i18n namespace (en/es/fr), plus PluginsPage.trustRegistry, tabInstalled, tabNotInstalled,
    tabNotInstalledHint, emptyNotInstalled, uninstallTitle, uninstallDescription, uninstallConfirm,
    cancel, columnPlugin, columnVersion, columnStatus, columnRun, columnInstall, columnEnable,
    columnVisibleTo, columnRegistry, visibleToCount, sortBy, toggleDetails, notInOrg, tabAll,
    tabRunning, emptyRunning, quickInstalled, quickOrgEnabled and quickUserRun.
  • Sortable Plugins table headers: Name, Status, Run, Install, Enable and Visible to cycle ascending, descending
    and unsorted.

Changed

  • ViewerNames.extensions is renamed ViewerNames.plugins (value 'plugins'), so the Plugins page is
    ?viewer=plugins. The host database renames the enum value in place.
  • The Plugins page shows one compact row per plugin, expanded for its details and controls, so a plugin that is
    both in the organization and in the registry appears once. Tabs filter the rows into "All", "Running",
    "Installed", "Not installed" (admins) and "Registry" (dev team), each with a count.
    A collapsed row has a Run checkbox for everyone, Install and Enable checkboxes for organization admins, and a
    running plugin's name is bold. A Run checkbox the viewer can't change is disabled, with the reason as its
    tooltip. The Registry column appears only when some plugin has a registry state to show. The table always fits its
    container: when it is too narrow, the Version, Registry, Visible to, Enable, Install and Status columns drop in
    that order, leaving the name and Run, and their controls stay in the expanded row.
  • MountedPlugin.mountPath is optional, and MountedPlugin gains source and registryVersion, because
    /api/plugins/mounted also lists registry plugins granted to the organization.
  • The "Not installed" tab's hint covers plugins shared with the organization as well as mounted ones.
  • RegistryState.configured is true only for the dev team. The type no longer suggests an organization admin
    gets a read-only registry, and RegistryState.error is documented as the dev team's load failure.
  • The Plugins page says "install" instead of "add", to match the Install column. The button now reads
    "Install to organization", the status badge reads "Not installed", and PluginsPage.trustHeading,
    trustWarning, toastInstalled, toastUninstalled, quickInstalled, tabNotInstalledHint and emptyAdmin
    follow suit (en/es/fr).

Removed

  • PluginsPage.intro: the Plugins page no longer shows an intro line under its title.
  • PluginsPage.countPlugins, which nothing rendered.
  • PluginsPage.sectionAvailable, sectionFound and sectionFoundHint, renamed tabInstalled, tabNotInstalled
    and tabNotInstalledHint to match the tabs they label.

Fixed

  • The Plugins page no longer shows organization controls (Add to organization, Install, Enable, Let people
    choose) to roles that can edit the organization but not its plugins, such as User. They failed on save.
    Controls now follow the PluginInstallation and PluginUserSetting permissions only, as the API does.
  • A Viewer is no longer told they can turn an optional plugin on or off themselves. New
    PluginsPage.orgReadOnlyOnAskAdmin and orgReadOnlyOffAskAdmin strings tell them to ask an administrator.

Migration

  • Replace ViewerNames.extensions with ViewerNames.plugins, and any stored or linked 'extensions' viewer
    value with 'plugins'.
  • If you override Plugins page messages, rename PluginsPage.sectionAvailable to tabInstalled,
    sectionFound to tabNotInstalled and sectionFoundHint to tabNotInstalledHint, and drop countPlugins.