Skip to content

Commit f56908a

Browse files
authored
feat(extensions): Introduce fetch endpoints for configuration (#740)
* Introduce configuration get endpoints Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Add bulk-import to examples Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Return yaml format Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Do not throw error when config not found Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Disable installation if invalid config file instead of throwing Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Deduplicate configValidation Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Change namespace Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Disable line wrap Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Use array Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Return error objects Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Remove installation type Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Use set Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Return json from config endpoints Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Update api report Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Rename Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Fix sonarqube issues Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Add not found test cases Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Fix sonarqube issue to safely access value Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> * Introduce ConfigurationResponse type Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com> --------- Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com>
1 parent a40d936 commit f56908a

30 files changed

Lines changed: 1452 additions & 66 deletions
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@red-hat-developer-hub/backstage-plugin-marketplace-backend': minor
3+
'@red-hat-developer-hub/backstage-plugin-marketplace-common': minor
4+
---
5+
6+
Introduces GET endpoints for dynamic plugins configuration: `/package/:namespace/:name/configuration` and `/plugin/:namespace/:name/configuration`. Introduces optional config value `extensions.installation` which is used for installation configuration.

workspaces/marketplace/app-config.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,10 @@ kubernetes:
117117
permission:
118118
# setting this to `false` will disable permissions
119119
enabled: true
120+
121+
extensions:
122+
### Example for how to enable installation to a file.
123+
# installation:
124+
# enabled: true
125+
# saveToSingleFile:
126+
# file: ${EXTENSIONS_PLUGIN_CONFIG}

workspaces/marketplace/examples/all-packages.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,7 @@ spec:
1212
- ./packages/backstage-community-plugin-quay.yaml
1313
- ./packages/backstage-community-plugin-tekton.yaml
1414
- ./packages/backstage-community-plugin-topology.yaml
15+
- ./packages/red-hat-developer-hub-backstage-plugin-bulk-import.yaml
16+
- ./packages/red-hat-developer-hub-backstage-plugin-bulk-import-backend.yaml
1517
- ./packages/red-hat-developer-hub-backstage-plugin-marketplace-backend.yaml
1618
- ./packages/red-hat-developer-hub-backstage-plugin-marketplace.yaml

workspaces/marketplace/examples/all-plugins.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ spec:
88
targets:
99
- ./plugins/3scale.yaml
1010
- ./plugins/acr.yaml
11+
- ./plugins/bulk-import.yaml
1112
- ./plugins/keycloak.yaml
1213
- ./plugins/marketplace.yaml
1314
- ./plugins/no-icon-no-description.yaml
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apiVersion: extensions.backstage.io/v1alpha1
2+
kind: Package
3+
metadata:
4+
name: red-hat-developer-hub-backstage-plugin-bulk-import-backend
5+
namespace: marketplace-plugin-demo
6+
title: '@red-hat-developer-hub/backstage-plugin-bulk-import-backend'
7+
links:
8+
- url: https://red.ht/rhdh
9+
title: Homepage
10+
- url: https://issues.redhat.com/browse/RHIDP
11+
title: Bugs
12+
- title: Source Code
13+
url: https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-bulk-import-backend-dynamic
14+
annotations:
15+
backstage.io/source-location: url
16+
https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-bulk-import-backend-dynamic
17+
tags: []
18+
spec:
19+
packageName: '@red-hat-developer-hub/backstage-plugin-bulk-import-backend'
20+
dynamicArtifact: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import-backend-dynamic
21+
version: 6.0.0
22+
backstage:
23+
role: backend-plugin
24+
supportedVersions: 1.36.1
25+
author: Red Hat
26+
support: tech-preview
27+
lifecycle: active
28+
partOf:
29+
- red-hat-developer-hub-backstage-plugin-bulk-import-backend
30+
appConfigExamples: []
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
apiVersion: extensions.backstage.io/v1alpha1
2+
kind: Package
3+
metadata:
4+
name: red-hat-developer-hub-backstage-plugin-bulk-import
5+
namespace: marketplace-plugin-demo
6+
title: '@red-hat-developer-hub/backstage-plugin-bulk-import'
7+
links:
8+
- url: https://red.ht/rhdh
9+
title: Homepage
10+
- url: https://issues.redhat.com/browse/RHIDP
11+
title: Bugs
12+
- title: Source Code
13+
url: https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-bulk-import
14+
annotations:
15+
backstage.io/source-location: url
16+
https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-bulk-import
17+
tags: []
18+
spec:
19+
packageName: '@red-hat-developer-hub/backstage-plugin-bulk-import'
20+
dynamicArtifact: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import
21+
version: 1.12.1
22+
backstage:
23+
role: frontend-plugin
24+
supportedVersions: 1.36.1
25+
author: Red Hat
26+
support: tech-preview
27+
lifecycle: active
28+
partOf:
29+
- red-hat-developer-hub-backstage-plugin-bulk-import
30+
appConfigExamples:
31+
- title: Default configuration
32+
content:
33+
dynamicPlugins:
34+
frontend:
35+
red-hat-developer-hub.backstage-plugin-bulk-import:
36+
appIcons:
37+
- name: bulkImportIcon
38+
importName: BulkImportIcon
39+
dynamicRoutes:
40+
- path: /bulk-import/repositories
41+
importName: BulkImportPage
42+
menuItem:
43+
icon: bulkImportIcon
44+
text: Bulk import
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# yaml-language-server: $schema=https://raw.githubusercontent.com/redhat-developer/rhdh-plugins/refs/heads/main/workspaces/marketplace/json-schema/plugins.json
2+
apiVersion: extensions.backstage.io/v1alpha1
3+
kind: Plugin
4+
metadata:
5+
name: bulk-import
6+
namespace: marketplace-plugin-demo
7+
title: Bulk Import
8+
description: |
9+
With this plugin you can import multiple code repositories into your software catalog at once. The plugin provides
10+
a simple to use interface that can list all the repositories in your organization and allows you to select the ones
11+
you want to import.
12+
annotations:
13+
extensions.backstage.io/pre-installed: 'true'
14+
tags:
15+
- software-catalog
16+
17+
links:
18+
- url: https://red.ht/rhdh
19+
title: Homepage
20+
- url: https://issues.redhat.com/browse/RHIDP
21+
title: Bugs
22+
- title: Documentation for Red Hat Developer Hub
23+
url: https://docs.redhat.com/en/documentation/red_hat_developer_hub
24+
- title: Source Code
25+
url: https://github.com/redhat-developer/rhdh/tree/main/dynamic-plugins/wrappers/
26+
27+
spec:
28+
author: Red Hat
29+
support: tech-preview
30+
lifecycle: active
31+
publisher: Red Hat
32+
33+
categories:
34+
- Software Catalog # One category will show up on the tile view
35+
36+
highlights:
37+
- Fills your software-catalog
38+
- Creates `catalog-info.yaml` files
39+
- Registers your code
40+
- Intuative UI
41+
42+
description: |
43+
With this plugin you can import multiple code repositories into your software catalog with ease. The plugin provides
44+
a simple to use interface that can list all the repositories in your organization and allows you to select the ones
45+
you want to import. The plugin will then create a `catalog-info.yaml` file for each repository and register the code
46+
in your software catalog.
47+
48+
Using a wizard style approach, you can quickly fill your software catalog with the projects you care about and share
49+
information with your team and organization. Repositories listed in your catalog can be easily discovered using search
50+
and filters, and you can view detailed information about each repository, including the code, documentation, and more.
51+
52+
## Adding The Plugin To Red Hat Developer Hub
53+
54+
See the [Red Hat Developer Hub documentation](https://docs.redhat.com/en/documentation/red_hat_developer_hub)
55+
for further instructions on how to add, enable, and configure plugins in your instance.
56+
57+
## Configuring The Plugin ##
58+
59+
Plugins often need additional configuration to work correctly - particularly those that integrate with other
60+
systems. See the original source code repository, the software vendor, or the [Red Hat Developer Hub documentation](https://docs.redhat.com/en/documentation/red_hat_developer_hub)
61+
for further details regarding the configuration required.
62+
63+
# Images are base 64 encoded SVGs (below is a blank square from the mockup)
64+
icon: data:image/svg+xml;base64,
65+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjM4IiBoZWlnaHQ9IjM4IiB2aWV3Qm94PSIwIDAgMzggMzgiPjxnIGlkPSJ1dWlkLTc5MDFmODc4LWNlMDAtNDQxZi1hYzI2LWRkZDM2NTRkNGY3OSI+PHJlY3QgeD0iMSIgeT0iMSIgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iOSIgcnk9IjkiIHN0cm9rZS13aWR0aD0iMCIvPjxwYXRoIGQ9Im0yOCwyLjI1YzQuMjczMzYsMCw3Ljc1LDMuNDc2NjQsNy43NSw3Ljc1djE4YzAsNC4yNzMzNi0zLjQ3NjY0LDcuNzUtNy43NSw3Ljc1SDEwYy00LjI3MzM2LDAtNy43NS0zLjQ3NjY0LTcuNzUtNy43NVYxMGMwLTQuMjczMzYsMy40NzY2NC03Ljc1LDcuNzUtNy43NWgxOG0wLTEuMjVIMTBDNS4wMjk0NCwxLDEsNS4wMjk0MywxLDEwdjE4YzAsNC45NzA1Nyw0LjAyOTQ0LDksOSw5aDE4YzQuOTcwNTYsMCw5LTQuMDI5NDMsOS05VjEwYzAtNC45NzA1Ny00LjAyOTQ0LTktOS05aDBaIiBmaWxsPSIjNGQ0ZDRkIiBzdHJva2Utd2lkdGg9IjAiLz48L2c+PGcgaWQ9InV1aWQtYzNjYTY4OTEtNmUxOC00MmNiLTg1MmItM2RlZGQ2YzMxZTY4Ij48cGF0aCBkPSJtMjYuNDQyMzgsMjUuNTU4MTFsLTMuNzczNzQtMy43NzM3NGMuNTkxNDMtLjc3NzA0Ljk1NjM2LTEuNzM0OC45NTYzNi0yLjc4NDM2LDAtMi41NTAyOS0yLjA3NTItNC42MjUtNC42MjUtNC42MjUtMi41NTAyOSwwLTQuNjI1LDIuMDc0NzEtNC42MjUsNC42MjVzMi4wNzQ3MSw0LjYyNSw0LjYyNSw0LjYyNWMxLjA0OTQ0LDAsMi4wMDcyNi0uMzY0OTMsMi43ODQzNi0uOTU2MzZsMy43NzMyNSwzLjc3MzI1Yy4xMjIwNy4xMjIwNy4yODIyMy4xODMxMS40NDIzOC4xODMxMXMuMzIwMzEtLjA2MTA0LjQ0MjM4LS4xODMxMWMuMjQzMTYtLjI0NDE0LjI0MzE2LS42Mzk2NSwwLS44ODM3OVptLTEwLjgxNzM4LTYuNTU4MTFjMC0xLjg2MDg0LDEuNTE0MTYtMy4zNzUsMy4zNzUtMy4zNzUsMS44NjEzMywwLDMuMzc1LDEuNTE0MTYsMy4zNzUsMy4zNzVzLTEuNTEzNjcsMy4zNzUtMy4zNzUsMy4zNzVjLTEuODYwODQsMC0zLjM3NS0xLjUxNDE2LTMuMzc1LTMuMzc1WiIgZmlsbD0iI2UwMCIgc3Ryb2tlLXdpZHRoPSIwIi8+PHBhdGggZD0ibTI3LDEzLjYyNWMxLjQ0NzI3LDAsMi42MjUtMS4xNzc3MywyLjYyNS0yLjYyNXMtMS4xNzc3My0yLjYyNS0yLjYyNS0yLjYyNS0yLjYyNSwxLjE3NzczLTIuNjI1LDIuNjI1YzAsLjQ5NjcuMTQ2NjEuOTU2NTQuMzg3MjcsMS4zNTMwM2wtMS4yMDQ2NSwxLjIwNTA4Yy0uMjQ0MTQuMjQ0MTQtLjI0MzE2LjYzOTY1LjAwMDk4Ljg4Mzc5LjEyMTA5LjEyMjA3LjI4MTI1LjE4MzExLjQ0MTQxLjE4MzExcy4zMjAzMS0uMDYxMDQuNDQyMzgtLjE4MzExbDEuMjA0MS0xLjIwNDQ3Yy4zOTY2MS4yNDA5MS44NTY2My4zODc1NywxLjM1MzUyLjM4NzU3Wm0wLTRjLjc1NzgxLDAsMS4zNzUuNjE2NywxLjM3NSwxLjM3NXMtLjYxNzE5LDEuMzc1LTEuMzc1LDEuMzc1Yy0uMzc4MTEsMC0uNzIxMDctLjE1MzY5LS45Njk5Ny0uNDAxNzMtLjAwMDczLS4wMDA3My0uMDAwOTgtLjAwMTgzLS4wMDE3MS0uMDAyNTYtLjAwMDYxLS4wMDA2MS0uMDAxNTMtLjAwMDc5LS4wMDIxNC0uMDAxNC0uMjQ3NjItLjI0ODc4LS40MDExOC0uNTkxMzctLjQwMTE4LS45NjkzLDAtLjc1ODMuNjE3MTktMS4zNzUsMS4zNzUtMS4zNzVaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjAiLz48cGF0aCBkPSJtMTksOC4zNzVjLTEuMTcxODgsMC0yLjEyNS45NTMxMi0yLjEyNSwyLjEyNXMuOTUzMTIsMi4xMjUsMi4xMjUsMi4xMjUsMi4xMjUtLjk1MzEyLDIuMTI1LTIuMTI1LS45NTMxMi0yLjEyNS0yLjEyNS0yLjEyNVptMCwzYy0uNDgyNDIsMC0uODc1LS4zOTI1OC0uODc1LS44NzVzLjM5MjU4LS44NzUuODc1LS44NzUuODc1LjM5MjU4Ljg3NS44NzUtLjM5MjU4Ljg3NS0uODc1Ljg3NVoiIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iMCIvPjxwYXRoIGQ9Im0xOSwyNS4zNzVjLTEuMTcxODgsMC0yLjEyNS45NTMxMi0yLjEyNSwyLjEyNXMuOTUzMTIsMi4xMjUsMi4xMjUsMi4xMjUsMi4xMjUtLjk1MzEyLDIuMTI1LTIuMTI1LS45NTMxMi0yLjEyNS0yLjEyNS0yLjEyNVptMCwzYy0uNDgyNDIsMC0uODc1LS4zOTI1OC0uODc1LS44NzVzLjM5MjU4LS44NzUuODc1LS44NzUuODc1LjM5MjU4Ljg3NS44NzUtLjM5MjU4Ljg3NS0uODc1Ljg3NVoiIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iMCIvPjxwYXRoIGQ9Im0yNy41LDE2Ljg3NWMtMS4xNzE4OCwwLTIuMTI1Ljk1MzEyLTIuMTI1LDIuMTI1cy45NTMxMiwyLjEyNSwyLjEyNSwyLjEyNSwyLjEyNS0uOTUzMTIsMi4xMjUtMi4xMjUtLjk1MzEyLTIuMTI1LTIuMTI1LTIuMTI1Wm0wLDNjLS40ODI0MiwwLS44NzUtLjM5MjU4LS44NzUtLjg3NXMuMzkyNTgtLjg3NS44NzUtLjg3NS44NzUuMzkyNTguODc1Ljg3NS0uMzkyNTguODc1LS44NzUuODc1WiIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIwIi8+PHBhdGggZD0ibTEyLjYyNSwxOWMwLTEuMTcxODgtLjk1MzEyLTIuMTI1LTIuMTI1LTIuMTI1cy0yLjEyNS45NTMxMi0yLjEyNSwyLjEyNS45NTMxMiwyLjEyNSwyLjEyNSwyLjEyNSwyLjEyNS0uOTUzMTIsMi4xMjUtMi4xMjVabS0zLDBjMC0uNDgyNDIuMzkyNTgtLjg3NS44NzUtLjg3NXMuODc1LjM5MjU4Ljg3NS44NzUtLjM5MjU4Ljg3NS0uODc1Ljg3NS0uODc1LS4zOTI1OC0uODc1LS44NzVaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjAiLz48cGF0aCBkPSJtMTMuMjM3NDMsMTIuMzUzNjRjLjI0MDkxLS4zOTY2MS4zODc1Ny0uODU2NzUuMzg3NTctMS4zNTM2NCwwLTEuNDQ3MjctMS4xNzc3My0yLjYyNS0yLjYyNS0yLjYyNXMtMi42MjUsMS4xNzc3My0yLjYyNSwyLjYyNSwxLjE3NzczLDIuNjI1LDIuNjI1LDIuNjI1Yy40OTY4OSwwLC45NTcwMy0uMTQ2NjcsMS4zNTM2NC0uMzg3NTdsMS4yMDQ0NywxLjIwNDQ3Yy4xMjIwNy4xMjIwNy4yODE3NC4xODMxMS40NDE4OS4xODMxMXMuMzE5ODItLjA2MTA0LjQ0MTg5LS4xODMxMWMuMjQ0MTQtLjI0NDE0LjI0NDE0LS42Mzk2NSwwLS44ODM3OWwtMS4yMDQ0Ny0xLjIwNDQ3Wm0tMy42MTI0My0xLjM1MzY0YzAtLjc1ODMuNjE2Ny0xLjM3NSwxLjM3NS0xLjM3NXMxLjM3NS42MTY3LDEuMzc1LDEuMzc1YzAsLjM3Nzk5LS4xNTM1LjcyMDU4LS40MDExMi45NjkzNi0uMDAwNzkuMDAwNzktLjAwMTg5LjAwMTA0LS4wMDI2OS4wMDE4M3MtLjAwMTA0LjAwMTg5LS4wMDE4My4wMDI2OWMtLjI0ODc4LjI0NzYyLS41OTEzNy40MDExMi0uOTY5MzYuNDAxMTItLjc1ODMsMC0xLjM3NS0uNjE2Ny0xLjM3NS0xLjM3NVoiIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iMCIvPjxwYXRoIGQ9Im0xMy41NTgxMSwyMy41NTgxMWwtMS4yMDQ0NywxLjIwNDQ3Yy0uMzk2NjEtLjI0MDkxLS44NTY3NS0uMzg3NTctMS4zNTM2NC0uMzg3NTctMS40NDcyNywwLTIuNjI1LDEuMTc3NzMtMi42MjUsMi42MjVzMS4xNzc3MywyLjYyNSwyLjYyNSwyLjYyNSwyLjYyNS0xLjE3NzczLDIuNjI1LTIuNjI1YzAtLjQ5Njg5LS4xNDY2Ny0uOTU3MDMtLjM4NzU3LTEuMzUzNjRsMS4yMDQ0Ny0xLjIwNDQ3Yy4yNDQxNC0uMjQ0MTQuMjQ0MTQtLjYzOTY1LDAtLjg4Mzc5cy0uNjM5NjUtLjI0NDE0LS44ODM3OSwwWm0tMi41NTgxMSw0LjgxNjg5Yy0uNzU4MywwLTEuMzc1LS42MTY3LTEuMzc1LTEuMzc1cy42MTY3LTEuMzc1LDEuMzc1LTEuMzc1Yy4zNzg4NSwwLC43MjIyOS4xNTM5OS45NzExOS40MDI1OS4wMDAyNC4wMDAyNC4wMDAyNC4wMDA0OS4wMDA0OS4wMDA3M3MuMDAwNDkuMDAwMjQuMDAwNzMuMDAwNDljLjI0ODYuMjQ4OS40MDI1OS41OTIzNS40MDI1OS45NzExOSwwLC43NTgzLS42MTY3LDEuMzc1LTEuMzc1LDEuMzc1WiIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIwIi8+PC9nPjwvc3ZnPg==
66+
67+
packages:
68+
- red-hat-developer-hub-backstage-plugin-bulk-import
69+
- red-hat-developer-hub-backstage-plugin-bulk-import-backend
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
plugins:
2+
- package: ''
3+
disabled: true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
plugins: {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
plugins:
2+
- package: ./dynamic-plugins/dist/package11-backend-dynamic
3+
disabled: true
4+
- package: ./dynamic-plugins/dist/package12
5+
disabled: true
6+
pluginConfig:
7+
dynamicPlugins:
8+
frontend:
9+
default.package12:
10+
dynamicRoutes:
11+
- path: /package12
12+
importName: Package12Page
13+
- package: ./dynamic-plugins/dist/package21-backend-dynamic
14+
disabled: true

0 commit comments

Comments
 (0)