diff --git a/artifacts/attributes.adoc b/artifacts/attributes.adoc index f02100c341..8647b308d7 100644 --- a/artifacts/attributes.adoc +++ b/artifacts/attributes.adoc @@ -53,8 +53,8 @@ :odf-name: OpenShift Data Foundation :osd-brand-name: Red Hat OpenShift Dedicated :osd-short: OpenShift Dedicated -:rcs-name: Road-Core Service -:rcs-short: RCS +:lcs-name: Lightspeed Core Service +:lcs-short: LCS :rhacs-brand-name: Red Hat Advanced Cluster Security :rhacs-short: Advanced Cluster Security :rhacs-very-short: ACS @@ -87,8 +87,8 @@ :eks-brand-name: Amazon Elastic Kubernetes Service :eks-name: Elastic Kubernetes Service :eks-short: EKS -:gcp-brand-name: Google Cloud Platform -:gcp-short: GCP +:gcp-brand-name: Google Cloud +:gcp-short: Google Cloud :gke-brand-name: Google Kubernetes Engine :gke-short: GKE diff --git a/assemblies/assembly-configuring-a-floating-action-button.adoc b/assemblies/assembly-configuring-a-floating-action-button.adoc index 319cb61067..d2d36469d2 100644 --- a/assemblies/assembly-configuring-a-floating-action-button.adoc +++ b/assemblies/assembly-configuring-a-floating-action-button.adoc @@ -8,4 +8,8 @@ You can use the floating action button plugin to configure any action as a float include::modules/configuring-a-floating-action-button/proc-configuring-floating-action-button-as-a-dynamic-plugin.adoc[leveloffset=+1] +// Localization +include::modules/configuring-a-floating-action-button/con-localization-support-for-the-floating-action-button.adoc[leveloffset=+1] +// END Localization + include::modules/configuring-a-floating-action-button/ref-floating-action-button-parameters.adoc[leveloffset=+1] diff --git a/assemblies/assembly-configuring-the-quickstarts.adoc b/assemblies/assembly-configuring-the-quickstarts.adoc index 34d76f4d57..59f87c0a84 100644 --- a/assemblies/assembly-configuring-the-quickstarts.adoc +++ b/assemblies/assembly-configuring-the-quickstarts.adoc @@ -12,4 +12,4 @@ include::modules/configuring-the-quickstarts/proc-disabling-rhdh-quickstart.adoc include::modules/configuring-the-quickstarts/proc-starting-and-completing-modules-in-quickstarts.adoc[leveloffset=+1] -include::modules/configuring-the-quickstarts/con-using-rbac-with-quickstarts.adoc[leveloffset=+1] +include::modules/customizing-the-appearance/proc-enabling-localization-in-quickstarts.adoc[leveloffset=+1] diff --git a/assemblies/assembly-customizing-developer-lightspeed.adoc b/assemblies/assembly-customizing-developer-lightspeed.adoc index ee82abb321..f3b54ef7d0 100644 --- a/assemblies/assembly-customizing-developer-lightspeed.adoc +++ b/assemblies/assembly-customizing-developer-lightspeed.adoc @@ -4,9 +4,7 @@ [id="{context}"] = Customizing {ls-short} -You can customize {ls-short} functionalities, such as, question validation, gathering feedback, and storing chat history in PostgreSQL. - -include::modules/developer-lightspeed/proc-using-question-validation.adoc[leveloffset=+1] +You can customize {ls-short} functionalities such as gathering feedback, storing chat history in PostgreSQL, and {model-context-protocol-link}#proc-configure-mcp-tools-for-developer-lightspeed_assembly-model-context-protocol-tools[configuring Model Context Protocol (MCP) tools]. include::modules/developer-lightspeed/proc-gathering-feedback.adoc[leveloffset=+1] diff --git a/assemblies/assembly-customizing-the-appearance.adoc b/assemblies/assembly-customizing-the-appearance.adoc index 2c69959e63..04358576b8 100644 --- a/assemblies/assembly-customizing-the-appearance.adoc +++ b/assemblies/assembly-customizing-the-appearance.adoc @@ -32,6 +32,8 @@ include::modules/customizing-the-appearance/con-about-rhdh-sidebar-menuitems.ado include::modules/customizing-the-appearance/proc-customize-rhdh-sidebar-menuitems.adoc[leveloffset=+2] +include::modules/customizing-the-appearance/proc-enabling-localization-in-sidebar-items.adoc[leveloffset=+2] + include::modules/customizing-the-appearance/proc-configuring-dynamic-plugin-menuitem.adoc[leveloffset=+2] include::modules/customizing-the-appearance/proc-modifying-or-adding-rhdh-custom-menuitem.adoc[leveloffset=+2] diff --git a/assemblies/assembly-developer-lightspeed.adoc b/assemblies/assembly-developer-lightspeed.adoc index 33d581a58d..99013ad668 100644 --- a/assemblies/assembly-developer-lightspeed.adoc +++ b/assemblies/assembly-developer-lightspeed.adoc @@ -8,7 +8,7 @@ include::modules/developer-lightspeed/con-about-developer-lightspeed.adoc[levelo include::modules/developer-lightspeed/con-supported-architecture.adoc[leveloffset=+1] -include::modules/developer-lightspeed/con-about-road-core-service.adoc[leveloffset=+2] +include::modules/developer-lightspeed/con-about-lightspeed-stack-and-llama-stack.adoc[leveloffset=+2] include::modules/developer-lightspeed/con-rag-embeddings.adoc[leveloffset=+1] diff --git a/assemblies/assembly-install-rhdh-osd-gcp.adoc b/assemblies/assembly-install-rhdh-osd-gcp.adoc index 5b08f56871..ad59d551e7 100644 --- a/assemblies/assembly-install-rhdh-osd-gcp.adoc +++ b/assemblies/assembly-install-rhdh-osd-gcp.adoc @@ -4,7 +4,7 @@ = Installing {product} on {osd-short} on {gcp-brand-name} :context: assembly-install-rhdh-osd-gcp -You can install {product-short} on {osd-short} on {gcp-brand-name} ({gcp-short}) using one of the following methods: +You can install {product-short} on {osd-short} on {gcp-brand-name} using one of the following methods: * The {product} Operator * The {product} Helm chart diff --git a/assemblies/assembly-localization-in-rhdh.adoc b/assemblies/assembly-localization-in-rhdh.adoc new file mode 100644 index 0000000000..8785703aef --- /dev/null +++ b/assemblies/assembly-localization-in-rhdh.adoc @@ -0,0 +1,26 @@ +:_mod-docs-content-type: ASSEMBLY +:context: assembly-localization-in-rhdh + +[id="assembly-localization-in-rhdh_{context}"] += Localization in {product} + +include::modules/customizing-the-appearance/proc-enabling-localization-in-rhdh.adoc[leveloffset=+1] + +include::modules/customizing-the-appearance/proc-select-rhdh-language.adoc[leveloffset=+1] + +include::modules/customizing-the-appearance/con-language-persistence.adoc[leveloffset=+2] + +// include::modules/customizing-the-appearance/proc-enabling-localization-in-quickstarts.adoc[leveloffset=+1] + +// include::modules/customizing-the-appearance/proc-enabling-localization-in-sidebar-items.adoc[leveloffset=+1] + +//include::modules/customizing-the-appearance/proc-enabling-localization-in-floating-action-button.adoc[leveloffset=+1] + +== Localization support for plugins + +include::modules/customizing-the-appearance/proc-overriding-translations.adoc[leveloffset=+2] + +include::modules/customizing-the-appearance/ref-best-practices-for-localization.adoc[leveloffset=+2] + +include::modules/customizing-the-appearance/proc-adding-localization-to-custom-plugins.adoc[leveloffset=+2] + diff --git a/assemblies/assembly-model-context-protocol-tools.adoc b/assemblies/assembly-model-context-protocol-tools.adoc index b37fe209b5..9c6e8958fd 100644 --- a/assemblies/assembly-model-context-protocol-tools.adoc +++ b/assemblies/assembly-model-context-protocol-tools.adoc @@ -12,8 +12,6 @@ include::modules/model-context-protocol-tools/proc-configuring-model-context-pro include::modules/model-context-protocol-tools/proc-configuring-mcp-clients-to-access-the-rhdh-server.adoc[leveloffset=+2] -include::modules/model-context-protocol-tools/proc-configuring-mcp-tools-for-developer-lightspeed.adoc[leveloffset=+1] - include::assembly-using-the-mcp-tools-to-access-data.adoc[leveloffset=+1] include::assembly-troubleshooting-mcp-server-and-client-problems.adoc[leveloffset=+1] \ No newline at end of file diff --git a/assemblies/assembly-orchestrator-rhdh.adoc b/assemblies/assembly-orchestrator-rhdh.adoc index 2e8e0b7f4b..a155a47be6 100644 --- a/assemblies/assembly-orchestrator-rhdh.adoc +++ b/assemblies/assembly-orchestrator-rhdh.adoc @@ -24,7 +24,6 @@ To start using Orchestrator in {product-very-short}, you must: * Install the required infrastructure components, such as Red Hat OpenShift Serverless Operator, Knative Serving, Knative Eventing, and OpenShift Serverless Logic Operator * Configure your {product-custom-resource-type} custom resource (CR) or Helm values file for Orchestrator -* Import the Orchestrator software templates into the {product} catalog // orchestrator architecture include::modules/orchestrator/con-architecture-overview.adoc[leveloffset=+1] @@ -48,4 +47,4 @@ include::modules/orchestrator/proc-manual-install-components-orchestrator-plugin include::modules/orchestrator/proc-helper-script-overview.adoc[leveloffset=+2] // best practices when creating workflows -include::modules/orchestrator/ref-best-practices-for-creating-workflows.adoc[leveloffset=+1] \ No newline at end of file +include::modules/orchestrator/ref-best-practices-for-creating-workflows.adoc[leveloffset=+1] diff --git a/assemblies/assembly-using-developer-lightspeed.adoc b/assemblies/assembly-using-developer-lightspeed.adoc index 7bfa027f84..d0c604fefd 100644 --- a/assemblies/assembly-using-developer-lightspeed.adoc +++ b/assemblies/assembly-using-developer-lightspeed.adoc @@ -13,6 +13,15 @@ endif::[] {ls-brand-name} is designed to support you when performing various tasks during your development workflow. +[NOTE] +==== +The `Question Validation` feature is enabled by default if you are using the `quay.io/redhat-ai-dev/llama-stack` image without overriding the `run.yaml` configuration file in the image. To disable `Question Validation`, you must mount a `run.yaml` file to the container with the following sections removed: + +* `Safety` +* `Shields` +* `External_providers_dir` set to `null` +==== + With `Question Validation` enabled, you can ask {ls-short} the following types of questions: * “Tell me about {product}.” diff --git a/images/rhdh-plugins-reference/developer-lightspeed-1-8-0.png b/images/rhdh-plugins-reference/developer-lightspeed-1-8-0.png new file mode 100644 index 0000000000..c1c2598748 Binary files /dev/null and b/images/rhdh-plugins-reference/developer-lightspeed-1-8-0.png differ diff --git a/images/rhdh-plugins-reference/developer-lightspeed-architecture-1-8-0.png b/images/rhdh-plugins-reference/developer-lightspeed-architecture-1-8-0.png new file mode 100644 index 0000000000..3b98f57ec9 Binary files /dev/null and b/images/rhdh-plugins-reference/developer-lightspeed-architecture-1-8-0.png differ diff --git a/images/rhdh-plugins-reference/developer-lightspeed.png b/images/rhdh-plugins-reference/developer-lightspeed.png deleted file mode 100644 index bf15e9773f..0000000000 Binary files a/images/rhdh-plugins-reference/developer-lightspeed.png and /dev/null differ diff --git a/images/rhdh/customize-language-dropdown.png b/images/rhdh/customize-language-dropdown.png new file mode 100644 index 0000000000..ab668d60f3 Binary files /dev/null and b/images/rhdh/customize-language-dropdown.png differ diff --git a/modules/about/ref-rhdh-sizing.adoc b/modules/about/ref-rhdh-sizing.adoc index c88c7873b7..40535de93e 100644 --- a/modules/about/ref-rhdh-sizing.adoc +++ b/modules/about/ref-rhdh-sizing.adoc @@ -3,7 +3,9 @@ [id="rhdh-sizing_{context}"] = Sizing requirements for {product} -Scaling the {product} requires significant resource allocation. The following table lists the sizing requirements for installing and running {product}, including {product-short} application, database components, and Operator. +Learn about sizing requirements for {product}. +Table 1 lists the sizing requirements for installing and running {product}, including {product-short} application, database components, and Operator. +Table 2 lists recommended sizing requirements for {product-docs-link}/html-single/configuring_red_hat_developer_hub/index#configuring-external-postgresql-databases[external PostgreSQL deployment] based on the deployment scale. .Recommended sizing for running {product} [cols="25%,25%,25%,25%", frame="all", options="header"] @@ -33,3 +35,53 @@ Scaling the {product} requires significant resource allocation. The following ta |3 or more |1 or more |=== + +.Recommended sizing for external PostgreSQL deployments with {product} +[cols="25%,25%,25%,25%,25%", frame="all", options="header"] +|=== +|Sizing legend +|Small-scale +|Mid-scale +|Large-scale +|Enterprise-scale + +|Application usage +|up to 5 thousand entities, up to 50 concurrent users +|5–20 thousand entities, 50–150 concurrent users +|20–50 thousand entities, 150–400 concurrent users +|50–150 thousand entities, 400–800 concurrent users + +|vCPU +|2 +|4 +|8 +|16 + +|Memory +|8 GiB +|16 GiB +|32 GiB +|64 GiB + +|Storage +|50 GiB +|100 GiB +|200 GiB +|500 GiB + +|Number of replicas +|1 +|2 +|2-3 +|3+ + +|PostgreSQL Database HA +|1 primary +|1 primary, 1 standby +|1 primary, 1 synchronous standby +|1 primary, 1 synchronous standby, 1 asynchronous replica +|=== + + + + diff --git a/modules/authorization/proc-configuring-the-RBAC-backend-plugin.adoc b/modules/authorization/proc-configuring-the-RBAC-backend-plugin.adoc index 9179c3d1b4..7f26b0b987 100644 --- a/modules/authorization/proc-configuring-the-RBAC-backend-plugin.adoc +++ b/modules/authorization/proc-configuring-the-RBAC-backend-plugin.adoc @@ -6,7 +6,7 @@ You can configure the RBAC backend plugin by updating the `{my-app-config-file}` file to enable the permission framework. .Prerequisites -* You have installed the `@janus-idp/backstage-plugin-rbac` plugin in {product-short}. For more information, see {configuring-dynamic-plugins-book-link}[{configuring-dynamic-plugins-book-title}]. +* You have installed the `@backstage-community/plugin-rbac` plugin in {product-short}. For more information, see {configuring-dynamic-plugins-book-link}[{configuring-dynamic-plugins-book-title}]. .Procedure * Update the `{my-app-config-file}` file to enable the permission framework as shown: diff --git a/modules/authorization/proc-setting-up-the-guest-authentication-provider.adoc b/modules/authorization/proc-setting-up-the-guest-authentication-provider.adoc index 3e00d68909..e0a85bd67d 100644 --- a/modules/authorization/proc-setting-up-the-guest-authentication-provider.adoc +++ b/modules/authorization/proc-setting-up-the-guest-authentication-provider.adoc @@ -6,7 +6,7 @@ You can enable guest authentication and use it alongside the RBAC frontend plugin. .Prerequisites -* You have installed the `@janus-idp/backstage-plugin-rbac` plugin in {product-short}. For more information, see {configuring-dynamic-plugins-book-link}[{configuring-dynamic-plugins-book-title}]. +* You have installed the `@backstage-community/plugin-rbac` plugin in {product-short}. For more information, see {configuring-dynamic-plugins-book-link}[{configuring-dynamic-plugins-book-title}]. .Procedure diff --git a/modules/configuring-a-floating-action-button/con-localization-support-for-the-floating-action-button.adoc b/modules/configuring-a-floating-action-button/con-localization-support-for-the-floating-action-button.adoc new file mode 100644 index 0000000000..6794473a93 --- /dev/null +++ b/modules/configuring-a-floating-action-button/con-localization-support-for-the-floating-action-button.adoc @@ -0,0 +1,60 @@ +[id="proc-enabling-localization-in-floating-action-button_{context}"] += Enabling floating action button localization in {product-very-short} + +You can enable translation key support for floating action buttons, so that users can onboard in their preferred language. In {product-short}, all existing and newly created floating action buttons support localization using dedicated translation keys. + +The Global Floating Action Button plugin supports internationalization (i18n) through translation keys. You can use `labelKey` and `toolTipKey` properties to provide translation keys instead of static text. + +The plugin provides the following built-in translation keys organized under the `fab` namespace: + +* `fab.create.label` - "Create" +* `fab.create.tooltip` - "Create entity" +* `fab.docs.label` - "Docs" +* `fab.docs.tooltip` - "Documentation" +* `fab.apis.label` - "APIs" +* `fab.apis.tooltip` - "API Documentation" +* `fab.github.label` - "GitHub" +* `fab.github.tooltip` - "GitHub Repository" +* `fab.bulkImport.label` - "Bulk Import" +* `fab.bulkImport.tooltip` - "Register multiple repositories in bulk" +* `fab.quay.label` - "Quay" +* `fab.quay.tooltip` - "Quay Container Registry" + +The plugin includes translations for the following supported languages: + +* English (default) +// * German (de) +* French (fr) +// * Spanish (es) + +// [NOTE] +// ==== +// To add localization support for a new floating action button item, you can add any arbitrary key name for the `labelKey` and `toolTipKey` properties and provide corresponding translations for those keys. + +// If you add a new floating action button item, you can add localization support by adding an arbitary label key and tool tip key + +// ==== + +To ensure backward compatibility while providing translation support when available, the following order is used to resolve string translations: + +. If the `labelKey` is provided, the plugin will attempt to resolve the translation key +. If the translation key is found, it will be used as the label +. If the translation key is not found, the plugin will fall back to the label property + +[NOTE] +==== +The same logic applies to `toolTipKey` and `toolTip`. +==== + +== Internal translation implementation +The plugin uses a centralized translation system where: + +* The `useTranslation()` hook is called in components that render floating action buttons to ensure proper translation context initialization +* The translation function (`t`) is passed down to child components that need to resolve translation keys +* This internal architecture prevents infinite re-render loops and ensures stable component rendering +* All components that use `CustomFab` must provide the translation function as a prop + +[NOTE] +==== +When extending or modifying the plugin components, ensure that the `useTranslation()` hook is called in parent components and the `t` prop is passed to `CustomFab` instances to maintain proper translation functionality and prevent rendering issues. +==== \ No newline at end of file diff --git a/modules/configuring-a-floating-action-button/proc-configuring-floating-action-button-as-a-dynamic-plugin.adoc b/modules/configuring-a-floating-action-button/proc-configuring-floating-action-button-as-a-dynamic-plugin.adoc index 4193f14924..a523dc2c5e 100644 --- a/modules/configuring-a-floating-action-button/proc-configuring-floating-action-button-as-a-dynamic-plugin.adoc +++ b/modules/configuring-a-floating-action-button/proc-configuring-floating-action-button-as-a-dynamic-plugin.adoc @@ -203,3 +203,43 @@ To configure a floating action button as a dynamic plugin, complete any of the f text: Bulk import ---- `frontend:mountPoints:importName`:: Enter the import name with an associated component to the mount point. + += Translation support +The Global Floating Action Button plugin supports internationalization (i18n) through translation keys. You can use `labelKey` and `toolTipKey` properties to provide translation keys instead of static text. + +Example for using translation keys in dynamic configuration: +[source,yaml] +---- +- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-global-floating-action-button + disabled: false + pluginConfig: + dynamicPlugins: + frontend: + red-hat-developer-hub.backstage-plugin-global-floating-action-button: + translationResources: + - importName: globalFloatingActionButtonTranslations + ref: globalFloatingActionButtonTranslationRef + mountPoints: + - mountPoint: application/listener + importName: DynamicGlobalFloatingActionButton + - mountPoint: global.floatingactionbutton/config + importName: NullComponent + config: + icon: github + label: 'GitHub' # Fallback text + labelKey: 'fab.github.label' # Translation key + toolTip: 'GitHub Repository' # Fallback text + toolTipKey: 'fab.github.tooltip' # Translation key + to: https://github.com/redhat-developer/rhdh-plugins + - mountPoint: global.floatingactionbutton/config + importName: NullComponent + config: + color: 'success' + icon: search + label: 'Create' # Fallback text + labelKey: 'fab.create.label' # Translation key + toolTip: 'Create entity' # Fallback text + toolTipKey: 'fab.create.tooltip' # Translation key + to: '/create' + showLabel: true +---- \ No newline at end of file diff --git a/modules/configuring-a-floating-action-button/ref-floating-action-button-parameters.adoc b/modules/configuring-a-floating-action-button/ref-floating-action-button-parameters.adoc index 1f2c3d54e4..d6be21b37c 100644 --- a/modules/configuring-a-floating-action-button/ref-floating-action-button-parameters.adoc +++ b/modules/configuring-a-floating-action-button/ref-floating-action-button-parameters.adoc @@ -21,6 +21,12 @@ Use the parameters as shown in the following table to configure your floating ac | Not applicable | Yes +| `labelKey` +| Translation key for the label. If provided, will be used instead of label when translations are available. +| `String` +| Not applicable +| No + | `icon` | Icon of the floating action button. Recommended to use filled icons from the link:https://fonts.google.com/icons[Material Design library]. You can also use an svg icon. For example: `` | `String`, `React.ReactElement`, `SVG image icon`, `HTML image icon` @@ -63,6 +69,12 @@ Use the parameters as shown in the following table to configure your floating ac | Not applicable | No +| `toolTipKey` +| Translation key for the tooltip. If provided, will be used instead of toolTip when translations are available. +| `String` +| Not applicable +| No + | `priority` | Order of the floating action buttons displayed in the submenu. A larger value means higher priority. | `number` diff --git a/modules/configuring-external-databases/proc-configuring-postgresql-instance-using-helm.adoc b/modules/configuring-external-databases/proc-configuring-postgresql-instance-using-helm.adoc index 5f72c0d798..fdc6214475 100644 --- a/modules/configuring-external-databases/proc-configuring-postgresql-instance-using-helm.adoc +++ b/modules/configuring-external-databases/proc-configuring-postgresql-instance-using-helm.adoc @@ -7,6 +7,7 @@ You can configure an external PostgreSQL instance by using the Helm Chart. By de .Prerequisites +* You meet the {about-book-link}#rhdh-sizing_about-rhdh[Sizing requirements for external PostgreSQL deployments]. * You are using a supported version of PostgreSQL. For more information, see the link:https://access.redhat.com/support/policy/updates/developerhub[Product life cycle page]. * You have the following details: ** `db-host`: Denotes your PostgreSQL instance Domain Name System (DNS) or IP address diff --git a/modules/configuring-external-databases/proc-configuring-postgresql-instance-using-the-operator.adoc b/modules/configuring-external-databases/proc-configuring-postgresql-instance-using-the-operator.adoc index 27942dcb00..1ec170da1b 100644 --- a/modules/configuring-external-databases/proc-configuring-postgresql-instance-using-the-operator.adoc +++ b/modules/configuring-external-databases/proc-configuring-postgresql-instance-using-the-operator.adoc @@ -7,6 +7,7 @@ You can configure an external PostgreSQL instance using the {product} Operator. .Prerequisites +* You meet the {about-book-link}#rhdh-sizing_about-rhdh[Sizing requirements for external PostgreSQL deployments]. * You are using a supported version of PostgreSQL. For more information, see the link:https://access.redhat.com/support/policy/updates/developerhub[Product life cycle page]. * You have the following details: ** `db-host`: Denotes your PostgreSQL instance Domain Name System (DNS) or IP address diff --git a/modules/customizing-the-appearance/con-language-persistence.adoc b/modules/customizing-the-appearance/con-language-persistence.adoc new file mode 100644 index 0000000000..5e6097f3d3 --- /dev/null +++ b/modules/customizing-the-appearance/con-language-persistence.adoc @@ -0,0 +1,27 @@ +:_mod-docs-content-type: CONCEPT + +[id="con-language-persistence_{context}"] += Language persistence + +When you change the language in the UI, your preference is saved to storage. On next login or refresh, your chosen language setting is restored. Guest users cannot persist language preferences. + +Default language selection uses the following priority order: + +. *Browser language priority*: The system first checks the user's browser language preferences to provide a personalized experience. + +. *Configuration priority*: If no browser language matches the supported locales, the `defaultLocale` from the `i18n` configuration is used as a fallback. + +. *Fallback priority*: If neither browser preferences nor configuration provide a match, defaults to `en`. + +{product} automatically saves and restores user language settings across browser sessions. This feature is enabled by default and uses database storage. To opt-out and use browser storage instead, add the following to your `{my-app-config-file}` configuration file: +[source,yaml,subs="+quotes"] +---- +userSettings: + persistence: browser +---- + +where: + +userSettings:persistence:: +Enter `browser` to opt-out and use browser local storage. Optionally, set this value to `database` to persist across browsers and devices. This is the default setting and does not require this configuration to be set. + diff --git a/modules/customizing-the-appearance/proc-adding-localization-to-custom-plugins.adoc b/modules/customizing-the-appearance/proc-adding-localization-to-custom-plugins.adoc new file mode 100644 index 0000000000..73be45d47d --- /dev/null +++ b/modules/customizing-the-appearance/proc-adding-localization-to-custom-plugins.adoc @@ -0,0 +1,276 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-adding-localization-to-custom-plugins_{context}"] += Implementing localization support for your custom plugins +You can implement localization support in your custom {product-very-short} plugins so that your plugins are accessible to a diverse, international user base and follow recommended best practices. + +.Procedure +. Create the following translation files in your plugin's `src/translations/` directory: ++ +.`src/translations/ref.ts` English reference +[source,json] +---- +import { createTranslationRef } from "@backstage/core-plugin-api/alpha"; + +export const myPluginMessages = { + page: { + title: "My Plugin", + subtitle: "Plugin description", + }, + common: { + exportCSV: "Export CSV", + noResults: "No results found", + }, + table: { + headers: { + name: "Name", + count: "Count", + }, + }, +}; + +export const myPluginTranslationRef = createTranslationRef({ + id: "plugin.my-plugin", + messages: myPluginMessages, +}); +---- ++ +.`src/translations/de.ts` German translation +[source,json] +---- +import { createTranslationMessages } from "@backstage/core-plugin-api/alpha"; +import { myPluginTranslationRef } from "./ref"; + +const myPluginTranslationDe = createTranslationMessages({ + ref: myPluginTranslationRef, + messages: { + "page.title": "Mein Plugin", + "page.subtitle": "Plugin-Beschreibung", + "common.exportCSV": "CSV exportieren", + "common.noResults": "Keine Ergebnisse gefunden", + "table.headers.name": "Name", + "table.headers.count": "Anzahl", + }, +}); + +export default myPluginTranslationDe; +---- ++ +.`src/translations/fr.ts` French translation +[source,json] +---- +import { createTranslationMessages } from "@backstage/core-plugin-api/alpha"; +import { myPluginTranslationRef } from "./ref"; + +const myPluginTranslationFr = createTranslationMessages({ + ref: myPluginTranslationRef, + messages: { + "page.title": "Mon Plugin", + "page.subtitle": "Description du plugin", + "common.exportCSV": "Exporter CSV", + "common.noResults": "Aucun résultat trouvé", + "table.headers.name": "Nom", + "table.headers.count": "Nombre", + }, +}); + +export default myPluginTranslationFr; +---- ++ +.`src/translations/index.ts` Translation resource +[source,json] +---- +import { createTranslationResource } from "@backstage/core-plugin-api/alpha"; +import { myPluginTranslationRef } from "./ref"; + +export const myPluginTranslations = createTranslationResource({ + ref: myPluginTranslationRef, + translations: { + de: () => import("./de"), + fr: () => import("./fr"), + }, +}); + +export { myPluginTranslationRef }; +---- + +. Create translation hooks file, as follows: ++ +.`src/hooks/useTranslation.ts` Translation hooks +[source,json] +---- +import { useTranslationRef } from "@backstage/core-plugin-api/alpha"; +import { myPluginTranslationRef } from "../translations"; + +export const useTranslation = () => useTranslationRef(myPluginTranslationRef); +---- + +. Update your plugin components to replace hard-coded strings with translation calls as shown in the following example: ++ +.Before (hardcoded): +[source,json] +---- +const MyComponent = () => { + return ( +
+

