diff --git a/workspaces/marketplace/.auto-version-bump b/workspaces/extensions/.auto-version-bump similarity index 100% rename from workspaces/marketplace/.auto-version-bump rename to workspaces/extensions/.auto-version-bump diff --git a/workspaces/marketplace/.changeset/README.md b/workspaces/extensions/.changeset/README.md similarity index 100% rename from workspaces/marketplace/.changeset/README.md rename to workspaces/extensions/.changeset/README.md diff --git a/workspaces/marketplace/.changeset/config.json b/workspaces/extensions/.changeset/config.json similarity index 100% rename from workspaces/marketplace/.changeset/config.json rename to workspaces/extensions/.changeset/config.json diff --git a/workspaces/extensions/.changeset/hot-trains-develop.md b/workspaces/extensions/.changeset/hot-trains-develop.md new file mode 100644 index 0000000000..38fb15d0d4 --- /dev/null +++ b/workspaces/extensions/.changeset/hot-trains-develop.md @@ -0,0 +1,14 @@ +--- +'@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions': minor +'@red-hat-developer-hub/backstage-plugin-extensions-backend': minor +'@red-hat-developer-hub/backstage-plugin-extensions-common': minor +'@red-hat-developer-hub/backstage-plugin-extensions': minor +'@red-hat-developer-hub/extensions-cli': minor +--- + +Renamed plugins from marketplace to extensions + +- Renamed all packages from `backstage-plugin-marketplace-*` to `backstage-plugin-extensions-*` +- Updated all internal references, exports, and API endpoints +- lazy load codeEditor to reduce the frontend plugin bundle size +- Made catalog entities directory path configurable via `extensions.directory` in app-config.yaml with fallback to `extensions` and `marketplace` directories diff --git a/workspaces/marketplace/.dockerignore b/workspaces/extensions/.dockerignore similarity index 100% rename from workspaces/marketplace/.dockerignore rename to workspaces/extensions/.dockerignore diff --git a/workspaces/marketplace/.eslintignore b/workspaces/extensions/.eslintignore similarity index 100% rename from workspaces/marketplace/.eslintignore rename to workspaces/extensions/.eslintignore diff --git a/workspaces/marketplace/.eslintrc.js b/workspaces/extensions/.eslintrc.js similarity index 100% rename from workspaces/marketplace/.eslintrc.js rename to workspaces/extensions/.eslintrc.js diff --git a/workspaces/marketplace/.gitignore b/workspaces/extensions/.gitignore similarity index 100% rename from workspaces/marketplace/.gitignore rename to workspaces/extensions/.gitignore diff --git a/workspaces/marketplace/.prettierignore b/workspaces/extensions/.prettierignore similarity index 100% rename from workspaces/marketplace/.prettierignore rename to workspaces/extensions/.prettierignore diff --git a/workspaces/marketplace/Makefile b/workspaces/extensions/Makefile similarity index 62% rename from workspaces/marketplace/Makefile rename to workspaces/extensions/Makefile index 9193c0d53e..25e00089a5 100644 --- a/workspaces/marketplace/Makefile +++ b/workspaces/extensions/Makefile @@ -1,4 +1,4 @@ -workspace=marketplace +workspace=extensions # This variables defines the rhdh and dynamic-plugins-root paths. # @@ -36,25 +36,25 @@ add-frontend-to-rhdh: @echo @echo Will build and install ${workspace} frontend into ${rhdh} @echo - cd plugins/marketplace && npx --yes @red-hat-developer-hub/cli plugin export --dynamic-plugins-root "${dproot}" --clean "${clean}" --dev "${dev}" + cd plugins/extensions && npx --yes @red-hat-developer-hub/cli plugin export --dynamic-plugins-root "${dproot}" --clean "${clean}" --dev "${dev}" add-backend-to-rhdh: @echo @echo Will build and install ${workspace} backend into ${rhdh} @echo - cd plugins/marketplace-backend && npx --yes @red-hat-developer-hub/cli plugin export --dynamic-plugins-root "${dproot}" --clean "${clean}" --dev "${dev}" + cd plugins/extensions-backend && npx --yes @red-hat-developer-hub/cli plugin export --dynamic-plugins-root "${dproot}" --clean "${clean}" --dev "${dev}" add-catalog-modules-to-rhdh: @echo @echo Will build and install catalog modules into ${rhdh} @echo - cd plugins/catalog-backend-module-marketplace && npx --yes @red-hat-developer-hub/cli plugin export --dynamic-plugins-root "${dproot}" --clean "${clean}" --dev "${dev}" --embed-package "@red-hat-developer-hub/backstage-plugin-marketplace-common" + cd plugins/catalog-backend-module-extensions && npx --yes @red-hat-developer-hub/cli plugin export --dynamic-plugins-root "${dproot}" --clean "${clean}" --dev "${dev}" --embed-package "@red-hat-developer-hub/backstage-plugin-extensions-common" copy-config-to-rhdh: @echo @echo Copy app-config.dynamic.yaml into ${rhdh} @echo - cp app-config.dynamic.yaml "${rhdh}/app-config-marketplace.local.yaml" + cp app-config.dynamic.yaml "${rhdh}/app-config-extensions.local.yaml" @echo @echo You can start your rhdh now with @echo @@ -65,6 +65,6 @@ remove-from-rhdh: @echo @echo Remove packages from ${rhdh} @echo - rm -rf "${dproot}/red-hat-developer-hub-backstage-plugin-marketplace" - rm -rf "${dproot}/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic" - rm -rf "${dproot}/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic" + rm -rf "${dproot}/red-hat-developer-hub-backstage-plugin-extensions" + rm -rf "${dproot}/red-hat-developer-hub-backstage-plugin-extensions-backend-dynamic" + rm -rf "${dproot}/red-hat-developer-hub-backstage-plugin-catalog-backend-module-extensions-dynamic" diff --git a/workspaces/marketplace/README.md b/workspaces/extensions/README.md similarity index 98% rename from workspaces/marketplace/README.md rename to workspaces/extensions/README.md index 78555263f1..1f939678dc 100644 --- a/workspaces/marketplace/README.md +++ b/workspaces/extensions/README.md @@ -77,7 +77,7 @@ Navigate to Extensions on the bottom left. ### Entity Types -The marketplace supports three main entity types defined in YAML: +The extensions plugin supports three main entity types defined in YAML: #### Plugin Configuration diff --git a/workspaces/marketplace/api/auth/guest login.bru b/workspaces/extensions/api/auth/guest login.bru similarity index 100% rename from workspaces/marketplace/api/auth/guest login.bru rename to workspaces/extensions/api/auth/guest login.bru diff --git a/workspaces/marketplace/api/bruno.json b/workspaces/extensions/api/bruno.json similarity index 100% rename from workspaces/marketplace/api/bruno.json rename to workspaces/extensions/api/bruno.json diff --git a/workspaces/marketplace/api/catalog/entities.bru b/workspaces/extensions/api/catalog/entities.bru similarity index 100% rename from workspaces/marketplace/api/catalog/entities.bru rename to workspaces/extensions/api/catalog/entities.bru diff --git a/workspaces/marketplace/api/catalog/query entities.bru b/workspaces/extensions/api/catalog/query entities.bru similarity index 100% rename from workspaces/marketplace/api/catalog/query entities.bru rename to workspaces/extensions/api/catalog/query entities.bru diff --git a/workspaces/marketplace/api/collections/all collections.bru b/workspaces/extensions/api/collections/all collections.bru similarity index 73% rename from workspaces/marketplace/api/collections/all collections.bru rename to workspaces/extensions/api/collections/all collections.bru index 8438042b79..02f4538adc 100644 --- a/workspaces/marketplace/api/collections/all collections.bru +++ b/workspaces/extensions/api/collections/all collections.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/collections + url: {{baseURL}}/api/extensions/collections body: none auth: bearer } diff --git a/workspaces/marketplace/api/collections/by name.bru b/workspaces/extensions/api/collections/by name.bru similarity index 62% rename from workspaces/marketplace/api/collections/by name.bru rename to workspaces/extensions/api/collections/by name.bru index a11a51a4ad..52dc794f80 100644 --- a/workspaces/marketplace/api/collections/by name.bru +++ b/workspaces/extensions/api/collections/by name.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/collection/default/featured-plugins + url: {{baseURL}}/api/extensions/collection/default/featured-plugins body: none auth: bearer } diff --git a/workspaces/marketplace/api/collections/facets.bru b/workspaces/extensions/api/collections/facets.bru similarity index 65% rename from workspaces/marketplace/api/collections/facets.bru rename to workspaces/extensions/api/collections/facets.bru index e8b7a3c08b..c3436a7dca 100644 --- a/workspaces/marketplace/api/collections/facets.bru +++ b/workspaces/extensions/api/collections/facets.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/collections/facets?facet=metadata.name&facet=metadata.namespace + url: {{baseURL}}/api/extensions/collections/facets?facet=metadata.name&facet=metadata.namespace body: none auth: bearer } diff --git a/workspaces/marketplace/api/collections/filter collections.bru b/workspaces/extensions/api/collections/filter collections.bru similarity index 69% rename from workspaces/marketplace/api/collections/filter collections.bru rename to workspaces/extensions/api/collections/filter collections.bru index c6e3e94e9c..89ab484c8d 100644 --- a/workspaces/marketplace/api/collections/filter collections.bru +++ b/workspaces/extensions/api/collections/filter collections.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/collections?filter=metadata.name=featured-plugins + url: {{baseURL}}/api/extensions/collections?filter=metadata.name=featured-plugins body: none auth: bearer } diff --git a/workspaces/marketplace/api/collections/plugins by name.bru b/workspaces/extensions/api/collections/plugins by name.bru similarity index 61% rename from workspaces/marketplace/api/collections/plugins by name.bru rename to workspaces/extensions/api/collections/plugins by name.bru index ef9123b4f8..294fc64277 100644 --- a/workspaces/marketplace/api/collections/plugins by name.bru +++ b/workspaces/extensions/api/collections/plugins by name.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/collection/default/featured-plugins/plugins + url: {{baseURL}}/api/extensions/collection/default/featured-plugins/plugins body: none auth: bearer } diff --git a/workspaces/marketplace/api/environments/localhost.bru b/workspaces/extensions/api/environments/localhost.bru similarity index 100% rename from workspaces/marketplace/api/environments/localhost.bru rename to workspaces/extensions/api/environments/localhost.bru diff --git a/workspaces/marketplace/api/packages/all packages.bru b/workspaces/extensions/api/packages/all packages.bru similarity index 73% rename from workspaces/marketplace/api/packages/all packages.bru rename to workspaces/extensions/api/packages/all packages.bru index c1f72a70fc..61898ea6de 100644 --- a/workspaces/marketplace/api/packages/all packages.bru +++ b/workspaces/extensions/api/packages/all packages.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/packages + url: {{baseURL}}/api/extensions/packages body: none auth: bearer } diff --git a/workspaces/marketplace/api/packages/by name.bru b/workspaces/extensions/api/packages/by name.bru similarity index 58% rename from workspaces/marketplace/api/packages/by name.bru rename to workspaces/extensions/api/packages/by name.bru index 14c501e87c..cdfe4505f1 100644 --- a/workspaces/marketplace/api/packages/by name.bru +++ b/workspaces/extensions/api/packages/by name.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/package/default/backstage-community-plugin-tekton + url: {{baseURL}}/api/extensions/package/default/backstage-community-plugin-tekton body: none auth: bearer } diff --git a/workspaces/marketplace/api/packages/facets.bru b/workspaces/extensions/api/packages/facets.bru similarity index 66% rename from workspaces/marketplace/api/packages/facets.bru rename to workspaces/extensions/api/packages/facets.bru index 0d07f7f331..e65e962863 100644 --- a/workspaces/marketplace/api/packages/facets.bru +++ b/workspaces/extensions/api/packages/facets.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/packages/facets?facet=metadata.name&facet=metadata.namespace + url: {{baseURL}}/api/extensions/packages/facets?facet=metadata.name&facet=metadata.namespace body: none auth: bearer } diff --git a/workspaces/marketplace/api/packages/filter packages.bru b/workspaces/extensions/api/packages/filter packages.bru similarity index 70% rename from workspaces/marketplace/api/packages/filter packages.bru rename to workspaces/extensions/api/packages/filter packages.bru index bc85e9f580..4e5bb1fd6d 100644 --- a/workspaces/marketplace/api/packages/filter packages.bru +++ b/workspaces/extensions/api/packages/filter packages.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/packages?filter=metadata.name=doesnotexist + url: {{baseURL}}/api/extensions/packages?filter=metadata.name=doesnotexist body: none auth: bearer } diff --git a/workspaces/marketplace/api/plugins/all plugins.bru b/workspaces/extensions/api/plugins/all plugins.bru similarity index 74% rename from workspaces/marketplace/api/plugins/all plugins.bru rename to workspaces/extensions/api/plugins/all plugins.bru index 4d4d9f923e..9ebfd5e465 100644 --- a/workspaces/marketplace/api/plugins/all plugins.bru +++ b/workspaces/extensions/api/plugins/all plugins.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/plugins + url: {{baseURL}}/api/extensions/plugins body: none auth: bearer } diff --git a/workspaces/marketplace/api/plugins/by name.bru b/workspaces/extensions/api/plugins/by name.bru similarity index 67% rename from workspaces/marketplace/api/plugins/by name.bru rename to workspaces/extensions/api/plugins/by name.bru index 6134670e64..7ba3e9a63b 100644 --- a/workspaces/marketplace/api/plugins/by name.bru +++ b/workspaces/extensions/api/plugins/by name.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/plugin/default/tekton + url: {{baseURL}}/api/extensions/plugin/default/tekton body: none auth: bearer } diff --git a/workspaces/marketplace/api/plugins/facets.bru b/workspaces/extensions/api/plugins/facets.bru similarity index 61% rename from workspaces/marketplace/api/plugins/facets.bru rename to workspaces/extensions/api/plugins/facets.bru index 87a56017f4..c9556f8cd3 100644 --- a/workspaces/marketplace/api/plugins/facets.bru +++ b/workspaces/extensions/api/plugins/facets.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/plugins/facets?facet=metadata.name&facet=metadata.namespace&facet=metadata.annotations.extensions.backstage.io/certified-by + url: {{baseURL}}/api/extensions/plugins/facets?facet=metadata.name&facet=metadata.namespace&facet=metadata.annotations.extensions.backstage.io/certified-by body: none auth: bearer } diff --git a/workspaces/marketplace/api/plugins/filter plugins.bru b/workspaces/extensions/api/plugins/filter plugins.bru similarity index 71% rename from workspaces/marketplace/api/plugins/filter plugins.bru rename to workspaces/extensions/api/plugins/filter plugins.bru index 46c415a99d..b6b1a48d6c 100644 --- a/workspaces/marketplace/api/plugins/filter plugins.bru +++ b/workspaces/extensions/api/plugins/filter plugins.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/plugins?filter=metadata.name=3scale + url: {{baseURL}}/api/extensions/plugins?filter=metadata.name=3scale body: none auth: bearer } diff --git a/workspaces/marketplace/api/plugins/packages by name.bru b/workspaces/extensions/api/plugins/packages by name.bru similarity index 66% rename from workspaces/marketplace/api/plugins/packages by name.bru rename to workspaces/extensions/api/plugins/packages by name.bru index b4554ff837..68aaed192b 100644 --- a/workspaces/marketplace/api/plugins/packages by name.bru +++ b/workspaces/extensions/api/plugins/packages by name.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{baseURL}}/api/marketplace/plugin/default/tekton/packages + url: {{baseURL}}/api/extensions/plugin/default/tekton/packages body: none auth: bearer } diff --git a/workspaces/marketplace/app-config.production.yaml b/workspaces/extensions/app-config.production.yaml similarity index 100% rename from workspaces/marketplace/app-config.production.yaml rename to workspaces/extensions/app-config.production.yaml diff --git a/workspaces/marketplace/app-config.yaml b/workspaces/extensions/app-config.yaml similarity index 98% rename from workspaces/marketplace/app-config.yaml rename to workspaces/extensions/app-config.yaml index 940c01296a..1c6755ea53 100644 --- a/workspaces/marketplace/app-config.yaml +++ b/workspaces/extensions/app-config.yaml @@ -130,6 +130,7 @@ permission: - extensions extensions: + # directory: ../../examples # YAML files are in the examples directory ### Example for how to enable installation to a file. # installation: # enabled: true diff --git a/workspaces/marketplace/backstage.json b/workspaces/extensions/backstage.json similarity index 100% rename from workspaces/marketplace/backstage.json rename to workspaces/extensions/backstage.json diff --git a/workspaces/marketplace/catalog-info.yaml b/workspaces/extensions/catalog-info.yaml similarity index 100% rename from workspaces/marketplace/catalog-info.yaml rename to workspaces/extensions/catalog-info.yaml diff --git a/workspaces/marketplace/docs/catalog/collections.md b/workspaces/extensions/docs/catalog/collections.md similarity index 100% rename from workspaces/marketplace/docs/catalog/collections.md rename to workspaces/extensions/docs/catalog/collections.md diff --git a/workspaces/marketplace/docs/catalog/index.md b/workspaces/extensions/docs/catalog/index.md similarity index 85% rename from workspaces/marketplace/docs/catalog/index.md rename to workspaces/extensions/docs/catalog/index.md index 75371f7d35..0aec9b3b0f 100644 --- a/workspaces/marketplace/docs/catalog/index.md +++ b/workspaces/extensions/docs/catalog/index.md @@ -4,7 +4,7 @@ In alignment to [Backstage BEP-0009: Plugin Metadata](https://github.com/backstage/backstage/blob/master/beps/0009-plugin-metadata/README.md): -- [Plugins](./plugins.md) are the Marketplace 'user facing' entities with a title, icon and markdown description. A plugin contains one mor more packages or modules. +- [Plugins](./plugins.md) are the Extensions 'user facing' entities with a title, icon and markdown description. A plugin contains one mor more packages or modules. - [Packages](./packages.md) are installable npm packages. This includes frontend, backend plugins and modules. - [Collections](./collections.md) are curated lists for plugins. diff --git a/workspaces/marketplace/docs/catalog/packages.md b/workspaces/extensions/docs/catalog/packages.md similarity index 99% rename from workspaces/marketplace/docs/catalog/packages.md rename to workspaces/extensions/docs/catalog/packages.md index d81525f311..3d9bdb5261 100644 --- a/workspaces/marketplace/docs/catalog/packages.md +++ b/workspaces/extensions/docs/catalog/packages.md @@ -192,7 +192,7 @@ metadata: name: comprehensive-plugin-package title: Comprehensive Plugin Package description: A fully configured package example - namespace: marketplace + namespace: extensions annotations: extensions.backstage.io/pre-installed: 'true' labels: diff --git a/workspaces/marketplace/docs/catalog/plugins.md b/workspaces/extensions/docs/catalog/plugins.md similarity index 100% rename from workspaces/marketplace/docs/catalog/plugins.md rename to workspaces/extensions/docs/catalog/plugins.md diff --git a/workspaces/marketplace/docs/index.md b/workspaces/extensions/docs/index.md similarity index 86% rename from workspaces/marketplace/docs/index.md rename to workspaces/extensions/docs/index.md index 1130a8d284..cbc154bf74 100644 --- a/workspaces/marketplace/docs/index.md +++ b/workspaces/extensions/docs/index.md @@ -50,23 +50,23 @@ g, user:default/, role:default/team_a ### Installation -1. Install the marketplace plugins: +1. Install the extensions plugins: ```bash - yarn add @red-hat-developer-hub/backstage-plugin-marketplace - yarn add @red-hat-developer-hub/backstage-plugin-marketplace-backend - yarn add @red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace + yarn add @red-hat-developer-hub/backstage-plugin-extensions + yarn add @red-hat-developer-hub/backstage-plugin-extensions-backend + yarn add @red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions ``` 2. Add the backend plugin to your `packages/backend/src/index.ts`: ```typescript backend.add( - import('@red-hat-developer-hub/backstage-plugin-marketplace-backend'), + import('@red-hat-developer-hub/backstage-plugin-extensions-backend'), ); backend.add( import( - '@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace' + '@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions' ), ); ``` @@ -98,13 +98,13 @@ yarn install yarn start ``` -Navigate to [http://localhost:3000/extensions](http://localhost:3000/extensions) to access the marketplace. +Navigate to [http://localhost:3000/extensions](http://localhost:3000/extensions) to access the extensions catalog. ## Configuration ### Entity Types -The marketplace supports three main entity types defined in YAML: +The extensions plugin supports three main entity types defined in YAML: #### Plugin Configuration @@ -147,6 +147,6 @@ spec: ## Tools -The marketplace workspace includes additional tools to help manage plugin entities: +The extensions workspace includes additional tools to help manage plugin entities: -- **[Marketplace CLI](./tools/cli.md)**: Command-line tool for initializing, generating, verifying, and exporting marketplace entities +- **[Extensions CLI](./tools/cli.md)**: Command-line tool for initializing, generating, verifying, and exporting extensions entities diff --git a/workspaces/marketplace/docs/tools/cli.md b/workspaces/extensions/docs/tools/cli.md similarity index 70% rename from workspaces/marketplace/docs/tools/cli.md rename to workspaces/extensions/docs/tools/cli.md index 55568d52a0..8af695616e 100644 --- a/workspaces/marketplace/docs/tools/cli.md +++ b/workspaces/extensions/docs/tools/cli.md @@ -1,6 +1,6 @@ -# Marketplace CLI +# Extensions CLI -The Marketplace CLI (`@red-hat-developer-hub/marketplace-cli`) is a command-line tool for managing Marketplace plugin and package entities. It provides utilities to initialize, generate, verify, and export marketplace entities. +The Extensions CLI (`@red-hat-developer-hub/extensions-cli`) is a command-line tool for managing extensions plugin and package entities. It provides utilities to initialize, generate, verify, and export extensions entities. ## Installation @@ -8,40 +8,40 @@ Install the CLI globally or use it via `npx`: ```bash # Using npx (recommended) -npx @red-hat-developer-hub/marketplace-cli [command] +npx @red-hat-developer-hub/extensions-cli [command] # Or install globally -npm install -g @red-hat-developer-hub/marketplace-cli +npm install -g @red-hat-developer-hub/extensions-cli ``` ## Usage ```bash -npx @red-hat-developer-hub/marketplace-cli [command] [options] +npx @red-hat-developer-hub/extensions-cli [command] [options] ``` ## Commands -- [`init`](#init) - Initialize marketplace entities for a plugin +- [`init`](#init) - Initialize extensions entities for a plugin - [`generate`](#generate) - Generate Package entities from dynamic plugins configuration -- [`verify`](#verify) - Verify marketplace entities -- [`export-csv`](#export-csv) - Export marketplace entities to CSV files +- [`verify`](#verify) - Verify extensions entities +- [`export-csv`](#export-csv) - Export extensions entities to CSV files --- ## init -Interactive command to initialize marketplace entities (Plugin and Package) for a new plugin. +Interactive command to initialize extensions entities (Plugin and Package) for a new plugin. ### Synopsis ```bash -npx @red-hat-developer-hub/marketplace-cli init +npx @red-hat-developer-hub/extensions-cli init ``` ### Description -The `init` command provides an interactive wizard to create marketplace entities. It detects the plugin structure in the current directory and generates appropriate YAML entities. +The `init` command provides an interactive wizard to create extensions entities. It detects the plugin structure in the current directory and generates appropriate YAML entities. **Behavior:** @@ -58,7 +58,7 @@ The `init` command provides an interactive wizard to create marketplace entities ```bash cd my-backstage-plugin -npx @red-hat-developer-hub/marketplace-cli init +npx @red-hat-developer-hub/extensions-cli init ``` **Sample output:** @@ -92,12 +92,12 @@ spec: ## generate -Generate Package entities for the marketplace from a dynamic plugins configuration file. +Generate Package entities for the extensions catalog from a dynamic plugins configuration file. ### Synopsis ```bash -npx @red-hat-developer-hub/marketplace-cli generate [options] +npx @red-hat-developer-hub/extensions-cli generate [options] ``` ### Options @@ -111,7 +111,7 @@ npx @red-hat-developer-hub/marketplace-cli generate [options] ### Description -The `generate` command reads a dynamic plugins configuration file and generates corresponding `Package` entities for the marketplace. This is useful for creating marketplace entries from an existing RHDH deployment's plugin configuration. +The `generate` command reads a dynamic plugins configuration file and generates corresponding `Package` entities for the extensions catalog. This is useful for creating extensions entries from an existing RHDH deployment's plugin configuration. **Features:** @@ -126,14 +126,14 @@ The `generate` command reads a dynamic plugins configuration file and generates **Generate to stdout:** ```bash -npx @red-hat-developer-hub/marketplace-cli generate \ +npx @red-hat-developer-hub/extensions-cli generate \ -p /path/to/rhdh/dynamic-plugins.default.yaml ``` **Generate to directory with namespace:** ```bash -npx @red-hat-developer-hub/marketplace-cli generate \ +npx @red-hat-developer-hub/extensions-cli generate \ -p /path/to/rhdh/dynamic-plugins.default.yaml \ -o ./generated-packages \ --namespace rhdh \ @@ -156,17 +156,17 @@ generated-packages/ ## verify -Verify a set of marketplace entities for consistency and completeness. +Verify a set of extensions entities for consistency and completeness. ### Synopsis ```bash -npx @red-hat-developer-hub/marketplace-cli verify +npx @red-hat-developer-hub/extensions-cli verify ``` ### Description -The `verify` command scans the current directory for YAML files and validates marketplace `Plugin` and `Package` entities. It checks for: +The `verify` command scans the current directory for YAML files and validates extensions `Plugin` and `Package` entities. It checks for: **Package validation:** @@ -182,8 +182,8 @@ The `verify` command scans the current directory for YAML files and validates ma ### Example ```bash -cd /path/to/marketplace-entities -npx @red-hat-developer-hub/marketplace-cli verify +cd /path/to/extensions-entities +npx @red-hat-developer-hub/extensions-cli verify ``` **Sample output:** @@ -200,26 +200,26 @@ Verifying plugin Catalog... ## export-csv -Export marketplace plugin and package entities to CSV files for analysis or reporting. +Export extensions plugin and package entities to CSV files for analysis or reporting. ### Synopsis ```bash -npx @red-hat-developer-hub/marketplace-cli export-csv [options] +npx @red-hat-developer-hub/extensions-cli export-csv [options] ``` ### Options -| Option | Description | Default | -| -------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------ | -| `-p, --plugins-yaml-path [path]` | Path to the plugins folder containing marketplace YAML files. Multiple paths can be separated by commas | **Required** | -| `-o, --output-file [path]` | Path to the output CSV file (without extension). File extensions are added automatically | stdout | -| `-r, --recursive` | Recursively search for YAML files in each directory | `false` | -| `-t, --type [type]` | Type of CSV to export: `plugin`, `package`, or `all` | `all` | +| Option | Description | Default | +| -------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------ | +| `-p, --plugins-yaml-path [path]` | Path to the plugins folder containing extensions YAML files. Multiple paths can be separated by commas | **Required** | +| `-o, --output-file [path]` | Path to the output CSV file (without extension). File extensions are added automatically | stdout | +| `-r, --recursive` | Recursively search for YAML files in each directory | `false` | +| `-t, --type [type]` | Type of CSV to export: `plugin`, `package`, or `all` | `all` | ### Description -The `export-csv` command parses marketplace YAML files and generates CSV reports. This is useful for creating spreadsheets for plugin inventory, auditing, or documentation purposes. +The `export-csv` command parses extensions YAML files and generates CSV reports. This is useful for creating spreadsheets for plugin inventory, auditing, or documentation purposes. **Plugin CSV columns:** @@ -237,16 +237,16 @@ The `export-csv` command parses marketplace YAML files and generates CSV reports **Export all entities to stdout:** ```bash -npx @red-hat-developer-hub/marketplace-cli export-csv \ +npx @red-hat-developer-hub/extensions-cli export-csv \ -p ./examples/plugins,./examples/packages ``` **Export plugins to files with recursive search:** ```bash -npx @red-hat-developer-hub/marketplace-cli export-csv \ +npx @red-hat-developer-hub/extensions-cli export-csv \ -p ./examples \ - -o ./reports/marketplace \ + -o ./reports/extensions \ -r \ -t plugin ``` @@ -255,14 +255,14 @@ npx @red-hat-developer-hub/marketplace-cli export-csv \ ``` reports/ -├── marketplace-plugins.csv -└── marketplace-packages.csv +├── extensions-plugins.csv +└── extensions-packages.csv ``` **Export only packages:** ```bash -npx @red-hat-developer-hub/marketplace-cli export-csv \ +npx @red-hat-developer-hub/extensions-cli export-csv \ -p ./examples/packages \ -o ./reports/packages-inventory \ -t package @@ -274,7 +274,7 @@ npx @red-hat-developer-hub/marketplace-cli export-csv \ ### Plugin Entity -Represents a logical plugin in the marketplace. A plugin can contain one or more packages. +Represents a logical plugin in the extensions catalog. A plugin can contain one or more packages. ```yaml apiVersion: extensions.backstage.io/v1alpha1 @@ -331,24 +331,24 @@ spec: ### Creating a New Plugin Entry 1. Navigate to your plugin directory -2. Run `npx @red-hat-developer-hub/marketplace-cli init` to generate base entities +2. Run `npx @red-hat-developer-hub/extensions-cli init` to generate base entities 3. Edit the generated YAML to add documentation, categories, etc. -4. Run `npx @red-hat-developer-hub/marketplace-cli verify` to validate +4. Run `npx @red-hat-developer-hub/extensions-cli verify` to validate ### Generating Entries from RHDH 1. Locate your `dynamic-plugins.default.yaml` -2. Run `npx @red-hat-developer-hub/marketplace-cli generate -p -o ./entities --namespace rhdh` +2. Run `npx @red-hat-developer-hub/extensions-cli generate -p -o ./entities --namespace rhdh` 3. Review and enhance generated entities -4. Run `npx @red-hat-developer-hub/marketplace-cli verify` to validate +4. Run `npx @red-hat-developer-hub/extensions-cli verify` to validate ### Auditing Existing Plugins ```bash -npx @red-hat-developer-hub/marketplace-cli export-csv \ +npx @red-hat-developer-hub/extensions-cli export-csv \ -p ./plugins,./packages \ -r \ - -o ./audit/marketplace-inventory + -o ./audit/extensions-inventory ``` --- diff --git a/workspaces/marketplace/docs/tools/json-schema.md b/workspaces/extensions/docs/tools/json-schema.md similarity index 100% rename from workspaces/marketplace/docs/tools/json-schema.md rename to workspaces/extensions/docs/tools/json-schema.md diff --git a/workspaces/marketplace/dynamic-plugins.yaml b/workspaces/extensions/dynamic-plugins.yaml similarity index 79% rename from workspaces/marketplace/dynamic-plugins.yaml rename to workspaces/extensions/dynamic-plugins.yaml index 617f282e15..e74d2a4e88 100644 --- a/workspaces/marketplace/dynamic-plugins.yaml +++ b/workspaces/extensions/dynamic-plugins.yaml @@ -16,25 +16,25 @@ plugins: menuItem: icon: bulkImportIcon text: Bulk import - - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace - disabled: false # DEBSMITA TEST + - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-extensions + disabled: false pluginConfig: dynamicPlugins: frontend: - red-hat-developer-hub.backstage-plugin-marketplace: + red-hat-developer-hub.backstage-plugin-extensions: appIcons: - - name: marketplace - importName: MarketplaceIcon1 + - name: extensions + importName: ExtensionsIcon dynamicRoutes: - - path: /extensions/catalog - importName: DynamicMarketplacePluginRouter + - path: /extensions + importName: DynamicExtensionsPluginRouter mountPoints: - mountPoint: internal.plugins/tab - importName: DynamicMarketplacePluginContent + importName: DynamicExtensionsPluginContent config: - path: marketplace + path: extensions title: Catalog - - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic + - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-extensions-backend-dynamic disabled: false - package: ./dynamic-plugins/dist/backstage-community-plugin-quay disabled: false diff --git a/workspaces/marketplace/examples/all-collections.yaml b/workspaces/extensions/examples/all-collections.yaml similarity index 63% rename from workspaces/marketplace/examples/all-collections.yaml rename to workspaces/extensions/examples/all-collections.yaml index b9e81314c4..18b52b26cd 100644 --- a/workspaces/marketplace/examples/all-collections.yaml +++ b/workspaces/extensions/examples/all-collections.yaml @@ -1,9 +1,9 @@ apiVersion: backstage.io/v1alpha1 kind: Location metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: all-collections - description: A collection of marketplace plugin collections + description: A collection of extensions plugin collections spec: targets: - ./collections/featured.yaml diff --git a/workspaces/marketplace/examples/all-orgs.yaml b/workspaces/extensions/examples/all-orgs.yaml similarity index 55% rename from workspaces/marketplace/examples/all-orgs.yaml rename to workspaces/extensions/examples/all-orgs.yaml index a00a7e3e84..196142b6a3 100644 --- a/workspaces/marketplace/examples/all-orgs.yaml +++ b/workspaces/extensions/examples/all-orgs.yaml @@ -1,9 +1,9 @@ apiVersion: backstage.io/v1alpha1 kind: Location metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: all-orgs - description: A collection of all the marketplace orgs + description: A collection of all the extensions orgs spec: targets: - ./orgs/redhat.yaml diff --git a/workspaces/marketplace/examples/all-packages.yaml b/workspaces/extensions/examples/all-packages.yaml similarity index 71% rename from workspaces/marketplace/examples/all-packages.yaml rename to workspaces/extensions/examples/all-packages.yaml index b0b9e47391..4eacc4fc14 100644 --- a/workspaces/marketplace/examples/all-packages.yaml +++ b/workspaces/extensions/examples/all-packages.yaml @@ -1,9 +1,9 @@ apiVersion: backstage.io/v1alpha1 kind: Location metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: all-packages - description: A collection of all the marketplace packages + description: A collection of all the extensions packages spec: targets: - ./packages/backstage-community-plugin-3scale-backend.yaml @@ -14,5 +14,5 @@ spec: - ./packages/backstage-community-plugin-topology.yaml - ./packages/red-hat-developer-hub-backstage-plugin-bulk-import-backend.yaml - ./packages/red-hat-developer-hub-backstage-plugin-bulk-import.yaml - - ./packages/red-hat-developer-hub-backstage-plugin-marketplace-backend.yaml - - ./packages/red-hat-developer-hub-backstage-plugin-marketplace.yaml + - ./packages/red-hat-developer-hub-backstage-plugin-extensions-backend.yaml + - ./packages/red-hat-developer-hub-backstage-plugin-extensions.yaml diff --git a/workspaces/marketplace/examples/all-plugins.yaml b/workspaces/extensions/examples/all-plugins.yaml similarity index 88% rename from workspaces/marketplace/examples/all-plugins.yaml rename to workspaces/extensions/examples/all-plugins.yaml index fcc4cc4a43..c372d5e8ee 100644 --- a/workspaces/marketplace/examples/all-plugins.yaml +++ b/workspaces/extensions/examples/all-plugins.yaml @@ -1,9 +1,9 @@ apiVersion: backstage.io/v1alpha1 kind: Location metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: all-plugins - description: A collection of all the marketplace plugins + description: A collection of all the extensions plugins spec: targets: - ./plugins/3scale.yaml @@ -13,7 +13,7 @@ spec: - ./plugins/certified-plugin-2-by-vendor-a.yaml - ./plugins/certified-plugin-3-by-vendor-b.yaml - ./plugins/keycloak.yaml - - ./plugins/marketplace.yaml + - ./plugins/extensions.yaml - ./plugins/no-icon-no-description.yaml - ./plugins/pre-installed-false.yaml - ./plugins/pre-installed-true.yaml diff --git a/workspaces/marketplace/examples/collections/featured.yaml b/workspaces/extensions/examples/collections/featured.yaml similarity index 91% rename from workspaces/marketplace/examples/collections/featured.yaml rename to workspaces/extensions/examples/collections/featured.yaml index 4170d17851..2825b57911 100644 --- a/workspaces/marketplace/examples/collections/featured.yaml +++ b/workspaces/extensions/examples/collections/featured.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: PluginCollection metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: featured title: Featured Plugins titleKey: collection.featured.title diff --git a/workspaces/marketplace/examples/collections/kubernetes.yaml b/workspaces/extensions/examples/collections/kubernetes.yaml similarity index 89% rename from workspaces/marketplace/examples/collections/kubernetes.yaml rename to workspaces/extensions/examples/collections/kubernetes.yaml index 3115139bc4..3c872fa0ec 100644 --- a/workspaces/marketplace/examples/collections/kubernetes.yaml +++ b/workspaces/extensions/examples/collections/kubernetes.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: PluginCollection metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: kubernetes title: Kubernetes Plugins description: A set of Kubernetes plugins! :) diff --git a/workspaces/marketplace/examples/orgs/redhat.yaml b/workspaces/extensions/examples/orgs/redhat.yaml similarity index 100% rename from workspaces/marketplace/examples/orgs/redhat.yaml rename to workspaces/extensions/examples/orgs/redhat.yaml diff --git a/workspaces/marketplace/examples/packages/backstage-community-plugin-3scale-backend.yaml b/workspaces/extensions/examples/packages/backstage-community-plugin-3scale-backend.yaml similarity index 97% rename from workspaces/marketplace/examples/packages/backstage-community-plugin-3scale-backend.yaml rename to workspaces/extensions/examples/packages/backstage-community-plugin-3scale-backend.yaml index 71f75df982..0e563442c9 100644 --- a/workspaces/marketplace/examples/packages/backstage-community-plugin-3scale-backend.yaml +++ b/workspaces/extensions/examples/packages/backstage-community-plugin-3scale-backend.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: name: backstage-community-plugin-3scale-backend - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: '@backstage-community/plugin-3scale-backend' links: - url: https://red.ht/rhdh diff --git a/workspaces/marketplace/examples/packages/backstage-community-plugin-acr.yaml b/workspaces/extensions/examples/packages/backstage-community-plugin-acr.yaml similarity index 97% rename from workspaces/marketplace/examples/packages/backstage-community-plugin-acr.yaml rename to workspaces/extensions/examples/packages/backstage-community-plugin-acr.yaml index ad154b3d08..34d18e573d 100644 --- a/workspaces/marketplace/examples/packages/backstage-community-plugin-acr.yaml +++ b/workspaces/extensions/examples/packages/backstage-community-plugin-acr.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: name: backstage-community-plugin-acr - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: '@backstage-community/plugin-acr' links: - url: https://red.ht/rhdh diff --git a/workspaces/marketplace/examples/packages/backstage-community-plugin-catalog-backend-module-keycloak.yaml b/workspaces/extensions/examples/packages/backstage-community-plugin-catalog-backend-module-keycloak.yaml similarity index 97% rename from workspaces/marketplace/examples/packages/backstage-community-plugin-catalog-backend-module-keycloak.yaml rename to workspaces/extensions/examples/packages/backstage-community-plugin-catalog-backend-module-keycloak.yaml index 148918b9bb..6f2ea73878 100644 --- a/workspaces/marketplace/examples/packages/backstage-community-plugin-catalog-backend-module-keycloak.yaml +++ b/workspaces/extensions/examples/packages/backstage-community-plugin-catalog-backend-module-keycloak.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: name: backstage-community-plugin-catalog-backend-module-keycloak - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: '@backstage-community/plugin-catalog-backend-module-keycloak' links: - url: https://red.ht/rhdh diff --git a/workspaces/marketplace/examples/packages/backstage-community-plugin-quay.yaml b/workspaces/extensions/examples/packages/backstage-community-plugin-quay.yaml similarity index 97% rename from workspaces/marketplace/examples/packages/backstage-community-plugin-quay.yaml rename to workspaces/extensions/examples/packages/backstage-community-plugin-quay.yaml index a0c756fc16..8e2d476958 100644 --- a/workspaces/marketplace/examples/packages/backstage-community-plugin-quay.yaml +++ b/workspaces/extensions/examples/packages/backstage-community-plugin-quay.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: name: backstage-community-plugin-quay - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: '@backstage-community/plugin-quay' links: - url: https://red.ht/rhdh diff --git a/workspaces/marketplace/examples/packages/backstage-community-plugin-tekton.yaml b/workspaces/extensions/examples/packages/backstage-community-plugin-tekton.yaml similarity index 97% rename from workspaces/marketplace/examples/packages/backstage-community-plugin-tekton.yaml rename to workspaces/extensions/examples/packages/backstage-community-plugin-tekton.yaml index 6bcfe1caaa..6999a632fa 100644 --- a/workspaces/marketplace/examples/packages/backstage-community-plugin-tekton.yaml +++ b/workspaces/extensions/examples/packages/backstage-community-plugin-tekton.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: name: backstage-community-plugin-tekton - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: '@backstage-community/plugin-tekton' links: - url: https://red.ht/rhdh diff --git a/workspaces/marketplace/examples/packages/backstage-community-plugin-topology.yaml b/workspaces/extensions/examples/packages/backstage-community-plugin-topology.yaml similarity index 97% rename from workspaces/marketplace/examples/packages/backstage-community-plugin-topology.yaml rename to workspaces/extensions/examples/packages/backstage-community-plugin-topology.yaml index 212399c0b8..f514d6189b 100644 --- a/workspaces/marketplace/examples/packages/backstage-community-plugin-topology.yaml +++ b/workspaces/extensions/examples/packages/backstage-community-plugin-topology.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: name: backstage-community-plugin-topology - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: '@backstage-community/plugin-topology' links: - url: https://red.ht/rhdh diff --git a/workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import-backend.yaml b/workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import-backend.yaml similarity index 96% rename from workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import-backend.yaml rename to workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import-backend.yaml index 5fc57d269a..67e93e7b50 100644 --- a/workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import-backend.yaml +++ b/workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import-backend.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: name: red-hat-developer-hub-backstage-plugin-bulk-import-backend - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: '@red-hat-developer-hub/backstage-plugin-bulk-import-backend' links: - url: https://red.ht/rhdh diff --git a/workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import.yaml b/workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import.yaml similarity index 97% rename from workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import.yaml rename to workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import.yaml index 519ac324df..a0049a37e1 100644 --- a/workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import.yaml +++ b/workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-bulk-import.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: name: red-hat-developer-hub-backstage-plugin-bulk-import - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: '@red-hat-developer-hub/backstage-plugin-bulk-import' links: - url: https://red.ht/rhdh diff --git a/workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-marketplace-backend.yaml b/workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-extensions-backend.yaml similarity index 55% rename from workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-marketplace-backend.yaml rename to workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-extensions-backend.yaml index 2955a8d5b7..1321de26ef 100644 --- a/workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-marketplace-backend.yaml +++ b/workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-extensions-backend.yaml @@ -1,23 +1,23 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: - name: red-hat-developer-hub-backstage-plugin-marketplace-backend - namespace: marketplace-plugin-demo - title: '@red-hat-developer-hub/backstage-plugin-marketplace-backend' + name: red-hat-developer-hub-backstage-plugin-extensions-backend + namespace: extensions-plugin-demo + title: '@red-hat-developer-hub/backstage-plugin-extensions-backend' links: - url: https://red.ht/rhdh title: Homepage - url: https://issues.redhat.com/browse/RHIDP title: Bugs - title: Source Code - url: https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic + url: https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-extensions-backend-dynamic annotations: backstage.io/source-location: url - https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic + https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-extensions-backend-dynamic tags: [] spec: - packageName: '@red-hat-developer-hub/backstage-plugin-marketplace-backend' - dynamicArtifact: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic + packageName: '@red-hat-developer-hub/backstage-plugin-extensions-backend' + dynamicArtifact: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-extensions-backend-dynamic version: 0.0.2 backstage: role: backend-plugin @@ -26,5 +26,5 @@ spec: support: tech-preview lifecycle: active partOf: - - red-hat-developer-hub-backstage-plugin-marketplace-backend + - red-hat-developer-hub-backstage-plugin-extensions-backend appConfigExamples: [] diff --git a/workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-marketplace.yaml b/workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-extensions.yaml similarity index 54% rename from workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-marketplace.yaml rename to workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-extensions.yaml index 443e1fe1be..a0d12ff15e 100644 --- a/workspaces/marketplace/examples/packages/red-hat-developer-hub-backstage-plugin-marketplace.yaml +++ b/workspaces/extensions/examples/packages/red-hat-developer-hub-backstage-plugin-extensions.yaml @@ -1,23 +1,23 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Package metadata: - name: red-hat-developer-hub-backstage-plugin-marketplace - namespace: marketplace-plugin-demo - title: '@red-hat-developer-hub/backstage-plugin-marketplace' + name: red-hat-developer-hub-backstage-plugin-extensions + namespace: extensions-plugin-demo + title: '@red-hat-developer-hub/backstage-plugin-extensions' links: - url: https://red.ht/rhdh title: Homepage - url: https://issues.redhat.com/browse/RHIDP title: Bugs - title: Source Code - url: https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace + url: https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-extensions annotations: backstage.io/source-location: url - https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace + https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-extensions tags: [] spec: - packageName: '@red-hat-developer-hub/backstage-plugin-marketplace' - dynamicArtifact: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace + packageName: '@red-hat-developer-hub/backstage-plugin-extensions' + dynamicArtifact: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-extensions version: 0.0.2 backstage: role: frontend-plugin @@ -26,33 +26,33 @@ spec: support: tech-preview lifecycle: active partOf: - - red-hat-developer-hub-backstage-plugin-marketplace + - red-hat-developer-hub-backstage-plugin-extensions appConfigExamples: - title: Default configuration content: dynamicPlugins: frontend: - red-hat-developer-hub.backstage-plugin-marketplace: + red-hat-developer-hub.backstage-plugin-extensions: appIcons: - - name: marketplace - importName: MarketplaceIcon + - name: extensions + importName: ExtensionsIcon dynamicRoutes: - - path: /marketplace - importName: MarketplacePage + - path: /extensions + importName: ExtensionsPage menuItem: - icon: marketplace - text: Marketplace + icon: extensions + text: Extensions mountPoints: - mountPoint: admin.page.plugins/cards - importName: MarketplaceCatalogContent + importName: ExtensionsCatalogContent - title: Another example content: dynamicPlugins: frontend: - red-hat-developer-hub.backstage-plugin-marketplace: {} + red-hat-developer-hub.backstage-plugin-extensions: {} - title: Example with some comments content: |- # a comment dynamicPlugins: frontend: - red-hat-developer-hub.backstage-plugin-marketplace: {} + red-hat-developer-hub.backstage-plugin-extensions: {} diff --git a/workspaces/marketplace/examples/plugins/3scale.yaml b/workspaces/extensions/examples/plugins/3scale.yaml similarity index 98% rename from workspaces/marketplace/examples/plugins/3scale.yaml rename to workspaces/extensions/examples/plugins/3scale.yaml index ea357b4277..ea18e6dd10 100644 --- a/workspaces/marketplace/examples/plugins/3scale.yaml +++ b/workspaces/extensions/examples/plugins/3scale.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: 3scale title: APIs with 3scale description: Synchronize 3scale content into the Backstage catalog. diff --git a/workspaces/marketplace/examples/plugins/acr.yaml b/workspaces/extensions/examples/plugins/acr.yaml similarity index 99% rename from workspaces/marketplace/examples/plugins/acr.yaml rename to workspaces/extensions/examples/plugins/acr.yaml index d278bdba13..ed4e91dab3 100644 --- a/workspaces/marketplace/examples/plugins/acr.yaml +++ b/workspaces/extensions/examples/plugins/acr.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: acr title: Container Image Registry for ACR description: View container image details from Azure Container Registry in Backstage. diff --git a/workspaces/marketplace/examples/plugins/bulk-import.yaml b/workspaces/extensions/examples/plugins/bulk-import.yaml similarity index 98% rename from workspaces/marketplace/examples/plugins/bulk-import.yaml rename to workspaces/extensions/examples/plugins/bulk-import.yaml index bbd0cd33a9..d42c5f1b0a 100644 --- a/workspaces/marketplace/examples/plugins/bulk-import.yaml +++ b/workspaces/extensions/examples/plugins/bulk-import.yaml @@ -1,9 +1,9 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/redhat-developer/rhdh-plugins/refs/heads/main/workspaces/marketplace/json-schema/plugins.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/redhat-developer/rhdh-plugins/refs/heads/main/workspaces/extensions/json-schema/plugins.json apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: name: bulk-import - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo title: Bulk Import description: | With this plugin you can import multiple code repositories into your software catalog at once. The plugin provides diff --git a/workspaces/marketplace/examples/plugins/certified-plugin-1-by-vendor-a.yaml b/workspaces/extensions/examples/plugins/certified-plugin-1-by-vendor-a.yaml similarity index 91% rename from workspaces/marketplace/examples/plugins/certified-plugin-1-by-vendor-a.yaml rename to workspaces/extensions/examples/plugins/certified-plugin-1-by-vendor-a.yaml index 68e139e765..e948602aca 100644 --- a/workspaces/marketplace/examples/plugins/certified-plugin-1-by-vendor-a.yaml +++ b/workspaces/extensions/examples/plugins/certified-plugin-1-by-vendor-a.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: certified-plugin-1-by-vendor-a title: Certified Plugin 1 by Vendor A description: This is a certified plugin example diff --git a/workspaces/marketplace/examples/plugins/certified-plugin-2-by-vendor-a.yaml b/workspaces/extensions/examples/plugins/certified-plugin-2-by-vendor-a.yaml similarity index 91% rename from workspaces/marketplace/examples/plugins/certified-plugin-2-by-vendor-a.yaml rename to workspaces/extensions/examples/plugins/certified-plugin-2-by-vendor-a.yaml index a8283b3044..7e8881014f 100644 --- a/workspaces/marketplace/examples/plugins/certified-plugin-2-by-vendor-a.yaml +++ b/workspaces/extensions/examples/plugins/certified-plugin-2-by-vendor-a.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: certified-plugin-1-by-vendor-a title: Certified Plugin 2 by Vendor A description: This is a certified plugin example diff --git a/workspaces/marketplace/examples/plugins/certified-plugin-3-by-vendor-b.yaml b/workspaces/extensions/examples/plugins/certified-plugin-3-by-vendor-b.yaml similarity index 91% rename from workspaces/marketplace/examples/plugins/certified-plugin-3-by-vendor-b.yaml rename to workspaces/extensions/examples/plugins/certified-plugin-3-by-vendor-b.yaml index e4b2e65a02..bbb31d060b 100644 --- a/workspaces/marketplace/examples/plugins/certified-plugin-3-by-vendor-b.yaml +++ b/workspaces/extensions/examples/plugins/certified-plugin-3-by-vendor-b.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: certified-plugin-3-by-vendor-b title: Certified Plugin 3 by Vendor B description: This is a certified plugin example diff --git a/workspaces/marketplace/examples/plugins/marketplace.yaml b/workspaces/extensions/examples/plugins/extensions.yaml similarity index 57% rename from workspaces/marketplace/examples/plugins/marketplace.yaml rename to workspaces/extensions/examples/plugins/extensions.yaml index 1c3726387b..97bb9c6cb6 100644 --- a/workspaces/marketplace/examples/plugins/marketplace.yaml +++ b/workspaces/extensions/examples/plugins/extensions.yaml @@ -2,12 +2,12 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo - name: marketplace - title: Marketplace - description: The Marketplace plugin allows you to discover and install plugins in Backstage. + namespace: extensions-plugin-demo + name: extensions + title: Extensions + description: The Extensions plugin allows you to discover and install plugins in Backstage. tags: - - marketplace + - extensions - catalog annotations: extensions.backstage.io/pre-installed: 'true' @@ -23,5 +23,5 @@ spec: installation: todo packages: # for testing purposes, we are using two different package references here - - marketplace-plugin-demo/red-hat-developer-hub-backstage-plugin-marketplace - - package:marketplace-plugin-demo/red-hat-developer-hub-backstage-plugin-marketplace-backend + - extensions-plugin-demo/red-hat-developer-hub-backstage-plugin-extensions + - package:extensions-plugin-demo/red-hat-developer-hub-backstage-plugin-extensions-backend diff --git a/workspaces/marketplace/examples/plugins/keycloak.yaml b/workspaces/extensions/examples/plugins/keycloak.yaml similarity index 99% rename from workspaces/marketplace/examples/plugins/keycloak.yaml rename to workspaces/extensions/examples/plugins/keycloak.yaml index 1bab3702d9..a378215c9c 100644 --- a/workspaces/marketplace/examples/plugins/keycloak.yaml +++ b/workspaces/extensions/examples/plugins/keycloak.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: keycloak title: Authentication and Authorization with Keycloak description: Load users and groups from Keycloak, enabling use of multiple authentication providers to be applied to Backstage entities. diff --git a/workspaces/marketplace/examples/plugins/no-icon-no-description.yaml b/workspaces/extensions/examples/plugins/no-icon-no-description.yaml similarity index 89% rename from workspaces/marketplace/examples/plugins/no-icon-no-description.yaml rename to workspaces/extensions/examples/plugins/no-icon-no-description.yaml index c22e2bb260..a255b9dd2b 100644 --- a/workspaces/marketplace/examples/plugins/no-icon-no-description.yaml +++ b/workspaces/extensions/examples/plugins/no-icon-no-description.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: no-icon-no-description title: No Icon No Description annotations: diff --git a/workspaces/marketplace/examples/plugins/pre-installed-false.yaml b/workspaces/extensions/examples/plugins/pre-installed-false.yaml similarity index 91% rename from workspaces/marketplace/examples/plugins/pre-installed-false.yaml rename to workspaces/extensions/examples/plugins/pre-installed-false.yaml index f3f6ea8942..92db1f59d2 100644 --- a/workspaces/marketplace/examples/plugins/pre-installed-false.yaml +++ b/workspaces/extensions/examples/plugins/pre-installed-false.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: pre-installed-false title: Pre-installed False description: Pre-installed false means that the YAML is NOT bundled with RHDH and this means this IS a custom plugin. diff --git a/workspaces/marketplace/examples/plugins/pre-installed-true.yaml b/workspaces/extensions/examples/plugins/pre-installed-true.yaml similarity index 91% rename from workspaces/marketplace/examples/plugins/pre-installed-true.yaml rename to workspaces/extensions/examples/plugins/pre-installed-true.yaml index d668f0f360..9bba060597 100644 --- a/workspaces/marketplace/examples/plugins/pre-installed-true.yaml +++ b/workspaces/extensions/examples/plugins/pre-installed-true.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: pre-installed-true title: Pre-installed True description: Pre-installed true means that the YAML is bundled with RHDH and this means this is NOT a custom plugin. diff --git a/workspaces/marketplace/examples/plugins/pre-installed-undefined.yaml b/workspaces/extensions/examples/plugins/pre-installed-undefined.yaml similarity index 90% rename from workspaces/marketplace/examples/plugins/pre-installed-undefined.yaml rename to workspaces/extensions/examples/plugins/pre-installed-undefined.yaml index f9a1337e72..b7f763f697 100644 --- a/workspaces/marketplace/examples/plugins/pre-installed-undefined.yaml +++ b/workspaces/extensions/examples/plugins/pre-installed-undefined.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: pre-installed-undefined title: Pre-installed Undefined description: Pre-installed undefined means that the YAML is NOT bundled with RHDH and this means this IS a custom plugin. diff --git a/workspaces/marketplace/examples/plugins/quay.yaml b/workspaces/extensions/examples/plugins/quay.yaml similarity index 99% rename from workspaces/marketplace/examples/plugins/quay.yaml rename to workspaces/extensions/examples/plugins/quay.yaml index 23ad1ade8f..758cff5729 100644 --- a/workspaces/marketplace/examples/plugins/quay.yaml +++ b/workspaces/extensions/examples/plugins/quay.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: quay title: Container Image Registry for Quay description: View container image details from Quay in Backstage. diff --git a/workspaces/marketplace/examples/plugins/search.yaml b/workspaces/extensions/examples/plugins/search.yaml similarity index 94% rename from workspaces/marketplace/examples/plugins/search.yaml rename to workspaces/extensions/examples/plugins/search.yaml index 259d7c5e7d..059c5a4d02 100644 --- a/workspaces/marketplace/examples/plugins/search.yaml +++ b/workspaces/extensions/examples/plugins/search.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: search title: Backstage Search description: Backstage Search lets you find the right information you are looking for in the Backstage ecosystem. diff --git a/workspaces/marketplace/examples/plugins/support-community.yaml b/workspaces/extensions/examples/plugins/support-community.yaml similarity index 90% rename from workspaces/marketplace/examples/plugins/support-community.yaml rename to workspaces/extensions/examples/plugins/support-community.yaml index 9248220d82..dea2225f7c 100644 --- a/workspaces/marketplace/examples/plugins/support-community.yaml +++ b/workspaces/extensions/examples/plugins/support-community.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: support-community title: Support Community annotations: diff --git a/workspaces/marketplace/examples/plugins/support-dev-preview.yaml b/workspaces/extensions/examples/plugins/support-dev-preview.yaml similarity index 90% rename from workspaces/marketplace/examples/plugins/support-dev-preview.yaml rename to workspaces/extensions/examples/plugins/support-dev-preview.yaml index e233a575ad..2da01fc43c 100644 --- a/workspaces/marketplace/examples/plugins/support-dev-preview.yaml +++ b/workspaces/extensions/examples/plugins/support-dev-preview.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: support-dev-preview title: Support Dev Preview annotations: diff --git a/workspaces/marketplace/examples/plugins/support-generally-available.yaml b/workspaces/extensions/examples/plugins/support-generally-available.yaml similarity index 91% rename from workspaces/marketplace/examples/plugins/support-generally-available.yaml rename to workspaces/extensions/examples/plugins/support-generally-available.yaml index f1d545d641..a64d37432e 100644 --- a/workspaces/marketplace/examples/plugins/support-generally-available.yaml +++ b/workspaces/extensions/examples/plugins/support-generally-available.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: support-generally-available title: Support Generally Available annotations: diff --git a/workspaces/marketplace/examples/plugins/support-none.yaml b/workspaces/extensions/examples/plugins/support-none.yaml similarity index 90% rename from workspaces/marketplace/examples/plugins/support-none.yaml rename to workspaces/extensions/examples/plugins/support-none.yaml index 6f51f8443f..7c3621e166 100644 --- a/workspaces/marketplace/examples/plugins/support-none.yaml +++ b/workspaces/extensions/examples/plugins/support-none.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: support-none title: Support None annotations: diff --git a/workspaces/marketplace/examples/plugins/support-string.yaml b/workspaces/extensions/examples/plugins/support-string.yaml similarity index 89% rename from workspaces/marketplace/examples/plugins/support-string.yaml rename to workspaces/extensions/examples/plugins/support-string.yaml index 2277eeee24..050eb925b8 100644 --- a/workspaces/marketplace/examples/plugins/support-string.yaml +++ b/workspaces/extensions/examples/plugins/support-string.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: support-string title: Support String annotations: diff --git a/workspaces/marketplace/examples/plugins/support-tech-preview.yaml b/workspaces/extensions/examples/plugins/support-tech-preview.yaml similarity index 90% rename from workspaces/marketplace/examples/plugins/support-tech-preview.yaml rename to workspaces/extensions/examples/plugins/support-tech-preview.yaml index fb448f8e03..0945cd7dce 100644 --- a/workspaces/marketplace/examples/plugins/support-tech-preview.yaml +++ b/workspaces/extensions/examples/plugins/support-tech-preview.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: support-tech-preview title: Support Tech Preview annotations: diff --git a/workspaces/marketplace/examples/plugins/support-undefined.yaml b/workspaces/extensions/examples/plugins/support-undefined.yaml similarity index 88% rename from workspaces/marketplace/examples/plugins/support-undefined.yaml rename to workspaces/extensions/examples/plugins/support-undefined.yaml index 18f5154333..001eea6e1b 100644 --- a/workspaces/marketplace/examples/plugins/support-undefined.yaml +++ b/workspaces/extensions/examples/plugins/support-undefined.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: support-undefined title: Support undefined annotations: diff --git a/workspaces/marketplace/examples/plugins/support-unknown-level.yaml b/workspaces/extensions/examples/plugins/support-unknown-level.yaml similarity index 91% rename from workspaces/marketplace/examples/plugins/support-unknown-level.yaml rename to workspaces/extensions/examples/plugins/support-unknown-level.yaml index aec70f4987..d4a2f34683 100644 --- a/workspaces/marketplace/examples/plugins/support-unknown-level.yaml +++ b/workspaces/extensions/examples/plugins/support-unknown-level.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: support-unknown-level title: Support Unknown Level annotations: diff --git a/workspaces/marketplace/examples/plugins/tekton.yaml b/workspaces/extensions/examples/plugins/tekton.yaml similarity index 99% rename from workspaces/marketplace/examples/plugins/tekton.yaml rename to workspaces/extensions/examples/plugins/tekton.yaml index 888b024c80..d1941ef761 100644 --- a/workspaces/marketplace/examples/plugins/tekton.yaml +++ b/workspaces/extensions/examples/plugins/tekton.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: tekton title: Pipelines with Tekton description: Easily view Tekton PipelineRun status for your services in Backstage. diff --git a/workspaces/marketplace/examples/plugins/topology.yaml b/workspaces/extensions/examples/plugins/topology.yaml similarity index 99% rename from workspaces/marketplace/examples/plugins/topology.yaml rename to workspaces/extensions/examples/plugins/topology.yaml index 540043ef0c..e1f8cc654e 100644 --- a/workspaces/marketplace/examples/plugins/topology.yaml +++ b/workspaces/extensions/examples/plugins/topology.yaml @@ -2,7 +2,7 @@ apiVersion: extensions.backstage.io/v1alpha1 kind: Plugin metadata: - namespace: marketplace-plugin-demo + namespace: extensions-plugin-demo name: topology title: Application Topology for Kubernetes description: Visualize the deployment status and related resources of your applications deployed on any Kubernetes cluster. diff --git a/workspaces/marketplace/json-schema/collections.json b/workspaces/extensions/json-schema/collections.json similarity index 93% rename from workspaces/marketplace/json-schema/collections.json rename to workspaces/extensions/json-schema/collections.json index 907ecb626a..6a01f4ce2f 100644 --- a/workspaces/marketplace/json-schema/collections.json +++ b/workspaces/extensions/json-schema/collections.json @@ -1,9 +1,9 @@ { "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://extensions.backstage.io/v1alpha1/collections", - "$ref": "#/$defs/MarketplaceCollection", + "$ref": "#/$defs/ExtensionsCollection", "$defs": { - "MarketplaceCollection": { + "ExtensionsCollection": { "type": "object", "additionalProperties": false, "properties": { @@ -17,7 +17,7 @@ "$ref": "#/$defs/EntityMetadata" }, "spec": { - "$ref": "#/$defs/MarketplaceCollectionSpec" + "$ref": "#/$defs/ExtensionsCollectionSpec" } }, "required": ["apiVersion", "kind", "metadata", "spec"] @@ -90,7 +90,7 @@ }, "required": ["title", "url"] }, - "MarketplaceCollectionSpec": { + "ExtensionsCollectionSpec": { "type": "object", "additionalProperties": false, "properties": { diff --git a/workspaces/marketplace/json-schema/packages.json b/workspaces/extensions/json-schema/packages.json similarity index 93% rename from workspaces/marketplace/json-schema/packages.json rename to workspaces/extensions/json-schema/packages.json index 556bdcf761..937ddef696 100644 --- a/workspaces/marketplace/json-schema/packages.json +++ b/workspaces/extensions/json-schema/packages.json @@ -1,9 +1,9 @@ { "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://extensions.backstage.io/v1alpha1/packages", - "$ref": "#/$defs/MarketplacePackage", + "$ref": "#/$defs/ExtensionsPackage", "$defs": { - "MarketplacePackage": { + "ExtensionsPackage": { "type": "object", "additionalProperties": false, "properties": { @@ -17,7 +17,7 @@ "$ref": "#/$defs/EntityMetadata" }, "spec": { - "$ref": "#/$defs/MarketplacePackageSpec" + "$ref": "#/$defs/ExtensionsPackageSpec" } }, "required": ["apiVersion", "kind", "metadata", "spec"] @@ -84,7 +84,7 @@ }, "required": ["title", "url"] }, - "MarketplacePackageSpec": { + "ExtensionsPackageSpec": { "type": "object", "properties": { "packageName": { @@ -159,7 +159,7 @@ "appConfigExamples": { "type": "array", "items": { - "$ref": "#/$defs/MarketplacePackageSpecAppConfigExample" + "$ref": "#/$defs/ExtensionsPackageSpecAppConfigExample" } }, "installStatus": { @@ -168,7 +168,7 @@ }, "required": ["packageName"] }, - "MarketplacePackageSpecAppConfigExample": { + "ExtensionsPackageSpecAppConfigExample": { "type": "object", "additionalProperties": false, "properties": { diff --git a/workspaces/marketplace/json-schema/plugins.json b/workspaces/extensions/json-schema/plugins.json similarity index 94% rename from workspaces/marketplace/json-schema/plugins.json rename to workspaces/extensions/json-schema/plugins.json index 4b2ae736fe..86a1774611 100644 --- a/workspaces/marketplace/json-schema/plugins.json +++ b/workspaces/extensions/json-schema/plugins.json @@ -1,9 +1,9 @@ { "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://extensions.backstage.io/v1alpha1/plugins", - "$ref": "#/$defs/MarketplacePlugin", + "$ref": "#/$defs/ExtensionsPlugin", "$defs": { - "MarketplacePlugin": { + "ExtensionsPlugin": { "type": "object", "additionalProperties": false, "properties": { @@ -17,7 +17,7 @@ "$ref": "#/$defs/EntityMetadata" }, "spec": { - "$ref": "#/$defs/MarketplacePluginSpec" + "$ref": "#/$defs/ExtensionsPluginSpec" } }, "required": ["apiVersion", "kind", "metadata", "spec"] @@ -84,23 +84,23 @@ }, "required": ["title", "url"] }, - "MarketplacePluginSpec": { + "ExtensionsPluginSpec": { "type": "object", "properties": { "icon": { "type": "string" }, "author": { - "$ref": "#/$defs/MarketplaceAuthor" + "$ref": "#/$defs/ExtensionsAuthor" }, "authors": { "type": "array", "items": { - "$ref": "#/$defs/MarketplaceAuthor" + "$ref": "#/$defs/ExtensionsAuthor" } }, "publisher": { - "$ref": "#/$defs/MarketplaceAuthor" + "$ref": "#/$defs/ExtensionsAuthor" }, "categories": { "type": "array", @@ -164,7 +164,7 @@ } } }, - "MarketplaceAuthor": { + "ExtensionsAuthor": { "oneOf": [ { "type": "string" diff --git a/workspaces/marketplace/mkdocs.yaml b/workspaces/extensions/mkdocs.yaml similarity index 100% rename from workspaces/marketplace/mkdocs.yaml rename to workspaces/extensions/mkdocs.yaml diff --git a/workspaces/marketplace/package.json b/workspaces/extensions/package.json similarity index 96% rename from workspaces/marketplace/package.json rename to workspaces/extensions/package.json index 8ada6cbefb..37378ccdcb 100644 --- a/workspaces/marketplace/package.json +++ b/workspaces/extensions/package.json @@ -1,5 +1,5 @@ { - "name": "@internal/marketplace", + "name": "@internal/extensions", "version": "1.0.0", "private": true, "engines": { @@ -37,7 +37,7 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/marketplace" + "directory": "workspaces/extensions" }, "devDependencies": { "@backstage/cli": "^0.34.5", diff --git a/workspaces/marketplace/packages/README.md b/workspaces/extensions/packages/README.md similarity index 100% rename from workspaces/marketplace/packages/README.md rename to workspaces/extensions/packages/README.md diff --git a/workspaces/marketplace/packages/app/.eslintignore b/workspaces/extensions/packages/app/.eslintignore similarity index 100% rename from workspaces/marketplace/packages/app/.eslintignore rename to workspaces/extensions/packages/app/.eslintignore diff --git a/workspaces/marketplace/packages/app/.eslintrc.js b/workspaces/extensions/packages/app/.eslintrc.js similarity index 100% rename from workspaces/marketplace/packages/app/.eslintrc.js rename to workspaces/extensions/packages/app/.eslintrc.js diff --git a/workspaces/marketplace/packages/app/e2e-tests/extensions.test.ts b/workspaces/extensions/packages/app/e2e-tests/extensions.test.ts similarity index 97% rename from workspaces/marketplace/packages/app/e2e-tests/extensions.test.ts rename to workspaces/extensions/packages/app/e2e-tests/extensions.test.ts index 19e719de5e..991c7c15fb 100644 --- a/workspaces/marketplace/packages/app/e2e-tests/extensions.test.ts +++ b/workspaces/extensions/packages/app/e2e-tests/extensions.test.ts @@ -18,12 +18,12 @@ import { test, expect, Page, type BrowserContext } from '@playwright/test'; import { Extensions } from './pages/extensions'; import { runAccessibilityTests } from './utils/accessibility'; import { ExtensionHelper } from './utils/helper'; -import { MarketplaceMessages, getTranslations } from './utils/translations'; +import { ExtensionsMessages, getTranslations } from './utils/translations'; test.describe('Admin > Extensions', () => { let extensions: Extensions; let extensionHelper: ExtensionHelper; - let translations: MarketplaceMessages; + let translations: ExtensionsMessages; let sharedPage: Page; let sharedContext: BrowserContext; @@ -205,10 +205,10 @@ test.describe('Admin > Extensions', () => { test('Verify dev preview badge in extensions', async () => { await extensions.selectSupportTypeFilter(translations.badges.devPreview); - await extensionHelper.verifyHeading('Marketplace'); + await extensionHelper.verifyHeading('Extensions'); await extensions.verifyPluginDetails({ - pluginName: 'Marketplace', + pluginName: 'Extensions', badgeLabel: translations.badges.earlyStageExperimental, badgeText: translations.badges.devPreview, includeTable: true, diff --git a/workspaces/marketplace/packages/app/e2e-tests/pages/extensions.ts b/workspaces/extensions/packages/app/e2e-tests/pages/extensions.ts similarity index 95% rename from workspaces/marketplace/packages/app/e2e-tests/pages/extensions.ts rename to workspaces/extensions/packages/app/e2e-tests/pages/extensions.ts index 463f3f7db1..da3a1e1741 100644 --- a/workspaces/marketplace/packages/app/e2e-tests/pages/extensions.ts +++ b/workspaces/extensions/packages/app/e2e-tests/pages/extensions.ts @@ -16,15 +16,15 @@ import { Page, expect, Locator } from '@playwright/test'; import { ExtensionHelper } from '../utils/helper'; -import type { MarketplaceMessages } from '../utils/translations'; +import type { ExtensionsMessages } from '../utils/translations'; export class Extensions { private page: Page; public badge: Locator; private extensionHelper: ExtensionHelper; - private translations: MarketplaceMessages; + private translations: ExtensionsMessages; - constructor(page: Page, translations: MarketplaceMessages) { + constructor(page: Page, translations: ExtensionsMessages) { this.page = page; this.translations = translations; this.badge = this.page.getByTestId('TaskAltIcon'); @@ -41,7 +41,7 @@ export class Extensions { ]; } - private getCommonHeadingsMarketplace() { + private getCommonHeadingsExtensions() { return [ this.translations.metadata.versions, this.translations.plugin.author, @@ -86,6 +86,7 @@ export class Extensions { await navLink.dispatchEvent('click'); await this.page .getByRole('heading', { name: navText }) + .first() .waitFor({ state: 'visible' }); } @@ -164,10 +165,11 @@ export class Extensions { .getByRole('heading', { name: heading }) .waitFor({ state: 'visible' }); } - } else if (pluginName === 'Marketplace') { - for (const heading of this.getCommonHeadingsMarketplace()) { + } else if (pluginName === 'Extensions') { + for (const heading of this.getCommonHeadingsExtensions()) { await this.page .getByRole('heading', { name: heading }) + .first() .waitFor({ state: 'visible' }); } } diff --git a/workspaces/marketplace/packages/app/e2e-tests/utils/accessibility.ts b/workspaces/extensions/packages/app/e2e-tests/utils/accessibility.ts similarity index 100% rename from workspaces/marketplace/packages/app/e2e-tests/utils/accessibility.ts rename to workspaces/extensions/packages/app/e2e-tests/utils/accessibility.ts diff --git a/workspaces/marketplace/packages/app/e2e-tests/utils/helper.ts b/workspaces/extensions/packages/app/e2e-tests/utils/helper.ts similarity index 96% rename from workspaces/marketplace/packages/app/e2e-tests/utils/helper.ts rename to workspaces/extensions/packages/app/e2e-tests/utils/helper.ts index b6d12b02a7..6a30b6cc39 100644 --- a/workspaces/marketplace/packages/app/e2e-tests/utils/helper.ts +++ b/workspaces/extensions/packages/app/e2e-tests/utils/helper.ts @@ -15,13 +15,13 @@ */ import { Page, expect, Locator } from '@playwright/test'; -import type { MarketplaceMessages } from './translations'; +import type { ExtensionsMessages } from './translations'; export class ExtensionHelper { private page: Page; - private translations: MarketplaceMessages; + private translations: ExtensionsMessages; - constructor(page: Page, translations: MarketplaceMessages) { + constructor(page: Page, translations: ExtensionsMessages) { this.page = page; this.translations = translations; } diff --git a/workspaces/marketplace/packages/app/e2e-tests/utils/translations.ts b/workspaces/extensions/packages/app/e2e-tests/utils/translations.ts similarity index 66% rename from workspaces/marketplace/packages/app/e2e-tests/utils/translations.ts rename to workspaces/extensions/packages/app/e2e-tests/utils/translations.ts index 45600c1fb7..c94c08e556 100644 --- a/workspaces/marketplace/packages/app/e2e-tests/utils/translations.ts +++ b/workspaces/extensions/packages/app/e2e-tests/utils/translations.ts @@ -16,16 +16,16 @@ // These translation files are not exported by the package, so relative imports are necessary for e2e tests /* eslint-disable @backstage/no-relative-monorepo-imports */ -import { marketplaceMessages } from '../../../../plugins/marketplace/src/translations/ref.js'; -import marketplaceTranslationDe from '../../../../plugins/marketplace/src/translations/de.js'; -import marketplaceTranslationFr from '../../../../plugins/marketplace/src/translations/fr.js'; -import marketplaceTranslationEs from '../../../../plugins/marketplace/src/translations/es.js'; -import marketplaceTranslationIt from '../../../../plugins/marketplace/src/translations/it.js'; +import { extensionsMessages } from '../../../../plugins/extensions/src/translations/ref.js'; +import extensionsTranslationDe from '../../../../plugins/extensions/src/translations/de.js'; +import extensionsTranslationFr from '../../../../plugins/extensions/src/translations/fr.js'; +import extensionsTranslationEs from '../../../../plugins/extensions/src/translations/es.js'; +import extensionsTranslationIt from '../../../../plugins/extensions/src/translations/it.js'; /* eslint-enable @backstage/no-relative-monorepo-imports */ -export type MarketplaceMessages = typeof marketplaceMessages; +export type ExtensionsMessages = typeof extensionsMessages; -function transform(messages: typeof marketplaceTranslationDe.messages) { +function transform(messages: typeof extensionsTranslationDe.messages) { const result = Object.keys(messages).reduce((res, key) => { const path = key.split('.'); const lastIndex = path.length - 1; @@ -37,23 +37,23 @@ function transform(messages: typeof marketplaceTranslationDe.messages) { return res; }, {}); - return result as MarketplaceMessages; + return result as ExtensionsMessages; } export function getTranslations(locale: string) { switch (locale) { case 'en': - return marketplaceMessages; + return extensionsMessages; case 'fr': - return transform(marketplaceTranslationFr.messages); + return transform(extensionsTranslationFr.messages); case 'de': - return transform(marketplaceTranslationDe.messages); + return transform(extensionsTranslationDe.messages); case 'es': - return transform(marketplaceTranslationEs.messages); + return transform(extensionsTranslationEs.messages); case 'it': - return transform(marketplaceTranslationIt.messages); + return transform(extensionsTranslationIt.messages); default: - return marketplaceMessages; + return extensionsMessages; } } diff --git a/workspaces/marketplace/packages/app/knip-report.md b/workspaces/extensions/packages/app/knip-report.md similarity index 100% rename from workspaces/marketplace/packages/app/knip-report.md rename to workspaces/extensions/packages/app/knip-report.md diff --git a/workspaces/marketplace/packages/app/package.json b/workspaces/extensions/packages/app/package.json similarity index 95% rename from workspaces/marketplace/packages/app/package.json rename to workspaces/extensions/packages/app/package.json index ecaaa7c4ea..7e8c363794 100644 --- a/workspaces/marketplace/packages/app/package.json +++ b/workspaces/extensions/packages/app/package.json @@ -6,7 +6,7 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/marketplace/packages/app" + "directory": "workspaces/extensions/packages/app" }, "backstage": { "role": "frontend" @@ -47,7 +47,7 @@ "@backstage/ui": "^0.8.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@red-hat-developer-hub/backstage-plugin-marketplace": "workspace:^", + "@red-hat-developer-hub/backstage-plugin-extensions": "workspace:^", "@red-hat-developer-hub/backstage-plugin-theme": "^0.11.0", "react": "^18.0.2", "react-dom": "^18.0.2", diff --git a/workspaces/marketplace/packages/app/public/android-chrome-192x192.png b/workspaces/extensions/packages/app/public/android-chrome-192x192.png similarity index 100% rename from workspaces/marketplace/packages/app/public/android-chrome-192x192.png rename to workspaces/extensions/packages/app/public/android-chrome-192x192.png diff --git a/workspaces/marketplace/packages/app/public/apple-touch-icon.png b/workspaces/extensions/packages/app/public/apple-touch-icon.png similarity index 100% rename from workspaces/marketplace/packages/app/public/apple-touch-icon.png rename to workspaces/extensions/packages/app/public/apple-touch-icon.png diff --git a/workspaces/marketplace/packages/app/public/favicon-16x16.png b/workspaces/extensions/packages/app/public/favicon-16x16.png similarity index 100% rename from workspaces/marketplace/packages/app/public/favicon-16x16.png rename to workspaces/extensions/packages/app/public/favicon-16x16.png diff --git a/workspaces/marketplace/packages/app/public/favicon-32x32.png b/workspaces/extensions/packages/app/public/favicon-32x32.png similarity index 100% rename from workspaces/marketplace/packages/app/public/favicon-32x32.png rename to workspaces/extensions/packages/app/public/favicon-32x32.png diff --git a/workspaces/marketplace/packages/app/public/favicon.ico b/workspaces/extensions/packages/app/public/favicon.ico similarity index 100% rename from workspaces/marketplace/packages/app/public/favicon.ico rename to workspaces/extensions/packages/app/public/favicon.ico diff --git a/workspaces/marketplace/packages/app/public/index.html b/workspaces/extensions/packages/app/public/index.html similarity index 100% rename from workspaces/marketplace/packages/app/public/index.html rename to workspaces/extensions/packages/app/public/index.html diff --git a/workspaces/marketplace/packages/app/public/manifest.json b/workspaces/extensions/packages/app/public/manifest.json similarity index 100% rename from workspaces/marketplace/packages/app/public/manifest.json rename to workspaces/extensions/packages/app/public/manifest.json diff --git a/workspaces/marketplace/packages/app/public/robots.txt b/workspaces/extensions/packages/app/public/robots.txt similarity index 100% rename from workspaces/marketplace/packages/app/public/robots.txt rename to workspaces/extensions/packages/app/public/robots.txt diff --git a/workspaces/marketplace/packages/app/public/safari-pinned-tab.svg b/workspaces/extensions/packages/app/public/safari-pinned-tab.svg similarity index 100% rename from workspaces/marketplace/packages/app/public/safari-pinned-tab.svg rename to workspaces/extensions/packages/app/public/safari-pinned-tab.svg diff --git a/workspaces/marketplace/packages/app/src/App.test.tsx b/workspaces/extensions/packages/app/src/App.test.tsx similarity index 100% rename from workspaces/marketplace/packages/app/src/App.test.tsx rename to workspaces/extensions/packages/app/src/App.test.tsx diff --git a/workspaces/marketplace/packages/app/src/App.tsx b/workspaces/extensions/packages/app/src/App.tsx similarity index 93% rename from workspaces/marketplace/packages/app/src/App.tsx rename to workspaces/extensions/packages/app/src/App.tsx index 9f645df100..ccde735f87 100644 --- a/workspaces/marketplace/packages/app/src/App.tsx +++ b/workspaces/extensions/packages/app/src/App.tsx @@ -52,8 +52,8 @@ import { githubAuthApiRef } from '@backstage/core-plugin-api'; import { getAllThemes } from '@red-hat-developer-hub/backstage-plugin-theme'; -import { DynamicMarketplacePluginRouter as Marketplace } from '@red-hat-developer-hub/backstage-plugin-marketplace'; -import { marketplaceTranslations } from '@red-hat-developer-hub/backstage-plugin-marketplace/alpha'; +import { DynamicExtensionsPluginRouter as Extensions } from '@red-hat-developer-hub/backstage-plugin-extensions'; +import { extensionsTranslations } from '@red-hat-developer-hub/backstage-plugin-extensions/alpha'; import { apis } from './apis'; import { entityPage } from './components/catalog/EntityPage'; @@ -64,7 +64,7 @@ const app = createApp({ apis, __experimentalTranslations: { availableLanguages: ['en', 'de', 'fr', 'es'], - resources: [marketplaceTranslations], + resources: [extensionsTranslations], }, bindRoutes({ bind }) { bind(catalogPlugin.externalRoutes, { @@ -138,7 +138,7 @@ const routes = ( } /> } /> - } /> + } /> ); diff --git a/workspaces/marketplace/packages/app/src/apis.ts b/workspaces/extensions/packages/app/src/apis.ts similarity index 100% rename from workspaces/marketplace/packages/app/src/apis.ts rename to workspaces/extensions/packages/app/src/apis.ts diff --git a/workspaces/marketplace/packages/app/src/components/Root/LogoFull.tsx b/workspaces/extensions/packages/app/src/components/Root/LogoFull.tsx similarity index 100% rename from workspaces/marketplace/packages/app/src/components/Root/LogoFull.tsx rename to workspaces/extensions/packages/app/src/components/Root/LogoFull.tsx diff --git a/workspaces/marketplace/packages/app/src/components/Root/LogoIcon.tsx b/workspaces/extensions/packages/app/src/components/Root/LogoIcon.tsx similarity index 100% rename from workspaces/marketplace/packages/app/src/components/Root/LogoIcon.tsx rename to workspaces/extensions/packages/app/src/components/Root/LogoIcon.tsx diff --git a/workspaces/marketplace/packages/app/src/components/Root/Root.tsx b/workspaces/extensions/packages/app/src/components/Root/Root.tsx similarity index 95% rename from workspaces/marketplace/packages/app/src/components/Root/Root.tsx rename to workspaces/extensions/packages/app/src/components/Root/Root.tsx index dbd7297312..74c2bfd255 100644 --- a/workspaces/marketplace/packages/app/src/components/Root/Root.tsx +++ b/workspaces/extensions/packages/app/src/components/Root/Root.tsx @@ -46,7 +46,7 @@ import SearchIcon from '@material-ui/icons/Search'; import { MyGroupsSidebarItem } from '@backstage/plugin-org'; import GroupIcon from '@material-ui/icons/People'; -import { MarketplaceIcon } from '@red-hat-developer-hub/backstage-plugin-marketplace'; +import { ExtensionsIcon } from '@red-hat-developer-hub/backstage-plugin-extensions'; const useSidebarLogoStyles = makeStyles({ root: { @@ -95,7 +95,7 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( - + {/* End global nav */} diff --git a/workspaces/marketplace/packages/app/src/components/Root/index.ts b/workspaces/extensions/packages/app/src/components/Root/index.ts similarity index 100% rename from workspaces/marketplace/packages/app/src/components/Root/index.ts rename to workspaces/extensions/packages/app/src/components/Root/index.ts diff --git a/workspaces/marketplace/packages/app/src/components/catalog/EntityPage.tsx b/workspaces/extensions/packages/app/src/components/catalog/EntityPage.tsx similarity index 100% rename from workspaces/marketplace/packages/app/src/components/catalog/EntityPage.tsx rename to workspaces/extensions/packages/app/src/components/catalog/EntityPage.tsx diff --git a/workspaces/marketplace/packages/app/src/components/search/SearchPage.tsx b/workspaces/extensions/packages/app/src/components/search/SearchPage.tsx similarity index 100% rename from workspaces/marketplace/packages/app/src/components/search/SearchPage.tsx rename to workspaces/extensions/packages/app/src/components/search/SearchPage.tsx diff --git a/workspaces/marketplace/packages/app/src/index.tsx b/workspaces/extensions/packages/app/src/index.tsx similarity index 100% rename from workspaces/marketplace/packages/app/src/index.tsx rename to workspaces/extensions/packages/app/src/index.tsx diff --git a/workspaces/marketplace/packages/app/src/setupTests.ts b/workspaces/extensions/packages/app/src/setupTests.ts similarity index 100% rename from workspaces/marketplace/packages/app/src/setupTests.ts rename to workspaces/extensions/packages/app/src/setupTests.ts diff --git a/workspaces/marketplace/packages/backend/.eslintrc.js b/workspaces/extensions/packages/backend/.eslintrc.js similarity index 100% rename from workspaces/marketplace/packages/backend/.eslintrc.js rename to workspaces/extensions/packages/backend/.eslintrc.js diff --git a/workspaces/marketplace/packages/backend/README.md b/workspaces/extensions/packages/backend/README.md similarity index 100% rename from workspaces/marketplace/packages/backend/README.md rename to workspaces/extensions/packages/backend/README.md diff --git a/workspaces/marketplace/packages/backend/knip-report.md b/workspaces/extensions/packages/backend/knip-report.md similarity index 100% rename from workspaces/marketplace/packages/backend/knip-report.md rename to workspaces/extensions/packages/backend/knip-report.md diff --git a/workspaces/marketplace/packages/backend/package.json b/workspaces/extensions/packages/backend/package.json similarity index 92% rename from workspaces/marketplace/packages/backend/package.json rename to workspaces/extensions/packages/backend/package.json index 9704d5c531..629c3569e9 100644 --- a/workspaces/marketplace/packages/backend/package.json +++ b/workspaces/extensions/packages/backend/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/marketplace/packages/backend" + "directory": "workspaces/extensions/packages/backend" }, "backstage": { "role": "backend" @@ -46,8 +46,8 @@ "@backstage/plugin-search-backend-module-techdocs": "^0.4.8", "@backstage/plugin-search-backend-node": "^1.3.17", "@backstage/plugin-techdocs-backend": "^2.1.2", - "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace": "workspace:^", - "@red-hat-developer-hub/backstage-plugin-marketplace-backend": "workspace:^", + "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions": "workspace:^", + "@red-hat-developer-hub/backstage-plugin-extensions-backend": "workspace:^", "app": "link:../app", "better-sqlite3": "^9.0.0", "node-gyp": "^10.0.0", diff --git a/workspaces/marketplace/packages/backend/src/index.ts b/workspaces/extensions/packages/backend/src/index.ts similarity index 96% rename from workspaces/marketplace/packages/backend/src/index.ts rename to workspaces/extensions/packages/backend/src/index.ts index 9c9b9854de..778a818d34 100644 --- a/workspaces/marketplace/packages/backend/src/index.ts +++ b/workspaces/extensions/packages/backend/src/index.ts @@ -65,13 +65,13 @@ backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha')); // kubernetes plugin backend.add(import('@backstage/plugin-kubernetes-backend')); -// marketplace +// extensions backend.add( - import('@red-hat-developer-hub/backstage-plugin-marketplace-backend'), + import('@red-hat-developer-hub/backstage-plugin-extensions-backend'), ); backend.add( import( - '@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace' + '@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions' ), ); diff --git a/workspaces/marketplace/packages/cli/.eslintrc.js b/workspaces/extensions/packages/cli/.eslintrc.js similarity index 100% rename from workspaces/marketplace/packages/cli/.eslintrc.js rename to workspaces/extensions/packages/cli/.eslintrc.js diff --git a/workspaces/marketplace/packages/cli/CHANGELOG.md b/workspaces/extensions/packages/cli/CHANGELOG.md similarity index 99% rename from workspaces/marketplace/packages/cli/CHANGELOG.md rename to workspaces/extensions/packages/cli/CHANGELOG.md index 71f1af0964..841684d018 100644 --- a/workspaces/marketplace/packages/cli/CHANGELOG.md +++ b/workspaces/extensions/packages/cli/CHANGELOG.md @@ -1,4 +1,4 @@ -# @red-hat-developer-hub/marketplace-cli +# @red-hat-developer-hub/extensions-cli ## 0.13.2 diff --git a/workspaces/marketplace/packages/cli/bin/marketplace-cli b/workspaces/extensions/packages/cli/bin/extensions-cli similarity index 100% rename from workspaces/marketplace/packages/cli/bin/marketplace-cli rename to workspaces/extensions/packages/cli/bin/extensions-cli diff --git a/workspaces/marketplace/packages/cli/cli-report.md b/workspaces/extensions/packages/cli/cli-report.md similarity index 56% rename from workspaces/marketplace/packages/cli/cli-report.md rename to workspaces/extensions/packages/cli/cli-report.md index 16b8d311d0..850672dd4e 100644 --- a/workspaces/marketplace/packages/cli/cli-report.md +++ b/workspaces/extensions/packages/cli/cli-report.md @@ -1,11 +1,11 @@ -## CLI Report file for "@red-hat-developer-hub/marketplace-cli" +## CLI Report file for "@red-hat-developer-hub/extensions-cli" > Do not edit this file. It is a report generated by `yarn build:api-reports` -### `marketplace-cli` +### `extensions-cli` ``` -Usage: marketplace-cli [options] [command] +Usage: extensions-cli [options] [command] Options: -h, --help @@ -18,10 +18,10 @@ Commands: verify ``` -### `marketplace-cli export-csv` +### `extensions-cli export-csv` ``` -Usage: marketplace-cli export-csv [options] +Usage: extensions-cli export-csv [options] Options: -h, --help @@ -31,10 +31,10 @@ Options: -t, --type [type] ``` -### `marketplace-cli generate` +### `extensions-cli generate` ``` -Usage: marketplace-cli generate [options] +Usage: extensions-cli generate [options] Options: --namespace [namespace] @@ -44,19 +44,19 @@ Options: -p, --default-dynamic-plugins-config [path] ``` -### `marketplace-cli init` +### `extensions-cli init` ``` -Usage: marketplace-cli init [options] +Usage: extensions-cli init [options] Options: -h, --help ``` -### `marketplace-cli verify` +### `extensions-cli verify` ``` -Usage: marketplace-cli verify [options] +Usage: extensions-cli verify [options] Options: -h, --help diff --git a/workspaces/marketplace/packages/cli/knip-report.md b/workspaces/extensions/packages/cli/knip-report.md similarity index 100% rename from workspaces/marketplace/packages/cli/knip-report.md rename to workspaces/extensions/packages/cli/knip-report.md diff --git a/workspaces/marketplace/packages/cli/package.json b/workspaces/extensions/packages/cli/package.json similarity index 77% rename from workspaces/marketplace/packages/cli/package.json rename to workspaces/extensions/packages/cli/package.json index e3f9d49241..f7608ea418 100644 --- a/workspaces/marketplace/packages/cli/package.json +++ b/workspaces/extensions/packages/cli/package.json @@ -1,6 +1,6 @@ { - "name": "@red-hat-developer-hub/marketplace-cli", - "description": "CLI for the Marketplace", + "name": "@red-hat-developer-hub/extensions-cli", + "description": "CLI for the Extensions", "version": "0.13.2", "backstage": { "role": "cli" @@ -9,7 +9,7 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/marketplace/packages/cli" + "directory": "workspaces/extensions/packages/cli" }, "keywords": [ "backstage" @@ -23,7 +23,7 @@ "clean": "backstage-cli package clean", "start": "nodemon --" }, - "bin": "bin/marketplace-cli", + "bin": "bin/extensions-cli", "files": [ "bin", "dist/**/*.js" @@ -33,7 +33,7 @@ "@backstage/cli": "^0.34.5", "@backstage/errors": "^1.2.7", "@backstage/types": "^1.2.2", - "@red-hat-developer-hub/backstage-plugin-marketplace-common": "workspace:^", + "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^", "chalk": "^4.1.2", "commander": "^12.0.0", "fs-extra": "^11.2.0", @@ -43,7 +43,7 @@ }, "nodemonConfig": { "watch": "./src", - "exec": "bin/marketplace-cli", + "exec": "bin/extensions-cli", "ext": "ts" }, "devDependencies": { diff --git a/workspaces/marketplace/packages/cli/src/commands/export-csv/index.ts b/workspaces/extensions/packages/cli/src/commands/export-csv/index.ts similarity index 92% rename from workspaces/marketplace/packages/cli/src/commands/export-csv/index.ts rename to workspaces/extensions/packages/cli/src/commands/export-csv/index.ts index c0dd1d52cd..c08c5cdb3f 100644 --- a/workspaces/marketplace/packages/cli/src/commands/export-csv/index.ts +++ b/workspaces/extensions/packages/cli/src/commands/export-csv/index.ts @@ -16,11 +16,11 @@ import chalk from 'chalk'; import { Entity } from '@backstage/catalog-model'; import { - isMarketplacePackage, - isMarketplacePlugin, - MarketplacePackage, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + isExtensionsPackage, + isExtensionsPlugin, + ExtensionsPackage, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import type { OptionValues } from 'commander'; import fs from 'fs-extra'; import path from 'path'; @@ -135,7 +135,7 @@ const parseYamls = async (yamls: string[], recurse = false) => { const getPackagesOfType = ( packages: string[], - allPackages: Record, + allPackages: Record, types: string[], ): string => { return packages @@ -179,10 +179,10 @@ export default async ({ const yamls = parseYamls(pluginsYamlPath.split(','), recursive); /** A map of all packages */ - const packages: Record = {}; + const packages: Record = {}; - /** The generator for backstage marketplace Packages */ - const packageCSV = new CSVGenerator({ + /** The generator for backstage extensions Packages */ + const packageCSV = new CSVGenerator({ name: yaml => yaml?.metadata?.name, title: yaml => yaml?.metadata?.title, version: yaml => yaml?.spec?.version, @@ -197,8 +197,8 @@ export default async ({ role: yaml => yaml?.spec?.role || yaml?.spec?.backstage?.role, }); - /** The generator for backstage marketplace Plugins */ - const pluginCSV = new CSVGenerator({ + /** The generator for backstage extensions Plugins */ + const pluginCSV = new CSVGenerator({ name: p => p?.metadata?.name, title: p => p?.metadata?.title, author: p => @@ -231,10 +231,10 @@ export default async ({ /** Process each YAML file */ for (const yaml of await yamls) { - if (isMarketplacePackage(yaml)) { + if (isExtensionsPackage(yaml)) { packages[yaml.metadata.name] = yaml; packageCSV.addRow(yaml); - } else if (isMarketplacePlugin(yaml)) { + } else if (isExtensionsPlugin(yaml)) { pluginCSV.addRow(yaml); } } diff --git a/workspaces/marketplace/packages/cli/src/commands/generate/index.ts b/workspaces/extensions/packages/cli/src/commands/generate/index.ts similarity index 95% rename from workspaces/marketplace/packages/cli/src/commands/generate/index.ts rename to workspaces/extensions/packages/cli/src/commands/generate/index.ts index 1f7b9d97b0..da57cd593c 100644 --- a/workspaces/marketplace/packages/cli/src/commands/generate/index.ts +++ b/workspaces/extensions/packages/cli/src/commands/generate/index.ts @@ -20,10 +20,10 @@ import path from 'path'; import yaml from 'yaml'; import { EXTENSIONS_API_VERSION, - MarketplaceKind, - MarketplacePackage, - MarketplacePackageSpecAppConfigExample, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsKind, + ExtensionsPackage, + ExtensionsPackageSpecAppConfigExample, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { EntityLink, LocationEntityV1alpha1 } from '@backstage/catalog-model'; import { DynamicPluginsConfig, @@ -43,7 +43,7 @@ export default async (opts: OptionValues) => { owner?: string; }; - const entities: MarketplacePackage[] = []; + const entities: ExtensionsPackage[] = []; if (defaultDynamicPluginsConfig) { const defaultDynamicPluginsPath = path.resolve(defaultDynamicPluginsConfig); @@ -139,7 +139,7 @@ export default async (opts: OptionValues) => { } // parse config examples - const appConfigExamples: MarketplacePackageSpecAppConfigExample[] = []; + const appConfigExamples: ExtensionsPackageSpecAppConfigExample[] = []; if (plugin.pluginConfig) { appConfigExamples.push({ title: 'Default configuration', @@ -147,9 +147,9 @@ export default async (opts: OptionValues) => { }); } - const entity: MarketplacePackage = { + const entity: ExtensionsPackage = { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { name: entityName(packageJSON.name), namespace: namespace ?? undefined, diff --git a/workspaces/marketplace/packages/cli/src/commands/generate/types.ts b/workspaces/extensions/packages/cli/src/commands/generate/types.ts similarity index 100% rename from workspaces/marketplace/packages/cli/src/commands/generate/types.ts rename to workspaces/extensions/packages/cli/src/commands/generate/types.ts diff --git a/workspaces/marketplace/packages/cli/src/commands/index.ts b/workspaces/extensions/packages/cli/src/commands/index.ts similarity index 83% rename from workspaces/marketplace/packages/cli/src/commands/index.ts rename to workspaces/extensions/packages/cli/src/commands/index.ts index 4b72fd6dfa..35c7802c94 100644 --- a/workspaces/marketplace/packages/cli/src/commands/index.ts +++ b/workspaces/extensions/packages/cli/src/commands/index.ts @@ -25,7 +25,7 @@ export const registerCommands = (program: Command) => { program .command('generate') .description( - 'Generate a Plugin entities for the marketplace. By default, it will output entities to the standard output', + 'Generate a Plugin entities for the extensions. By default, it will output entities to the standard output', ) .option( '-p, --default-dynamic-plugins-config [path]', @@ -45,20 +45,20 @@ export const registerCommands = (program: Command) => { program .command('verify') .description( - 'Verify a set of marketplace entities. By default, it will read entities from the standard input', + 'Verify a set of extensions entities. By default, it will read entities from the standard input', ) .action(lazy(() => import('./verify'), 'default')); program .command('export-csv') - .description('Export a folder of marketplace plugin YAMLs to a CSV file') + .description('Export a folder of extensions plugin YAMLs to a CSV file') .option( '-o, --output-file [path]', 'Path to the output CSV file. By default, it will output to the standard output. When a file is specified, the "csv" file extension will be added automatically', ) .option( '-p, --plugins-yaml-path [path]', - 'Path to the default plugins folder, containing marketplace plugin YAML files. Multiple paths can be provided, separated by commas', + 'Path to the default plugins folder, containing extensions plugin YAML files. Multiple paths can be provided, separated by commas', ) .option( '-r, --recursive', diff --git a/workspaces/marketplace/packages/cli/src/commands/init/index.ts b/workspaces/extensions/packages/cli/src/commands/init/index.ts similarity index 90% rename from workspaces/marketplace/packages/cli/src/commands/init/index.ts rename to workspaces/extensions/packages/cli/src/commands/init/index.ts index 4aa68039ac..70e11392cc 100644 --- a/workspaces/marketplace/packages/cli/src/commands/init/index.ts +++ b/workspaces/extensions/packages/cli/src/commands/init/index.ts @@ -21,10 +21,10 @@ import yaml from 'yaml'; import { EXTENSIONS_API_VERSION, - MarketplaceKind, - MarketplacePackage, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsKind, + ExtensionsPackage, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; export default async function init() { const pluginFolders = await glob.glob('plugins/*/package.json/../'); @@ -87,9 +87,9 @@ export default async function init() { name = name.substring(name.lastIndexOf('/') + 1); } - const plugin: MarketplacePlugin = { + const plugin: ExtensionsPlugin = { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, metadata: { namespace, name, @@ -105,9 +105,9 @@ export default async function init() { if (autoGeneratePackages) { if (answers.packages.includes('frontend')) { - const frontendPackage: MarketplacePackage = { + const frontendPackage: ExtensionsPackage = { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { namespace, name: packageName @@ -127,9 +127,9 @@ export default async function init() { } if (answers.packages.includes('backend')) { - const backendPackage: MarketplacePackage = { + const backendPackage: ExtensionsPackage = { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { namespace, name: `${packageName @@ -154,9 +154,9 @@ export default async function init() { fs.readFileSync(packageJsonPath, { encoding: 'utf8' }), ); - const pkg: MarketplacePackage = { + const pkg: ExtensionsPackage = { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { namespace, name: packageJson.name diff --git a/workspaces/marketplace/packages/cli/src/commands/verify/index.ts b/workspaces/extensions/packages/cli/src/commands/verify/index.ts similarity index 90% rename from workspaces/marketplace/packages/cli/src/commands/verify/index.ts rename to workspaces/extensions/packages/cli/src/commands/verify/index.ts index 230ab8b532..dd2af14f05 100644 --- a/workspaces/marketplace/packages/cli/src/commands/verify/index.ts +++ b/workspaces/extensions/packages/cli/src/commands/verify/index.ts @@ -20,14 +20,14 @@ import { glob } from 'glob'; import yaml from 'yaml'; import { - isMarketplacePackage, - isMarketplacePlugin, - MarketplacePackage, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + isExtensionsPackage, + isExtensionsPlugin, + ExtensionsPackage, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -const packages: Record = {}; -const plugins: Record = {}; +const packages: Record = {}; +const plugins: Record = {}; export default async () => { // TODO use parameter as glob @@ -71,9 +71,9 @@ async function load(filename: string, content: any) { throw new Error(`Expected object, got ${typeof content}`); } - if (isMarketplacePackage(content)) { + if (isExtensionsPackage(content)) { packages[stringifyEntityRef(content)] = content; - } else if (isMarketplacePlugin(content)) { + } else if (isExtensionsPlugin(content)) { plugins[stringifyEntityRef(content)] = content; } else if (isEntity(content)) { console.log( diff --git a/workspaces/marketplace/packages/cli/src/index.test.ts b/workspaces/extensions/packages/cli/src/index.test.ts similarity index 89% rename from workspaces/marketplace/packages/cli/src/index.test.ts rename to workspaces/extensions/packages/cli/src/index.test.ts index ba808fc631..78eb5ca7db 100644 --- a/workspaces/marketplace/packages/cli/src/index.test.ts +++ b/workspaces/extensions/packages/cli/src/index.test.ts @@ -15,10 +15,10 @@ */ const exec = require('child_process'); -describe('marketplace-cli', () => { +describe('extensions-cli', () => { it('should not crash trying to run export-csv', () => { const output = exec.execSync( - '../bin/marketplace-cli export-csv -p ../../../ -r', + '../bin/extensions-cli export-csv -p ../../../ -r', { cwd: __dirname, stdio: 'inherit', diff --git a/workspaces/marketplace/packages/cli/src/index.ts b/workspaces/extensions/packages/cli/src/index.ts similarity index 97% rename from workspaces/marketplace/packages/cli/src/index.ts rename to workspaces/extensions/packages/cli/src/index.ts index 3ae0b4ef68..d83ab50ab9 100644 --- a/workspaces/marketplace/packages/cli/src/index.ts +++ b/workspaces/extensions/packages/cli/src/index.ts @@ -19,7 +19,7 @@ import { exitWithError } from './lib/errors'; import { registerCommands } from './commands'; const main = (argv: string[]) => { - program.name('marketplace-cli'); + program.name('extensions-cli'); registerCommands(program); diff --git a/workspaces/marketplace/packages/cli/src/lib/errors.ts b/workspaces/extensions/packages/cli/src/lib/errors.ts similarity index 100% rename from workspaces/marketplace/packages/cli/src/lib/errors.ts rename to workspaces/extensions/packages/cli/src/lib/errors.ts diff --git a/workspaces/marketplace/packages/cli/src/lib/lazy.ts b/workspaces/extensions/packages/cli/src/lib/lazy.ts similarity index 100% rename from workspaces/marketplace/packages/cli/src/lib/lazy.ts rename to workspaces/extensions/packages/cli/src/lib/lazy.ts diff --git a/workspaces/marketplace/playwright.config.ts b/workspaces/extensions/playwright.config.ts similarity index 100% rename from workspaces/marketplace/playwright.config.ts rename to workspaces/extensions/playwright.config.ts diff --git a/workspaces/marketplace/plugins/README.md b/workspaces/extensions/plugins/README.md similarity index 71% rename from workspaces/marketplace/plugins/README.md rename to workspaces/extensions/plugins/README.md index d7865fdba3..61c29b591b 100644 --- a/workspaces/marketplace/plugins/README.md +++ b/workspaces/extensions/plugins/README.md @@ -6,4 +6,4 @@ separate folder of its own. If you want to create a new plugin here, go to your project root directory, run the command `yarn new`, and follow the on-screen instructions. -You can also check out existing plugins on [the plugin marketplace](https://backstage.io/plugins)! +You can also check out existing plugins on [the plugin extensions catalog](https://backstage.io/plugins)! diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/.eslintrc.js b/workspaces/extensions/plugins/catalog-backend-module-extensions/.eslintrc.js similarity index 100% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/.eslintrc.js rename to workspaces/extensions/plugins/catalog-backend-module-extensions/.eslintrc.js diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/CHANGELOG.md b/workspaces/extensions/plugins/catalog-backend-module-extensions/CHANGELOG.md similarity index 98% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/CHANGELOG.md rename to workspaces/extensions/plugins/catalog-backend-module-extensions/CHANGELOG.md index d909277def..473ebeedab 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/CHANGELOG.md +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/CHANGELOG.md @@ -1,4 +1,4 @@ -# @red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace +# @red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions ## 0.13.2 @@ -146,7 +146,7 @@ ### Minor Changes -- 7aac60c: Introduces `PluginInstallStatusProcessor` to add `spec.installStatus` for Marketplace plugins. Introduces new `installStatus` values: `MarketplacePackageInstallStatus.Disabled` and `MarketplacePluginInstallStatus.Disabled`. +- 7aac60c: Introduces `PluginInstallStatusProcessor` to add `spec.installStatus` for Marketplace plugins. Introduces new `installStatus` values: `ExtensionsPackageInstallStatus.Disabled` and `ExtensionsPluginInstallStatus.Disabled`. ### Patch Changes diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/README.md b/workspaces/extensions/plugins/catalog-backend-module-extensions/README.md similarity index 70% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/README.md rename to workspaces/extensions/plugins/catalog-backend-module-extensions/README.md index fe06bd547a..5adc07fa9f 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/README.md +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/README.md @@ -1,10 +1,10 @@ -# @red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace +# @red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions -This is an extension module to the plugin-catalog-backend plugin, providing new kinds of entity and processors that can be used to ingest marketplace plugin data. +This is an extension module to the plugin-catalog-backend plugin, providing new kinds of entity and processors that can be used to ingest extensions plugin data. ## Getting Started -This marketplace catalog module introduces two new kinds to the software catalog called `Plugin` and `PluginList`. +This extensions catalog module introduces two new kinds to the software catalog called `Plugin` and `PluginList`. ## Installation @@ -12,7 +12,7 @@ This marketplace catalog module introduces two new kinds to the software catalog ```shell # From your Backstage root directory -yarn --cwd packages/backend add @red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace +yarn --cwd packages/backend add @red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions ``` ### Adding the plugin to your packages/backend @@ -20,7 +20,7 @@ yarn --cwd packages/backend add @red-hat-developer-hub/backstage-plugin-catalog- ```typescript backend.add( import( - '@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace' + '@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions' ), ); ``` @@ -35,9 +35,35 @@ catalog: - allow: [Component, System, API, Resource, Location, Plugin, PluginList] ``` +## Configuration + +### Extensions Directory Configuration + +The module looks for extension YAML files in a directory. You can configure a custom directory path, or the module will use fallback directories. + +**Priority order:** + +1. Configured directory (if specified in `extensions.directory`) +2. `opt/app-root/src/dynamic-plugins-root/extensions` directory +3. `opt/app-root/src/dynamic-plugins-root/marketplace` directory +4. `/extensions` directory (filesystem root) +5. `/marketplace` directory (filesystem root) + +**Example configuration:** + +```yaml +extensions: + # Optional: Custom directory path for extension YAML files + # Can be absolute path or relative to the working directory + # If not specified, falls back to: + # - /extensions (filesystem root) + # - /marketplace (filesystem root) + directory: /path/to/custom/extensions +``` + ## Plugin configuration YAML Guide: -This YAML file is used to add marketplace plugin to the Software catalog in your backstage application. +This YAML file is used to add extensions plugin to the Software catalog in your backstage application. ```yaml apiVersion: extensions.backstage.io/v1alpha1 @@ -77,7 +103,7 @@ The YAML file is structured into the following sections: ### PluginList configuration YAML Guide: -This entity allows you to create a curated list of plugins. This YAML file is used to add marketplace `PluginList` to the Software catalog in your backstage application. +This entity allows you to create a curated list of plugins. This YAML file is used to add extensions `PluginList` to the Software catalog in your backstage application. ```yaml apiVersion: extensions.backstage.io/v1alpha1 @@ -109,7 +135,7 @@ The YAML file is structured into the following sections: This module provides different process used to ingest the `plugin` and `pluginList` entity into the software catalog. -- **MarketplacePluginProcessors** - Ingests `Plugin` entity into the catalog. -- **MarketplaceCollectionProcessors** - Ingests `PluginList` entity into the catalog. +- **ExtensionsPluginProcessors** - Ingests `Plugin` entity into the catalog. +- **ExtensionsCollectionProcessors** - Ingests `PluginList` entity into the catalog. - **LocalPluginInstallStatusProcessor** - Add and Update `entity.spec.installStatus` based on the packages installed in backstage workspaces. - **DynamicPluginInstallStatusProcessor** - Add and Update `entity.spec.installStatus` based on the dynamic plugin installed in RHDH. This processor will work only when you have [scalprum-backend](https://github.com/janus-idp/backstage-showcase/tree/main/plugins/scalprum-backend) installed in your backstage instance. diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/__fixtures__/mockData.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/__fixtures__/mockData.ts similarity index 62% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/__fixtures__/mockData.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/__fixtures__/mockData.ts index 387fae0610..ddcae44fd8 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/__fixtures__/mockData.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/__fixtures__/mockData.ts @@ -15,11 +15,11 @@ */ import { - MarketplacePackage, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsPackage, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -export const packageEntity: MarketplacePackage = { +export const packageEntity: ExtensionsPackage = { apiVersion: 'extensions.backstage.io/v1alpha1', kind: 'Package', metadata: { @@ -34,7 +34,7 @@ export const packageEntity: MarketplacePackage = { }, }; -export const pluginEntity: MarketplacePlugin = { +export const pluginEntity: ExtensionsPlugin = { apiVersion: 'extensions.backstage.io/v1alpha1', kind: 'Plugin', metadata: { @@ -55,42 +55,42 @@ export const mockTopologyPackage = { }, }; -export const mockMarketplacePackage = { +export const mockExtensionsPackage = { ...packageEntity, metadata: { - name: 'red-hat-developer-hub-backstage-plugin-marketplace', - namespace: 'marketplace-plugin-demo', + name: 'red-hat-developer-hub-backstage-plugin-extensions', + namespace: 'extensions-plugin-demo', }, spec: { - packageName: '@red-hat-developer-hub/backstage-plugin-marketplace', + packageName: '@red-hat-developer-hub/backstage-plugin-extensions', dynamicArtifact: - './dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic', + './dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-catalog-backend-module-extensions-dynamic', }, }; -export const mockMarketplaceBackendPackage = { +export const mockExtensionsBackendPackage = { ...packageEntity, metadata: { - name: 'red-hat-developer-hub-backstage-plugin-marketplace-backend', - namespace: 'marketplace-plugin-demo', + name: 'red-hat-developer-hub-backstage-plugin-extensions-backend', + namespace: 'extensions-plugin-demo', }, spec: { - packageName: '@red-hat-developer-hub/backstage-plugin-marketplace-backend', + packageName: '@red-hat-developer-hub/backstage-plugin-extensions-backend', dynamicArtifact: - './dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic', + './dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-extensions-backend-dynamic', }, }; -export const mockMarketplacePlugin = { +export const mockExtensionsPlugin = { ...pluginEntity, metadata: { - namespace: 'marketplace-plugin-demo', - name: 'marketplace', + namespace: 'extensions-plugin-demo', + name: 'extensions', }, spec: { packages: [ - 'marketplace-plugin-demo/red-hat-developer-hub-backstage-plugin-marketplace', - 'package:marketplace-plugin-demo/red-hat-developer-hub-backstage-plugin-marketplace-backend', + 'extensions-plugin-demo/red-hat-developer-hub-backstage-plugin-extensions', + 'package:extensions-plugin-demo/red-hat-developer-hub-backstage-plugin-extensions-backend', ], }, }; diff --git a/workspaces/extensions/plugins/catalog-backend-module-extensions/config.d.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/config.d.ts new file mode 100644 index 0000000000..b5fac45032 --- /dev/null +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/config.d.ts @@ -0,0 +1,27 @@ +/* + * Copyright Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + extensions?: { + /** + * Custom directory path for extension YAML files. + * Can be absolute path or relative to the working directory. + * If not specified, falls back to '/extensions' or '/marketplace' directories (filesystem root). + * @visibility backend + */ + directory?: string; + }; +} diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/knip-report.md b/workspaces/extensions/plugins/catalog-backend-module-extensions/knip-report.md similarity index 100% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/knip-report.md rename to workspaces/extensions/plugins/catalog-backend-module-extensions/knip-report.md diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/package.json b/workspaces/extensions/plugins/catalog-backend-module-extensions/package.json similarity index 83% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/package.json rename to workspaces/extensions/plugins/catalog-backend-module-extensions/package.json index 335bca98bd..827d412fa4 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/package.json +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/package.json @@ -1,6 +1,6 @@ { - "name": "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace", - "description": "The marketplace backend module for the catalog plugin.", + "name": "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions", + "description": "The extensions backend module for the catalog plugin.", "version": "0.13.2", "main": "src/index.ts", "types": "src/index.ts", @@ -15,13 +15,13 @@ "pluginId": "catalog", "pluginPackage": "@backstage/plugin-catalog-backend", "pluginPackages": [ - "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace" + "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions" ] }, "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/marketplace/plugins/catalog-backend-module-marketplace" + "directory": "workspaces/extensions/plugins/catalog-backend-module-extensions" }, "scripts": { "start": "backstage-cli package start", @@ -38,10 +38,11 @@ "@backstage/catalog-client": "^1.12.1", "@backstage/catalog-model": "^1.7.6", "@backstage/cli-common": "^0.1.15", + "@backstage/config": "^1.3.6", "@backstage/plugin-catalog-common": "^1.1.7", "@backstage/plugin-catalog-node": "^1.20.0", "@backstage/types": "^1.2.2", - "@red-hat-developer-hub/backstage-plugin-marketplace-common": "workspace:^", + "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^", "find-root": "^1.1.0", "glob": "^8.1.0", "js-yaml": "^4.1.0", diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/report.api.md b/workspaces/extensions/plugins/catalog-backend-module-extensions/report.api.md similarity index 69% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/report.api.md rename to workspaces/extensions/plugins/catalog-backend-module-extensions/report.api.md index fc1597dfbc..502443cbed 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/report.api.md +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/report.api.md @@ -1,4 +1,4 @@ -## API Report File for "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace" +## API Report File for "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). @@ -11,21 +11,22 @@ import type { CatalogApi } from '@backstage/catalog-client'; import { CatalogProcessor } from '@backstage/plugin-catalog-node'; import { CatalogProcessorCache } from '@backstage/plugin-catalog-node'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; +import { Config } from '@backstage/config'; import { DynamicPluginProvider } from '@backstage/backend-dynamic-feature-service'; import { Entity } from '@backstage/catalog-model'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; +import { ExtensionsCollection } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; +import { ExtensionsPackage } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; +import { ExtensionsPlugin } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { LoggerService } from '@backstage/backend-plugin-api'; -import { MarketplaceCollection } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; -import { MarketplacePackage } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; -import { MarketplacePlugin } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; import type { SchedulerService } from '@backstage/backend-plugin-api'; import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api'; // @public (undocumented) export abstract class BaseEntityProvider implements EntityProvider { - constructor(taskRunner: SchedulerServiceTaskRunner); + constructor(taskRunner: SchedulerServiceTaskRunner, config?: Config); // (undocumented) connect(connection: EntityProviderConnection): Promise; // (undocumented) @@ -45,8 +46,9 @@ export type CachedData = { }; // @public (undocumented) -const catalogModuleMarketplace: BackendFeature; -export default catalogModuleMarketplace; +const catalogModuleExtensions: BackendFeature; +export { catalogModuleExtensions } +export default catalogModuleExtensions; // @public (undocumented) export class DynamicPackageInstallStatusProcessor implements CatalogProcessor { @@ -63,24 +65,7 @@ export class DynamicPackageInstallStatusProcessor implements CatalogProcessor { } // @public (undocumented) -export type JsonFileData = { - filePath: string; - content: T; -}; - -// @public (undocumented) -export class LocalPackageInstallStatusProcessor implements CatalogProcessor { - constructor(paths?: string[]); - // (undocumented) - findWorkspacesPath(startPath?: string): string; - // (undocumented) - getProcessorName(): string; - // (undocumented) - preProcessEntity(entity: MarketplacePackage): Promise; -} - -// @public (undocumented) -export class MarketplaceCollectionProcessor implements CatalogProcessor { +export class ExtensionsCollectionProcessor implements CatalogProcessor { // (undocumented) getProcessorName(): string; // (undocumented) @@ -90,7 +75,7 @@ export class MarketplaceCollectionProcessor implements CatalogProcessor { } // @public (undocumented) -export class MarketplaceCollectionProvider extends BaseEntityProvider { +export class ExtensionsCollectionProvider extends BaseEntityProvider { // (undocumented) getKind(): string; // (undocumented) @@ -98,17 +83,17 @@ export class MarketplaceCollectionProvider extends BaseEntityProvider; + postProcessEntity(entity: ExtensionsPackage, _location: LocationSpec, emit: CatalogProcessorEmit): Promise; // (undocumented) validateEntityKind(entity: Entity): Promise; } // @public (undocumented) -export class MarketplacePackageProvider extends BaseEntityProvider { +export class ExtensionsPackageProvider extends BaseEntityProvider { // (undocumented) getKind(): string; // (undocumented) @@ -116,23 +101,58 @@ export class MarketplacePackageProvider extends BaseEntityProvider; + postProcessEntity(entity: ExtensionsPlugin, _location: LocationSpec, emit: CatalogProcessorEmit): Promise; // (undocumented) validateEntityKind(entity: Entity): Promise; } // @public (undocumented) -export class MarketplacePluginProvider extends BaseEntityProvider { +export class ExtensionsPluginProvider extends BaseEntityProvider { // (undocumented) getKind(): string; // (undocumented) getProviderName(): string; } +// @public (undocumented) +export type JsonFileData = { + filePath: string; + content: T; +}; + +// @public (undocumented) +export class LocalPackageInstallStatusProcessor implements CatalogProcessor { + constructor(paths?: string[]); + // (undocumented) + findWorkspacesPath(startPath?: string): string; + // (undocumented) + getProcessorName(): string; + // (undocumented) + preProcessEntity(entity: ExtensionsPackage): Promise; +} + +// @public @deprecated (undocumented) +export const MarketplaceCollectionProcessor: typeof ExtensionsCollectionProcessor; + +// @public @deprecated (undocumented) +export const MarketplaceCollectionProvider: typeof ExtensionsCollectionProvider; + +// @public @deprecated (undocumented) +export const MarketplacePackageProcessor: typeof ExtensionsPackageProcessor; + +// @public @deprecated (undocumented) +export const MarketplacePackageProvider: typeof ExtensionsPackageProvider; + +// @public @deprecated (undocumented) +export const MarketplacePluginProcessor: typeof ExtensionsPluginProcessor; + +// @public @deprecated (undocumented) +export const MarketplacePluginProvider: typeof ExtensionsPluginProvider; + // @public (undocumented) export class PluginInstallStatusProcessor implements CatalogProcessor { constructor(deps: { diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/index.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/index.ts similarity index 82% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/index.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/index.ts index 78d8ce3edd..ea4bd9b3f8 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/index.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/index.ts @@ -15,12 +15,15 @@ */ /** - * The marketplace backend module for the catalog plugin. + * The extensions backend module for the catalog plugin. * * @packageDocumentation */ -export { catalogModuleMarketplace as default } from './module'; +export { + catalogModuleExtensions as default, + catalogModuleExtensions, +} from './module'; export * from './processors'; export * from './providers'; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/module.test.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/module.test.ts similarity index 93% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/module.test.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/module.test.ts index 3f4bbd622c..0574fd10a1 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/module.test.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/module.test.ts @@ -15,12 +15,12 @@ */ import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; -import { catalogModuleMarketplace } from './module'; +import { catalogModuleExtensions } from './module'; import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; import { dynamicPluginsFeatureLoader } from '@backstage/backend-dynamic-feature-service'; import type { SchedulerServiceTaskScheduleDefinition } from '@backstage/backend-plugin-api'; -describe('catalogModuleMarketplace', () => { +describe('catalogModuleExtensions', () => { it('should register the extension point', async () => { const runner = jest.fn(); let usedSchedule: SchedulerServiceTaskScheduleDefinition | undefined; @@ -38,7 +38,7 @@ describe('catalogModuleMarketplace', () => { await startTestBackend({ extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], features: [ - catalogModuleMarketplace, + catalogModuleExtensions, dynamicPluginsFeatureLoader(), scheduler.factory, ], diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/module.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/module.ts similarity index 71% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/module.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/module.ts index 4704c2baed..9b6d8b230f 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/module.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/module.ts @@ -20,13 +20,13 @@ import { } from '@backstage/backend-plugin-api'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; -import { MarketplacePluginProcessor } from './processors/MarketplacePluginProcessor'; -import { MarketplaceCollectionProcessor } from './processors/MarketplaceCollectionProcessor'; +import { ExtensionsPluginProcessor } from './processors/ExtensionsPluginProcessor'; +import { ExtensionsCollectionProcessor } from './processors/ExtensionsCollectionProcessor'; import { DynamicPackageInstallStatusProcessor } from './processors/DynamicPackageInstallStatusProcessor'; import { LocalPackageInstallStatusProcessor } from './processors/LocalPackageInstallStatusProcessor'; -import { MarketplacePackageProcessor } from './processors/MarketplacePackageProcessor'; -import { MarketplacePluginProvider } from './providers/MarketplacePluginProvider'; -import { MarketplacePackageProvider } from './providers/MarketplacePackageProvider'; +import { ExtensionsPackageProcessor } from './processors/ExtensionsPackageProcessor'; +import { ExtensionsPluginProvider } from './providers/ExtensionsPluginProvider'; +import { ExtensionsPackageProvider } from './providers/ExtensionsPackageProvider'; import { dynamicPluginsServiceRef } from '@backstage/backend-dynamic-feature-service'; import { CatalogClient } from '@backstage/catalog-client'; import { PluginInstallStatusProcessor } from './processors/PluginInstallStatusProcessor'; @@ -34,7 +34,7 @@ import { PluginInstallStatusProcessor } from './processors/PluginInstallStatusPr /** * @public */ -export const catalogModuleMarketplace = createBackendModule({ +export const catalogModuleExtensions = createBackendModule({ pluginId: 'catalog', moduleId: 'extensions', register(reg) { @@ -47,6 +47,7 @@ export const catalogModuleMarketplace = createBackendModule({ pluginProvider: dynamicPluginsServiceRef, cache: coreServices.cache, scheduler: coreServices.scheduler, + config: coreServices.rootConfig, }, async init({ logger, @@ -56,10 +57,9 @@ export const catalogModuleMarketplace = createBackendModule({ pluginProvider, cache, scheduler, + config, }) { - logger.info( - 'Adding Marketplace providers and processors to catalog...', - ); + logger.info('Adding Extensions providers and processors to catalog...'); const taskRunner = scheduler.createScheduledTaskRunner({ frequency: { minutes: 30 }, timeout: { minutes: 10 }, @@ -72,16 +72,18 @@ export const catalogModuleMarketplace = createBackendModule({ const catalogApi = new CatalogClient({ discoveryApi: discovery }); - catalog.addEntityProvider(new MarketplacePackageProvider(taskRunner)); catalog.addEntityProvider( - new MarketplacePluginProvider(delayedTaskRunner), + new ExtensionsPackageProvider(taskRunner, config), + ); + catalog.addEntityProvider( + new ExtensionsPluginProvider(delayedTaskRunner, config), ); // Disabling the collection provider as collections/all.yaml is already commented in RHDH 1.5 image. // catalog.addEntityProvider( - // new MarketplaceCollectionProvider(taskRunner), + // new ExtensionsCollectionProvider(taskRunner, config), // ); - catalog.addProcessor(new MarketplacePluginProcessor()); - catalog.addProcessor(new MarketplaceCollectionProcessor()); + catalog.addProcessor(new ExtensionsPluginProcessor()); + catalog.addProcessor(new ExtensionsCollectionProcessor()); catalog.addProcessor(new LocalPackageInstallStatusProcessor()); catalog.addProcessor( new DynamicPackageInstallStatusProcessor({ @@ -89,7 +91,7 @@ export const catalogModuleMarketplace = createBackendModule({ pluginProvider, }), ); - catalog.addProcessor(new MarketplacePackageProcessor()); + catalog.addProcessor(new ExtensionsPackageProcessor()); catalog.addProcessor( new PluginInstallStatusProcessor({ auth, @@ -103,3 +105,9 @@ export const catalogModuleMarketplace = createBackendModule({ }); }, }); + +/** + * @public + * @deprecated Use catalogModuleExtensions instead + */ +export const catalogModuleMarketplace = catalogModuleExtensions; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/DynamicPackageInstallStatusProcessor.test.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/DynamicPackageInstallStatusProcessor.test.ts similarity index 92% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/DynamicPackageInstallStatusProcessor.test.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/DynamicPackageInstallStatusProcessor.test.ts index eb6a49f404..ecd93ba1c7 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/DynamicPackageInstallStatusProcessor.test.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/DynamicPackageInstallStatusProcessor.test.ts @@ -15,7 +15,7 @@ */ import { CatalogProcessorCache } from '@backstage/plugin-catalog-node'; -import { MarketplacePackageInstallStatus } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPackageInstallStatus } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { DynamicPackageInstallStatusProcessor } from './DynamicPackageInstallStatusProcessor'; import { DynamicPluginManager } from '@backstage/backend-dynamic-feature-service'; @@ -140,16 +140,15 @@ describe('DynamicPackageInstallStatusProcessor', () => { it.each([ { description: 'frontend wrapper name', - packageName: 'red-hat-developer-hub-backstage-plugin-marketplace', - entityPackageName: - '@red-hat-developer-hub/backstage-plugin-marketplace', + packageName: 'red-hat-developer-hub-backstage-plugin-extensions', + entityPackageName: '@red-hat-developer-hub/backstage-plugin-extensions', }, { description: 'backend wrapper name', packageName: - 'red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic', + 'red-hat-developer-hub-backstage-plugin-extensions-backend-dynamic', entityPackageName: - '@red-hat-developer-hub/backstage-plugin-marketplace-backend', + '@red-hat-developer-hub/backstage-plugin-extensions-backend', }, { description: 'frontend export-dynamic-plugin name', @@ -181,7 +180,7 @@ describe('DynamicPackageInstallStatusProcessor', () => { ); expect(entity.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.Installed, + ExtensionsPackageInstallStatus.Installed, ); }, ); @@ -212,7 +211,7 @@ describe('DynamicPackageInstallStatusProcessor', () => { ...packageEntity, spec: { ...packageEntity.spec, - dynamicArtifact: '"@marketplace-demo/test-plugin@1.0.0"', + dynamicArtifact: '"@extensions-demo/test-plugin@1.0.0"', }, }; const result = await processor.preProcessEntity( @@ -223,7 +222,7 @@ describe('DynamicPackageInstallStatusProcessor', () => { cache, ); expect(result.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.NotInstalled, + ExtensionsPackageInstallStatus.NotInstalled, ); }); @@ -248,7 +247,7 @@ describe('DynamicPackageInstallStatusProcessor', () => { cache, ); expect(result.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.Disabled, + ExtensionsPackageInstallStatus.Disabled, ); }); @@ -273,7 +272,7 @@ describe('DynamicPackageInstallStatusProcessor', () => { cache, ); expect(result.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.UpdateAvailable, + ExtensionsPackageInstallStatus.UpdateAvailable, ); }); diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/DynamicPackageInstallStatusProcessor.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/DynamicPackageInstallStatusProcessor.ts similarity index 76% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/DynamicPackageInstallStatusProcessor.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/DynamicPackageInstallStatusProcessor.ts index 4645067fa1..0c3a0b5768 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/DynamicPackageInstallStatusProcessor.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/DynamicPackageInstallStatusProcessor.ts @@ -23,10 +23,10 @@ import { } from '@backstage/plugin-catalog-node'; import { durationToMilliseconds } from '@backstage/types'; import { - MarketplacePackage, - MarketplacePackageInstallStatus, - isMarketplacePackage, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsPackage, + ExtensionsPackageInstallStatus, + isExtensionsPackage, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { DynamicPluginProvider } from '@backstage/backend-dynamic-feature-service'; import { LoggerService } from '@backstage/backend-plugin-api'; import semver from 'semver'; @@ -100,50 +100,50 @@ export class DynamicPackageInstallStatusProcessor implements CatalogProcessor { } private getPackageInstallStatus( - marketplacePackage: MarketplacePackage, + extensionsPackage: ExtensionsPackage, installedPackages: Plugins, - ): MarketplacePackageInstallStatus | undefined { - if (!marketplacePackage.spec?.packageName) { + ): ExtensionsPackageInstallStatus | undefined { + if (!extensionsPackage.spec?.packageName) { this.logger.debug( - `Entity ${stringifyEntityRef(marketplacePackage)} is missing 'spec.packageName', unable to determine 'spec.installStatus'`, + `Entity ${stringifyEntityRef(extensionsPackage)} is missing 'spec.packageName', unable to determine 'spec.installStatus'`, ); return undefined; } - const versionRange = marketplacePackage.spec.version; + const versionRange = extensionsPackage.spec.version; // account for possible names - const nameOptions = [marketplacePackage.spec.packageName]; - const transformedName = marketplacePackage.spec.packageName + const nameOptions = [extensionsPackage.spec.packageName]; + const transformedName = extensionsPackage.spec.packageName .replace('@', '') .replace(/\//g, '-'); nameOptions.push(transformedName); - if (!marketplacePackage.spec.packageName.includes('dynamic')) { + if (!extensionsPackage.spec.packageName.includes('dynamic')) { nameOptions.push(`${transformedName}-dynamic`); - nameOptions.push(`${marketplacePackage.spec.packageName}-dynamic`); + nameOptions.push(`${extensionsPackage.spec.packageName}-dynamic`); } for (const packageName of nameOptions) { if (packageName in installedPackages) { const installedVersion = installedPackages[packageName]; if (!versionRange || semver.satisfies(installedVersion, versionRange)) { - return MarketplacePackageInstallStatus.Installed; + return ExtensionsPackageInstallStatus.Installed; } - return MarketplacePackageInstallStatus.UpdateAvailable; + return ExtensionsPackageInstallStatus.UpdateAvailable; } } - if (!marketplacePackage.spec?.dynamicArtifact) { + if (!extensionsPackage.spec?.dynamicArtifact) { this.logger.debug( - `Entity ${stringifyEntityRef(marketplacePackage)} is missing 'spec.dynamicArtifact', unable to determine 'spec.installStatus'`, + `Entity ${stringifyEntityRef(extensionsPackage)} is missing 'spec.dynamicArtifact', unable to determine 'spec.installStatus'`, ); return undefined; } - if (marketplacePackage.spec.dynamicArtifact.startsWith('./')) { - return MarketplacePackageInstallStatus.Disabled; + if (extensionsPackage.spec.dynamicArtifact.startsWith('./')) { + return ExtensionsPackageInstallStatus.Disabled; } - return MarketplacePackageInstallStatus.NotInstalled; + return ExtensionsPackageInstallStatus.NotInstalled; } async preProcessEntity( @@ -153,7 +153,7 @@ export class DynamicPackageInstallStatusProcessor implements CatalogProcessor { _originLocation: LocationSpec, cache: CatalogProcessorCache, ): Promise { - if (isMarketplacePackage(entity)) { + if (isExtensionsPackage(entity)) { if (!entity.spec?.packageName) { this.logger.debug( `Entity ${stringifyEntityRef(entity)} is missing 'spec.packageName', unable to determine 'spec.installStatus'`, @@ -164,7 +164,7 @@ export class DynamicPackageInstallStatusProcessor implements CatalogProcessor { if ( !entity.spec?.installStatus || entity.spec.installStatus === - MarketplacePackageInstallStatus.NotInstalled + ExtensionsPackageInstallStatus.NotInstalled ) { const entityRef = stringifyEntityRef(entity); const data = await this.getCachedPlugins(cache, entityRef); diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplaceCollectionProcessor.test.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsCollectionProcessor.test.ts similarity index 79% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplaceCollectionProcessor.test.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsCollectionProcessor.test.ts index 2e90b59539..086ff688c3 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplaceCollectionProcessor.test.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsCollectionProcessor.test.ts @@ -15,15 +15,15 @@ */ import { - MarketplaceCollection, - MarketplaceKind, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsCollection, + ExtensionsKind, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { MarketplaceCollectionProcessor } from './MarketplaceCollectionProcessor'; +import { ExtensionsCollectionProcessor } from './ExtensionsCollectionProcessor'; -const testCollection: MarketplaceCollection = { +const testCollection: ExtensionsCollection = { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, metadata: { name: 'test-collection', title: 'Test Collection', @@ -58,20 +58,20 @@ const getRelation = ( }, }); -describe('MarketplaceCollectionProcessor', () => { +describe('ExtensionsCollectionProcessor', () => { describe('getProcessorName', () => { it('should return processor name', () => { - const processor = new MarketplaceCollectionProcessor(); + const processor = new ExtensionsCollectionProcessor(); expect(processor.getProcessorName()).toBe( - 'MarketplaceCollectionProcessor', + 'ExtensionsCollectionProcessor', ); }); }); describe('validateEntityKind', () => { it('should return validate the entity', async () => { - const processor = new MarketplaceCollectionProcessor(); + const processor = new ExtensionsCollectionProcessor(); expect( await processor.validateEntityKind({ ...testCollection, kind: 'test' }), @@ -82,7 +82,7 @@ describe('MarketplaceCollectionProcessor', () => { describe('postProcessEntity', () => { it('should emits bi-directional relations for each plugin', async () => { - const processor = new MarketplaceCollectionProcessor(); + const processor = new ExtensionsCollectionProcessor(); const emit = jest.fn(); await processor.postProcessEntity(testCollection, null as any, emit); @@ -91,43 +91,43 @@ describe('MarketplaceCollectionProcessor', () => { expect(emit).toHaveBeenCalledWith( getRelation( 'partOf', - MarketplaceKind.Collection, + ExtensionsKind.Collection, 'test-collection', - MarketplaceKind.Plugin, + ExtensionsKind.Plugin, 'plugin-a', ), ); expect(emit).toHaveBeenCalledWith( getRelation( 'hasPart', - MarketplaceKind.Plugin, + ExtensionsKind.Plugin, 'plugin-a', - MarketplaceKind.Collection, + ExtensionsKind.Collection, 'test-collection', ), ); expect(emit).toHaveBeenCalledWith( getRelation( 'partOf', - MarketplaceKind.Collection, + ExtensionsKind.Collection, 'test-collection', - MarketplaceKind.Plugin, + ExtensionsKind.Plugin, 'plugin-b', ), ); expect(emit).toHaveBeenCalledWith( getRelation( 'hasPart', - MarketplaceKind.Plugin, + ExtensionsKind.Plugin, 'plugin-b', - MarketplaceKind.Collection, + ExtensionsKind.Collection, 'test-collection', ), ); }); it('should emit no relation when plugins is undefined', async () => { - const processor = new MarketplaceCollectionProcessor(); + const processor = new ExtensionsCollectionProcessor(); const emit = jest.fn(); await processor.postProcessEntity( @@ -143,7 +143,7 @@ describe('MarketplaceCollectionProcessor', () => { }); it('should emit no relation when plugins is empty', async () => { - const processor = new MarketplaceCollectionProcessor(); + const processor = new ExtensionsCollectionProcessor(); const emit = jest.fn(); await processor.postProcessEntity( @@ -159,7 +159,7 @@ describe('MarketplaceCollectionProcessor', () => { }); it('should emit an owner relation without plugins', async () => { - const processor = new MarketplaceCollectionProcessor(); + const processor = new ExtensionsCollectionProcessor(); const emit = jest.fn(); await processor.postProcessEntity( @@ -181,7 +181,7 @@ describe('MarketplaceCollectionProcessor', () => { relation: { type: 'ownedBy', source: { - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, namespace: 'default', name: 'test-collection', }, diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplaceCollectionProcessor.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsCollectionProcessor.ts similarity index 85% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplaceCollectionProcessor.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsCollectionProcessor.ts index 9bd72693b3..81efb1a75c 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplaceCollectionProcessor.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsCollectionProcessor.ts @@ -31,9 +31,9 @@ import { } from '@backstage/catalog-model'; import { - isMarketplaceCollection, - MarketplaceKind, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + isExtensionsCollection, + ExtensionsKind, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports import collectionJsonSchema from '../../../../json-schema/collections.json'; @@ -41,7 +41,7 @@ import collectionJsonSchema from '../../../../json-schema/collections.json'; /** * @public */ -export class MarketplaceCollectionProcessor implements CatalogProcessor { +export class ExtensionsCollectionProcessor implements CatalogProcessor { private readonly validators = [ entityKindSchemaValidator(collectionJsonSchema), ]; @@ -50,7 +50,7 @@ export class MarketplaceCollectionProcessor implements CatalogProcessor { // engine that this entity is valid and should therefore be submitted for // further processing. async validateEntityKind(entity: Entity): Promise { - if (isMarketplaceCollection(entity)) { + if (isExtensionsCollection(entity)) { for (const validator of this.validators) { if (validator(entity)) { return true; @@ -61,7 +61,7 @@ export class MarketplaceCollectionProcessor implements CatalogProcessor { } getProcessorName(): string { - return 'MarketplaceCollectionProcessor'; + return 'ExtensionsCollectionProcessor'; } async postProcessEntity( @@ -69,7 +69,7 @@ export class MarketplaceCollectionProcessor implements CatalogProcessor { _location: LocationSpec, emit: CatalogProcessorEmit, ): Promise { - if (isMarketplaceCollection(entity)) { + if (isExtensionsCollection(entity)) { // Relation - OWNED_BY const thisEntityRef = getCompoundEntityRef(entity); if (entity?.spec?.owner) { @@ -90,7 +90,7 @@ export class MarketplaceCollectionProcessor implements CatalogProcessor { if (entity.spec?.plugins && entity.spec.plugins.length > 0) { entity.spec.plugins.forEach((plugin: string) => { const pluginRef = parseEntityRef(plugin, { - defaultKind: MarketplaceKind.Plugin, + defaultKind: ExtensionsKind.Plugin, defaultNamespace: entity.metadata.namespace, }); if (pluginRef) { @@ -116,3 +116,9 @@ export class MarketplaceCollectionProcessor implements CatalogProcessor { return entity; } } + +/** + * @public + * @deprecated Use ExtensionsCollectionProcessor instead + */ +export const MarketplaceCollectionProcessor = ExtensionsCollectionProcessor; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePackageProcessor.test.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPackageProcessor.test.ts similarity index 83% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePackageProcessor.test.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPackageProcessor.test.ts index 2daa18eac4..b81b453626 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePackageProcessor.test.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPackageProcessor.test.ts @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { MarketplacePackage } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPackage } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { MarketplacePackageProcessor } from './MarketplacePackageProcessor'; +import { ExtensionsPackageProcessor } from './ExtensionsPackageProcessor'; -const testPackage: MarketplacePackage = { +const testPackage: ExtensionsPackage = { kind: 'Package', apiVersion: 'extensions.backstage.io/v1alpha1', metadata: { @@ -56,14 +56,14 @@ const getRelation = ( }, }); -describe('MarketplacePackageProcessor', () => { +describe('ExtensionsPackageProcessor', () => { it('should return processor name', () => { - const processor = new MarketplacePackageProcessor(); - expect(processor.getProcessorName()).toBe('MarketplacePackageProcessor'); + const processor = new ExtensionsPackageProcessor(); + expect(processor.getProcessorName()).toBe('ExtensionsPackageProcessor'); }); it('should validate Package kind', async () => { - const processor = new MarketplacePackageProcessor(); + const processor = new ExtensionsPackageProcessor(); expect( await processor.validateEntityKind({ ...testPackage, @@ -74,7 +74,7 @@ describe('MarketplacePackageProcessor', () => { }); it('should return package entity with ownedBy relation', async () => { - const processor = new MarketplacePackageProcessor(); + const processor = new ExtensionsPackageProcessor(); const emit = jest.fn(); await processor.postProcessEntity( @@ -93,7 +93,7 @@ describe('MarketplacePackageProcessor', () => { }); it('should return package entity with partOf relation', async () => { - const processor = new MarketplacePackageProcessor(); + const processor = new ExtensionsPackageProcessor(); const emit = jest.fn(); await processor.postProcessEntity( diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePackageProcessor.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPackageProcessor.ts similarity index 85% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePackageProcessor.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPackageProcessor.ts index c2cee74889..adaa1104a0 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePackageProcessor.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPackageProcessor.ts @@ -30,10 +30,10 @@ import { processingResult, } from '@backstage/plugin-catalog-node'; import { - MarketplacePackage, - MarketplaceKind, - isMarketplacePackage, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsPackage, + ExtensionsKind, + isExtensionsPackage, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports import packageJsonSchema from '../../../../json-schema/packages.json'; @@ -41,18 +41,18 @@ import packageJsonSchema from '../../../../json-schema/packages.json'; /** * @public */ -export class MarketplacePackageProcessor implements CatalogProcessor { +export class ExtensionsPackageProcessor implements CatalogProcessor { private readonly validators = [entityKindSchemaValidator(packageJsonSchema)]; getProcessorName(): string { - return 'MarketplacePackageProcessor'; + return 'ExtensionsPackageProcessor'; } // validateEntityKind is responsible for signaling to the catalog processing // engine that this entity is valid and should therefore be submitted for // further processing. async validateEntityKind(entity: Entity): Promise { - if (isMarketplacePackage(entity)) { + if (isExtensionsPackage(entity)) { for (const validator of this.validators) { if (validator(entity)) { return true; @@ -63,11 +63,11 @@ export class MarketplacePackageProcessor implements CatalogProcessor { } async postProcessEntity( - entity: MarketplacePackage, + entity: ExtensionsPackage, _location: LocationSpec, emit: CatalogProcessorEmit, ): Promise { - if (isMarketplacePackage(entity)) { + if (isExtensionsPackage(entity)) { // Align support field if (typeof entity.spec?.support === 'string') { entity.spec.support = { level: entity.spec.support }; @@ -93,7 +93,7 @@ export class MarketplacePackageProcessor implements CatalogProcessor { if (entity.spec?.partOf && entity.spec.partOf.length > 0) { entity.spec.partOf.forEach((pluginName: string) => { const pluginRef = parseEntityRef(pluginName, { - defaultKind: MarketplaceKind.Plugin, + defaultKind: ExtensionsKind.Plugin, defaultNamespace: entity.metadata.namespace, }); if (pluginRef) { @@ -119,3 +119,9 @@ export class MarketplacePackageProcessor implements CatalogProcessor { return entity; } } + +/** + * @public + * @deprecated Use ExtensionsPackageProcessor instead + */ +export const MarketplacePackageProcessor = ExtensionsPackageProcessor; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePluginProcessor.test.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPluginProcessor.test.ts similarity index 83% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePluginProcessor.test.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPluginProcessor.test.ts index ffa52f8039..d07981f6b6 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePluginProcessor.test.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPluginProcessor.test.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { MarketplacePlugin } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPlugin } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { MarketplacePluginProcessor } from './MarketplacePluginProcessor'; +import { ExtensionsPluginProcessor } from './ExtensionsPluginProcessor'; -const testPlugin: MarketplacePlugin = { +const testPlugin: ExtensionsPlugin = { apiVersion: 'extensions.backstage.io/v1alpha1', kind: 'Plugin', metadata: { @@ -55,14 +55,14 @@ const getRelation = ( }, }); -describe('MarketplacePluginProcessor', () => { +describe('ExtensionsPluginProcessor', () => { it('should return processor name', () => { - const processor = new MarketplacePluginProcessor(); - expect(processor.getProcessorName()).toBe('MarketplacePluginProcessor'); + const processor = new ExtensionsPluginProcessor(); + expect(processor.getProcessorName()).toBe('ExtensionsPluginProcessor'); }); it('should return validate the entity', async () => { - const processor = new MarketplacePluginProcessor(); + const processor = new ExtensionsPluginProcessor(); expect( await processor.validateEntityKind({ ...testPlugin, kind: 'test' }), @@ -71,7 +71,7 @@ describe('MarketplacePluginProcessor', () => { }); it('should emit plugin owner relation', async () => { - const processor = new MarketplacePluginProcessor(); + const processor = new ExtensionsPluginProcessor(); const emit = jest.fn(); await processor.postProcessEntity( @@ -93,7 +93,7 @@ describe('MarketplacePluginProcessor', () => { }); it('should emit plugin package relations', async () => { - const processor = new MarketplacePluginProcessor(); + const processor = new ExtensionsPluginProcessor(); const emit = jest.fn(); await processor.postProcessEntity( diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePluginProcessor.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPluginProcessor.ts similarity index 85% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePluginProcessor.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPluginProcessor.ts index 209bc611b4..b2a130c8db 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/MarketplacePluginProcessor.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/ExtensionsPluginProcessor.ts @@ -30,12 +30,12 @@ import { RELATION_PART_OF, } from '@backstage/catalog-model'; import { - MarketplaceAnnotation, - MarketplaceAuthor, - MarketplacePlugin, - MarketplaceKind, - isMarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsAnnotation, + ExtensionsAuthor, + ExtensionsPlugin, + ExtensionsKind, + isExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports import pluginJsonSchema from '../../../../json-schema/plugins.json'; @@ -43,18 +43,18 @@ import pluginJsonSchema from '../../../../json-schema/plugins.json'; /** * @public */ -export class MarketplacePluginProcessor implements CatalogProcessor { +export class ExtensionsPluginProcessor implements CatalogProcessor { private readonly validators = [entityKindSchemaValidator(pluginJsonSchema)]; getProcessorName(): string { - return 'MarketplacePluginProcessor'; + return 'ExtensionsPluginProcessor'; } // validateEntityKind is responsible for signaling to the catalog processing // engine that this entity is valid and should therefore be submitted for // further processing. async validateEntityKind(entity: Entity): Promise { - if (isMarketplacePlugin(entity)) { + if (isExtensionsPlugin(entity)) { for (const validator of this.validators) { if (validator(entity)) { return true; @@ -65,11 +65,11 @@ export class MarketplacePluginProcessor implements CatalogProcessor { } async postProcessEntity( - entity: MarketplacePlugin, + entity: ExtensionsPlugin, _location: LocationSpec, emit: CatalogProcessorEmit, ): Promise { - if (isMarketplacePlugin(entity)) { + if (isExtensionsPlugin(entity)) { // Automatically set title to name if it's not defined // so that sorting and searching works as expected. if (!entity.metadata.title) { @@ -77,15 +77,15 @@ export class MarketplacePluginProcessor implements CatalogProcessor { } // Automatically enforce annotation pre-installed=false if it's not defined. - if (!entity.metadata.annotations?.[MarketplaceAnnotation.PRE_INSTALLED]) { + if (!entity.metadata.annotations?.[ExtensionsAnnotation.PRE_INSTALLED]) { entity.metadata.annotations = { ...entity.metadata.annotations, - [MarketplaceAnnotation.PRE_INSTALLED]: 'false', + [ExtensionsAnnotation.PRE_INSTALLED]: 'false', }; } // Align authors - const authors: MarketplaceAuthor[] = []; + const authors: ExtensionsAuthor[] = []; if (typeof entity.spec?.author === 'string') { authors.push({ name: entity.spec.author }); } @@ -134,7 +134,7 @@ export class MarketplacePluginProcessor implements CatalogProcessor { if (entity.spec?.packages && entity.spec.packages.length > 0) { entity.spec.packages.forEach(packageName => { const packageRef = parseEntityRef(packageName, { - defaultKind: MarketplaceKind.Package, + defaultKind: ExtensionsKind.Package, defaultNamespace: entity.metadata.namespace, }); if (packageRef) { @@ -160,3 +160,9 @@ export class MarketplacePluginProcessor implements CatalogProcessor { return entity; } } + +/** + * @public + * @deprecated Use ExtensionsPluginProcessor instead + */ +export const MarketplacePluginProcessor = ExtensionsPluginProcessor; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/LocalPackageInstallStatusProcessor.test.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/LocalPackageInstallStatusProcessor.test.ts similarity index 90% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/LocalPackageInstallStatusProcessor.test.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/LocalPackageInstallStatusProcessor.test.ts index 58c714a653..c4944d2b25 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/LocalPackageInstallStatusProcessor.test.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/LocalPackageInstallStatusProcessor.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { MarketplacePackageInstallStatus } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPackageInstallStatus } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { packageEntity } from '../../__fixtures__/mockData'; import { LocalPackageInstallStatusProcessor } from './LocalPackageInstallStatusProcessor'; @@ -32,7 +32,7 @@ describe('LocalPackageInstallStatusProcessor', () => { const result = await processor.preProcessEntity(packageEntity); expect(result?.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.NotInstalled, + ExtensionsPackageInstallStatus.NotInstalled, ); }); @@ -41,7 +41,7 @@ describe('LocalPackageInstallStatusProcessor', () => { const result = await processor.preProcessEntity(packageEntity); expect(result?.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.NotInstalled, + ExtensionsPackageInstallStatus.NotInstalled, ); }); @@ -57,7 +57,7 @@ describe('LocalPackageInstallStatusProcessor', () => { const result = await processor.preProcessEntity(packageEntity); expect(result.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.NotInstalled, + ExtensionsPackageInstallStatus.NotInstalled, ); }); @@ -74,7 +74,7 @@ describe('LocalPackageInstallStatusProcessor', () => { }; const result = await processor.preProcessEntity(searchBackendPackage); expect(result?.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.UpdateAvailable, + ExtensionsPackageInstallStatus.UpdateAvailable, ); }); @@ -91,7 +91,7 @@ describe('LocalPackageInstallStatusProcessor', () => { }; const result = await processor.preProcessEntity(searchBackendPackage); expect(result?.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.Installed, + ExtensionsPackageInstallStatus.Installed, ); }); @@ -110,7 +110,7 @@ describe('LocalPackageInstallStatusProcessor', () => { }; const result = await processor.preProcessEntity(searchPackage); expect(result?.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.NotInstalled, + ExtensionsPackageInstallStatus.NotInstalled, ); }); @@ -126,7 +126,7 @@ describe('LocalPackageInstallStatusProcessor', () => { }; const result = await processor.preProcessEntity(searchPackage); expect(result?.spec?.installStatus).toBe( - MarketplacePackageInstallStatus.Installed, + ExtensionsPackageInstallStatus.Installed, ); }); diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/LocalPackageInstallStatusProcessor.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/LocalPackageInstallStatusProcessor.ts similarity index 87% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/LocalPackageInstallStatusProcessor.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/LocalPackageInstallStatusProcessor.ts index 1af6aaab60..c77f1da06b 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/LocalPackageInstallStatusProcessor.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/LocalPackageInstallStatusProcessor.ts @@ -19,10 +19,10 @@ import path from 'path'; import semver from 'semver'; import { CatalogProcessor } from '@backstage/plugin-catalog-node'; import { - isMarketplacePackage, - MarketplacePackage, - MarketplacePackageInstallStatus, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + isExtensionsPackage, + ExtensionsPackage, + ExtensionsPackageInstallStatus, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; /** * @public @@ -72,7 +72,7 @@ export class LocalPackageInstallStatusProcessor implements CatalogProcessor { packageName: string, packageJsonPath: string, versionRange?: string, - ): MarketplacePackageInstallStatus | null { + ): ExtensionsPackageInstallStatus | null { try { const absolutePackageJsonPath = path.resolve(packageJsonPath); @@ -102,7 +102,7 @@ export class LocalPackageInstallStatusProcessor implements CatalogProcessor { if (packageInstalled) { if (!versionRange) { - return MarketplacePackageInstallStatus.Installed; + return ExtensionsPackageInstallStatus.Installed; } // Get installed package from node_modules @@ -113,9 +113,9 @@ export class LocalPackageInstallStatusProcessor implements CatalogProcessor { const installedVersion = installedPackageJson.version; if (semver.satisfies(installedVersion, versionRange)) { - return MarketplacePackageInstallStatus.Installed; + return ExtensionsPackageInstallStatus.Installed; } - return MarketplacePackageInstallStatus.UpdateAvailable; + return ExtensionsPackageInstallStatus.UpdateAvailable; } return null; @@ -129,14 +129,14 @@ export class LocalPackageInstallStatusProcessor implements CatalogProcessor { } async preProcessEntity( - entity: MarketplacePackage, - ): Promise { - if (isMarketplacePackage(entity)) { + entity: ExtensionsPackage, + ): Promise { + if (isExtensionsPackage(entity)) { if (entity.spec?.packageName && !entity.spec.installStatus) { const packageName = entity.spec.packageName; const version = entity.spec.version; - let installStatus: MarketplacePackageInstallStatus | undefined = + let installStatus: ExtensionsPackageInstallStatus | undefined = undefined; this.customPaths.forEach(customPaths => { @@ -153,7 +153,7 @@ export class LocalPackageInstallStatusProcessor implements CatalogProcessor { }); if (!installStatus) { - installStatus = MarketplacePackageInstallStatus.NotInstalled; + installStatus = ExtensionsPackageInstallStatus.NotInstalled; } return { diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/PluginInstallStatusProcessor.test.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/PluginInstallStatusProcessor.test.ts similarity index 60% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/PluginInstallStatusProcessor.test.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/PluginInstallStatusProcessor.test.ts index 3bc09aa286..d68f11bdbf 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/PluginInstallStatusProcessor.test.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/PluginInstallStatusProcessor.test.ts @@ -15,17 +15,17 @@ */ import { - MarketplaceKind, - MarketplacePackage, - MarketplacePackageInstallStatus, - MarketplacePluginInstallStatus, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsKind, + ExtensionsPackage, + ExtensionsPackageInstallStatus, + ExtensionsPluginInstallStatus, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { pluginEntity, locationSpec, - mockMarketplaceBackendPackage, - mockMarketplacePackage, - mockMarketplacePlugin, + mockExtensionsBackendPackage, + mockExtensionsPackage, + mockExtensionsPlugin, packageEntity, } from '../../__fixtures__/mockData'; @@ -49,37 +49,37 @@ describe('PluginInstallStatusProcessor', () => { }); const cache = mockServices.cache.mock(); - const marketplacePackageRef = stringifyEntityRef(mockMarketplacePackage); - const marketplaceBackendPackageRef = stringifyEntityRef( - mockMarketplaceBackendPackage, + const extensionsPackageRef = stringifyEntityRef(mockExtensionsPackage); + const extensionsBackendPackageRef = stringifyEntityRef( + mockExtensionsBackendPackage, ); - const mockMarketplaceCatalogPackage = { + const mockExtensionsCatalogPackage = { ...packageEntity, metadata: { - name: 'red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace', - namespace: 'marketplace-plugin-demo', + name: 'red-hat-developer-hub-backstage-plugin-catalog-backend-module-extensions', + namespace: 'extensions-plugin-demo', }, spec: { packageName: - '@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace', + '@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions', dynamicArtifact: - './dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic', + './dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-catalog-backend-module-extensions-dynamic', }, }; - const marketplacePluginExtended = { - ...mockMarketplacePlugin, + const extensionsPluginExtended = { + ...mockExtensionsPlugin, spec: { packages: [ - ...mockMarketplacePlugin.spec.packages, - 'marketplace-plugin-demo/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace', + ...mockExtensionsPlugin.spec.packages, + 'extensions-plugin-demo/red-hat-developer-hub-backstage-plugin-catalog-backend-module-extensions', ], }, }; const getWithInstallStatus = ( - pkg: MarketplacePackage, - installStatus: MarketplacePackageInstallStatus, + pkg: ExtensionsPackage, + installStatus: ExtensionsPackageInstallStatus, ) => { return { ...pkg, @@ -117,20 +117,20 @@ describe('PluginInstallStatusProcessor', () => { }); describe('refreshPackages', () => { - it('should fetch marketplace packages and cache defined install statuses', async () => { - const marketplacePackage = getWithInstallStatus( - mockMarketplacePackage, - MarketplacePackageInstallStatus.Installed, + it('should fetch extensions packages and cache defined install statuses', async () => { + const extensionsPackage = getWithInstallStatus( + mockExtensionsPackage, + ExtensionsPackageInstallStatus.Installed, ); - const marketplaceBackendPackage = getWithInstallStatus( - mockMarketplaceBackendPackage, - MarketplacePackageInstallStatus.UpdateAvailable, + const extensionsBackendPackage = getWithInstallStatus( + mockExtensionsBackendPackage, + ExtensionsPackageInstallStatus.UpdateAvailable, ); mockCatalogClient.getEntities = jest.fn().mockResolvedValue({ items: [ - marketplacePackage, - marketplaceBackendPackage, - mockMarketplaceCatalogPackage, + extensionsPackage, + extensionsBackendPackage, + mockExtensionsCatalogPackage, ], }); @@ -139,28 +139,28 @@ describe('PluginInstallStatusProcessor', () => { expect(mockCatalogClient.getEntities).toHaveBeenCalledWith( { filter: { - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, }, }, undefined, ); - expect(cache.set).toHaveBeenCalledTimes(2); // mockMarketplaceCatalogPackage not cached because missing installStatus + expect(cache.set).toHaveBeenCalledTimes(2); // mockExtensionsCatalogPackage not cached because missing installStatus expect(cache.set).toHaveBeenCalledWith( - marketplacePackageRef, - MarketplacePackageInstallStatus.Installed, + extensionsPackageRef, + ExtensionsPackageInstallStatus.Installed, { ttl: { seconds: 30 } }, ); expect(cache.set).toHaveBeenCalledWith( - marketplaceBackendPackageRef, - MarketplacePackageInstallStatus.UpdateAvailable, + extensionsBackendPackageRef, + ExtensionsPackageInstallStatus.UpdateAvailable, { ttl: { seconds: 30 } }, ); expect(logger.info).toHaveBeenCalledWith( 'Refreshing package install statuses for PluginInstallStatusProcessor', ); expect(logger.info).toHaveBeenCalledWith( - 'PluginInstallStatusProcessor:refresh-packages cached 2 marketplace package install statuses', + 'PluginInstallStatusProcessor:refresh-packages cached 2 extensions package install statuses', ); }); }); @@ -192,7 +192,7 @@ describe('PluginInstallStatusProcessor', () => { ...pluginEntity, spec: { ...pluginEntity.spec, - installStatus: MarketplacePluginInstallStatus.Installed, + installStatus: ExtensionsPluginInstallStatus.Installed, }, }, locationSpec, @@ -201,7 +201,7 @@ describe('PluginInstallStatusProcessor', () => { ); expect(entity.spec?.installStatus).toBe( - MarketplacePluginInstallStatus.Installed, + ExtensionsPluginInstallStatus.Installed, ); expect(mockCatalogClient.getEntitiesByRefs).not.toHaveBeenCalled(); }); @@ -209,59 +209,59 @@ describe('PluginInstallStatusProcessor', () => { it.each([ { description: 'any package is Disabled', - package1: MarketplacePackageInstallStatus.Installed, - package2: MarketplacePackageInstallStatus.Disabled, - package3: MarketplacePackageInstallStatus.UpdateAvailable, - expected: MarketplacePluginInstallStatus.Disabled, + package1: ExtensionsPackageInstallStatus.Installed, + package2: ExtensionsPackageInstallStatus.Disabled, + package3: ExtensionsPackageInstallStatus.UpdateAvailable, + expected: ExtensionsPluginInstallStatus.Disabled, }, { description: 'all packages are NotInstalled', - package1: MarketplacePackageInstallStatus.NotInstalled, - package2: MarketplacePackageInstallStatus.NotInstalled, - package3: MarketplacePackageInstallStatus.NotInstalled, - expected: MarketplacePluginInstallStatus.NotInstalled, + package1: ExtensionsPackageInstallStatus.NotInstalled, + package2: ExtensionsPackageInstallStatus.NotInstalled, + package3: ExtensionsPackageInstallStatus.NotInstalled, + expected: ExtensionsPluginInstallStatus.NotInstalled, }, { description: 'any package is UpdateAvailable and all remaining packages are Installed', - package1: MarketplacePackageInstallStatus.Installed, - package2: MarketplacePackageInstallStatus.UpdateAvailable, - package3: MarketplacePackageInstallStatus.Installed, - expected: MarketplacePluginInstallStatus.UpdateAvailable, + package1: ExtensionsPackageInstallStatus.Installed, + package2: ExtensionsPackageInstallStatus.UpdateAvailable, + package3: ExtensionsPackageInstallStatus.Installed, + expected: ExtensionsPluginInstallStatus.UpdateAvailable, }, { description: 'any package is NotInstalled', - package1: MarketplacePackageInstallStatus.Installed, - package2: MarketplacePackageInstallStatus.NotInstalled, - package3: MarketplacePackageInstallStatus.UpdateAvailable, - expected: MarketplacePluginInstallStatus.PartiallyInstalled, + package1: ExtensionsPackageInstallStatus.Installed, + package2: ExtensionsPackageInstallStatus.NotInstalled, + package3: ExtensionsPackageInstallStatus.UpdateAvailable, + expected: ExtensionsPluginInstallStatus.PartiallyInstalled, }, ])( 'should return $expected when $description', async ({ package1, package2, package3, expected }) => { - const marketplacePackage = getWithInstallStatus( - mockMarketplacePackage, + const extensionsPackage = getWithInstallStatus( + mockExtensionsPackage, package1, ); - const marketplaceBackendPackage = getWithInstallStatus( - mockMarketplaceBackendPackage, + const extensionsBackendPackage = getWithInstallStatus( + mockExtensionsBackendPackage, package2, ); - const marketplaceCatalogPackage = getWithInstallStatus( - mockMarketplaceCatalogPackage, + const extensionsCatalogPackage = getWithInstallStatus( + mockExtensionsCatalogPackage, package3, ); mockCatalogClient.getEntitiesByRefs = jest.fn().mockResolvedValue({ items: [ - marketplaceBackendPackage, - marketplacePackage, - marketplaceCatalogPackage, + extensionsBackendPackage, + extensionsPackage, + extensionsCatalogPackage, ], }); const entity = await processor.preProcessEntity( - marketplacePluginExtended, + extensionsPluginExtended, locationSpec, jest.fn(), locationSpec, @@ -274,16 +274,16 @@ describe('PluginInstallStatusProcessor', () => { it('should return undefined and log warning when some packages are missing', async () => { mockCatalogClient.getEntitiesByRefs = jest.fn().mockResolvedValue({ items: [ - // missing marketplaceBackendPackage + // missing extensionsBackendPackage getWithInstallStatus( - mockMarketplacePackage, - MarketplacePackageInstallStatus.Installed, + mockExtensionsPackage, + ExtensionsPackageInstallStatus.Installed, ), ], }); const entity = await processor.preProcessEntity( - mockMarketplacePlugin, + mockExtensionsPlugin, locationSpec, jest.fn(), locationSpec, @@ -291,23 +291,23 @@ describe('PluginInstallStatusProcessor', () => { expect(entity.spec?.installStatus).toBe(undefined); expect(logger.debug).toHaveBeenCalledWith( - "Entity plugin:marketplace-plugin-demo/marketplace is missing all definitions of 'spec.installStatus' in its packages, unable to determine 'spec.installStatus'", + "Entity plugin:extensions-plugin-demo/extensions is missing all definitions of 'spec.installStatus' in its packages, unable to determine 'spec.installStatus'", ); }); it('should return undefined and log warning when some packages are missing installStatus', async () => { mockCatalogClient.getEntitiesByRefs = jest.fn().mockResolvedValue({ items: [ - mockMarketplaceBackendPackage, + mockExtensionsBackendPackage, getWithInstallStatus( - mockMarketplacePackage, - MarketplacePackageInstallStatus.Installed, + mockExtensionsPackage, + ExtensionsPackageInstallStatus.Installed, ), ], }); const entity = await processor.preProcessEntity( - mockMarketplacePlugin, + mockExtensionsPlugin, locationSpec, jest.fn(), locationSpec, @@ -315,7 +315,7 @@ describe('PluginInstallStatusProcessor', () => { expect(entity.spec?.installStatus).toBe(undefined); expect(logger.debug).toHaveBeenCalledWith( - "Entity plugin:marketplace-plugin-demo/marketplace is missing all definitions of 'spec.installStatus' in its packages, unable to determine 'spec.installStatus'", + "Entity plugin:extensions-plugin-demo/extensions is missing all definitions of 'spec.installStatus' in its packages, unable to determine 'spec.installStatus'", ); }); @@ -332,69 +332,69 @@ describe('PluginInstallStatusProcessor', () => { it('should use cached packages if available', async () => { cache.get.mockImplementation(async (ref: string) => { if ( - ref === marketplacePackageRef || - ref === marketplaceBackendPackageRef + ref === extensionsPackageRef || + ref === extensionsBackendPackageRef ) { - return MarketplacePackageInstallStatus.Installed; + return ExtensionsPackageInstallStatus.Installed; } return undefined; }); const result = await processor.preProcessEntity( - mockMarketplacePlugin, + mockExtensionsPlugin, locationSpec, jest.fn(), locationSpec, ); - expect(cache.get).toHaveBeenCalledWith(marketplacePackageRef); - expect(cache.get).toHaveBeenCalledWith(marketplaceBackendPackageRef); + expect(cache.get).toHaveBeenCalledWith(extensionsPackageRef); + expect(cache.get).toHaveBeenCalledWith(extensionsBackendPackageRef); expect(mockCatalogClient.getEntitiesByRefs).not.toHaveBeenCalled(); expect(result.spec?.installStatus).toBe( - MarketplacePluginInstallStatus.Installed, + ExtensionsPluginInstallStatus.Installed, ); }); it('should cache fetched packages', async () => { cache.get.mockImplementation(async (key: string) => { - if (key === marketplacePackageRef) { - return MarketplacePackageInstallStatus.Installed; + if (key === extensionsPackageRef) { + return ExtensionsPackageInstallStatus.Installed; } - return undefined; // marketplaceBackendPackageRef not cached + return undefined; // extensionsBackendPackageRef not cached }); - const mockMarketplaceBackendPackageWithStatus = { - ...mockMarketplaceBackendPackage, + const mockExtensionsBackendPackageWithStatus = { + ...mockExtensionsBackendPackage, spec: { - ...mockMarketplaceBackendPackage.spec, - installStatus: MarketplacePackageInstallStatus.UpdateAvailable, + ...mockExtensionsBackendPackage.spec, + installStatus: ExtensionsPackageInstallStatus.UpdateAvailable, }, }; mockCatalogClient.getEntitiesByRefs = jest.fn().mockResolvedValue({ - items: [mockMarketplaceBackendPackageWithStatus], + items: [mockExtensionsBackendPackageWithStatus], }); const result = await processor.preProcessEntity( - mockMarketplacePlugin, + mockExtensionsPlugin, locationSpec, jest.fn(), locationSpec, ); - expect(cache.get).toHaveBeenCalledWith(marketplacePackageRef); - expect(cache.get).toHaveBeenCalledWith(marketplaceBackendPackageRef); + expect(cache.get).toHaveBeenCalledWith(extensionsPackageRef); + expect(cache.get).toHaveBeenCalledWith(extensionsBackendPackageRef); expect(mockCatalogClient.getEntitiesByRefs).toHaveBeenCalledWith( - { entityRefs: [marketplaceBackendPackageRef] }, + { entityRefs: [extensionsBackendPackageRef] }, undefined, ); expect(cache.set).toHaveBeenCalledWith( - marketplaceBackendPackageRef, - MarketplacePackageInstallStatus.UpdateAvailable, + extensionsBackendPackageRef, + ExtensionsPackageInstallStatus.UpdateAvailable, { ttl: { seconds: 30 } }, ); expect(result.spec?.installStatus).toBe( - MarketplacePluginInstallStatus.UpdateAvailable, + ExtensionsPluginInstallStatus.UpdateAvailable, ); }); }); diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/PluginInstallStatusProcessor.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/PluginInstallStatusProcessor.ts similarity index 71% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/PluginInstallStatusProcessor.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/PluginInstallStatusProcessor.ts index c6500dd75b..8b6aa82bd9 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/PluginInstallStatusProcessor.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/PluginInstallStatusProcessor.ts @@ -25,15 +25,15 @@ import { CatalogProcessorEmit, } from '@backstage/plugin-catalog-node'; import { - MarketplaceKind, - MarketplacePackage, - MarketplacePackageInstallStatus, - MarketplacePackageSpec, - MarketplacePlugin, - MarketplacePluginInstallStatus, - isMarketplacePackage, - isMarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsKind, + ExtensionsPackage, + ExtensionsPackageInstallStatus, + ExtensionsPackageSpec, + ExtensionsPlugin, + ExtensionsPluginInstallStatus, + isExtensionsPackage, + isExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import type { CatalogApi, GetEntitiesByRefsResponse, @@ -47,9 +47,9 @@ import type { SchedulerServiceTaskScheduleDefinition, } from '@backstage/backend-plugin-api'; -type MarketplacePackageWithInstallStatus = Omit & { - spec: Omit & { - installStatus: MarketplacePackageInstallStatus; +type ExtensionsPackageWithInstallStatus = Omit & { + spec: Omit & { + installStatus: ExtensionsPackageInstallStatus; }; }; @@ -99,7 +99,7 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { private async cachePackageInstallStatuses( entityRefs?: string[], - ): Promise { + ): Promise { const token = await this.auth.getPluginRequestToken({ onBehalfOf: await this.auth.getOwnServiceCredentials(), targetPluginId: 'catalog', @@ -114,15 +114,15 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { packagesResponse = await this.catalog.getEntities( { filter: { - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, }, }, token, ); } const packages = packagesResponse.items.filter( - pkg => isMarketplacePackage(pkg) && pkg.spec?.installStatus !== undefined, - ) as MarketplacePackageWithInstallStatus[]; + pkg => isExtensionsPackage(pkg) && pkg.spec?.installStatus !== undefined, + ) as ExtensionsPackageWithInstallStatus[]; for (const pkg of packages) { const cacheKey = stringifyEntityRef(pkg); @@ -142,7 +142,7 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { try { const packages = await this.cachePackageInstallStatuses(); this.logger.info( - `${this.getProcessorName()}:refresh-packages cached ${packages.length} marketplace package install statuses`, + `${this.getProcessorName()}:refresh-packages cached ${packages.length} extensions package install statuses`, ); } catch (error) { this.logger.warn( @@ -154,13 +154,13 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { private async getPluginPackageInstallStatuses( pluginPackageRefs: string[], - ): Promise { - const cachedPackageStatuses: MarketplacePackageInstallStatus[] = []; + ): Promise { + const cachedPackageStatuses: ExtensionsPackageInstallStatus[] = []; const uncachedPackageRefs: string[] = []; for (const packageRef of pluginPackageRefs) { const packageInstallStatus = - await this.cache.get(packageRef); + await this.cache.get(packageRef); if (packageInstallStatus) { cachedPackageStatuses.push(packageInstallStatus); } else { @@ -168,7 +168,7 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { } } - let fetchedPackageStatuses: MarketplacePackageInstallStatus[] = []; + let fetchedPackageStatuses: ExtensionsPackageInstallStatus[] = []; if (uncachedPackageRefs.length > 0) { try { fetchedPackageStatuses = ( @@ -183,13 +183,13 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { } private async getPluginInstallStatus( - marketplacePlugin: MarketplacePlugin, - ): Promise { - const pluginPackageRefs = marketplacePlugin.spec?.packages?.map( + extensionsPlugin: ExtensionsPlugin, + ): Promise { + const pluginPackageRefs = extensionsPlugin.spec?.packages?.map( pluginName => { const pluginRef = parseEntityRef(pluginName, { - defaultKind: MarketplaceKind.Package, - defaultNamespace: marketplacePlugin.metadata.namespace, + defaultKind: ExtensionsKind.Package, + defaultNamespace: extensionsPlugin.metadata.namespace, }); return stringifyEntityRef(pluginRef); }, @@ -197,7 +197,7 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { if (!pluginPackageRefs || pluginPackageRefs.length === 0) { this.logger.debug( - `Entity ${stringifyEntityRef(marketplacePlugin)} is missing 'spec.packages', unable to determine 'spec.installStatus'`, + `Entity ${stringifyEntityRef(extensionsPlugin)} is missing 'spec.packages', unable to determine 'spec.installStatus'`, ); return undefined; } @@ -206,7 +206,7 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { await this.getPluginPackageInstallStatuses(pluginPackageRefs); if (pluginPackageRefs.length !== pluginPackageStatuses.length) { this.logger.debug( - `Entity ${stringifyEntityRef(marketplacePlugin)} is missing all definitions of 'spec.installStatus' in its packages, unable to determine 'spec.installStatus'`, + `Entity ${stringifyEntityRef(extensionsPlugin)} is missing all definitions of 'spec.installStatus' in its packages, unable to determine 'spec.installStatus'`, ); return undefined; } @@ -217,40 +217,40 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { return counts; }, { - [MarketplacePackageInstallStatus.NotInstalled]: 0, - [MarketplacePackageInstallStatus.Installed]: 0, - [MarketplacePackageInstallStatus.Disabled]: 0, - [MarketplacePackageInstallStatus.UpdateAvailable]: 0, - } as Record, + [ExtensionsPackageInstallStatus.NotInstalled]: 0, + [ExtensionsPackageInstallStatus.Installed]: 0, + [ExtensionsPackageInstallStatus.Disabled]: 0, + [ExtensionsPackageInstallStatus.UpdateAvailable]: 0, + } as Record, ); const totalPackagesCount = pluginPackageRefs.length; // Disabled when any package is disabled - if (statusCounts[MarketplacePackageInstallStatus.Disabled] > 0) { - return MarketplacePluginInstallStatus.Disabled; + if (statusCounts[ExtensionsPackageInstallStatus.Disabled] > 0) { + return ExtensionsPluginInstallStatus.Disabled; } // NotInstalled when all packages are not installed if ( - statusCounts[MarketplacePackageInstallStatus.NotInstalled] === + statusCounts[ExtensionsPackageInstallStatus.NotInstalled] === totalPackagesCount ) { - return MarketplacePluginInstallStatus.NotInstalled; + return ExtensionsPluginInstallStatus.NotInstalled; } // Installed when all packages are installed if ( - statusCounts[MarketplacePackageInstallStatus.Installed] === + statusCounts[ExtensionsPackageInstallStatus.Installed] === totalPackagesCount ) { - return MarketplacePluginInstallStatus.Installed; + return ExtensionsPluginInstallStatus.Installed; } // UpdateAvailable when any package has update available and no packages are not installed if ( - statusCounts[MarketplacePackageInstallStatus.UpdateAvailable] > 0 && - statusCounts[MarketplacePackageInstallStatus.NotInstalled] === 0 + statusCounts[ExtensionsPackageInstallStatus.UpdateAvailable] > 0 && + statusCounts[ExtensionsPackageInstallStatus.NotInstalled] === 0 ) { - return MarketplacePluginInstallStatus.UpdateAvailable; + return ExtensionsPluginInstallStatus.UpdateAvailable; } - return MarketplacePluginInstallStatus.PartiallyInstalled; + return ExtensionsPluginInstallStatus.PartiallyInstalled; } async preProcessEntity( @@ -259,7 +259,7 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { _emit: CatalogProcessorEmit, _originLocation: LocationSpec, ): Promise { - if (isMarketplacePlugin(entity)) { + if (isExtensionsPlugin(entity)) { if (!entity.spec?.packages || entity.spec.packages.length === 0) { this.logger.debug( `Entity ${stringifyEntityRef(entity)} is missing packages, unable to determine 'spec.installStatus'`, @@ -269,8 +269,7 @@ export class PluginInstallStatusProcessor implements CatalogProcessor { if ( !entity.spec?.installStatus || - entity.spec.installStatus === - MarketplacePluginInstallStatus.NotInstalled + entity.spec.installStatus === ExtensionsPluginInstallStatus.NotInstalled ) { const installStatus = await this.getPluginInstallStatus(entity); if (installStatus) { diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/index.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/index.ts similarity index 84% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/index.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/index.ts index 8cc4da0ebe..a704972eb2 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/processors/index.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/processors/index.ts @@ -14,9 +14,9 @@ * limitations under the License. */ -export * from './MarketplacePluginProcessor'; -export * from './MarketplaceCollectionProcessor'; +export * from './ExtensionsPluginProcessor'; +export * from './ExtensionsCollectionProcessor'; export * from './DynamicPackageInstallStatusProcessor'; export * from './LocalPackageInstallStatusProcessor'; -export * from './MarketplacePackageProcessor'; +export * from './ExtensionsPackageProcessor'; export * from './PluginInstallStatusProcessor'; diff --git a/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/BaseEntityProvider.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/BaseEntityProvider.ts new file mode 100644 index 0000000000..bd5f7f32b3 --- /dev/null +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/BaseEntityProvider.ts @@ -0,0 +1,174 @@ +/* + * Copyright Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api'; +import { + ANNOTATION_LOCATION, + ANNOTATION_ORIGIN_LOCATION, + Entity, +} from '@backstage/catalog-model'; +import { + EntityProvider, + EntityProviderConnection, +} from '@backstage/plugin-catalog-node'; +import { Config } from '@backstage/config'; +import { readYamlFiles } from '../utils/file-utils'; +import { JsonFileData } from '../types'; +import path from 'path'; +import fs from 'fs'; + +/** + * @public + */ +export abstract class BaseEntityProvider + implements EntityProvider +{ + private connection?: EntityProviderConnection; + private taskRunner: SchedulerServiceTaskRunner; + private config?: Config; + + private static readonly EXTENSIONS_DIRECTORY = '/extensions'; + private static readonly DEPRECATED_MARKETPLACE_DIRECTORY = '/marketplace'; + + constructor(taskRunner: SchedulerServiceTaskRunner, config?: Config) { + this.taskRunner = taskRunner; + this.config = config; + } + + abstract getProviderName(): string; + abstract getKind(): string; + + getEntities(allEntities: JsonFileData[]): T[] { + if (allEntities.length === 0) { + return []; + } + return allEntities + .filter(d => d.content.kind === this.getKind()) + .map(file => ({ + ...file.content, + metadata: { + ...file.content.metadata, + annotations: { + ...file.content.metadata.annotations, + [ANNOTATION_LOCATION]: `file:${this.getProviderName()}`, + [ANNOTATION_ORIGIN_LOCATION]: `file:${this.getProviderName()}`, + }, + }, + })); + } + + async connect(connection: EntityProviderConnection): Promise { + this.connection = connection; + await this.taskRunner.run({ + id: this.getProviderName(), + fn: async () => { + await this.run(); + }, + }); + } + + /** + * Resolves a directory path (absolute or relative to process.cwd()) + * and checks if it exists and is a directory + */ + private resolveAndValidateDirectory(dirPath: string): string | null { + const resolvedPath = path.isAbsolute(dirPath) + ? dirPath + : path.resolve(process.cwd(), dirPath); + if ( + fs.existsSync(resolvedPath) && + fs.statSync(resolvedPath).isDirectory() + ) { + return resolvedPath; + } + + return null; + } + + /** + * Gets the extensions directory path from config or falls back to hardcoded fallback directories + * Priority: + * - configured directory (if specified) + * - 'opt/app-root/src/dynamic-plugins-root/extensions' + * - 'opt/app-root/src/dynamic-plugins-root/marketplace' + * - '/extensions' (filesystem root) + * - '/marketplace' (filesystem root) + */ + private getExtensionsDirectory(): string | null { + if (this.config) { + try { + const configuredDir = this.config.getOptionalString( + 'extensions.directory', + ); + if (configuredDir) { + const resolvedDir = this.resolveAndValidateDirectory(configuredDir); + if (resolvedDir) { + return resolvedDir; + } + } + } catch (error) { + console.warn( + 'Failed to read extensions directory from config, falling back to hardcoded fallbacks', + error, + ); + } + } + + // Check fallback directories in priority order + const fallbackDirectories = [ + BaseEntityProvider.EXTENSIONS_DIRECTORY, + BaseEntityProvider.DEPRECATED_MARKETPLACE_DIRECTORY, + ]; + + for (const dir of fallbackDirectories) { + const resolvedDir = this.resolveAndValidateDirectory(dir); + if (resolvedDir) { + return resolvedDir; + } + } + + console.warn( + `Extensions directory not found. Checked: configured directory "${BaseEntityProvider.EXTENSIONS_DIRECTORY}" and "${BaseEntityProvider.DEPRECATED_MARKETPLACE_DIRECTORY}"`, + ); + return null; + } + + async run(): Promise { + if (!this.connection) { + throw new Error('Not initialized'); + } + + const extensionsFilePath = this.getExtensionsDirectory(); + + let yamlData: JsonFileData[] = []; + if (extensionsFilePath) { + try { + yamlData = readYamlFiles(extensionsFilePath); + } catch (error) { + console.error(error.message); + } + } + + const entities: T[] = this.getEntities(yamlData); + + await this.connection.applyMutation({ + type: 'full', + entities: entities.map(entity => ({ + entity, + locationKey: `file:${this.getProviderName()}`, + })), + }); + } +} diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplacePluginProvider.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsCollectionProvider.ts similarity index 62% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplacePluginProvider.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsCollectionProvider.ts index ab2aa027c6..d842592532 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplacePluginProvider.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsCollectionProvider.ts @@ -14,20 +14,26 @@ * limitations under the License. */ import { - MarketplaceKind, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsCollection, + ExtensionsKind, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { BaseEntityProvider } from './BaseEntityProvider'; /** * @public */ -export class MarketplacePluginProvider extends BaseEntityProvider { +export class ExtensionsCollectionProvider extends BaseEntityProvider { getKind(): string { - return MarketplaceKind.Plugin; + return ExtensionsKind.Collection; } getProviderName(): string { - return 'marketplace-plugin-provider'; + return 'extensions-collection-provider'; } } + +/** + * @public + * @deprecated Use ExtensionsCollectionProvider instead + */ +export const MarketplaceCollectionProvider = ExtensionsCollectionProvider; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplacePackageProvider.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsPackageProvider.ts similarity index 64% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplacePackageProvider.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsPackageProvider.ts index 418dc37b13..c830070ebb 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplacePackageProvider.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsPackageProvider.ts @@ -14,20 +14,26 @@ * limitations under the License. */ import { - MarketplaceKind, - MarketplacePackage, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsKind, + ExtensionsPackage, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { BaseEntityProvider } from './BaseEntityProvider'; /** * @public */ -export class MarketplacePackageProvider extends BaseEntityProvider { +export class ExtensionsPackageProvider extends BaseEntityProvider { getKind(): string { - return MarketplaceKind.Package; + return ExtensionsKind.Package; } getProviderName(): string { - return 'marketplace-package-provider'; + return 'extensions-package-provider'; } } + +/** + * @public + * @deprecated Use ExtensionsPackageProvider instead + */ +export const MarketplacePackageProvider = ExtensionsPackageProvider; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplaceCollectionProvider.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsPluginProvider.ts similarity index 64% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplaceCollectionProvider.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsPluginProvider.ts index 5aa3d19ebe..23f4a3a8dc 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/MarketplaceCollectionProvider.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/ExtensionsPluginProvider.ts @@ -14,20 +14,26 @@ * limitations under the License. */ import { - MarketplaceCollection, - MarketplaceKind, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsKind, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { BaseEntityProvider } from './BaseEntityProvider'; /** * @public */ -export class MarketplaceCollectionProvider extends BaseEntityProvider { +export class ExtensionsPluginProvider extends BaseEntityProvider { getKind(): string { - return MarketplaceKind.Collection; + return ExtensionsKind.Plugin; } getProviderName(): string { - return 'marketplace-collection-provider'; + return 'extensions-plugin-provider'; } } + +/** + * @public + * @deprecated Use ExtensionsPluginProvider instead + */ +export const MarketplacePluginProvider = ExtensionsPluginProvider; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/index.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/index.ts similarity index 81% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/index.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/index.ts index f199e7a131..10b0c6deb6 100644 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/index.ts +++ b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/providers/index.ts @@ -14,6 +14,6 @@ * limitations under the License. */ export * from './BaseEntityProvider'; -export * from './MarketplacePluginProvider'; -export * from './MarketplaceCollectionProvider'; -export * from './MarketplacePackageProvider'; +export * from './ExtensionsPluginProvider'; +export * from './ExtensionsCollectionProvider'; +export * from './ExtensionsPackageProvider'; diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/types.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/types.ts similarity index 100% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/types.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/types.ts diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/utils/file-utils.test.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/utils/file-utils.test.ts similarity index 100% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/utils/file-utils.test.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/utils/file-utils.test.ts diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/utils/file-utils.ts b/workspaces/extensions/plugins/catalog-backend-module-extensions/src/utils/file-utils.ts similarity index 100% rename from workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/utils/file-utils.ts rename to workspaces/extensions/plugins/catalog-backend-module-extensions/src/utils/file-utils.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/.eslintrc.js b/workspaces/extensions/plugins/extensions-backend/.eslintrc.js similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/.eslintrc.js rename to workspaces/extensions/plugins/extensions-backend/.eslintrc.js diff --git a/workspaces/marketplace/plugins/marketplace-backend/CHANGELOG.md b/workspaces/extensions/plugins/extensions-backend/CHANGELOG.md similarity index 99% rename from workspaces/marketplace/plugins/marketplace-backend/CHANGELOG.md rename to workspaces/extensions/plugins/extensions-backend/CHANGELOG.md index 4eb1897367..ed03f7809a 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/CHANGELOG.md +++ b/workspaces/extensions/plugins/extensions-backend/CHANGELOG.md @@ -1,4 +1,4 @@ -# @red-hat-developer-hub/backstage-plugin-marketplace-backend +# @red-hat-developer-hub/backstage-plugin-extensions-backend ## 0.13.2 diff --git a/workspaces/marketplace/plugins/marketplace-backend/README.md b/workspaces/extensions/plugins/extensions-backend/README.md similarity index 82% rename from workspaces/marketplace/plugins/marketplace-backend/README.md rename to workspaces/extensions/plugins/extensions-backend/README.md index 23708cd698..2ad12cd1fc 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/README.md +++ b/workspaces/extensions/plugins/extensions-backend/README.md @@ -1,14 +1,14 @@ -# marketplace +# extensions This plugin backend was templated using the Backstage CLI. You should replace this text with a description of your plugin backend. ## Installation -This plugin is installed via the `@red-hat-developer-hub/backstage-plugin-marketplace-backend` package. To install it to your backend package, run the following command: +This plugin is installed via the `@red-hat-developer-hub/backstage-plugin-extensions-backend` package. To install it to your backend package, run the following command: ```bash # From your root directory -yarn --cwd packages/backend add @red-hat-developer-hub/backstage-plugin-marketplace-backend +yarn --cwd packages/backend add @red-hat-developer-hub/backstage-plugin-extensions-backend ``` Then add the plugin to your backend in `packages/backend/src/index.ts`: @@ -17,7 +17,7 @@ Then add the plugin to your backend in `packages/backend/src/index.ts`: const backend = createBackend(); // ... backend.add( - import('@red-hat-developer-hub/backstage-plugin-marketplace-backend'), + import('@red-hat-developer-hub/backstage-plugin-extensions-backend'), ); ``` diff --git a/workspaces/marketplace/plugins/marketplace-backend/__fixtures__/data/invalidPluginsConfigBadPackageFormat.yaml b/workspaces/extensions/plugins/extensions-backend/__fixtures__/data/invalidPluginsConfigBadPackageFormat.yaml similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/__fixtures__/data/invalidPluginsConfigBadPackageFormat.yaml rename to workspaces/extensions/plugins/extensions-backend/__fixtures__/data/invalidPluginsConfigBadPackageFormat.yaml diff --git a/workspaces/marketplace/plugins/marketplace-backend/__fixtures__/data/invalidPluginsConfigBadPluginsFormat.yaml b/workspaces/extensions/plugins/extensions-backend/__fixtures__/data/invalidPluginsConfigBadPluginsFormat.yaml similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/__fixtures__/data/invalidPluginsConfigBadPluginsFormat.yaml rename to workspaces/extensions/plugins/extensions-backend/__fixtures__/data/invalidPluginsConfigBadPluginsFormat.yaml diff --git a/workspaces/marketplace/plugins/marketplace-backend/__fixtures__/data/validPluginsConfig.yaml b/workspaces/extensions/plugins/extensions-backend/__fixtures__/data/validPluginsConfig.yaml similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/__fixtures__/data/validPluginsConfig.yaml rename to workspaces/extensions/plugins/extensions-backend/__fixtures__/data/validPluginsConfig.yaml diff --git a/workspaces/marketplace/plugins/marketplace-backend/__fixtures__/mockData.ts b/workspaces/extensions/plugins/extensions-backend/__fixtures__/mockData.ts similarity index 92% rename from workspaces/marketplace/plugins/marketplace-backend/__fixtures__/mockData.ts rename to workspaces/extensions/plugins/extensions-backend/__fixtures__/mockData.ts index 616018d2d5..02be9e2ffe 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/__fixtures__/mockData.ts +++ b/workspaces/extensions/plugins/extensions-backend/__fixtures__/mockData.ts @@ -14,9 +14,9 @@ * limitations under the License. */ import { - MarketplaceApi, - MarketplaceKind, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsApi, + ExtensionsKind, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { FileInstallationStorage } from '../src/installation/FileInstallationStorage'; import { type JsonObject } from '@backstage/types'; import { stringify } from 'yaml'; @@ -25,7 +25,7 @@ import { InstallationDataService } from '../src/installation/InstallationDataSer export const mockCollections = [ { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, metadata: { namespace: 'default', name: 'featured-plugins', @@ -43,7 +43,7 @@ export const mockCollections = [ export const mockPlugins = [ { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, metadata: { namespace: 'default', name: 'plugin1', @@ -58,7 +58,7 @@ export const mockPlugins = [ }, { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, metadata: { namespace: 'default', name: 'plugin2', @@ -73,7 +73,7 @@ export const mockPlugins = [ export const mockPackages = [ { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { namespace: 'default', name: 'package11', @@ -84,7 +84,7 @@ export const mockPackages = [ }, { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { namespace: 'default', name: 'package12', @@ -114,7 +114,7 @@ export const mockPackages = [ }, { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { namespace: 'default', name: 'package21', @@ -175,8 +175,8 @@ export const mockInstallationDataService = { setPluginDisabled: jest.fn(), } as unknown as jest.Mocked; -export const mockMarketplaceApi = { +export const mockExtensionsApi = { getPluginByName: jest.fn(), getPackageByName: jest.fn(), getPluginPackages: jest.fn(), -} as unknown as jest.Mocked; +} as unknown as jest.Mocked; diff --git a/workspaces/marketplace/plugins/marketplace-backend/config.d.ts b/workspaces/extensions/plugins/extensions-backend/config.d.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/config.d.ts rename to workspaces/extensions/plugins/extensions-backend/config.d.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/dev/index.ts b/workspaces/extensions/plugins/extensions-backend/dev/index.ts similarity index 80% rename from workspaces/marketplace/plugins/marketplace-backend/dev/index.ts rename to workspaces/extensions/plugins/extensions-backend/dev/index.ts index 8a2fcef1db..dc7891eaae 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/dev/index.ts +++ b/workspaces/extensions/plugins/extensions-backend/dev/index.ts @@ -27,17 +27,17 @@ import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils'; // // Create a new todo item, standalone or for the sample component: // -// curl http://localhost:7007/api/marketplace/todos -H 'Content-Type: application/json' -d '{"title": "My Todo"}' -// curl http://localhost:7007/api/marketplace/todos -H 'Content-Type: application/json' -d '{"title": "My Todo", "entityRef": "component:default/sample"}' +// curl http://localhost:7007/api/extensions/todos -H 'Content-Type: application/json' -d '{"title": "My Todo"}' +// curl http://localhost:7007/api/extensions/todos -H 'Content-Type: application/json' -d '{"title": "My Todo", "entityRef": "component:default/sample"}' // // List TODOs: // -// curl http://localhost:7007/api/marketplace/todos +// curl http://localhost:7007/api/extensions/todos // // Explicitly make an unauthenticated request, or with service auth: // -// curl http://localhost:7007/api/marketplace/todos -H 'Authorization: Bearer mock-none-token' -// curl http://localhost:7007/api/marketplace/todos -H 'Authorization: Bearer mock-service-token' +// curl http://localhost:7007/api/extensions/todos -H 'Authorization: Bearer mock-none-token' +// curl http://localhost:7007/api/extensions/todos -H 'Authorization: Bearer mock-service-token' const backend = createBackend(); diff --git a/workspaces/marketplace/plugins/marketplace-backend/knip-report.md b/workspaces/extensions/plugins/extensions-backend/knip-report.md similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/knip-report.md rename to workspaces/extensions/plugins/extensions-backend/knip-report.md diff --git a/workspaces/marketplace/plugins/marketplace-backend/package.json b/workspaces/extensions/plugins/extensions-backend/package.json similarity index 80% rename from workspaces/marketplace/plugins/marketplace-backend/package.json rename to workspaces/extensions/plugins/extensions-backend/package.json index 8e112b8113..219d279d7f 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/package.json +++ b/workspaces/extensions/plugins/extensions-backend/package.json @@ -1,5 +1,5 @@ { - "name": "@red-hat-developer-hub/backstage-plugin-marketplace-backend", + "name": "@red-hat-developer-hub/backstage-plugin-extensions-backend", "version": "0.13.2", "main": "src/index.ts", "types": "src/index.ts", @@ -12,15 +12,15 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/marketplace/plugins/marketplace-backend" + "directory": "workspaces/extensions/plugins/extensions-backend" }, "backstage": { "role": "backend-plugin", "pluginId": "extensions", "pluginPackages": [ - "@red-hat-developer-hub/backstage-plugin-marketplace", - "@red-hat-developer-hub/backstage-plugin-marketplace-backend", - "@red-hat-developer-hub/backstage-plugin-marketplace-common" + "@red-hat-developer-hub/backstage-plugin-extensions", + "@red-hat-developer-hub/backstage-plugin-extensions-backend", + "@red-hat-developer-hub/backstage-plugin-extensions-common" ] }, "scripts": { @@ -42,7 +42,7 @@ "@backstage/plugin-catalog-node": "^1.20.0", "@backstage/plugin-permission-common": "^0.9.3", "@backstage/plugin-permission-node": "^0.10.6", - "@red-hat-developer-hub/backstage-plugin-marketplace-common": "workspace:^", + "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^", "express": "^4.17.1", "express-promise-router": "^4.1.0", "yaml": "^2.7.1", diff --git a/workspaces/marketplace/plugins/marketplace-backend/report.api.md b/workspaces/extensions/plugins/extensions-backend/report.api.md similarity index 71% rename from workspaces/marketplace/plugins/marketplace-backend/report.api.md rename to workspaces/extensions/plugins/extensions-backend/report.api.md index 79bf952ab7..16b44c1533 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/report.api.md +++ b/workspaces/extensions/plugins/extensions-backend/report.api.md @@ -1,13 +1,16 @@ -## API Report File for "@red-hat-developer-hub/backstage-plugin-marketplace-backend" +## API Report File for "@red-hat-developer-hub/backstage-plugin-extensions-backend" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts + import { BackendFeature } from '@backstage/backend-plugin-api'; // @public -const marketplacePlugin: BackendFeature; -export default marketplacePlugin; +const extensionsPlugin: BackendFeature; +export default extensionsPlugin; +export { extensionsPlugin } // (No @packageDocumentation comment for this package) + ``` diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/errors/ConfigFormatError.ts b/workspaces/extensions/plugins/extensions-backend/src/errors/ConfigFormatError.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/errors/ConfigFormatError.ts rename to workspaces/extensions/plugins/extensions-backend/src/errors/ConfigFormatError.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/errors/InstallationInitError.ts b/workspaces/extensions/plugins/extensions-backend/src/errors/InstallationInitError.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/errors/InstallationInitError.ts rename to workspaces/extensions/plugins/extensions-backend/src/errors/InstallationInitError.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/index.ts b/workspaces/extensions/plugins/extensions-backend/src/index.ts similarity index 89% rename from workspaces/marketplace/plugins/marketplace-backend/src/index.ts rename to workspaces/extensions/plugins/extensions-backend/src/index.ts index 362edfa394..43d3caae3b 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/index.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { marketplacePlugin as default } from './plugin'; +export { extensionsPlugin as default, extensionsPlugin } from './plugin'; diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/installation/FileInstallationStorage.test.ts b/workspaces/extensions/plugins/extensions-backend/src/installation/FileInstallationStorage.test.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/installation/FileInstallationStorage.test.ts rename to workspaces/extensions/plugins/extensions-backend/src/installation/FileInstallationStorage.test.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/installation/FileInstallationStorage.ts b/workspaces/extensions/plugins/extensions-backend/src/installation/FileInstallationStorage.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/installation/FileInstallationStorage.ts rename to workspaces/extensions/plugins/extensions-backend/src/installation/FileInstallationStorage.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/installation/InstallationDataService.test.ts b/workspaces/extensions/plugins/extensions-backend/src/installation/InstallationDataService.test.ts similarity index 94% rename from workspaces/marketplace/plugins/marketplace-backend/src/installation/InstallationDataService.test.ts rename to workspaces/extensions/plugins/extensions-backend/src/installation/InstallationDataService.test.ts index 7eadd6cf66..bcdd5dc3f6 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/installation/InstallationDataService.test.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/installation/InstallationDataService.test.ts @@ -20,7 +20,7 @@ import { mockDynamicPackage11, mockDynamicPlugin1, mockFileInstallationStorage, - mockMarketplaceApi, + mockExtensionsApi, mockPackages, mockPlugins, } from '../../__fixtures__/mockData'; @@ -54,7 +54,7 @@ describe('InstallationDataService', () => { const mockLogger = mockServices.logger.mock(); const plugin = mockPlugins[0]; - mockMarketplaceApi.getPluginPackages = jest.fn((namespace, name) => { + mockExtensionsApi.getPluginPackages = jest.fn((namespace, name) => { const isMatch = name === plugin.metadata.name && namespace === plugin.metadata.namespace; return Promise.resolve(isMatch ? [mockPackages[0], mockPackages[1]] : []); @@ -71,7 +71,7 @@ describe('InstallationDataService', () => { process.env.NODE_ENV = 'production'; installationDataService = InstallationDataService.fromConfig({ config: validConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockLogger, }); @@ -91,7 +91,7 @@ describe('InstallationDataService', () => { installationDataService = InstallationDataService.fromConfig({ config: disabledConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockLogger, }); @@ -111,7 +111,7 @@ describe('InstallationDataService', () => { installationDataService = InstallationDataService.fromConfig({ config: missingFileConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockLogger, }); @@ -144,7 +144,7 @@ describe('InstallationDataService', () => { installationDataService = InstallationDataService.fromConfig({ config: fileNotFoundConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockLogger, }); @@ -162,7 +162,7 @@ describe('InstallationDataService', () => { beforeEach(async () => { installationDataService = InstallationDataService.fromConfig({ config: validConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockServices.logger.mock(), }); }); @@ -179,7 +179,7 @@ describe('InstallationDataService', () => { beforeEach(async () => { installationDataService = InstallationDataService.fromConfig({ config: validConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockServices.logger.mock(), }); }); @@ -194,7 +194,7 @@ describe('InstallationDataService', () => { beforeEach(() => { installationDataService = InstallationDataService.fromConfig({ config: validConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockLogger, }); }); @@ -217,7 +217,7 @@ describe('InstallationDataService', () => { beforeEach(() => { installationDataService = InstallationDataService.fromConfig({ config: validConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockLogger, }); }); @@ -241,7 +241,7 @@ describe('InstallationDataService', () => { beforeEach(() => { installationDataService = InstallationDataService.fromConfig({ config: validConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockLogger, }); }); @@ -262,7 +262,7 @@ describe('InstallationDataService', () => { beforeEach(() => { installationDataService = InstallationDataService.fromConfig({ config: validConfig, - marketplaceApi: mockMarketplaceApi, + extensionsApi: mockExtensionsApi, logger: mockLogger, }); }); diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/installation/InstallationDataService.ts b/workspaces/extensions/plugins/extensions-backend/src/installation/InstallationDataService.ts similarity index 88% rename from workspaces/marketplace/plugins/marketplace-backend/src/installation/InstallationDataService.ts rename to workspaces/extensions/plugins/extensions-backend/src/installation/InstallationDataService.ts index 982a47e66c..9baffe0971 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/installation/InstallationDataService.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/installation/InstallationDataService.ts @@ -15,9 +15,9 @@ */ import { - MarketplaceApi, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsApi, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { DEFAULT_NAMESPACE } from '@backstage/catalog-model'; import { FileInstallationStorage, @@ -34,7 +34,7 @@ import { ConfigFormatError } from '../errors/ConfigFormatError'; export class InstallationDataService { private constructor( - private readonly marketplaceApi: MarketplaceApi, + private readonly extensionsApi: ExtensionsApi, private readonly _installationStorage?: InstallationStorage, private readonly initializationError?: InstallationInitError, ) {} @@ -50,10 +50,10 @@ export class InstallationDataService { static fromConfig(deps: { config: Config; - marketplaceApi: MarketplaceApi; + extensionsApi: ExtensionsApi; logger: LoggerService; }): InstallationDataService { - const { config, marketplaceApi, logger } = deps; + const { config, extensionsApi, logger } = deps; const serviceWithInitializationError = ( reason: InstallationInitErrorReasonKeys, @@ -72,7 +72,7 @@ export class InstallationDataService { ); } return new InstallationDataService( - marketplaceApi, + extensionsApi, undefined, new InstallationInitError(reason, message, cause), ); @@ -109,7 +109,7 @@ export class InstallationDataService { const storage = new FileInstallationStorage(filePath); storage.initialize(); - return new InstallationDataService(marketplaceApi, storage); + return new InstallationDataService(extensionsApi, storage); } catch (e) { let reason: InstallationInitErrorReasonKeys; if (e instanceof InstallationInitError) { @@ -128,15 +128,15 @@ export class InstallationDataService { } private async getPluginDynamicArtifacts( - plugin: MarketplacePlugin, + plugin: ExtensionsPlugin, ): Promise> { - const marketplacePackages = await this.marketplaceApi.getPluginPackages( + const extensionsPackages = await this.extensionsApi.getPluginPackages( plugin.metadata.namespace ?? DEFAULT_NAMESPACE, plugin.metadata.name, ); return new Set( - marketplacePackages.flatMap(p => + extensionsPackages.flatMap(p => p.spec?.dynamicArtifact ? [p.spec.dynamicArtifact] : [], ), ); @@ -150,9 +150,7 @@ export class InstallationDataService { return this.installationStorage.getPackage(packageDynamicArtifact); } - async getPluginConfig( - plugin: MarketplacePlugin, - ): Promise { + async getPluginConfig(plugin: ExtensionsPlugin): Promise { const dynamicArtifacts = await this.getPluginDynamicArtifacts(plugin); return this.installationStorage.getPackages(dynamicArtifacts); } @@ -162,7 +160,7 @@ export class InstallationDataService { } async updatePluginConfig( - plugin: MarketplacePlugin, + plugin: ExtensionsPlugin, newConfig: string, ): Promise { const dynamicArtifacts = await this.getPluginDynamicArtifacts(plugin); @@ -176,7 +174,7 @@ export class InstallationDataService { ); } - async setPluginDisabled(plugin: MarketplacePlugin, disabled: boolean) { + async setPluginDisabled(plugin: ExtensionsPlugin, disabled: boolean) { const dynamicArtifacts = await this.getPluginDynamicArtifacts(plugin); this.installationStorage.setPackagesDisabled(dynamicArtifacts, disabled); } diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/permissions/rules.ts b/workspaces/extensions/plugins/extensions-backend/src/permissions/rules.ts similarity index 92% rename from workspaces/marketplace/plugins/marketplace-backend/src/permissions/rules.ts rename to workspaces/extensions/plugins/extensions-backend/src/permissions/rules.ts index 74bae96641..6db714a975 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/permissions/rules.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/permissions/rules.ts @@ -20,9 +20,9 @@ import { } from '@backstage/plugin-permission-node'; import { z } from 'zod'; import { - MarketplacePlugin, + ExtensionsPlugin, RESOURCE_TYPE_EXTENSIONS_PLUGIN, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; export type ExtentionFilter = { key: string; @@ -36,7 +36,7 @@ export type ExtentionFilters = | ExtentionFilter; export const extensionsPermissionResourceRef = createPermissionResourceRef< - MarketplacePlugin, + ExtensionsPlugin, ExtentionFilter >().with({ pluginId: 'extensions', @@ -61,7 +61,7 @@ const hasPluginName = createPermissionRule({ .optional() .describe('List of plugin names or titles to match on'), }), - apply: (plugin: MarketplacePlugin, { pluginNames }) => { + apply: (plugin: ExtensionsPlugin, { pluginNames }) => { return pluginNames && pluginNames.length > 0 ? pluginNames?.some( name => @@ -85,7 +85,7 @@ const hasAnnotation = createPermissionRule({ .optional() .describe('Value of the annotation to match on'), }), - apply: (plugin: MarketplacePlugin, params: ExtensionParams) => + apply: (plugin: ExtensionsPlugin, params: ExtensionParams) => !!plugin.metadata.annotations?.hasOwnProperty(params.annotation) && (params.value === undefined ? true diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/plugin.test.ts b/workspaces/extensions/plugins/extensions-backend/src/plugin.test.ts similarity index 84% rename from workspaces/marketplace/plugins/marketplace-backend/src/plugin.test.ts rename to workspaces/extensions/plugins/extensions-backend/src/plugin.test.ts index 510a235f8b..ff726193a3 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/plugin.test.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/plugin.test.ts @@ -16,15 +16,15 @@ // import { startTestBackend } from '@backstage/backend-test-utils'; // import request from 'supertest'; -// import { marketplacePlugin } from './plugin'; +// import { extensionsPlugin } from './plugin'; describe('plugin', () => { // TODO: Fix tests it('should return plugins', async () => { expect(true).toBeTruthy(); // const { server } = await startTestBackend({ - // features: [marketplacePlugin], + // features: [extensionsPlugin], // }); - // await request(server).get('/api/marketplace/plugins').expect(200, []); + // await request(server).get('/api/extensions/plugins').expect(200, []); }); }); diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/plugin.ts b/workspaces/extensions/plugins/extensions-backend/src/plugin.ts similarity index 83% rename from workspaces/marketplace/plugins/marketplace-backend/src/plugin.ts rename to workspaces/extensions/plugins/extensions-backend/src/plugin.ts index c2d6c41556..dd1c42eb5c 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/plugin.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/plugin.ts @@ -22,19 +22,19 @@ import { CatalogClient } from '@backstage/catalog-client'; import { dynamicPluginsServiceRef } from '@backstage/backend-dynamic-feature-service'; import { - MarketplaceApi, - MarketplaceCatalogClient, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsApi, + ExtensionsCatalogClient, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { createRouter } from './router'; import { InstallationDataService } from './installation/InstallationDataService'; /** - * marketplacePlugin backend plugin + * Extensions backend plugin * * @public */ -export const marketplacePlugin = createBackendPlugin({ +export const extensionsPlugin = createBackendPlugin({ pluginId: 'extensions', register(env) { env.registerInit({ @@ -60,7 +60,7 @@ export const marketplacePlugin = createBackendPlugin({ }) { const catalogApi = new CatalogClient({ discoveryApi: discovery }); - const marketplaceApi: MarketplaceApi = new MarketplaceCatalogClient({ + const extensionsApi: ExtensionsApi = new ExtensionsCatalogClient({ auth, catalogApi, }); @@ -68,7 +68,7 @@ export const marketplacePlugin = createBackendPlugin({ const installationDataService: InstallationDataService = InstallationDataService.fromConfig({ config, - marketplaceApi, + extensionsApi, logger, }); @@ -76,7 +76,7 @@ export const marketplacePlugin = createBackendPlugin({ await createRouter({ httpAuth, installationDataService, - marketplaceApi, + extensionsApi, permissions, pluginProvider, logger, @@ -87,3 +87,9 @@ export const marketplacePlugin = createBackendPlugin({ }); }, }); + +/** + * @public + * @deprecated Use extensionsPlugin instead + */ +export const markerplacePlugin = extensionsPlugin; diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/router.test.ts b/workspaces/extensions/plugins/extensions-backend/src/router.test.ts similarity index 95% rename from workspaces/marketplace/plugins/marketplace-backend/src/router.test.ts rename to workspaces/extensions/plugins/extensions-backend/src/router.test.ts index 98d4546f8d..9006e6b5c9 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/router.test.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/router.test.ts @@ -36,11 +36,11 @@ import { PolicyDecision, } from '@backstage/plugin-permission-common'; import { - MarketplaceCollection, - MarketplaceKind, - MarketplacePackage, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsCollection, + ExtensionsKind, + ExtensionsPackage, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { mockCollections, mockDynamicPackage11, @@ -51,16 +51,16 @@ import { } from '../__fixtures__/mockData'; import { ConfigFormatError } from './errors/ConfigFormatError'; import { InstallationDataService } from './installation/InstallationDataService'; -import { marketplacePlugin } from './plugin'; +import { extensionsPlugin } from './plugin'; import { InstallationInitError, InstallationInitErrorReason, } from './errors/InstallationInitError'; -type MockMarketplaceEntity = - | Partial - | Partial - | Partial; +type MockExtensionsEntity = + | Partial + | Partial + | Partial; const BASE_CONFIG = { app: { @@ -90,7 +90,7 @@ const mockDynamicPluginsData: BaseDynamicPlugin[] = [ platform: 'web', }, { - name: '@red-hat-developer-hub/backstage-plugin-marketplace', + name: '@red-hat-developer-hub/backstage-plugin-extensions', version: '1.0.0', role: 'frontend', platform: 'web', @@ -130,7 +130,7 @@ const PLUGIN_SETUP = { const PACKAGE_SETUP = { mockData: [...mockPackages, ...mockPlugins], name: 'package11', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, config: FILE_INSTALL_CONFIG, relationName: 'plugin1', }; @@ -181,7 +181,7 @@ async function startBackendServer( authorizeResult?: PolicyDecision, ): Promise { const features: (BackendFeature | Promise<{ default: BackendFeature }>)[] = [ - marketplacePlugin, + extensionsPlugin, mockServices.rootLogger.factory(), mockServices.rootConfig.factory({ data: { ...BASE_CONFIG, ...(config ?? {}) }, @@ -279,11 +279,11 @@ describe('createRouter', () => { const setupTestWithMockCatalog = async ({ mockData, name, - kind = MarketplaceKind.Plugin, + kind = ExtensionsKind.Plugin, config, policyDecision, }: { - mockData: MockMarketplaceEntity[] | {}; + mockData: MockExtensionsEntity[] | {}; name?: string; kind?: string; config?: JsonObject; @@ -373,7 +373,7 @@ describe('createRouter', () => { const { backendServer } = await setupTestWithMockCatalog({ mockData: mockCollections, name: 'featured-plugins', - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, }); const response = await request(backendServer).get( @@ -389,7 +389,7 @@ describe('createRouter', () => { const { backendServer } = await setupTestWithMockCatalog({ mockData: [], name: 'not-found', - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, }); const response = await request(backendServer).get( @@ -454,7 +454,7 @@ describe('createRouter', () => { const { backendServer } = await setupTestWithMockCatalog({ mockData: [], name: 'not-found', - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, }); const response = await request(backendServer).get( @@ -540,7 +540,7 @@ describe('createRouter', () => { const response = await request(backendServer).get( '/api/extensions/plugin/default/not-found', ); - expectNotFoundError(response, MarketplaceKind.Plugin); + expectNotFoundError(response, ExtensionsKind.Plugin); }); }); @@ -555,7 +555,7 @@ describe('createRouter', () => { const response = await request(backendServer).get( '/api/extensions/plugin/default/not-found/configuration', ); - expectNotFoundError(response, MarketplaceKind.Plugin); + expectNotFoundError(response, ExtensionsKind.Plugin); }); it('should get the plugin configuration', async () => { @@ -615,7 +615,7 @@ describe('createRouter', () => { const response = await request(backendServer) .post('/api/extensions/plugin/default/not-found/configuration') .send({ configYaml: stringify(mockDynamicPlugin1) }); - expectNotFoundError(response, MarketplaceKind.Plugin); + expectNotFoundError(response, ExtensionsKind.Plugin); }); it('should install the plugin configuration', async () => { @@ -661,7 +661,7 @@ describe('createRouter', () => { const response = await request(backendServer) .patch('/api/extensions/plugin/default/not-found/configuration/disable') .send({ disabled: true }); - expectNotFoundError(response, MarketplaceKind.Plugin); + expectNotFoundError(response, ExtensionsKind.Plugin); }); it.each([ @@ -686,20 +686,20 @@ describe('createRouter', () => { const { backendServer } = await setupTestWithMockCatalog({ mockData: [], name: 'not-found', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, config: FILE_INSTALL_CONFIG, }); const response = await request(backendServer).get( '/api/extensions/package/default/not-found/configuration', ); - expectNotFoundError(response, MarketplaceKind.Package); + expectNotFoundError(response, ExtensionsKind.Package); }); it('should get the package configuration', async () => { const { backendServer } = await setupTestWithMockCatalog({ mockData: [...mockPackages, ...mockPlugins], name: 'package11', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, config: FILE_INSTALL_CONFIG, }); const packageToGet = stringify(mockDynamicPackage11); @@ -746,14 +746,14 @@ describe('createRouter', () => { const { backendServer } = await setupTestWithMockCatalog({ mockData: [], name: 'not-found', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, config: FILE_INSTALL_CONFIG, }); const response = await request(backendServer) .post('/api/extensions/package/default/not-found/configuration') .send({ configYaml: stringify(mockDynamicPackage11) }); - expectNotFoundError(response, MarketplaceKind.Package); + expectNotFoundError(response, ExtensionsKind.Package); }); it('should install the package configuration', async () => { @@ -798,7 +798,7 @@ describe('createRouter', () => { const { backendServer } = await setupTestWithMockCatalog({ mockData: [], name: 'not-found', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, config: FILE_INSTALL_CONFIG, }); @@ -807,7 +807,7 @@ describe('createRouter', () => { '/api/extensions/package/default/not-found/configuration/disable', ) .send({ disabled: true }); - expectNotFoundError(response, MarketplaceKind.Package); + expectNotFoundError(response, ExtensionsKind.Package); }); it.each([ @@ -876,7 +876,7 @@ describe('createRouter', () => { const { backendServer } = await setupTestWithMockCatalog({ mockData: [...mockPackages, ...mockPlugins], name, - kind: isPackage ? MarketplaceKind.Package : MarketplaceKind.Plugin, + kind: isPackage ? ExtensionsKind.Package : ExtensionsKind.Plugin, config: FILE_INSTALL_CONFIG, policyDecision, }); diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/router.ts b/workspaces/extensions/plugins/extensions-backend/src/router.ts similarity index 86% rename from workspaces/marketplace/plugins/marketplace-backend/src/router.ts rename to workspaces/extensions/plugins/extensions-backend/src/router.ts index c92559c4ed..0d9c1acc49 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/router.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/router.ts @@ -36,11 +36,11 @@ import { decodeGetEntityFacetsRequest, extensionsPluginWritePermission, extensionsPluginReadPermission, - MarketplaceApi, - MarketplacePlugin, + ExtensionsApi, + ExtensionsPlugin, RESOURCE_TYPE_EXTENSIONS_PLUGIN, extensionsPermissions, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; import { createSearchParams } from './utils/createSearchParams'; import { removeVerboseSpecContent } from './utils/removeVerboseSpecContent'; @@ -55,9 +55,9 @@ import { DynamicPluginProvider, } from '@backstage/backend-dynamic-feature-service'; -export type MarketplaceRouterOptions = { +export type ExtensionsRouterOptions = { httpAuth: HttpAuthService; - marketplaceApi: MarketplaceApi; + extensionsApi: ExtensionsApi; permissions: PermissionsService; installationDataService: InstallationDataService; pluginProvider: DynamicPluginProvider; @@ -66,11 +66,11 @@ export type MarketplaceRouterOptions = { }; export async function createRouter( - options: MarketplaceRouterOptions, + options: ExtensionsRouterOptions, ): Promise { const { httpAuth, - marketplaceApi, + extensionsApi, permissions, installationDataService, pluginProvider, @@ -139,7 +139,7 @@ export async function createRouter( ); } - const plugin = await marketplaceApi.getPluginByName( + const plugin = await extensionsApi.getPluginByName( request.params.namespace, request.params.name, ); @@ -169,7 +169,7 @@ export async function createRouter( ); } - const packagePlugins = await marketplaceApi.getPackagePlugins( + const packagePlugins = await extensionsApi.getPackagePlugins( request.params.namespace, request.params.name, ); @@ -183,7 +183,7 @@ export async function createRouter( ); } - return await marketplaceApi.getPackageByName( + return await extensionsApi.getPackageByName( request.params.namespace, request.params.name, ); @@ -191,18 +191,18 @@ export async function createRouter( router.get('/collections', async (req, res) => { const request = decodeGetEntitiesRequest(createSearchParams(req)); - const collections = await marketplaceApi.getCollections(request); + const collections = await extensionsApi.getCollections(request); res.json(collections); }); router.get('/collections/facets', async (req, res) => { const request = decodeGetEntityFacetsRequest(createSearchParams(req)); - const facets = await marketplaceApi.getCollectionsFacets(request); + const facets = await extensionsApi.getCollectionsFacets(request); res.json(facets); }); router.get('/collection/:namespace/:name', async (req, res) => { - const collection = await marketplaceApi.getCollectionByName( + const collection = await extensionsApi.getCollectionByName( req.params.namespace, req.params.name, ); @@ -210,7 +210,7 @@ export async function createRouter( }); router.get('/collection/:namespace/:name/plugins', async (req, res) => { - const plugins = await marketplaceApi.getCollectionPlugins( + const plugins = await extensionsApi.getCollectionPlugins( req.params.namespace, req.params.name, ); @@ -220,20 +220,20 @@ export async function createRouter( router.get('/packages', async (req, res) => { const request = decodeGetEntitiesRequest(createSearchParams(req)); - const packages = await marketplaceApi.getPackages(request); + const packages = await extensionsApi.getPackages(request); removeVerboseSpecContent(packages.items); res.json(packages); }); router.get('/packages/facets', async (req, res) => { const request = decodeGetEntityFacetsRequest(createSearchParams(req)); - const facets = await marketplaceApi.getPackagesFacets(request); + const facets = await extensionsApi.getPackagesFacets(request); res.json(facets); }); router.get('/package/:namespace/:name', async (req, res) => { res.json( - await marketplaceApi.getPackageByName( + await extensionsApi.getPackageByName( req.params.namespace, req.params.name, ), @@ -244,18 +244,18 @@ export async function createRouter( '/package/:namespace/:name/configuration', requireInitializedInstallationDataService, async (req, res) => { - const marketplacePackage = await getAuthorizedPackage( + const extensionsPackage = await getAuthorizedPackage( req, extensionsPluginReadPermission, ); - if (!marketplacePackage.spec?.dynamicArtifact) { + if (!extensionsPackage.spec?.dynamicArtifact) { throw new Error( - `Package catalog entity ${marketplacePackage.metadata.name} is missing 'spec.dynamicArtifact'`, + `Package catalog entity ${extensionsPackage.metadata.name} is missing 'spec.dynamicArtifact'`, ); } const result = installationDataService.getPackageConfig( - marketplacePackage.spec?.dynamicArtifact, + extensionsPackage.spec?.dynamicArtifact, ); res.status(200).json({ configYaml: result }); }, @@ -265,13 +265,13 @@ export async function createRouter( '/package/:namespace/:name/configuration', requireInitializedInstallationDataService, async (req, res) => { - const marketplacePackage = await getAuthorizedPackage( + const extensionsPackage = await getAuthorizedPackage( req, extensionsPluginWritePermission, ); - if (!marketplacePackage.spec?.dynamicArtifact) { + if (!extensionsPackage.spec?.dynamicArtifact) { throw new Error( - `Package ${marketplacePackage.metadata.name} is missing 'spec.dynamicArtifact'`, + `Package ${extensionsPackage.metadata.name} is missing 'spec.dynamicArtifact'`, ); } @@ -281,7 +281,7 @@ export async function createRouter( } try { installationDataService.updatePackageConfig( - marketplacePackage.spec.dynamicArtifact, + extensionsPackage.spec.dynamicArtifact, newConfig, ); } catch (e) { @@ -304,14 +304,14 @@ export async function createRouter( '/package/:namespace/:name/configuration/disable', requireInitializedInstallationDataService, async (req, res) => { - const marketplacePackage = await getAuthorizedPackage( + const extensionsPackage = await getAuthorizedPackage( req, extensionsPluginWritePermission, ); - if (!marketplacePackage.spec?.dynamicArtifact) { + if (!extensionsPackage.spec?.dynamicArtifact) { throw new Error( - `Package catalog entity ${marketplacePackage.metadata.name} is missing 'spec.dynamicArtifact'`, + `Package catalog entity ${extensionsPackage.metadata.name} is missing 'spec.dynamicArtifact'`, ); } @@ -320,7 +320,7 @@ export async function createRouter( throw new InputError("'disabled' must be present boolean"); } installationDataService.setPackageDisabled( - marketplacePackage.spec.dynamicArtifact, + extensionsPackage.spec.dynamicArtifact, disabled, ); res.status(200).json({ status: 'OK' }); @@ -329,14 +329,14 @@ export async function createRouter( router.get('/plugins', async (req, res) => { const request = decodeGetEntitiesRequest(createSearchParams(req)); - const plugins = await marketplaceApi.getPlugins(request); + const plugins = await extensionsApi.getPlugins(request); removeVerboseSpecContent(plugins.items); res.json(plugins); }); router.get('/plugins/facets', async (req, res) => { const request = decodeGetEntityFacetsRequest(createSearchParams(req)); - const facets = await marketplaceApi.getPluginFacets(request); + const facets = await extensionsApi.getPluginFacets(request); res.json(facets); }); @@ -347,7 +347,7 @@ export async function createRouter( }); router.get('/plugin/:namespace/:name', async (req, res) => { - const plugin = await marketplaceApi.getPluginByName( + const plugin = await extensionsApi.getPluginByName( req.params.namespace, req.params.name, ); @@ -370,7 +370,7 @@ export async function createRouter( } let authorizedActions = {}; - let plugin: MarketplacePlugin; + let plugin: ExtensionsPlugin; const evaluateConditional = async ( decision: PolicyDecision, @@ -378,7 +378,7 @@ export async function createRouter( ) => { if (decision.result === AuthorizeResult.CONDITIONAL) { if (!plugin) { - plugin = await marketplaceApi.getPluginByName( + plugin = await extensionsApi.getPluginByName( req.params.namespace, req.params.name, ); @@ -461,7 +461,7 @@ export async function createRouter( ); router.get('/plugin/:namespace/:name/packages', async (req, res) => { - const packages = await marketplaceApi.getPluginPackages( + const packages = await extensionsApi.getPluginPackages( req.params.namespace, req.params.name, ); diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/setupTests.ts b/workspaces/extensions/plugins/extensions-backend/src/setupTests.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/setupTests.ts rename to workspaces/extensions/plugins/extensions-backend/src/setupTests.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/utils/createSearchParams.ts b/workspaces/extensions/plugins/extensions-backend/src/utils/createSearchParams.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/utils/createSearchParams.ts rename to workspaces/extensions/plugins/extensions-backend/src/utils/createSearchParams.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/utils/permissionUtils.ts b/workspaces/extensions/plugins/extensions-backend/src/utils/permissionUtils.ts similarity index 92% rename from workspaces/marketplace/plugins/marketplace-backend/src/utils/permissionUtils.ts rename to workspaces/extensions/plugins/extensions-backend/src/utils/permissionUtils.ts index ef755a171c..3c1290cded 100644 --- a/workspaces/marketplace/plugins/marketplace-backend/src/utils/permissionUtils.ts +++ b/workspaces/extensions/plugins/extensions-backend/src/utils/permissionUtils.ts @@ -20,12 +20,12 @@ import { PermissionRuleParams, } from '@backstage/plugin-permission-common'; -import { MarketplacePlugin } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPlugin } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { ExtensionParams, rules as extensionRules } from '../permissions/rules'; export const matches = ( - plugin?: MarketplacePlugin, + plugin?: ExtensionsPlugin, filters?: PermissionCriteria< PermissionCondition >, diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/utils/removeVerboseSpecContent.ts b/workspaces/extensions/plugins/extensions-backend/src/utils/removeVerboseSpecContent.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/utils/removeVerboseSpecContent.ts rename to workspaces/extensions/plugins/extensions-backend/src/utils/removeVerboseSpecContent.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/validation/configValidation.test.ts b/workspaces/extensions/plugins/extensions-backend/src/validation/configValidation.test.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/validation/configValidation.test.ts rename to workspaces/extensions/plugins/extensions-backend/src/validation/configValidation.test.ts diff --git a/workspaces/marketplace/plugins/marketplace-backend/src/validation/configValidation.ts b/workspaces/extensions/plugins/extensions-backend/src/validation/configValidation.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-backend/src/validation/configValidation.ts rename to workspaces/extensions/plugins/extensions-backend/src/validation/configValidation.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/.eslintrc.js b/workspaces/extensions/plugins/extensions-common/.eslintrc.js similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/.eslintrc.js rename to workspaces/extensions/plugins/extensions-common/.eslintrc.js diff --git a/workspaces/marketplace/plugins/marketplace-common/CHANGELOG.md b/workspaces/extensions/plugins/extensions-common/CHANGELOG.md similarity index 96% rename from workspaces/marketplace/plugins/marketplace-common/CHANGELOG.md rename to workspaces/extensions/plugins/extensions-common/CHANGELOG.md index 6c19320cd9..8ae995f3bb 100644 --- a/workspaces/marketplace/plugins/marketplace-common/CHANGELOG.md +++ b/workspaces/extensions/plugins/extensions-common/CHANGELOG.md @@ -1,4 +1,4 @@ -# @red-hat-developer-hub/backstage-plugin-marketplace-common +# @red-hat-developer-hub/backstage-plugin-extensions-common ## 0.13.2 @@ -79,7 +79,7 @@ ### Minor Changes - f70ccb1: Use plugin permissions in package configuration endpoints. `AuthorizeResult` for particular package is based upon if user has ALLOW permission for any of plugins that contain this package. Removes unused `extensions-package` permissions. -- 7aac60c: Introduces `PluginInstallStatusProcessor` to add `spec.installStatus` for Marketplace plugins. Introduces new `installStatus` values: `MarketplacePackageInstallStatus.Disabled` and `MarketplacePluginInstallStatus.Disabled`. +- 7aac60c: Introduces `PluginInstallStatusProcessor` to add `spec.installStatus` for Marketplace plugins. Introduces new `installStatus` values: `ExtensionsPackageInstallStatus.Disabled` and `ExtensionsPluginInstallStatus.Disabled`. ## 0.6.0 diff --git a/workspaces/extensions/plugins/extensions-common/README.md b/workspaces/extensions/plugins/extensions-common/README.md new file mode 100644 index 0000000000..15ce75c6d2 --- /dev/null +++ b/workspaces/extensions/plugins/extensions-common/README.md @@ -0,0 +1,5 @@ +# @red-hat-developer-hub/backstage-plugin-extensions-common + +Welcome to the common package for the extensions plugin! + +_This plugin was created through the Backstage CLI_ diff --git a/workspaces/marketplace/plugins/marketplace-common/knip-report.md b/workspaces/extensions/plugins/extensions-common/knip-report.md similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/knip-report.md rename to workspaces/extensions/plugins/extensions-common/knip-report.md diff --git a/workspaces/marketplace/plugins/marketplace-common/package.json b/workspaces/extensions/plugins/extensions-common/package.json similarity index 76% rename from workspaces/marketplace/plugins/marketplace-common/package.json rename to workspaces/extensions/plugins/extensions-common/package.json index b138204b0d..a14a06f5dd 100644 --- a/workspaces/marketplace/plugins/marketplace-common/package.json +++ b/workspaces/extensions/plugins/extensions-common/package.json @@ -1,6 +1,6 @@ { - "name": "@red-hat-developer-hub/backstage-plugin-marketplace-common", - "description": "Common functionalities for the marketplace plugin", + "name": "@red-hat-developer-hub/backstage-plugin-extensions-common", + "description": "Common functionalities for the extensions plugin", "version": "0.13.2", "main": "src/index.ts", "types": "src/index.ts", @@ -14,15 +14,15 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/marketplace/plugins/marketplace-common" + "directory": "workspaces/extensions/plugins/extensions-common" }, "backstage": { "role": "common-library", "pluginId": "extensions", "pluginPackages": [ - "@red-hat-developer-hub/backstage-plugin-marketplace", - "@red-hat-developer-hub/backstage-plugin-marketplace-backend", - "@red-hat-developer-hub/backstage-plugin-marketplace-common" + "@red-hat-developer-hub/backstage-plugin-extensions", + "@red-hat-developer-hub/backstage-plugin-extensions-backend", + "@red-hat-developer-hub/backstage-plugin-extensions-common" ] }, "sideEffects": false, diff --git a/workspaces/marketplace/plugins/marketplace-common/report.api.md b/workspaces/extensions/plugins/extensions-common/report.api.md similarity index 79% rename from workspaces/marketplace/plugins/marketplace-common/report.api.md rename to workspaces/extensions/plugins/extensions-common/report.api.md index df600a0135..6bc4126a7b 100644 --- a/workspaces/marketplace/plugins/marketplace-common/report.api.md +++ b/workspaces/extensions/plugins/extensions-common/report.api.md @@ -1,4 +1,4 @@ -## API Report File for "@red-hat-developer-hub/backstage-plugin-marketplace-common" +## API Report File for "@red-hat-developer-hub/backstage-plugin-extensions-common" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). @@ -45,6 +45,9 @@ export const decodeGetEntitiesRequest: (searchParams: URLSearchParams) => GetEnt // @public (undocumented) export const decodeGetEntityFacetsRequest: (searchParams: URLSearchParams) => GetEntityFacetsRequest; +// @public @deprecated (undocumented) +export const DEPRECATED_EXTENSIONS_API_VERSION = "marketplace.backstage.io/v1alpha1"; + // @public (undocumented) export type DiscoveryApi = { getBaseUrl(pluginId: string): Promise; @@ -84,65 +87,7 @@ export const encodeGetEntityFacetsRequest: (request: GetEntityFacetsRequest) => export const EXTENSIONS_API_VERSION = "extensions.backstage.io/v1alpha1"; // @public (undocumented) -export interface ExtensionsPackageAppConfigExamples { - // (undocumented) - [key: string]: MarketplacePackageSpecAppConfigExample[]; -} - -// @public (undocumented) -export const extensionsPermissions: ResourcePermission<"extensions-plugin">[]; - -// @public -export const extensionsPluginDeletePermission: ResourcePermission<"extensions-plugin">; - -// @public -export type ExtensionsPluginPermission = ResourcePermission; - -// @public -export const extensionsPluginReadPermission: ResourcePermission<"extensions-plugin">; - -// @public -export const extensionsPluginWritePermission: ResourcePermission<"extensions-plugin">; - -// @public (undocumented) -export type FetchApi = { - fetch: typeof fetch; -}; - -// @public (undocumented) -export type GetEntitiesRequest = QueryEntitiesInitialRequest; - -// @public (undocumented) -export interface GetEntitiesResponse { - // (undocumented) - items: T[]; - // (undocumented) - pageInfo: { - nextCursor?: string; - prevCursor?: string; - }; - // (undocumented) - totalItems: number; -} - -// @public (undocumented) -export type IdentityApi = { - getCredentials(): Promise<{ - token?: string; - }>; -}; - -// @public (undocumented) -export function isMarketplaceCollection(entity?: Entity): entity is MarketplaceCollection; - -// @public (undocumented) -export function isMarketplacePackage(entity?: Entity): entity is MarketplacePackage; - -// @public (undocumented) -export function isMarketplacePlugin(entity?: Entity): entity is MarketplacePlugin; - -// @public (undocumented) -export enum MarketplaceAnnotation { +export enum ExtensionsAnnotation { // (undocumented) CERTIFIED_BY = "extensions.backstage.io/certified-by", // (undocumented) @@ -150,7 +95,7 @@ export enum MarketplaceAnnotation { } // @public (undocumented) -export interface MarketplaceApi { +export interface ExtensionsApi { // (undocumented) disablePackage?(namespace: string, name: string, disabled: boolean): Promise<{ status: string; @@ -160,11 +105,11 @@ export interface MarketplaceApi { status: string; }>; // (undocumented) - getCollectionByName(namespace: string, name: string): Promise; + getCollectionByName(namespace: string, name: string): Promise; // (undocumented) - getCollectionPlugins(namespace: string, name: string): Promise; + getCollectionPlugins(namespace: string, name: string): Promise; // (undocumented) - getCollections(request: GetEntitiesRequest): Promise>; + getCollections(request: GetEntitiesRequest): Promise>; // (undocumented) getCollectionsFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) @@ -176,17 +121,17 @@ export interface MarketplaceApi { nodeEnv: NodeEnvironmentType; }>; // (undocumented) - getPackageByName(namespace: string, name: string): Promise; + getPackageByName(namespace: string, name: string): Promise; // (undocumented) getPackageConfigByName?(namespace: string, name: string): Promise; // (undocumented) - getPackagePlugins(namespace: string, name: string): Promise; + getPackagePlugins(namespace: string, name: string): Promise; // (undocumented) - getPackages(request: GetEntitiesRequest): Promise>; + getPackages(request: GetEntitiesRequest): Promise>; // (undocumented) getPackagesFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) - getPluginByName(namespace: string, name: string): Promise; + getPluginByName(namespace: string, name: string): Promise; // (undocumented) getPluginConfigAuthorization?(namespace: string, name: string): Promise<{ read: 'ALLOW' | 'DENY'; @@ -197,9 +142,9 @@ export interface MarketplaceApi { // (undocumented) getPluginFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) - getPluginPackages(namespace: string, name: string): Promise; + getPluginPackages(namespace: string, name: string): Promise; // (undocumented) - getPlugins(request: GetEntitiesRequest): Promise>; + getPlugins(request: GetEntitiesRequest): Promise>; // (undocumented) installPackage?(namespace: string, name: string, configYaml: string): Promise<{ status: string; @@ -211,14 +156,14 @@ export interface MarketplaceApi { } // @public (undocumented) -export type MarketplaceAuthor = { +export type ExtensionsAuthor = { name: string; url?: string; }; // @public (undocumented) -export class MarketplaceBackendClient implements MarketplaceApi { - constructor(options: MarketplaceBackendClientOptions); +export class ExtensionsBackendClient implements ExtensionsApi { + constructor(options: ExtensionsBackendClientOptions); // (undocumented) disablePackage(namespace: string, name: string, disabled: boolean): Promise<{ status: string; @@ -228,11 +173,11 @@ export class MarketplaceBackendClient implements MarketplaceApi { status: string; }>; // (undocumented) - getCollectionByName(namespace: string, name: string): Promise; + getCollectionByName(namespace: string, name: string): Promise; // (undocumented) - getCollectionPlugins(namespace: string, name: string): Promise; + getCollectionPlugins(namespace: string, name: string): Promise; // (undocumented) - getCollections(request: GetEntitiesRequest): Promise>; + getCollections(request: GetEntitiesRequest): Promise>; // (undocumented) getCollectionsFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) @@ -244,17 +189,17 @@ export class MarketplaceBackendClient implements MarketplaceApi { nodeEnv: NodeEnvironmentType; }>; // (undocumented) - getPackageByName(namespace: string, name: string): Promise; + getPackageByName(namespace: string, name: string): Promise; // (undocumented) getPackageConfigByName(namespace: string, name: string): Promise; // (undocumented) - getPackagePlugins(namespace: string, name: string): Promise; + getPackagePlugins(namespace: string, name: string): Promise; // (undocumented) - getPackages(request: GetEntitiesRequest): Promise>; + getPackages(request: GetEntitiesRequest): Promise>; // (undocumented) getPackagesFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) - getPluginByName(namespace: string, name: string): Promise; + getPluginByName(namespace: string, name: string): Promise; // (undocumented) getPluginConfigAuthorization(namespace: string, name: string): Promise<{ read: 'ALLOW' | 'DENY'; @@ -265,9 +210,9 @@ export class MarketplaceBackendClient implements MarketplaceApi { // (undocumented) getPluginFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) - getPluginPackages(namespace: string, name: string): Promise; + getPluginPackages(namespace: string, name: string): Promise; // (undocumented) - getPlugins(request: GetEntitiesRequest): Promise>; + getPlugins(request: GetEntitiesRequest): Promise>; // (undocumented) installPackage(namespace: string, name: string, configYaml: string): Promise<{ status: string; @@ -279,7 +224,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { } // @public (undocumented) -export type MarketplaceBackendClientOptions = { +export type ExtensionsBackendClientOptions = { discoveryApi: DiscoveryApi; fetchApi: FetchApi; identityApi: IdentityApi; @@ -287,48 +232,48 @@ export type MarketplaceBackendClientOptions = { }; // @public (undocumented) -export class MarketplaceCatalogClient implements MarketplaceApi { - constructor(options: MarketplaceCatalogClientOptions); +export class ExtensionsCatalogClient implements ExtensionsApi { + constructor(options: ExtensionsCatalogClientOptions); // (undocumented) - getCollectionByName(namespace: string, name: string): Promise; + getCollectionByName(namespace: string, name: string): Promise; // (undocumented) - getCollectionPlugins(namespace: string, name: string): Promise; + getCollectionPlugins(namespace: string, name: string): Promise; // (undocumented) - getCollections(request: GetEntitiesRequest): Promise>; + getCollections(request: GetEntitiesRequest): Promise>; // (undocumented) getCollectionsFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) - getPackageByName(namespace: string, name: string): Promise; + getPackageByName(namespace: string, name: string): Promise; // (undocumented) - getPackagePlugins(namespace: string, name: string): Promise; + getPackagePlugins(namespace: string, name: string): Promise; // (undocumented) - getPackages(request: GetEntitiesRequest): Promise>; + getPackages(request: GetEntitiesRequest): Promise>; // (undocumented) getPackagesFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) - getPluginByName(namespace: string, name: string): Promise; + getPluginByName(namespace: string, name: string): Promise; // (undocumented) getPluginFacets(request: GetEntityFacetsRequest): Promise; // (undocumented) - getPluginPackages(namespace: string, name: string): Promise; + getPluginPackages(namespace: string, name: string): Promise; // (undocumented) - getPlugins(request: GetEntitiesRequest): Promise>; + getPlugins(request: GetEntitiesRequest): Promise>; } // @public (undocumented) -export type MarketplaceCatalogClientOptions = { +export type ExtensionsCatalogClientOptions = { auth?: AuthService; catalogApi: CatalogApi; }; // @public (undocumented) -export interface MarketplaceCollection extends Entity { +export interface ExtensionsCollection extends Entity { // (undocumented) - spec?: MarketplaceCollectionSpec; + spec?: ExtensionsCollectionSpec; } // @public (undocumented) -export interface MarketplaceCollectionSpec extends JsonObject { +export interface ExtensionsCollectionSpec extends JsonObject { // (undocumented) plugins?: string[]; // (undocumented) @@ -336,7 +281,7 @@ export interface MarketplaceCollectionSpec extends JsonObject { } // @public (undocumented) -export enum MarketplaceKind { +export enum ExtensionsKind { // (undocumented) Collection = "PluginCollection", // (undocumented) @@ -346,13 +291,19 @@ export enum MarketplaceKind { } // @public (undocumented) -export interface MarketplacePackage extends Entity { +export interface ExtensionsPackage extends Entity { // (undocumented) - spec?: MarketplacePackageSpec; + spec?: ExtensionsPackageSpec; } // @public (undocumented) -export interface MarketplacePackageBackstage extends JsonObject { +export interface ExtensionsPackageAppConfigExamples { + // (undocumented) + [key: string]: ExtensionsPackageSpecAppConfigExample[]; +} + +// @public (undocumented) +export interface ExtensionsPackageBackstage extends JsonObject { // (undocumented) role?: string; // (undocumented) @@ -360,7 +311,7 @@ export interface MarketplacePackageBackstage extends JsonObject { } // @public (undocumented) -export enum MarketplacePackageInstallStatus { +export enum ExtensionsPackageInstallStatus { // (undocumented) Disabled = "Disabled", // (undocumented) @@ -372,17 +323,17 @@ export enum MarketplacePackageInstallStatus { } // @public (undocumented) -export interface MarketplacePackageSpec extends JsonObject { +export interface ExtensionsPackageSpec extends JsonObject { // (undocumented) - appConfigExamples?: MarketplacePackageSpecAppConfigExample[]; + appConfigExamples?: ExtensionsPackageSpecAppConfigExample[]; // (undocumented) author?: string; // @deprecated (undocumented) - backstage?: MarketplacePackageBackstage; + backstage?: ExtensionsPackageBackstage; // (undocumented) dynamicArtifact?: string; // (undocumented) - installStatus?: MarketplacePackageInstallStatus; + installStatus?: ExtensionsPackageInstallStatus; // (undocumented) integrity?: string; // (undocumented) @@ -396,7 +347,7 @@ export interface MarketplacePackageSpec extends JsonObject { // (undocumented) role?: string; // (undocumented) - support?: MarketplaceSupport; + support?: ExtensionsSupport; // (undocumented) supportedVersions?: string; // (undocumented) @@ -404,7 +355,7 @@ export interface MarketplacePackageSpec extends JsonObject { } // @public (undocumented) -export interface MarketplacePackageSpecAppConfigExample extends JsonObject { +export interface ExtensionsPackageSpecAppConfigExample extends JsonObject { // (undocumented) content: string | JsonObject; // (undocumented) @@ -412,13 +363,19 @@ export interface MarketplacePackageSpecAppConfigExample extends JsonObject { } // @public (undocumented) -export interface MarketplacePlugin extends Entity { +export const extensionsPermissions: ResourcePermission<"extensions-plugin">[]; + +// @public (undocumented) +export interface ExtensionsPlugin extends Entity { // (undocumented) - spec?: MarketplacePluginSpec; + spec?: ExtensionsPluginSpec; } +// @public +export const extensionsPluginDeletePermission: ResourcePermission<"extensions-plugin">; + // @public (undocumented) -export enum MarketplacePluginInstallStatus { +export enum ExtensionsPluginInstallStatus { // (undocumented) Disabled = "Disabled", // (undocumented) @@ -431,14 +388,20 @@ export enum MarketplacePluginInstallStatus { UpdateAvailable = "UpdateAvailable" } +// @public +export type ExtensionsPluginPermission = ResourcePermission; + +// @public +export const extensionsPluginReadPermission: ResourcePermission<"extensions-plugin">; + // @public (undocumented) -export interface MarketplacePluginSpec extends JsonObject { +export interface ExtensionsPluginSpec extends JsonObject { // (undocumented) assets?: Asset[]; // (undocumented) author?: string; // (undocumented) - authors?: MarketplaceAuthor[]; + authors?: ExtensionsAuthor[]; // (undocumented) categories?: string[]; // (undocumented) @@ -454,21 +417,24 @@ export interface MarketplacePluginSpec extends JsonObject { // (undocumented) installation?: string; // (undocumented) - installStatus?: MarketplacePluginInstallStatus; + installStatus?: ExtensionsPluginInstallStatus; // (undocumented) packages?: string[]; // (undocumented) - support?: MarketplaceSupport; + support?: ExtensionsSupport; } +// @public +export const extensionsPluginWritePermission: ResourcePermission<"extensions-plugin">; + // @public (undocumented) -export type MarketplaceSupport = { +export type ExtensionsSupport = { provider?: string; - level?: MarketplaceSupportLevel; + level?: ExtensionsSupportLevel; }; // @public (undocumented) -export enum MarketplaceSupportLevel { +export enum ExtensionsSupportLevel { // (undocumented) COMMUNITY = "community", // (undocumented) @@ -481,6 +447,46 @@ export enum MarketplaceSupportLevel { TECH_PREVIEW = "tech-preview" } +// @public (undocumented) +export type FetchApi = { + fetch: typeof fetch; +}; + +// @public (undocumented) +export type GetEntitiesRequest = QueryEntitiesInitialRequest; + +// @public (undocumented) +export interface GetEntitiesResponse { + // (undocumented) + items: T[]; + // (undocumented) + pageInfo: { + nextCursor?: string; + prevCursor?: string; + }; + // (undocumented) + totalItems: number; +} + +// @public (undocumented) +export type IdentityApi = { + getCredentials(): Promise<{ + token?: string; + }>; +}; + +// @public (undocumented) +export function isExtensionsCollection(entity?: Entity): entity is ExtensionsCollection; + +// @public (undocumented) +export function isExtensionsPackage(entity?: Entity): entity is ExtensionsPackage; + +// @public (undocumented) +export function isExtensionsPlugin(entity?: Entity): entity is ExtensionsPlugin; + +// @public @deprecated (undocumented) +export const isMarketplacePlugin: typeof isExtensionsPlugin; + // @public (undocumented) export type NodeEnvironmentType = 'production' | 'development' | 'test'; diff --git a/workspaces/marketplace/plugins/marketplace-common/src/annotations.ts b/workspaces/extensions/plugins/extensions-common/src/annotations.ts similarity index 95% rename from workspaces/marketplace/plugins/marketplace-common/src/annotations.ts rename to workspaces/extensions/plugins/extensions-common/src/annotations.ts index 7edc2b0409..4e2f75974c 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/annotations.ts +++ b/workspaces/extensions/plugins/extensions-common/src/annotations.ts @@ -17,7 +17,7 @@ /** * @public */ -export enum MarketplaceAnnotation { +export enum ExtensionsAnnotation { CERTIFIED_BY = 'extensions.backstage.io/certified-by', PRE_INSTALLED = 'extensions.backstage.io/pre-installed', } diff --git a/workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceApi.ts b/workspaces/extensions/plugins/extensions-common/src/api/ExtensionsApi.ts similarity index 82% rename from workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceApi.ts rename to workspaces/extensions/plugins/extensions-common/src/api/ExtensionsApi.ts index bb344d80b7..5ef5ddd06c 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceApi.ts +++ b/workspaces/extensions/plugins/extensions-common/src/api/ExtensionsApi.ts @@ -22,9 +22,9 @@ import { import { ConfigurationResponse, - MarketplaceCollection, - MarketplacePackage, - MarketplacePlugin, + ExtensionsCollection, + ExtensionsPackage, + ExtensionsPlugin, NodeEnvironmentType, } from '../types'; @@ -48,10 +48,10 @@ export interface GetEntitiesResponse { /** * @public */ -export interface MarketplaceApi { +export interface ExtensionsApi { getCollections( request: GetEntitiesRequest, - ): Promise>; + ): Promise>; getCollectionsFacets( request: GetEntityFacetsRequest, @@ -60,25 +60,22 @@ export interface MarketplaceApi { getCollectionByName( namespace: string, name: string, - ): Promise; + ): Promise; getCollectionPlugins( namespace: string, name: string, - ): Promise; + ): Promise; getPackages( request: GetEntitiesRequest, - ): Promise>; + ): Promise>; getPackagesFacets( request: GetEntityFacetsRequest, ): Promise; - getPackageByName( - namespace: string, - name: string, - ): Promise; + getPackageByName(namespace: string, name: string): Promise; getPackageConfigByName?( namespace: string, @@ -99,13 +96,13 @@ export interface MarketplaceApi { getPlugins( request: GetEntitiesRequest, - ): Promise>; + ): Promise>; getPluginFacets( request: GetEntityFacetsRequest, ): Promise; - getPluginByName(namespace: string, name: string): Promise; + getPluginByName(namespace: string, name: string): Promise; getPluginConfigAuthorization?( namespace: string, @@ -136,10 +133,10 @@ export interface MarketplaceApi { getPluginPackages( namespace: string, name: string, - ): Promise; + ): Promise; getPackagePlugins( namespace: string, name: string, - ): Promise; + ): Promise; } diff --git a/workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceBackendClient.ts b/workspaces/extensions/plugins/extensions-common/src/api/ExtensionsBackendClient.ts similarity index 91% rename from workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceBackendClient.ts rename to workspaces/extensions/plugins/extensions-common/src/api/ExtensionsBackendClient.ts index ec654a1c3a..913eac0f19 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceBackendClient.ts +++ b/workspaces/extensions/plugins/extensions-common/src/api/ExtensionsBackendClient.ts @@ -22,9 +22,9 @@ import type { ConfigApi } from '@backstage/core-plugin-api'; import type { ConfigurationResponse, - MarketplaceCollection, - MarketplacePackage, - MarketplacePlugin, + ExtensionsCollection, + ExtensionsPackage, + ExtensionsPlugin, } from '../types'; import { encodeGetEntitiesRequest, @@ -34,8 +34,8 @@ import { import type { GetEntitiesRequest, GetEntitiesResponse, - MarketplaceApi, -} from './MarketplaceApi'; + ExtensionsApi, +} from './ExtensionsApi'; import { NodeEnvironmentType } from '../types/NodeEnvironmentType'; /** @@ -64,7 +64,7 @@ export type IdentityApi = { /** * @public */ -export type MarketplaceBackendClientOptions = { +export type ExtensionsBackendClientOptions = { discoveryApi: DiscoveryApi; fetchApi: FetchApi; identityApi: IdentityApi; @@ -74,12 +74,12 @@ export type MarketplaceBackendClientOptions = { /** * @public */ -export class MarketplaceBackendClient implements MarketplaceApi { +export class ExtensionsBackendClient implements ExtensionsApi { private readonly discoveryApi: DiscoveryApi; private readonly fetchApi: FetchApi; private readonly identityApi: IdentityApi; - constructor(options: MarketplaceBackendClientOptions) { + constructor(options: ExtensionsBackendClientOptions) { this.discoveryApi = options.discoveryApi; this.fetchApi = options.fetchApi; this.identityApi = options.identityApi; @@ -114,7 +114,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { getCollections( request: GetEntitiesRequest, - ): Promise> { + ): Promise> { return this.request( '/collections', 'GET', @@ -135,7 +135,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { getCollectionByName( namespace: string, name: string, - ): Promise { + ): Promise { return this.request( `/collection/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`, 'GET', @@ -145,7 +145,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { getCollectionPlugins( namespace: string, name: string, - ): Promise { + ): Promise { return this.request( `/collection/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}/plugins`, 'GET', @@ -154,7 +154,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { async getPackages( request: GetEntitiesRequest, - ): Promise> { + ): Promise> { return this.request('/packages', 'GET', encodeGetEntitiesRequest(request)); } @@ -171,7 +171,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { getPackageByName( namespace: string, name: string, - ): Promise { + ): Promise { return this.request( `/package/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`, 'GET', @@ -216,7 +216,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { async getPlugins( request: GetEntitiesRequest, - ): Promise> { + ): Promise> { return this.request('/plugins', 'GET', encodeGetEntitiesRequest(request)); } @@ -233,7 +233,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { async getPluginByName( namespace: string, name: string, - ): Promise { + ): Promise { return this.request( `/plugin/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`, 'GET', @@ -297,7 +297,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { getPluginPackages( namespace: string, name: string, - ): Promise { + ): Promise { return this.request( `/plugin/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}/packages`, 'GET', @@ -307,7 +307,7 @@ export class MarketplaceBackendClient implements MarketplaceApi { getPackagePlugins( namespace: string, name: string, - ): Promise { + ): Promise { return this.request( `/package/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}/plugins`, 'GET', diff --git a/workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceCatalogClient.test.ts b/workspaces/extensions/plugins/extensions-common/src/api/ExtensionsCatalogClient.test.ts similarity index 89% rename from workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceCatalogClient.test.ts rename to workspaces/extensions/plugins/extensions-common/src/api/ExtensionsCatalogClient.test.ts index 18655de990..68fbfd1124 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceCatalogClient.test.ts +++ b/workspaces/extensions/plugins/extensions-common/src/api/ExtensionsCatalogClient.test.ts @@ -16,18 +16,18 @@ import { CatalogClient } from '@backstage/catalog-client'; import { - MarketplaceCollection, - MarketplaceKind, - MarketplacePackage, - MarketplacePlugin, + ExtensionsCollection, + ExtensionsKind, + ExtensionsPackage, + ExtensionsPlugin, } from '../types'; -import { MarketplaceCatalogClient } from './MarketplaceCatalogClient'; +import { ExtensionsCatalogClient } from './ExtensionsCatalogClient'; -const mockCollections: MarketplaceCollection[] = [ +const mockCollections: ExtensionsCollection[] = [ { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, metadata: { namespace: 'default', name: 'featured' }, spec: { type: 'curated', @@ -36,25 +36,25 @@ const mockCollections: MarketplaceCollection[] = [ }, ]; -const mockPackages: MarketplacePackage[] = [ +const mockPackages: ExtensionsPackage[] = [ { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { namespace: 'default', name: 'package1' }, spec: {}, }, { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, metadata: { namespace: 'default', name: 'package2' }, spec: {}, }, ]; -const mockPlugins: MarketplacePlugin[] = [ +const mockPlugins: ExtensionsPlugin[] = [ { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, metadata: { namespace: 'default', name: 'plugin1' }, spec: { packages: ['package1'], @@ -62,7 +62,7 @@ const mockPlugins: MarketplacePlugin[] = [ }, { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, metadata: { namespace: 'default', name: 'plugin2' }, spec: { packages: ['package2'], @@ -70,7 +70,7 @@ const mockPlugins: MarketplacePlugin[] = [ }, { apiVersion: 'extensions.backstage.io/v1alpha1', - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, metadata: { namespace: 'another-namespace', name: 'plugin3' }, spec: { packages: ['package1', 'package2'], @@ -108,7 +108,7 @@ const options = { } as any, }; -describe('MarketplaceCatalogClient', () => { +describe('ExtensionsCatalogClient', () => { describe('getCollections', () => { beforeEach(() => { mockQueryEntities.mockReturnValue({ @@ -119,7 +119,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getCollections({}); expect(mockQueryEntities).toHaveBeenCalledTimes(1); @@ -140,7 +140,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should not allow another kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getCollections({ filter: { kind: 'Component', @@ -184,7 +184,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getCollectionsFacets({ facets: ['metadata.namespace'], }); @@ -219,7 +219,7 @@ describe('MarketplaceCatalogClient', () => { it('should call catalog with right kind filter', async () => { mockGetEntityByRef.mockReturnValue(mockCollections[0]); - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const plugin = await api.getCollectionByName('default', 'featured'); expect(mockGetEntityByRef).toHaveBeenCalledTimes(1); @@ -234,7 +234,7 @@ describe('MarketplaceCatalogClient', () => { it('should throw not found error for the non-existent collection name', async () => { mockGetEntityByRef.mockReturnValue(null); - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); await expect( api.getCollectionByName('default', 'not-found'), ).rejects.toThrow('Collection default/not-found not found'); @@ -250,7 +250,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const plugins = await api.getCollectionPlugins('default', 'featured'); expect(mockGetEntityByRef).toHaveBeenCalledTimes(1); @@ -265,7 +265,7 @@ describe('MarketplaceCatalogClient', () => { it('should throw not found error for the non-existent collection name', async () => { mockGetEntityByRef.mockReturnValue(null); - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); await expect( api.getCollectionPlugins('default', 'not-found'), ).rejects.toThrow('Collection default/not-found not found'); @@ -282,7 +282,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getPackages({}); expect(mockQueryEntities).toHaveBeenCalledTimes(1); @@ -303,7 +303,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should not allow another kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getPackages({ filter: { kind: 'Component', @@ -347,7 +347,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getPackagesFacets({ facets: ['metadata.namespace'], }); @@ -382,7 +382,7 @@ describe('MarketplaceCatalogClient', () => { it('should call catalog with right kind filter', async () => { mockGetEntityByRef.mockReturnValue(mockCollections[0]); - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const plugin = await api.getPackageByName('default', 'featured'); expect(mockGetEntityByRef).toHaveBeenCalledTimes(1); @@ -397,7 +397,7 @@ describe('MarketplaceCatalogClient', () => { it('should throw not found error for the non-existent package name', async () => { mockGetEntityByRef.mockReturnValue(null); - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); await expect( api.getPackageByName('default', 'not-found'), ).rejects.toThrow('Package default/not-found not found'); @@ -413,7 +413,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getPlugins({}); expect(mockQueryEntities).toHaveBeenCalledTimes(1); @@ -434,7 +434,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should not allow another kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getPlugins({ filter: { kind: 'Component', @@ -478,7 +478,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const response = await api.getPluginFacets({ facets: ['metadata.namespace'], }); @@ -513,7 +513,7 @@ describe('MarketplaceCatalogClient', () => { it('should call catalog with right kind filter', async () => { mockGetEntityByRef.mockReturnValue(mockCollections[0]); - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const plugin = await api.getPluginByName('default', 'plugin1'); expect(mockGetEntityByRef).toHaveBeenCalledTimes(1); @@ -528,7 +528,7 @@ describe('MarketplaceCatalogClient', () => { it('should throw not found error for the non-existent plugin name', async () => { mockGetEntityByRef.mockReturnValue(null); - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); await expect(api.getPluginByName('default', 'not-found')).rejects.toThrow( 'Plugin default/not-found not found', ); @@ -544,7 +544,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const packages = await api.getPluginPackages('default', 'plugin3'); expect(mockGetEntityByRef).toHaveBeenCalledTimes(1); @@ -559,7 +559,7 @@ describe('MarketplaceCatalogClient', () => { it('should throw not found error for the non-existent plugin name', async () => { mockGetEntityByRef.mockReturnValue(null); - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); await expect( api.getPluginPackages('default', 'not-found'), ).rejects.toThrow('Plugin default/not-found not found'); @@ -572,7 +572,7 @@ describe('MarketplaceCatalogClient', () => { }); it('should call catalog with right kind filter', async () => { - const api = new MarketplaceCatalogClient(options); + const api = new ExtensionsCatalogClient(options); const plugins = await api.getPackagePlugins('default', 'package1'); expect(mockGetEntities).toHaveBeenCalledTimes(1); diff --git a/workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceCatalogClient.ts b/workspaces/extensions/plugins/extensions-common/src/api/ExtensionsCatalogClient.ts similarity index 77% rename from workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceCatalogClient.ts rename to workspaces/extensions/plugins/extensions-common/src/api/ExtensionsCatalogClient.ts index db0e989168..406c8035f8 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/api/MarketplaceCatalogClient.ts +++ b/workspaces/extensions/plugins/extensions-common/src/api/ExtensionsCatalogClient.ts @@ -28,23 +28,23 @@ import { import { NotFoundError } from '@backstage/errors'; import { - MarketplaceKind, - type MarketplacePackage, - type MarketplacePlugin, - type MarketplaceCollection, - isMarketplacePackage, - isMarketplacePlugin, + ExtensionsKind, + type ExtensionsPackage, + type ExtensionsPlugin, + type ExtensionsCollection, + isExtensionsPackage, + isExtensionsPlugin, } from '../types'; import type { - MarketplaceApi, + ExtensionsApi, GetEntitiesRequest, GetEntitiesResponse, -} from './MarketplaceApi'; +} from './ExtensionsApi'; /** * @public */ -export type MarketplaceCatalogClientOptions = { +export type ExtensionsCatalogClientOptions = { auth?: AuthService; catalogApi: CatalogApi; }; @@ -53,7 +53,7 @@ const enforceKindFilter = < T extends GetEntitiesRequest | GetEntityFacetsRequest, >( request: T, - kind: MarketplaceKind, + kind: ExtensionsKind, ): T => ({ ...request, filter: { @@ -65,11 +65,11 @@ const enforceKindFilter = < /** * @public */ -export class MarketplaceCatalogClient implements MarketplaceApi { +export class ExtensionsCatalogClient implements ExtensionsApi { private readonly catalog: CatalogApi; private readonly auth?: AuthService; - constructor(options: MarketplaceCatalogClientOptions) { + constructor(options: ExtensionsCatalogClientOptions) { this.auth = options.auth; this.catalog = options.catalogApi; } @@ -86,13 +86,13 @@ export class MarketplaceCatalogClient implements MarketplaceApi { async getCollections( request: GetEntitiesRequest, - ): Promise> { + ): Promise> { const token = await this.getServiceToken(); const result = await this.catalog.queryEntities( - enforceKindFilter(request, MarketplaceKind.Collection), + enforceKindFilter(request, ExtensionsKind.Collection), token, ); - return result as GetEntitiesResponse; + return result as GetEntitiesResponse; } async getCollectionsFacets( @@ -100,7 +100,7 @@ export class MarketplaceCatalogClient implements MarketplaceApi { ): Promise { const token = await this.getServiceToken(); return await this.catalog.getEntityFacets( - enforceKindFilter(request, MarketplaceKind.Collection), + enforceKindFilter(request, ExtensionsKind.Collection), token, ); } @@ -108,10 +108,10 @@ export class MarketplaceCatalogClient implements MarketplaceApi { async getCollectionByName( namespace: string, name: string, - ): Promise { + ): Promise { const token = await this.getServiceToken(); const entityRef = stringifyEntityRef({ - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, namespace, name, }); @@ -119,13 +119,13 @@ export class MarketplaceCatalogClient implements MarketplaceApi { if (!result) { throw new NotFoundError(`Collection ${namespace}/${name} not found`); } - return result as MarketplaceCollection; + return result as ExtensionsCollection; } async getCollectionPlugins( namespace: string, name: string, - ): Promise { + ): Promise { const collection = await this.getCollectionByName(namespace, name); const relations = collection.relations ?? []; @@ -143,18 +143,18 @@ export class MarketplaceCatalogClient implements MarketplaceApi { const result = await this.catalog.getEntitiesByRefs({ entityRefs }, token); // Double check that we return (only) the right Plugins - return result.items.filter(isMarketplacePlugin); + return result.items.filter(isExtensionsPlugin); } async getPackages( request: GetEntitiesRequest, - ): Promise> { + ): Promise> { const token = await this.getServiceToken(); const result = await this.catalog.queryEntities( - enforceKindFilter(request, MarketplaceKind.Package), + enforceKindFilter(request, ExtensionsKind.Package), token, ); - return result as GetEntitiesResponse; + return result as GetEntitiesResponse; } async getPackagesFacets( @@ -162,7 +162,7 @@ export class MarketplaceCatalogClient implements MarketplaceApi { ): Promise { const token = await this.getServiceToken(); return await this.catalog.getEntityFacets( - enforceKindFilter(request, MarketplaceKind.Package), + enforceKindFilter(request, ExtensionsKind.Package), token, ); } @@ -170,10 +170,10 @@ export class MarketplaceCatalogClient implements MarketplaceApi { async getPackageByName( namespace: string, name: string, - ): Promise { + ): Promise { const token = await this.getServiceToken(); const entityRef = stringifyEntityRef({ - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, namespace, name, }); @@ -181,18 +181,18 @@ export class MarketplaceCatalogClient implements MarketplaceApi { if (!result) { throw new NotFoundError(`Package ${namespace}/${name} not found`); } - return result as MarketplaceCollection; + return result as ExtensionsCollection; } async getPlugins( request: GetEntitiesRequest, - ): Promise> { + ): Promise> { const token = await this.getServiceToken(); const result = await this.catalog.queryEntities( - enforceKindFilter(request, MarketplaceKind.Plugin), + enforceKindFilter(request, ExtensionsKind.Plugin), token, ); - return result as GetEntitiesResponse; + return result as GetEntitiesResponse; } async getPluginFacets( @@ -200,7 +200,7 @@ export class MarketplaceCatalogClient implements MarketplaceApi { ): Promise { const token = await this.getServiceToken(); return await this.catalog.getEntityFacets( - enforceKindFilter(request, MarketplaceKind.Plugin), + enforceKindFilter(request, ExtensionsKind.Plugin), token, ); } @@ -208,10 +208,10 @@ export class MarketplaceCatalogClient implements MarketplaceApi { async getPluginByName( namespace: string, name: string, - ): Promise { + ): Promise { const token = await this.getServiceToken(); const entityRef = stringifyEntityRef({ - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, namespace, name, }); @@ -219,13 +219,13 @@ export class MarketplaceCatalogClient implements MarketplaceApi { if (!result) { throw new NotFoundError(`Plugin ${namespace}/${name} not found`); } - return result as MarketplacePlugin; + return result as ExtensionsPlugin; } async getPluginPackages( namespace: string, name: string, - ): Promise { + ): Promise { const plugin = await this.getPluginByName(namespace, name); const relations = plugin.relations ?? []; @@ -243,15 +243,15 @@ export class MarketplaceCatalogClient implements MarketplaceApi { const result = await this.catalog.getEntitiesByRefs({ entityRefs }, token); // Double check that we return (only) the right Packages - return result.items.filter(isMarketplacePackage); + return result.items.filter(isExtensionsPackage); } async getPackagePlugins( namespace: string, name: string, - ): Promise { + ): Promise { const entityRef = stringifyEntityRef({ - kind: MarketplaceKind.Package, + kind: ExtensionsKind.Package, namespace, name, }); diff --git a/workspaces/marketplace/plugins/marketplace-common/src/api/index.ts b/workspaces/extensions/plugins/extensions-common/src/api/index.ts similarity index 83% rename from workspaces/marketplace/plugins/marketplace-common/src/api/index.ts rename to workspaces/extensions/plugins/extensions-common/src/api/index.ts index c40578906a..83ec0e4681 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/api/index.ts +++ b/workspaces/extensions/plugins/extensions-common/src/api/index.ts @@ -14,6 +14,6 @@ * limitations under the License. */ -export * from './MarketplaceApi'; -export * from './MarketplaceBackendClient'; -export * from './MarketplaceCatalogClient'; +export * from './ExtensionsApi'; +export * from './ExtensionsBackendClient'; +export * from './ExtensionsCatalogClient'; diff --git a/workspaces/marketplace/plugins/marketplace-common/src/consts.ts b/workspaces/extensions/plugins/extensions-common/src/consts.ts similarity index 81% rename from workspaces/marketplace/plugins/marketplace-common/src/consts.ts rename to workspaces/extensions/plugins/extensions-common/src/consts.ts index 479429ff47..86964f6707 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/consts.ts +++ b/workspaces/extensions/plugins/extensions-common/src/consts.ts @@ -18,3 +18,10 @@ * @public */ export const EXTENSIONS_API_VERSION = 'extensions.backstage.io/v1alpha1'; + +/** + * @public + * @deprecated Use EXTENSIONS_API_VERSION instead + */ +export const DEPRECATED_EXTENSIONS_API_VERSION = + 'marketplace.backstage.io/v1alpha1'; diff --git a/workspaces/marketplace/plugins/marketplace-common/src/index.ts b/workspaces/extensions/plugins/extensions-common/src/index.ts similarity index 93% rename from workspaces/marketplace/plugins/marketplace-common/src/index.ts rename to workspaces/extensions/plugins/extensions-common/src/index.ts index d031d00979..48535d4410 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/index.ts +++ b/workspaces/extensions/plugins/extensions-common/src/index.ts @@ -15,7 +15,7 @@ */ /** - * Common functionalities for the marketplace plugin. + * Common functionalities for the extensions plugin. * * @packageDocumentation */ diff --git a/workspaces/marketplace/plugins/marketplace-common/src/permissions.ts b/workspaces/extensions/plugins/extensions-common/src/permissions.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/permissions.ts rename to workspaces/extensions/plugins/extensions-common/src/permissions.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/src/setupTests.ts b/workspaces/extensions/plugins/extensions-common/src/setupTests.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/setupTests.ts rename to workspaces/extensions/plugins/extensions-common/src/setupTests.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/ConfigurationResponse.ts b/workspaces/extensions/plugins/extensions-common/src/types/ConfigurationResponse.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/types/ConfigurationResponse.ts rename to workspaces/extensions/plugins/extensions-common/src/types/ConfigurationResponse.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceAuthor.ts b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsAuthor.ts similarity index 95% rename from workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceAuthor.ts rename to workspaces/extensions/plugins/extensions-common/src/types/ExtensionsAuthor.ts index f85aded2c9..8ab367da7e 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceAuthor.ts +++ b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsAuthor.ts @@ -17,7 +17,7 @@ /** * @public */ -export type MarketplaceAuthor = { +export type ExtensionsAuthor = { name: string; url?: string; }; diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceCollection.ts b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsCollection.ts similarity index 65% rename from workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceCollection.ts rename to workspaces/extensions/plugins/extensions-common/src/types/ExtensionsCollection.ts index 5339a8cb96..61008d8249 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceCollection.ts +++ b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsCollection.ts @@ -17,21 +17,24 @@ import type { Entity } from '@backstage/catalog-model'; import { JsonObject } from '@backstage/types'; -import { EXTENSIONS_API_VERSION } from '../consts'; +import { + DEPRECATED_EXTENSIONS_API_VERSION, + EXTENSIONS_API_VERSION, +} from '../consts'; -import { MarketplaceKind } from './MarketplaceKind'; +import { ExtensionsKind } from './ExtensionsKind'; /** * @public */ -export interface MarketplaceCollection extends Entity { - spec?: MarketplaceCollectionSpec; +export interface ExtensionsCollection extends Entity { + spec?: ExtensionsCollectionSpec; } /** * @public */ -export interface MarketplaceCollectionSpec extends JsonObject { +export interface ExtensionsCollectionSpec extends JsonObject { type?: 'curated'; plugins?: string[]; } @@ -39,13 +42,13 @@ export interface MarketplaceCollectionSpec extends JsonObject { /** * @public */ -export function isMarketplaceCollection( +export function isExtensionsCollection( entity?: Entity, -): entity is MarketplaceCollection { +): entity is ExtensionsCollection { return ( !!entity && (entity.apiVersion === EXTENSIONS_API_VERSION || - entity.apiVersion === 'marketplace.backstage.io/v1alpha1') && - entity.kind === MarketplaceKind.Collection + entity.apiVersion === DEPRECATED_EXTENSIONS_API_VERSION) && + entity.kind === ExtensionsKind.Collection ); } diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceKind.ts b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsKind.ts similarity index 95% rename from workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceKind.ts rename to workspaces/extensions/plugins/extensions-common/src/types/ExtensionsKind.ts index dd0229359e..548131331c 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceKind.ts +++ b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsKind.ts @@ -17,7 +17,7 @@ /** * @public */ -export enum MarketplaceKind { +export enum ExtensionsKind { Plugin = 'Plugin', Collection = 'PluginCollection', Package = 'Package', diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplacePackage.ts b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsPackage.ts similarity index 61% rename from workspaces/marketplace/plugins/marketplace-common/src/types/MarketplacePackage.ts rename to workspaces/extensions/plugins/extensions-common/src/types/ExtensionsPackage.ts index a45219ae14..eda855cad7 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplacePackage.ts +++ b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsPackage.ts @@ -17,22 +17,25 @@ import type { Entity } from '@backstage/catalog-model'; import { JsonObject } from '@backstage/types'; -import { EXTENSIONS_API_VERSION } from '../consts'; +import { + DEPRECATED_EXTENSIONS_API_VERSION, + EXTENSIONS_API_VERSION, +} from '../consts'; -import { MarketplaceKind } from './MarketplaceKind'; -import { MarketplaceSupport } from './MarketplaceSupport'; +import { ExtensionsKind } from './ExtensionsKind'; +import { ExtensionsSupport } from './ExtensionsSupport'; /** * @public */ -export interface MarketplacePackage extends Entity { - spec?: MarketplacePackageSpec; +export interface ExtensionsPackage extends Entity { + spec?: ExtensionsPackageSpec; } /** * @public */ -export enum MarketplacePackageInstallStatus { +export enum ExtensionsPackageInstallStatus { NotInstalled = 'NotInstalled', Installed = 'Installed', Disabled = 'Disabled', @@ -42,45 +45,46 @@ export enum MarketplacePackageInstallStatus { /** * @public */ -export interface MarketplacePackageSpec extends JsonObject { +export interface ExtensionsPackageSpec extends JsonObject { packageName?: string; version?: string; dynamicArtifact?: string; author?: string; - support?: MarketplaceSupport; + support?: ExtensionsSupport; lifecycle?: string; role?: string; supportedVersions?: string; /** * @deprecated use role and supportedVersions under spec instead */ - backstage?: MarketplacePackageBackstage; - appConfigExamples?: MarketplacePackageSpecAppConfigExample[]; + backstage?: ExtensionsPackageBackstage; + appConfigExamples?: ExtensionsPackageSpecAppConfigExample[]; owner?: string; partOf?: string[]; integrity?: string; - installStatus?: MarketplacePackageInstallStatus; + installStatus?: ExtensionsPackageInstallStatus; } /** * @public */ -export interface MarketplacePackageSpecAppConfigExample extends JsonObject { +export interface ExtensionsPackageSpecAppConfigExample extends JsonObject { title: string; content: string | JsonObject; } + /** * @public */ export interface ExtensionsPackageAppConfigExamples { - [key: string]: MarketplacePackageSpecAppConfigExample[]; + [key: string]: ExtensionsPackageSpecAppConfigExample[]; } /** * @public */ -export interface MarketplacePackageBackstage extends JsonObject { +export interface ExtensionsPackageBackstage extends JsonObject { role?: string; supportedVersions?: string; } @@ -88,13 +92,13 @@ export interface MarketplacePackageBackstage extends JsonObject { /** * @public */ -export function isMarketplacePackage( +export function isExtensionsPackage( entity?: Entity, -): entity is MarketplacePackage { +): entity is ExtensionsPackage { return ( !!entity && (entity.apiVersion === EXTENSIONS_API_VERSION || - entity.apiVersion === 'marketplace.backstage.io/v1alpha1') && - entity.kind === MarketplaceKind.Package + entity.apiVersion === DEPRECATED_EXTENSIONS_API_VERSION) && + entity.kind === ExtensionsKind.Package ); } diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplacePlugin.ts b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsPlugin.ts similarity index 69% rename from workspaces/marketplace/plugins/marketplace-common/src/types/MarketplacePlugin.ts rename to workspaces/extensions/plugins/extensions-common/src/types/ExtensionsPlugin.ts index 9732e74914..67daa32793 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplacePlugin.ts +++ b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsPlugin.ts @@ -17,17 +17,20 @@ import type { Entity } from '@backstage/catalog-model'; import { JsonObject } from '@backstage/types'; -import { EXTENSIONS_API_VERSION } from '../consts'; +import { + DEPRECATED_EXTENSIONS_API_VERSION, + EXTENSIONS_API_VERSION, +} from '../consts'; -import { MarketplaceKind } from './MarketplaceKind'; -import { MarketplaceAuthor } from './MarketplaceAuthor'; -import { MarketplaceSupport } from './MarketplaceSupport'; +import { ExtensionsKind } from './ExtensionsKind'; +import { ExtensionsAuthor } from './ExtensionsAuthor'; +import { ExtensionsSupport } from './ExtensionsSupport'; /** * @public */ -export interface MarketplacePlugin extends Entity { - spec?: MarketplacePluginSpec; +export interface ExtensionsPlugin extends Entity { + spec?: ExtensionsPluginSpec; } /** @@ -71,7 +74,7 @@ export interface Asset extends JsonObject { /** * @public */ -export enum MarketplacePluginInstallStatus { +export enum ExtensionsPluginInstallStatus { NotInstalled = 'NotInstalled', Installed = 'Installed', PartiallyInstalled = 'PartiallyInstalled', @@ -82,7 +85,7 @@ export enum MarketplacePluginInstallStatus { /** * @public */ -export interface MarketplacePluginSpec extends JsonObject { +export interface ExtensionsPluginSpec extends JsonObject { icon?: string; /** @@ -90,8 +93,8 @@ export interface MarketplacePluginSpec extends JsonObject { */ developer?: string; author?: string; - authors?: MarketplaceAuthor[]; - support?: MarketplaceSupport; + authors?: ExtensionsAuthor[]; + support?: ExtensionsSupport; packages?: string[]; categories?: string[]; @@ -102,19 +105,25 @@ export interface MarketplacePluginSpec extends JsonObject { documentation?: Documentation[]; assets?: Asset[]; - installStatus?: MarketplacePluginInstallStatus; + installStatus?: ExtensionsPluginInstallStatus; } /** * @public */ -export function isMarketplacePlugin( +export function isExtensionsPlugin( entity?: Entity, -): entity is MarketplacePlugin { +): entity is ExtensionsPlugin { return ( !!entity && (entity.apiVersion === EXTENSIONS_API_VERSION || - entity.apiVersion === 'marketplace.backstage.io/v1alpha1') && - entity.kind === MarketplaceKind.Plugin + entity.apiVersion === DEPRECATED_EXTENSIONS_API_VERSION) && + entity.kind === ExtensionsKind.Plugin ); } + +/** + * @public + * @deprecated Use isExtensionsPlugin instead + */ +export const isMarketplacePlugin = isExtensionsPlugin; diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceSupport.ts b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsSupport.ts similarity index 90% rename from workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceSupport.ts rename to workspaces/extensions/plugins/extensions-common/src/types/ExtensionsSupport.ts index 10e32e73d8..dafe4173c3 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/types/MarketplaceSupport.ts +++ b/workspaces/extensions/plugins/extensions-common/src/types/ExtensionsSupport.ts @@ -17,7 +17,7 @@ /** * @public */ -export enum MarketplaceSupportLevel { +export enum ExtensionsSupportLevel { GENERALLY_AVAILABLE = 'generally-available', TECH_PREVIEW = 'tech-preview', DEV_PREVIEW = 'dev-preview', @@ -28,9 +28,9 @@ export enum MarketplaceSupportLevel { /** * @public */ -export type MarketplaceSupport = { +export type ExtensionsSupport = { // Technically both attributes are required, but we expecting undefined anyway provider?: string; // Technically both attributes are required, but we expecting undefined anyway - level?: MarketplaceSupportLevel; + level?: ExtensionsSupportLevel; }; diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/NodeEnvironmentType.ts b/workspaces/extensions/plugins/extensions-common/src/types/NodeEnvironmentType.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/types/NodeEnvironmentType.ts rename to workspaces/extensions/plugins/extensions-common/src/types/NodeEnvironmentType.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/src/types/index.ts b/workspaces/extensions/plugins/extensions-common/src/types/index.ts similarity index 75% rename from workspaces/marketplace/plugins/marketplace-common/src/types/index.ts rename to workspaces/extensions/plugins/extensions-common/src/types/index.ts index 7f0dea0b41..d9e862f39a 100644 --- a/workspaces/marketplace/plugins/marketplace-common/src/types/index.ts +++ b/workspaces/extensions/plugins/extensions-common/src/types/index.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -export * from './MarketplaceAuthor'; -export * from './MarketplaceCollection'; -export * from './MarketplaceKind'; -export * from './MarketplacePackage'; -export * from './MarketplacePlugin'; -export * from './MarketplaceSupport'; +export * from './ExtensionsAuthor'; +export * from './ExtensionsCollection'; +export * from './ExtensionsKind'; +export * from './ExtensionsPackage'; +export * from './ExtensionsPlugin'; +export * from './ExtensionsSupport'; export * from './ConfigurationResponse'; export * from './NodeEnvironmentType'; diff --git a/workspaces/marketplace/plugins/marketplace-common/src/utils/decodeQueryParams.test.ts b/workspaces/extensions/plugins/extensions-common/src/utils/decodeQueryParams.test.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/utils/decodeQueryParams.test.ts rename to workspaces/extensions/plugins/extensions-common/src/utils/decodeQueryParams.test.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/src/utils/decodeQueryParams.ts b/workspaces/extensions/plugins/extensions-common/src/utils/decodeQueryParams.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/utils/decodeQueryParams.ts rename to workspaces/extensions/plugins/extensions-common/src/utils/decodeQueryParams.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/src/utils/encodeQueryParams.test.ts b/workspaces/extensions/plugins/extensions-common/src/utils/encodeQueryParams.test.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/utils/encodeQueryParams.test.ts rename to workspaces/extensions/plugins/extensions-common/src/utils/encodeQueryParams.test.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/src/utils/encodeQueryParams.ts b/workspaces/extensions/plugins/extensions-common/src/utils/encodeQueryParams.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/utils/encodeQueryParams.ts rename to workspaces/extensions/plugins/extensions-common/src/utils/encodeQueryParams.ts diff --git a/workspaces/marketplace/plugins/marketplace-common/src/utils/index.ts b/workspaces/extensions/plugins/extensions-common/src/utils/index.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace-common/src/utils/index.ts rename to workspaces/extensions/plugins/extensions-common/src/utils/index.ts diff --git a/workspaces/marketplace/plugins/marketplace/.eslintignore b/workspaces/extensions/plugins/extensions/.eslintignore similarity index 100% rename from workspaces/marketplace/plugins/marketplace/.eslintignore rename to workspaces/extensions/plugins/extensions/.eslintignore diff --git a/workspaces/marketplace/plugins/marketplace/.eslintrc.js b/workspaces/extensions/plugins/extensions/.eslintrc.js similarity index 100% rename from workspaces/marketplace/plugins/marketplace/.eslintrc.js rename to workspaces/extensions/plugins/extensions/.eslintrc.js diff --git a/workspaces/marketplace/plugins/marketplace/.prettierignore b/workspaces/extensions/plugins/extensions/.prettierignore similarity index 100% rename from workspaces/marketplace/plugins/marketplace/.prettierignore rename to workspaces/extensions/plugins/extensions/.prettierignore diff --git a/workspaces/marketplace/plugins/marketplace/CHANGELOG.md b/workspaces/extensions/plugins/extensions/CHANGELOG.md similarity index 98% rename from workspaces/marketplace/plugins/marketplace/CHANGELOG.md rename to workspaces/extensions/plugins/extensions/CHANGELOG.md index adbff6ef09..a6dba174f2 100644 --- a/workspaces/marketplace/plugins/marketplace/CHANGELOG.md +++ b/workspaces/extensions/plugins/extensions/CHANGELOG.md @@ -1,4 +1,4 @@ -# @red-hat-developer-hub/backstage-plugin-marketplace +# @red-hat-developer-hub/backstage-plugin-extensions ## 0.13.2 @@ -147,7 +147,6 @@ ### Patch Changes - f4f76c9: Plugin card UX improvements: - - Added visual install status indicators (Installed, Disabled) on plugin cards - Enhanced hover interaction on category tags with visual feedback - Implemented long tag name truncation with ellipsis and full-name tooltips for better layout @@ -159,7 +158,6 @@ ### Patch Changes - 6a561e2: Plugin side drawer UX improvements: - - Made verified and certified icons smaller for better visual hierarchy - Added proper padding, bullet points, and spacing to the Highlights section - Applied medium-weight text and proper padding to the About section title @@ -228,7 +226,7 @@ ### Minor Changes -- 7aac60c: Introduces `PluginInstallStatusProcessor` to add `spec.installStatus` for Marketplace plugins. Introduces new `installStatus` values: `MarketplacePackageInstallStatus.Disabled` and `MarketplacePluginInstallStatus.Disabled`. +- 7aac60c: Introduces `PluginInstallStatusProcessor` to add `spec.installStatus` for Marketplace plugins. Introduces new `installStatus` values: `ExtensionsPackageInstallStatus.Disabled` and `ExtensionsPluginInstallStatus.Disabled`. ### Patch Changes diff --git a/workspaces/marketplace/plugins/marketplace/README.md b/workspaces/extensions/plugins/extensions/README.md similarity index 95% rename from workspaces/marketplace/plugins/marketplace/README.md rename to workspaces/extensions/plugins/extensions/README.md index 927829b5fa..6bf9e9be0f 100644 --- a/workspaces/marketplace/plugins/marketplace/README.md +++ b/workspaces/extensions/plugins/extensions/README.md @@ -1,6 +1,6 @@ -# marketplace +# extensions -Welcome to the marketplace plugin! +Welcome to the extensions plugin! _This plugin was created through the Backstage CLI_ diff --git a/workspaces/marketplace/plugins/marketplace/app-config.dynamic.yaml b/workspaces/extensions/plugins/extensions/app-config.dynamic.yaml similarity index 66% rename from workspaces/marketplace/plugins/marketplace/app-config.dynamic.yaml rename to workspaces/extensions/plugins/extensions/app-config.dynamic.yaml index 7426b0e72d..4513b92567 100644 --- a/workspaces/marketplace/plugins/marketplace/app-config.dynamic.yaml +++ b/workspaces/extensions/plugins/extensions/app-config.dynamic.yaml @@ -1,16 +1,16 @@ dynamicPlugins: frontend: - red-hat-developer-hub.backstage-plugin-marketplace: + red-hat-developer-hub.backstage-plugin-extensions: translationResources: - - importName: marketplaceTranslations - ref: marketplaceTranslationRef + - importName: extensionsTranslations + ref: extensionsTranslationRef module: Alpha appIcons: - name: pluginsIcon importName: PluginsIcon dynamicRoutes: - path: /extensions - importName: DynamicMarketplacePluginRouter + importName: DynamicExtensionsPluginRouter menuItem: icon: pluginsIcon text: Extensions diff --git a/workspaces/marketplace/plugins/marketplace/dev/index.tsx b/workspaces/extensions/plugins/extensions/dev/index.tsx similarity index 76% rename from workspaces/marketplace/plugins/marketplace/dev/index.tsx rename to workspaces/extensions/plugins/extensions/dev/index.tsx index f1986504e3..c8ab144b2f 100644 --- a/workspaces/marketplace/plugins/marketplace/dev/index.tsx +++ b/workspaces/extensions/plugins/extensions/dev/index.tsx @@ -19,25 +19,25 @@ import { createDevApp } from '@backstage/dev-utils'; import { getAllThemes } from '@red-hat-developer-hub/backstage-plugin-theme'; import { - marketplacePlugin, - MarketplaceFullPageRouter, - MarketplaceTabbedPageRouter, + extensionsPlugin, + ExtensionsFullPageRouter, + ExtensionsTabbedPageRouter, } from '../src/plugin'; -import { marketplaceTranslations } from '../src/translations'; +import { extensionsTranslations } from '../src/translations'; createDevApp() - .registerPlugin(marketplacePlugin) - .addTranslationResource(marketplaceTranslations) + .registerPlugin(extensionsPlugin) + .addTranslationResource(extensionsTranslations) .setAvailableLanguages(['en', 'de', 'fr', 'es']) .setDefaultLanguage('en') .addThemes(getAllThemes()) .addPage({ - element: , + element: , title: 'FullPageRouter', path: '/full-page-router', }) .addPage({ - element: , + element: , title: 'TabbedPageRouter', path: '/tabbed-page-router', }) diff --git a/workspaces/marketplace/plugins/marketplace/knip-report.md b/workspaces/extensions/plugins/extensions/knip-report.md similarity index 100% rename from workspaces/marketplace/plugins/marketplace/knip-report.md rename to workspaces/extensions/plugins/extensions/knip-report.md diff --git a/workspaces/marketplace/plugins/marketplace/package.json b/workspaces/extensions/plugins/extensions/package.json similarity index 84% rename from workspaces/marketplace/plugins/marketplace/package.json rename to workspaces/extensions/plugins/extensions/package.json index 46f095ae74..f52d1f987d 100644 --- a/workspaces/marketplace/plugins/marketplace/package.json +++ b/workspaces/extensions/plugins/extensions/package.json @@ -1,5 +1,5 @@ { - "name": "@red-hat-developer-hub/backstage-plugin-marketplace", + "name": "@red-hat-developer-hub/backstage-plugin-extensions", "version": "0.13.2", "main": "src/index.ts", "types": "src/index.ts", @@ -10,15 +10,15 @@ "repository": { "type": "git", "url": "https://github.com/redhat-developer/rhdh-plugins", - "directory": "workspaces/marketplace/plugins/marketplace" + "directory": "workspaces/extensions/plugins/extensions" }, "backstage": { "role": "frontend-plugin", "pluginId": "extensions", "pluginPackages": [ - "@red-hat-developer-hub/backstage-plugin-marketplace", - "@red-hat-developer-hub/backstage-plugin-marketplace-backend", - "@red-hat-developer-hub/backstage-plugin-marketplace-common" + "@red-hat-developer-hub/backstage-plugin-extensions", + "@red-hat-developer-hub/backstage-plugin-extensions-backend", + "@red-hat-developer-hub/backstage-plugin-extensions-common" ] }, "sideEffects": false, @@ -60,7 +60,7 @@ "@mui/icons-material": "^5.16.7", "@mui/material": "^5.12.2", "@mui/styles": "5.18.0", - "@red-hat-developer-hub/backstage-plugin-marketplace-common": "workspace:^", + "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^", "@scalprum/react-core": "0.11.1", "@tanstack/react-query": "^5.60.5", "monaco-editor": "^0.55.0", diff --git a/workspaces/marketplace/plugins/marketplace/report-alpha.api.md b/workspaces/extensions/plugins/extensions/report-alpha.api.md similarity index 98% rename from workspaces/marketplace/plugins/marketplace/report-alpha.api.md rename to workspaces/extensions/plugins/extensions/report-alpha.api.md index 786dfcc098..65977c4a81 100644 --- a/workspaces/marketplace/plugins/marketplace/report-alpha.api.md +++ b/workspaces/extensions/plugins/extensions/report-alpha.api.md @@ -1,4 +1,4 @@ -## API Report File for "@red-hat-developer-hub/backstage-plugin-marketplace" +## API Report File for "@red-hat-developer-hub/backstage-plugin-extensions" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). @@ -8,7 +8,7 @@ import { TranslationRef } from '@backstage/core-plugin-api/alpha'; import { TranslationResource } from '@backstage/core-plugin-api/alpha'; // @alpha -export const marketplaceTranslationRef: TranslationRef<"plugin.marketplace", { +export const extensionsTranslationRef: TranslationRef<"plugin.extensions", { readonly "button.update": string; readonly "button.install": string; readonly "button.uninstall": string; @@ -249,7 +249,7 @@ readonly "badges.addedByAdmin": string; }>; // @alpha -export const marketplaceTranslations: TranslationResource<"plugin.marketplace">; +export const extensionsTranslations: TranslationResource<"plugin.extensions">; // (No @packageDocumentation comment for this package) diff --git a/workspaces/marketplace/plugins/marketplace/report.api.md b/workspaces/extensions/plugins/extensions/report.api.md similarity index 55% rename from workspaces/marketplace/plugins/marketplace/report.api.md rename to workspaces/extensions/plugins/extensions/report.api.md index e30ad70c77..9448e8ce5b 100644 --- a/workspaces/marketplace/plugins/marketplace/report.api.md +++ b/workspaces/extensions/plugins/extensions/report.api.md @@ -1,32 +1,55 @@ -## API Report File for "@red-hat-developer-hub/backstage-plugin-marketplace" +## API Report File for "@red-hat-developer-hub/backstage-plugin-extensions" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +/// + import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { FunctionComponent } from 'react'; import { IconComponent } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react/jsx-runtime'; // @public (undocumented) -export const DynamicMarketplacePluginContent: () => JSX_2.Element; +export const DynamicExtensionsPluginContent: () => JSX_2.Element; // @public -export const DynamicMarketplacePluginRouter: () => JSX_2.Element; +export const DynamicExtensionsPluginRouter: () => JSX_2.Element; // @public @deprecated (undocumented) -export const InstallationContextProvider: () => null; +export const DynamicMarketplacePluginContent: () => JSX_2.Element; + +// @public @deprecated (undocumented) +export const DynamicMarketplacePluginRouter: () => JSX_2.Element; // @public -export const MarketplaceFullPageRouter: () => JSX_2.Element; +export const ExtensionsFullPageRouter: () => JSX_2.Element; // @public (undocumented) -export const MarketplaceIcon: IconComponent; +export const ExtensionsIcon: IconComponent; // @public -export const marketplacePlugin: BackstagePlugin< {}, {}, {}>; +export const extensionsPlugin: BackstagePlugin< {}, {}, {}>; // @public +export const ExtensionsTabbedPageRouter: () => JSX_2.Element; + +// @public @deprecated (undocumented) +export const InstallationContextProvider: () => null; + +// @public @deprecated (undocumented) +export const MarketplaceFullPageRouter: () => JSX_2.Element; + +// @public @deprecated (undocumented) +export const MarketplaceIcon: FunctionComponent< { +fontSize?: "small" | "medium" | "inherit" | "large" | undefined; +}>; + +// @public @deprecated (undocumented) +export const marketplacePlugin: BackstagePlugin< {}, {}, {}>; + +// @public @deprecated (undocumented) export const MarketplaceTabbedPageRouter: () => JSX_2.Element; // @public (undocumented) diff --git a/workspaces/marketplace/plugins/marketplace/src/__fixtures__/mockCollections.ts b/workspaces/extensions/plugins/extensions/src/__fixtures__/mockCollections.ts similarity index 78% rename from workspaces/marketplace/plugins/marketplace/src/__fixtures__/mockCollections.ts rename to workspaces/extensions/plugins/extensions/src/__fixtures__/mockCollections.ts index f5e108b2b1..b741e0bbfb 100644 --- a/workspaces/marketplace/plugins/marketplace/src/__fixtures__/mockCollections.ts +++ b/workspaces/extensions/plugins/extensions/src/__fixtures__/mockCollections.ts @@ -16,14 +16,14 @@ import { EXTENSIONS_API_VERSION, - MarketplaceCollection, - MarketplaceKind, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsCollection, + ExtensionsKind, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -export const mockCollections: MarketplaceCollection[] = [ +export const mockCollections: ExtensionsCollection[] = [ { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, metadata: { namespace: 'default', name: 'collection-1', @@ -31,7 +31,7 @@ export const mockCollections: MarketplaceCollection[] = [ }, { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Collection, + kind: ExtensionsKind.Collection, metadata: { namespace: 'default', name: 'collection-2', diff --git a/workspaces/marketplace/plugins/marketplace/src/__fixtures__/mockPlugins.ts b/workspaces/extensions/plugins/extensions/src/__fixtures__/mockPlugins.ts similarity index 80% rename from workspaces/marketplace/plugins/marketplace/src/__fixtures__/mockPlugins.ts rename to workspaces/extensions/plugins/extensions/src/__fixtures__/mockPlugins.ts index 0b5ac24c58..0eaee47fd0 100644 --- a/workspaces/marketplace/plugins/marketplace/src/__fixtures__/mockPlugins.ts +++ b/workspaces/extensions/plugins/extensions/src/__fixtures__/mockPlugins.ts @@ -16,14 +16,14 @@ import { EXTENSIONS_API_VERSION, - MarketplacePlugin, - MarketplaceKind, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsPlugin, + ExtensionsKind, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -export const mockPlugins: MarketplacePlugin[] = [ +export const mockPlugins: ExtensionsPlugin[] = [ { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, metadata: { namespace: 'default', name: 'plugin-1', @@ -31,7 +31,7 @@ export const mockPlugins: MarketplacePlugin[] = [ }, { apiVersion: EXTENSIONS_API_VERSION, - kind: MarketplaceKind.Plugin, + kind: ExtensionsKind.Plugin, metadata: { namespace: 'default', name: 'plugin-2', diff --git a/workspaces/marketplace/plugins/marketplace/src/alpha.ts b/workspaces/extensions/plugins/extensions/src/alpha.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/alpha.ts rename to workspaces/extensions/plugins/extensions/src/alpha.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/api/DynamicPluginsInfoClient.ts b/workspaces/extensions/plugins/extensions/src/api/DynamicPluginsInfoClient.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/api/DynamicPluginsInfoClient.ts rename to workspaces/extensions/plugins/extensions/src/api/DynamicPluginsInfoClient.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/api/index.ts b/workspaces/extensions/plugins/extensions/src/api/index.ts similarity index 86% rename from workspaces/marketplace/plugins/marketplace/src/api/index.ts rename to workspaces/extensions/plugins/extensions/src/api/index.ts index 7d3c712353..745ed261e9 100644 --- a/workspaces/marketplace/plugins/marketplace/src/api/index.ts +++ b/workspaces/extensions/plugins/extensions/src/api/index.ts @@ -16,9 +16,9 @@ import { createApiRef } from '@backstage/core-plugin-api'; -import { MarketplaceApi } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsApi } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -export const marketplaceApiRef = createApiRef({ +export const extensionsApiRef = createApiRef({ id: 'plugin.extensions.api-ref', }); diff --git a/workspaces/marketplace/plugins/marketplace/src/assets/notfound.png b/workspaces/extensions/plugins/extensions/src/assets/notfound.png similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/assets/notfound.png rename to workspaces/extensions/plugins/extensions/src/assets/notfound.png diff --git a/workspaces/marketplace/plugins/marketplace/src/components/ActionsMenu.tsx b/workspaces/extensions/plugins/extensions/src/components/ActionsMenu.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/components/ActionsMenu.tsx rename to workspaces/extensions/plugins/extensions/src/components/ActionsMenu.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/components/Badges.tsx b/workspaces/extensions/plugins/extensions/src/components/Badges.tsx similarity index 80% rename from workspaces/marketplace/plugins/marketplace/src/components/Badges.tsx rename to workspaces/extensions/plugins/extensions/src/components/Badges.tsx index fe83a08b43..c4c674f5f2 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/Badges.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/Badges.tsx @@ -18,15 +18,15 @@ import Chip from '@mui/material/Chip'; import TaskAltIcon from '@mui/icons-material/TaskAlt'; import Tooltip from '@mui/material/Tooltip'; import { - MarketplaceAnnotation, - MarketplacePlugin, - MarketplacePackage, - MarketplaceSupportLevel, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsAnnotation, + ExtensionsPlugin, + ExtensionsPackage, + ExtensionsSupportLevel, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { colors } from '../consts'; import { useTranslation } from '../hooks/useTranslation'; -import { marketplaceTranslationRef } from '../translations/ref'; +import { extensionsTranslationRef } from '../translations/ref'; import type { TranslationFunction } from '@backstage/core-plugin-api/alpha'; interface BadgeOptions { @@ -38,28 +38,28 @@ interface BadgeOptions { } const getBadgeOptions = ( - entity: MarketplacePlugin | MarketplacePackage, - t: TranslationFunction, + entity: ExtensionsPlugin | ExtensionsPackage, + t: TranslationFunction, ): BadgeOptions | null => { const supportLevel = entity.spec?.support?.level; const supportProvider = entity.spec?.support?.provider; - if (entity.metadata.annotations?.[MarketplaceAnnotation.CERTIFIED_BY]) { + if (entity.metadata.annotations?.[ExtensionsAnnotation.CERTIFIED_BY]) { return { isBadge: true, color: colors.certified, label: t('badges.certified'), tooltip: t('badges.certifiedBy' as any, { provider: - entity.metadata.annotations[MarketplaceAnnotation.CERTIFIED_BY], + entity.metadata.annotations[ExtensionsAnnotation.CERTIFIED_BY], }), statusTooltip: t('badges.stableAndSecured' as any, { provider: - entity.metadata.annotations[MarketplaceAnnotation.CERTIFIED_BY], + entity.metadata.annotations[ExtensionsAnnotation.CERTIFIED_BY], }), }; } - if (supportLevel === MarketplaceSupportLevel.GENERALLY_AVAILABLE) { + if (supportLevel === ExtensionsSupportLevel.GENERALLY_AVAILABLE) { return { isBadge: true, color: colors.generallyAvailable, @@ -72,21 +72,21 @@ const getBadgeOptions = ( : t('badges.productionReady'), }; } - if (supportLevel === MarketplaceSupportLevel.COMMUNITY) { + if (supportLevel === ExtensionsSupportLevel.COMMUNITY) { return { isBadge: false, label: t('badges.communityPlugin'), statusTooltip: t('badges.openSourceNoSupport'), }; } - if (supportLevel === MarketplaceSupportLevel.TECH_PREVIEW) { + if (supportLevel === ExtensionsSupportLevel.TECH_PREVIEW) { return { isBadge: false, label: t('badges.techPreview'), statusTooltip: t('badges.pluginInDevelopment'), }; } - if (supportLevel === MarketplaceSupportLevel.DEV_PREVIEW) { + if (supportLevel === ExtensionsSupportLevel.DEV_PREVIEW) { return { isBadge: false, label: t('badges.devPreview'), @@ -95,7 +95,7 @@ const getBadgeOptions = ( } if ( - entity.metadata?.annotations?.[MarketplaceAnnotation.PRE_INSTALLED] !== + entity.metadata?.annotations?.[ExtensionsAnnotation.PRE_INSTALLED] !== 'true' ) { return { @@ -110,7 +110,7 @@ const getBadgeOptions = ( return null; }; -export const BadgeChip = ({ plugin }: { plugin: MarketplacePlugin }) => { +export const BadgeChip = ({ plugin }: { plugin: ExtensionsPlugin }) => { const { t } = useTranslation(); if (!plugin) { @@ -140,7 +140,7 @@ export const BadgeChip = ({ plugin }: { plugin: MarketplacePlugin }) => { ); }; -export const BadgeTriange = ({ plugin }: { plugin: MarketplacePlugin }) => { +export const BadgeTriange = ({ plugin }: { plugin: ExtensionsPlugin }) => { const { t } = useTranslation(); if (!plugin) { diff --git a/workspaces/marketplace/plugins/marketplace/src/components/CategoryLinkButton.test.tsx b/workspaces/extensions/plugins/extensions/src/components/CategoryLinkButton.test.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/components/CategoryLinkButton.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/CategoryLinkButton.test.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/components/CategoryLinkButton.tsx b/workspaces/extensions/plugins/extensions/src/components/CategoryLinkButton.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/components/CategoryLinkButton.tsx rename to workspaces/extensions/plugins/extensions/src/components/CategoryLinkButton.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/components/CodeEditor.tsx b/workspaces/extensions/plugins/extensions/src/components/CodeEditor.tsx similarity index 56% rename from workspaces/marketplace/plugins/marketplace/src/components/CodeEditor.tsx rename to workspaces/extensions/plugins/extensions/src/components/CodeEditor.tsx index 0221653afa..15746d1d6e 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/CodeEditor.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/CodeEditor.tsx @@ -14,16 +14,7 @@ * limitations under the License. */ -import type { ReactNode } from 'react'; - -import { - createContext, - useRef, - useMemo, - useContext, - useState, - useCallback, -} from 'react'; +import { useState, useCallback } from 'react'; import { Progress } from '@backstage/core-components'; @@ -33,14 +24,19 @@ import ContentCopyRoundedIcon from '@mui/icons-material/ContentCopyRounded'; import Typography from '@mui/material/Typography'; import { useTheme } from '@mui/material/styles'; -import Editor, { loader, OnChange, OnMount } from '@monaco-editor/react'; +import Editor, { + loader, + type OnChange, + type OnMount, +} from '@monaco-editor/react'; + +import type MonacoEditor from 'monaco-editor'; +import { useCodeEditor } from './CodeEditorContext'; -// TODO: Load the CodeEditor or the pages that uses the CodeEditor lazy! -// Currently manaco is loaded when the main extensions page is opened. +// Import Monaco Editor modules - CodeEditor is lazy-loaded via CodeEditorCard import 'monaco-editor/esm/vs/basic-languages/yaml/yaml.contribution'; // @ts-ignore import * as monacoEditor from 'monaco-editor/esm/vs/editor/editor.api'; -import type MonacoEditor from 'monaco-editor'; loader.config({ monaco: monacoEditor }); @@ -48,69 +44,6 @@ const defaultOptions: MonacoEditor.editor.IEditorConstructionOptions = { minimap: { enabled: false }, }; -interface CodeEditorContextValue { - getEditor: () => MonacoEditor.editor.ICodeEditor | null; - setEditor: (editor: MonacoEditor.editor.ICodeEditor) => void; - - getSelection: () => MonacoEditor.Selection | null; - setSelection: (editorSelection: MonacoEditor.Selection) => void; - - getPosition: () => MonacoEditor.Position | null; - setPosition: (cursorPosition: MonacoEditor.Position) => void; - /** short for getEditor()?.getValue() */ - getValue: () => string | undefined; - /** short for getEditor()?.setValue() and getEditor()?.focus() */ - setValue: (value: string, autoFocus?: boolean) => void; -} - -const CodeEditorContext = createContext( - undefined as any as CodeEditorContextValue, -); - -export const CodeEditorContextProvider = (props: { children: ReactNode }) => { - const editorRef = useRef(null); - const contextValue = useMemo( - () => ({ - getEditor: () => editorRef.current, - setEditor: (editor: MonacoEditor.editor.ICodeEditor) => { - editorRef.current = editor; - }, - getPosition: () => editorRef.current?.getPosition() || null, - setPosition: (cursorPosition: MonacoEditor.Position) => { - editorRef.current?.setPosition(cursorPosition); - }, - getSelection: () => editorRef.current?.getSelection() || null, - setSelection: (editorSelection: MonacoEditor.Selection) => { - editorRef.current?.setSelection(editorSelection); - }, - getValue: () => editorRef.current?.getValue(), - setValue: (value: string, autoFocus = true) => { - editorRef.current?.setValue(value); - if (autoFocus) { - editorRef.current?.focus(); - } - }, - }), - [], - ); - - return ( - - {props.children} - - ); -}; - -export const useCodeEditor = () => { - const contextValue = useContext(CodeEditorContext); - if (!contextValue) { - throw new Error( - 'useCodeEditor must be used within a CodeEditorContextProvider', - ); - } - return contextValue; -}; - export interface CodeEditorProps { defaultLanguage: 'yaml'; // We enforce YAML for now defaultValue?: string; diff --git a/workspaces/marketplace/plugins/marketplace/src/components/CodeEditorCard.tsx b/workspaces/extensions/plugins/extensions/src/components/CodeEditorCard.tsx similarity index 62% rename from workspaces/marketplace/plugins/marketplace/src/components/CodeEditorCard.tsx rename to workspaces/extensions/plugins/extensions/src/components/CodeEditorCard.tsx index dc0fc58516..fed9489fcc 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/CodeEditorCard.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/CodeEditorCard.tsx @@ -14,10 +14,16 @@ * limitations under the License. */ +import { lazy, Suspense } from 'react'; import Grid from '@mui/material/Grid'; import Card from '@mui/material/Card'; import CardContent from '@mui/material/CardContent'; -import { CodeEditor } from './CodeEditor'; +import { Progress } from '@backstage/core-components'; + +// Lazy load CodeEditor to avoid loading Monaco Editor until needed +const CodeEditor = lazy(() => + import('./CodeEditor').then(module => ({ default: module.CodeEditor })), +); export const CodeEditorCard = ({ onLoad }: { onLoad: () => void }) => { return ( @@ -45,7 +51,25 @@ export const CodeEditorCard = ({ onLoad }: { onLoad: () => void }) => { scrollbarWidth: 'thin', }} > - + +
+ +
+ + } + > + +
diff --git a/workspaces/extensions/plugins/extensions/src/components/CodeEditorContext.tsx b/workspaces/extensions/plugins/extensions/src/components/CodeEditorContext.tsx new file mode 100644 index 0000000000..08bac4ca26 --- /dev/null +++ b/workspaces/extensions/plugins/extensions/src/components/CodeEditorContext.tsx @@ -0,0 +1,83 @@ +/* + * Copyright The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { ReactNode } from 'react'; +import { createContext, useRef, useMemo, useContext } from 'react'; + +import type MonacoEditor from 'monaco-editor'; + +interface CodeEditorContextValue { + getEditor: () => MonacoEditor.editor.ICodeEditor | null; + setEditor: (editor: MonacoEditor.editor.ICodeEditor) => void; + + getSelection: () => MonacoEditor.Selection | null; + setSelection: (editorSelection: MonacoEditor.Selection) => void; + + getPosition: () => MonacoEditor.Position | null; + setPosition: (cursorPosition: MonacoEditor.Position) => void; + /** short for getEditor()?.getValue() */ + getValue: () => string | undefined; + /** short for getEditor()?.setValue() and getEditor()?.focus() */ + setValue: (value: string, autoFocus?: boolean) => void; +} + +const CodeEditorContext = createContext( + undefined as any as CodeEditorContextValue, +); + +export const CodeEditorContextProvider = (props: { children: ReactNode }) => { + const editorRef = useRef(null); + const contextValue = useMemo( + () => ({ + getEditor: () => editorRef.current, + setEditor: (editor: MonacoEditor.editor.ICodeEditor) => { + editorRef.current = editor; + }, + getPosition: () => editorRef.current?.getPosition() || null, + setPosition: (cursorPosition: MonacoEditor.Position) => { + editorRef.current?.setPosition(cursorPosition); + }, + getSelection: () => editorRef.current?.getSelection() || null, + setSelection: (editorSelection: MonacoEditor.Selection) => { + editorRef.current?.setSelection(editorSelection); + }, + getValue: () => editorRef.current?.getValue(), + setValue: (value: string, autoFocus = true) => { + editorRef.current?.setValue(value); + if (autoFocus) { + editorRef.current?.focus(); + } + }, + }), + [], + ); + + return ( + + {props.children} + + ); +}; + +export const useCodeEditor = () => { + const contextValue = useContext(CodeEditorContext); + if (!contextValue) { + throw new Error( + 'useCodeEditor must be used within a CodeEditorContextProvider', + ); + } + return contextValue; +}; diff --git a/workspaces/marketplace/plugins/marketplace/src/components/CollectionHorizontalScrollRow.tsx b/workspaces/extensions/plugins/extensions/src/components/CollectionHorizontalScrollRow.tsx similarity index 95% rename from workspaces/marketplace/plugins/marketplace/src/components/CollectionHorizontalScrollRow.tsx rename to workspaces/extensions/plugins/extensions/src/components/CollectionHorizontalScrollRow.tsx index cd2defe33f..b7204b8dba 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/CollectionHorizontalScrollRow.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/CollectionHorizontalScrollRow.tsx @@ -21,7 +21,7 @@ import Stack from '@mui/material/Stack'; import Skeleton from '@mui/material/Skeleton'; import Typography from '@mui/material/Typography'; -import { MarketplaceCollection } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsCollection } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { useCollectionPlugins } from '../hooks/useCollectionPlugins'; import { PluginCard, PluginCardSkeleton } from './PluginCard'; @@ -61,7 +61,7 @@ export const CollectionHorizontalScrollRowSkeleton = () => { export const CollectionHorizontalScrollRow = ({ collection, }: { - collection: MarketplaceCollection; + collection: ExtensionsCollection; }) => { const { t } = useTranslation(); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogContent.test.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogContent.test.tsx similarity index 90% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogContent.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogContent.test.tsx index 57304fd3f7..a452f6f1d5 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogContent.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogContent.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import { renderInTestApp } from '@backstage/test-utils'; -import { MarketplaceCatalogContent } from './MarketplaceCatalogContent'; +import { ExtensionsCatalogContent } from './ExtensionsCatalogContent'; import { useFilteredPlugins } from '../hooks/useFilteredPlugins'; import { useCollections } from '../hooks/useCollections'; import { useExtensionsConfiguration } from '../hooks/useExtensionsConfiguration'; @@ -68,7 +68,7 @@ afterAll(() => { jest.clearAllMocks(); }); -describe('MarketplaceCatalogContent', () => { +describe('ExtensionsCatalogContent', () => { it('should show empty state with no plugins', async () => { useExtensionsConfigurationMock.mockReturnValue({ data: { @@ -81,7 +81,7 @@ describe('MarketplaceCatalogContent', () => { }, }); - const { getByText } = await renderInTestApp(); + const { getByText } = await renderInTestApp(); expect(getByText('No plugins found')).toBeInTheDocument(); }); @@ -104,7 +104,7 @@ describe('MarketplaceCatalogContent', () => { }, }); - const { getByText } = await renderInTestApp(); + const { getByText } = await renderInTestApp(); expect( getByText('No results found. Adjust your filters and try again.'), ).toBeInTheDocument(); @@ -117,7 +117,7 @@ describe('MarketplaceCatalogContent', () => { }, }); - const { getByText } = await renderInTestApp(); + const { getByText } = await renderInTestApp(); expect( getByText('Must enable the Extensions backend plugin'), ).toBeInTheDocument(); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogContent.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogContent.tsx similarity index 96% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogContent.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogContent.tsx index 3f39b1447d..56d1af5c7a 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogContent.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogContent.tsx @@ -34,8 +34,8 @@ import { useCollections } from '../hooks/useCollections'; import { useExtensionsConfiguration } from '../hooks/useExtensionsConfiguration'; import { useFilteredPlugins } from '../hooks/useFilteredPlugins'; import { useNodeEnvironment } from '../hooks/useNodeEnvironment'; -import { MarketplaceCatalogGrid } from './MarketplaceCatalogGrid'; -import { MarketplacePluginFilter } from './MarketplacePluginFilter'; +import { ExtensionsCatalogGrid } from './ExtensionsCatalogGrid'; +import { ExtensionsPluginFilter } from './ExtensionsPluginFilter'; import { CollectionHorizontalScrollRow } from './CollectionHorizontalScrollRow'; import { useInstallationContext } from './InstallationContext'; import { InstalledPluginsDialog } from './InstalledPluginsDialog'; @@ -103,7 +103,7 @@ const EmptyState = ({ isError }: { isError?: boolean }) => { ); }; -export const MarketplaceCatalogContent = () => { +export const ExtensionsCatalogContent = () => { const { t } = useTranslation(); const [openInstalledPluginsDialog, setOpenInstalledPluginsDialog] = useState(false); @@ -185,7 +185,7 @@ export const MarketplaceCatalogContent = () => { /> - + @@ -207,7 +207,7 @@ export const MarketplaceCatalogContent = () => { - + diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogGrid.test.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogGrid.test.tsx similarity index 77% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogGrid.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogGrid.test.tsx index 524bb4a391..84f79b4569 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogGrid.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogGrid.test.tsx @@ -17,17 +17,17 @@ import type { PropsWithChildren } from 'react'; import { QueryClientProvider } from '@tanstack/react-query'; -import { MarketplaceApi } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsApi } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; -import { marketplaceApiRef } from '../api'; +import { extensionsApiRef } from '../api'; import { rootRouteRef } from '../routes'; import { queryClient } from '../queryclient'; -import { MarketplaceCatalogGrid } from './MarketplaceCatalogGrid'; +import { ExtensionsCatalogGrid } from './ExtensionsCatalogGrid'; -const apis = [[marketplaceApiRef, {} as MarketplaceApi]] as const; +const apis = [[extensionsApiRef, {} as ExtensionsApi]] as const; queryClient.setDefaultOptions({ queries: { retry: false }, @@ -39,15 +39,15 @@ const Providers = ({ children }: PropsWithChildren<{}>) => ( ); -describe('MarketplaceCatalogGrid', () => { +describe('ExtensionsCatalogGrid', () => { it('should render without error', async () => { await renderInTestApp( - + , { mountedRoutes: { - '/marketplace': rootRouteRef, + '/extensions': rootRouteRef, }, }, ); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogGrid.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogGrid.tsx similarity index 97% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogGrid.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogGrid.tsx index 21d3903f45..9ae15ec319 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCatalogGrid.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCatalogGrid.tsx @@ -20,7 +20,7 @@ import { useFilteredPlugins } from '../hooks/useFilteredPlugins'; import { PluginCard, PluginCardGrid, PluginCardSkeleton } from './PluginCard'; import { useTranslation } from '../hooks/useTranslation'; -export const MarketplaceCatalogGrid = () => { +export const ExtensionsCatalogGrid = () => { const { t } = useTranslation(); const filteredPlugins = useFilteredPlugins(); const skeletonComponents = Array(4).fill(); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionGrid.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionGrid.tsx similarity index 97% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionGrid.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionGrid.tsx index fb34ec0b78..b4c8be01c2 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionGrid.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionGrid.tsx @@ -24,7 +24,7 @@ import { collectionRouteRef } from '../routes'; import { PluginCard, PluginCardGrid, PluginCardSkeleton } from './PluginCard'; import { Markdown } from './Markdown'; -export const MarketplaceCollectionGridLoader = () => { +export const ExtensionsCollectionGridLoader = () => { const { t } = useTranslation(); const params = useRouteRefParams(collectionRouteRef); const collection = useCollection(params.namespace, params.name); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionsGrid.test.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionsGrid.test.tsx similarity index 87% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionsGrid.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionsGrid.test.tsx index d1b38cb32e..dca59c57fd 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionsGrid.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionsGrid.test.tsx @@ -23,7 +23,7 @@ import { rootRouteRef } from '../routes'; import { mockCollections } from '../__fixtures__/mockCollections'; import { mockPlugins } from '../__fixtures__/mockPlugins'; -import { MarketplaceCollectionsGrid } from './MarketplaceCollectionsGrid'; +import { ExtensionsCollectionsGrid } from './ExtensionsCollectionsGrid'; const useCollectionsMock = useCollections as jest.Mock; const useCollectionPluginsMock = useCollectionPlugins as jest.Mock; @@ -40,12 +40,12 @@ beforeEach(() => { jest.clearAllMocks(); }); -describe('MarketplaceCollectionsGrid', () => { +describe('ExtensionsCollectionsGrid', () => { it('should render while loading', async () => { useCollectionsMock.mockReturnValue({ isLoading: true }); const { getAllByText } = await renderInTestApp( - , + , ); // find skeletons, exact number doesn't matter expect(getAllByText('Entry name')).toHaveLength(10); @@ -68,14 +68,11 @@ describe('MarketplaceCollectionsGrid', () => { }, ); - const { getByText } = await renderInTestApp( - , - { - mountedRoutes: { - '/marketplace': rootRouteRef, - }, + const { getByText } = await renderInTestApp(, { + mountedRoutes: { + '/extensions': rootRouteRef, }, - ); + }); expect(getByText('collection-1')).toBeInTheDocument(); expect(getByText('plugin-1')).toBeInTheDocument(); expect(getByText('Collection 2')).toBeInTheDocument(); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionsGrid.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionsGrid.tsx similarity index 96% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionsGrid.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionsGrid.tsx index 93b9ba18ef..a0502fab02 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplaceCollectionsGrid.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsCollectionsGrid.tsx @@ -21,7 +21,7 @@ import { CollectionHorizontalScrollRowSkeleton, } from './CollectionHorizontalScrollRow'; -export const MarketplaceCollectionsGrid = () => { +export const ExtensionsCollectionsGrid = () => { const collections = useCollections({}); return ( diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageContent.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageContent.tsx similarity index 87% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageContent.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageContent.tsx index 17c29aa1f0..f9bc0a0da1 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageContent.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageContent.tsx @@ -22,12 +22,12 @@ import { useSearchParams } from 'react-router-dom'; import { packageRouteRef } from '../routes'; import { usePackage } from '../hooks/usePackage'; import { - MarketplacePluginContent, - MarketplacePluginContentSkeleton, -} from './MarketplacePluginContent'; + ExtensionsPluginContent, + ExtensionsPluginContentSkeleton, +} from './ExtensionsPluginContent'; import { useTranslation } from '../hooks/useTranslation'; -export const MarketplacePackageContent = () => { +export const ExtensionsPackageContent = () => { const { t } = useTranslation(); const params = useRouteRefParams(packageRouteRef); @@ -40,7 +40,7 @@ export const MarketplacePackageContent = () => { const pkg = usePackage(namespace, name); if (pkg.isLoading) { - return ; + return ; } else if (pkg.error || (pkg.data as any)?.error) { return ( @@ -49,7 +49,7 @@ export const MarketplacePackageContent = () => { ); } else if (pkg.data) { - return ; + return ; } return ( diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageDrawer.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageDrawer.tsx similarity index 93% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageDrawer.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageDrawer.tsx index 1f28f1cc64..be19e284bf 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageDrawer.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageDrawer.tsx @@ -25,11 +25,11 @@ import IconButton from '@mui/material/IconButton'; import CloseIcon from '@mui/icons-material/Close'; import { useTheme } from '@mui/material/styles'; -import { MarketplacePackageContent } from './MarketplacePackageContent'; +import { ExtensionsPackageContent } from './ExtensionsPackageContent'; import { useRouteRef } from '@backstage/core-plugin-api'; import { installedTabRouteRef } from '../routes'; -export const MarketplacePackageDrawer = () => { +export const ExtensionsPackageDrawer = () => { const [open, setOpen] = useState(true); const [searchParams] = useSearchParams(); useLayoutEffect(() => { @@ -70,7 +70,7 @@ export const MarketplacePackageDrawer = () => { article': { backgroundColor: 'transparent' } }}> - + diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageEditContent.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageEditContent.tsx similarity index 97% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageEditContent.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageEditContent.tsx index 415b09e052..658d024fc7 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackageEditContent.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPackageEditContent.tsx @@ -26,9 +26,9 @@ import { useRouteRefParams } from '@backstage/core-plugin-api'; import { useLocation, useNavigate } from 'react-router-dom'; import { - MarketplacePackage, + ExtensionsPackage, ExtensionsPackageAppConfigExamples, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import Box from '@mui/material/Box'; import Grid from '@mui/material/Grid'; @@ -46,7 +46,7 @@ import Tooltip from '@mui/material/Tooltip'; import { packageInstallRouteRef } from '../routes'; -import { CodeEditorContextProvider, useCodeEditor } from './CodeEditor'; +import { CodeEditorContextProvider, useCodeEditor } from './CodeEditorContext'; import { useInstallPackage } from '../hooks/useInstallPackage'; import { usePackage } from '../hooks/usePackage'; import { usePackageConfig } from '../hooks/usePackageConfig'; @@ -63,10 +63,10 @@ interface TabItem { others?: { [key: string]: any }; } -export const MarketplacePackageEditContent = ({ +export const ExtensionsPackageEditContent = ({ pkg, }: { - pkg: MarketplacePackage; + pkg: ExtensionsPackage; }) => { const { t } = useTranslation(); const { mutateAsync: installPackage } = useInstallPackage(); @@ -230,7 +230,7 @@ export const MarketplacePackageEditContent = ({ // Finalize single-map YAML const packageYamlString = pkgLines .join('\n') - .replace(/^\s*[-]\s*/m, '') + .replace(/^\s*[-]\s*/m, '') // NOSONAR .replace(/\r/g, '') .replace(/^\s*$/gm, '') .trim(); @@ -257,7 +257,7 @@ export const MarketplacePackageEditContent = ({ setInstalledPackages(updated); queryClient.invalidateQueries({ queryKey: [ - 'marketplaceApi', + 'extensionsApi', 'getPackageConfigByName', pkg.metadata.namespace ?? params.namespace, pkg.metadata.name, @@ -451,7 +451,7 @@ export const MarketplacePackageEditContent = ({ ); }; -export const MarketplacePackageEditContentLoader = () => { +export const ExtensionsPackageEditContentLoader = () => { const { t } = useTranslation(); const params = useRouteRefParams(packageInstallRouteRef); @@ -462,7 +462,7 @@ export const MarketplacePackageEditContentLoader = () => { } else if (pkg.data) { return ( - + ); } else if (pkg.error) { diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackagesTable.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPackagesTable.tsx similarity index 90% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackagesTable.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPackagesTable.tsx index 2899b29c7f..680f07507d 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePackagesTable.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPackagesTable.tsx @@ -16,7 +16,7 @@ import { ErrorPanel, Table, TableColumn } from '@backstage/core-components'; -import { MarketplacePackage } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPackage } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { usePackages } from '../hooks/usePackages'; import { useQueryTableOptions } from '../hooks/useQueryTableOptions'; @@ -27,10 +27,10 @@ import { } from '../labels'; import { useTranslation } from '../hooks/useTranslation'; -export const MarketplacePackagesTable = () => { +export const ExtensionsPackagesTable = () => { const { t } = useTranslation(); - const columns: TableColumn[] = [ + const columns: TableColumn[] = [ { title: t('table.packageName'), field: 'spec.packageName', @@ -73,7 +73,7 @@ export const MarketplacePackagesTable = () => { }, ]; - const queryTableOptions = useQueryTableOptions(columns); + const queryTableOptions = useQueryTableOptions(columns); const packages = usePackages(queryTableOptions.query); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginContent.test.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.test.tsx similarity index 88% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginContent.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.test.tsx index 989bb31d5c..7c18632dfb 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginContent.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.test.tsx @@ -20,12 +20,12 @@ import { BrowserRouter } from 'react-router-dom'; import { mockApis, MockErrorApi, TestApiProvider } from '@backstage/test-utils'; import { fireEvent, render } from '@testing-library/react'; -import { MarketplacePluginContent } from './MarketplacePluginContent'; -import { marketplaceApiRef } from '../api'; +import { ExtensionsPluginContent } from './ExtensionsPluginContent'; +import { extensionsApiRef } from '../api'; import { usePluginConfigurationPermissions } from '../hooks/usePluginConfigurationPermissions'; import { usePlugin } from '../hooks/usePlugin'; import { usePluginPackages } from '../hooks/usePluginPackages'; -import { MarketplacePluginInstallStatus } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPluginInstallStatus } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { useExtensionsConfiguration } from '../hooks/useExtensionsConfiguration'; import { useNodeEnvironment } from '../hooks/useNodeEnvironment'; import { errorApiRef } from '@backstage/core-plugin-api'; @@ -99,7 +99,7 @@ beforeEach(() => { jest.clearAllMocks(); }); -const mockMarketplaceApi = { +const mockExtensionsApi = { getPluginPackages: jest.fn(), }; @@ -111,7 +111,7 @@ const renderWithProviders = (ui: ReactNode) => render( , ); -describe('MarketplacePluginContent', () => { +describe('ExtensionsPluginContent', () => { const packages = [ { metadata: { annotations: {}, name: 'backstage-community-plugin-3scale-backend', - namespace: 'marketplace-plugin-demo', + namespace: 'extensions-plugin-demo', title: '@backstage-community/plugin-3scale-backend', }, apiVersion: 'extensions.backstage.io/v1alpha1', @@ -145,7 +145,7 @@ describe('MarketplacePluginContent', () => { const plugin = { metadata: { annotations: {}, - namespace: 'marketplace-plugin-demo', + namespace: 'extensions-plugin-demo', name: '3scale', title: 'APIs with 3scale', description: 'Synchronize 3scale content into the Backstage catalog.', @@ -167,7 +167,7 @@ describe('MarketplacePluginContent', () => { }); it('should have the Install button enabled', async () => { const { getByText } = renderWithProviders( - , + , ); expect(getByText('Install')).toBeInTheDocument(); const installButton = getByText('Install'); @@ -187,7 +187,7 @@ describe('MarketplacePluginContent', () => { const { getByText } = renderWithProviders( - , + , , ); expect(getByText('View')).toBeInTheDocument(); @@ -201,7 +201,7 @@ describe('MarketplacePluginContent', () => { }); const { getByText } = renderWithProviders( - , + , ); expect(getByText('View')).toBeInTheDocument(); }); @@ -218,7 +218,7 @@ describe('MarketplacePluginContent', () => { }); const { getByText } = renderWithProviders( - , + , ); expect(getByText('Install')).toBeInTheDocument(); const installButton = getByText('Install'); @@ -235,12 +235,12 @@ describe('MarketplacePluginContent', () => { ...plugin, spec: { ...plugin.spec, - installStatus: MarketplacePluginInstallStatus.Installed, + installStatus: ExtensionsPluginInstallStatus.Installed, }, }; const { getByText, getByTestId } = renderWithProviders( - , + , ); expect(getByText('Actions')).toBeInTheDocument(); const actionsButton = getByTestId('plugin-actions'); @@ -264,13 +264,13 @@ describe('MarketplacePluginContent', () => { ...plugin, spec: { ...plugin.spec, - installStatus: MarketplacePluginInstallStatus.Installed, + installStatus: ExtensionsPluginInstallStatus.Installed, }, }; const { getByText } = renderWithProviders( - , + , , ); expect(getByText('View')).toBeInTheDocument(); @@ -285,7 +285,7 @@ describe('MarketplacePluginContent', () => { }; const { getByText } = renderWithProviders( - , + , ); expect(getByText('View')).toBeInTheDocument(); }); @@ -295,7 +295,7 @@ describe('MarketplacePluginContent', () => { ...plugin, spec: { ...plugin.spec, - installStatus: MarketplacePluginInstallStatus.Installed, + installStatus: ExtensionsPluginInstallStatus.Installed, }, }; @@ -305,7 +305,7 @@ describe('MarketplacePluginContent', () => { }); const { getByText, getByTestId } = renderWithProviders( - , + , ); expect(getByText('Actions')).toBeInTheDocument(); const actionsButton = getByTestId('plugin-actions'); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginContent.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.tsx similarity index 93% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginContent.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.tsx index c78b8b8b0c..5d690c0c99 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginContent.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginContent.tsx @@ -46,15 +46,15 @@ import Alert from '@mui/material/Alert'; import AlertTitle from '@mui/material/AlertTitle'; import { - isMarketplacePackage, - MarketplacePackage, - MarketplacePlugin, - MarketplacePluginInstallStatus, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + isExtensionsPackage, + ExtensionsPackage, + ExtensionsPlugin, + ExtensionsPluginInstallStatus, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { mapBackstageRoleToLabel, - mapMarketplacePluginInstallStatusToButton, + mapExtensionsPluginInstallStatusToButton, mapPackageInstallStatusToLabel, } from '../labels'; import { @@ -136,7 +136,7 @@ const PluginMetadataSection = ({ return null; }; -export const MarketplacePluginContentSkeleton = () => { +export const ExtensionsPluginContentSkeleton = () => { const { t } = useTranslation(); return ( @@ -191,7 +191,7 @@ export const MarketplacePluginContentSkeleton = () => { ); }; -const getColumns = (t: any): TableColumn[] => [ +const getColumns = (t: any): TableColumn[] => [ { title: t('table.packageName'), field: 'spec.packageName', @@ -237,7 +237,7 @@ const getColumns = (t: any): TableColumn[] => [ const PluginPackageTable = ({ packages, }: { - packages: MarketplacePackage[]; + packages: ExtensionsPackage[]; }) => { const { t } = useTranslation(); if (!packages?.length) { @@ -268,10 +268,10 @@ const PluginPackageTable = ({ ); }; -export const MarketplacePluginContent = ({ +export const ExtensionsPluginContent = ({ plugin, }: { - plugin: MarketplacePlugin | MarketplacePackage; + plugin: ExtensionsPlugin | ExtensionsPackage; }) => { const { t } = useTranslation(); const extensionsConfig = useExtensionsConfiguration(); @@ -285,16 +285,16 @@ export const MarketplacePluginContent = ({ plugin.metadata.name, ); - const isPackage = isMarketplacePackage(plugin); + const isPackage = isExtensionsPackage(plugin); useEffect(() => { if (!plugin.spec) { return; } if ( - plugin.spec?.installStatus === MarketplacePluginInstallStatus.Installed || + plugin.spec?.installStatus === ExtensionsPluginInstallStatus.Installed || plugin.spec?.installStatus === - MarketplacePluginInstallStatus.UpdateAvailable + ExtensionsPluginInstallStatus.UpdateAvailable ) { setIsPluginEnabled(true); } else { @@ -394,7 +394,7 @@ export const MarketplacePluginContent = ({ const isProductionEnvironment = nodeEnvironment?.data?.nodeEnv === 'production'; - const missingDynamicArtifact = isMarketplacePackage(plugin) + const missingDynamicArtifact = isExtensionsPackage(plugin) ? !plugin.spec?.dynamicArtifact : packages?.data?.some(p => !p.spec?.dynamicArtifact); @@ -485,10 +485,10 @@ export const MarketplacePluginContent = ({ } if ( - plugin.spec?.installStatus === MarketplacePluginInstallStatus.Installed || + plugin.spec?.installStatus === ExtensionsPluginInstallStatus.Installed || plugin.spec?.installStatus === - MarketplacePluginInstallStatus.UpdateAvailable || - plugin.spec?.installStatus === MarketplacePluginInstallStatus.Disabled + ExtensionsPluginInstallStatus.UpdateAvailable || + plugin.spec?.installStatus === ExtensionsPluginInstallStatus.Disabled ) { return ( <> @@ -523,7 +523,7 @@ export const MarketplacePluginContent = ({ - {mapMarketplacePluginInstallStatusToButton( - (plugin.spec?.installStatus as MarketplacePluginInstallStatus) ?? - MarketplacePluginInstallStatus.NotInstalled, + {mapExtensionsPluginInstallStatusToButton( + (plugin.spec?.installStatus as ExtensionsPluginInstallStatus) ?? + ExtensionsPluginInstallStatus.NotInstalled, t, )} @@ -663,7 +663,7 @@ export const MarketplacePluginContent = ({ - {!isMarketplacePackage(plugin) && ( + {!isExtensionsPackage(plugin) && ( )} @@ -673,17 +673,17 @@ export const MarketplacePluginContent = ({ ); }; -export const MarketplacePluginContentLoader = () => { +export const ExtensionsPluginContentLoader = () => { const { t } = useTranslation(); const params = useRouteRefParams(pluginRouteRef); const plugin = usePlugin(params.namespace, params.name); if (plugin.isLoading) { - return ; + return ; } if (plugin.data) { - return ; + return ; } return ( diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginDrawer.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginDrawer.tsx similarity index 92% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginDrawer.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginDrawer.tsx index 0a146f5685..c91966306a 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginDrawer.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginDrawer.tsx @@ -28,9 +28,9 @@ import { useTheme } from '@mui/material/styles'; import { pluginsRouteRef } from '../routes'; -import { MarketplacePluginContentLoader } from './MarketplacePluginContent'; +import { ExtensionsPluginContentLoader } from './ExtensionsPluginContent'; -export const MarketplacePluginDrawer = () => { +export const ExtensionsPluginDrawer = () => { const [open, setOpen] = useState(false); useLayoutEffect(() => { setOpen(true); @@ -70,7 +70,7 @@ export const MarketplacePluginDrawer = () => { article': { backgroundColor: 'transparent' } }}> - + diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginFilter.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginFilter.tsx similarity index 99% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginFilter.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginFilter.tsx index 2c16c7ab28..68f970d3c6 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginFilter.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginFilter.tsx @@ -180,7 +180,7 @@ const SupportTypeFilter = () => { ); }; -export const MarketplacePluginFilter = () => { +export const ExtensionsPluginFilter = () => { return ( diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginInstallContent.test.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginInstallContent.test.tsx similarity index 79% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginInstallContent.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginInstallContent.test.tsx index 5aa896ba45..a60c7b01eb 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginInstallContent.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginInstallContent.test.tsx @@ -21,8 +21,8 @@ import { TestApiProvider } from '@backstage/test-utils'; import { fireEvent, render, waitFor } from '@testing-library/react'; import { usePluginConfig } from '../hooks/usePluginConfig'; -import { MarketplacePluginInstallContent } from './MarketplacePluginInstallContent'; -import { marketplaceApiRef } from '../api'; +import { ExtensionsPluginInstallContent } from './ExtensionsPluginInstallContent'; +import { extensionsApiRef } from '../api'; import { alertApiRef } from '@backstage/core-plugin-api'; import { usePluginConfigurationPermissions } from '../hooks/usePluginConfigurationPermissions'; import { useInstallPlugin } from '../hooks/useInstallPlugin'; @@ -51,8 +51,9 @@ jest.mock('../hooks/usePluginConfigurationPermissions', () => ({ usePluginConfigurationPermissions: jest.fn(), })); -jest.mock('./CodeEditor', () => ({ +jest.mock('./CodeEditorContext', () => ({ useCodeEditor: jest.fn(), + CodeEditorContextProvider: ({ children }: any) => children, })); jest.mock('../hooks/useExtensionsConfiguration', () => ({ @@ -73,17 +74,21 @@ jest.mock('@backstage/core-plugin-api', () => { const mockCodeEditorSetValue = jest.fn(); -jest.mock('./CodeEditor', () => ({ - CodeEditor: ({ onLoaded }: any) => { - useEffect(() => { - onLoaded?.(); - }, [onLoaded]); - return
Code Editor Mock
; - }, +jest.mock('./CodeEditorContext', () => ({ useCodeEditor: () => ({ setValue: mockCodeEditorSetValue, getValue: jest.fn(), }), + CodeEditorContextProvider: ({ children }: any) => children, +})); + +jest.mock('./CodeEditorCard', () => ({ + CodeEditorCard: ({ onLoad }: any) => { + useEffect(() => { + onLoad?.(); + }, [onLoad]); + return
Code Editor Card Mock
; + }, })); beforeEach(() => { @@ -109,8 +114,8 @@ beforeEach(() => { }); }); -describe('MarketplacePluginInstallContent', () => { - const mockMarketplaceApi = { +describe('ExtensionsPluginInstallContent', () => { + const mockExtensionsApi = { getPluginConfigByName: jest.fn(), }; const mockAlertApiRef = { @@ -118,14 +123,14 @@ describe('MarketplacePluginInstallContent', () => { }; const configYaml = - '- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace\n disabled: false # DEBSMITA\n pluginConfig:\n dynamicPlugins:\n frontend:\n red-hat-developer-hub.backstage-plugin-marketplace:\n appIcons:\n - name: marketplace\n importName: MarketplaceIcon\n dynamicRoutes:\n - path: /extensions/catalog\n importName: DynamicMarketplacePluginRouter\n mountPoints:\n - mountPoint: internal.plugins/tab\n importName: DynamicMarketplacePluginContent\n config:\n path: marketplace\n title: Catalog\n- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic\n disabled: false\n'; + '- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-extensions\n disabled: false # DEBSMITA\n pluginConfig:\n dynamicPlugins:\n frontend:\n red-hat-developer-hub.backstage-plugin-extensions:\n appIcons:\n - name: extensions\n importName: ExtensionsIcon\n dynamicRoutes:\n - path: /extensions/catalog\n importName: DynamicExtensionsPluginRouter\n mountPoints:\n - mountPoint: internal.plugins/tab\n importName: DynamicExtensionsPluginContent\n config:\n path: extensions\n title: Catalog\n- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-extensions-backend-dynamic\n disabled: false\n'; const packages = [ { metadata: { annotations: {}, name: 'backstage-community-plugin-3scale-backend', - namespace: 'marketplace-plugin-demo', + namespace: 'extensions-plugin-demo', title: '@backstage-community/plugin-3scale-backend', }, apiVersion: 'extensions.backstage.io/v1alpha1', @@ -141,7 +146,7 @@ describe('MarketplacePluginInstallContent', () => { const plugin = { metadata: { annotations: {}, - namespace: 'marketplace-plugin-demo', + namespace: 'extensions-plugin-demo', name: '3scale', title: 'APIs with 3scale', description: 'Synchronize 3scale content into the Backstage catalog.', @@ -163,15 +168,12 @@ describe('MarketplacePluginInstallContent', () => { const { getByTestId } = render( - + , ); @@ -198,15 +200,12 @@ describe('MarketplacePluginInstallContent', () => { const { getByTestId } = render( - + , ); @@ -214,7 +213,7 @@ describe('MarketplacePluginInstallContent', () => { expect(mockCodeEditorSetValue).toHaveBeenCalled(); }); expect(mockCodeEditorSetValue.mock.calls[0][0]).toContain( - 'package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace', + 'package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-extensions', ); expect(getByTestId('install')).toBeInTheDocument(); }); @@ -237,15 +236,12 @@ describe('MarketplacePluginInstallContent', () => { const { getByTestId } = render( - + , ); @@ -267,15 +263,12 @@ describe('MarketplacePluginInstallContent', () => { const { getByTestId } = render( - + , ); @@ -297,12 +290,12 @@ describe('MarketplacePluginInstallContent', () => { const { getByTestId } = render( - { const { getByTestId, getByText } = render( - + , ); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginInstallContent.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginInstallContent.tsx similarity index 95% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginInstallContent.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginInstallContent.tsx index 43bbb1a90d..ea81863fc7 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginInstallContent.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginInstallContent.tsx @@ -29,11 +29,11 @@ import { useNavigate } from 'react-router-dom'; import { ExtensionsPackageAppConfigExamples, - MarketplacePackage, - MarketplacePackageSpec, - MarketplacePlugin, - MarketplacePluginInstallStatus, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsPackage, + ExtensionsPackageSpec, + ExtensionsPlugin, + ExtensionsPluginInstallStatus, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import Box from '@mui/material/Box'; import Grid from '@mui/material/Grid'; @@ -64,7 +64,7 @@ import { } from '../utils'; import { Permission } from '../types'; -import { CodeEditorContextProvider, useCodeEditor } from './CodeEditor'; +import { CodeEditorContextProvider, useCodeEditor } from './CodeEditorContext'; import { InstallationType, useInstallationContext, @@ -75,13 +75,13 @@ import { usePluginConfig } from '../hooks/usePluginConfig'; import { useInstallPlugin } from '../hooks/useInstallPlugin'; import { useNodeEnvironment } from '../hooks/useNodeEnvironment'; import { useExtensionsConfiguration } from '../hooks/useExtensionsConfiguration'; -import { mapMarketplacePluginInstallStatusToInstallPageButton } from '../labels'; +import { mapExtensionsPluginInstallStatusToInstallPageButton } from '../labels'; import { useTranslation } from '../hooks/useTranslation'; import { CodeEditorCard } from './CodeEditorCard'; import { TabPanel } from './TabPanel'; import { InstallationWarning } from './InstallationWarning'; -const generateCheckboxList = (packages: MarketplacePackage[], t: any) => { +const generateCheckboxList = (packages: ExtensionsPackage[], t: any) => { const hasFrontend = packages.some( pkg => pkg.spec?.backstage?.role === 'frontend-plugin', ); @@ -98,7 +98,7 @@ const generateCheckboxList = (packages: MarketplacePackage[], t: any) => { return checkboxes.filter(cb => cb.show); }; -const CheckboxList = ({ packages }: { packages: MarketplacePackage[] }) => { +const CheckboxList = ({ packages }: { packages: ExtensionsPackage[] }) => { const { t } = useTranslation(); const checkboxes = generateCheckboxList(packages, t); const [checked, setChecked] = useState<{ [key: string]: boolean }>({}); @@ -132,12 +132,12 @@ interface TabItem { others?: { [key: string]: any }; } -export const MarketplacePluginInstallContent = ({ +export const ExtensionsPluginInstallContent = ({ plugin, packages, }: { - plugin: MarketplacePlugin; - packages: MarketplacePackage[]; + plugin: ExtensionsPlugin; + packages: ExtensionsPackage[]; }) => { const { t } = useTranslation(); const { mutateAsync: installPlugin } = useInstallPlugin(); @@ -196,7 +196,7 @@ export const MarketplacePluginInstallContent = ({ } else { const dynamicPluginYaml = { plugins: (packages ?? []).map(pkg => { - const pkgEntry: MarketplacePackageSpec = { + const pkgEntry: ExtensionsPackageSpec = { package: pkg.spec?.dynamicArtifact ?? './dynamic-plugins/dist/....', disabled: false, }; @@ -528,9 +528,9 @@ export const MarketplacePluginInstallContent = ({ ) } > - {mapMarketplacePluginInstallStatusToInstallPageButton( + {mapExtensionsPluginInstallStatusToInstallPageButton( plugin.spec?.installStatus ?? - MarketplacePluginInstallStatus.NotInstalled, + ExtensionsPluginInstallStatus.NotInstalled, t, )} @@ -562,7 +562,7 @@ export const MarketplacePluginInstallContent = ({ ); }; -export const MarketplacePluginInstallContentLoader = () => { +export const ExtensionsPluginInstallContentLoader = () => { const { t } = useTranslation(); const params = useRouteRefParams(pluginInstallRouteRef); @@ -574,7 +574,7 @@ export const MarketplacePluginInstallContentLoader = () => { } else if (plugin.data && packages.data) { return ( - diff --git a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginsTable.tsx b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginsTable.tsx similarity index 88% rename from workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginsTable.tsx rename to workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginsTable.tsx index 3f06bc5479..265c833f16 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/MarketplacePluginsTable.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/ExtensionsPluginsTable.tsx @@ -16,7 +16,7 @@ import { ErrorPanel, Table, TableColumn } from '@backstage/core-components'; -import { MarketplacePlugin } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPlugin } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { useQueryTableOptions } from '../hooks/useQueryTableOptions'; import { usePlugins } from '../hooks/usePlugins'; @@ -25,10 +25,10 @@ import { PluginIcon } from './PluginIcon'; import { PluginLink } from './PluginLink'; import { useTranslation } from '../hooks/useTranslation'; -export const MarketplacePluginsTable = () => { +export const ExtensionsPluginsTable = () => { const { t } = useTranslation(); - const columns: TableColumn[] = [ + const columns: TableColumn[] = [ { sorting: false, width: '40px', @@ -47,7 +47,7 @@ export const MarketplacePluginsTable = () => { }, ]; - const queryTableOptions = useQueryTableOptions(columns); + const queryTableOptions = useQueryTableOptions(columns); const plugins = usePlugins(queryTableOptions.query); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/InstallationContext.tsx b/workspaces/extensions/plugins/extensions/src/components/InstallationContext.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/components/InstallationContext.tsx rename to workspaces/extensions/plugins/extensions/src/components/InstallationContext.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/components/InstallationWarning.tsx b/workspaces/extensions/plugins/extensions/src/components/InstallationWarning.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/components/InstallationWarning.tsx rename to workspaces/extensions/plugins/extensions/src/components/InstallationWarning.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/InstalledPackagesTable.test.tsx b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.test.tsx similarity index 97% rename from workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/InstalledPackagesTable.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.test.tsx index 56582ad6f6..0d16fcf085 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/InstalledPackagesTable.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.test.tsx @@ -22,7 +22,7 @@ import { errorApiRef } from '@backstage/core-plugin-api'; import { translationApiRef } from '@backstage/core-plugin-api/alpha'; import { queryClient } from '../../queryclient'; -import { marketplaceApiRef } from '../../api'; +import { extensionsApiRef } from '../../api'; import { dynamicPluginsInfoApiRef } from '../../api'; import { InstalledPackagesTable } from './InstalledPackagesTable'; import { useNodeEnvironment } from '../../hooks/useNodeEnvironment'; @@ -101,7 +101,7 @@ describe('InstalledPackagesTable', () => { { listLoadedPlugins: jest.fn().mockResolvedValue(dynamicPlugins) }, ], [ - marketplaceApiRef, + extensionsApiRef, { getPackages: jest.fn().mockResolvedValue(entities) }, ], ] as const; @@ -147,7 +147,7 @@ describe('InstalledPackagesTable', () => { { listLoadedPlugins: jest.fn().mockResolvedValue(dynamicPlugins) }, ], [ - marketplaceApiRef, + extensionsApiRef, { getPackages: jest.fn().mockResolvedValue(entities) }, ], ] as const; @@ -201,7 +201,7 @@ describe('InstalledPackagesTable', () => { { listLoadedPlugins: jest.fn().mockResolvedValue(dynamicPlugins) }, ], [ - marketplaceApiRef, + extensionsApiRef, { getPackages: jest.fn().mockResolvedValue(entities) }, ], ] as const; @@ -239,7 +239,7 @@ describe('InstalledPackagesTable', () => { { listLoadedPlugins: jest.fn().mockResolvedValue(dynamicPlugins) }, ], [ - marketplaceApiRef, + extensionsApiRef, { getPackages: jest.fn().mockResolvedValue(entities) }, ], ] as const; diff --git a/workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/InstalledPackagesTable.tsx b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.tsx similarity index 96% rename from workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/InstalledPackagesTable.tsx rename to workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.tsx index ffcc87f557..9c24e31518 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/InstalledPackagesTable.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/InstalledPackagesTable.tsx @@ -28,11 +28,11 @@ import { useQuery } from '@tanstack/react-query'; import Box from '@mui/material/Box'; import { - MarketplacePackage, - MarketplacePackageInstallStatus, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsPackage, + ExtensionsPackageInstallStatus, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { useMarketplaceApi } from '../../hooks/useMarketplaceApi'; +import { useExtensionsApi } from '../../hooks/useExtensionsApi'; import { getReadableName } from '../../utils/pluginProcessing'; import { useQueryFullTextSearch } from '../../hooks/useQueryFullTextSearch'; import { SearchTextField } from '../../shared-components/SearchTextField'; @@ -66,7 +66,7 @@ export const InstalledPackagesTable = () => { useState(false); const [filteredCount, setFilteredCount] = useState(0); const dynamicPluginInfo = useApi(dynamicPluginsInfoApiRef); - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); const fullTextSearch = useQueryFullTextSearch(); const showUninstall = false; @@ -108,8 +108,8 @@ export const InstalledPackagesTable = () => { }); const packagesQuery = useQuery({ - queryKey: ['marketplace', 'packages'], - queryFn: () => marketplaceApi.getPackages({}), + queryKey: ['extensions', 'packages'], + queryFn: () => extensionsApi.getPackages({}), staleTime: 5 * 60 * 1000, refetchOnWindowFocus: false, }); @@ -210,7 +210,7 @@ export const InstalledPackagesTable = () => { const packagesResponse = packagesQuery.data ?? { items: [] as any[] }; const entitiesByName = new Map( - (packagesResponse.items ?? []).map((entity: MarketplacePackage) => [ + (packagesResponse.items ?? []).map((entity: ExtensionsPackage) => [ (entity.metadata?.name ?? '').toLowerCase(), entity, ]), @@ -229,7 +229,7 @@ export const InstalledPackagesTable = () => { ? (entity.metadata?.title as string) || (entity.metadata?.name as string) : getReadableName(p.name); - const cleanedName = rawName.replace(/\s+(frontend|backend)$/i, ''); + const cleanedName = rawName.replace(/\s+(frontend|backend)$/i, ''); // NOSONAR return { displayName: cleanedName, // Show the npm package name directly from dynamic-plugins-info record @@ -239,7 +239,7 @@ export const InstalledPackagesTable = () => { // set installStatus to Installed (matching the Catalog tab behavior) installStatus: entity?.spec?.installStatus ?? - MarketplacePackageInstallStatus.Installed, + ExtensionsPackageInstallStatus.Installed, // Humanized role from dynamic-plugins-info role: (p as any).role ? (() => { diff --git a/workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/RowActions.tsx b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/RowActions.tsx similarity index 97% rename from workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/RowActions.tsx rename to workspaces/extensions/plugins/extensions/src/components/InstalledPackages/RowActions.tsx index c0d9fcbef4..580273a902 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/InstalledPackages/RowActions.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/InstalledPackages/RowActions.tsx @@ -27,7 +27,7 @@ import Tooltip from '@mui/material/Tooltip'; import Switch from '@mui/material/Switch'; import Box from '@mui/material/Box'; -import { MarketplacePackageInstallStatus } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPackageInstallStatus } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { useTranslation } from '../../hooks/useTranslation'; import { packageInstallRouteRef, packageRouteRef } from '../../routes'; @@ -41,7 +41,7 @@ export type InstalledPackageRow = { displayName: string; packageName: string; parentPlugin?: string; - installStatus?: MarketplacePackageInstallStatus; + installStatus?: ExtensionsPackageInstallStatus; role?: string; version?: string; hasEntity: boolean; @@ -248,8 +248,8 @@ export const TogglePackage = ({ pkg.parentPlugin ?? '', ); const [isPackageEnabled, setIsPackageEnabled] = useState( - pkg.installStatus === MarketplacePackageInstallStatus.Installed || - pkg.installStatus === MarketplacePackageInstallStatus.UpdateAvailable, + pkg.installStatus === ExtensionsPackageInstallStatus.Installed || + pkg.installStatus === ExtensionsPackageInstallStatus.UpdateAvailable, ); const disabledIcon = ( diff --git a/workspaces/marketplace/plugins/marketplace/src/components/InstalledPluginsDialog.tsx b/workspaces/extensions/plugins/extensions/src/components/InstalledPluginsDialog.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/components/InstalledPluginsDialog.tsx rename to workspaces/extensions/plugins/extensions/src/components/InstalledPluginsDialog.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/components/Links.tsx b/workspaces/extensions/plugins/extensions/src/components/Links.tsx similarity index 88% rename from workspaces/marketplace/plugins/marketplace/src/components/Links.tsx rename to workspaces/extensions/plugins/extensions/src/components/Links.tsx index fdc6d3e6dd..30ed3d279e 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/Links.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/Links.tsx @@ -22,15 +22,15 @@ import { useTranslation } from '../hooks/useTranslation'; import OpenInNewIcon from '@mui/icons-material/OpenInNew'; import { - MarketplaceCollection, - MarketplacePackage, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsCollection, + ExtensionsPackage, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; export const Links = ({ entity, }: { - entity: MarketplaceCollection | MarketplacePlugin | MarketplacePackage; + entity: ExtensionsCollection | ExtensionsPlugin | ExtensionsPackage; }) => { const { t } = useTranslation(); const links = entity.metadata.links; diff --git a/workspaces/marketplace/plugins/marketplace/src/components/Markdown.tsx b/workspaces/extensions/plugins/extensions/src/components/Markdown.tsx similarity index 98% rename from workspaces/marketplace/plugins/marketplace/src/components/Markdown.tsx rename to workspaces/extensions/plugins/extensions/src/components/Markdown.tsx index c2fc9aa038..3f7b490d34 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/Markdown.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/Markdown.tsx @@ -54,7 +54,7 @@ export const Markdown = (props: MarkdownProps) => { content = `## ${props.title}\n\n${content}`; } - // TODO load images from marketplace assets endpoint ??? + // TODO load images from extensions assets endpoint ??? const transformImageUri = (href: string): string => { return href; }; diff --git a/workspaces/marketplace/plugins/marketplace/src/components/PackageLink.tsx b/workspaces/extensions/plugins/extensions/src/components/PackageLink.tsx similarity index 85% rename from workspaces/marketplace/plugins/marketplace/src/components/PackageLink.tsx rename to workspaces/extensions/plugins/extensions/src/components/PackageLink.tsx index a6deb39933..3c0a019cdd 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/PackageLink.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/PackageLink.tsx @@ -17,11 +17,11 @@ import { useRouteRef } from '@backstage/core-plugin-api'; import { Link } from '@backstage/core-components'; -import { MarketplacePackage } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPackage } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { packageRouteRef } from '../routes'; -export const PackageLink = ({ pkg }: { pkg: MarketplacePackage }) => { +export const PackageLink = ({ pkg }: { pkg: ExtensionsPackage }) => { const getPluginPath = useRouteRef(packageRouteRef); const link = getPluginPath({ namespace: pkg.metadata.namespace!, diff --git a/workspaces/marketplace/plugins/marketplace/src/components/PluginCard.test.tsx b/workspaces/extensions/plugins/extensions/src/components/PluginCard.test.tsx similarity index 91% rename from workspaces/marketplace/plugins/marketplace/src/components/PluginCard.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/PluginCard.test.tsx index 1677e96085..8dd12aacd1 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/PluginCard.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/PluginCard.test.tsx @@ -19,9 +19,9 @@ import { render, screen } from '@testing-library/react'; import { TestApiProvider } from '@backstage/test-utils'; import { - MarketplacePlugin, - MarketplacePluginInstallStatus, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsPlugin, + ExtensionsPluginInstallStatus, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { PluginCard } from './PluginCard'; import { rootRouteRef, pluginRouteRef } from '../routes'; @@ -31,16 +31,16 @@ jest.mock('@backstage/core-plugin-api', () => ({ ...jest.requireActual('@backstage/core-plugin-api'), useRouteRef: jest.fn().mockImplementation(ref => { if (ref === rootRouteRef) { - return () => '/marketplace'; + return () => '/extensions'; } if (ref === pluginRouteRef) { - return () => '/marketplace/plugin'; + return () => '/extensions/plugin'; } return () => '/'; }), })); -const mockPlugin: MarketplacePlugin = { +const mockPlugin: ExtensionsPlugin = { apiVersion: 'backstage.io/v1alpha1', kind: 'Plugin', metadata: { @@ -55,7 +55,7 @@ const mockPlugin: MarketplacePlugin = { }, }; -const renderPluginCard = (plugin: MarketplacePlugin) => { +const renderPluginCard = (plugin: ExtensionsPlugin) => { return render( @@ -72,7 +72,7 @@ describe('PluginCard', () => { ...mockPlugin, spec: { ...mockPlugin.spec, - installStatus: MarketplacePluginInstallStatus.Installed, + installStatus: ExtensionsPluginInstallStatus.Installed, }, }; @@ -87,7 +87,7 @@ describe('PluginCard', () => { ...mockPlugin, spec: { ...mockPlugin.spec, - installStatus: MarketplacePluginInstallStatus.UpdateAvailable, + installStatus: ExtensionsPluginInstallStatus.UpdateAvailable, }, }; @@ -102,7 +102,7 @@ describe('PluginCard', () => { ...mockPlugin, spec: { ...mockPlugin.spec, - installStatus: MarketplacePluginInstallStatus.Disabled, + installStatus: ExtensionsPluginInstallStatus.Disabled, }, }; @@ -117,7 +117,7 @@ describe('PluginCard', () => { ...mockPlugin, spec: { ...mockPlugin.spec, - installStatus: MarketplacePluginInstallStatus.NotInstalled, + installStatus: ExtensionsPluginInstallStatus.NotInstalled, }, }; diff --git a/workspaces/marketplace/plugins/marketplace/src/components/PluginCard.tsx b/workspaces/extensions/plugins/extensions/src/components/PluginCard.tsx similarity index 93% rename from workspaces/marketplace/plugins/marketplace/src/components/PluginCard.tsx rename to workspaces/extensions/plugins/extensions/src/components/PluginCard.tsx index 5dbd51a3f5..57b546f931 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/PluginCard.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/PluginCard.tsx @@ -29,9 +29,9 @@ import Typography from '@mui/material/Typography'; import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; import { - MarketplacePlugin, - MarketplacePluginInstallStatus, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsPlugin, + ExtensionsPluginInstallStatus, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { rootRouteRef, pluginRouteRef } from '../routes'; import { BadgeTriange } from './Badges'; @@ -45,19 +45,17 @@ export interface PluginCardSkeletonProps { export const PluginCardGrid = ItemCardGrid; -const renderInstallStatus = ( - installStatus?: MarketplacePluginInstallStatus, -) => { +const renderInstallStatus = (installStatus?: ExtensionsPluginInstallStatus) => { if ( !installStatus || - installStatus === MarketplacePluginInstallStatus.NotInstalled + installStatus === ExtensionsPluginInstallStatus.NotInstalled ) { return null; } switch (installStatus) { - case MarketplacePluginInstallStatus.Installed: - case MarketplacePluginInstallStatus.UpdateAvailable: + case ExtensionsPluginInstallStatus.Installed: + case ExtensionsPluginInstallStatus.UpdateAvailable: return ( @@ -65,7 +63,7 @@ const renderInstallStatus = ( ); - case MarketplacePluginInstallStatus.Disabled: + case ExtensionsPluginInstallStatus.Disabled: return ( ( // orange: #EC7A08 // TODO: add link around card -export const PluginCard = ({ plugin }: { plugin: MarketplacePlugin }) => { +export const PluginCard = ({ plugin }: { plugin: ExtensionsPlugin }) => { const { t } = useTranslation(); const navigate = useNavigate(); const [searchParams] = useSearchParams(); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/PluginIcon.test.tsx b/workspaces/extensions/plugins/extensions/src/components/PluginIcon.test.tsx similarity index 92% rename from workspaces/marketplace/plugins/marketplace/src/components/PluginIcon.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/PluginIcon.test.tsx index b0bcc226bf..75d097a9cb 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/PluginIcon.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/PluginIcon.test.tsx @@ -16,11 +16,11 @@ import { render } from '@testing-library/react'; -import { MarketplacePlugin } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPlugin } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { PluginIcon } from './PluginIcon'; -const testPlugin: MarketplacePlugin = { +const testPlugin: ExtensionsPlugin = { apiVersion: 'extensions.backstage.io/v1alpha1', kind: 'Plugin', metadata: { diff --git a/workspaces/marketplace/plugins/marketplace/src/components/PluginIcon.tsx b/workspaces/extensions/plugins/extensions/src/components/PluginIcon.tsx similarity index 91% rename from workspaces/marketplace/plugins/marketplace/src/components/PluginIcon.tsx rename to workspaces/extensions/plugins/extensions/src/components/PluginIcon.tsx index c39e6dbddc..b8ced5793b 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/PluginIcon.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/PluginIcon.tsx @@ -17,13 +17,13 @@ import CardMedia from '@mui/material/CardMedia'; import NoIconIcon from '@mui/icons-material/PowerOutlined'; -import { MarketplacePlugin } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPlugin } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; export const PluginIcon = ({ plugin, size, }: { - plugin: MarketplacePlugin; + plugin: ExtensionsPlugin; size: number; }) => { const icon = plugin?.spec?.icon; diff --git a/workspaces/marketplace/plugins/marketplace/src/components/PluginLink.test.tsx b/workspaces/extensions/plugins/extensions/src/components/PluginLink.test.tsx similarity index 81% rename from workspaces/marketplace/plugins/marketplace/src/components/PluginLink.test.tsx rename to workspaces/extensions/plugins/extensions/src/components/PluginLink.test.tsx index 2b0f7250f7..5dde58771b 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/PluginLink.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/PluginLink.test.tsx @@ -17,15 +17,15 @@ import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { - MarketplaceApi, - MarketplacePlugin, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsApi, + ExtensionsPlugin, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { marketplaceApiRef } from '../api'; +import { extensionsApiRef } from '../api'; import { rootRouteRef } from '../routes'; import { PluginLink } from './PluginLink'; -const testPlugin: MarketplacePlugin = { +const testPlugin: ExtensionsPlugin = { apiVersion: 'extensions.backstage.io/v1alpha1', kind: 'Plugin', metadata: { @@ -40,7 +40,7 @@ const testPlugin: MarketplacePlugin = { }, }; -const apis = [[marketplaceApiRef, {} as MarketplaceApi]] as const; +const apis = [[extensionsApiRef, {} as ExtensionsApi]] as const; describe('PluginLink', () => { it('should render a link', async () => { @@ -50,14 +50,14 @@ describe('PluginLink', () => { , { mountedRoutes: { - '/marketplace': rootRouteRef, + '/extensions': rootRouteRef, }, }, ); expect(getByRole('link')).toBeInTheDocument(); expect(getByRole('link')).toHaveAttribute( 'href', - '/marketplace/plugins/default/test-plugin', + '/extensions/plugins/default/test-plugin', ); expect(getByRole('link')).toHaveTextContent('APIs with Test plugin'); }); diff --git a/workspaces/marketplace/plugins/marketplace/src/components/PluginLink.tsx b/workspaces/extensions/plugins/extensions/src/components/PluginLink.tsx similarity index 85% rename from workspaces/marketplace/plugins/marketplace/src/components/PluginLink.tsx rename to workspaces/extensions/plugins/extensions/src/components/PluginLink.tsx index 5a3eeaf9b9..4339862003 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/PluginLink.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/PluginLink.tsx @@ -17,11 +17,11 @@ import { useRouteRef } from '@backstage/core-plugin-api'; import { Link } from '@backstage/core-components'; -import { MarketplacePlugin } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPlugin } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { pluginRouteRef } from '../routes'; -export const PluginLink = ({ plugin }: { plugin: MarketplacePlugin }) => { +export const PluginLink = ({ plugin }: { plugin: ExtensionsPlugin }) => { const getPluginPath = useRouteRef(pluginRouteRef); const link = getPluginPath({ namespace: plugin.metadata.namespace!, diff --git a/workspaces/marketplace/plugins/marketplace/src/components/ReactQueryProvider.tsx b/workspaces/extensions/plugins/extensions/src/components/ReactQueryProvider.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/components/ReactQueryProvider.tsx rename to workspaces/extensions/plugins/extensions/src/components/ReactQueryProvider.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/components/SharedAlerts.tsx b/workspaces/extensions/plugins/extensions/src/components/SharedAlerts.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/components/SharedAlerts.tsx rename to workspaces/extensions/plugins/extensions/src/components/SharedAlerts.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/components/TabPanel.tsx b/workspaces/extensions/plugins/extensions/src/components/TabPanel.tsx similarity index 97% rename from workspaces/marketplace/plugins/marketplace/src/components/TabPanel.tsx rename to workspaces/extensions/plugins/extensions/src/components/TabPanel.tsx index 51351d590f..6723bc3f0b 100644 --- a/workspaces/marketplace/plugins/marketplace/src/components/TabPanel.tsx +++ b/workspaces/extensions/plugins/extensions/src/components/TabPanel.tsx @@ -14,14 +14,14 @@ * limitations under the License. */ -import { ExtensionsPackageAppConfigExamples } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPackageAppConfigExamples } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { JsonObject } from '@backstage/types'; import { alertApiRef, useApi } from '@backstage/core-plugin-api'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; -import { useCodeEditor } from './CodeEditor'; +import { useCodeEditor } from './CodeEditorContext'; import { Markdown } from './Markdown'; import { applyContent, getExampleAsMarkdown } from '../utils'; import { useTranslation } from '../hooks/useTranslation'; diff --git a/workspaces/marketplace/plugins/marketplace/src/consts.ts b/workspaces/extensions/plugins/extensions/src/consts.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/consts.ts rename to workspaces/extensions/plugins/extensions/src/consts.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useCollection.ts b/workspaces/extensions/plugins/extensions/src/hooks/useCollection.ts similarity index 75% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useCollection.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useCollection.ts index d68eadbe33..b9dfa8813d 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useCollection.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useCollection.ts @@ -16,12 +16,12 @@ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const useCollection = (namespace: string, name: string) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getCollectionByName', namespace, name], - queryFn: () => marketplaceApi.getCollectionByName(namespace, name), + queryKey: ['extensionsApi', 'getCollectionByName', namespace, name], + queryFn: () => extensionsApi.getCollectionByName(namespace, name), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useCollectionPlugins.ts b/workspaces/extensions/plugins/extensions/src/hooks/useCollectionPlugins.ts similarity index 75% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useCollectionPlugins.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useCollectionPlugins.ts index e58515a5c8..da67661841 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useCollectionPlugins.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useCollectionPlugins.ts @@ -16,12 +16,12 @@ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const useCollectionPlugins = (namespace: string, name: string) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getCollectionPlugins', namespace, name], - queryFn: () => marketplaceApi.getCollectionPlugins(namespace, name), + queryKey: ['extensionsApi', 'getCollectionPlugins', namespace, name], + queryFn: () => extensionsApi.getCollectionPlugins(namespace, name), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useCollections.ts b/workspaces/extensions/plugins/extensions/src/hooks/useCollections.ts similarity index 76% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useCollections.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useCollections.ts index f3b70e547c..e6e56e60fd 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useCollections.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useCollections.ts @@ -16,15 +16,15 @@ import { useQuery } from '@tanstack/react-query'; -import { GetEntitiesRequest } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { GetEntitiesRequest } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const useCollections = (request: GetEntitiesRequest) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getCollections', request], - queryFn: () => marketplaceApi.getCollections(request), + queryKey: ['extensionsApi', 'getCollections', request], + queryFn: () => extensionsApi.getCollections(request), refetchOnWindowFocus: false, }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useEnablePlugin.ts b/workspaces/extensions/plugins/extensions/src/hooks/useEnablePlugin.ts similarity index 78% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useEnablePlugin.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useEnablePlugin.ts index fd2ff45aa3..8c43d6d2b0 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useEnablePlugin.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useEnablePlugin.ts @@ -15,10 +15,10 @@ */ import { useMutation } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const useEnablePlugin = (isPackage: boolean) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useMutation({ mutationFn: async ({ @@ -31,7 +31,7 @@ export const useEnablePlugin = (isPackage: boolean) => { disabled: boolean; }) => isPackage - ? await marketplaceApi.disablePackage?.(namespace, name, disabled) - : await marketplaceApi.disablePlugin?.(namespace, name, disabled), + ? await extensionsApi.disablePackage?.(namespace, name, disabled) + : await extensionsApi.disablePlugin?.(namespace, name, disabled), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useMarketplaceApi.ts b/workspaces/extensions/plugins/extensions/src/hooks/useExtensionsApi.ts similarity index 84% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useMarketplaceApi.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useExtensionsApi.ts index 72fa52ac3b..a0c6358a04 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useMarketplaceApi.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useExtensionsApi.ts @@ -16,8 +16,8 @@ import { useApi } from '@backstage/core-plugin-api'; -import { marketplaceApiRef } from '../api'; +import { extensionsApiRef } from '../api'; -export const useMarketplaceApi = () => { - return useApi(marketplaceApiRef); +export const useExtensionsApi = () => { + return useApi(extensionsApiRef); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useExtensionsConfiguration.ts b/workspaces/extensions/plugins/extensions/src/hooks/useExtensionsConfiguration.ts similarity index 75% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useExtensionsConfiguration.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useExtensionsConfiguration.ts index 858ed0b471..d53472fc3e 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useExtensionsConfiguration.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useExtensionsConfiguration.ts @@ -15,13 +15,13 @@ */ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const useExtensionsConfiguration = () => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getExtensionsConfiguration'], - queryFn: () => marketplaceApi.getExtensionsConfiguration?.(), + queryKey: ['extensionsApi', 'getExtensionsConfiguration'], + queryFn: () => extensionsApi.getExtensionsConfiguration?.(), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredPluginFacet.ts b/workspaces/extensions/plugins/extensions/src/hooks/useFilteredPluginFacet.ts similarity index 92% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredPluginFacet.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useFilteredPluginFacet.ts index 0db0267f26..c256037153 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredPluginFacet.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useFilteredPluginFacet.ts @@ -17,9 +17,9 @@ import { useQuery } from '@tanstack/react-query'; import { useSearchParams } from 'react-router-dom'; -import { MarketplaceAnnotation } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsAnnotation } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; /** * Hook to get plugin facets filtered by current active filters @@ -31,23 +31,23 @@ export const useFilteredPluginFacet = ( excludeFilterType?: string, ) => { const [searchParams] = useSearchParams(); - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); const filters = searchParams.getAll('filter'); const fullTextSearch = searchParams.get('q'); // Get all plugins and apply client-side filtering for accurate facet calculation const pluginsQuery = useQuery({ - queryKey: ['marketplaceApi', 'getPlugins'], + queryKey: ['extensionsApi', 'getPlugins'], queryFn: () => - marketplaceApi.getPlugins({ + extensionsApi.getPlugins({ orderFields: [{ field: 'metadata.title', order: 'asc' }], }), }); return useQuery({ queryKey: [ - 'marketplaceApi', + 'extensionsApi', 'getFilteredPluginFacet', facet, filters, @@ -124,7 +124,7 @@ export const useFilteredPluginFacet = ( } // Check certification annotation as fallback const certifiedBy = - plugin.metadata?.annotations?.[MarketplaceAnnotation.CERTIFIED_BY]; + plugin.metadata?.annotations?.[ExtensionsAnnotation.CERTIFIED_BY]; return certifiedBy && authors.includes(certifiedBy); }); } @@ -140,14 +140,14 @@ export const useFilteredPluginFacet = ( filteredPlugins = filteredPlugins.filter(plugin => { if ( showCertified && - plugin.metadata?.annotations?.[MarketplaceAnnotation.CERTIFIED_BY] + plugin.metadata?.annotations?.[ExtensionsAnnotation.CERTIFIED_BY] ) { return true; } if ( showCustom && plugin.metadata?.annotations?.[ - MarketplaceAnnotation.PRE_INSTALLED + ExtensionsAnnotation.PRE_INSTALLED ] !== 'true' ) { return true; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredPlugins.ts b/workspaces/extensions/plugins/extensions/src/hooks/useFilteredPlugins.ts similarity index 88% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredPlugins.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useFilteredPlugins.ts index 9d216549ee..03a143b509 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredPlugins.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useFilteredPlugins.ts @@ -20,10 +20,10 @@ import { useQuery } from '@tanstack/react-query'; import { GetEntitiesRequest, - MarketplaceAnnotation, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsAnnotation, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; const filteredPluginsRequest: GetEntitiesRequest = { orderFields: [ @@ -43,11 +43,11 @@ export const useFilteredPlugins = () => { const fullTextSearch = searchParams.get('q'); const filters = searchParams.getAll('filter'); - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ refetchOnWindowFocus: false, - queryKey: ['marketplaceApi', 'getPlugins', filteredPluginsRequest], - queryFn: () => marketplaceApi.getPlugins(filteredPluginsRequest), + queryKey: ['extensionsApi', 'getPlugins', filteredPluginsRequest], + queryFn: () => extensionsApi.getPlugins(filteredPluginsRequest), select: data => { let plugins = data.items; @@ -94,14 +94,14 @@ export const useFilteredPlugins = () => { plugins = plugins.filter(plugin => { if ( showCertified && - plugin.metadata?.annotations?.[MarketplaceAnnotation.CERTIFIED_BY] + plugin.metadata?.annotations?.[ExtensionsAnnotation.CERTIFIED_BY] ) { return true; } if ( showCustom && plugin.metadata?.annotations?.[ - MarketplaceAnnotation.PRE_INSTALLED + ExtensionsAnnotation.PRE_INSTALLED ] !== 'true' ) { return true; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredSupportTypes.ts b/workspaces/extensions/plugins/extensions/src/hooks/useFilteredSupportTypes.ts similarity index 88% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredSupportTypes.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useFilteredSupportTypes.ts index 99d4c1a5b8..2c6929ac34 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useFilteredSupportTypes.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useFilteredSupportTypes.ts @@ -20,11 +20,11 @@ import { useSearchParams } from 'react-router-dom'; import { useQuery } from '@tanstack/react-query'; import { - MarketplaceAnnotation, - MarketplaceSupportLevel, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; + ExtensionsAnnotation, + ExtensionsSupportLevel, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; import { CustomSelectItem } from '../shared-components/CustomSelectFilter'; import { colors } from '../consts'; import { useTranslation } from './useTranslation'; @@ -36,16 +36,16 @@ import { useTranslation } from './useTranslation'; export const useFilteredSupportTypes = () => { const { t } = useTranslation(); const [searchParams] = useSearchParams(); - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); const filters = searchParams.getAll('filter'); const fullTextSearch = searchParams.get('q'); // Get all plugins (not pre-filtered) const allPluginsQuery = useQuery({ - queryKey: ['marketplaceApi', 'getPlugins'], + queryKey: ['extensionsApi', 'getPlugins'], queryFn: () => - marketplaceApi.getPlugins({ + extensionsApi.getPlugins({ orderFields: [{ field: 'metadata.title', order: 'asc' }], }), refetchOnWindowFocus: false, @@ -118,15 +118,14 @@ export const useFilteredSupportTypes = () => { // Count certified plugins const certifiedPlugins = availablePlugins.filter( plugin => - plugin.metadata?.annotations?.[MarketplaceAnnotation.CERTIFIED_BY], + plugin.metadata?.annotations?.[ExtensionsAnnotation.CERTIFIED_BY], ); if (certifiedPlugins.length > 0) { const certifiedProviders = Array.from( new Set( certifiedPlugins .map( - p => - p.metadata?.annotations?.[MarketplaceAnnotation.CERTIFIED_BY], + p => p.metadata?.annotations?.[ExtensionsAnnotation.CERTIFIED_BY], ) .filter(Boolean), ), @@ -148,7 +147,7 @@ export const useFilteredSupportTypes = () => { // Count custom plugins const customPlugins = availablePlugins.filter( plugin => - plugin.metadata?.annotations?.[MarketplaceAnnotation.PRE_INSTALLED] !== + plugin.metadata?.annotations?.[ExtensionsAnnotation.PRE_INSTALLED] !== 'true', ); if (customPlugins.length > 0) { @@ -174,7 +173,7 @@ export const useFilteredSupportTypes = () => { }); Object.entries(supportLevelCounts).forEach(([level, count]) => { - if (level === MarketplaceSupportLevel.GENERALLY_AVAILABLE) { + if (level === ExtensionsSupportLevel.GENERALLY_AVAILABLE) { allSupportTypeItems.push({ label: t('badges.generallyAvailable'), value: `support-level=${level}`, @@ -184,7 +183,7 @@ export const useFilteredSupportTypes = () => { helperText: t('badges.productionReady'), displayOrder: 1, }); - } else if (level === MarketplaceSupportLevel.TECH_PREVIEW) { + } else if (level === ExtensionsSupportLevel.TECH_PREVIEW) { allSupportTypeItems.push({ label: t('badges.techPreview'), value: `support-level=${level}`, @@ -192,7 +191,7 @@ export const useFilteredSupportTypes = () => { helperText: t('badges.pluginInDevelopment'), displayOrder: 4, }); - } else if (level === MarketplaceSupportLevel.DEV_PREVIEW) { + } else if (level === ExtensionsSupportLevel.DEV_PREVIEW) { allSupportTypeItems.push({ label: t('badges.devPreview'), value: `support-level=${level}`, @@ -200,7 +199,7 @@ export const useFilteredSupportTypes = () => { helperText: t('badges.earlyStageExperimental'), displayOrder: 5, }); - } else if (level === MarketplaceSupportLevel.COMMUNITY) { + } else if (level === ExtensionsSupportLevel.COMMUNITY) { allSupportTypeItems.push({ label: t('badges.communityPlugin'), value: `support-level=${level}`, diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useInstallPackage.ts b/workspaces/extensions/plugins/extensions/src/hooks/useInstallPackage.ts similarity index 82% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useInstallPackage.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useInstallPackage.ts index da8ad24b37..7232174379 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useInstallPackage.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useInstallPackage.ts @@ -15,10 +15,10 @@ */ import { useMutation } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const useInstallPackage = () => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useMutation({ mutationFn: async ({ @@ -29,6 +29,6 @@ export const useInstallPackage = () => { namespace: string; name: string; configYaml: string; - }) => await marketplaceApi.installPackage?.(namespace, name, configYaml), + }) => await extensionsApi.installPackage?.(namespace, name, configYaml), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useInstallPlugin.ts b/workspaces/extensions/plugins/extensions/src/hooks/useInstallPlugin.ts similarity index 83% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useInstallPlugin.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useInstallPlugin.ts index fd6fbd069f..0a10491632 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useInstallPlugin.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useInstallPlugin.ts @@ -15,10 +15,10 @@ */ import { useMutation } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const useInstallPlugin = () => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useMutation({ mutationFn: async ({ @@ -29,6 +29,6 @@ export const useInstallPlugin = () => { namespace: string; name: string; configYaml: string; - }) => await marketplaceApi.installPlugin?.(namespace, name, configYaml), + }) => await extensionsApi.installPlugin?.(namespace, name, configYaml), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useInstalledPackagesCount.test.tsx b/workspaces/extensions/plugins/extensions/src/hooks/useInstalledPackagesCount.test.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useInstalledPackagesCount.test.tsx rename to workspaces/extensions/plugins/extensions/src/hooks/useInstalledPackagesCount.test.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useInstalledPackagesCount.ts b/workspaces/extensions/plugins/extensions/src/hooks/useInstalledPackagesCount.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useInstalledPackagesCount.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useInstalledPackagesCount.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useNodeEnvironment.ts b/workspaces/extensions/plugins/extensions/src/hooks/useNodeEnvironment.ts similarity index 76% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useNodeEnvironment.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useNodeEnvironment.ts index 2ac1825844..7caa629d89 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useNodeEnvironment.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useNodeEnvironment.ts @@ -15,13 +15,13 @@ */ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const useNodeEnvironment = () => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getNodeEnvironment'], - queryFn: () => marketplaceApi.getNodeEnvironment?.(), + queryKey: ['extensionsApi', 'getNodeEnvironment'], + queryFn: () => extensionsApi.getNodeEnvironment?.(), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePackage.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePackage.ts similarity index 76% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePackage.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePackage.ts index 11929c9cb5..6e4ac876c8 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePackage.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePackage.ts @@ -16,13 +16,13 @@ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePackage = (namespace?: string, name?: string) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPackageByName', namespace, name], - queryFn: () => marketplaceApi.getPackageByName(namespace!, name!), + queryKey: ['extensionsApi', 'getPackageByName', namespace, name], + queryFn: () => extensionsApi.getPackageByName(namespace!, name!), enabled: Boolean(namespace && name), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePackageConfig.test.tsx b/workspaces/extensions/plugins/extensions/src/hooks/usePackageConfig.test.tsx similarity index 99% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePackageConfig.test.tsx rename to workspaces/extensions/plugins/extensions/src/hooks/usePackageConfig.test.tsx index f5b441ed4a..d287a40069 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePackageConfig.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePackageConfig.test.tsx @@ -123,7 +123,7 @@ describe('usePackageConfig', () => { expect(useQuery).toHaveBeenCalledWith( expect.objectContaining({ queryKey: [ - 'marketplaceApi', + 'extensionsApi', 'getPackageConfigByName', 'my-namespace', 'my-package', diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePackageConfig.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePackageConfig.ts similarity index 77% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePackageConfig.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePackageConfig.ts index 5b79ff2561..6923df8df3 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePackageConfig.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePackageConfig.ts @@ -15,15 +15,15 @@ */ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePackageConfig = (namespace: string, name: string) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPackageConfigByName', namespace, name], + queryKey: ['extensionsApi', 'getPackageConfigByName', namespace, name], queryFn: () => { if (namespace && name) { - return marketplaceApi.getPackageConfigByName?.(namespace, name); + return extensionsApi.getPackageConfigByName?.(namespace, name); } return null; }, diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePackages.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePackages.ts similarity index 76% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePackages.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePackages.ts index d878f16ab0..1069ac53a2 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePackages.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePackages.ts @@ -16,14 +16,14 @@ import { useQuery } from '@tanstack/react-query'; -import { GetEntitiesRequest } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { GetEntitiesRequest } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePackages = (request: GetEntitiesRequest) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPackages', request], - queryFn: () => marketplaceApi.getPackages(request), + queryKey: ['extensionsApi', 'getPackages', request], + queryFn: () => extensionsApi.getPackages(request), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePlugin.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePlugin.ts similarity index 75% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePlugin.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePlugin.ts index 7f3d534390..b3482d2ca4 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePlugin.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePlugin.ts @@ -16,12 +16,12 @@ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePlugin = (namespace: string, name: string) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPluginByName', namespace, name], - queryFn: () => marketplaceApi.getPluginByName(namespace, name), + queryKey: ['extensionsApi', 'getPluginByName', namespace, name], + queryFn: () => extensionsApi.getPluginByName(namespace, name), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfig.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePluginConfig.ts similarity index 74% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfig.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePluginConfig.ts index 4b203aa0c9..ef5793f15a 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfig.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePluginConfig.ts @@ -15,12 +15,12 @@ */ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePluginConfig = (namespace: string, name: string) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPluginConfigByName', namespace, name], - queryFn: () => marketplaceApi.getPluginConfigByName?.(namespace, name), + queryKey: ['extensionsApi', 'getPluginConfigByName', namespace, name], + queryFn: () => extensionsApi.getPluginConfigByName?.(namespace, name), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfigurationPermissions.test.tsx b/workspaces/extensions/plugins/extensions/src/hooks/usePluginConfigurationPermissions.test.tsx similarity index 99% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfigurationPermissions.test.tsx rename to workspaces/extensions/plugins/extensions/src/hooks/usePluginConfigurationPermissions.test.tsx index 51b39f35a5..50ba8d510d 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfigurationPermissions.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePluginConfigurationPermissions.test.tsx @@ -141,7 +141,7 @@ describe('usePluginConfigurationPermissions', () => { expect(useQuery).toHaveBeenCalledWith( expect.objectContaining({ queryKey: [ - 'marketplaceApi', + 'extensionsApi', 'getPluginConfigAuthorization', 'my-namespace', 'my-plugin', diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfigurationPermissions.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePluginConfigurationPermissions.ts similarity index 84% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfigurationPermissions.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePluginConfigurationPermissions.ts index f4e9fa5e80..2b2ee97601 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginConfigurationPermissions.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePluginConfigurationPermissions.ts @@ -15,25 +15,25 @@ */ import { useQuery, UseQueryResult } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; import { PluginPermissions, Permission } from '../types'; export const usePluginConfigurationPermissions = ( namespace: string, name: string, ): UseQueryResult => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ queryKey: [ - 'marketplaceApi', + 'extensionsApi', 'getPluginConfigAuthorization', namespace, name, ], queryFn: () => { if (namespace && name) { - return marketplaceApi.getPluginConfigAuthorization?.(namespace, name); + return extensionsApi.getPluginConfigAuthorization?.(namespace, name); } return Promise.resolve({ read: Permission.DENY, write: Permission.DENY }); }, diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginFacet.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePluginFacet.ts similarity index 82% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePluginFacet.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePluginFacet.ts index 653c82c2f8..2a46227353 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginFacet.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePluginFacet.ts @@ -16,14 +16,14 @@ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePluginFacet = (facet: string) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPluginFacet', facet], + queryKey: ['extensionsApi', 'getPluginFacet', facet], queryFn: () => - marketplaceApi + extensionsApi .getPluginFacets({ facets: [facet] }) .then(data => data.facets[facet]), }); diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginFacets.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePluginFacets.ts similarity index 77% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePluginFacets.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePluginFacets.ts index 442646c6be..c03dd838f7 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginFacets.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePluginFacets.ts @@ -18,13 +18,13 @@ import { useQuery } from '@tanstack/react-query'; import { GetEntityFacetsRequest } from '@backstage/catalog-client'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePluginFacets = (request: GetEntityFacetsRequest) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPluginFacets', request], + queryKey: ['extensionsApi', 'getPluginFacets', request], queryFn: () => - marketplaceApi.getPluginFacets(request).then(response => response.facets), + extensionsApi.getPluginFacets(request).then(response => response.facets), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginPackages.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePluginPackages.ts similarity index 75% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePluginPackages.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePluginPackages.ts index b61993283d..83a99b0376 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePluginPackages.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePluginPackages.ts @@ -16,12 +16,12 @@ import { useQuery } from '@tanstack/react-query'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePluginPackages = (namespace: string, name: string) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPluginPackages', namespace, name], - queryFn: () => marketplaceApi.getPluginPackages(namespace, name), + queryKey: ['extensionsApi', 'getPluginPackages', namespace, name], + queryFn: () => extensionsApi.getPluginPackages(namespace, name), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/usePlugins.ts b/workspaces/extensions/plugins/extensions/src/hooks/usePlugins.ts similarity index 76% rename from workspaces/marketplace/plugins/marketplace/src/hooks/usePlugins.ts rename to workspaces/extensions/plugins/extensions/src/hooks/usePlugins.ts index 5fb399146a..8dead7553c 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/usePlugins.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/usePlugins.ts @@ -16,14 +16,14 @@ import { useQuery } from '@tanstack/react-query'; -import { GetEntitiesRequest } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { GetEntitiesRequest } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { useMarketplaceApi } from './useMarketplaceApi'; +import { useExtensionsApi } from './useExtensionsApi'; export const usePlugins = (request: GetEntitiesRequest) => { - const marketplaceApi = useMarketplaceApi(); + const extensionsApi = useExtensionsApi(); return useQuery({ - queryKey: ['marketplaceApi', 'getPlugins', request], - queryFn: () => marketplaceApi.getPlugins(request), + queryKey: ['extensionsApi', 'getPlugins', request], + queryFn: () => extensionsApi.getPlugins(request), }); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useQueryArrayFilter.test.tsx b/workspaces/extensions/plugins/extensions/src/hooks/useQueryArrayFilter.test.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useQueryArrayFilter.test.tsx rename to workspaces/extensions/plugins/extensions/src/hooks/useQueryArrayFilter.test.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useQueryArrayFilter.ts b/workspaces/extensions/plugins/extensions/src/hooks/useQueryArrayFilter.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useQueryArrayFilter.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useQueryArrayFilter.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useQueryFullTextSearch.ts b/workspaces/extensions/plugins/extensions/src/hooks/useQueryFullTextSearch.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useQueryFullTextSearch.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useQueryFullTextSearch.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useQueryTableOptions.ts b/workspaces/extensions/plugins/extensions/src/hooks/useQueryTableOptions.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useQueryTableOptions.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useQueryTableOptions.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/hooks/useTranslation.ts b/workspaces/extensions/plugins/extensions/src/hooks/useTranslation.ts similarity index 81% rename from workspaces/marketplace/plugins/marketplace/src/hooks/useTranslation.ts rename to workspaces/extensions/plugins/extensions/src/hooks/useTranslation.ts index 52058df853..60efc4af36 100644 --- a/workspaces/marketplace/plugins/marketplace/src/hooks/useTranslation.ts +++ b/workspaces/extensions/plugins/extensions/src/hooks/useTranslation.ts @@ -18,11 +18,11 @@ import { useTranslationRef, TranslationFunction, } from '@backstage/core-plugin-api/alpha'; -import { marketplaceTranslationRef } from '../translations'; +import { extensionsTranslationRef } from '../translations'; /** * @alpha */ export const useTranslation = (): { - t: TranslationFunction; -} => useTranslationRef(marketplaceTranslationRef); + t: TranslationFunction; +} => useTranslationRef(extensionsTranslationRef); diff --git a/workspaces/marketplace/plugins/marketplace/src/index.ts b/workspaces/extensions/plugins/extensions/src/index.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/index.ts rename to workspaces/extensions/plugins/extensions/src/index.ts diff --git a/workspaces/extensions/plugins/extensions/src/labels.ts b/workspaces/extensions/plugins/extensions/src/labels.ts new file mode 100644 index 0000000000..355435fdcf --- /dev/null +++ b/workspaces/extensions/plugins/extensions/src/labels.ts @@ -0,0 +1,109 @@ +/* + * Copyright The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + ExtensionsPluginInstallStatus, + ExtensionsPackageInstallStatus, +} from '@red-hat-developer-hub/backstage-plugin-extensions-common'; +import { TranslationFunction } from '@backstage/core-plugin-api/alpha'; +import { extensionsTranslationRef } from './translations'; + +// Translation-aware label mapping functions that replace the static mappings +export const mapBackstageRoleToLabel = ( + role: string, + t: TranslationFunction, +): string => { + const roleMap: Record = { + 'backend-plugin': t('role.backend'), + 'backend-plugin-module': t('role.backendModule'), + 'frontend-plugin': t('role.frontend'), + }; + return roleMap[role] || role; +}; + +export const mapExtensionsPluginInstallStatusToLabel = ( + status: ExtensionsPluginInstallStatus, + t: TranslationFunction, +): string => { + const statusMap: Record = { + [ExtensionsPluginInstallStatus.NotInstalled]: t('status.notInstalled'), + [ExtensionsPluginInstallStatus.Installed]: t('status.installed'), + [ExtensionsPluginInstallStatus.Disabled]: t('status.disabled'), + [ExtensionsPluginInstallStatus.PartiallyInstalled]: t( + 'status.partiallyInstalled', + ), + [ExtensionsPluginInstallStatus.UpdateAvailable]: t( + 'status.updateAvailable', + ), + }; + return statusMap[status]; +}; + +export const mapExtensionsPluginInstallStatusToButton = ( + status: ExtensionsPluginInstallStatus, + t: TranslationFunction, +): string => { + const buttonMap: Record = { + [ExtensionsPluginInstallStatus.NotInstalled]: t('button.install'), + [ExtensionsPluginInstallStatus.Installed]: t('button.uninstall'), + [ExtensionsPluginInstallStatus.Disabled]: t('button.enable'), + [ExtensionsPluginInstallStatus.PartiallyInstalled]: t('button.uninstall'), + [ExtensionsPluginInstallStatus.UpdateAvailable]: t('button.update'), + }; + return buttonMap[status]; +}; + +export const mapExtensionsPluginInstallStatusToInstallPageButton = ( + status: ExtensionsPluginInstallStatus, + t: TranslationFunction, +): string => { + const buttonMap: Record = { + [ExtensionsPluginInstallStatus.NotInstalled]: t('button.install'), + [ExtensionsPluginInstallStatus.Installed]: t('button.save'), + [ExtensionsPluginInstallStatus.Disabled]: t('button.save'), + [ExtensionsPluginInstallStatus.PartiallyInstalled]: t('button.save'), + [ExtensionsPluginInstallStatus.UpdateAvailable]: t('button.save'), + }; + return buttonMap[status]; +}; + +export const mapPackageInstallStatusToLabel = ( + status: ExtensionsPackageInstallStatus, + t: TranslationFunction, +): string => { + const statusMap: Record = { + [ExtensionsPackageInstallStatus.NotInstalled]: t('status.notInstalled'), + [ExtensionsPackageInstallStatus.Installed]: t('status.installed'), + [ExtensionsPackageInstallStatus.Disabled]: t('status.disabled'), + [ExtensionsPackageInstallStatus.UpdateAvailable]: t( + 'status.updateAvailable', + ), + }; + return statusMap[status]; +}; + +export const mapPackageInstallStatusToButton = ( + status: ExtensionsPackageInstallStatus, + t: TranslationFunction, +): string => { + const buttonMap: Record = { + [ExtensionsPackageInstallStatus.NotInstalled]: t('button.install'), + [ExtensionsPackageInstallStatus.Installed]: t('button.uninstall'), + [ExtensionsPackageInstallStatus.Disabled]: t('button.enable'), + [ExtensionsPackageInstallStatus.UpdateAvailable]: t('button.update'), + }; + return buttonMap[status]; +}; diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/DynamicMarketplacePluginRouter.tsx b/workspaces/extensions/plugins/extensions/src/pages/DynamicExtensionsPluginRouter.tsx similarity index 81% rename from workspaces/marketplace/plugins/marketplace/src/pages/DynamicMarketplacePluginRouter.tsx rename to workspaces/extensions/plugins/extensions/src/pages/DynamicExtensionsPluginRouter.tsx index 3cb831c477..cee4073d09 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/DynamicMarketplacePluginRouter.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/DynamicExtensionsPluginRouter.tsx @@ -33,14 +33,14 @@ import Typography from '@mui/material/Typography'; import { themeId } from '../consts'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; -import { MarketplaceCatalogContent } from '../components/MarketplaceCatalogContent'; +import { ExtensionsCatalogContent } from '../components/ExtensionsCatalogContent'; import { InstalledPackagesTable } from '../components/InstalledPackages/InstalledPackagesTable'; import { useInstalledPackagesCount } from '../hooks/useInstalledPackagesCount'; -import { MarketplaceCollectionPage } from './MarketplaceCollectionPage'; -import { MarketplacePluginDrawer } from '../components/MarketplacePluginDrawer'; -import { MarketplacePluginInstallPage } from './MarketplacePluginInstallPage'; -import { MarketplacePackageDrawer } from '../components/MarketplacePackageDrawer'; -import { MarketplacePackageInstallPage } from './MarketplacePackageInstallPage'; +import { ExtensionsCollectionPage } from './ExtensionsCollectionPage'; +import { ExtensionsPluginDrawer } from '../components/ExtensionsPluginDrawer'; +import { ExtensionsPluginInstallPage } from './ExtensionsPluginInstallPage'; +import { ExtensionsPackageDrawer } from '../components/ExtensionsPackageDrawer'; +import { ExtensionsPackageInstallPage } from './ExtensionsPackageInstallPage'; import { InstallationContextProvider } from '../components/InstallationContext'; import { useTranslation } from '../hooks/useTranslation'; @@ -82,7 +82,7 @@ const PackageDeepLinkRedirect = () => { ); }; -const MarketplacePage = () => { +const ExtensionsPage = () => { const { t } = useTranslation(); const installedPackages = useInstalledPackagesCount(); @@ -109,7 +109,7 @@ const MarketplacePage = () => { }} > - + @@ -134,47 +134,47 @@ const MarketplacePage = () => { ); }; -export const DynamicMarketplacePluginRouter = () => ( +export const DynamicExtensionsPluginRouter = () => ( {/* Use existing install route as the edit page */} {/* Redirect package routes to show installed-packages tab */} - + ); -export const DynamicMarketplacePluginContent = () => ( +export const DynamicExtensionsPluginContent = () => ( - + ); diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionPage.test.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionPage.test.tsx similarity index 73% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionPage.test.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionPage.test.tsx index 0adb6acfea..1485dc8e9c 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionPage.test.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionPage.test.tsx @@ -16,28 +16,28 @@ import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; -import { MarketplaceApi } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsApi } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { MarketplaceCollectionPage } from './MarketplaceCollectionPage'; -import { marketplaceApiRef } from '../api'; +import { ExtensionsCollectionPage } from './ExtensionsCollectionPage'; +import { extensionsApiRef } from '../api'; import { rootRouteRef } from '../routes'; import { queryClient } from '../queryclient'; -const apis = [[marketplaceApiRef, {} as MarketplaceApi]] as const; +const apis = [[extensionsApiRef, {} as ExtensionsApi]] as const; queryClient.setDefaultOptions({ queries: { retry: false }, }); -describe('MarketplaceCollectionPage', () => { +describe('ExtensionsCollectionPage', () => { it('should render without error', async () => { const { getByText } = await renderInTestApp( - + , { mountedRoutes: { - '/marketplace': rootRouteRef, + '/extensions': rootRouteRef, }, }, ); diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionPage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionPage.tsx similarity index 90% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionPage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionPage.tsx index eec25f0dc9..b7a5a80dcb 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionPage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionPage.tsx @@ -28,7 +28,7 @@ import { ReactQueryProvider } from '../components/ReactQueryProvider'; import { useCollection } from '../hooks/useCollection'; import { useTranslation } from '../hooks/useTranslation'; import { getTranslatedText } from '../translations/utils'; -import { MarketplaceCollectionGridLoader } from '../components/MarketplaceCollectionGrid'; +import { ExtensionsCollectionGridLoader } from '../components/ExtensionsCollectionGrid'; const CollectionHeader = () => { const { t } = useTranslation(); @@ -47,13 +47,13 @@ const CollectionHeader = () => { ); }; -export const MarketplaceCollectionPage = () => ( +export const ExtensionsCollectionPage = () => ( - + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionsPage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionsPage.tsx similarity index 86% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionsPage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionsPage.tsx index 5d3f1f337e..32495f8bac 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceCollectionsPage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsCollectionsPage.tsx @@ -23,10 +23,10 @@ import { import { themeId } from '../consts'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; -import { MarketplaceCollectionsGrid } from '../components/MarketplaceCollectionsGrid'; +import { ExtensionsCollectionsGrid } from '../components/ExtensionsCollectionsGrid'; import { useTranslation } from '../hooks/useTranslation'; -export const MarketplaceCollectionsPage = () => { +export const ExtensionsCollectionsPage = () => { const { t } = useTranslation(); return ( @@ -35,7 +35,7 @@ export const MarketplaceCollectionsPage = () => {
- + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceFullPageRouter.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsFullPageRouter.tsx similarity index 54% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceFullPageRouter.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsFullPageRouter.tsx index c0e9a0dd97..863941fb84 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceFullPageRouter.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsFullPageRouter.tsx @@ -18,18 +18,18 @@ import { Route, Routes } from 'react-router-dom'; import { useApp } from '@backstage/core-plugin-api'; -import { MarketplaceHomePage } from './MarketplaceHomePage'; +import { ExtensionsHomePage } from './ExtensionsHomePage'; -import { MarketplacePluginsPage } from './MarketplacePluginsPage'; -import { MarketplacePluginPage } from './MarketplacePluginPage'; -import { MarketplacePluginInstallPage } from './MarketplacePluginInstallPage'; +import { ExtensionsPluginsPage } from './ExtensionsPluginsPage'; +import { ExtensionsPluginPage } from './ExtensionsPluginPage'; +import { ExtensionsPluginInstallPage } from './ExtensionsPluginInstallPage'; -import { MarketplacePackagesPage } from './MarketplacePackagesPage'; -import { MarketplacePackagePage } from './MarketplacePackagePage'; -import { MarketplacePackageInstallPage } from './MarketplacePackageInstallPage'; +import { ExtensionsPackagesPage } from './ExtensionsPackagesPage'; +import { ExtensionsPackagePage } from './ExtensionsPackagePage'; +import { ExtensionsPackageInstallPage } from './ExtensionsPackageInstallPage'; -import { MarketplaceCollectionsPage } from './MarketplaceCollectionsPage'; -import { MarketplaceCollectionPage } from './MarketplaceCollectionPage'; +import { ExtensionsCollectionsPage } from './ExtensionsCollectionsPage'; +import { ExtensionsCollectionPage } from './ExtensionsCollectionPage'; import { InstallationContextProvider } from '../components/InstallationContext'; const NotFound = () => { @@ -37,36 +37,36 @@ const NotFound = () => { return ; }; -export const MarketplaceFullPageRouter = () => { +export const ExtensionsFullPageRouter = () => { return ( - + - + - + - + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceHomePage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsHomePage.tsx similarity index 87% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceHomePage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsHomePage.tsx index 4bc164354e..df53375b11 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceHomePage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsHomePage.tsx @@ -22,11 +22,11 @@ import { } from '@backstage/core-components'; import { themeId } from '../consts'; -import { MarketplaceCatalogContent } from '../components/MarketplaceCatalogContent'; +import { ExtensionsCatalogContent } from '../components/ExtensionsCatalogContent'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; import { useTranslation } from '../hooks/useTranslation'; -export const MarketplaceHomePage = () => { +export const ExtensionsHomePage = () => { const { t } = useTranslation(); return ( @@ -35,7 +35,7 @@ export const MarketplaceHomePage = () => {
- + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackageInstallPage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackageInstallPage.tsx similarity index 90% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackageInstallPage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackageInstallPage.tsx index e937c3a2c2..54a977a376 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackageInstallPage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackageInstallPage.tsx @@ -27,7 +27,7 @@ import { themeId } from '../consts'; import { packageInstallRouteRef } from '../routes'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; import { usePackage } from '../hooks/usePackage'; -import { MarketplacePackageEditContentLoader } from '../components/MarketplacePackageEditContent'; +import { ExtensionsPackageEditContentLoader } from '../components/ExtensionsPackageEditContent'; const PackageEditHeader = () => { const params = useRouteRefParams(packageInstallRouteRef); @@ -47,7 +47,7 @@ const PackageEditHeader = () => { return
; }; -export const MarketplacePackageInstallPage = () => { +export const ExtensionsPackageInstallPage = () => { return ( @@ -55,7 +55,7 @@ export const MarketplacePackageInstallPage = () => { {/* Force remount on navigation within same route to reseed editor */} - + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackagePage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackagePage.tsx similarity index 89% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackagePage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackagePage.tsx index 2fe6b19cd7..9680a10343 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackagePage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackagePage.tsx @@ -26,7 +26,7 @@ import { themeId } from '../consts'; import { packageRouteRef, packagesRouteRef } from '../routes'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; import { usePackage } from '../hooks/usePackage'; -import { MarketplacePackageContent } from '../components/MarketplacePackageContent'; +import { ExtensionsPackageContent } from '../components/ExtensionsPackageContent'; const PackageHeader = () => { const params = useRouteRefParams(packageRouteRef); @@ -38,13 +38,13 @@ const PackageHeader = () => { return
; }; -export const MarketplacePackagePage = () => ( +export const ExtensionsPackagePage = () => ( - + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackagesPage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackagesPage.tsx similarity index 87% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackagesPage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackagesPage.tsx index 8f83e23e51..a002e4196b 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePackagesPage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPackagesPage.tsx @@ -24,9 +24,9 @@ import { import { themeId } from '../consts'; import { useTranslation } from '../hooks/useTranslation'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; -import { MarketplacePackagesTable } from '../components/MarketplacePackagesTable'; +import { ExtensionsPackagesTable } from '../components/ExtensionsPackagesTable'; -export const MarketplacePackagesPage = () => { +export const ExtensionsPackagesPage = () => { const { t } = useTranslation(); return ( @@ -35,7 +35,7 @@ export const MarketplacePackagesPage = () => {
- + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginInstallPage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginInstallPage.tsx similarity index 93% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginInstallPage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginInstallPage.tsx index 4071bba579..12a8ced72f 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginInstallPage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginInstallPage.tsx @@ -29,7 +29,7 @@ import { pluginInstallRouteRef, pluginRouteRef } from '../routes'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; import { usePlugin } from '../hooks/usePlugin'; import { useNodeEnvironment } from '../hooks/useNodeEnvironment'; -import { MarketplacePluginInstallContentLoader } from '../components/MarketplacePluginInstallContent'; +import { ExtensionsPluginInstallContentLoader } from '../components/ExtensionsPluginInstallContent'; import { useTranslation } from '../hooks/useTranslation'; import { isPluginInstalled } from '../utils'; @@ -84,13 +84,13 @@ const PluginInstallHeader = () => { ); }; -export const MarketplacePluginInstallPage = () => ( +export const ExtensionsPluginInstallPage = () => ( - + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginPage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginPage.tsx similarity index 89% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginPage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginPage.tsx index 7dbb124190..d7842ef4a4 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginPage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginPage.tsx @@ -25,7 +25,7 @@ import { import { themeId } from '../consts'; import { pluginRouteRef, pluginsRouteRef } from '../routes'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; -import { MarketplacePluginContentLoader } from '../components/MarketplacePluginContent'; +import { ExtensionsPluginContentLoader } from '../components/ExtensionsPluginContent'; import { usePlugin } from '../hooks/usePlugin'; const PluginHeader = () => { @@ -38,13 +38,13 @@ const PluginHeader = () => { return
; }; -export const MarketplacePluginPage = () => ( +export const ExtensionsPluginPage = () => ( - + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginsPage.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginsPage.tsx similarity index 87% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginsPage.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginsPage.tsx index 5fbb6dc15a..cc4318a72b 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplacePluginsPage.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsPluginsPage.tsx @@ -24,9 +24,9 @@ import { import { themeId } from '../consts'; import { useTranslation } from '../hooks/useTranslation'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; -import { MarketplacePluginsTable } from '../components/MarketplacePluginsTable'; +import { ExtensionsPluginsTable } from '../components/ExtensionsPluginsTable'; -export const MarketplacePluginsPage = () => { +export const ExtensionsPluginsPage = () => { const { t } = useTranslation(); return ( @@ -35,7 +35,7 @@ export const MarketplacePluginsPage = () => {
- + diff --git a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceTabbedPageRouter.tsx b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsTabbedPageRouter.tsx similarity index 67% rename from workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceTabbedPageRouter.tsx rename to workspaces/extensions/plugins/extensions/src/pages/ExtensionsTabbedPageRouter.tsx index 696824abe3..27114f55fe 100644 --- a/workspaces/marketplace/plugins/marketplace/src/pages/MarketplaceTabbedPageRouter.tsx +++ b/workspaces/extensions/plugins/extensions/src/pages/ExtensionsTabbedPageRouter.tsx @@ -24,22 +24,22 @@ import { themeId } from '../consts'; import { ReactQueryProvider } from '../components/ReactQueryProvider'; -import { MarketplaceCatalogContent } from '../components/MarketplaceCatalogContent'; +import { ExtensionsCatalogContent } from '../components/ExtensionsCatalogContent'; -import { MarketplaceCollectionsGrid } from '../components/MarketplaceCollectionsGrid'; -import { MarketplaceCollectionPage } from './MarketplaceCollectionPage'; +import { ExtensionsCollectionsGrid } from '../components/ExtensionsCollectionsGrid'; +import { ExtensionsCollectionPage } from './ExtensionsCollectionPage'; -import { MarketplacePluginsTable } from '../components/MarketplacePluginsTable'; -import { MarketplacePluginDrawer } from '../components/MarketplacePluginDrawer'; -import { MarketplacePluginInstallPage } from './MarketplacePluginInstallPage'; +import { ExtensionsPluginsTable } from '../components/ExtensionsPluginsTable'; +import { ExtensionsPluginDrawer } from '../components/ExtensionsPluginDrawer'; +import { ExtensionsPluginInstallPage } from './ExtensionsPluginInstallPage'; -import { MarketplacePackagesTable } from '../components/MarketplacePackagesTable'; -import { MarketplacePackageDrawer } from '../components/MarketplacePackageDrawer'; +import { ExtensionsPackagesTable } from '../components/ExtensionsPackagesTable'; +import { ExtensionsPackageDrawer } from '../components/ExtensionsPackageDrawer'; import { InstallationContextProvider } from '../components/InstallationContext'; import { useCollections } from '../hooks/useCollections'; -import { MarketplacePackageInstallPage } from './MarketplacePackageInstallPage'; +import { ExtensionsPackageInstallPage } from './ExtensionsPackageInstallPage'; const Tabs = () => { const { t } = useTranslation(); @@ -51,53 +51,53 @@ const Tabs = () => {
- + {showCollections && ( - + )} - + - + ); }; -export const MarketplaceTabbedPageRouter = () => ( +export const ExtensionsTabbedPageRouter = () => ( diff --git a/workspaces/marketplace/plugins/marketplace/src/plugin.test.ts b/workspaces/extensions/plugins/extensions/src/plugin.test.ts similarity index 88% rename from workspaces/marketplace/plugins/marketplace/src/plugin.test.ts rename to workspaces/extensions/plugins/extensions/src/plugin.test.ts index 0076435c7e..e75d6d344c 100644 --- a/workspaces/marketplace/plugins/marketplace/src/plugin.test.ts +++ b/workspaces/extensions/plugins/extensions/src/plugin.test.ts @@ -14,10 +14,10 @@ * limitations under the License. */ -import { marketplacePlugin } from './plugin'; +import { extensionsPlugin } from './plugin'; describe('extensions', () => { it('should export plugin', () => { - expect(marketplacePlugin).toBeDefined(); + expect(extensionsPlugin).toBeDefined(); }); }); diff --git a/workspaces/marketplace/plugins/marketplace/src/plugin.ts b/workspaces/extensions/plugins/extensions/src/plugin.ts similarity index 52% rename from workspaces/marketplace/plugins/marketplace/src/plugin.ts rename to workspaces/extensions/plugins/extensions/src/plugin.ts index 07a6e304c0..3b36e9f7a6 100644 --- a/workspaces/marketplace/plugins/marketplace/src/plugin.ts +++ b/workspaces/extensions/plugins/extensions/src/plugin.ts @@ -26,30 +26,30 @@ import { configApiRef, } from '@backstage/core-plugin-api'; -import MUIMarketplaceIcon from '@mui/icons-material/ShoppingBasketOutlined'; +import MUIExtensionsIcon from '@mui/icons-material/ShoppingBasketOutlined'; import MUIPluginsIcon from '@mui/icons-material/PowerOutlined'; -import { MarketplaceBackendClient } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsBackendClient } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; -import { marketplaceApiRef, dynamicPluginsInfoApiRef } from './api'; +import { extensionsApiRef, dynamicPluginsInfoApiRef } from './api'; import { DynamicPluginsInfoClient } from './api/DynamicPluginsInfoClient'; import { allRoutes } from './routes'; -import { marketplaceTranslationRef } from './translations'; +import { extensionsTranslationRef } from './translations'; /** - * Marketplace Plugin + * Extensions Plugin * @public */ -export const marketplacePlugin = createPlugin({ +export const extensionsPlugin = createPlugin({ id: 'extensions', routes: allRoutes, __experimentalTranslations: { availableLanguages: ['en', 'de', 'fr', 'es'], - resources: [marketplaceTranslationRef], + resources: [extensionsTranslationRef], }, apis: [ createApiFactory({ - api: marketplaceApiRef, + api: extensionsApiRef, deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef, @@ -57,7 +57,7 @@ export const marketplacePlugin = createPlugin({ configApi: configApiRef, }, factory: ({ discoveryApi, fetchApi, identityApi, configApi }) => - new MarketplaceBackendClient({ + new ExtensionsBackendClient({ discoveryApi, fetchApi, identityApi, @@ -80,45 +80,63 @@ export const marketplacePlugin = createPlugin({ } as any); /** - * Marketplace page with routes for different pages. * @public + * @deprecated Use extensionsPlugin instead */ -export const MarketplaceFullPageRouter = marketplacePlugin.provide( +export const marketplacePlugin = extensionsPlugin; + +/** + * Extensions page with routes for different pages. + * @public + */ +export const ExtensionsFullPageRouter = extensionsPlugin.provide( createRoutableExtension({ - name: 'MarketplacePage', + name: 'ExtensionsPage', component: () => - import('./pages/MarketplaceFullPageRouter').then( - m => m.MarketplaceFullPageRouter, + import('./pages/ExtensionsFullPageRouter').then( + m => m.ExtensionsFullPageRouter, ), mountPoint: allRoutes.rootRouteRef, }), ); /** - * Marketplace page with header and tabs. + * @public + * @deprecated Use ExtensionsFullPageRouter instead + */ +export const MarketplaceFullPageRouter = ExtensionsFullPageRouter; + +/** + * Extensions page with header and tabs. * @public */ -export const MarketplaceTabbedPageRouter = marketplacePlugin.provide( +export const ExtensionsTabbedPageRouter = extensionsPlugin.provide( createRoutableExtension({ - name: 'MarketplaceTabbedPageRouter', + name: 'ExtensionsTabbedPageRouter', component: () => - import('./pages/MarketplaceTabbedPageRouter').then( - m => m.MarketplaceTabbedPageRouter, + import('./pages/ExtensionsTabbedPageRouter').then( + m => m.ExtensionsTabbedPageRouter, ), mountPoint: allRoutes.rootRouteRef, }), ); /** - * Main marketplace plugin router with tabs and sub-routes. + * @public + * @deprecated Use ExtensionsTabbedPageRouter instead + */ +export const MarketplaceTabbedPageRouter = ExtensionsTabbedPageRouter; + +/** + * Main extensions plugin router with tabs and sub-routes. * @public */ -export const DynamicMarketplacePluginRouter = marketplacePlugin.provide( +export const DynamicExtensionsPluginRouter = extensionsPlugin.provide( createRoutableExtension({ - name: 'DynamicMarketplacePluginRouter', + name: 'DynamicExtensionsPluginRouter', component: () => - import('./pages/DynamicMarketplacePluginRouter').then( - m => m.DynamicMarketplacePluginRouter, + import('./pages/DynamicExtensionsPluginRouter').then( + m => m.DynamicExtensionsPluginRouter, ), mountPoint: allRoutes.rootRouteRef, }), @@ -126,14 +144,20 @@ export const DynamicMarketplacePluginRouter = marketplacePlugin.provide( /** * @public + * @deprecated Use DynamicExtensionsPluginRouter instead */ -export const DynamicMarketplacePluginContent = marketplacePlugin.provide( +export const DynamicMarketplacePluginRouter = DynamicExtensionsPluginRouter; + +/** + * @public + */ +export const DynamicExtensionsPluginContent = extensionsPlugin.provide( createComponentExtension({ - name: 'DynamicMarketplacePluginContent', + name: 'DynamicExtensionsPluginContent', component: { lazy: () => - import('./pages/DynamicMarketplacePluginRouter').then( - m => m.DynamicMarketplacePluginContent, + import('./pages/DynamicExtensionsPluginRouter').then( + m => m.DynamicExtensionsPluginContent, ), }, }), @@ -141,8 +165,20 @@ export const DynamicMarketplacePluginContent = marketplacePlugin.provide( /** * @public + * @deprecated Use DynamicExtensionsPluginContent instead + */ +export const DynamicMarketplacePluginContent = DynamicExtensionsPluginContent; + +/** + * @public + */ +export const ExtensionsIcon: IconComponent = MUIExtensionsIcon; + +/** + * @public + * @deprecated Use ExtensionsIcon instead */ -export const MarketplaceIcon: IconComponent = MUIMarketplaceIcon; +export const MarketplaceIcon = ExtensionsIcon; /** * @public @@ -153,7 +189,7 @@ export const PluginsIcon: IconComponent = MUIPluginsIcon; * @public * @deprecated Use the latest RHDH. This no-op export remains only for backward compatibility and will be removed in a future major release. */ -export const InstallationContextProvider = marketplacePlugin.provide( +export const InstallationContextProvider = extensionsPlugin.provide( createComponentExtension({ name: 'InstallationContextProvider', component: { diff --git a/workspaces/marketplace/plugins/marketplace/src/queryclient.ts b/workspaces/extensions/plugins/extensions/src/queryclient.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/queryclient.ts rename to workspaces/extensions/plugins/extensions/src/queryclient.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/routes.ts b/workspaces/extensions/plugins/extensions/src/routes.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/routes.ts rename to workspaces/extensions/plugins/extensions/src/routes.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/setupTests.ts b/workspaces/extensions/plugins/extensions/src/setupTests.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/setupTests.ts rename to workspaces/extensions/plugins/extensions/src/setupTests.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/shared-components/CustomSelectFilter.tsx b/workspaces/extensions/plugins/extensions/src/shared-components/CustomSelectFilter.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/shared-components/CustomSelectFilter.tsx rename to workspaces/extensions/plugins/extensions/src/shared-components/CustomSelectFilter.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/shared-components/SearchTextField.tsx b/workspaces/extensions/plugins/extensions/src/shared-components/SearchTextField.tsx similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/shared-components/SearchTextField.tsx rename to workspaces/extensions/plugins/extensions/src/shared-components/SearchTextField.tsx diff --git a/workspaces/marketplace/plugins/marketplace/src/test-utils/mockTranslations.ts b/workspaces/extensions/plugins/extensions/src/test-utils/mockTranslations.ts similarity index 92% rename from workspaces/marketplace/plugins/marketplace/src/test-utils/mockTranslations.ts rename to workspaces/extensions/plugins/extensions/src/test-utils/mockTranslations.ts index a5711053e1..dea0eb21b3 100644 --- a/workspaces/marketplace/plugins/marketplace/src/test-utils/mockTranslations.ts +++ b/workspaces/extensions/plugins/extensions/src/test-utils/mockTranslations.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { marketplaceMessages } from '../translations/ref'; +import { extensionsMessages } from '../translations/ref'; function flattenMessages(obj: any, prefix = ''): Record { const result: Record = {}; @@ -34,7 +34,7 @@ function flattenMessages(obj: any, prefix = ''): Record { return result; } -const flattenedMessages = flattenMessages(marketplaceMessages); +const flattenedMessages = flattenMessages(extensionsMessages); export const mockT = (key: string, params?: any) => { let message = flattenedMessages[key] || key; diff --git a/workspaces/marketplace/plugins/marketplace/src/translations/de.ts b/workspaces/extensions/plugins/extensions/src/translations/de.ts similarity index 98% rename from workspaces/marketplace/plugins/marketplace/src/translations/de.ts rename to workspaces/extensions/plugins/extensions/src/translations/de.ts index 0f873183a2..df0cd3aaed 100644 --- a/workspaces/marketplace/plugins/marketplace/src/translations/de.ts +++ b/workspaces/extensions/plugins/extensions/src/translations/de.ts @@ -15,10 +15,10 @@ */ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; -import { marketplaceTranslationRef } from './ref'; +import { extensionsTranslationRef } from './ref'; -const marketplaceTranslationDe = createTranslationMessages({ - ref: marketplaceTranslationRef, +const extensionsTranslationDe = createTranslationMessages({ + ref: extensionsTranslationRef, full: true, messages: { // Page headers and titles @@ -63,7 +63,7 @@ const marketplaceTranslationDe = createTranslationMessages({ 'emptyState.noPluginsDescription': 'Beim Laden der Plugins ist ein Fehler aufgetreten. Überprüfen Sie Ihre Konfiguration oder lesen Sie die Plugin-Dokumentation. Sie können auch andere verfügbare Plugins erkunden.', 'emptyState.configureBackend': - "Konfigurieren Sie das '@red-hat-developer-hub/backstage-plugin-marketplace-backend' Plugin.", + "Konfigurieren Sie das '@red-hat-developer-hub/backstage-plugin-extensions-backend' Plugin.", // Alerts and warnings 'alert.productionDisabled': @@ -348,4 +348,4 @@ const marketplaceTranslationDe = createTranslationMessages({ }, }); -export default marketplaceTranslationDe; +export default extensionsTranslationDe; diff --git a/workspaces/marketplace/plugins/marketplace/src/translations/es.ts b/workspaces/extensions/plugins/extensions/src/translations/es.ts similarity index 98% rename from workspaces/marketplace/plugins/marketplace/src/translations/es.ts rename to workspaces/extensions/plugins/extensions/src/translations/es.ts index 12ff1a2b7d..ab27913f40 100644 --- a/workspaces/marketplace/plugins/marketplace/src/translations/es.ts +++ b/workspaces/extensions/plugins/extensions/src/translations/es.ts @@ -15,10 +15,10 @@ */ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; -import { marketplaceTranslationRef } from './ref'; +import { extensionsTranslationRef } from './ref'; -const marketplaceTranslationEs = createTranslationMessages({ - ref: marketplaceTranslationRef, +const extensionsTranslationEs = createTranslationMessages({ + ref: extensionsTranslationRef, full: true, messages: { // Page headers and titles @@ -63,7 +63,7 @@ const marketplaceTranslationEs = createTranslationMessages({ 'emptyState.noPluginsDescription': 'Hubo un error al cargar los plugins. Verifique su configuración o revise la documentación del plugin para resolver. También puede explorar otros plugins disponibles.', 'emptyState.configureBackend': - "Configure el plugin '@red-hat-developer-hub/backstage-plugin-marketplace-backend'.", + "Configure el plugin '@red-hat-developer-hub/backstage-plugin-extensions-backend'.", // Alerts and warnings 'alert.productionDisabled': @@ -347,4 +347,4 @@ const marketplaceTranslationEs = createTranslationMessages({ }, }); -export default marketplaceTranslationEs; +export default extensionsTranslationEs; diff --git a/workspaces/marketplace/plugins/marketplace/src/translations/fr.ts b/workspaces/extensions/plugins/extensions/src/translations/fr.ts similarity index 98% rename from workspaces/marketplace/plugins/marketplace/src/translations/fr.ts rename to workspaces/extensions/plugins/extensions/src/translations/fr.ts index 850c734243..0a0ee24119 100644 --- a/workspaces/marketplace/plugins/marketplace/src/translations/fr.ts +++ b/workspaces/extensions/plugins/extensions/src/translations/fr.ts @@ -15,10 +15,10 @@ */ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; -import { marketplaceTranslationRef } from './ref'; +import { extensionsTranslationRef } from './ref'; -const marketplaceTranslationFr = createTranslationMessages({ - ref: marketplaceTranslationRef, +const extensionsTranslationFr = createTranslationMessages({ + ref: extensionsTranslationRef, full: true, messages: { 'actions.actions': 'Actes', @@ -121,7 +121,7 @@ const marketplaceTranslationFr = createTranslationMessages({ 'dialog.pluginRestartMessage': 'Pour terminer les modifications du plugin, redémarrez votre système backend.', 'emptyState.configureBackend': - "Configurez le plugin '@red-hat-developer-hub/backstage-plugin-marketplace-backend'.", + "Configurez le plugin '@red-hat-developer-hub/backstage-plugin-extensions-backend'.", 'emptyState.mustEnableBackend': 'Doit activer le plugin backend Extensions', 'emptyState.noPluginsDescription': "Une erreur s'est produite lors du chargement des plugins. Vérifiez votre configuration ou consultez la documentation du plugin pour résoudre le problème. Vous pouvez également explorer d’autres plugins disponibles.", @@ -305,4 +305,4 @@ const marketplaceTranslationFr = createTranslationMessages({ }, }); -export default marketplaceTranslationFr; +export default extensionsTranslationFr; diff --git a/workspaces/marketplace/plugins/marketplace/src/translations/index.ts b/workspaces/extensions/plugins/extensions/src/translations/index.ts similarity index 78% rename from workspaces/marketplace/plugins/marketplace/src/translations/index.ts rename to workspaces/extensions/plugins/extensions/src/translations/index.ts index 5a2db63d30..1f7d8dd144 100644 --- a/workspaces/marketplace/plugins/marketplace/src/translations/index.ts +++ b/workspaces/extensions/plugins/extensions/src/translations/index.ts @@ -15,14 +15,14 @@ */ import { createTranslationResource } from '@backstage/core-plugin-api/alpha'; -import { marketplaceTranslationRef } from './ref'; +import { extensionsTranslationRef } from './ref'; /** - * Translation Resource for marketplace + * Translation Resource for extensions * @alpha */ -export const marketplaceTranslations = createTranslationResource({ - ref: marketplaceTranslationRef, +export const extensionsTranslations = createTranslationResource({ + ref: extensionsTranslationRef, translations: { de: () => import('./de'), fr: () => import('./fr'), @@ -31,4 +31,4 @@ export const marketplaceTranslations = createTranslationResource({ }, }); -export { marketplaceTranslationRef }; +export { extensionsTranslationRef } from './ref'; diff --git a/workspaces/marketplace/plugins/marketplace/src/translations/it.ts b/workspaces/extensions/plugins/extensions/src/translations/it.ts similarity index 98% rename from workspaces/marketplace/plugins/marketplace/src/translations/it.ts rename to workspaces/extensions/plugins/extensions/src/translations/it.ts index db5048dfaf..057cca9163 100644 --- a/workspaces/marketplace/plugins/marketplace/src/translations/it.ts +++ b/workspaces/extensions/plugins/extensions/src/translations/it.ts @@ -15,10 +15,10 @@ */ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; -import { marketplaceTranslationRef } from './ref'; +import { extensionsTranslationRef } from './ref'; -const marketplaceTranslationIt = createTranslationMessages({ - ref: marketplaceTranslationRef, +const extensionsTranslationIt = createTranslationMessages({ + ref: extensionsTranslationRef, full: true, messages: { // Page headers and titles @@ -63,7 +63,7 @@ const marketplaceTranslationIt = createTranslationMessages({ 'emptyState.noPluginsDescription': 'Si è verificato un errore durante il caricamento dei plugin. Controlla la tua configurazione o consulta la documentazione del plugin per risolvere. Puoi anche esplorare altri plugin disponibili.', 'emptyState.configureBackend': - "Configura il plugin '@red-hat-developer-hub/backstage-plugin-marketplace-backend'.", + "Configura il plugin '@red-hat-developer-hub/backstage-plugin-extensions-backend'.", // Alerts and warnings 'alert.productionDisabled': @@ -346,4 +346,4 @@ const marketplaceTranslationIt = createTranslationMessages({ }, }); -export default marketplaceTranslationIt; +export default extensionsTranslationIt; diff --git a/workspaces/marketplace/plugins/marketplace/src/translations/ref.ts b/workspaces/extensions/plugins/extensions/src/translations/ref.ts similarity index 97% rename from workspaces/marketplace/plugins/marketplace/src/translations/ref.ts rename to workspaces/extensions/plugins/extensions/src/translations/ref.ts index dfd490d14d..0147817b0a 100644 --- a/workspaces/marketplace/plugins/marketplace/src/translations/ref.ts +++ b/workspaces/extensions/plugins/extensions/src/translations/ref.ts @@ -21,7 +21,7 @@ import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; * This is our single source of truth for translations. * @alpha */ -export const marketplaceMessages = { +export const extensionsMessages = { // Page headers and titles header: { title: 'Extensions', @@ -72,7 +72,7 @@ export const marketplaceMessages = { noPluginsDescription: 'There was an error with loading plugins. Check your configuration or review plugin documentation to resolve. You can also explore other available plugins.', configureBackend: - "Configure the '@red-hat-developer-hub/backstage-plugin-marketplace-backend' plugin.", + "Configure the '@red-hat-developer-hub/backstage-plugin-extensions-backend' plugin.", }, // Alerts and warnings @@ -392,10 +392,10 @@ export const marketplaceMessages = { }; /** - * Translation reference for marketplace plugin + * Translation reference for extensions plugin * @alpha */ -export const marketplaceTranslationRef = createTranslationRef({ - id: 'plugin.marketplace', - messages: marketplaceMessages, +export const extensionsTranslationRef = createTranslationRef({ + id: 'plugin.extensions', + messages: extensionsMessages, }); diff --git a/workspaces/marketplace/plugins/marketplace/src/translations/utils.ts b/workspaces/extensions/plugins/extensions/src/translations/utils.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/translations/utils.ts rename to workspaces/extensions/plugins/extensions/src/translations/utils.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/types.ts b/workspaces/extensions/plugins/extensions/src/types.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/types.ts rename to workspaces/extensions/plugins/extensions/src/types.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/utils.test.ts b/workspaces/extensions/plugins/extensions/src/utils.test.ts similarity index 99% rename from workspaces/marketplace/plugins/marketplace/src/utils.test.ts rename to workspaces/extensions/plugins/extensions/src/utils.test.ts index 82a755db64..c5fadb8b03 100644 --- a/workspaces/marketplace/plugins/marketplace/src/utils.test.ts +++ b/workspaces/extensions/plugins/extensions/src/utils.test.ts @@ -19,7 +19,7 @@ import { getCategoryTagDisplayInfo, } from './utils'; -describe('marketplace utils', () => { +describe('extensions utils', () => { const packages = { 'backstage-community-plugin-quay': './dynamic-plugins/dist/backstage-community-plugin-quay', diff --git a/workspaces/marketplace/plugins/marketplace/src/utils.ts b/workspaces/extensions/plugins/extensions/src/utils.ts similarity index 89% rename from workspaces/marketplace/plugins/marketplace/src/utils.ts rename to workspaces/extensions/plugins/extensions/src/utils.ts index 540e827b6d..3a8062756f 100644 --- a/workspaces/marketplace/plugins/marketplace/src/utils.ts +++ b/workspaces/extensions/plugins/extensions/src/utils.ts @@ -16,9 +16,9 @@ import { Pair, parseDocument, Scalar, YAMLSeq, stringify } from 'yaml'; import { JsonObject } from '@backstage/types'; -import { MarketplacePluginInstallStatus } from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; +import { ExtensionsPluginInstallStatus } from '@red-hat-developer-hub/backstage-plugin-extensions-common'; import { TranslationFunction } from '@backstage/core-plugin-api/alpha'; -import { marketplaceTranslationRef } from './translations'; +import { extensionsTranslationRef } from './translations'; import { PluginPermissions, Permission } from './types'; export enum ExtensionsStatus { @@ -111,7 +111,7 @@ export const applyContent = ( export const getErrorMessage = ( reason: ExtensionsStatus, message: string, - t: TranslationFunction, + t: TranslationFunction, ) => { if (reason === ExtensionsStatus.FILE_CONFIG_VALUE_MISSING) { return { @@ -146,7 +146,7 @@ export const getErrorMessage = ( export const getPluginActionTooltipMessage = ( isProductionEnvironment: boolean, permissions: PluginPermissions | null, - t: TranslationFunction, + t: TranslationFunction, extensionsDisabled?: boolean, missingDynamicArtifact?: boolean, isPlugin: boolean = true, @@ -174,16 +174,16 @@ export const getPluginActionTooltipMessage = ( }; export const isPluginInstalled = ( - pluginInstallStatus: MarketplacePluginInstallStatus | undefined, + pluginInstallStatus: ExtensionsPluginInstallStatus | undefined, ) => { if (!pluginInstallStatus) { return false; } return ( - pluginInstallStatus === MarketplacePluginInstallStatus.Installed || - pluginInstallStatus === MarketplacePluginInstallStatus.UpdateAvailable || - pluginInstallStatus === MarketplacePluginInstallStatus.PartiallyInstalled || - pluginInstallStatus === MarketplacePluginInstallStatus.Disabled + pluginInstallStatus === ExtensionsPluginInstallStatus.Installed || + pluginInstallStatus === ExtensionsPluginInstallStatus.UpdateAvailable || + pluginInstallStatus === ExtensionsPluginInstallStatus.PartiallyInstalled || + pluginInstallStatus === ExtensionsPluginInstallStatus.Disabled ); }; diff --git a/workspaces/marketplace/plugins/marketplace/src/utils/downloadPackageYaml.ts b/workspaces/extensions/plugins/extensions/src/utils/downloadPackageYaml.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/utils/downloadPackageYaml.ts rename to workspaces/extensions/plugins/extensions/src/utils/downloadPackageYaml.ts diff --git a/workspaces/marketplace/plugins/marketplace/src/utils/pluginProcessing.test.ts b/workspaces/extensions/plugins/extensions/src/utils/pluginProcessing.test.ts similarity index 82% rename from workspaces/marketplace/plugins/marketplace/src/utils/pluginProcessing.test.ts rename to workspaces/extensions/plugins/extensions/src/utils/pluginProcessing.test.ts index 496ae955f4..07878dc9cf 100644 --- a/workspaces/marketplace/plugins/marketplace/src/utils/pluginProcessing.test.ts +++ b/workspaces/extensions/plugins/extensions/src/utils/pluginProcessing.test.ts @@ -27,9 +27,9 @@ describe('pluginProcessing', () => { it('should handle Red Hat Developer Hub plugins', () => { expect( getReadableName( - '@red-hat-developer-hub/backstage-plugin-marketplace-dynamic', + '@red-hat-developer-hub/backstage-plugin-extensions-dynamic', ), - ).toBe('Marketplace'); + ).toBe('Extensions'); expect( getReadableName( '@red-hat-developer-hub/backstage-plugin-global-header-dynamic', @@ -45,15 +45,15 @@ describe('pluginProcessing', () => { it('should handle Red Hat Developer Hub plugins with backend suffix', () => { expect( getReadableName( - '@red-hat-developer-hub/backstage-plugin-marketplace-backend-dynamic', + '@red-hat-developer-hub/backstage-plugin-extensions-backend-dynamic', ), - ).toBe('Marketplace'); + ).toBe('Extensions'); }); it('should handle Red Hat Developer Hub display names with spaces', () => { expect( - getReadableName('@Red Hat Developer Hub/Backstage Plugin Marketplace'), - ).toBe('Marketplace'); + getReadableName('@Red Hat Developer Hub/Backstage Plugin Extensions'), + ).toBe('Extensions'); expect( getReadableName('@Red Hat Developer Hub/Backstage Plugin Quickstart'), ).toBe('Quickstart'); @@ -101,14 +101,14 @@ describe('pluginProcessing', () => { it('should normalize Red Hat Developer Hub plugins for deduplication', () => { expect( getBasePluginName( - '@red-hat-developer-hub/backstage-plugin-marketplace-dynamic', + '@red-hat-developer-hub/backstage-plugin-extensions-dynamic', ), - ).toBe('marketplace'); + ).toBe('extensions'); expect( getBasePluginName( - '@red-hat-developer-hub/backstage-plugin-marketplace-backend-dynamic', + '@red-hat-developer-hub/backstage-plugin-extensions-backend-dynamic', ), - ).toBe('marketplace'); + ).toBe('extensions'); expect( getBasePluginName( '@red-hat-developer-hub/backstage-plugin-global-header-dynamic', @@ -118,10 +118,8 @@ describe('pluginProcessing', () => { it('should normalize display names to base names', () => { expect( - getBasePluginName( - '@Red Hat Developer Hub/Backstage Plugin Marketplace', - ), - ).toBe('marketplace'); + getBasePluginName('@Red Hat Developer Hub/Backstage Plugin Extensions'), + ).toBe('extensions'); expect( getBasePluginName( '@Red Hat Developer Hub/Backstage Plugin Dynamic Home Page', @@ -150,13 +148,13 @@ describe('pluginProcessing', () => { describe('processPluginsForDisplay', () => { const mockPlugins: DynamicPluginInfo[] = [ { - name: '@red-hat-developer-hub/backstage-plugin-marketplace-dynamic', + name: '@red-hat-developer-hub/backstage-plugin-extensions-dynamic', version: '0.9.2', role: 'frontend-plugin', platform: 'web', }, { - name: '@red-hat-developer-hub/backstage-plugin-marketplace-backend-dynamic', + name: '@red-hat-developer-hub/backstage-plugin-extensions-backend-dynamic', version: '0.8.0', role: 'backend-plugin', platform: 'node', @@ -178,22 +176,22 @@ describe('pluginProcessing', () => { it('should deduplicate plugins with frontend/backend variants', () => { const result = processPluginsForDisplay(mockPlugins); - // Should have 3 unique plugins (marketplace deduped, global-header, acr) + // Should have 3 unique plugins (extensions deduped, global-header, acr) expect(result).toHaveLength(3); - // Check that marketplace is present (should prefer frontend) - const marketplacePlugin = result.find(p => p.name === 'Marketplace'); - expect(marketplacePlugin).toBeDefined(); - expect(marketplacePlugin?.role).toBe('frontend-plugin'); - expect(marketplacePlugin?.version).toBe('0.9.2'); // Frontend version + // Check that extensions is present (should prefer frontend) + const extensionsPlugin = result.find(p => p.name === 'Extensions'); + expect(extensionsPlugin).toBeDefined(); + expect(extensionsPlugin?.role).toBe('frontend-plugin'); + expect(extensionsPlugin?.version).toBe('0.9.2'); // Frontend version }); it('should prefer frontend plugins over backend when deduplicating', () => { const result = processPluginsForDisplay(mockPlugins); - const marketplacePlugin = result.find(p => p.name === 'Marketplace'); + const extensionsPlugin = result.find(p => p.name === 'Extensions'); - expect(marketplacePlugin?.role).toBe('frontend-plugin'); - expect(marketplacePlugin?.platform).toBe('web'); + expect(extensionsPlugin?.role).toBe('frontend-plugin'); + expect(extensionsPlugin?.platform).toBe('web'); }); it('should preserve single plugins without duplicates', () => { @@ -238,13 +236,13 @@ describe('pluginProcessing', () => { describe('getUniquePluginsCount', () => { const mockPlugins: DynamicPluginInfo[] = [ { - name: '@red-hat-developer-hub/backstage-plugin-marketplace-dynamic', + name: '@red-hat-developer-hub/backstage-plugin-extensions-dynamic', version: '0.9.2', role: 'frontend-plugin', platform: 'web', }, { - name: '@red-hat-developer-hub/backstage-plugin-marketplace-backend-dynamic', + name: '@red-hat-developer-hub/backstage-plugin-extensions-backend-dynamic', version: '0.8.0', role: 'backend-plugin', platform: 'node', @@ -259,7 +257,7 @@ describe('pluginProcessing', () => { it('should return correct count after deduplication', () => { const count = getUniquePluginsCount(mockPlugins); - expect(count).toBe(2); // marketplace (deduped) + global-header + expect(count).toBe(2); // extensions (deduped) + global-header }); it('should return 0 for empty plugin list', () => { diff --git a/workspaces/marketplace/plugins/marketplace/src/utils/pluginProcessing.ts b/workspaces/extensions/plugins/extensions/src/utils/pluginProcessing.ts similarity index 100% rename from workspaces/marketplace/plugins/marketplace/src/utils/pluginProcessing.ts rename to workspaces/extensions/plugins/extensions/src/utils/pluginProcessing.ts diff --git a/workspaces/marketplace/rbac-policy.csv b/workspaces/extensions/rbac-policy.csv similarity index 100% rename from workspaces/marketplace/rbac-policy.csv rename to workspaces/extensions/rbac-policy.csv diff --git a/workspaces/marketplace/tsconfig.json b/workspaces/extensions/tsconfig.json similarity index 100% rename from workspaces/marketplace/tsconfig.json rename to workspaces/extensions/tsconfig.json diff --git a/workspaces/marketplace/yarn.lock b/workspaces/extensions/yarn.lock similarity index 99% rename from workspaces/marketplace/yarn.lock rename to workspaces/extensions/yarn.lock index 8bf116a44d..7de7c56186 100644 --- a/workspaces/marketplace/yarn.lock +++ b/workspaces/extensions/yarn.lock @@ -6396,9 +6396,9 @@ __metadata: languageName: node linkType: hard -"@internal/marketplace@workspace:.": +"@internal/extensions@workspace:.": version: 0.0.0-use.local - resolution: "@internal/marketplace@workspace:." + resolution: "@internal/extensions@workspace:." dependencies: "@backstage/cli": ^0.34.5 "@backstage/e2e-test-utils": ^0.1.1 @@ -11471,9 +11471,9 @@ __metadata: languageName: node linkType: hard -"@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace@workspace:^, @red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace@workspace:plugins/catalog-backend-module-marketplace": +"@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions@workspace:^, @red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions@workspace:plugins/catalog-backend-module-extensions": version: 0.0.0-use.local - resolution: "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace@workspace:plugins/catalog-backend-module-marketplace" + resolution: "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions@workspace:plugins/catalog-backend-module-extensions" dependencies: "@backstage/backend-dynamic-feature-service": ^0.7.6 "@backstage/backend-plugin-api": ^1.5.0 @@ -11482,10 +11482,11 @@ __metadata: "@backstage/catalog-model": ^1.7.6 "@backstage/cli": ^0.34.5 "@backstage/cli-common": ^0.1.15 + "@backstage/config": ^1.3.6 "@backstage/plugin-catalog-common": ^1.1.7 "@backstage/plugin-catalog-node": ^1.20.0 "@backstage/types": ^1.2.2 - "@red-hat-developer-hub/backstage-plugin-marketplace-common": "workspace:^" + "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^" "@types/glob": ^8.1.0 find-root: ^1.1.0 glob: ^8.1.0 @@ -11494,9 +11495,9 @@ __metadata: languageName: unknown linkType: soft -"@red-hat-developer-hub/backstage-plugin-marketplace-backend@workspace:^, @red-hat-developer-hub/backstage-plugin-marketplace-backend@workspace:plugins/marketplace-backend": +"@red-hat-developer-hub/backstage-plugin-extensions-backend@workspace:^, @red-hat-developer-hub/backstage-plugin-extensions-backend@workspace:plugins/extensions-backend": version: 0.0.0-use.local - resolution: "@red-hat-developer-hub/backstage-plugin-marketplace-backend@workspace:plugins/marketplace-backend" + resolution: "@red-hat-developer-hub/backstage-plugin-extensions-backend@workspace:plugins/extensions-backend" dependencies: "@backstage/backend-defaults": ^0.13.1 "@backstage/backend-dynamic-feature-service": ^0.7.6 @@ -11511,7 +11512,7 @@ __metadata: "@backstage/plugin-permission-common": ^0.9.3 "@backstage/plugin-permission-node": ^0.10.6 "@backstage/types": ^1.2.2 - "@red-hat-developer-hub/backstage-plugin-marketplace-common": "workspace:^" + "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^" "@types/express": "*" "@types/supertest": ^2.0.12 express: ^4.17.1 @@ -11523,9 +11524,9 @@ __metadata: languageName: unknown linkType: soft -"@red-hat-developer-hub/backstage-plugin-marketplace-common@workspace:^, @red-hat-developer-hub/backstage-plugin-marketplace-common@workspace:plugins/marketplace-common": +"@red-hat-developer-hub/backstage-plugin-extensions-common@workspace:^, @red-hat-developer-hub/backstage-plugin-extensions-common@workspace:plugins/extensions-common": version: 0.0.0-use.local - resolution: "@red-hat-developer-hub/backstage-plugin-marketplace-common@workspace:plugins/marketplace-common" + resolution: "@red-hat-developer-hub/backstage-plugin-extensions-common@workspace:plugins/extensions-common" dependencies: "@backstage/backend-plugin-api": ^1.5.0 "@backstage/backend-test-utils": ^1.10.0 @@ -11541,9 +11542,9 @@ __metadata: languageName: unknown linkType: soft -"@red-hat-developer-hub/backstage-plugin-marketplace@workspace:^, @red-hat-developer-hub/backstage-plugin-marketplace@workspace:plugins/marketplace": +"@red-hat-developer-hub/backstage-plugin-extensions@workspace:^, @red-hat-developer-hub/backstage-plugin-extensions@workspace:plugins/extensions": version: 0.0.0-use.local - resolution: "@red-hat-developer-hub/backstage-plugin-marketplace@workspace:plugins/marketplace" + resolution: "@red-hat-developer-hub/backstage-plugin-extensions@workspace:plugins/extensions" dependencies: "@backstage/catalog-client": ^1.12.1 "@backstage/cli": ^0.34.5 @@ -11561,7 +11562,7 @@ __metadata: "@mui/icons-material": ^5.16.7 "@mui/material": ^5.12.2 "@mui/styles": 5.18.0 - "@red-hat-developer-hub/backstage-plugin-marketplace-common": "workspace:^" + "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^" "@red-hat-developer-hub/backstage-plugin-theme": ^0.11.0 "@scalprum/react-core": 0.11.1 "@tanstack/react-query": ^5.60.5 @@ -11596,15 +11597,15 @@ __metadata: languageName: node linkType: hard -"@red-hat-developer-hub/marketplace-cli@workspace:packages/cli": +"@red-hat-developer-hub/extensions-cli@workspace:packages/cli": version: 0.0.0-use.local - resolution: "@red-hat-developer-hub/marketplace-cli@workspace:packages/cli" + resolution: "@red-hat-developer-hub/extensions-cli@workspace:packages/cli" dependencies: "@backstage/catalog-model": ^1.7.6 "@backstage/cli": ^0.34.5 "@backstage/errors": ^1.2.7 "@backstage/types": ^1.2.2 - "@red-hat-developer-hub/backstage-plugin-marketplace-common": "workspace:^" + "@red-hat-developer-hub/backstage-plugin-extensions-common": "workspace:^" "@types/fs-extra": ^11.0.4 chalk: ^4.1.2 commander: ^12.0.0 @@ -11613,7 +11614,7 @@ __metadata: inquirer: ^12.4.3 yaml: ^2.7.0 bin: - marketplace-cli: bin/marketplace-cli + extensions-cli: bin/extensions-cli languageName: unknown linkType: soft @@ -15958,7 +15959,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@playwright/test": 1.57.0 - "@red-hat-developer-hub/backstage-plugin-marketplace": "workspace:^" + "@red-hat-developer-hub/backstage-plugin-extensions": "workspace:^" "@red-hat-developer-hub/backstage-plugin-theme": ^0.11.0 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 @@ -16612,8 +16613,8 @@ __metadata: "@backstage/plugin-search-backend-module-techdocs": ^0.4.8 "@backstage/plugin-search-backend-node": ^1.3.17 "@backstage/plugin-techdocs-backend": ^2.1.2 - "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace": "workspace:^" - "@red-hat-developer-hub/backstage-plugin-marketplace-backend": "workspace:^" + "@red-hat-developer-hub/backstage-plugin-catalog-backend-module-extensions": "workspace:^" + "@red-hat-developer-hub/backstage-plugin-extensions-backend": "workspace:^" app: "link:../app" better-sqlite3: ^9.0.0 node-gyp: ^10.0.0 diff --git a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/BaseEntityProvider.ts b/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/BaseEntityProvider.ts deleted file mode 100644 index 0cf8d1cd8b..0000000000 --- a/workspaces/marketplace/plugins/catalog-backend-module-marketplace/src/providers/BaseEntityProvider.ts +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api'; -import { - ANNOTATION_LOCATION, - ANNOTATION_ORIGIN_LOCATION, - Entity, -} from '@backstage/catalog-model'; -import { - EntityProvider, - EntityProviderConnection, -} from '@backstage/plugin-catalog-node'; - -import { findTopmostFolder, readYamlFiles } from '../utils/file-utils'; -import { JsonFileData } from '../types'; - -/** - * @public - */ -export abstract class BaseEntityProvider - implements EntityProvider -{ - private connection?: EntityProviderConnection; - private taskRunner: SchedulerServiceTaskRunner; - - constructor(taskRunner: SchedulerServiceTaskRunner) { - this.taskRunner = taskRunner; - } - - abstract getProviderName(): string; - abstract getKind(): string; - - getEntities(allEntities: JsonFileData[]): T[] { - if (allEntities.length === 0) { - return []; - } - return allEntities - .filter(d => d.content.kind === this.getKind()) - .map(file => ({ - ...file.content, - metadata: { - ...file.content.metadata, - annotations: { - ...file.content.metadata.annotations, - [ANNOTATION_LOCATION]: `file:${this.getProviderName()}`, - [ANNOTATION_ORIGIN_LOCATION]: `file:${this.getProviderName()}`, - }, - }, - })); - } - - async connect(connection: EntityProviderConnection): Promise { - this.connection = connection; - await this.taskRunner.run({ - id: this.getProviderName(), - fn: async () => { - await this.run(); - }, - }); - } - - async run(): Promise { - if (!this.connection) { - throw new Error('Not initialized'); - } - - const marketplaceFilePath = findTopmostFolder('marketplace'); - - let yamlData: JsonFileData[] = []; - if (marketplaceFilePath) { - try { - yamlData = readYamlFiles(marketplaceFilePath); - } catch (error) { - console.error(error.message); - } - } - - const entities: T[] = this.getEntities(yamlData); - - await this.connection.applyMutation({ - type: 'full', - entities: entities.map(entity => ({ - entity, - locationKey: `file:${this.getProviderName()}`, - })), - }); - } -} diff --git a/workspaces/marketplace/plugins/marketplace-common/README.md b/workspaces/marketplace/plugins/marketplace-common/README.md deleted file mode 100644 index c276763c40..0000000000 --- a/workspaces/marketplace/plugins/marketplace-common/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# @red-hat-developer-hub/backstage-plugin-marketplace-common - -Welcome to the common package for the marketplace plugin! - -_This plugin was created through the Backstage CLI_ diff --git a/workspaces/marketplace/plugins/marketplace/src/labels.ts b/workspaces/marketplace/plugins/marketplace/src/labels.ts deleted file mode 100644 index d242d361ed..0000000000 --- a/workspaces/marketplace/plugins/marketplace/src/labels.ts +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - MarketplacePluginInstallStatus, - MarketplacePackageInstallStatus, -} from '@red-hat-developer-hub/backstage-plugin-marketplace-common'; -import { TranslationFunction } from '@backstage/core-plugin-api/alpha'; -import { marketplaceTranslationRef } from './translations'; - -// Translation-aware label mapping functions that replace the static mappings -export const mapBackstageRoleToLabel = ( - role: string, - t: TranslationFunction, -): string => { - const roleMap: Record = { - 'backend-plugin': t('role.backend'), - 'backend-plugin-module': t('role.backendModule'), - 'frontend-plugin': t('role.frontend'), - }; - return roleMap[role] || role; -}; - -export const mapMarketplacePluginInstallStatusToLabel = ( - status: MarketplacePluginInstallStatus, - t: TranslationFunction, -): string => { - const statusMap: Record = { - [MarketplacePluginInstallStatus.NotInstalled]: t('status.notInstalled'), - [MarketplacePluginInstallStatus.Installed]: t('status.installed'), - [MarketplacePluginInstallStatus.Disabled]: t('status.disabled'), - [MarketplacePluginInstallStatus.PartiallyInstalled]: t( - 'status.partiallyInstalled', - ), - [MarketplacePluginInstallStatus.UpdateAvailable]: t( - 'status.updateAvailable', - ), - }; - return statusMap[status]; -}; - -export const mapMarketplacePluginInstallStatusToButton = ( - status: MarketplacePluginInstallStatus, - t: TranslationFunction, -): string => { - const buttonMap: Record = { - [MarketplacePluginInstallStatus.NotInstalled]: t('button.install'), - [MarketplacePluginInstallStatus.Installed]: t('button.uninstall'), - [MarketplacePluginInstallStatus.Disabled]: t('button.enable'), - [MarketplacePluginInstallStatus.PartiallyInstalled]: t('button.uninstall'), - [MarketplacePluginInstallStatus.UpdateAvailable]: t('button.update'), - }; - return buttonMap[status]; -}; - -export const mapMarketplacePluginInstallStatusToInstallPageButton = ( - status: MarketplacePluginInstallStatus, - t: TranslationFunction, -): string => { - const buttonMap: Record = { - [MarketplacePluginInstallStatus.NotInstalled]: t('button.install'), - [MarketplacePluginInstallStatus.Installed]: t('button.save'), - [MarketplacePluginInstallStatus.Disabled]: t('button.save'), - [MarketplacePluginInstallStatus.PartiallyInstalled]: t('button.save'), - [MarketplacePluginInstallStatus.UpdateAvailable]: t('button.save'), - }; - return buttonMap[status]; -}; - -export const mapPackageInstallStatusToLabel = ( - status: MarketplacePackageInstallStatus, - t: TranslationFunction, -): string => { - const statusMap: Record = { - [MarketplacePackageInstallStatus.NotInstalled]: t('status.notInstalled'), - [MarketplacePackageInstallStatus.Installed]: t('status.installed'), - [MarketplacePackageInstallStatus.Disabled]: t('status.disabled'), - [MarketplacePackageInstallStatus.UpdateAvailable]: t( - 'status.updateAvailable', - ), - }; - return statusMap[status]; -}; - -export const mapPackageInstallStatusToButton = ( - status: MarketplacePackageInstallStatus, - t: TranslationFunction, -): string => { - const buttonMap: Record = { - [MarketplacePackageInstallStatus.NotInstalled]: t('button.install'), - [MarketplacePackageInstallStatus.Installed]: t('button.uninstall'), - [MarketplacePackageInstallStatus.Disabled]: t('button.enable'), - [MarketplacePackageInstallStatus.UpdateAvailable]: t('button.update'), - }; - return buttonMap[status]; -};