From f58599bd4a406abbc79fd7fed165e14f9d38dfc4 Mon Sep 17 00:00:00 2001 From: Gerry-Forde <63045020+Gerry-Forde@users.noreply.github.com> Date: Mon, 10 Nov 2025 08:53:57 +0000 Subject: [PATCH 01/10] RHIDP-8635-1-1-8 - Comprehensive documentation for developers on adding localization support to custom plugins --- .../ref-rh-supported-plugins.adoc | 144 +++++----- .../ref-rh-tech-preview-plugins.adoc | 266 +++++++++--------- .../rhdh-supported-plugins.csv | 8 +- .../dynamic-plugins/rhdh-supported-plugins.sh | 4 +- 4 files changed, 211 insertions(+), 211 deletions(-) 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 From 14af742008aa360120832609fe7b88580e7855ea Mon Sep 17 00:00:00 2001 From: OpenShift Cherrypick Robot Date: Mon, 10 Nov 2025 12:27:29 +0100 Subject: [PATCH 02/10] [release-1.8] RHDHPAI-1087: Few changes to MCP client configuration (#1538) * Few changes to MCP client configuration * Changing DL name --------- Co-authored-by: Priyanka Abel --- ...assembly-model-context-protocol-tools.adoc | 2 - ...mcp-clients-to-access-the-rhdh-server.adoc | 18 ++--- ...ng-mcp-tools-for-developer-lightspeed.adoc | 65 ------------------- 3 files changed, 9 insertions(+), 76 deletions(-) delete mode 100644 modules/model-context-protocol-tools/proc-configuring-mcp-tools-for-developer-lightspeed.adoc 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/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 From 6d7171a92903ac7268e226980fb884d660ae63de Mon Sep 17 00:00:00 2001 From: OpenShift Cherrypick Robot Date: Mon, 10 Nov 2025 12:32:18 +0100 Subject: [PATCH 03/10] [release-1.8] RHDHBUGS-2134: updated attribute (#1540) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: deerskindoll Co-authored-by: Fabrice Flore-Thébault --- artifacts/attributes.adoc | 4 ++-- assemblies/assembly-install-rhdh-osd-gcp.adoc | 2 +- modules/installation/proc-install-rhdh-osd-gcp-helm.adoc | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/artifacts/attributes.adoc b/artifacts/attributes.adoc index f02100c341..0d3281d975 100644 --- a/artifacts/attributes.adoc +++ b/artifacts/attributes.adoc @@ -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-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/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}]. From 4643d32f3fdf6117d19783bcf16853410d02c016 Mon Sep 17 00:00:00 2001 From: OpenShift Cherrypick Robot Date: Mon, 10 Nov 2025 12:36:58 +0100 Subject: [PATCH 04/10] RHDHBUGS-2221:Remove janus-idp references (#1541) Co-authored-by: Kim Tsao --- .../proc-configuring-the-RBAC-backend-plugin.adoc | 2 +- .../proc-setting-up-the-guest-authentication-provider.adoc | 2 +- .../proc-customizing-the-home-page-cards.adoc | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) 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/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) ---- -- From 2e9d40d83c4995dff22c4f7f5f9bd49c98129658 Mon Sep 17 00:00:00 2001 From: OpenShift Cherrypick Robot Date: Mon, 10 Nov 2025 12:58:17 +0100 Subject: [PATCH 05/10] [release-1.8] RHIDP-8629: sizing requirements for external PostgreSQL deployment with RHDH (#1544) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fortune Ndlovu Co-authored-by: Judith Magak <124673476+jmagak@users.noreply.github.com> Co-authored-by: deerskindoll Co-authored-by: Fabrice Flore-Thébault --- modules/about/ref-rhdh-sizing.adoc | 54 ++++++++++++++++++- ...guring-postgresql-instance-using-helm.adoc | 1 + ...ostgresql-instance-using-the-operator.adoc | 1 + 3 files changed, 55 insertions(+), 1 deletion(-) 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/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 From 4fbcfac022b400e5df8de06d85b96f80375a1a5d Mon Sep 17 00:00:00 2001 From: OpenShift Cherrypick Robot Date: Mon, 10 Nov 2025 13:00:01 +0100 Subject: [PATCH 06/10] [release-1.8] RHDHBUGS-2009: Orchestrator docs update (#1543) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Judith Magak <124673476+jmagak@users.noreply.github.com> Co-authored-by: deerskindoll Co-authored-by: Fabrice Flore-Thébault --- assemblies/assembly-orchestrator-rhdh.adoc | 3 +-- ...proc-enabling-orchestrator-plugins-components.adoc | 11 ++++------- ...c-helm-install-components-orchestrator-plugin.adoc | 10 ++++++++++ ...manual-install-components-orchestrator-plugin.adoc | 10 +++++++--- 4 files changed, 22 insertions(+), 12 deletions(-) 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/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. +==== From 180039fca381795366e373936c64c7ae05f33c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20Flore-Th=C3=A9bault?= Date: Mon, 10 Nov 2025 13:50:57 +0100 Subject: [PATCH 07/10] RHIDP-8636 - Release notes for 1.8 (#1536) Co-authored-by: Gerry-Forde <63045020+Gerry-Forde@users.noreply.github.com> --- .../ref-release-notes-breaking-changes.adoc | 45 ++- ...ease-notes-deprecated-functionalities.adoc | 25 +- .../ref-release-notes-developer-preview.adoc | 23 +- .../ref-release-notes-fixed-issues.adoc | 134 +++----- .../ref-release-notes-known-issues.adoc | 48 ++- .../ref-release-notes-new-features.adoc | 304 ++++++++++++------ ...gle-source-release-notes.jira2asciidoc.yml | 38 +-- 7 files changed, 376 insertions(+), 241 deletions(-) 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..1a8a17b8b8 100644 --- a/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc +++ b/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc @@ -5,23 +5,28 @@ 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 - - -.Additional resources -* link:https://issues.redhat.com/browse/RHIDP-6917[RHIDP-6917] - [id="deprecated-functionality-rhidp-8525"] == Deprecation of Bundled Plugin Wrappers 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..43c4692175 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,22 @@ 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-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..4d03d79350 100644 --- a/modules/release-notes/ref-release-notes-new-features.adoc +++ b/modules/release-notes/ref-release-notes-new-features.adoc @@ -1,106 +1,198 @@ -:_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="enhancement-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. + +[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-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. + +[id="feature-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. + +[id="feature-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. + +[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..dfe2b32b7e 100644 --- a/modules/release-notes/single-source-release-notes.jira2asciidoc.yml +++ b/modules/release-notes/single-source-release-notes.jira2asciidoc.yml @@ -66,27 +66,27 @@ 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 ("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 - id: fixed-issues title: Fixed issues description: | From f8fec1a9084763e4af881e55c0b705c7e54e4bae Mon Sep 17 00:00:00 2001 From: OpenShift Cherrypick Robot Date: Mon, 10 Nov 2025 14:54:38 +0100 Subject: [PATCH 08/10] [release-1.8] RHDHPAI-1091: Lightspeed Core Developer Lightspeed (#1545) * Lightspeed Core Developer Lightspeed * Incorporated some of the comments * Fixed merge conflict * Incorporated the remaining tech comments * Incorporated Ben's comments * Added some comments * Incorporated some comments and added architecture image * Minor change * Added the new heading for install and configure * Incorporated Tim's suggestions * Fixing build error * Minor changes and rebase * updating rcs * Minor change * minor change * Minor change * Incorporated Jordan and Ben's comments * Maysuns comments and updated screenshots * rhdhbugs-2225 * Minor changes and rebase * Incorporated Karthik's comments * Added Maysun's and Stephanie's comments * Incorporated Jordan's coments * Minor * Minor changes * Minor changes --------- Co-authored-by: Priyanka Abel --- artifacts/attributes.adoc | 4 +- ...mbly-customizing-developer-lightspeed.adoc | 4 +- assemblies/assembly-developer-lightspeed.adoc | 2 +- .../assembly-using-developer-lightspeed.adoc | 9 + .../developer-lightspeed-1-8-0.png | Bin 0 -> 135136 bytes ...eveloper-lightspeed-architecture-1-8-0.png | Bin 0 -> 103071 bytes .../developer-lightspeed.png | Bin 158138 -> 0 bytes .../con-about-bring-your-own-model.adoc | 2 +- .../con-about-developer-lightspeed.adoc | 4 +- ...bout-lightspeed-stack-and-llama-stack.adoc | 33 + .../con-about-road-core-service.adoc | 11 - .../con-llm-requirements.adoc | 7 +- .../con-rag-embeddings.adoc | 6 +- .../con-supported-architecture.adoc | 10 +- .../proc-changing-your-llm-provider.adoc | 73 +- ...-customizing-the-chat-history-storage.adoc | 38 +- .../proc-gathering-feedback.adoc | 18 +- ...installing-and-configuring-lightspeed.adoc | 702 ++++++++---------- .../proc-updating-the-system-prompt.adoc | 2 +- ...ed-to-start-a-chat-for-the-first-time.adoc | 4 +- .../proc-using-question-validation.adoc | 20 - 21 files changed, 404 insertions(+), 545 deletions(-) create mode 100644 images/rhdh-plugins-reference/developer-lightspeed-1-8-0.png create mode 100644 images/rhdh-plugins-reference/developer-lightspeed-architecture-1-8-0.png delete mode 100644 images/rhdh-plugins-reference/developer-lightspeed.png create mode 100644 modules/developer-lightspeed/con-about-lightspeed-stack-and-llama-stack.adoc delete mode 100644 modules/developer-lightspeed/con-about-road-core-service.adoc delete mode 100644 modules/developer-lightspeed/proc-using-question-validation.adoc diff --git a/artifacts/attributes.adoc b/artifacts/attributes.adoc index 0d3281d975..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 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-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-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 0000000000000000000000000000000000000000..c1c2598748fa5a7c195aa53942dfddf76bb5742a GIT binary patch literal 135136 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�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%0D)`B^c3RnZ?`wxs- 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 ZqIGSb5jVDn{-p34J$$^!QTLhO{V&5WVHE%X literal 0 HcmV?d00001 diff --git a/images/rhdh-plugins-reference/developer-lightspeed.png b/images/rhdh-plugins-reference/developer-lightspeed.png deleted file mode 100644 index bf15e9773fb7b01800e350ebeb7f497b6b687efb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158138 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⋘^G9K)lBD)T5QJCxV*QrUMkTcT9v1LCu>DgKNB-} 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 O-wkzbwZdywVgCVWOVpYG 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 ----- From b1a47fe80c9334e069e4e5b5790ba42847308cdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20Flore-Th=C3=A9bault?= Date: Mon, 10 Nov 2025 15:54:26 +0100 Subject: [PATCH 09/10] Release notes update for release-1.8 (#1546) --- ...ease-notes-deprecated-functionalities.adoc | 9 +++ .../ref-release-notes-developer-preview.adoc | 57 +++++++++++++++++++ .../ref-release-notes-new-features.adoc | 21 ------- ...gle-source-release-notes.jira2asciidoc.yml | 14 ++--- 4 files changed, 73 insertions(+), 28 deletions(-) diff --git a/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc b/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc index 1a8a17b8b8..6932567d34 100644 --- a/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc +++ b/modules/release-notes/ref-release-notes-deprecated-functionalities.adoc @@ -5,6 +5,15 @@ 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. + + +.Additional resources +* link:https://issues.redhat.com/browse/RHIDP-6917[RHIDP-6917] + [id="deprecated-functionality-rhidp-8525"] == Deprecation of Bundled Plugin Wrappers diff --git a/modules/release-notes/ref-release-notes-developer-preview.adoc b/modules/release-notes/ref-release-notes-developer-preview.adoc index 43c4692175..cfca630719 100644 --- a/modules/release-notes/ref-release-notes-developer-preview.adoc +++ b/modules/release-notes/ref-release-notes-developer-preview.adoc @@ -12,6 +12,63 @@ 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]. ==== +[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 diff --git a/modules/release-notes/ref-release-notes-new-features.adoc b/modules/release-notes/ref-release-notes-new-features.adoc index 4d03d79350..62f2aa0f3f 100644 --- a/modules/release-notes/ref-release-notes-new-features.adoc +++ b/modules/release-notes/ref-release-notes-new-features.adoc @@ -77,12 +77,6 @@ With this update, users can enhance the Bulk Import plugin by importing reposito 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="enhancement-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. - [id="feature-rhidp-8295"] == Software Template provenance and dependency tracking @@ -90,21 +84,6 @@ With this update, {product} supports Software Template provenance and a dedicate For more information, see {customizing-book-link}#tracking-component-origin-and-software-template-version[Tracking component origin and Software Template version]. -[id="feature-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. - -[id="feature-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. - -[id="feature-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. - [id="feature-rhidp-8329"] == Users can customize their homepage diff --git a/modules/release-notes/single-source-release-notes.jira2asciidoc.yml b/modules/release-notes/single-source-release-notes.jira2asciidoc.yml index dfe2b32b7e..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") @@ -78,7 +78,7 @@ sections: 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") + project in (RHIDP, RHDHBUGS, RHDHPAI, RHDHSUPP) AND "Release Note Status" = "Done" AND level is EMPTY AND status in (Closed, "Release Pending") @@ -92,7 +92,7 @@ sections: 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") From 3fa226d05b85182b50d9a9928c91c769f1ede3cb Mon Sep 17 00:00:00 2001 From: Gerry-Forde <63045020+Gerry-Forde@users.noreply.github.com> Date: Mon, 10 Nov 2025 17:16:39 +0000 Subject: [PATCH 10/10] RHIDP-8635-1-1-8 - Comprehensive documentation for developers on adding localization support to custom plugins --- ...-configuring-a-floating-action-button.adoc | 4 + .../assembly-configuring-the-quickstarts.adoc | 2 +- .../assembly-customizing-the-appearance.adoc | 2 + assemblies/assembly-localization-in-rhdh.adoc | 26 ++ images/rhdh/customize-language-dropdown.png | Bin 0 -> 51705 bytes ...upport-for-the-floating-action-button.adoc | 60 ++++ ...ing-action-button-as-a-dynamic-plugin.adoc | 40 +++ ...ref-floating-action-button-parameters.adoc | 12 + .../con-language-persistence.adoc | 27 ++ ...adding-localization-to-custom-plugins.adoc | 276 ++++++++++++++++++ .../proc-customize-rhdh-language.adoc | 26 ++ ...-enabling-localization-in-quickstarts.adoc | 89 ++++++ .../proc-enabling-localization-in-rhdh.adoc | 28 ++ ...nabling-localization-in-sidebar-items.adoc | 49 ++++ .../proc-overriding-translations.adoc | 120 ++++++++ .../proc-select-rhdh-language.adoc | 21 ++ .../ref-best-practices-for-localization.adoc | 34 +++ titles/customizing/master.adoc | 2 + 18 files changed, 817 insertions(+), 1 deletion(-) create mode 100644 assemblies/assembly-localization-in-rhdh.adoc create mode 100644 images/rhdh/customize-language-dropdown.png create mode 100644 modules/configuring-a-floating-action-button/con-localization-support-for-the-floating-action-button.adoc create mode 100644 modules/customizing-the-appearance/con-language-persistence.adoc create mode 100644 modules/customizing-the-appearance/proc-adding-localization-to-custom-plugins.adoc create mode 100644 modules/customizing-the-appearance/proc-customize-rhdh-language.adoc create mode 100644 modules/customizing-the-appearance/proc-enabling-localization-in-quickstarts.adoc create mode 100644 modules/customizing-the-appearance/proc-enabling-localization-in-rhdh.adoc create mode 100644 modules/customizing-the-appearance/proc-enabling-localization-in-sidebar-items.adoc create mode 100644 modules/customizing-the-appearance/proc-overriding-translations.adoc create mode 100644 modules/customizing-the-appearance/proc-select-rhdh-language.adoc create mode 100644 modules/customizing-the-appearance/ref-best-practices-for-localization.adoc 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-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-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/images/rhdh/customize-language-dropdown.png b/images/rhdh/customize-language-dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..ab668d60f32c6da6801c2b1748a1bff0e689e11d GIT binary patch literal 51705 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 I3;x&t0An+OAOHXW literal 0 HcmV?d00001 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/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/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