My Plugin

+ +
+ ); +}; +---- ++ +.After (translated): +[source,json] +---- +import { useTranslation } from '../hooks/useTranslation'; + +const MyComponent = () => { + const { t } = useTranslation(); + + return ( +
+

{t('page.title')}

+ +
+ ); +}; +---- + +. (Optional) If your content contains variables, use interpolation: ++ +[source,json] +---- +// In your translation files +'table.pagination.topN': 'Top {{count}} items' + +// In your component +const { t } = useTranslation(); +const message = t('table.pagination.topN', { count: '10' }); +---- + +. (Optional) If your content contains dynamic translation keys (for example, from your plugin configuration): ++ +[source,json] +---- +// Configuration object with translation keys +const CARD_CONFIGS = [ + { id: 'overview', titleKey: 'cards.overview.title' }, + { id: 'details', titleKey: 'cards.details.title' }, + { id: 'settings', titleKey: 'cards.settings.title' }, +]; + +// In your component +const { t } = useTranslation(); + +const CardComponent = ({ config }) => { + return ( +
+

{t(config.titleKey as any)}

+ {/* Use 'as any' for dynamic keys */} +
+ ); +}; +---- + +. Export the translation resources ++ +[source,json] +.`src/alpha.ts` file fragment +---- +// Export your plugin +export { myPlugin } from "./plugin"; + +// Export translation resources for RHDH +export { myPluginTranslations, myPluginTranslationRef } from "./translations"; +---- + +. Update your `dynamic-plugins.default.yaml` file, as follows: ++ +[source,json] +.`dynamic-plugins.default.yaml` file fragment +---- +backstage-community.plugin-my-plugin: + translationResources: + - importName: myPluginTranslations + ref: myPluginTranslationRef + module: Alpha +---- + +. Update your `package.json` file as follows: ++ +[source,json] +.`package.json` file fragment +---- +"exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } + } +---- + +.Verification +To verify your translations, create a test mock file. For example: + +.`src/test-utils/mockTranslations.ts` Test mock file +[source,json] +---- +import { myPluginMessages } from "../translations/ref"; + +function flattenMessages(obj: any, prefix = ""): Record { + const flattened: Record = {}; + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + const value = obj[key]; + const newKey = prefix ? `${prefix}.${key}` : key; + if (typeof value === "object" && value !== null) { + Object.assign(flattened, flattenMessages(value, newKey)); + } else { + flattened[newKey] = value; + } + } + } + return flattened; +} + +const flattenedMessages = flattenMessages(myPluginMessages); + +export const mockT = (key: string, params?: any) => { + let message = flattenedMessages[key] || key; + if (params) { + for (const [paramKey, paramValue] of Object.entries(params)) { + message = message.replace( + new RegExp(`{{${paramKey}}}`, "g"), + String(paramValue), + ); + } + } + return message; +}; + +export const mockUseTranslation = () => ({ t: mockT }); +---- + +.Update your tests +[source,json] +---- +import { mockUseTranslation } from "../test-utils/mockTranslations"; + +jest.mock("../hooks/useTranslation", () => ({ + useTranslation: mockUseTranslation, +})); + +// Your test code... +---- \ No newline at end of file diff --git a/modules/customizing-the-appearance/proc-customize-rhdh-language.adoc b/modules/customizing-the-appearance/proc-customize-rhdh-language.adoc new file mode 100644 index 0000000000..a64e242f67 --- /dev/null +++ b/modules/customizing-the-appearance/proc-customize-rhdh-language.adoc @@ -0,0 +1,26 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-customize-rhdh-language_{context}"] += Customizing the language for your {product-short} instance + +The language settings of {product-very-short} use English by default. You can choose to use one of the following languages instead. + +.Supported languages +* English +* French + +[NOTE] +==== +English and French are the supported languages in {product-very-short} 1.8. You can add other languages in the the `i18n` section of your `{my-app-config-file}` configuration file. +==== + +.Prerequisites + +* You are logged in to the {product-short} web console. + +.Procedure + +. From the {product-short} web console, click *Settings*. +. From the *Appearance* panel, click the language dropdown to select your language of choice. ++ +image::rhdh/customize-language-dropdown.png[] \ No newline at end of file diff --git a/modules/customizing-the-appearance/proc-enabling-localization-in-quickstarts.adoc b/modules/customizing-the-appearance/proc-enabling-localization-in-quickstarts.adoc new file mode 100644 index 0000000000..52033fbb39 --- /dev/null +++ b/modules/customizing-the-appearance/proc-enabling-localization-in-quickstarts.adoc @@ -0,0 +1,89 @@ +:_mod-docs-content-type: CONCEPT + +[id="proc-enabling-localization-in-quickstarts_{context}"] += Enabling Quickstart localization in {product-very-short} + +You can enable translation key support for Quickstart titles, descriptions, and CTAs, so that users can onboard in their preferred language. In {product-short}, all existing and newly created Quickstart steps support localization using dedicated translation keys (`titleKey`, `descriptionKey`, `cta.textKey`). + +[NOTE] +==== +If a translation key is present but the corresponding localized string is missing, the system defaults to the original text defined in the Quickstart configuration (`title`, `description`, `text`). If no translation key is defined at all, the original text is displayed. +==== + +.Prerequisites +* You have enabled localization in your {product-very-short} application. + +.Procedure + +. For *all* Quickstart steps (both existing and new) in your configuration file, you must define both the original text and the new localization keys. For example, in the `quickstart` section of your custom `{my-app-config-file}` file, add the `titleKey`, `descriptionKey`, and `textKey` values, as follows: ++ +.`{my-app-config-file}` fragment +[source,yaml,subs="+quotes"] +---- +app: + quickstart: + # Existing Quickstart steps should also be updated with keys + - title: 'Setup Authentication' + titleKey: steps.setupAuth.title + description: 'Learn the basics of navigating the Developer Hub interface' + descriptionKey: steps.setupAuth.description + icon: 'home' + cta: + text: 'Get Started' + textKey: steps.setupAuth.ctaTitle + link: '/catalog' +# ... +---- ++ +where: + +`title`:: (Mandatory) Fallback for the title. +`titleKey`:: Key for the translated title. +`description`:: (Mandatory) Fallback for the description. +`descriptionKey`:: Key for the translated description. +`text`:: (Mandatory) Fallback for the CTA text. +`textKey`:: Key for the translated CTA text. + +. In your `dynamic-plugins.yaml` file, add the `translationResources` section to your `red-hat-developer-hub-backstage-plugin-quickstart` configuration, as follows: ++ +.`{my-app-config-file}` fragment +[source,yaml,subs="+quotes"] +---- +plugins: + - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-quickstart + disabled: false + pluginConfig: + dynamicPlugins: + frontend: + red-hat-developer-hub.backstage-plugin-quickstart: + # translationResources definition is required for translations to work + translationResources: + - importName: quickstartTranslations + ref: quickstartTranslationRef + # ... other configurations like mountPoints ... +---- ++ +where: + +importName:: +Enter the name used to reference the import. +ref:: +Reference to the resource definition. +. In your translation file, map the keys from the first step to the localized strings for each supported language. ++ +.`allTranslations.json` fragment +[source,yaml,subs="+quotes"] +---- +"plugin.quickstart": { + "en": { + "steps.setupAuth.title": "Manage plugins EN", + "steps.setupAuth.description": "EN Browse and install extensions to add features, connect with external tools, and customize your experience.", + "steps.setupAuth.ctaTitle": "Start" + }, + "fr": { + "steps.setupAuth.title": "Gérer les plugins FR", + "steps.setupAuth.description": "FR Parcourez et installez des extensions pour ajouter des fonctionnalités, vous connecter à des outils externes et personnaliser votre expérience.", + "steps.setupAuth.ctaTitle": "Commencer" + } +} +---- \ No newline at end of file diff --git a/modules/customizing-the-appearance/proc-enabling-localization-in-rhdh.adoc b/modules/customizing-the-appearance/proc-enabling-localization-in-rhdh.adoc new file mode 100644 index 0000000000..50c1c05076 --- /dev/null +++ b/modules/customizing-the-appearance/proc-enabling-localization-in-rhdh.adoc @@ -0,0 +1,28 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-enabling-localization-in-rhdh_{context}"] += Enabling the localization framework in {product-short} +Enabling localization enhances accessibility, improves the user experience for a global audience, and assists organizations in meeting language requirements in specific regions. + +The language settings of {product} ({product-very-short}) use English by default. In {product-very-short} {product-version}, you can choose to use one of the following supported languages: + +* English (en) +* French (fr) + +.Prerequisites + +.Procedure +. To enable the localization framework in your {product-very-short} application, add the `i18n` section to your custom {product-short} `{my-app-config-file}` configuration file: ++ +[id=i18n] +.`{my-app-config-file}` fragment with localization `i18n` fields +[source,yaml,subs="+quotes"] +---- +... +i18n: + locales: # List of supported locales. Must include `en`, otherwise the translation framework will fail to load. + - en + - fr + defaultLocale: en # Optional. Defaults to `en` if not specified. +... +---- \ No newline at end of file diff --git a/modules/customizing-the-appearance/proc-enabling-localization-in-sidebar-items.adoc b/modules/customizing-the-appearance/proc-enabling-localization-in-sidebar-items.adoc new file mode 100644 index 0000000000..175bfcd6df --- /dev/null +++ b/modules/customizing-the-appearance/proc-enabling-localization-in-sidebar-items.adoc @@ -0,0 +1,49 @@ +:_mod-docs-content-type: CONCEPT + +[id="proc-enabling-localization-in-sidebar-menu-items_{context}"] += Enabling sidebar menu items localization in {product-very-short} + +You can add translation key support for sidebar menu items, so that users can onboard in their preferred language. In {product-short}, all existing and newly created sidebar menu items support localization using the `titleKey` translation key. + +[NOTE] +==== +If a translation key is present but the corresponding localized string is missing, the system defaults to the original text defined in the sidebar menu items configuration (`title`). If no translation key is defined at all, the original text is displayed. +==== + +.Prerequisites +* You have enabled localization in your {product-very-short} application. + +.Procedure + +. For sidebar menu items in your configuration file, you must define both the original text and the new localization keys. For example, in the `dynamicPlugins.frontend.default.main-menu-items.menuItems.default.favorites` section of your `{my-app-config-file}` file, add the `titleKey`, as follows: ++ +.Example `{my-app-config-file}` fragment +[source,yaml,subs="+quotes"] +---- +dynamicPlugins: + frontend: + default.main-menu-items: + menuItems: + default.favorites: + title: Favorites + titleKey: menuItem.favorites + icon: favorite + priority: 100 + enabled: true +---- +. In your translation file, map the `titleKey` from the first step to the localized strings for each supported language. ++ +.Example `allTranslations.json` fragment +[source,yaml,subs="+quotes"] +---- +{ + "rhdh": { + "en": { + "menuItem.favorites": "Favorites" + }, + "fr": { + "menuItem.favorites": "Favoris" + } + } +} +---- \ No newline at end of file diff --git a/modules/customizing-the-appearance/proc-overriding-translations.adoc b/modules/customizing-the-appearance/proc-overriding-translations.adoc new file mode 100644 index 0000000000..6de959d813 --- /dev/null +++ b/modules/customizing-the-appearance/proc-overriding-translations.adoc @@ -0,0 +1,120 @@ +:_mod-docs-content-type: CONCEPT + +[id="prov-overriding-translations_{context}"] += Overriding translations +In {product-very-short} 1.8, you can override plugin translation strings without modifying the plugin source code. + +.Prerequisites +* You have enabled localization in your {product-very-short} application. +* For an Operator-installed {product-very-short} instance, you have installed the {openshift-cli}. For more information about installing `oc`, see {ocp-docs-link}/html/cli_tools/openshift-cli-oc#installing-openshift-cli[Installing the OpenShift CLI]. + +.Procedure +// This feature is not being included in 1.8 +// . In the top user menu, go to *Settings* > *General*. +// . Click on the download link in the *Translations* panel to download the default English translation strings. +. Create a JSON file containing the translation strings that you want to override, as shown in the following example: ++ +[id=i18n-enable] +.`allTranslations.json` fragment with translation string overrides +[source,json] +---- +{ + "plugin.global-floating-action-button": { + "en": { + "fab.quay.label": "QUAY EN JSON", + "fab.rbac.label": "RBAC EN JSON", + "fab.rbac.tooltip": "RBAC EN tooltip JSON" + }, + "fr": { + "fab.quay.label": "QUAY French JSON", + "fab.quay.tooltip": "QUAY french tooltip JSON", + "fab.rbac.label": "RBAC French JSON", + "fab.rbac.tooltip": "RBAC french tooltip JSON" + } + }, + "plugin.global-header": { + "en": { + "applicationLauncher.developerHub": "Developer Hub EN JSON" + }, + "fr": { + "applicationLauncher.developerHub": "Developer Hub French JSON" + } + } +} +---- +. Log in to your cluster and create a config map for your translations override strings: ++ +[source,bash] +---- +oc create configmap all-translations \ + --from-file=//allTranslations.json +---- + +. Update your deployment configuration based on your installation method: + +.. For an Operator-installed {product-very-short} instance, update your `{product-custom-resource-type}` custom resource (CR). For more information about configuring a CR, see link:https://docs.redhat.com/en/documentation/red_hat_developer_hub/{product-version}/html/configuring_red_hat_developer_hub/provisioning-and-using-your-custom-configuration#using-the-operator-to-run-rhdh-with-your-custom-configuration[Using the Red Hat Developer Hub Operator to run Developer Hub with your custom configuration]. +... In the `spec.application.extraFiles` section, add the translations custom app configuration as shown in the following example: ++ +.{product-custom-resource-type} custom resource fragment +[source,yaml,subs="+quotes"] +---- +apiVersion: rhdh.redhat.com/v1alpha3 +kind: Backstage +spec: + application: + extraFiles: + mountPath: /opt/app-root/src/translations + configMaps: + - name: all-translations +---- + +.. For a Helm-installed {product-very-short} instance, update your {product-short} `{backstage}` Helm chart to mount in the {product-short} filesystem your files from the `all-translations` config map: + +... In the {product-short} Helm chart, go to *Root Schema* → *Backstage chart schema* → *Backstage parameters* → *Backstage container additional volume mounts*. + +... Select *Add {backstage} container additional volume mounts* and add the following values: + +mountPath:: +`/opt/app-root/src/translations` +name:: +`all-translations` + +... Add the translations to the *{backstage} container additional volumes* in the {product-short} Helm chart: + +name:: +`all-translations` +configMap:: +defaultMode::: + `420` +name::: +`all-translations` + +. Update the `i18n` section to your custom {product-short} `{my-app-config-file}` configuration file to include the following translation override file: ++ +[id=i18n-override] +.`{my-app-config-file}` fragment with localization `i18n` fields +[source,yaml,subs="+quotes"] +---- +i18n: + locales: # List of supported locales. Must include `en`, otherwise the translation framework will fail to load. + - en + - fr + defaultLocale: en # Optional. Defaults to `en` if not specified. + overrides: # List of JSON translation files applied in order (last file wins). Each file may override/add translations for one or more plugins/locales + - /opt/app-root/src/translations/all-translations.json +---- + +.Additional resources +// * link:{customizing-book-link}#configuring-templates[Enabling floating button localization in {product-short}] +// * link:{customizing-book-link}#configuring-templates[Enabling Quickstart localization in {product-short}] +// * link:{customizing-book-link}#configuring-templates[Enabling sidebar menu items localization in {product-short}] + +{context} + +* xref:proc-enabling-localization-in-floating-action-button_configuring-a-floating-action-button[Enabling floating button localization in {product-short}] +* xref:proc-enabling-localization-in-quickstarts_customizing-the-quickstarts[Enabling Quickstart localization in {product-short}] +* xref:proc-enabling-localization-in-sidebar-menu-items_customizing-appearance[Enabling sidebar menu items localization in {product-short}] + +// * xref:proc-enabling-localization-in-floating-action-button_{context}[fggdsg] +// * xref:proc-enabling-localization-in-quickstarts_{context}[fggdsg] +// * xref:proc-enabling-localization-in-sidebar-menu-items_{context}[fggdsg] \ No newline at end of file diff --git a/modules/customizing-the-appearance/proc-select-rhdh-language.adoc b/modules/customizing-the-appearance/proc-select-rhdh-language.adoc new file mode 100644 index 0000000000..3bb91ca3fc --- /dev/null +++ b/modules/customizing-the-appearance/proc-select-rhdh-language.adoc @@ -0,0 +1,21 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-selecting-rhdh-language_{context}"] += Selecting the language for your {product-short} instance + +You can choose to use one of the following supported languages: + +* English (default) +* French + +.Prerequisites + +* You are logged in to the {product-short} web console. +* You have xref:proc-enabling-localization-in-rhdh_{context}[enabled the localization framework] in your {product-very-short} instance. + +.Procedure + +. From the {product-short} web console, click the down arrow next to your profile name, then click *Settings*. +. From the *Appearance* panel, click the language dropdown to select your language of choice. ++ +image::rhdh/customize-language-dropdown.png[] \ No newline at end of file diff --git a/modules/customizing-the-appearance/ref-best-practices-for-localization.adoc b/modules/customizing-the-appearance/ref-best-practices-for-localization.adoc new file mode 100644 index 0000000000..a8e1b36646 --- /dev/null +++ b/modules/customizing-the-appearance/ref-best-practices-for-localization.adoc @@ -0,0 +1,34 @@ +:_mod-docs-content-type: REFERENCE + +[id="ref-best-practices-for-localization_{context}"] += Best practices for implementing localization support for custom plugins in {product-very-short} +When you add localization support to your {product-very-short} plugins, the following best practices help ensure that you establish a robust, type-safe, and future-proof localization workflow, separating the immutable source text from the organized key structure, and ensuring reliable deployment across all targeted languages: + +Do not modify original English strings:: This preserves the source of truth for all translators, preventing unexpected changes that would invalidate existing translations and ensuring consistency across all versions. + +Use flat dot notation in translation files:: Flat dot notation, for example `page.title`, follows the standard `i18next` library convention, which optimizes runtime lookups and keeps the actual translation values concise and easy to manage for translation services. + +Use nested objects in the reference file for TypeScript support:: This allows the TypeScript compiler to enforce structural type checking on your translation keys, catching errors during development rather than at runtime. + +Test with mocks to ensure translations work correctly:: This isolates the translation logic, guaranteeing the correct keys are passed and rendered without relying on a full environment setup or external translation files during unit testing. + +Add all languages to your application configuration:: This ensures that the {product-very-short} application initializes and loads all necessary language resources at startup, making the locales immediately available for users to select in the UI. + +.Common patterns + +[cols="20%,35%,45%", frame="all", options="header"] +|=== +| Use case | Pattern | Example + +| Simple text +| `t('key')` +| `t('page.title')` + +| With variables +| `t('key', {param})` +| `t('table.topN', {count: '5'})` + +| Dynamic keys +| `t(config.titleKey as any)` +| `t('cards.overview.title' as any)` +|=== \ No newline at end of file diff --git a/modules/customizing-the-home-page/proc-customizing-the-home-page-cards.adoc b/modules/customizing-the-home-page/proc-customizing-the-home-page-cards.adoc index c3c123a540..162708c1a6 100644 --- a/modules/customizing-the-home-page/proc-customizing-the-home-page-cards.adoc +++ b/modules/customizing-the-home-page/proc-customizing-the-home-page-cards.adoc @@ -205,10 +205,9 @@ dynamicPlugins: ### RHDH * [Website](https://developers.redhat.com/rhdh/overview) * [Documentation](https://docs.redhat.com/en/documentation/red_hat_developer_hub/) - * [Janus Plugins](https://github.com/janus-idp/backstage-plugins) * [Backstage Community Plugins](https://github.com/backstage/community-plugins) * [RHDH Plugins](https://github.com/redhat-developer/rhdh-plugins) - * [RHDH Showcase](https://github.com/redhat-developer/rhdh) + * [RHDH Hub](https://github.com/redhat-developer/rhdh) - mountPoint: home.page/cards importName: Markdown config: @@ -226,10 +225,9 @@ dynamicPlugins: * [Website](https://developers.redhat.com/rhdh/overview) * [Documentation](https://docs.redhat.com/en/documentation/red_hat_developer_hub/) * [Documentation](https://docs.redhat.com/en/documentation/red_hat_developer_hub/) - * [Janus Plugins](https://github.com/janus-idp/backstage-plugins) * [Backstage Community Plugins](https://github.com/backstage/community-plugins) * [RHDH Plugins](https://github.com/redhat-developer/rhdh-plugins) - * [RHDH Showcase](https://github.com/redhat-developer/rhdh) + * [RHDH Hub](https://github.com/redhat-developer/rhdh) ---- -- diff --git a/modules/developer-lightspeed/con-about-bring-your-own-model.adoc b/modules/developer-lightspeed/con-about-bring-your-own-model.adoc index a427616a43..7bde3adc85 100644 --- a/modules/developer-lightspeed/con-about-bring-your-own-model.adoc +++ b/modules/developer-lightspeed/con-about-bring-your-own-model.adoc @@ -3,7 +3,7 @@ [id="con-about-bring-your-own-model_{context}"] = About Bring Your Own Model -{ls-short} does not provide its own inference services, but uses a _Bring Your Own Model_ approach. This means that you can configure the {rcs-name} to talk to the inference server or service of your choice. This also means that you are responsible for ensuring that the configured service meets your particular company policies and legal requirements, including any applicable terms with the third-party model provider. +{ls-short} does not provide its own inference services, but uses a _Bring Your Own Model_ approach. This means that you can configure the {lcs-name} to talk to the inference server or service of your choice. This also means that you are responsible for ensuring that the configured service meets your particular company policies and legal requirements, including any applicable terms with the third-party model provider. //Add the cross reference to "Bring your own model" The only technical requirements for inference services are: diff --git a/modules/developer-lightspeed/con-about-developer-lightspeed.adoc b/modules/developer-lightspeed/con-about-developer-lightspeed.adoc index fb440177e3..a7b73ffe1c 100644 --- a/modules/developer-lightspeed/con-about-developer-lightspeed.adoc +++ b/modules/developer-lightspeed/con-about-developer-lightspeed.adoc @@ -14,7 +14,7 @@ This early access program enables customers to share feedback on the user experi You can experience {ls-short} Developer Preview by installing the Developer Lightspeed for {product} plugin within an existing {product-very-short} instance. Alternatively, if you prefer to test it locally first, you can try {ls-short} using {product-local-very-short}. -image::rhdh-plugins-reference/developer-lightspeed.png[] +image::rhdh-plugins-reference/developer-lightspeed-1-8-0.png[] .Additional resources -* link:https://github.com/redhat-developer/rhdh-local/blob/main/README.md[{product-local-very-short}] +* link:https://github.com/redhat-developer/rhdh-local/blob/main/README.md[{product-local-very-short}] \ No newline at end of file diff --git a/modules/developer-lightspeed/con-about-lightspeed-stack-and-llama-stack.adoc b/modules/developer-lightspeed/con-about-lightspeed-stack-and-llama-stack.adoc new file mode 100644 index 0000000000..99f009fb71 --- /dev/null +++ b/modules/developer-lightspeed/con-about-lightspeed-stack-and-llama-stack.adoc @@ -0,0 +1,33 @@ +:_mod-docs-content-type: CONCEPT + +[id="con-about-lightspeed-stack-and-llama-stack_{context}"] += About {lcs-name} and Llama Stack + +The {lcs-name} and Llama Stack deploy together as sidecar containers to augment {product-very-short} functionality. + +The Llama Stack delivers the augmented functionality by integrating and managing core components, which include: + +* Large language model (LLM) inference providers + +* Model Context Protocol (MCP) or Retrieval Augmented Generation (RAG) tool runtime providers + +* Safety providers + +* Vector database settings + +The {lcs-name} serves as the Llama Stack service intermediary. It manages the operational configuration and key data, specifically: + +* User feedback collection + +* MCP server configuration + +* Conversation history + +Llama Stack provides the inference functionality that {lcs-short} uses to process requests. For more information, see https://llamastack.github.io/docs#what-is-llama-stack[What is Llama Stack]. + +The {ls-brand-name} plugin in {product-very-short} sends prompts and receives LLM responses through the {lcs-short} sidecar. {lcs-short} then uses the Llama Stack sidecar service to perform inference and MCP or RAG tool calling. + +[NOTE] +==== +{ls-brand-name} is a Developer Preview release. You must manually deploy the {lcs-name} and Llama Stack sidecar containers, and install the {ls-brand-name} plugin on your {product-very-short} instance. +==== \ No newline at end of file diff --git a/modules/developer-lightspeed/con-about-road-core-service.adoc b/modules/developer-lightspeed/con-about-road-core-service.adoc deleted file mode 100644 index 615529bd5d..0000000000 --- a/modules/developer-lightspeed/con-about-road-core-service.adoc +++ /dev/null @@ -1,11 +0,0 @@ -:_mod-docs-content-type: CONCEPT - -[id="con-about-rcs_{context}"] -= About {rcs-name} - -The {rcs-name} ({rcs-short}) acts as an intermediary and service layer for interfacing with LLM providers. {rcs-short} handles LLM provider setup, authentication, and includes functionalities such as question validation, feedback, and Retrieval Augmented Generation (RAG). The {ls-short} plugin within {product-very-short} communicates with the {rcs-short} sidecar to send prompts and receives responses from the configured LLM service. The {rcs-short} sidecar is used to centralize the LLM interaction logic and configuration alongside your {product-very-short} instance. - -[NOTE] -==== -{ls-brand-name} is a Developer Preview release. You must manually deploy the {rcs-name} as a sidecar container, and then install the {ls-short} plugin on your {product-very-short} instance. -==== diff --git a/modules/developer-lightspeed/con-llm-requirements.adoc b/modules/developer-lightspeed/con-llm-requirements.adoc index 6ecffddcfd..da5360622c 100644 --- a/modules/developer-lightspeed/con-llm-requirements.adoc +++ b/modules/developer-lightspeed/con-llm-requirements.adoc @@ -5,11 +5,10 @@ {ls-short} follows a _Bring Your Own Model_ approach. This model means that to function, {ls-short} requires access to a large language model (LLM) which you must provide. An LLM is a type of generative AI that interprets natural language and generates human-like text or audio responses. When an LLM is used as a virtual assistant, the LLM can interpret questions and provide answers in a conversational manner. -LLMs are usually provided by a service or server. Since {ls-short} does not provide an LLM for you, you must configure your preferred LLM provider during installation. -You can use {ls-short} with a number of LLM providers that offer the OpenAI API interface including the following LLMS: +LLMs are usually provided by a service or server. Because {ls-short} does not provide an LLM for you, you must configure your preferred LLM provider during installation. You can configure the underlying Llama Stack server to integrate with a number of LLM `providers` that offer compatibility with the OpenAI API including the following inference providers: * OpenAI (cloud-based inference service) -* Red Hat OpenShift AI (enterprise model builder & inference server) -* Red Hat Enterprise Linux AI (enterprise inference server) +* {rhoai-brand-name} (enterprise model builder and inference server) +* {rhel} AI (enterprise inference server) * Ollama (popular desktop inference server) * vLLM (popular enterprise inference server) diff --git a/modules/developer-lightspeed/con-rag-embeddings.adoc b/modules/developer-lightspeed/con-rag-embeddings.adoc index 854c47078a..9084e17383 100644 --- a/modules/developer-lightspeed/con-rag-embeddings.adoc +++ b/modules/developer-lightspeed/con-rag-embeddings.adoc @@ -1,6 +1,8 @@ :_mod-docs-content-type: CONCEPT [id="con-rag-embeddings_{context}"] -= Retrieval Augmented Generation embeddings += Retrieval augmented generation (RAG) embeddings -The {product} documentation set has been added to the {rcs-name} as a RAG embedding. +The {product} documentation serves as the Retrieval-Augmented Generation (RAG) data source. + +RAG initialization occurs through an initialization container, which copies the RAG data to a shared volume. The Llama Stack sidecar then mounts this shared volume to access the RAG data. The Llama Stack service uses the resulting RAG embeddings in the vector database as a reference. This allows the service to provide citations to production documentation during the inference process. \ No newline at end of file diff --git a/modules/developer-lightspeed/con-supported-architecture.adoc b/modules/developer-lightspeed/con-supported-architecture.adoc index f217e6fd93..ecb43c36a0 100644 --- a/modules/developer-lightspeed/con-supported-architecture.adoc +++ b/modules/developer-lightspeed/con-supported-architecture.adoc @@ -3,13 +3,11 @@ [id="con-supported-architecture_{context}"] = Supported architecture for {ls-brand-name} -{ls-short} is available as a plugin on all platforms that host {product-very-short}, and it requires the use of {rcs-name} ({rcs-short}) as a sidecar container. +{ls-short} is available as a plugin on all platforms that host {product-very-short}. It requires two sidecar containers: the {lcs-name} ({lcs-short}) and the Llama Stack service. +The {lcs-short} container acts as the intermediary layer, which interfaces with and manages the Llama Stack service. -[NOTE] -==== -Currently, the provided {rcs-short} image is built for x86 platforms. To use other platforms (for example, arm64), ensure that you enable emulation. -==== +image::rhdh-plugins-reference/developer-lightspeed-architecture-1-8-0.png[] .Additional resources -* link:https://access.redhat.com/support/policy/updates/developerhub[{product} Life Cycle and supported platforms] +* link:https://access.redhat.com/support/policy/updates/developerhub[{product} Life Cycle and supported platforms] \ No newline at end of file diff --git a/modules/developer-lightspeed/proc-changing-your-llm-provider.adoc b/modules/developer-lightspeed/proc-changing-your-llm-provider.adoc index dee81aabbe..5e4d6b8313 100644 --- a/modules/developer-lightspeed/proc-changing-your-llm-provider.adoc +++ b/modules/developer-lightspeed/proc-changing-your-llm-provider.adoc @@ -3,66 +3,25 @@ [id="proc-changing-your-llm-provider_{context}"] = Changing your LLM provider in {ls-short} -{ls-short} operates on a {developer-lightspeed-link}#con-about-bring-your-own-model_appendix-about-user-data-security[_Bring Your Own Model_] approach, meaning you must provide and configure access to your preferred Large Language Model (LLM) provider for the service to function. The Road-Core Service (RCS) acts as an intermediary layer that handles the configuration and setup of these LLM providers. - -[IMPORTANT] -==== -The LLM provider configuration section includes a mandatory dummy provider block. Due to limitations of Road Core, this dummy provider must remain present when working with Lightspeed. This block is typically marked with comments (# Start: Do not remove this block and # End: Do not remove this block) and must not be removed from the configuration file. -==== - -.Prerequisites - -* The path to the file containing your API token must be accessible by the RCS container, requiring the file to be mounted to the RCS container. +{ls-short} operates on a {developer-lightspeed-link}#con-about-bring-your-own-model_appendix-about-user-data-security[_Bring Your Own Model_] approach, meaning you must provide and configure access to your preferred large language model (LLM) provider for the service to function. Llama Stack acts as an intermediary layer that handles the configuration and setup of these LLM providers. .Procedure -You can define additional LLM providers using either of following methods: - -* Recommended: In your Developer Lightspeed plugin configuration (the `lightspeed` section within the `lightspeed-app-config.yaml` file), define the new provider or providers under the `lightspeed.servers` key as shown in the following code: -+ -[source,yaml] ----- -lightspeed: - servers: - - id: __ - url: __ - token: __ ----- -+ -[NOTE] -==== -In Developer preview, only one LLM server is supported at a time. -==== -** Optional: You can set the `id`, `url`, and `token` values in a Kubernetes Secret and reference them as environment variables using the `envFrom` section. -[source,yaml] ----- -containers: - - name: my-container - image: my-image - envFrom: - - secretRef: - name: my-secret ----- - -* You can add new LLM providers by updating the `rcsconfig.yaml` file. -.. In the `llm_providers` section within your `rcsconfig.yaml` file, add your new provider configuration below the mandatory dummy provider block as shown in the following code: +* You can define additional LLM providers by updating your Llama Stack app config (`llama-stack`) file. In the `inference` section within your `llama-stack.yaml` file, add your new provider configuration as shown in the following example: + [source,yaml] ---- -llm_providers: - # Start: Do not remove this block - - name: dummy - type: openai - url: https://dummy.com - models: - - name: dummymodel - # END: Do not remove this block - - name: __ - type: openai - url: __ - credentials_path: path/to/token - disable_model_check: true ----- -.. If you need to define a new provider in `rcsconfig.yaml`, you must configure the following critical parameters: -** `credentials_path`: Specifies the path to a `.txt` file that contains your API token. This file must be mounted and accessible by the RCS container. -** `disable_model_check`: Set this field to `true` to allow the RCS to locate models through the `/v1/models` endpoint of the provider. When you set this field to `true`, you avoid the need to define model names explicitly in the configuration. \ No newline at end of file + #START - Adding your LLM provider + inference: + - provider_id: vllm + provider_type: remote::vllm + config: + url: ${env.VLLM_URL} + api_token: ${env.VLLM_API_KEY} + max_tokens: ${env.VLLM_MAX_TOKENS:=4096} + tls_verify: ${env.VLLM_TLS_VERIFY:=true} + - provider_id: sentence-transformers + provider_type: inline::sentence-transformers + config: {} +#END - Adding your LLM provider +---- \ No newline at end of file diff --git a/modules/developer-lightspeed/proc-customizing-the-chat-history-storage.adoc b/modules/developer-lightspeed/proc-customizing-the-chat-history-storage.adoc index a7f7321f89..23db06e13e 100644 --- a/modules/developer-lightspeed/proc-customizing-the-chat-history-storage.adoc +++ b/modules/developer-lightspeed/proc-customizing-the-chat-history-storage.adoc @@ -3,20 +3,18 @@ [id="proc-customizing-the-chat-history-storage_{context}"] = Customizing the chat history storage in {ls-short} -By default, the {rcs-short} service stores chat history using an in-memory database. This means that if you restart the Pod containing the server, the chat history is lost. You can manually configure {ls-short} to store the chat history persistently as a long-term backup with PostgreSQL by any of the following methods: - -* {product-very-short} Operator -* {product-very-short} Helm chart +By default, the {ls-short} service stores chat history in a non-persistent local SQL database within in the {lcs-short} container. This means that chat history is lost if you create and use a new {lcs-short} sidecar. You can manually configure {ls-short} to store the chat history persistently as a long-term backup with PostgreSQL by updating your {lcs-short} service configuration. + [WARNING] ==== -If you configure {ls-short} to store chat history using PostgreSQL, prompts and responses are recorded and can be reviewed by your platform administrators. If any of your user's chat history contains any private, sensitive, or confidential information, this might have data privacy and security implications that you need to assess. For users that wish to have their chat data removed, they must request their respective platform administrator to perform this action. {company-name} does not collect (or have access to) any of this chat history data. +Configuring {ls-short} to use PostgreSQL records prompts and responses, which platform administrators can review. You must assess any data privacy and security implications if user chat history contains private, sensitive, or confidential information. For users that wish to have their chat data removed, they must request their respective platform administrator to perform this action. {company-name} does not collect or access this chat history data. ==== .Procedure -* When you are using {ls-short} on an Operator-installed {product-very-short} instance, in your {product-very-short} instance ConfigMap, update the `conversation-cache` field as shown in the following example: -+ +. Configure the chat history storage type in the {lcs-short} configuration file (`lightspeed-stack.yaml`) using any of the relevant options: +** To enable persistent storage with PostgreSQL, add the following configuration: ++ [source,yaml] ---- conversation_cache: @@ -24,24 +22,18 @@ If you configure {ls-short} to store chat history using PostgreSQL, prompts and postgres: host: __ port: __ - dbname: __ - user: __ - password_path: postgres_password.txt - ca_cert_path: postgres_cert.crt - ssl_mode: "require" + db: __ + user: __ + password: __ ---- - -* When you are using {ls-short} on a Helm-installed {product-very-short} instance, in your {product-very-short} instance `values.yaml` file, update the `conversation-cache` field as shown in the following example: +* To retain the default, non-persistent SQLite storage, make sure the configuration is set as shown in the following example: + [source,yaml] ---- - conversation_cache: - type: postgres - postgres: - host: __ - port: __ - dbname: __ - user: __ - password_path: postgres_password.txt - ca_cert_path: postgres_cert.crt +conversation_cache: + type: "sqlite" + sqlite: + db_path: "/tmp/cache.db" ---- + +. Restart your {lcs-short} service to apply the new configuration. \ No newline at end of file diff --git a/modules/developer-lightspeed/proc-gathering-feedback.adoc b/modules/developer-lightspeed/proc-gathering-feedback.adoc index d8693da449..49de7ea7ae 100644 --- a/modules/developer-lightspeed/proc-gathering-feedback.adoc +++ b/modules/developer-lightspeed/proc-gathering-feedback.adoc @@ -3,19 +3,21 @@ [id="proc-gathering-feedback_{context}"] = Gathering feedback in {ls-short} -Feedback collection is an optional feature configured on the {rcs-short}. This feature gathers user feedback by providing thumbs-up/down ratings and text comments directly from the chat window. {rcs-short} gathers the feedback, along with the user's query and the response of the model, and stores it as a JSON file within the local file system of the Pod for later collection and analysis by the platform administrator. This can be useful for assessing model performance and improving your users' experience. The collected feedback is stored in the cluster where {product-very-short} and {rcs-short} are deployed, and as such, is only accessible by the platform administrators for that cluster. For users that intend to have their data removed, they must request their respective platform administrator to perform that action as {company-name} does not collect (or have access to) any of this data. +Feedback collection is an optional feature configured on the {lcs-short}. This feature gathers user feedback by providing thumbs-up/down ratings and text comments directly from the chat window. + +{lcs-short} collects the feedback, the user's query, and the response of the model, storing the data as a JSON file on the local file system of the Pod. A platform administrator must later collect and analyze this data to assess model performance and improve the user experience. + +The collected data resides in the cluster where {product-very-short} and {lcs-short} are deployed, making it accessible only to platform administrators for that cluster. For data removal, users must request this action from their platform administrator, as {company-name} neither collects nor accesses this data. .Procedure -* To enable or disable feedback, in your {rcs-short} configuration file, add the following settings: +. To enable or disable feedback collection, in the {lcs-short} configuration file (`lightspeed-stack.yaml`), add the following settings: + [source,yaml] ---- -llm_providers: - ....... -ols_config: - ...... user_data_collection: - feedback_disabled: - feedback_storage: "/app-root/tmp/data/feedback" + feedback_enabled: true + feedback_storage: "/tmp/data/feedback" + transcripts_enabled: true + transcripts_storage: "/tmp/data/transcripts" ---- diff --git a/modules/developer-lightspeed/proc-installing-and-configuring-lightspeed.adoc b/modules/developer-lightspeed/proc-installing-and-configuring-lightspeed.adoc index 449e8d9c7c..c2c8dc1235 100644 --- a/modules/developer-lightspeed/proc-installing-and-configuring-lightspeed.adoc +++ b/modules/developer-lightspeed/proc-installing-and-configuring-lightspeed.adoc @@ -3,516 +3,392 @@ [id="proc-installing-and-configuring-lightspeed_{context}"] = Installing and configuring {ls-brand-name} -You must install and configure both the {ls-short} and the {rcs-short} sidecar container manually. +{ls-short} consists of several components which work together to deliver virtual assistant (chat) functionality to your developers. The following list main components: + +* *Llama stack server (container sidecar):* This service (based on open source https://github.com/llamastack/llama-stack[Llama Stack]) operates as the main gateway to your LLM inferencing provider for chat services. It also allows you to integrate other services such as Model Context Protocol (MCP) thanks to its modular nature. You must integrate your LLM provider with the Llama Stack server in order to support the chat functionality of {ls-short}. We call this dependency on external LLM providers _Bring Your Own Model_ or BYOM. + +* *{lcs-name} ({lcs-short}) (container sidecar):* This service (based on the open source https://github.com/lightspeed-core[Lightspeed Core]) enables additional features in addition to those that the Llama Stack server provides, such as maintaining your chat history and gathering user feedback. + +* *{ls-brand-name} (dynamic plugins):* These plugins are required to enable the {ls-short} user interface within your {product-very-short} instance. + +Configuring these components to initialise correctly and communicate with each other is essential in order to provide {ls-short} to your users. + +[NOTE] +==== +If you have already installed the previous {ls-short} Developer Preview with Road-Core Service, you must remove the previous {ls-short} configurations and settings and reinstall. + +This step is necessary as {ls-short} has a new architecture. In the previous release, {ls-short} required the use of the Road-Core Service as a sidecar container for interfacing with LLM providers. The updated architecture removes and replaces {rcs-short} with the new {lcs-name} and Llama Stack server, and requires new configurations for the plugins, volumes, containers, and secrets. +==== .Prerequisites -* You are logged into your {ocp-short} account. -* You have an {product-very-short} instance installed either of the following ways: -** {installing-on-ocp-book-link}#assembly-install-rhdh-ocp-operator[Using the Operator] -** {installing-on-ocp-book-link}#assembly-install-rhdh-ocp-helm[Using the Helm chart] + +* You are logged in to your {ocp-short} account. +* You have an {product-very-short} instance installed using either the Operator or the Helm chart. +* You have created a {installing-and-viewing-plugins-book-link}##rhdh-installing-rhdh-plugins_title-plugins-rhdh-about[custom dynamic plugins ConfigMap]. .Procedure -. Create the {rcs-short} ConfigMap. -.. In the {ocp-short} web console, go to your {product-very-short} instance and select the *ConfigMaps* tab. +You must manually install and configure the {ls-short} plugin, the {lcs-name} ({lcs-short}) sidecar container, and the Llama Stack sidecar container. + +. Create the {lcs-name} ({lcs-short}) ConfigMap: The {lcs-short} ConfigMap stores the configuration for the {lcs-name} and is mounted to the {lcs-short} container. + +.. In the {ocp-short} web console, navigate to your {product-very-short} instance and select the *ConfigMaps* tab. .. Click *Create ConfigMaps*. -.. From the *Create ConfigMap* page, select the *YAML view* option in *Configure via*, and edit the file as shown in the following example: +.. From the *Create ConfigMap* page, select the *YAML view* option and edit the file using the following structure. This example demonstrates the configuration for the {lcs-short} ConfigMap, typically named `lightspeed-stack`, which connects to the Llama Stack service locally on port `8321`: + [source,yaml] ---- kind: ConfigMap apiVersion: v1 metadata: - name: rcsconfig - namespace: __ # Enter your namespace (For example, `rhdh`) + name: lightspeed-stack data: - rcsconfig.yaml: | - llm_providers: - # Start: Do not remove this block - - name: dummy - type: openai - url: https://dummy.com - models: - - name: dummymodel - # End: Do not remove this block - ols_config: + lightspeed-stack.yaml: | + name: Lightspeed Core Service (LCS) + service: + host: 0.0.0.0 + port: ${LIGHTSPEED_SERVICE_PORT} + auth_enabled: false + workers: 1 + color_log: true + access_log: true + llama_stack: + use_as_library_client: false + url: http://localhost:8321 user_data_collection: - log_level: "DEBUG" - feedback_disabled: false - feedback_storage: "/tmp/feedback" - reference_content: - product_docs_index_path: "./vector_db/rhdh_product_docs/1.7" - product_docs_index_id: rhdh-product-docs-1_7 - embeddings_model_path: "./embeddings_model" - conversation_cache: - type: memory - memory: - max_entries: 1000 - logging_config: - app_log_level: info - lib_log_level: warning - uvicorn_log_level: info - suppress_metrics_in_log: false - suppress_auth_checks_warning_in_log: false - authentication_config: + feedback_enabled: true + feedback_storage: "/tmp/data/feedback" + transcripts_enabled: true + transcripts_storage: "/tmp/data/transcripts" + authentication: module: "noop" - default_provider: dummy - default_model: dummymodel - query_validation_method: disabled - dev_config: - enable_dev_ui: false - disable_auth: false - disable_tls: true - enable_system_prompt_override: true - user_data_collector_config: - user_agent: "example-user-agent" - ingress_url: "https://example.ingress.com/upload" + conversation_cache: + type: "sqlite" + sqlite: + db_path: "./lcs_cache.db" + mcp_servers: + - name: mcp::backstage + provider_id: model-context-protocol + url: https:///api/mcp-actions/v1 ---- + -[IMPORTANT] +where: + +`{product-very-short}_HOST`:: Enter the hostname for {product-very-short}. ++ +[NOTE] ==== -Do not remove the block in the `llm_providers` section. This requirement is crucial when working with {ls-short} because of limitations discovered in Road Core. If you decide to use an alternative LLM provider, you should refer to additional information in the guide. For more information, see {developer-lightspeed-link}#proc-changing-your-llm-provider_customizing-developer-lightspeed[Changing your LLM provider]. +The {lcs-short} ConfigMap can optionally include configuration for `mcp_servers` to enable MCP integration. ==== -.. Optional: Configure the number of workers that scale the REST API by specifying the following example to the `ols_config.max_workers` parameter in the {rcs-short} ConfigMap. + +.. Click *Create*. + +. Create an MCP_TOKEN. +.. https://backstage.io/docs/auth/service-to-service-auth/#static-tokens[Generate the external static token]. +.. Create a secret file as shown in the following example: + [source,yaml] ---- -ols_config: - max_workers: __ +apiVersion: v1 +kind: Secret +metadata: + name: lightspeed-secrets + namespace: <_your_namespace_> +type: Opaque +stringData: + MCP_TOKEN: <_your_static_token> ---- -.. Click *Create*. -. Create the {ls-short} ConfigMap. -+ -[NOTE] -==== -Create a dedicated {ls-short} ConfigMap instead of adding an additional section to your existing {product-very-short} custom application configuration file (for example, `lightspeed-app-config.yaml`). Creating two files prevents the entire {product-very-short} ConfigMap from being loaded into {rcs-short}. -==== -.. In the {ocp-short} web console, go to your {product-very-short} instance and select the *ConfigMaps* tab. +. Create the {ls-short} ConfigMap: Create a dedicated {ls-short} ConfigMap (`lightspeed-app-config`) to hold specific plugin configurations. +.. In the {ocp-short} web console, navigate to your {product-very-short} instance and select the *ConfigMaps* tab. .. Click *Create ConfigMap*. -.. From the *Create ConfigMap* page, select the *YAML view* option in *Configure via*, and add the following example: +.. From the *Create ConfigMap* page, select the *YAML view* option and add the following example: + -[source,yaml,subs="+attributes"] +[source,yaml] ---- kind: ConfigMap apiVersion: v1 metadata: name: lightspeed-app-config - namespace: <__namespace__> # Enter your {product-very-short} instance namespace + namespace: <__namespace__> # Enter your RHDH instance namespace data: app-config.yaml: |- backend: csp: - upgrade-insecure-requests: false - img-src: + upgrade-insecure-requests: false + img-src: - "'self'" - "data:" - https://img.freepik.com - https://cdn.dribbble.com - https://avatars.githubusercontent.com # This is to load GitHub avatars in the UI - script-src: - - "'self'" - - https://cdn.jsdelivr.net + script-src: + - "'self'" + - https://cdn.jsdelivr.net lightspeed: - # REQUIRED: Configure LLM servers with OpenAI API compatibility - servers: - - id: ${LLM_SERVER_ID} - url: ${LLM_SERVER_URL} - token: ${LLM_SERVER_TOKEN} - - # OPTIONAL: Enable/disable question validation (default: true) - # When enabled, restricts questions to RHDH-related topics for better security - questionValidation: true + mcpServers: + - name: mcp::backstage + token: ${MCP_TOKEN} # OPTIONAL: Custom users prompts displayed to users # If not provided, the plugin uses built-in default prompts prompts: - - title: 'Getting Started with {product}' + - title: `Getting Started with Red Hat Developer Hub` message: Can you guide me through the first steps to start using {product-short} as a developer, like exploring the Software Catalog and adding my service? # OPTIONAL: Port for lightspeed service (default: 8080) # servicePort: ${LIGHTSPEED_SERVICE_PORT} # OPTIONAL: Override default RHDH system prompt - # systemPrompt: "You are a helpful assistant focused on {product} development." + # systemPrompt: "You are a helpful assistant focused on Red Hat Developer Hub development." ---- -. Create {ls-short} secret file. + +.. Click *Create*. + +. Create Llama Stack Secret file: This Secret file holds sensitive configuration data for your LLM provider and Llama Stack environment variables. This secret is typically named `llama-stack-secrets`. + .. In the {ocp-short} web console, go to *Secrets*. -.. Click *Create > Key/value secret*. -.. In the *Create key/value secret* page, select the *YAML view* option in *Configure via*, and add the following example: +.. Click *Create* -> *Key/value secret*. +.. In the *Create key/value secret* page, select the *YAML view* option and add the following example: + [source,yaml] ---- -kind: Secret apiVersion: v1 +kind: Secret metadata: - name: lightspeed-secrets - namespace: __ # Enter your rhdh instance namespace -stringData: - LLM_SERVER_ID: __ # Enter your server ID (for example, `ollama` or `granite`) - LLM_SERVER_TOKEN: __ # Enter your server token value - LLM_SERVER_URL: __ # Enter your server URL + name: llama-stack-secrets type: Opaque +stringData: + VLLM_URL: "" + VLLM_API_KEY: "" + VLLM_MAX_TOKENS: "" + VLLM_TLS_VERIFY: "" + OLLAMA_URL: "" + OPENAI_API_KEY: "" + VALIDATION_PROVIDER: "" + VALIDATION_MODEL_NAME: "" ---- ++ +where: + +`VLLM_URL`:: Set this if you are using the `redhat-ai-dev` Llama Stack image +`VLLM_API_KEY`:: Set this if you are using the `redhat-ai-dev` Llama Stack image +`VLLM_MAX_TOKENS`:: Optional +`VLLM_TLS_VERIFY`:: Optional +`OLLAMA_URL`:: Set this if you altered the `run.yaml` file +`OPENAI_API_KEY`:: Set this if you altered the `run.yaml` file +`VALIDATION_PROVIDER`:: Set this as `vllm`, `ollama`, `openai`, depending on the key you have set in this configuration file +`VALIDATION_MODEL_NAME`:: Set the name of the model you want to use for validation + .. Click *Create*. -. To your existing dynamic plugins ConfigMap (for example, `dynamic-plugins-rhdh.yaml`), add the {ls-short} plugin image as shown in the following example: -+ -[source,yaml,subs="+attributes"] ----- -includes: - - dynamic-plugins.default.yaml - plugins: - - package: oci://ghcr.io/redhat-developer/rhdh-plugin-export-overlays/red-hat-developer-hub-backstage-plugin-lightspeed:bs_1.39.1__0.5.7!red-hat-developer-hub-backstage-plugin-lightspeed - disabled: false - pluginConfig: - lightspeed: - # OPTIONAL: Custom users prompts displayed to users - # If not provided, the plugin uses built-in default prompts - prompts: - - title: 'Getting Started with {product}' - message: Can you guide me through the first steps to start using {product-short} - as a developer, like exploring the Software Catalog and adding my - service? - dynamicPlugins: - frontend: - red-hat-developer-hub.backstage-plugin-lightspeed: - appIcons: - - name: LightspeedIcon - module: LightspeedPlugin - importName: LightspeedIcon - dynamicRoutes: - - path: /lightspeed - importName: LightspeedPage - module: LightspeedPlugin - menuItem: - icon: LightspeedIcon - text: Lightspeed - - package: oci://ghcr.io/redhat-developer/rhdh-plugin-export-overlays/red-hat-developer-hub-backstage-plugin-lightspeed-backend:bs_1.39.1__0.5.7!red-hat-developer-hub-backstage-plugin-lightspeed-backend - disabled: false - pluginConfig: - lightspeed: - # REQUIRED: Configure LLM servers with OpenAI API compatibility - servers: - - id: ${LLM_SERVER_ID} - url: ${LLM_SERVER_URL} - token: ${LLM_SERVER_TOKEN} - - # OPTIONAL: Port for lightspeed service (default: 8080) - # servicePort: ${LIGHTSPEED_SERVICE_PORT} ----- - -. Update your deployment configuration based on your installation method: -.. For an Operator-installed {product-very-short} instance, update your {product-custom-resource-type} custom resource (CR). -... In the `spec.application.appConfig.configMaps` section, add the {ls-short} custom app configuration as shown in the following example: +. Update the dynamic plugins ConfigMap: Add the {ls-short} plugin image to your existing dynamic plugins ConfigMap (`dynamic-plugins-rhdh`). + [source,yaml] ---- - appConfig: - configMaps: - - name: lightspeed-app-config - mountPath: /opt/app-root/src +includes: +- dynamic-plugins.default.yaml +plugins: +- package: oci://ghcr.io/redhat-developer/rhdh-plugin-export-overlays/red-hat-developer-hub-backstage-plugin-lightspeed:next__1.0.1!red-hat-developer-hub-backstage-plugin-lightspeed + disabled: false + pluginConfig: + lightspeed: + # OPTIONAL: Custom users prompts displayed to users + prompts: + - title: 'Getting Started with Red Hat Developer Hub' + message: Can you guide me through the first steps to start using Developer Hub as a developer, like exploring the Software Catalog and adding my service? + dynamicPlugins: + frontend: + red-hat-developer-hub.backstage-plugin-lightspeed: + appIcons: + - name: LightspeedIcon + module: LightspeedPlugin + importName: LightspeedIcon + dynamicRoutes: + - path: /lightspeed + importName: LightspeedPage + module: LightspeedPlugin + menuItem: + icon: LightspeedIcon + text: Lightspeed +- package: oci://ghcr.io/redhat-developer/rhdh-plugin-export-overlays/red-hat-developer-hub-backstage-plugin-lightspeed-backend:next__1.0.1!red-hat-developer-hub-backstage-plugin-lightspeed-backend + disabled: false ---- -... Update the `extraVolumes` specification to include the {rcs-short} ConfigMap as shown in the following example: + +. Update your deployment configuration: Update the deployment configuration based on how your {product-very-short} instance was installed. You must add two sidecar containers: `llama-stack` and `lightspeed-core`. + +** For an Operator-installed {product-very-short} instance (Update {backstage} Custom Resource (CR)): + +... In the `spec.application.appConfig.configMaps` section of your {backstage} CR, add the {ls-short} custom app configuration: + [source,yaml] ---- - volumes: - - configMap: - name: rcsconfig - name: rcsconfig + appConfig: + configMaps: + - name: lightspeed-app-config ---- -... Update the `volumeMounts` specification to mount the {rcs-short} ConfigMap as shown in the following example: +... Update the `spec.deployment.patch.spec.template.spec.volumes` specification to include volumes for {lcs-short} configuration (`lightspeed-stack`), shared storage for feedback (`shared-storage`), and RAG data (`rag-data-volume`): + [source,yaml] ---- - volumeMounts: - - mountPath: /app-root/config/rcsconfig.yaml - name: rcsconfig - subPath: rcsconfig.yaml - - mountPath: /app-root/config/app-config-rhdh.yaml - name: lightspeed-app-config - subPath: app-config.yaml ----- -... Add the {ls-short} Secret file as shown in the following example: -+ + volumes: + - configMap: + name: lightspeed-stack + name: lightspeed-stack + - emptyDir: {} + name: shared-storage + - emptyDir: {} + name: rag-data-volume +---- +... Add the `initContainers` section to initialize RAG data: [source,yaml] ++ ---- - envFrom: - - secretRef: - name: lightspeed-secrets + initContainers: + - name: init-rag-data + image: 'quay.io/redhat-ai-dev/rag-content:release-1.7-lcs' + command: + - "sh" + - "-c" + - "echo 'Copying RAG data...'; cp -r /rag/vector_db/rhdh_product_docs /data/ && cp -r /rag/embeddings_model /data/ && echo 'Copy complete.'" + volumeMounts: + - mountPath: /data + name: rag-data-volume ---- -... In your `deployment.patch.spec.template.spec.containers.env` section, set the {rcs-short} environment variables as shown in the following example: +... Add the Llama Stack, {lcs-short} containers, and the MCP_TOKEN secret file to the `spec.deployment.patch.spec.template.spec.containers` section: + [source,yaml] ---- - - name: PROJECT - value: rhdh - - name: RCS_CONFIG_FILE - value: /app-root/config/rcsconfig.yaml - - name: RHDH_CONFIG_FILE - value: /app-root/config/app-config-rhdh.yaml + spec: + application: + - extraEnvs: + secrets: + - name: lightspeed-secrets + containers: + # ... Your existing RHDH container definition ... + - envFrom: + - secretRef: + name: llama-stack-secrets + image: 'quay.io/redhat-ai-dev/llama-stack:0.1.0' # Llama Stack image + name: llama-stack + volumeMounts: + - mountPath: /app-root/.llama + name: shared-storage + - mountPath: /app-root/embeddings_model + name: rag-data-volume + subPath: embeddings_model + - mountPath: /app-root/vector_db/rhdh_product_docs + name: rag-data-volume + subPath: rhdh_product_docs + - image: 'quay.io/lightspeed-core/lightspeed-stack:dev-20251021-ee9f08f' # Lightspeed Core Service image + name: lightspeed-core + volumeMounts: + - mountPath: /app-root/lightspeed-stack.yaml + name: lightspeed-stack + subPath: lightspeed-stack.yaml + - mountPath: /tmp/data/feedback + name: shared-storage ---- -+ -[NOTE] -==== -Your {product-very-short} container is typically already present in your CR. You are adding the second container definition `road-core-sidecar` as the {rcs-short} sidecar. -==== ... Click *Save*. The Pods are automatically restarted. -+ -.Example of a Backstage CR with the {rcs-short} container -[source,yaml,subs=+attributes] ----- -apiVersion: rhdh.redhat.com/v1alpha3 -kind: Backstage -metadata: - name: backstage - namespace: __ # your {product-very-short} instance namespace -spec: - application: - appConfig: - configMaps: -# Adding the Developer Lightspeed custom app config file - - name: lightspeed-app-config - mountPath: /opt/app-root/src - dynamicPluginsConfigMapName: dynamic-plugins-rhdh - extraEnvs: -# Adding the Developer Lightspeed secrets file - secrets: - - name: lightspeed-secrets - replicas: 1 - extraFiles: - mounthPath: /opt/app-root/src - replicas: 1 - route: - enabled: true - database: - enableLocalDb: true - deployment: - patch: - spec: - template: - spec: - containers: - - env: - - name: PROJECT - value: rhdh -# Mounting the RCS sidecar to your {product-very-short} instance - - name: RCS_CONFIG_FILE - value: /app-root/config/rcsconfig.yaml -# Your existing {product-very-short} ConfigMap - - name: RHDH_CONFIG_FILE - value: /app-root/config/app-config-rhdh.yaml - envFrom: - - secretRef: - name: lightspeed-secrets - image: 'quay.io/redhat-ai-dev/road-core-service:rcs-06302025-rhdh-1.7' - name: road-core-sidecar - ports: - - containerPort: 8080 - name: rcs-backend - protocol: TCP - volumeMounts: -# Mounting the RCS sidecar to your {product-very-short} instance - - mountPath: /app-root/config/rcsconfig.yaml - name: rcsconfig - subPath: rcsconfig.yaml -# Mounting the Lightspeed app config file to your RCS container - - mountPath: /app-root/config/app-config-rhdh.yaml - name: lightspeed-app-config - subPath: app-config.yaml - volumes: - - configMap: - name: rcsconfig - name: rcsconfig - ----- -.. For a Helm-installed {product-very-short} instance, update your Helm chart. -... Add your dynamic plugins configuration in the`global.dynamic` property as shown in the following example: -+ -[source,yaml,subs="+attributes"] ----- -global: -dynamic: - includes: - - dynamic-plugins.default.yaml - plugins: - - package: oci://ghcr.io/redhat-developer/rhdh-plugin-export-overlays/red-hat-developer-hub-backstage-plugin-lightspeed:bs_1.39.1__0.5.7!red-hat-developer-hub-backstage-plugin-lightspeed - disabled: false - pluginConfig: - lightspeed: - # OPTIONAL: Custom users prompts displayed to users - # If not provided, the plugin uses built-in default prompts - prompts: - - title: 'Getting Started with {product}' - message: Can you guide me through the first steps to start using {product-short} - as a developer, like exploring the Software Catalog and adding my - service? - dynamicPlugins: - frontend: - red-hat-developer-hub.backstage-plugin-lightspeed: - appIcons: - - name: LightspeedIcon - module: LightspeedPlugin - importName: LightspeedIcon - dynamicRoutes: - - path: /lightspeed - importName: LightspeedPage - module: LightspeedPlugin - menuItem: - icon: LightspeedIcon - text: Lightspeed - - package: oci://ghcr.io/redhat-developer/rhdh-plugin-export-overlays/red-hat-developer-hub-backstage-plugin-lightspeed-backend:bs_1.39.1__0.5.7!red-hat-developer-hub-backstage-plugin-lightspeed-backend - disabled: false - pluginConfig: - lightspeed: - # REQUIRED: Configure LLM servers with OpenAI API compatibility - servers: - - id: ${LLM_SERVER_ID} - url: ${LLM_SERVER_URL} - token: ${LLM_SERVER_TOKEN} - # OPTIONAL: Port for lightspeed service (default: 8080) - # servicePort: ${LIGHTSPEED_SERVICE_PORT} ----- -... Add your {ls-short} custom app config file as shown in the following example: + +** For a Helm-installed {product-very-short} instance (Update Helm Chart): + +... Add your dynamic plugins configuration in the `global.dynamic` property. +... Add your {ls-short} custom app config file to `extraAppConfig`: + [source,yaml] ---- - extraAppConfig: + extraAppConfig: - configMapRef: lightspeed-app-config filename: app-config.yaml ---- -... Update the `extraVolumes` section to include the {rcs-short} ConfigMap as shown in the following example: +... Add the Llama Stack Secret file to `extraEnvVarsSecrets`: + [source,yaml] ---- -extraVolumes: - - configMap: - name: rcsconfig - name: rcsconfig + extraEnvVarsSecrets: + - llama-stack-secrets ---- -... Update the `extraVolumeMounts` section to mount the {rcs-short} ConfigMap as shown in the following example: +... Update the `extraVolumes` section to include the {lcs-short} ConfigMap (`lightspeed-stack`), shared storage, and RAG data volume: + [source,yaml] ---- - extraVolumeMounts: - - mountPath: /app-root/config/rcsconfig.yaml - name: rcsconfig ----- -... Add the {ls-short} Secret file as shown in the following example: + extraVolumes: + - configMap: + name: lightspeed-stack + name: lightspeed-stack + - emptyDir: {} + name: shared-storage + - emptyDir: {} + name: rag-data-volume +---- +... Update the `initContainers` section (if supported by your Helm chart structure) to initialize RAG data. + [source,yaml] ---- - extraEnvVarsSecrets: - - lightspeed-secrets ----- -... Add the {rcs-short} image as shown in the following example: -+ -[source,yaml,subs="+attributes"] ----- - extraContainers: - - env: - - name: PROJECT - value: rhdh - - name: RCS_CONFIG_FILE - value: /app-root/config/rcsconfig.yaml - - name: RHDH_CONFIG_FILE - value: /app-root/config/lightspeed-app-config.yaml - envFrom: - - secretRef: - name: lightspeed-secrets - image: 'quay.io/redhat-ai-dev/road-core-service:rcs-06302025-rhdh-1.7' - name: road-core-sidecar - ports: - - containerPort: 8080 - name: rcs-backend - protocol: TCP + initContainers: + - name: init-rag-data + image: 'quay.io/redhat-ai-dev/rag-content:release-1.7-lcs' + command: + - "sh" + - "-c" + - "echo 'Copying RAG data...'; cp -r /rag/vector_db/rhdh_product_docs /data/ && cp -r /rag/embeddings_model /data/ && echo 'Copy complete.'" volumeMounts: - - mountPath: /app-root/config/rcsconfig.yaml - name: rcsconfig - subPath: rcsconfig.yaml - - mountPath: /app-root/config/lightspeed-app-config.yaml - name: lightspeed-app-config - subPath: app-config.yaml + - mountPath: /data + name: rag-data-volume ---- +... Add the Llama Stack and {lcs-short} container definitions to `extraContainers` + [NOTE] ==== -Your {product-very-short} container is typically already present in your Helm chart. You are adding the second container definition `road-core-sidecar` as the {rcs-short} sidecar. +If you have Road-Core Service installed from the previous {ls-brand-name} configuration, you must replace the older single container configuration found in source with the two sidecars. ==== -... Click *Save*. -... Click *Helm upgrade*. + -.Example of a Helm chart with the RCS container -[source,yaml,subs="+attributes"] ----- -global: - ... -upstream: - backstage: - appConfig: - ... - args: - ... - extraAppConfig: - - configMapRef: lightspeed-app-config - filename: app-config.yaml - extraContainers: - - env: - - name: PROJECT - value: rhdh - - name: RCS_CONFIG_FILE - value: /app-root/config/rcsconfig.yaml - - name: RHDH_CONFIG_FILE - value: /app-root/config/lightspeed-app-config.yaml - envFrom: - - secretRef: - name: lightspeed-secrets - image: 'quay.io/redhat-ai-dev/road-core-service:rcs-06302025-rhdh-1.7' - name: road-core-sidecar - ports: - - containerPort: 8080 - name: rcs-backend - protocol: TCP - volumeMounts: - - mountPath: /app-root/config/rcsconfig.yaml - name: rcsconfig - subPath: rcsconfig.yaml - - mountPath: /app-root/config/lightspeed-app-config.yaml - name: lightspeed-app-config - subPath: lightspeed-app-config.yaml - extraEnvVars: - ... - extraEnvVarsSecrets: - - lightspeed-secrets - extraVolumeMounts: - - mountPath: /app-root/config/rcsconfig.yaml - name: rcsconfig - extraVolumes: - - configMap: - name: rcsconfig - name: rcsconfig - ... - image: - ... - initContainers: - ... ----- - -. Define permissions and roles for your users who are not administrators by completing the following steps: -.. Configure the required RBAC permission by defining an `rbac-policies.csv` file as shown in the following example: +[source, yaml] +---- + extraContainers: + # Llama Stack Container + - envFrom: + - secretRef: + name: llama-stack-secrets + image: 'quay.io/redhat-ai-dev/llama-stack:0.1.0' + name: llama-stack + volumeMounts: + - mountPath: /app-root/.llama + name: shared-storage + - mountPath: /app-root/embeddings_model + name: rag-data-volume + subPath: embeddings_model + - mountPath: /app-root/vector_db/rhdh_product_docs + name: rag-data-volume + subPath: rhdh_product_docs + # Lightspeed Core Service Container + - image: 'quay.io/lightspeed-core/lightspeed-stack:dev-20251021-ee9f08f' + name: lightspeed-core + volumeMounts: + - mountPath: /app-root/lightspeed-stack.yaml + name: lightspeed-stack + subPath: lightspeed-stack.yaml + - mountPath: /tmp/data/feedback + name: shared-storage +---- +... Click *Save* and then Helm upgrade. + +. Optional: Manage authorization (RBAC): If you have users who are not administrators, you must {authorization-book-link}##enabling-and-giving-access-to-rbac[define permissions and roles] for them to use {ls-short}. The Lightspeed Backend plugin uses {backstage} RBAC for authorization. + +** For an Operator-installed {product-very-short} instance: + +... Configure the required RBAC permission by defining an `rbac-policies.csv` file, including `lightspeed.chat.read`, `lightspeed.chat.create`, and `lightspeed.chat.delete` permissions: + -[source,yaml] +[source,csv] ---- p, role:default/__, lightspeed.chat.read, read, allow p, role:default/__, lightspeed.chat.create, create, allow p, role:default/__, lightspeed.chat.delete, delete, allow - g, user:default/__, role:default/__ ---- -.. Upload your `rbac-policies.csv` and `rbac-conditional-policies.yaml` files to an `rbac-policies` config map in your {ocp-short} project containing {product-very-short}. -.. Update your {product-custom-resource-type} custom resource to mount in the {product-very-short} filesystem your files from the `rbac-policies` ConfigMap: +... Upload your `rbac-policies.csv` file to an `rbac-policies` ConfigMap in your {ocp-short} project containing {product-very-short} and update your Backstage CR: + [source,yaml] ---- @@ -525,11 +401,33 @@ spec: configMaps: - name: rbac-policies ---- -For detailed information, see {authorization-book-link}managing-authorizations-by-using-external-files[Managing authorizations by using external files]. + +** For a Helm-installed {product-very-short} instance: + +... Configure the required RBAC permission by defining an `rbac-policies.csv` file: ++ +[source,csv] +---- +p, role:default/__, lightspeed.chat.read, read, allow +p, role:default/__, lightspeed.chat.create, create, allow +p, role:default/__, lightspeed.chat.delete, delete, allow +g, user:default/__, role:default/__ +---- +... Optional: Declare policy administrators by editing your custom {product-very-short} ConfigMap (`app-config.yaml`) and adding the following code to enable selected authenticated users to configure RBAC policies through the REST API or Web UI: ++ +[source,yaml] +---- + permission: + enabled: true + rbac: + policies-csv-file: /opt/app-root/src/rbac-policies.csv + policyFileReload: true + admin: + users: + - name: user:default/ +---- .Verification . Log in to your {product-very-short} instance. -. In your {product} navigation menu, you are able to see and access the *Lightspeed* menu item. Clicking this menu takes you to the {ls-short} screen. - -image::rhdh-plugins-reference/developer-lightspeed.png[] +. In your {product-very-short} navigation menu, you are able to see and access the *Lightspeed* menu item. Clicking this menu item takes you to the {ls-short} screen. \ No newline at end of file diff --git a/modules/developer-lightspeed/proc-updating-the-system-prompt.adoc b/modules/developer-lightspeed/proc-updating-the-system-prompt.adoc index 79859cda51..16d8809608 100644 --- a/modules/developer-lightspeed/proc-updating-the-system-prompt.adoc +++ b/modules/developer-lightspeed/proc-updating-the-system-prompt.adoc @@ -13,7 +13,7 @@ You can override the default system prompt that {ls-short} uses to better frame ---- lightspeed: # ... other lightspeed configurations - systemPrompt: "You are a helpful assistant focused on {product} development." + systemPrompt: "You are a helpful assistant focused on Red Hat Developer Hub development." ---- Set `systemPrompt` to prefix all queries sent by {ls-short} to the LLM with this instruction, guiding the model to generate more tailored responses. diff --git a/modules/developer-lightspeed/proc-using-developer-lightspeed-to-start-a-chat-for-the-first-time.adoc b/modules/developer-lightspeed/proc-using-developer-lightspeed-to-start-a-chat-for-the-first-time.adoc index 4060c9149e..cca792576a 100644 --- a/modules/developer-lightspeed/proc-using-developer-lightspeed-to-start-a-chat-for-the-first-time.adoc +++ b/modules/developer-lightspeed/proc-using-developer-lightspeed-to-start-a-chat-for-the-first-time.adoc @@ -5,7 +5,7 @@ You can start a chat with {ls-short} for quick answers on a number of topics depending on your settings. You can manually start a chat with the {ls-short} or use the following sample prompts we have provided to help you get started: -* *Getting Started with {product-custom-resource-type}* +* *Getting Started with Red Hat Developer Hub* * *Deploy with Tekton* * *Create an OpenShift Deployment* @@ -23,7 +23,7 @@ You can start a chat with {ls-short} for quick answers on a number of topics dep + [NOTE] ==== -The following file types are supported: `yaml`, `json`, `txt`, and `xml`. +The following file types are supported: `yaml`, `json`, and `txt`. ==== *** Click *Open*. ** To start a chat using the existing prompts, in the {ls-short} virtual assistant interface, click any of the relevant prompt tiles. diff --git a/modules/developer-lightspeed/proc-using-question-validation.adoc b/modules/developer-lightspeed/proc-using-question-validation.adoc deleted file mode 100644 index 0d2c7271e4..0000000000 --- a/modules/developer-lightspeed/proc-using-question-validation.adoc +++ /dev/null @@ -1,20 +0,0 @@ -:_mod-docs-content-type: PROCEDURE - -[id="proc-using-question-validation_{context}"] -= Using Question Validation in {ls-short} - -{ls-short} utilizes *Question Validation* to validate the query to check if it relates to {product}. - -When a user asks a question that falls outside of these restricted topics, {ls-short} provides a general response to notify the user that the question is out of scope. -If you want to disable the *Question Validation* feature to allow for broader questioning, you can set `questionValidation` to `false` in your {ls-short} app config file. - -.Procedure - -* To disable the *Question Validation* feature, in your {ls-short} `{my-app-config-file}` file, add the following example: -+ -[source,yaml] ----- -lightspeed: - # ... other lightspeed configurations - questionValidation: false ----- diff --git a/modules/dynamic-plugins/ref-rh-supported-plugins.adoc b/modules/dynamic-plugins/ref-rh-supported-plugins.adoc index 9e4f98bcfe..d49cabca63 100644 --- a/modules/dynamic-plugins/ref-rh-supported-plugins.adoc +++ b/modules/dynamic-plugins/ref-rh-supported-plugins.adoc @@ -11,6 +11,18 @@ [%header,cols=4*] |=== |*Name* |*Plugin* |*Version* |*Path and required variables* +|Adoption Insights |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-adoption-insights/v/0.2.1[@red-hat-developer-hub/backstage-plugin-adoption-insights]` |0.2.1 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-adoption-insights` + + +|Adoption Insights |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-adoption-insights-backend/v/0.2.1[@red-hat-developer-hub/backstage-plugin-adoption-insights-backend]` |0.2.1 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-adoption-insights-backend-dynamic` + + +|Analytics Module Adoption Insights |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-analytics-module-adoption-insights/v/0.2.0[@red-hat-developer-hub/backstage-plugin-analytics-module-adoption-insights]` |0.2.0 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-analytics-module-adoption-insights-dynamic` + + |Analytics Provider Segment |`https://npmjs.com/package/@backstage-community/plugin-analytics-provider-segment/v/1.19.1[@backstage-community/plugin-analytics-provider-segment]` |1.19.1 |`./dynamic-plugins/dist/backstage-community-plugin-analytics-provider-segment` @@ -23,64 +35,64 @@ `SEGMENT_WRITE_KEY` -|Keycloak |`https://npmjs.com/package/@backstage-community/plugin-catalog-backend-module-keycloak/v/3.14.2[@backstage-community/plugin-catalog-backend-module-keycloak]` |3.14.2 -|`./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-keycloak-dynamic` +|Argo CD |`https://npmjs.com/package/@roadiehq/backstage-plugin-argo-cd-backend/v/4.4.2[@roadiehq/backstage-plugin-argo-cd-backend]` |4.4.2 +|`./dynamic-plugins/dist/roadiehq-backstage-plugin-argo-cd-backend-dynamic` -`KEYCLOAK_BASE_URL` +`ARGOCD_AUTH_TOKEN` -`KEYCLOAK_CLIENT_ID` +`ARGOCD_AUTH_TOKEN2` -`KEYCLOAK_CLIENT_SECRET` +`ARGOCD_INSTANCE1_URL` -`KEYCLOAK_LOGIN_REALM` +`ARGOCD_INSTANCE2_URL` -`KEYCLOAK_REALM` +`ARGOCD_PASSWORD` +`ARGOCD_USERNAME` -|Quay |`https://npmjs.com/package/@backstage-community/plugin-quay/v/1.24.0[@backstage-community/plugin-quay]` |1.24.0 -|`./dynamic-plugins/dist/backstage-community-plugin-quay` +|Dynamic Home Page |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-dynamic-home-page/v/1.9.2[@red-hat-developer-hub/backstage-plugin-dynamic-home-page]` |1.9.2 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-dynamic-home-page` -|RBAC |`https://npmjs.com/package/@backstage-community/plugin-rbac/v/1.45.1[@backstage-community/plugin-rbac]` |1.45.1 -|`./dynamic-plugins/dist/backstage-community-plugin-rbac` +|GitHub Org |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-github-org/v/0.3.13[@backstage/plugin-catalog-backend-module-github-org]` |0.3.13 +|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-org-dynamic` -|Kubernetes |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-kubernetes/v/2.10.1[@backstage-community/plugin-scaffolder-backend-module-kubernetes]` |2.10.1 -|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-kubernetes-dynamic` +`GITHUB_ORG` +`GITHUB_URL` -|Quay |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-quay/v/2.11.0[@backstage-community/plugin-scaffolder-backend-module-quay]` |2.11.0 -|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-quay-dynamic` +|GitHub |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-github/v/0.10.2[@backstage/plugin-catalog-backend-module-github]` |0.10.2 +|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic` -|Regex |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-regex/v/2.8.0[@backstage-community/plugin-scaffolder-backend-module-regex]` |2.8.0 -|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-regex-dynamic` +`GITHUB_ORG` -|Tekton |`https://npmjs.com/package/@backstage-community/plugin-tekton/v/3.29.0[@backstage-community/plugin-tekton]` |3.29.0 -|`./dynamic-plugins/dist/backstage-community-plugin-tekton` +|GitHub |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-github/v/0.8.2[@backstage/plugin-scaffolder-backend-module-github]` |0.8.2 +|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-github-dynamic` -|Topology |`https://npmjs.com/package/@backstage-community/plugin-topology/v/2.2.2[@backstage-community/plugin-topology]` |2.2.2 -|`./dynamic-plugins/dist/backstage-community-plugin-topology` +|Global Floating Action Button |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-global-floating-action-button/v/1.5.0[@red-hat-developer-hub/backstage-plugin-global-floating-action-button]` |1.5.0 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-global-floating-action-button` -|GitHub |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-github/v/0.10.2[@backstage/plugin-catalog-backend-module-github]` |0.10.2 -|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic` +|Global Header |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-global-header/v/1.18.1[@red-hat-developer-hub/backstage-plugin-global-header]` |1.18.1 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-global-header` -`GITHUB_ORG` +|Keycloak |`https://npmjs.com/package/@backstage-community/plugin-catalog-backend-module-keycloak/v/3.14.2[@backstage-community/plugin-catalog-backend-module-keycloak]` |3.14.2 +|`./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-keycloak-dynamic` -|GitHub Org |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-github-org/v/0.3.13[@backstage/plugin-catalog-backend-module-github-org]` |0.3.13 -|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-org-dynamic` +`KEYCLOAK_BASE_URL` -`GITHUB_ORG` +`KEYCLOAK_CLIENT_ID` -`GITHUB_URL` +`KEYCLOAK_CLIENT_SECRET` +`KEYCLOAK_LOGIN_REALM` -|Ldap |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-ldap/v/0.11.8[@backstage/plugin-catalog-backend-module-ldap]` |0.11.8 -|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-ldap-dynamic` +`KEYCLOAK_REALM` |Kubernetes |`https://npmjs.com/package/@backstage/plugin-kubernetes-backend/v/0.20.1[@backstage/plugin-kubernetes-backend]` |0.20.1 @@ -93,76 +105,64 @@ `K8S_CLUSTER_URL` -|GitHub |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-github/v/0.8.2[@backstage/plugin-scaffolder-backend-module-github]` |0.8.2 -|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-github-dynamic` - - -|Signals |`https://npmjs.com/package/@backstage/plugin-signals-backend/v/0.3.7[@backstage/plugin-signals-backend]` |0.3.7 -|`./dynamic-plugins/dist/backstage-plugin-signals-backend-dynamic` - - -|TechDocs |`https://npmjs.com/package/@backstage/plugin-techdocs/v/1.14.1[@backstage/plugin-techdocs]` |1.14.1 -|`./dynamic-plugins/dist/backstage-plugin-techdocs` - - -|TechDocs |`https://npmjs.com/package/@backstage/plugin-techdocs-backend/v/2.0.5[@backstage/plugin-techdocs-backend]` |2.0.5 -|`./dynamic-plugins/dist/backstage-plugin-techdocs-backend-dynamic` +|Kubernetes |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-kubernetes/v/2.10.1[@backstage-community/plugin-scaffolder-backend-module-kubernetes]` |2.10.1 +|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-kubernetes-dynamic` -|TechDocs Module Addons Contrib |`https://npmjs.com/package/@backstage/plugin-techdocs-module-addons-contrib/v/1.1.27[@backstage/plugin-techdocs-module-addons-contrib]` |1.1.27 -|`./dynamic-plugins/dist/backstage-plugin-techdocs-module-addons-contrib` +|Ldap |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-ldap/v/0.11.8[@backstage/plugin-catalog-backend-module-ldap]` |0.11.8 +|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-ldap-dynamic` -|Dynamic Home Page |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-dynamic-home-page/v/1.9.2[@red-hat-developer-hub/backstage-plugin-dynamic-home-page]` |1.9.2 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-dynamic-home-page` +|Orchestrator |`https://npmjs.com/package/@redhat/backstage-plugin-orchestrator/v/1.8.2[@redhat/backstage-plugin-orchestrator]` |1.8.2 +|`@redhat/backstage-plugin-orchestrator@1.8.2` -|Global Floating Action Button |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-global-floating-action-button/v/1.5.0[@red-hat-developer-hub/backstage-plugin-global-floating-action-button]` |1.5.0 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-global-floating-action-button` +|Orchestrator |`https://npmjs.com/package/@redhat/backstage-plugin-scaffolder-backend-module-orchestrator/v/1.8.2[@redhat/backstage-plugin-scaffolder-backend-module-orchestrator]` |1.8.2 +|`@redhat/backstage-plugin-scaffolder-backend-module-orchestrator-dynamic@1.8.2` -|Global Header |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-global-header/v/1.18.1[@red-hat-developer-hub/backstage-plugin-global-header]` |1.18.1 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-global-header` +|Quay |`https://npmjs.com/package/@backstage-community/plugin-quay/v/1.24.0[@backstage-community/plugin-quay]` |1.24.0 +|`./dynamic-plugins/dist/backstage-community-plugin-quay` -|Orchestrator |`https://npmjs.com/package/@redhat/backstage-plugin-orchestrator/v/1.7.1[@redhat/backstage-plugin-orchestrator]` |1.7.1 -|`@redhat/backstage-plugin-orchestrator@1.7.1` +|Quay |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-quay/v/2.11.0[@backstage-community/plugin-scaffolder-backend-module-quay]` |2.11.0 +|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-quay-dynamic` -|Orchestrator |`https://npmjs.com/package/@redhat/backstage-plugin-scaffolder-backend-module-orchestrator/v/1.7.1[@redhat/backstage-plugin-scaffolder-backend-module-orchestrator]` |1.7.1 -|`@redhat/backstage-plugin-scaffolder-backend-module-orchestrator-dynamic@1.7.1` +|Quickstart |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-quickstart/v/1.6.2[@red-hat-developer-hub/backstage-plugin-quickstart]` |1.6.2 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-quickstart` -|Adoption Insights |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-adoption-insights/v/0.2.1[@red-hat-developer-hub/backstage-plugin-adoption-insights]` |0.2.1 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-adoption-insights` +|RBAC |`https://npmjs.com/package/@backstage-community/plugin-rbac/v/1.45.1[@backstage-community/plugin-rbac]` |1.45.1 +|`./dynamic-plugins/dist/backstage-community-plugin-rbac` -|Adoption Insights |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-adoption-insights-backend/v/0.2.1[@red-hat-developer-hub/backstage-plugin-adoption-insights-backend]` |0.2.1 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-adoption-insights-backend-dynamic` +|Regex |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-regex/v/2.8.0[@backstage-community/plugin-scaffolder-backend-module-regex]` |2.8.0 +|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-regex-dynamic` -|Analytics Module Adoption Insights |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-analytics-module-adoption-insights/v/0.2.0[@red-hat-developer-hub/backstage-plugin-analytics-module-adoption-insights]` |0.2.0 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-analytics-module-adoption-insights-dynamic` +|Signals |`https://npmjs.com/package/@backstage/plugin-signals-backend/v/0.3.7[@backstage/plugin-signals-backend]` |0.3.7 +|`./dynamic-plugins/dist/backstage-plugin-signals-backend-dynamic` -|Quickstart |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-quickstart/v/1.6.2[@red-hat-developer-hub/backstage-plugin-quickstart]` |1.6.2 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-quickstart` +|TechDocs Module Addons Contrib |`https://npmjs.com/package/@backstage/plugin-techdocs-module-addons-contrib/v/1.1.27[@backstage/plugin-techdocs-module-addons-contrib]` |1.1.27 +|`./dynamic-plugins/dist/backstage-plugin-techdocs-module-addons-contrib` -|Argo CD |`https://npmjs.com/package/@roadiehq/backstage-plugin-argo-cd-backend/v/4.4.2[@roadiehq/backstage-plugin-argo-cd-backend]` |4.4.2 -|`./dynamic-plugins/dist/roadiehq-backstage-plugin-argo-cd-backend-dynamic` +|TechDocs |`https://npmjs.com/package/@backstage/plugin-techdocs/v/1.14.1[@backstage/plugin-techdocs]` |1.14.1 +|`./dynamic-plugins/dist/backstage-plugin-techdocs` -`ARGOCD_AUTH_TOKEN` -`ARGOCD_AUTH_TOKEN2` +|TechDocs |`https://npmjs.com/package/@backstage/plugin-techdocs-backend/v/2.0.5[@backstage/plugin-techdocs-backend]` |2.0.5 +|`./dynamic-plugins/dist/backstage-plugin-techdocs-backend-dynamic` -`ARGOCD_INSTANCE1_URL` -`ARGOCD_INSTANCE2_URL` +|Tekton |`https://npmjs.com/package/@backstage-community/plugin-tekton/v/3.29.0[@backstage-community/plugin-tekton]` |3.29.0 +|`./dynamic-plugins/dist/backstage-community-plugin-tekton` -`ARGOCD_PASSWORD` -`ARGOCD_USERNAME` +|Topology |`https://npmjs.com/package/@backstage-community/plugin-topology/v/2.7.0[@backstage-community/plugin-topology]` |2.7.0 +|`./dynamic-plugins/dist/backstage-community-plugin-topology` |=== diff --git a/modules/dynamic-plugins/ref-rh-tech-preview-plugins.adoc b/modules/dynamic-plugins/ref-rh-tech-preview-plugins.adoc index 0272e41a6f..41d40d1d51 100644 --- a/modules/dynamic-plugins/ref-rh-tech-preview-plugins.adoc +++ b/modules/dynamic-plugins/ref-rh-tech-preview-plugins.adoc @@ -22,6 +22,26 @@ |`./dynamic-plugins/dist/backstage-community-plugin-acr` +|Argo CD (Red Hat) |`https://npmjs.com/package/@backstage-community/plugin-redhat-argocd/v/2.0.0[@backstage-community/plugin-redhat-argocd]` |2.0.0 +|`./dynamic-plugins/dist/backstage-community-plugin-redhat-argocd` + + +|Argo CD |`https://npmjs.com/package/@roadiehq/scaffolder-backend-argocd/v/1.7.1[@roadiehq/scaffolder-backend-argocd]` |1.7.1 +|`./dynamic-plugins/dist/roadiehq-scaffolder-backend-argocd-dynamic` + +`ARGOCD_AUTH_TOKEN` + +`ARGOCD_AUTH_TOKEN2` + +`ARGOCD_INSTANCE1_URL` + +`ARGOCD_INSTANCE2_URL` + +`ARGOCD_PASSWORD` + +`ARGOCD_USERNAME` + + |Azure Devops |`https://npmjs.com/package/@backstage-community/plugin-azure-devops/v/0.18.0[@backstage-community/plugin-azure-devops]` |0.18.0 |`./dynamic-plugins/dist/backstage-community-plugin-azure-devops` @@ -34,180 +54,180 @@ `AZURE_TOKEN` -|Pingidentity |`https://npmjs.com/package/@backstage-community/plugin-catalog-backend-module-pingidentity/v/0.7.0[@backstage-community/plugin-catalog-backend-module-pingidentity]` |0.7.0 -|`./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-pingidentity-dynamic` - +|Azure Repositories |`https://npmjs.com/package/@parfuemerie-douglas/scaffolder-backend-module-azure-repositories/v/0.3.0[@parfuemerie-douglas/scaffolder-backend-module-azure-repositories]` |0.3.0 +|`./dynamic-plugins/dist/parfuemerie-douglas-scaffolder-backend-module-azure-repositories-dynamic` -|Scaffolder Relation Processor |`https://npmjs.com/package/@backstage-community/plugin-catalog-backend-module-scaffolder-relation-processor/v/2.8.0[@backstage-community/plugin-catalog-backend-module-scaffolder-relation-processor]` |2.8.0 -|`./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-scaffolder-relation-processor-dynamic` +|Azure |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-azure/v/0.2.12[@backstage/plugin-scaffolder-backend-module-azure]` |0.2.12 +|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-azure-dynamic` -|Dynatrace |`https://npmjs.com/package/@backstage-community/plugin-dynatrace/v/10.8.0[@backstage-community/plugin-dynatrace]` |10.8.0 -|`./dynamic-plugins/dist/backstage-community-plugin-dynatrace` +|Bitbucket Cloud |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-bitbucket-cloud/v/0.5.2[@backstage/plugin-catalog-backend-module-bitbucket-cloud]` |0.5.2 +|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-bitbucket-cloud-dynamic` -|GitHub Actions |`https://npmjs.com/package/@backstage-community/plugin-github-actions/v/0.14.0[@backstage-community/plugin-github-actions]` |0.14.0 -|`./dynamic-plugins/dist/backstage-community-plugin-github-actions` +`BITBUCKET_WORKSPACE` -|GitHub Issues |`https://npmjs.com/package/@backstage-community/plugin-github-issues/v/0.13.0[@backstage-community/plugin-github-issues]` |0.13.0 -|`./dynamic-plugins/dist/backstage-community-plugin-github-issues` +|Bitbucket Cloud |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-bitbucket-cloud/v/0.2.12[@backstage/plugin-scaffolder-backend-module-bitbucket-cloud]` |0.2.12 +|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-bitbucket-cloud-dynamic` -|Jenkins |`https://npmjs.com/package/@backstage-community/plugin-jenkins/v/0.22.0[@backstage-community/plugin-jenkins]` |0.22.0 -|`./dynamic-plugins/dist/backstage-community-plugin-jenkins` +|Bitbucket Server |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-bitbucket-server/v/0.5.2[@backstage/plugin-catalog-backend-module-bitbucket-server]` |0.5.2 +|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-bitbucket-server-dynamic` +`BITBUCKET_HOST` -|Jenkins |`https://npmjs.com/package/@backstage-community/plugin-jenkins-backend/v/0.17.0[@backstage-community/plugin-jenkins-backend]` |0.17.0 -|`./dynamic-plugins/dist/backstage-community-plugin-jenkins-backend-dynamic` -`JENKINS_TOKEN` +|Bitbucket Server |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-bitbucket-server/v/0.2.12[@backstage/plugin-scaffolder-backend-module-bitbucket-server]` |0.2.12 +|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-bitbucket-server-dynamic` -`JENKINS_URL` -`JENKINS_USERNAME` +|Bulk Import |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-bulk-import/v/1.18.1[@red-hat-developer-hub/backstage-plugin-bulk-import]` |1.18.1 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import` -|JFrog Artifactory |`https://npmjs.com/package/@backstage-community/plugin-jfrog-artifactory/v/1.18.2[@backstage-community/plugin-jfrog-artifactory]` |1.18.2 -|`./dynamic-plugins/dist/backstage-community-plugin-jfrog-artifactory` +|Bulk Import |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-bulk-import-backend/v/6.5.1[@red-hat-developer-hub/backstage-plugin-bulk-import-backend]` |6.5.1 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import-backend-dynamic` -|Lighthouse |`https://npmjs.com/package/@backstage-community/plugin-lighthouse/v/0.12.0[@backstage-community/plugin-lighthouse]` |0.12.0 -|`./dynamic-plugins/dist/backstage-community-plugin-lighthouse` +|Datadog |`https://npmjs.com/package/@roadiehq/backstage-plugin-datadog/v/2.5.0[@roadiehq/backstage-plugin-datadog]` |2.5.0 +|`./dynamic-plugins/dist/roadiehq-backstage-plugin-datadog` -|Nexus Repository Manager |`https://npmjs.com/package/@backstage-community/plugin-nexus-repository-manager/v/1.16.0[@backstage-community/plugin-nexus-repository-manager]` |1.16.0 -|`./dynamic-plugins/dist/backstage-community-plugin-nexus-repository-manager` +|Dynatrace |`https://npmjs.com/package/@backstage-community/plugin-dynatrace/v/10.8.0[@backstage-community/plugin-dynatrace]` |10.8.0 +|`./dynamic-plugins/dist/backstage-community-plugin-dynatrace` -|Argo CD (Red Hat) |`https://npmjs.com/package/@backstage-community/plugin-redhat-argocd/v/2.0.0[@backstage-community/plugin-redhat-argocd]` |2.0.0 -|`./dynamic-plugins/dist/backstage-community-plugin-redhat-argocd` +|Gerrit |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-gerrit/v/0.2.12[@backstage/plugin-scaffolder-backend-module-gerrit]` |0.2.12 +|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-gerrit-dynamic` -|ServiceNow |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-servicenow/v/2.8.1[@backstage-community/plugin-scaffolder-backend-module-servicenow]` |2.8.1 -|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-servicenow-dynamic` +|GitHub Actions |`https://npmjs.com/package/@backstage-community/plugin-github-actions/v/0.14.0[@backstage-community/plugin-github-actions]` |0.14.0 +|`./dynamic-plugins/dist/backstage-community-plugin-github-actions` -`SERVICENOW_BASE_URL` -`SERVICENOW_PASSWORD` +|GitHub Insights |`https://npmjs.com/package/@roadiehq/backstage-plugin-github-insights/v/3.2.0[@roadiehq/backstage-plugin-github-insights]` |3.2.0 +|`./dynamic-plugins/dist/roadiehq-backstage-plugin-github-insights` -`SERVICENOW_USERNAME` +|GitHub Issues |`https://npmjs.com/package/@backstage-community/plugin-github-issues/v/0.13.0[@backstage-community/plugin-github-issues]` |0.13.0 +|`./dynamic-plugins/dist/backstage-community-plugin-github-issues` -|SonarQube |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-sonarqube/v/2.8.0[@backstage-community/plugin-scaffolder-backend-module-sonarqube]` |2.8.0 -|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-sonarqube-dynamic` +|GitHub Pull Requests |`https://npmjs.com/package/@roadiehq/backstage-plugin-github-pull-requests/v/3.5.2[@roadiehq/backstage-plugin-github-pull-requests]` |3.5.2 +|`./dynamic-plugins/dist/roadiehq-backstage-plugin-github-pull-requests` -|SonarQube |`https://npmjs.com/package/@backstage-community/plugin-sonarqube/v/0.18.0[@backstage-community/plugin-sonarqube]` |0.18.0 -|`./dynamic-plugins/dist/backstage-community-plugin-sonarqube` +|GitLab Org |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-gitlab-org/v/0.2.12[@backstage/plugin-catalog-backend-module-gitlab-org]` |0.2.12 +|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-gitlab-org-dynamic` -|SonarQube |`https://npmjs.com/package/@backstage-community/plugin-sonarqube-backend/v/0.12.0[@backstage-community/plugin-sonarqube-backend]` |0.12.0 -|`./dynamic-plugins/dist/backstage-community-plugin-sonarqube-backend-dynamic` -`SONARQUBE_TOKEN` +|GitLab |`https://npmjs.com/package/@immobiliarelabs/backstage-plugin-gitlab/v/6.13.0[@immobiliarelabs/backstage-plugin-gitlab]` |6.13.0 +|`./dynamic-plugins/dist/immobiliarelabs-backstage-plugin-gitlab` -`SONARQUBE_URL` +|GitLab |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-gitlab/v/0.7.2[@backstage/plugin-catalog-backend-module-gitlab]` |0.7.2 +|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-gitlab-dynamic` -|Tech Radar |`https://npmjs.com/package/@backstage-community/plugin-tech-radar/v/1.11.0[@backstage-community/plugin-tech-radar]` |1.11.0 -|`./dynamic-plugins/dist/backstage-community-plugin-tech-radar` +|GitLab |`https://npmjs.com/package/@immobiliarelabs/backstage-plugin-gitlab-backend/v/6.13.0[@immobiliarelabs/backstage-plugin-gitlab-backend]` |6.13.0 +|`./dynamic-plugins/dist/immobiliarelabs-backstage-plugin-gitlab-backend-dynamic` -|Tech Radar |`https://npmjs.com/package/@backstage-community/plugin-tech-radar-backend/v/1.10.0[@backstage-community/plugin-tech-radar-backend]` |1.10.0 -|`./dynamic-plugins/dist/backstage-community-plugin-tech-radar-backend-dynamic` +`GITLAB_HOST` -`TECH_RADAR_DATA_URL` +`GITLAB_TOKEN` -|Bitbucket Cloud |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-bitbucket-cloud/v/0.5.2[@backstage/plugin-catalog-backend-module-bitbucket-cloud]` |0.5.2 -|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-bitbucket-cloud-dynamic` +|GitLab |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-gitlab/v/0.9.4[@backstage/plugin-scaffolder-backend-module-gitlab]` |0.9.4 +|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-gitlab-dynamic` -`BITBUCKET_WORKSPACE` +|Http Request |`https://npmjs.com/package/@roadiehq/scaffolder-backend-module-http-request/v/5.4.2[@roadiehq/scaffolder-backend-module-http-request]` |5.4.2 +|`./dynamic-plugins/dist/roadiehq-scaffolder-backend-module-http-request-dynamic` -|Bitbucket Server |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-bitbucket-server/v/0.5.2[@backstage/plugin-catalog-backend-module-bitbucket-server]` |0.5.2 -|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-bitbucket-server-dynamic` -`BITBUCKET_HOST` +|JFrog Artifactory |`https://npmjs.com/package/@backstage-community/plugin-jfrog-artifactory/v/1.18.2[@backstage-community/plugin-jfrog-artifactory]` |1.18.2 +|`./dynamic-plugins/dist/backstage-community-plugin-jfrog-artifactory` -|GitLab |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-gitlab/v/0.7.2[@backstage/plugin-catalog-backend-module-gitlab]` |0.7.2 -|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-gitlab-dynamic` +|Jenkins |`https://npmjs.com/package/@backstage-community/plugin-jenkins/v/0.22.0[@backstage-community/plugin-jenkins]` |0.22.0 +|`./dynamic-plugins/dist/backstage-community-plugin-jenkins` -|GitLab Org |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-gitlab-org/v/0.2.12[@backstage/plugin-catalog-backend-module-gitlab-org]` |0.2.12 -|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-gitlab-org-dynamic` +|Jenkins |`https://npmjs.com/package/@backstage-community/plugin-jenkins-backend/v/0.17.0[@backstage-community/plugin-jenkins-backend]` |0.17.0 +|`./dynamic-plugins/dist/backstage-community-plugin-jenkins-backend-dynamic` +`JENKINS_TOKEN` -|MS Graph |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-msgraph/v/0.7.3[@backstage/plugin-catalog-backend-module-msgraph]` |0.7.3 -|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-msgraph-dynamic` +`JENKINS_URL` -`MICROSOFT_CLIENT_ID` +`JENKINS_USERNAME` -`MICROSOFT_CLIENT_SECRET` -`MICROSOFT_TENANT_ID` +|Jira |`https://npmjs.com/package/@roadiehq/backstage-plugin-jira/v/2.13.1[@roadiehq/backstage-plugin-jira]` |2.13.1 +|`./dynamic-plugins/dist/roadiehq-backstage-plugin-jira` |Kubernetes |`https://npmjs.com/package/@backstage/plugin-kubernetes/v/0.12.10[@backstage/plugin-kubernetes]` |0.12.10 |`./dynamic-plugins/dist/backstage-plugin-kubernetes` -|Notifications |`https://npmjs.com/package/@backstage/plugin-notifications/v/0.5.9[@backstage/plugin-notifications]` |0.5.9 -|`./dynamic-plugins/dist/backstage-plugin-notifications` +|Lighthouse |`https://npmjs.com/package/@backstage-community/plugin-lighthouse/v/0.12.0[@backstage-community/plugin-lighthouse]` |0.12.0 +|`./dynamic-plugins/dist/backstage-community-plugin-lighthouse` -|Notifications |`https://npmjs.com/package/@backstage/plugin-notifications-backend/v/0.5.9[@backstage/plugin-notifications-backend]` |0.5.9 -|`./dynamic-plugins/dist/backstage-plugin-notifications-backend-dynamic` +|MS Graph |`https://npmjs.com/package/@backstage/plugin-catalog-backend-module-msgraph/v/0.7.3[@backstage/plugin-catalog-backend-module-msgraph]` |0.7.3 +|`./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-msgraph-dynamic` +`MICROSOFT_CLIENT_ID` -|Notifications |`https://npmjs.com/package/@backstage/plugin-notifications-backend-module-email/v/0.3.12[@backstage/plugin-notifications-backend-module-email]` |0.3.12 -|`./dynamic-plugins/dist/backstage-plugin-notifications-backend-module-email-dynamic` +`MICROSOFT_CLIENT_SECRET` -`EMAIL_HOSTNAME` +`MICROSOFT_TENANT_ID` -`EMAIL_PASSWORD` -`EMAIL_SENDER` +|Marketplace |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-marketplace/v/0.11.4[@red-hat-developer-hub/backstage-plugin-marketplace]` |0.11.4 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace` -`EMAIL_USERNAME` +|Marketplace |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace/v/0.7.1[@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace]` |0.7.1 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic` -|Azure |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-azure/v/0.2.12[@backstage/plugin-scaffolder-backend-module-azure]` |0.2.12 -|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-azure-dynamic` +|Marketplace |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-marketplace-backend/v/0.11.0[@red-hat-developer-hub/backstage-plugin-marketplace-backend]` |0.11.0 +|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic` -|Bitbucket Cloud |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-bitbucket-cloud/v/0.2.12[@backstage/plugin-scaffolder-backend-module-bitbucket-cloud]` |0.2.12 -|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-bitbucket-cloud-dynamic` +|Nexus Repository Manager |`https://npmjs.com/package/@backstage-community/plugin-nexus-repository-manager/v/1.16.0[@backstage-community/plugin-nexus-repository-manager]` |1.16.0 +|`./dynamic-plugins/dist/backstage-community-plugin-nexus-repository-manager` -|Bitbucket Server |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-bitbucket-server/v/0.2.12[@backstage/plugin-scaffolder-backend-module-bitbucket-server]` |0.2.12 -|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-bitbucket-server-dynamic` +|Notifications |`https://npmjs.com/package/@backstage/plugin-notifications/v/0.5.9[@backstage/plugin-notifications]` |0.5.9 +|`./dynamic-plugins/dist/backstage-plugin-notifications` -|Gerrit |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-gerrit/v/0.2.12[@backstage/plugin-scaffolder-backend-module-gerrit]` |0.2.12 -|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-gerrit-dynamic` +|Notifications |`https://npmjs.com/package/@backstage/plugin-notifications-backend-module-email/v/0.3.12[@backstage/plugin-notifications-backend-module-email]` |0.3.12 +|`./dynamic-plugins/dist/backstage-plugin-notifications-backend-module-email-dynamic` -|GitLab |`https://npmjs.com/package/@backstage/plugin-scaffolder-backend-module-gitlab/v/0.9.4[@backstage/plugin-scaffolder-backend-module-gitlab]` |0.9.4 -|`./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-gitlab-dynamic` +`EMAIL_HOSTNAME` +`EMAIL_PASSWORD` -|Signals |`https://npmjs.com/package/@backstage/plugin-signals/v/0.0.22[@backstage/plugin-signals]` |0.0.22 -|`./dynamic-plugins/dist/backstage-plugin-signals` +`EMAIL_SENDER` +`EMAIL_USERNAME` -|GitLab |`https://npmjs.com/package/@immobiliarelabs/backstage-plugin-gitlab/v/6.13.0[@immobiliarelabs/backstage-plugin-gitlab]` |6.13.0 -|`./dynamic-plugins/dist/immobiliarelabs-backstage-plugin-gitlab` +|Notifications |`https://npmjs.com/package/@backstage/plugin-notifications-backend/v/0.5.9[@backstage/plugin-notifications-backend]` |0.5.9 +|`./dynamic-plugins/dist/backstage-plugin-notifications-backend-dynamic` -|GitLab |`https://npmjs.com/package/@immobiliarelabs/backstage-plugin-gitlab-backend/v/6.13.0[@immobiliarelabs/backstage-plugin-gitlab-backend]` |6.13.0 -|`./dynamic-plugins/dist/immobiliarelabs-backstage-plugin-gitlab-backend-dynamic` -`GITLAB_HOST` +|Orchestrator Form Widgets |`https://npmjs.com/package/@redhat/backstage-plugin-orchestrator-form-widgets/v/1.8.2[@redhat/backstage-plugin-orchestrator-form-widgets]` |1.8.2 +|`@redhat/backstage-plugin-orchestrator-form-widgets@1.8.2` -`GITLAB_TOKEN` + +|Orchestrator |`https://npmjs.com/package/@redhat/backstage-plugin-orchestrator-backend/v/1.8.2[@redhat/backstage-plugin-orchestrator-backend]` |1.8.2 +|`@redhat/backstage-plugin-orchestrator-backend-dynamic@1.8.2` |PagerDuty |`https://npmjs.com/package/@pagerduty/backstage-plugin/v/0.16.0[@pagerduty/backstage-plugin]` |0.16.0 @@ -226,76 +246,56 @@ `PAGERDUTY_SUBDOMAIN` -|Azure Repositories |`https://npmjs.com/package/@parfuemerie-douglas/scaffolder-backend-module-azure-repositories/v/0.3.0[@parfuemerie-douglas/scaffolder-backend-module-azure-repositories]` |0.3.0 -|`./dynamic-plugins/dist/parfuemerie-douglas-scaffolder-backend-module-azure-repositories-dynamic` - - -|Bulk Import |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-bulk-import/v/1.18.1[@red-hat-developer-hub/backstage-plugin-bulk-import]` |1.18.1 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import` - - -|Bulk Import |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-bulk-import-backend/v/6.5.1[@red-hat-developer-hub/backstage-plugin-bulk-import-backend]` |6.5.1 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import-backend-dynamic` - - -|Marketplace |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace/v/0.7.1[@red-hat-developer-hub/backstage-plugin-catalog-backend-module-marketplace]` |0.7.1 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic` - - -|Marketplace |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-marketplace/v/0.11.4[@red-hat-developer-hub/backstage-plugin-marketplace]` |0.11.4 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace` - - -|Marketplace |`https://npmjs.com/package/@red-hat-developer-hub/backstage-plugin-marketplace-backend/v/0.11.0[@red-hat-developer-hub/backstage-plugin-marketplace-backend]` |0.11.0 -|`./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic` +|Pingidentity |`https://npmjs.com/package/@backstage-community/plugin-catalog-backend-module-pingidentity/v/0.7.0[@backstage-community/plugin-catalog-backend-module-pingidentity]` |0.7.0 +|`./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-pingidentity-dynamic` -|Orchestrator |`https://npmjs.com/package/@redhat/backstage-plugin-orchestrator-backend/v/1.7.1[@redhat/backstage-plugin-orchestrator-backend]` |1.7.1 -|`@redhat/backstage-plugin-orchestrator-backend-dynamic@1.7.1` +|Scaffolder Relation Processor |`https://npmjs.com/package/@backstage-community/plugin-catalog-backend-module-scaffolder-relation-processor/v/2.8.0[@backstage-community/plugin-catalog-backend-module-scaffolder-relation-processor]` |2.8.0 +|`./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-scaffolder-relation-processor-dynamic` -|Orchestrator Form Widgets |`https://npmjs.com/package/@redhat/backstage-plugin-orchestrator-form-widgets/v/1.7.1[@redhat/backstage-plugin-orchestrator-form-widgets]` |1.7.1 -|`@redhat/backstage-plugin-orchestrator-form-widgets@1.7.1` +|Security Insights |`https://npmjs.com/package/@roadiehq/backstage-plugin-security-insights/v/3.2.0[@roadiehq/backstage-plugin-security-insights]` |3.2.0 +|`./dynamic-plugins/dist/roadiehq-backstage-plugin-security-insights` -|Datadog |`https://npmjs.com/package/@roadiehq/backstage-plugin-datadog/v/2.5.0[@roadiehq/backstage-plugin-datadog]` |2.5.0 -|`./dynamic-plugins/dist/roadiehq-backstage-plugin-datadog` +|ServiceNow |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-servicenow/v/2.8.1[@backstage-community/plugin-scaffolder-backend-module-servicenow]` |2.8.1 +|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-servicenow-dynamic` +`SERVICENOW_BASE_URL` -|GitHub Insights |`https://npmjs.com/package/@roadiehq/backstage-plugin-github-insights/v/3.2.0[@roadiehq/backstage-plugin-github-insights]` |3.2.0 -|`./dynamic-plugins/dist/roadiehq-backstage-plugin-github-insights` +`SERVICENOW_PASSWORD` +`SERVICENOW_USERNAME` -|GitHub Pull Requests |`https://npmjs.com/package/@roadiehq/backstage-plugin-github-pull-requests/v/3.5.2[@roadiehq/backstage-plugin-github-pull-requests]` |3.5.2 -|`./dynamic-plugins/dist/roadiehq-backstage-plugin-github-pull-requests` +|Signals |`https://npmjs.com/package/@backstage/plugin-signals/v/0.0.22[@backstage/plugin-signals]` |0.0.22 +|`./dynamic-plugins/dist/backstage-plugin-signals` -|Jira |`https://npmjs.com/package/@roadiehq/backstage-plugin-jira/v/2.13.1[@roadiehq/backstage-plugin-jira]` |2.13.1 -|`./dynamic-plugins/dist/roadiehq-backstage-plugin-jira` +|SonarQube |`https://npmjs.com/package/@backstage-community/plugin-sonarqube/v/0.18.0[@backstage-community/plugin-sonarqube]` |0.18.0 +|`./dynamic-plugins/dist/backstage-community-plugin-sonarqube` -|Security Insights |`https://npmjs.com/package/@roadiehq/backstage-plugin-security-insights/v/3.2.0[@roadiehq/backstage-plugin-security-insights]` |3.2.0 -|`./dynamic-plugins/dist/roadiehq-backstage-plugin-security-insights` +|SonarQube |`https://npmjs.com/package/@backstage-community/plugin-sonarqube-backend/v/0.12.0[@backstage-community/plugin-sonarqube-backend]` |0.12.0 +|`./dynamic-plugins/dist/backstage-community-plugin-sonarqube-backend-dynamic` -|Argo CD |`https://npmjs.com/package/@roadiehq/scaffolder-backend-argocd/v/1.7.1[@roadiehq/scaffolder-backend-argocd]` |1.7.1 -|`./dynamic-plugins/dist/roadiehq-scaffolder-backend-argocd-dynamic` +`SONARQUBE_TOKEN` -`ARGOCD_AUTH_TOKEN` +`SONARQUBE_URL` -`ARGOCD_AUTH_TOKEN2` -`ARGOCD_INSTANCE1_URL` +|SonarQube |`https://npmjs.com/package/@backstage-community/plugin-scaffolder-backend-module-sonarqube/v/2.8.0[@backstage-community/plugin-scaffolder-backend-module-sonarqube]` |2.8.0 +|`./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-sonarqube-dynamic` -`ARGOCD_INSTANCE2_URL` -`ARGOCD_PASSWORD` +|Tech Radar |`https://npmjs.com/package/@backstage-community/plugin-tech-radar/v/1.11.0[@backstage-community/plugin-tech-radar]` |1.11.0 +|`./dynamic-plugins/dist/backstage-community-plugin-tech-radar` -`ARGOCD_USERNAME` +|Tech Radar |`https://npmjs.com/package/@backstage-community/plugin-tech-radar-backend/v/1.10.0[@backstage-community/plugin-tech-radar-backend]` |1.10.0 +|`./dynamic-plugins/dist/backstage-community-plugin-tech-radar-backend-dynamic` -|Http Request |`https://npmjs.com/package/@roadiehq/scaffolder-backend-module-http-request/v/5.4.2[@roadiehq/scaffolder-backend-module-http-request]` |5.4.2 -|`./dynamic-plugins/dist/roadiehq-scaffolder-backend-module-http-request-dynamic` +`TECH_RADAR_DATA_URL` |Utils |`https://npmjs.com/package/@roadiehq/scaffolder-backend-module-utils/v/4.0.3[@roadiehq/scaffolder-backend-module-utils]` |4.0.3 diff --git a/modules/dynamic-plugins/rhdh-supported-plugins.csv b/modules/dynamic-plugins/rhdh-supported-plugins.csv index 935c5c266a..58ad8ac205 100644 --- a/modules/dynamic-plugins/rhdh-supported-plugins.csv +++ b/modules/dynamic-plugins/rhdh-supported-plugins.csv @@ -14,8 +14,8 @@ "Kubernetes","@backstage/plugin-kubernetes-backend","Backend","0.20.1","Production","active","./dynamic-plugins/dist/backstage-plugin-kubernetes-backend-dynamic","`K8S_CLUSTER_NAME`;`K8S_CLUSTER_TOKEN`;`K8S_CLUSTER_URL`;","Disabled" "Kubernetes","@backstage-community/plugin-scaffolder-backend-module-kubernetes","Backend","2.10.1","Production","active","./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-kubernetes-dynamic",";","Disabled" "Ldap","@backstage/plugin-catalog-backend-module-ldap","Backend","0.11.8","Production","active","./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-ldap-dynamic",";","Disabled" -"Orchestrator","@redhat/backstage-plugin-orchestrator","Frontend","1.7.1","Production","active","@redhat/backstage-plugin-orchestrator@1.7.1",";","Disabled" -"Orchestrator","@redhat/backstage-plugin-scaffolder-backend-module-orchestrator","Backend","1.7.1","Production","active","@redhat/backstage-plugin-scaffolder-backend-module-orchestrator-dynamic@1.7.1",";","Disabled" +"Orchestrator","@redhat/backstage-plugin-orchestrator","Frontend","1.8.2","Production","active","@redhat/backstage-plugin-orchestrator@1.8.2",";","Disabled" +"Orchestrator","@redhat/backstage-plugin-scaffolder-backend-module-orchestrator","Backend","1.8.2","Production","active","@redhat/backstage-plugin-scaffolder-backend-module-orchestrator-dynamic@1.8.2",";","Disabled" "Quay","@backstage-community/plugin-quay","Frontend","1.24.0","Production","active","./dynamic-plugins/dist/backstage-community-plugin-quay",";","Disabled" "Quay","@backstage-community/plugin-scaffolder-backend-module-quay","Backend","2.11.0","Production","active","./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-quay-dynamic",";","Enabled" "Quickstart","@red-hat-developer-hub/backstage-plugin-quickstart","Frontend","1.6.2","Production","active","./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-quickstart",";","Enabled" @@ -65,8 +65,8 @@ "Notifications","@backstage/plugin-notifications","Frontend","0.5.9","Red Hat Tech Preview","active","./dynamic-plugins/dist/backstage-plugin-notifications",";","Disabled" "Notifications","@backstage/plugin-notifications-backend","Backend","0.5.9","Red Hat Tech Preview","active","./dynamic-plugins/dist/backstage-plugin-notifications-backend-dynamic",";","Disabled" "Notifications","@backstage/plugin-notifications-backend-module-email","Backend","0.3.12","Red Hat Tech Preview","active","./dynamic-plugins/dist/backstage-plugin-notifications-backend-module-email-dynamic","`EMAIL_HOSTNAME`;`EMAIL_PASSWORD`;`EMAIL_SENDER`;`EMAIL_USERNAME`;","Disabled" -"Orchestrator Form Widgets","@redhat/backstage-plugin-orchestrator-form-widgets","Backend","1.7.1","Red Hat Tech Preview","active","@redhat/backstage-plugin-orchestrator-form-widgets@1.7.1",";","Disabled" -"Orchestrator","@redhat/backstage-plugin-orchestrator-backend","Backend","1.7.1","Red Hat Tech Preview","active","@redhat/backstage-plugin-orchestrator-backend-dynamic@1.7.1",";","Disabled" +"Orchestrator Form Widgets","@redhat/backstage-plugin-orchestrator-form-widgets","Backend","1.8.2","Red Hat Tech Preview","active","@redhat/backstage-plugin-orchestrator-form-widgets@1.8.2",";","Disabled" +"Orchestrator","@redhat/backstage-plugin-orchestrator-backend","Backend","1.8.2","Red Hat Tech Preview","active","@redhat/backstage-plugin-orchestrator-backend-dynamic@1.8.2",";","Disabled" "PagerDuty","@pagerduty/backstage-plugin","Frontend","0.16.0","Red Hat Tech Preview","active","./dynamic-plugins/dist/pagerduty-backstage-plugin",";","Disabled" "PagerDuty","@pagerduty/backstage-plugin-backend","Backend","0.9.11","Red Hat Tech Preview","active","./dynamic-plugins/dist/pagerduty-backstage-plugin-backend-dynamic","`PAGERDUTY_API_BASE`;`PAGERDUTY_CLIENT_ID`;`PAGERDUTY_CLIENT_SECRET`;`PAGERDUTY_SUBDOMAIN`;","Disabled" "Pingidentity","@backstage-community/plugin-catalog-backend-module-pingidentity","Backend","0.7.0","Red Hat Tech Preview","active","./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-pingidentity-dynamic",";","Disabled" diff --git a/modules/dynamic-plugins/rhdh-supported-plugins.sh b/modules/dynamic-plugins/rhdh-supported-plugins.sh index ec79029e1d..1fecbd4dd8 100755 --- a/modules/dynamic-plugins/rhdh-supported-plugins.sh +++ b/modules/dynamic-plugins/rhdh-supported-plugins.sh @@ -340,7 +340,7 @@ for y in $yamls; do # TODO include missing data fields for Provider and Description - see https://issues.redhat.com/browse/RHIDP-3496 and https://issues.redhat.com/browse/RHIDP-3440 # Use temporary files to allow sorting later - key="$Name-$RoleSort-$Role-$Plugin" + key="$PrettyName-$RoleSort-$Role-$Plugin" adoc_content="|$PrettyName |\`https://npmjs.com/package/$Plugin/v/$Version[$Plugin]\` |$Version \n|\`$Path\`\n\n$Required_Variables" csv_content="\"$PrettyName\",\"$Plugin\",\"$Role\",\"$Version\",\"$Support_Level\",\"$Lifecycle\",\"$Path\",\"${Required_Variables_CSV}\",\"$Default\"" @@ -502,4 +502,4 @@ rm -rf "$TEMP_DIR" warnings=$(grep -c "WARN" "/tmp/warnings_${BRANCH}.txt" 2>/dev/null || echo "0") if [[ $warnings -gt 0 ]]; then echo; echo -e "${blue}[WARN] $warnings warnings collected in /tmp/warnings_${BRANCH}.txt ! Consider upgrading upstream project to newer plugin versions !${norm}" -fi +fi \ No newline at end of file diff --git a/modules/installation/proc-install-rhdh-osd-gcp-helm.adoc b/modules/installation/proc-install-rhdh-osd-gcp-helm.adoc index dd31ed9e92..80519c1eec 100644 --- a/modules/installation/proc-install-rhdh-osd-gcp-helm.adoc +++ b/modules/installation/proc-install-rhdh-osd-gcp-helm.adoc @@ -7,7 +7,7 @@ You can install {product-short} on {osd-short} on {gcp-short} using the {product .Prerequisites * You have a valid {gcp-short} account. -* Your {osd-short} cluster is running on {gcp-short}. For more information, see{osd-docs-link}/html/installing_accessing_and_deleting_openshift_dedicated_clusters/osd-creating-a-cluster-on-gcp[Creating a cluster on GCP] in {osd-brand-name} documentation. +* Your {osd-short} cluster is running on {gcp-short}. For more information, see{osd-docs-link}/html/installing_accessing_and_deleting_openshift_dedicated_clusters/osd-creating-a-cluster-on-gcp[Creating a cluster on {gcp-short}] in {osd-brand-name} documentation. * You have installed Helm 3 or the latest. * Make sure that your system meets the minimum sizing requirements. See {about-book-link}#rhdh-sizing_about-rhdh[Sizing requirements for {product}]. diff --git a/modules/model-context-protocol-tools/proc-configuring-mcp-clients-to-access-the-rhdh-server.adoc b/modules/model-context-protocol-tools/proc-configuring-mcp-clients-to-access-the-rhdh-server.adoc index d47a28cc98..c90f71d291 100644 --- a/modules/model-context-protocol-tools/proc-configuring-mcp-clients-to-access-the-rhdh-server.adoc +++ b/modules/model-context-protocol-tools/proc-configuring-mcp-clients-to-access-the-rhdh-server.adoc @@ -21,16 +21,16 @@ Some clients do not yet support the Streamable endpoint, and you might need to u .Procedure -. Configure the *Cursor* client. +. Configure *Cursor* as a client. .. From your Desktop app, navigate to *Cursor Settings* and select *MCP Tools > New MCP Server*. .. Add the following configuration: + -[source,yaml,subs="+attributes,+quotes"] +[source,yaml] ---- { "mcpServers": { "backstage-actions": { - "url": "https://<{product-very-short}_HOST>/api/mcp-actions/v1", + "url": "https:///api/mcp-actions/v1", "headers": { "Authorization": "Bearer " } @@ -41,9 +41,9 @@ Some clients do not yet support the Streamable endpoint, and you might need to u where: ``:: Enter the previously configured static token -`<{product-very-short}_HOST>`:: Enter the hostname of your {product-very-short} instance +``:: Enter the hostname of your {product-very-short} instance -. Configure the *Continue* client. +. Configure *Continue* as a client. .. In your agent yaml configuration file, add the following configuration: + @@ -52,7 +52,7 @@ where: mcpServers: - name: backstage-actions type: sse - url: https://<{product-very-short}_HOST>/api/mcp-actions/v1/sse + url: https:///api/mcp-actions/v1/sse requestOptions: headers: Authorization: "Bearer " @@ -61,9 +61,9 @@ mcpServers: where: ``:: Enter the previously configured static token -`<{product-very-short}_HOST>`:: Enter the hostname of your {product-very-short} instance +``:: Enter the hostname of your {product-very-short} instance -. Configure the *Lightspeed Plugin/Lightspeed Core (LCS)* client. +. Configure *{ls-short}* as a client. For more details, see {developer-lightspeed-link}[{ls-brand-name}]. .. In the `lightspeed-stack.yaml` configuration, add the following configuration for `mcp_servers`: + [source,yaml,subs="+attributes,+quotes"] @@ -87,7 +87,7 @@ providers: provider_type: remote::model-context-protocol config: {} ---- -.. To authorize requests to the MCP endpoint using ``, add it in the {ls-short} {my-app-config-file}` file, to make POST requests to the LCS `/v1/streaming_query` endpoint, as shown in the following code: +.. To authorize requests to the MCP endpoint using ``, add it in the {ls-short} `{my-app-config-file}` file, to make POST requests to LCS, as shown in the following code: + [source,yaml] ---- diff --git a/modules/model-context-protocol-tools/proc-configuring-mcp-tools-for-developer-lightspeed.adoc b/modules/model-context-protocol-tools/proc-configuring-mcp-tools-for-developer-lightspeed.adoc deleted file mode 100644 index 026b7f0027..0000000000 --- a/modules/model-context-protocol-tools/proc-configuring-mcp-tools-for-developer-lightspeed.adoc +++ /dev/null @@ -1,65 +0,0 @@ -:_mod-docs-content-type: PROCEDURE - -[id="proc-configure-mcp-tools-for-developer-lightspeed_{context}"] -= Configuring the {product-very-short} Model Context Protocol (MCP) tools for {ls-short} (Optional) - -To leverage Model Context Protocol (MCP) servers like, the {model-context-protocol-link}[server in {product-very-short} with {ls-short}], you must first integrate them into the Llama Stack service. Configuring MCP in {lcs-short} enables the deployed {lcs-short} and Llama Stack to use external tools and retrieve real-time data. This integration allows the virtual assistant to execute complex actions and incorporate current operational context into its responses. - -Configuration requires synchronizing settings across three components: the Llama Stack tool definition, the {lcs-short} MCP server endpoint definition, and the {ls-brand-name} plugin MCP authorization token. - -For more information on configuring {ls-short}, see {developer-lightspeed-link}#proc-installing-and-configuring-lightspeed_developer-lightspeed[Installing and configuring {ls-brand-name}]. - -.Prerequisites - -* You have configured {model-context-protocol-link}[MCP tools in your {product} instance]. - -.Procedure -. Configure the Llama Stack tool definition by defining the MCP provider in the `tool_runtime` section of the Llama Stack configuration file (`run.yaml`), as shown in the following code: -+ -[source,yaml] ----- -providers: - tool_runtime: - - provider_id: model-context-protocol - provider_type: remote::model-context-protocol - config: {} ----- - -. Configure the {lcs-short} MCP server endpoint by defining the MCP server endpoints in the {lcs-short} configuration file (`lightspeed-stack.yaml`), as shown in the following code: -+ -[source,yaml] ----- -mcp_servers: - - name: mcp::backstage - provider_id: model-context-protocol - url: https:///api/mcp-actions/v1 ----- - -where: - -``:: Hostname of your {product-very-short} instance -+ -[IMPORTANT] -==== -`provider_id` must match the Llama Stack definition (`model-context-protocol`). -==== - -. Configure the {ls-brand-name} plugin authorization token by specifying the MCP servers and providing the token for authentication in the {ls-brand-name} plugin configuration file (`lightspeed-app-config.yaml`), as shown in the following code: -+ -[source,yaml] ----- -lightspeed: - mcpServers: - - name: mcp::backstage - token: ${MCP_TOKEN} ----- -+ -[IMPORTANT] -==== -`name` must match the {lcs-name} definition (`mcp::backstage`). -==== - -[NOTE] -==== -Self-hosted models might provide inconsistent or poor performance when using tool calling features, such as the Model Context Protocol (MCP). It is recommended to use the latest foundation models from providers like `OpenAI`` when experimenting with this integration to ensure the most reliable functionality. -==== \ No newline at end of file diff --git a/modules/orchestrator/proc-enabling-orchestrator-plugins-components.adoc b/modules/orchestrator/proc-enabling-orchestrator-plugins-components.adoc index 7fce154dcb..961515c066 100644 --- a/modules/orchestrator/proc-enabling-orchestrator-plugins-components.adoc +++ b/modules/orchestrator/proc-enabling-orchestrator-plugins-components.adoc @@ -47,13 +47,10 @@ Provides the backend components for notification user experience enhancements al .Prerequisites -* When using the {product} Helm chart, you have installed the necessary OpenShift Serverless Operators. +* You have installed the following operators: + -[NOTE] -==== -When using the {product} Operator, the Operator installs the necessary OpenShift Serverless Operators automatically. For specific use cases, install the dependencies manually or use helper utilities. -==== - +** Openshift Serverless +** Openshift Serverless Logic (OSL) * (Optional) For managing the Orchestrator project, you have an instance of Argo CD or Red Hat OpenShift GitOps in the cluster. It is disabled by default. * (Optional) To use Tekton tasks and the build pipeline, you have an instance of Tekton or Red Hat OpenShift Pipelines in the cluster. These features are disabled by default. @@ -86,4 +83,4 @@ plugins: disabled: false - package: "./dynamic-plugins/dist/backstage-plugin-signals-backend-dynamic" disabled: false ----- \ No newline at end of file +---- diff --git a/modules/orchestrator/proc-helm-install-components-orchestrator-plugin.adoc b/modules/orchestrator/proc-helm-install-components-orchestrator-plugin.adoc index 365c156245..0f1710d211 100644 --- a/modules/orchestrator/proc-helm-install-components-orchestrator-plugin.adoc +++ b/modules/orchestrator/proc-helm-install-components-orchestrator-plugin.adoc @@ -8,6 +8,16 @@ You can use Orchestrator Infrastructure for {product} to install components for .Procedure . Run the `helm install` command for the `orchestrator-infra` chart. This command initiates the installation of the Red Hat Serverless Operator and Red Hat Serverless Logic Operator components. ++ +[source,terminal,subs="attributes+"] +---- +helm install redhat-developer/redhat-developer-hub-orchestrator-infra +---- ++ +[NOTE] +==== +You must complete this one-off requirement before enabling the Orchestrator plugin. +==== . Manually approve the install plans for the Operators. You must run the `oc patch installplan` commands provided in the output to approve their installation. diff --git a/modules/orchestrator/proc-manual-install-components-orchestrator-plugin.adoc b/modules/orchestrator/proc-manual-install-components-orchestrator-plugin.adoc index 5aad946258..57588a4103 100644 --- a/modules/orchestrator/proc-manual-install-components-orchestrator-plugin.adoc +++ b/modules/orchestrator/proc-manual-install-components-orchestrator-plugin.adoc @@ -8,7 +8,11 @@ Use manual installation when you want full control of the setup process and comp .Procedure . Install the OpenShift Serverless components manually by following the instructions in the {rhoserverless-link}[{rhoserverless-brand-name}] documentation. - -. You must also configure workflow persistence to prevent workflow context from being lost when the Pod restarts. You can do this configuration at the namespace level using the `SonataFlowPlatform` or `SonataFlow` custom resources (CR). For detailed instructions on configuring persistence using the `SonataFlowPlatform` or `SonataFlow` custom resources, see {rhoserverless-link}/html-single/serverless_logic/index#serverless-logic-managing-persistence[Managing workflow persistence]. - . (Optional) If required, deploy a custom PostgreSQL database. + +[IMPORTANT] +==== +Prevent workflow context from being lost when the Pod restarts by configuring workflow persistence. +You can configure persistence at the namespace level by using the `SonataFlowPlatform` or `SonataFlow` custom resources (CR). +For more information, check the {rhoserverless-link}/html-single/serverless_logic/index#serverless-logic-managing-persistence[Managing workflow persistence] documentation. +==== diff --git a/modules/release-notes/ref-release-notes-breaking-changes.adoc b/modules/release-notes/ref-release-notes-breaking-changes.adoc index 5257c7af19..29e9a133d7 100644 --- a/modules/release-notes/ref-release-notes-breaking-changes.adoc +++ b/modules/release-notes/ref-release-notes-breaking-changes.adoc @@ -5,6 +5,49 @@ This section lists breaking changes in {product} {product-version}. +[id="removed-functionality-rhidp-5309"] +== Argo CD, Tekton, and Topology plugins require the Kubernetes Frontend and Kubernetes Backend plugins + +With this update, the Argo CD, Tekton, and Topology plugins requires the Kubernetes Frontend and Kubernetes Backend plugins. Before this update, these plugins depended only on the Kubernetes Backend plugin, and the feature provided by the Kubernetes Frontend plugin where provided by the removed `@janus-idp/shared-react` package. + +.Procedure +. Enable the Kubernetes Frontend and Kubernetes Backend plugins. ++ +[source,yaml] +---- +global: + dynamic: + plugins: + - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes + disabled: false + - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes-backend-dynamic + disabled: false +---- + +. The Kubernetes Frontend plugin shows automatically a *Kubernetes* tab for Software Catalog entities with the annotation `backstage.io/kubernetes-id` or `backstage.io/kubernetes-namespace`. ++ +Optionally, to hide the *Kubernetes* tab in the Software Catalog, disable the feature with this dynamic plugin configuration: ++ +[source,yaml] +---- +global: + dynamic: + plugins: + - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes + disabled: false + pluginConfig: + dynamicPlugins: + frontend: + backstage.plugin-kubernetes: + mountPoints: [] + - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes-backend-dynamic + disabled: false +---- + + + +.Additional resources +* link:https://issues.redhat.com/browse/RHIDP-5309[RHIDP-5309] + -None. diff --git a/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc b/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc index 49d14dd061..6932567d34 100644 --- a/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc +++ b/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc @@ -8,7 +8,7 @@ This section lists deprecated functionalities in {product} {product-version}. [id="deprecated-functionality-rhidp-6917"] == Backstage CR versions `v1alpha1` and `v1alpha2` -Backstage CR versions `v1alpha1` and `v1alpha2` are deprecated in 1.7 and will be removed in 1.9 +Backstage CR versions `v1alpha1` and `v1alpha2` are deprecated in 1.7 and will be removed in 1.9. .Additional resources @@ -19,9 +19,23 @@ Backstage CR versions `v1alpha1` and `v1alpha2` are deprecated in 1.7 and will b To enhance performance, decrease image size, and reduce maintenance, the method of including "wrapped" dynamic plugins within the main {product} container image is being deprecated as of release 1.7.0. We are transitioning to a model where all dynamic plugins will be distributed as independent OCI artifacts. -For the 1.7.0 release, this is a deprecation notice only; there are no breaking changes, and all previously bundled plugins will continue to be bundled. However, we encourage customers to prepare for the removal of wrappers in a future release by beginning to use the new OCI artifacts in 1.8.0. Documentation will be updated to guide this migration. +For the 1.7.0 release, this is a deprecation notice only; there are no breaking changes, and all previously bundled plugins will continue to be bundled. However, we encourage customers to prepare for the removal of wrappers in a future release by beginning to use the new OCI artifacts in 1.9.0. Documentation will be updated to guide this migration. For more information, see {installing-and-viewing-plugins-book-link}#proc-load-plugin-oci-image_assembly-install-third-party-plugins-rhdh[Loading a plugin packaged as an OCI image]. + .Additional resources * link:https://issues.redhat.com/browse/RHIDP-8525[RHIDP-8525] + +[id="deprecated-functionality-rhidp-9180"] +== Deprecation of OCM Plugins + +The Open Cluster Management (OCM) plugins integrates your {product} instance with the MultiClusterHub and MultiCluster engines of OCM. +The OCM plugins are deprecated as of RHDH 1.8, and will be removed in a future release. + + +.Additional resources +* link:https://issues.redhat.com/browse/RHIDP-9180[RHIDP-9180] + + + diff --git a/modules/release-notes/ref-release-notes-developer-preview.adoc b/modules/release-notes/ref-release-notes-developer-preview.adoc index 3215d33e52..cfca630719 100644 --- a/modules/release-notes/ref-release-notes-developer-preview.adoc +++ b/modules/release-notes/ref-release-notes-developer-preview.adoc @@ -1,8 +1,6 @@ :_content-type: REFERENCE [id="developer-preview"] -:ls-brand-name: Red Hat Developer Lightspeed for {product} - = Developer Preview This section lists Developer Preview features in {product} {product-version}. @@ -14,7 +12,79 @@ Developer Preview features are not supported by Red Hat in any way and are not f For more information about the support scope of Red Hat Developer Preview features, see link:https://access.redhat.com/support/offerings/devpreview/[Developer Preview Support Scope]. ==== -== {ls-brand-name} +[id="developer-preview-rhdhpai-1087"] +== Interacting with Model Context Protocol tools for Red Hat Developer Hub + +You can enhance your Red Hat Developer Hub integration by leveraging the Model Context Protocol (MCP) server. This integration enables seamless communication with various Artificial Intelligence (AI) clients, facilitating efficient data exchange and expanding the functionality of the platform. + + + +.Additional resources +* link:https://issues.redhat.com/browse/RHDHPAI-1087[RHDHPAI-1087] + +[id="developer-preview-rhdhpai-1089"] +== OpenShift AI Connector for Red Hat Developer Hub + +You can use OpenShift AI Connector for RHDH to enable users to use Red Hat Developer Hub (RHDH) to surface AI Models and Model Servers from Red Hat OpenShift AI (RHOAI) directly into the RHDH/Backstage Catalog. + + + +.Additional resources +* link:https://issues.redhat.com/browse/RHDHPAI-1089[RHDHPAI-1089] + +[id="developer-preview-rhidp-8290"] +== Built-in TechDocs for RHDH-Local + +With this update, RHDH Local includes comprehensive technical TechDocs covering everything you need to know about it. +Once running, access the built-in documentation directly in the application for detailed guides. + + +.Additional resources +* link:https://issues.redhat.com/browse/RHIDP-8290[RHIDP-8290] + +[id="developer-preview-rhidp-8296"] +== Tech Radar and Quay plugins in RHDH Local + +With this update, RHDH Local integrates the Tech Radar and Quay plugins, for a better out of the box experience for users. The Tech Radar plugin provides a visually engaging element on the homepage or via navigation, and showcases the dynamic plugins loading mechanism for simple {product-short} extension. The Quay plugin demonstrates integration with external services and provides a practical example of extending the {product-short} software catalog. + + +.Additional resources +* link:https://issues.redhat.com/browse/RHIDP-8296[RHIDP-8296] + +[id="developer-preview-rhidp-8297"] +== RHDH Local default homepage enhancements + +With this update, RHDH Local default homepage integrates a floating action button with quick links for easy access to documentation and information. + + +.Additional resources +* link:https://issues.redhat.com/browse/RHIDP-8297[RHIDP-8297] + +[id="developer-preview-rhidp-8298"] +== Enhanced customozation and collaboration with pre-loaded templates in RHDH Local + +With this update, RHDH Local integrates pre-loaded essential templates, enabling users to create their own custom plugins and add TechDocs or software components to existing projects within {product}. This enhancement demonstrates {product-short} extensibility, empowers users to extend the platform, and enhances the overall user experience by promoting collaboration and customization. + + +.Additional resources +* link:https://issues.redhat.com/browse/RHIDP-8298[RHIDP-8298] + +[id="developer-preview-rhidp-8709"] +== Configurable Key Performance Indicators (KPIs) by using the Scorecard plugin + +With this release, {product} integrates the Scorecard plugin, enabling users to visualize software quality and health metrics directly in {product-short}. + +Developers can visualize scorecards with the metrics available to the their role in a tab on component detail pages, allowing them to quickly check the quality of their code and ensure it meets team standards. + +Platform engineers can configure Key Performance Indicators (KPIs) from various data sources, with initial support for GitHub open pull requests and Jira open issues. Custom metric providers will allow for the addition of more data sources. + +This simplifies the monitoring of applications by offering a single, clear report on health, security, and compliance. + +// RN already in https://issues.redhat.com/browse/RHIDP-8709 + + +.Additional resources +* link:https://issues.redhat.com/browse/RHIDP-8709[RHIDP-8709] + + -{ls-brand-name} is available as a Developer Preview feature in {product}, as a virtual assistant powered by generative Artificial Intelligence (AI) designed for {product-very-short}. The assistant offers in-depth insights into {product-very-short}, including its wide range of capabilities. You can interact with this assistant to explore and learn more about {product-very-short} in greater detail. -For more information, see {product-docs-link}/html-single/interacting_with_red_hat_developer_lightspeed_for_red_hat_developer_hub/index[{ls-brand-name}]. diff --git a/modules/release-notes/ref-release-notes-fixed-issues.adoc b/modules/release-notes/ref-release-notes-fixed-issues.adoc index 545552d51a..f84d5518f4 100644 --- a/modules/release-notes/ref-release-notes-fixed-issues.adoc +++ b/modules/release-notes/ref-release-notes-fixed-issues.adoc @@ -1,153 +1,95 @@ :_content-type: REFERENCE + [id="fixed-issues"] = Fixed issues This section lists issues fixed in {product} {product-version}. -== Fixed issues in 1.7.0 - -[id="bug-fix-rhidp-6536"] -=== Improved keyboard accessibility - -In this release, various fixes and improvements have been made to improve the keyboard accessibility in {product}. - - -.Additional resources -* link:https://issues.redhat.com/browse/RHIDP-6536[RHIDP-6536] +== Fixed issues in 1.8.0 +[id="bug-fix-rhdhbugs-1000"] +=== Improved startup speed with updated init container image pull policy for {product-short} Helm Chart -[id="bug-fix-rhdhbugs-249"] -=== Fixed `techdocs-module-addons-contrib` plugin not displayed as preinstalled plugin - -Previously, the `techdocs-module-addons-contrib` plugin was not displayed as preinstalled in Extensions. With this update, the plugin is displayed as preinstalled. +With this update, the pull policy for the init container image of the {product-short} Helm Chart was changed from `Always` to `IfNotPresent`. This change reduces the repeated download time during startup of the container image, which is approximately 2.5 GB, thereby significantly improving startup speed for users. .Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-249[RHDHBUGS-249] +* link:https://issues.redhat.com/browse/RHDHBUGS-1000[RHDHBUGS-1000] -[id="bug-fix-rhdhbugs-322"] -=== Excessive queries to the `relations` database table from the `rbac-backend` plugin - -Before this update, excessive queries from the `rbac-backend` plugin to the `relations` database table caused performance issues. As a consequence, users experienced slow performance. With this release, the RBAC backend plugin has been optimized to improve performance by preventing excessive queries to the 'relations' database table. +[id="bug-fix-rhdhbugs-1028"] +=== Improved Authentication for Self-Hosted Enterprise SCM Providers +Previously, actions requiring access to a self-hosted enterprise SCM provider failed, returning an error that no authentication provider was available for the specified host. -.Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-322[RHDHBUGS-322] - - -[id="bug-fix-rhdhbugs-503"] -=== The Operator reverts the number of replicas set automatically by a Horizontal Pod Autoscaler (HPA) - -Previously the {product-very-short} Operator enforced `replicas: 1` from its default deployment config, which overrode scaling decisions. - -With this update, `replicas: 1` is removed from the default deployment profile and the DB-statefulset manifest. - -This update allows HPA to control scaling as expected, so that {product-very-short} instances can now scale dynamically with HPA without being reset by the operator. +With this update, the SCM integration correctly identifies and uses the configured authentication provider for the corresponding enterprise host. .Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-503[RHDHBUGS-503] - - -[id="bug-fix-rhdhbugs-512"] -=== Improved error messaging for bulk imports - -Before this update, when users selected 100 or more repositories simultaneously, the create pull request action could fail with a generic error message. In this release, we provide a more informative error message when creating pull requests for multiple repositories. This bug fix helps users to understand the issue by providing more information about what caused the error. +* link:https://issues.redhat.com/browse/RHDHBUGS-1028[RHDHBUGS-1028] -.Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-512[RHDHBUGS-512] - +[id="bug-fix-rhdhbugs-2003"] +=== Customizable image names for job and data index services in {product-short} Helm Chart -[id="bug-fix-rhdhbugs-622"] -=== Excessive authorize requests generated by the RBAC backend API - -Before this update, excessive authorize requests in the REST API for creating/editing roles, permissions, and conditions in rbac-backend led to performance issues. With this release, the excessive authorization requests in the REST API have been fixed by reducing permissions to only 'user' credentials. +Previously, when deploying the {product-short} Helm Chart with the Orchestrator enabled, it was not possible to customize the image names of the job and data index services, for example in disconnected environments. Setting the `orchestrator.sonataflowPlatform.jobServiceImage` and `orchestrator.sonataflowPlatform.dataIndexImage` would return a schema validation error from Helm. This update fixes this issue. .Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-622[RHDHBUGS-622] +* link:https://issues.redhat.com/browse/RHDHBUGS-2003[RHDHBUGS-2003] -[id="bug-fix-rhdhbugs-632"] -=== Custom title not persisting on refresh of visited cards - -Previously, the custom title set via `app.title` in the _Top Visited_ and _Recently Visited_ cards did not persist after a page refresh, instead it defaulted back to _{product}_. - -With this update, after each refresh, the cards correctly display the custom title defined in the `app.title` configuration. +[id="bug-fix-rhdhbugs-2020"] +=== Network policy installation fix for {product-short} RHDH Helm Chart with Orchestrator flavor +Before this update, the {product-short} RHDH Helm Chart would not install Network Policies when the Orchestrator flavor was deployed with `serverlessLogicOperator` disabled, preventing the {product-short} Pods from being completely available. This update fixes this situation by installing network policies unconditionally when the orchestrator is enabled. -.Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-632[RHDHBUGS-632] +.Additional resources +* link:https://issues.redhat.com/browse/RHDHBUGS-2020[RHDHBUGS-2020] -[id="bug-fix-rhdhbugs-834"] -=== Fixed role name updates via API to correctly propagate to permissions, metadata, and conditions - -Previously, when a role name was updated using the RBAC API, existing permissions, conditions, and metadata were not updated and remained mapped to the old role name. -With this update, role name changes are now correctly updated. +[id="bug-fix-rhdhbugs-2036"] +=== Resolved SonataFlow Pod Crash Issue -.Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-834[RHDHBUGS-834] +In the new release, a timing problem during the RHDH 1.7 installation with Orchestrator plugins, affecting SonataFlow database provisioning, has been addressed. This issue caused SonataFlow pods to repeatedly enter the `CrashLoopBackOff` state, leading to delays and potential confusion for users. With this update, SonataFlow pods no longer encounter the `CrashLoopBackOff` state due to the database provisioning delay. This improvement enhances the user experience, as SonataFlow pods now start promptly, eliminating unnecessary wait times. -[id="bug-fix-rhdhbugs-903"] -=== Fixed role actions tooltip delay issue - -Previously, tooltips on action icons in the Role list table of the Role-Based Access Control (RBAC) page were slow to appear on hover. - -This issue has been fixed, ensuring that tooltips now appear immediately when hovering over action icons in the RBAC page. +.Additional resources +* link:https://issues.redhat.com/browse/RHDHBUGS-2036[RHDHBUGS-2036] -.Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-903[RHDHBUGS-903] +[id="bug-fix-rhdhbugs-2117"] +=== Fixed SCM integration failures for self-hosted enterprise SCM providers +Before this update, the SCM integration failed due to lack of identification of the configured authentication provider for self-hosted enterprise SCM hosts. As a consequence, users experienced failed actions with self-hosted enterprise SCM providers due to missing authentication. -[id="bug-fix-rhdhbugs-1110"] -=== The Extensions catalog does not show an error when the backend plugin is not installed - -Previously, if the backend Extensions was not installed, {product-very-short} showed the skeleton "forever" instead of an error message. - -With this update, the UI shows an empty state with a message to enable the backend plugin. +With this release, the SCM integration now correctly uses the configured authentication provider for corresponding enterprise host. As a result, end users can now successfully perform actions requiring enterprise SCM access. .Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-1110[RHDHBUGS-1110] +* link:https://issues.redhat.com/browse/RHDHBUGS-2117[RHDHBUGS-2117] -[id="bug-fix-rhdhbugs-1139"] -=== Fixed Profile dropdown showing Guest instead of user's name with OIDC authentication - -Previously, the *Profile dropdown* in the Global Header showed `Guest` instead of the logged-in user’s display name when logging in using the OIDC authentication. - -With this update, the *Profile dropdown* now correctly displays the user's name by first checking `spec.profile.displayName`, then `metadata.title`, and finally falls back to the name shown on the *Profile card* in the *Settings* page if neither is available. +[id="bug-fix-rhdhbugs-1878"] +=== Fixed incorrect version detection for local plugin updates +Before this update, local plugins within the image were incorrectly detected for updates due to version misidentification. This led to users being unable to update local plugins from wrappers, resulting in outdated functionality. With this release, local plugin updates are now automatically detected, eliminating the need for manual adjustments and ensuring seamless plugin version updates for end users. .Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-1139[RHDHBUGS-1139] - +* link:https://issues.redhat.com/browse/RHDHBUGS-1878[RHDHBUGS-1878] -[id="bug-fix-rhdhbugs-1162"] -=== Excessive filter arguments generated by the RBAC backend `enforcerDelegate.getFilteredPolicy` - -Before this update, {product-very-short} performance was affected by the duplication of filter arguments in `enforcerDelegate.getFilteredPolicy`. With this release, the duplication of filter arguments in `enforcerDelegate.ts` is avoided. +[id="bug-fix-rhdhbugs-2041"] +=== Orchestrator plugin updated to 1.7.1 -.Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-1162[RHDHBUGS-1162] - +Before this update, the latest Orchestrator feature set was unavailable because the release included the outdated Orchestrator plugin version `1.6`. This issue is resolved in {product-very-short} `1.7.1`. The Orchestrator plugin is now updated to version `1.7.1`, ensuring that users have access to the latest features and functionality. -[id="bug-fix-rhdhbugs-1213"] -=== Fixed Jenkins permissions not being displayed in RBAC UI - -Previously, Jenkins permissions were not exposed by Jenkins at `/api/jenkins/.well-known/backstage/permissions/metadata` with the change to `JenkinsBuilder`. As a result, RBAC UI did not display the permissions. In this release, users can configure Jenkins permissions by using the RBAC UI. .Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-1213[RHDHBUGS-1213] +* link:https://issues.redhat.com/browse/RHDHBUGS-2041[RHDHBUGS-2041] diff --git a/modules/release-notes/ref-release-notes-known-issues.adoc b/modules/release-notes/ref-release-notes-known-issues.adoc index 62fd170b13..ea624f28a8 100644 --- a/modules/release-notes/ref-release-notes-known-issues.adoc +++ b/modules/release-notes/ref-release-notes-known-issues.adoc @@ -5,21 +5,61 @@ This section lists known issues in {product} {product-version}. -[id="known-issue-rhdhbugs-1979"] -== Latest Orchestrator feature set is unavailable +[id="known-issue-rhdhbugs-986"] +== MUI v5 components might render with broken styles in non-bundled plugins -This release includes the Orchestrator plugin version from `1.6`. As a result, the latest feature set is not yet available. The Orchestrator plugin will be updated to the latest feature set in a future release. +Plugins that are not bundled with {product}, meaning not part of the {product} wrappers, might experience styling issues or broken visuals when using Material UI v5 components. +. Workaround +* Add the following code to the plugin’s entry file, such as `workspaces/<pluginId>/plugins/<pluginId>/src/index.ts`: ++ +[source,javascript] +---- +import { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className'; +ClassNameGenerator.configure(componentName => { + return componentName.startsWith('v5-') + ? componentName + : `v5-${componentName}`; +}); +---- +// Source: https://docs.google.com/document/d/1cF-pRNY7duwD5JP8ACQVP24oJJw8ffphCzIgmyICcAM/edit?usp=sharing +.Additional resources +* link:https://issues.redhat.com/browse/RHDHBUGS-986[RHDHBUGS-986] + +[id="known-issue-rhdhbugs-664"] +== Out-Of-Memory errors in the {product} Operator + +To resolve Out-Of-Memory errors in the {product} Operator, adjust memory settings manually: + +. Edit the deployment: ++ +---- +kubectl edit deployment rhdh-operator -n <namespace> +---- +. In the editor, set the memory request to 1 GiB and the limit to 2 GiB: ++ +[source,yaml] +---- +spec: + containers: + - name: rhdh-operator + resources: + requests: + memory: "1G" + limits: + memory: "2G" +---- +. Reapply this change whenever the Operator is actively reconciled. The pod should become healthy, using about 1.07 GiB of memory. .Additional resources -* link:https://issues.redhat.com/browse/RHDHBUGS-1979[RHDHBUGS-1979] +* link:https://issues.redhat.com/browse/RHDHBUGS-664[RHDHBUGS-664] diff --git a/modules/release-notes/ref-release-notes-new-features.adoc b/modules/release-notes/ref-release-notes-new-features.adoc index 0070e778a9..62f2aa0f3f 100644 --- a/modules/release-notes/ref-release-notes-new-features.adoc +++ b/modules/release-notes/ref-release-notes-new-features.adoc @@ -1,106 +1,177 @@ -:_content-type: REFERENCE - -[id="new-features"] -= New features - -This section highlights new features in {product} {product-version}. - -[id="enhancement-rhdhbugs-1885"] -== Improved plugin configuration merging for include files - -Previously, include plugin configuration files would overwrite existing files. With this update, {product} will merge configurations from existing include files, only overwriting specific keys while preserving keys defined in existing include files, mirroring the behavior for the `plugins` key. - - -[id="feature-rhidp-6628"] -== Dynamic plugin dependency management -{product} 1.7 adds dynamic plugin dependency management, so that the Operator can manage Kubernetes resources required by plugins. - -For more information, see link:https://github.com/redhat-developer/rhdh-operator/blob/main/docs/dynamic-plugins.md#dynamic-plugins-dependency-management[Dynamic plugin dependency management] - -[id="feature-rhidp-6633"] -== Added Orchestrator plugins with dependencies to {product-very-short} profile. - -With this update, Orchestrator plugins with dependencies are added to the {product-very-short} profile. The Orchestrator plugin is disabled by default. When you enable the Orchestrator plugin, it will deploy dependencies and work out of the box on {product-very-short}. - -[id="enhancement-rhidp-6657"] -== Updated {product-very-short} theme - -With this update, the `@redhat-developer/red-hat-developer-hub-theme` package is replaced with the plugin version from the `rhdh-plugins` repository to improve theme integration and visual consistency. Minor UI enhancements include updated border radius on cards. - -[id="enhancement-rhidp-6723"] -== Improved Role-based access control (RBAC) usability and consistency -This release includes several enhancements to improve the usability and consistency of the RBAC experience: - -* Aligned the table height behavior in the "Users and Groups" step with the "Permissions" step. -* Standardized icon colors for edit and delete actions in tables. -* Simplified Overview page titles for users, groups, and permissions. -* Improved layout and labeling in the Conditional Access sidebar. -* Preserved typed input in search fields when selecting users, groups, or plugins. - -These changes aim to create a more intuitive and seamless role management workflow. - -[id="feature-rhidp-6758"] -== Introducing plugin management by using Extensions - -In this release, {product-short} administrators can configure dynamic plugins directly within the Extensions UI. Administrators can now enable, disable, install, or edit the configuration of dynamic plugins on the Extensions Details Page. - -This is an opt-in feature that must be enabled by configuration, and it is intended for testing and development environments only; it is not recommended for production use. - -This release requires a single replica deployment and uses a persistent volume claim (PVC) for the dynamic plugin configuration file. The {product-short} backend does not automatically restart when you save configuration changes. You must restart the {product-short} application for any dynamic plugin configuration updates to take effect. - -[id="feature-rhidp-6963"] -== Dynamic plugins now fully supported and a new command-line tool released. - -Backend dynamic plugins have reached General Availability (GA). A new command-line tool, `@red-hat-developer-hub/cli` (rhdh-cli), has been released for building and packaging these plugins. As a result, the `@janus-idp/cli` is now officially deprecated. All users should migrate their build processes to `@red-hat-developer-hub/cli` to maintain support and receive future updates. - -[id="feature-rhidp-7018"] -== Quick start for platform engineers - -{product-very-short} 1.7 introduces the new Administrator Quick Start guide, a feature designed to streamline the initial setup and configuration process for platform engineers. This guided, interactive experience appears automatically on an administrator's first login, providing clear, step-by-step instructions for essential platform tasks. The goal is to significantly reduce onboarding time and help you configure your {product-very-short} instance with confidence. - -Quick start tracks your progress, offers context-aware help that follows you across configuration pages, and can be dismissed and reopened from the header at any time. This guide ensures a confident, efficient, and structured onboarding experience. Note that when permissions are enabled, this feature is currently available for administrators only, with support for other roles planned for future versions. - -[id="feature-rhidp-7106"] -== Improved global header UX - -With this release, you can display a user avatar in the profile dropdown in the global header. - -[id="feature-rhidp-7262"] -== Improved look and feel of {product-short} - -With this update, the look and feel of {product-short} has been updated to better match the visual style of PatternFly 6 and improve alignment with the {company} product portfolio. - -[id="feature-rhidp-7306"] -== Versioning for software templates - -{product-very-short} has been enhanced to provide crucial traceability, allowing users to easily identify the template version used to create a specific component. This enhancement helps determine if an older entity needs updating or if a bug is linked to a particular template version. - -Scaffolder templates can now be versioned using the backstage.io/template-version annotation and the `catalog:template:version` action. When used with the `catalog:template:version` action, the annotation of the template is applied to the generated catalog entity. - -[id="feature-rhidp-7561"] -== Support for high availability in {eks-brand-name} - -{product} now supports high availability setups in {eks-brand-name} ({eks-short}). This enhancement allows the deployment to scale beyond a single replica, ensuring the application remains operational and accessible even in the event of failures or disruptions. - -For more information, see {configuring-book-link}#HighAvailability[_Configuring high availability in {product}_]. - -[id="feature-rhidp-7610"] -== Adoption Insights in {product} - -In this release, the Adoption Insights plugin is fully supported and enabled by default. The Adoption Insights plugin provides key metrics and trends to help you understand {product-short} usage. - -If you have an existing Adoption Insights plugin custom configuration with GitHub Container registry images already set up, you can upgrade to the latest version to omit configurations using GitHub Container registry images. -For more information, see {adoption-insights-link}#proc-configure-adoption-insights_title-adoption-insights[Configuring the {adoption-insights-title}]. - -[id="feature-rhidp-7663"] -== {product-short} community plugins updated to Backstage 1.39 - -The {product-short} community plugins have been updated to Backstage version 1.39. - -[id="enhancement-rhidp-8103"] -== Improved robustness of dynamic plugin installation - -Previously, the {product} would fail to start if a specified include file in dynamic plugins configuration did not exist. This update addresses the issue by logging a warning and skipping the file if it is not found. - - - +:_content-type: REFERENCE + +[id="new-features"] += New features + +This section highlights new features in {product} {product-version}. + +[id="feature-rhidp-5778"] +== Built-in monitoring for {product} operator + +This update introduces built-in monitoring for the {product} Operator. By enabling `spec.monitoring.enabled: true` in your Backstage custom resource, the {product} Operator will automatically manage service monitor resources for Prometheus metrics collection on the `/metrics` endpoint. This simplifies the monitoring process, eliminating the need for manual service monitor setup, and enhances the user experience on OpenShift and Kubernetes clusters with Prometheus Operator installed. + +[id="feature-rhidp-5779"] +== Automatic ServiceMonitor Creation for Built-in Monitoring + +The Red Hat Developer Hub Operator provides built-in monitoring capabilities by automatically creating and managing the necessary `ServiceMonitor` resource. +For more information, see {monitoring-and-logging-book-link}#proc-admin-enabling-metrics-ocp-operator_assembly-rhdh-observability[2.1. Enabling metrics monitoring in a Red Hat Developer Hub Operator installation on an OpenShift Container Platform cluster]. + +[id="feature-rhidp-7059"] +== Bulk import GitLab projects + +With this update, users can bulk import entities from GitLab into {product}, enhancing onboarding efficiency. + +[id="feature-rhidp-8249"] +== Enhanced package management in the *Extensions* page + +You can manage installed packages more easily under the reorganized *Extensions* navigation. The former *Installed Plugins* tab is renamed to *Installed Packages* and includes new row actions that allow you to edit, enable, and disable packages directly from the list. + +[id="feature-rhidp-8259"] +== Introducing localization support in core plugins, and French localization + +This update introduces localization support and French localization to these core plugins: + +- Adoption insights +- AI Integrations +- Bulk Import +- Extensions (Marketplace) +- Lightspeed +- Orchestrator +- QuickStart +- RBAC +- ScoreCard +- Topology +- Global header +- Homepage +- Tekton +- ArgoCD + +This enhancement allows {product} to display content in French, improving accessibility for users who speak French. AI/Cursor automation ensures a seamless translation process, enhancing the user experience by providing content in their preferred language, preparing {product} for use in multilingual environments and fostering a more inclusive developer community. + +[id="feature-rhidp-8260"] +== Localization support for strings defined in {product} configuration files + +With this update, localization support is introduced for strings defined in {product} configuration files such as `app-config.yaml` and `dynamic-plugins.default.yaml`. +This enables users to customize the interface in their preferred language, providing a consistent multilingual interface across these components: + +* Entity Tabs Configuration +* Global Header +* QuickStart +* Sidebar Menu Items +* Floating Action Button (FAB) labels and tooltips + +This localization support ensures a more inclusive and user-friendly experience for a diverse user base, improving user experience and supporting global users. + +[id="feature-rhidp-8261"] +== Plugins localization support + +With this update, {product} integrates the Backstage localization framework, enabling users to load translations provided by their plugins. The selected language will persist according to the user settings persistence configuration. Additionally, users can load translations from an external JSON file, allowing them to override existing translations or add translations for existing translation keys. + +[id="feature-rhidp-8274"] +== Enhanced Bulk Import with Scaffolder Templates + +With this update, users can enhance the Bulk Import plugin by importing repositories using scaffolder templates. This automates and optimizes the process by integrating with existing Backstage templates and Orchestrator workflows. Users can select their preferred pre-ingestion workflow and incorporate various scaffolder actions into their bulk import process, resulting in a more efficient and flexible Bulk Import experience. + +[id="feature-rhidp-8288"] +== Enabling Software Template version update notifications + +With this update, you can enable notification alerts whenever a Software Template is updated with a new version. For more information, see {customizing-book-link}#proc-enabling-software-template-version-update-notifications_configuring-templates[Enabling Software Template version update notifications in {product}]. + +[id="feature-rhidp-8295"] +== Software Template provenance and dependency tracking + +With this update, {product} supports Software Template provenance and a dedicated dependency view to improve component traceability and lifecycle management across your organization. + +For more information, see {customizing-book-link}#tracking-component-origin-and-software-template-version[Tracking component origin and Software Template version]. + +[id="feature-rhidp-8329"] +== Users can customize their homepage + +With this update, {product} users can customize their homepage, empowering personalization and productivity. Users can now move, resize, remove, and add existing cards, fostering a more flexible and adaptable user experience. The customization options are based on the existing settings, and users can reset their configuration to the default. The feature aims to improve the resize and reorder mechanism, and update existing cards to work better on different card sizes. + +[id="feature-rhidp-8409"] +== {product-short} community plugins updated to Backstage 1.42 + +The {product-short} community plugins have been updated to Backstage version 1.42. + +[id="feature-rhidp-8445"] +== Quick Start experience for developers logging into {product} for the first time + +With this update, {product} includes a guided Quick Start experience tailored for the developer persona. This new feature appears automatically upon a developer's first login to help them get started quickly and accelerate adoption of the platform. + +The developer Quick Start provides guided next steps for key features, including: + +- Bulk import +- Software Catalog +- Self-service templates +- Learning paths + +This feature is integrated with RBAC, allowing platform engineers to configure the Quick Start content and conditionally display it to specific developer groups for personalized onboarding. + +[id="feature-rhidp-8460"] +== Transparent plugin support indicators + +With this update, the plugin support model is now transparently aligned with Red Hat's standard release classifications. +The *Verified* badge is removed, a clearer tiered support system is implemented, and plugin metadata are enhanced, providing a more informative and user-friendly experience in the *Extensions Catalog*. This change improves visibility into plugin maturity, enhances customer trust, and ensures internal consistency across the catalog. + +Release Status:: +Indicates the support status: +* Generally Available (GA) +* Technology Preview (TP) +* Developer Preview (DP). + +Supported By:: +Indicates the support provider: +* Red Hat +* Partner Name +* Customer Name +* Backstage Community + +Backstage Version Supported:: +Replaces the previous *Version* field. + +Author:: +Indicates the plugin author. + +Tags:: +Indicates the plugin tags. + +Category:: +Indicates the plugin category. + +Badges:: +GA (Green)::: For plugins that have the `Generally Available` *Release Status*, and a non empty *Supported By* value. +Certified (Purple)::: For Red Hat partner plugins (unchanged). +Custom (Yellow)::: For customer-developed plugins (unchanged). ++ +[NOTE] +---- +The *Verified* badge is removed. +---- + + + + +[id="enhancement-rhidp-8643"] +== Enhanced package management in the Extensions page + +With this update, {product} includes a reorganized Extensions navigation, enabling the user to manage installed packages more easily. The former *Installed Plugins* tab is renamed to *Installed Packages* and includes new row actions that allow you to edit, enable, and disable packages directly from the list. + +[id="feature-rhidp-8645"] +== Support for high availability in {gke-brand-name} + +{product} now supports high availability setups in {gke-brand-name} ({gke-short}). This enhancement allows the deployment to scale beyond a single replica, ensuring the application remains operational and accessible even in the event of failures or disruptions. + +For more information, see link:{configuring-book-url}#HighAvailability[_Configuring high availability in Red Hat Developer Hub_]. + +[id="feature-rhidp-8715"] +== Customizable container deployment in {product} pods + +Previously, injecting necessary files (`extraFiles`) and environment variables (`extraEnvs`) was restricted to the default `backstage-backend` container. + +With this update, you can configure resource injection for any container in the {product} pod, including sidecars and system containers. This allows you to complete the job of deploying custom components, such as security agents, log collectors, or configuration managers, that require specific volumes or runtime variables to operate successfully. + +See {configuring-book-link}#proc-injecting-custom-files-and-environment-variables-into-backstage-containers[Injecting extra files and environment variables into {backstage} containers]. + + + diff --git a/modules/release-notes/single-source-release-notes.jira2asciidoc.yml b/modules/release-notes/single-source-release-notes.jira2asciidoc.yml index e92116f107..6fe74a75a2 100644 --- a/modules/release-notes/single-source-release-notes.jira2asciidoc.yml +++ b/modules/release-notes/single-source-release-notes.jira2asciidoc.yml @@ -7,7 +7,7 @@ sections: description: | This section highlights new features in {product} {product-version}. query: > - project in ("Red Hat Internal Developer Platform", RHDHBUGS) + project in (RHIDP, RHDHBUGS, RHDHPAI, RHDHSUPP) AND "Release Note Status" = "Done" AND level is EMPTY AND status in (Closed, "Release Pending") @@ -21,7 +21,7 @@ sections: description: | This section lists breaking changes in {product} {product-version}. query: > - project = "Red Hat Internal Developer Platform" + project in (RHIDP, RHDHBUGS, RHDHPAI, RHDHSUPP) AND "Release Note Status" = "Done" AND level is EMPTY AND status in (Closed, "Release Pending") @@ -35,7 +35,7 @@ sections: description: | This section lists deprecated functionalities in {product} {product-version}. query: > - project = "Red Hat Internal Developer Platform" + project in (RHIDP, RHDHBUGS, RHDHPAI, RHDHSUPP) AND "Release Note Status" = "Done" AND level is EMPTY AND status in (Closed, "Release Pending") @@ -57,7 +57,7 @@ sections: See: link:https://access.redhat.com/support/offerings/techpreview/[Technology Preview support scope]. ==== query: > - project = "Red Hat Internal Developer Platform" + project in (RHIDP, RHDHBUGS, RHDHPAI, RHDHSUPP) AND "Release Note Status" = "Done" AND level is EMPTY AND status in (Closed, "Release Pending") @@ -66,33 +66,33 @@ sections: AND fixVersion <= "{version_patch}" ORDER BY key template: with-jira-link - # - id: developer-preview - # title: Developer Preview - # description: | - # This section lists Developer Preview features in {product} {product-version}. + - id: developer-preview + title: Developer Preview + description: | + This section lists Developer Preview features in {product} {product-version}. - # [IMPORTANT] - # ==== - # Developer Preview features are not supported by Red Hat in any way and are not functionally complete or production-ready. Do not use Developer Preview features for production or business-critical workloads. Developer Preview features provide early access to functionality in advance of possible inclusion in a Red Hat product offering. Customers can use these features to test functionality and provide feedback during the development process. Developer Preview features might not have any documentation, are subject to change or removal at any time, and have received limited testing. Red Hat might provide ways to submit feedback on Developer Preview features without an associated SLA. + [IMPORTANT] + ==== + Developer Preview features are not supported by Red Hat in any way and are not functionally complete or production-ready. Do not use Developer Preview features for production or business-critical workloads. Developer Preview features provide early access to functionality in advance of possible inclusion in a Red Hat product offering. Customers can use these features to test functionality and provide feedback during the development process. Developer Preview features might not have any documentation, are subject to change or removal at any time, and have received limited testing. Red Hat might provide ways to submit feedback on Developer Preview features without an associated SLA. - # For more information about the support scope of Red Hat Developer Preview features, see link:https://access.redhat.com/support/offerings/devpreview/[Developer Preview Support Scope]. - # ==== - # query: > - # project in ("Red Hat Internal Developer Platform") - # AND "Release Note Status" = "Done" - # AND level is EMPTY - # AND status in (Closed, "Release Pending") - # AND "Release Note Type" in ("Developer Preview") - # AND fixVersion >= "{version_minor}" - # AND fixVersion <= "{version_patch}" - # ORDER BY key - # template: with-jira-link + For more information about the support scope of Red Hat Developer Preview features, see link:https://access.redhat.com/support/offerings/devpreview/[Developer Preview Support Scope]. + ==== + query: > + project in (RHIDP, RHDHBUGS, RHDHPAI, RHDHSUPP) + AND "Release Note Status" = "Done" + AND level is EMPTY + AND status in (Closed, "Release Pending") + AND "Release Note Type" in ("Developer Preview") + AND fixVersion >= "{version_minor}" + AND fixVersion <= "{version_patch}" + ORDER BY key + template: with-jira-link - id: fixed-issues title: Fixed issues description: | This section lists issues fixed in {product} {product-version}. query: > - project in ("Red Hat Internal Developer Platform", RHDHBUGS) + project in (RHIDP, RHDHBUGS, RHDHPAI, RHDHSUPP) AND "Release Note Status" = "Done" AND level is EMPTY AND status in (Closed, "Release Pending") @@ -106,7 +106,7 @@ sections: description: | This section lists known issues in {product} {product-version}. query: > - project in ("Red Hat Internal Developer Platform", RHDHBUGS) + project in (RHIDP, RHDHBUGS, RHDHPAI, RHDHSUPP) AND "Release Note Status" = "Done" AND level is EMPTY AND "Release Note Type" in ("Known Issue") diff --git a/titles/customizing/master.adoc b/titles/customizing/master.adoc index db68b5602e..18485878a8 100644 --- a/titles/customizing/master.adoc +++ b/titles/customizing/master.adoc @@ -45,3 +45,5 @@ include::assemblies/assembly-customizing-the-quick-access-card.adoc[leveloffset= include::modules/customizing/proc-customizing-rhdh-metadata-card.adoc[leveloffset=+1] + +include::assemblies/assembly-localization-in-rhdh.adoc[leveloffset=+1] \ No newline at end of file