docs/releases/v1.28.0-changelog.md
Upgrade Helper: https://backstage.github.io/upgrade-helper/?to=1.28.0
readTree for Harness provider to support TechDocs functionality@backstage/backend-defaultsbackend-defaults instead of backend-app-apiuseRedisSets cache config option.database types, helpers and implementations were moved to the package @backstage/backend-defaults and deprecated from the package @backstage/backend-commons.TokenManager has been deprecated in preparation for the stable release of the New Backend System. Please migrate to the new coreServices.auth, coreServices.httpAuth, and coreServices.userInfo services as needed instead.isDatabaseConflictError helper have been moved to the @backstage/backend-plugin-api package and deprecated from @backstage/backend-common.BackendFeature contract change.cache implementation and types to the @backstage/backend-defaults package.ContainerRunner, DockerContainerRunner and KubernetesContainerRunner are now deprecatedcreateServiceBuilder factory, so if you are still using it, please checkout the migration guide and migrate your plugin to use the new backend system.dropDatabase@backstage/backend-common to @backstage/backend-defaults/urlReader. Please update your imports.@backstage/backend-app-apiServiceBuilder type, notFoundHandler and redactWintonLogLine functions.getVoidLogger in tests.ErrorHandlerOptions and RequestLoggingHandlerFactory.662dce8: BREAKING: The workdir argument have been removed from The GerritUrlReader constructor.
BREAKING: The Gerrit readTree implementation will now only use the Gitiles api. Support
for using git to clone the repo has been removed.
02103be: Deprecated and moved over core services to @backstage/backend-defaults
DefaultSchedulerService@backstage/backend-commons package.@backstage/backend-app-api. They are now available as subpath exports, e.g.
@backstage/backend-defaults/scheduler is where the service factory and default
implementation of coreServices.scheduler now lives. They have been marked as
deprecated in their old locations.dropDatabase@backstage/backend-common to @backstage/backend-defaults/urlReader. Please update your imports.@backstage/backend-defaults/auth, @backstage/backend-defaults/httpAuth, and @backstage/backend-defaults/userInfo to house their respective backend service factories. You should now import these services from those new locations, instead of @backstage/backend-app-api.TestCaches that functions just like TestDatabasesBackendFeature contract change.mockCredentials.serviceMockDirectoryOptions was renamed to CreateMockDirectoryOptions so that it's clear these options are exclusive to the mock directory factory.TestDatabases to no longer depend on backend-commonundefined from the child method.be1014d: BREAKING Removed deprecated code from when casing was changed from GitHub to Github nearly two years ago. The following items have been removed:
getGitHubFileFetchUrl (use getGithubFileFetchUrl instead)GitHubIntegrationConfig (use GithubIntegrationConfig instead)GitHubIntegration (use GithubIntegration instead)readGitHubIntegrationConfig (use readGithubIntegrationConfig instead)readGitHubIntegrationConfigs (use readGithubIntegrationConfigs instead)replaceGitHubUrlType (use replaceGithubUrlType instead)395b973: Implemented readTree for Harness provider to support TechDocs functionality
662dce8: BREAKING: gitilesBaseUrl is now mandatory for the Gerrit integration. The
ability to override this requirement using the DISABLE_GERRIT_GITILES_REQUIREMENT
environment variable has been removed.
scope and scopes config options have been removed and replaced by the standard additionalScopes config. In addition, the offline_access, read:jira-work, and read:jira-user scopes have been set to required and will always be present.BackendFeature contract change.package.json.scope config option have been removed and replaced by the standard additionalScopes config.BackendFeature contract change.package.json.scope config option have been removed and replaced by the standard additionalScopes config. In addition, openid, profile, and email scopes have been set to required and will always be present.BackendFeature contract change.package.json.BackendFeature contract change.package.json.scope config option have been removed and replaced by the standard additionalScopes config. In addition, openid, and offline_access scopes have been set to required and will always be present.BackendFeature contract change.package.json.863a800: Added the following default targets for external routes:
createComponent binds to the Scaffolder page.viewTechDoc binds to the TechDocs entity documentation page.createFromTemplate binds to the Scaffolder selected template page.d44a20a: Added additional plugin metadata to package.json.
e04e57d: Fix bug with missing Actions column after adding "pagination" prop to catalog table
a2d2649: Export catalogTranslationRef under /alpha
bcec60f: updated the ContextMenu, ActionsPage, OngoingTask and TemplateCard frontend components to support the new scaffolder permissions:
scaffolder.task.createscaffolder.task.cancelscaffolder.task.readUpdated dependencies
EventsService too in the new backend systemBackendFeature contract change.package.json.getLocationByEntityisDatabaseConflictError helper from the @backstage/backend-plugin-api package in order to avoid dependency with the soon to deprecate @backstage/backend-common package.BackendFeature contract change.package.json.package.json.BackendFeature contract change.package.json.package.json.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.package.json.node-fetch instead of native fetch, as per https://backstage.io/docs/architecture-decisions/adrs-adr01388480e4: BREAKING: The proxy backend plugin is now protected by Backstage auth, by default. Unless specifically configured (see below), all proxy endpoints will reject requests immediately unless a valid Backstage user or service token is passed along with the request. This aligns the proxy with how other Backstage backends behave out of the box, and serves to protect your upstreams from unauthorized access.
A proxy configuration section can now look as follows:
proxy:
endpoints:
'/pagerduty':
target: https://api.pagerduty.com
credentials: require # NEW!
headers:
Authorization: Token token=${PAGERDUTY_TOKEN}
There are three possible credentials settings at this point:
require: Callers must provide Backstage user or service credentials with
each request. The credentials are not forwarded to the proxy target.forward: Callers must provide Backstage user or service credentials with
each request, and those credentials are forwarded to the proxy target.dangerously-allow-unauthenticated: No Backstage credentials are required to
access this proxy target. The target can still apply its own credentials
checks, but the proxy will not help block non-Backstage-blessed callers. If
you also add allowedHeaders: ['Authorization'] to an endpoint configuration,
then the Backstage token (if provided) WILL be forwarded.The value dangerously-allow-unauthenticated was the old default.
The value require is the new default, so requests that were previously
permitted may now start resulting in 401 Unauthorized responses. If you have
backend.auth.dangerouslyDisableDefaultAuthPolicy set to true, this does not
apply; the proxy will behave as if all endpoints were set to
dangerously-allow-unauthenticated.
If you have proxy endpoints that require unauthenticated access still, please
add credentials: dangerously-allow-unauthenticated to their declarations in
your app-config.
BackendFeature contract change.package.json.d57ebbc: Changed the way to display entities in EntityPicker to use entityPresentationApi instead of humanizeEntityRef
62bd9eb: Replace ui:widget: password with the a warning message stating that it's not secure and to use the build in SecretField.
You can do this by updating your template.yaml files that have the reference ui:widget: password to ui:field: Secret instead.
apiVersion: backstage.io/v1alpha1
kind: Template
metadata:
...
spec:
parameters:
- title: collect some information
schema:
type: object
properties:
password:
title: Password
type: string
- ui:widget: password
+ ui:field: Secret
steps:
- id: collect-info
name: Collect some information
action: acme:do:something
input:
- password: ${{ parameters.password }}
+ password: ${{ secrets.password }}
60085dd: Added the following default targets for external routes:
registerComponent binds to the catalog import page.viewTechDoc binds to the TechDocs entity documentation page.cbebad1: Internal updates to allow reusing Backstage's fetchApi implementation for event source requests. This allows you to for example, override the Authorization header.
1ea7679: Removed waiting for the workspace and repository fields to be filled in before requesting user credentials
d44a20a: Added additional plugin metadata to package.json.
6cb4886: Updated dependency @rjsf/utils to 5.18.4.
Updated dependency @rjsf/core to 5.18.4.
Updated dependency @rjsf/material-ui to 5.18.4.
Updated dependency @rjsf/validator-ajv8 to 5.18.4.
75dcd7e: Fixing bug in formData type as it should be optional as it's possibly undefined
bcec60f: updated the ContextMenu, ActionsPage, OngoingTask and TemplateCard frontend components to support the new scaffolder permissions:
scaffolder.task.createscaffolder.task.cancelscaffolder.task.read612a453: Change owner to project for azure host
Updated dependencies
BackendFeature contract change.package.json.62bd9eb: Replace ui:widget: password with the a warning message stating that it's not secure and to use the build in SecretField.
You can do this by updating your template.yaml files that have the reference ui:widget: password to ui:field: Secret instead.
apiVersion: backstage.io/v1alpha1
kind: Template
metadata:
...
spec:
parameters:
- title: collect some information
schema:
type: object
properties:
password:
title: Password
type: string
- ui:widget: password
+ ui:field: Secret
steps:
- id: collect-info
name: Collect some information
action: acme:do:something
input:
- password: ${{ parameters.password }}
+ password: ${{ secrets.password }}
ScaffolderField component are now opened in new tabs.package.json.@rjsf/utils to 5.18.4.
Updated dependency @rjsf/core to 5.18.4.
Updated dependency @rjsf/material-ui to 5.18.4.
Updated dependency @rjsf/validator-ajv8 to 5.18.4.formData type as it should be optional as it's possibly undefinedb186701: BREAKING: The ElasticSearch indexer will now delete stale indices matching the indexer's pattern.
The method getAliases of ElasticSearchClientWrapper has been deprecated and might be removed in future releases.
An indexer using the some-type-index__* pattern will remove indices matching this pattern after indexation
to prevent stale indices leading to shards exhaustion.
Before upgrading ensure that the index pattern doesn't match indices that are not managed by Backstage and thus shouldn't be deleted.
Note: The ElasticSearch indexer already uses wildcards patterns to remove aliases on these indices.
BackendFeature contract change.getVoidLogger with mockServices.logger.mock in order to remove the dependency with the soon-to-be-deprecated backend-common package.package.json.b7de623: Fixed a potential crash when passing an object with a null prototype as log meta.
9539a0b: Deprecated authServiceFactory, httpAuthServiceFactory, and userInfoServiceFactory. Please import them from @backstage/backend-defaults/auth, @backstage/backend-defaults/httpAuth, and @backstage/backend-defaults/userInfo respectively instead.
3e823d3: Limited user tokens will no longer include the ent field in its payload. Ownership claims will now be fetched from the user info service.
NOTE: Limited tokens issued prior to this change will no longer be valid. Users may have to clear their browser cookies in order to refresh their auth tokens.
78a0b08: Internal refactor to handle BackendFeature contract change.
398b82a: Add support for JWKS tokens in ExternalTokenHandler.
9e63318: Added an optional accessRestrictions to external access service tokens and service principals in general, such that you can limit their access to certain plugins or permissions.
e25e467: Added a new static key based method for plugin-to-plugin auth. This is useful for example if you are running readonly service nodes that cannot use a database for the default public-key signature scheme outlined in BEP-0003. Most users should want to stay on the more secure zero-config database signature scheme.
You can generate a public and private key pair using openssl.
First generate a private key using the ES256 algorithm
openssl ecparam -name prime256v1 -genkey -out private.ec.key
Convert it to PKCS#8 format
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private.ec.key -out private.key
Extract the public key
openssl ec -inform PEM -outform PEM -pubout -in private.key -out public.key
After this you have the files private.key and public.key. Put them in a place where you know their absolute paths, and then set up your app-config accordingly:
backend:
auth:
keyStore:
type: static
static:
keys:
- publicKeyFile: /absolute/path/to/public.key
privateKeyFile: /absolute/path/to/private.key
keyId: some-custom-id
7d30d95: Fixing issue with log meta fields possibly being circular refs
6a576dc: Stop using getVoidLogger in tests to reduce the dependency on the soon-to-deprecate backstage-common package.
6551b3d: Deprecated core service factories and implementations and moved them over to
subpath exports on @backstage/backend-defaults instead. E.g.
@backstage/backend-defaults/scheduler is where the service factory and default
implementation of coreServices.scheduler now lives.
d617103: Updating the logger redaction message to something less dramatic
Updated dependencies
BackendFeature contract change.78a0b08: DEPRECATION: You should no longer do a function call on backend features when adding them to backends. The support for doing that is deprecated, and you should remove all trailing () parentheses after plugins and modules where you add them to your backend or test backends (e.g. when using startTestBackend).
The background for this is that createBackendPlugin and createBackendModule function now effectively return a BackendFeature rather than a () => BackendFeature. This is part of the cleanup efforts for New Backend System 1.0. In the short run this is non-breaking because the feature type has been given a callback signature that returns itself. But we strongly recommend that you remove all now-redundant calls made to feature objects, because that callback signature will be removed in a future release.
Service factories are still callbacks at this point.
Example change:
await startTestBackend({
features: [
eventsServiceFactory(), // service - stays unchanged
- catalogModuleBitbucketCloudEntityProvider(), // module - remove parentheses
+ catalogModuleBitbucketCloudEntityProvider,
9bdc3e8: In tests, return null rather than throwing an error when trying to get the ExtensionPoint.T property, so that tests asserting the property are not easily broken.
9e63318: Added an optional accessRestrictions to external access service tokens and service principals in general, such that you can limit their access to certain plugins or permissions.
3aa3fc7: Marked the TokenManagerService and IdentityService types as deprecated
b2ee7f3: Deprecated all of the UrlReader related type names and replaced them with prefixed versions. Please update your imports.
ReadTreeOptions was renamed to UrlReaderServiceReadTreeOptionsReadTreeResponse was renamed to UrlReaderServiceReadTreeResponseReadTreeResponseDirOptions was renamed to UrlReaderServiceReadTreeResponseDirOptionsReadTreeResponseFile was renamed to UrlReaderServiceReadTreeResponseFileReadUrlResponse was renamed to UrlReaderServiceReadUrlResponseReadUrlOptions was renamed to UrlReaderServiceReadUrlOptionsSearchOptions was renamed to UrlReaderServiceSearchOptionsSearchResponse was renamed to UrlReaderServiceSearchResponseSearchResponseFile was renamed to UrlReaderServiceSearchResponseFile9539a0b: Improved coreServices doc comments
6551b3d: Moved the declaration of the SchedulerService here, along with prefixed versions of all of the types it depends on, from @backstage/backend-tasks
0665b7e: Renamed BackendPluginConfig, BackendModuleConfig, and ExtensionPointConfig respectively to CreateBackendPluginOptions, CreateBackendModuleOptions, and CreateExtensionPointOptions to standardize frontend and backend factories signatures.
1779188: Start using the isDatabaseConflictError helper from the @backstage/backend-plugin-api package in order to avoid dependency with the soon to deprecate @backstage/backend-common package.
Updated dependencies
@backstage/backend-plugin-api and @backstage/backend-defaultsTaskScheduleDefinitionConfig deprecated comment to point to SchedulerServiceTaskScheduleDefinitionConfigTaskScheduler.fromConfig method and stop using the getVoidlogger in tests files to reduce the dependency on the soon-to-deprecate backstage-common package.peerDependencies to devDependencies in package.json.hbs templates.esm loaded dependencies being different from the cjs import for Vite dependenciesvite-plugin-node-polyfills to ^0.22.0.--publish flag to the repo fix command. This command will validate and if possible generate the metadata required for publishing packages with the Backstage CLI. In addition, a check has been added that the backstage.pluginId and backstage.pluginPackage(s) fields are present when packing a package for publishing.scaffolder-action cli templateversions:check --fix when yarn.lock has multiple joint versions in the same sectionesbuild target for package builds to ES2022.findPaths will now accept a shorthand workspaces config in package.json, no longer requiring workspaces.packages.BackstagePackageJson type.35fbe09: Added support for configuration of route bindings through static configuration, and default targets for external route refs.
In addition to configuring route bindings through code, it is now also possible to configure route bindings under the app.routes.bindings key, for example:
app:
routes:
bindings:
catalog.createComponent: catalog-import.importPage
Each key in the route binding object is of the form <plugin-id>.<externalRouteName>, where the route name is key used in the externalRoutes object passed to createPlugin. The value is of the same form, but with the name taken from the plugin routes option instead.
The equivalent of the above configuration in code is the following:
const app = createApp({
// ...
bindRoutes({ bind }) {
bind(catalogPlugin.externalRoutes, {
createComponent: catalogImportPlugin.routes.importPage,
});
},
});
Updated dependencies
inherit variant on OverflowTooltip underlying Typography component.SidebarSubmenu text to not follow the theme colordecimalDigits propertySelect component.SupportButton where the title was rendered with the characteristics of a button.defaultTarget option has been added to createExternalRouteRef. This allows one to specify a default target of the route by name, for example 'catalog.catalogIndex', which will be used if the target route is present in the app and there is no explicit route binding.dockerode dependency.5.4.node-gyp to v10--client-additional-properties option to openapi generate commanddockerode dependency.v5- class prefixing gets removed by tree shaking.registerComponent external route will now by default bind to the catalog import page if it is available.package.json.DefaultApiExplorerPage now accepts an optional ownerPickerMode for toggling the behavior of the EntityOwnerPicker, exposing a new mode <DefaultApiExplorerPage ownerPickerMode="all" /> particularly suitable for larger catalogs. In this new mode, EntityOwnerPicker will display all the users and groups present in the catalog.package.json.BackendFeature contract change.app-backend plugin, which was broken in release 1.26.0.
This support is critical for dynamic frontend plugins to have access to their config values.package.json.package.json.package.json.3e823d3: Limited user tokens will no longer include the ent field in its payload. Ownership claims will now be fetched from the user info service.
NOTE: Limited tokens issued prior to this change will no longer be valid. Users may have to clear their browser cookies in order to refresh their auth tokens.
8869b8e: Updated local development setup.
78a0b08: Internal refactor to handle BackendFeature contract change.
d44a20a: Added additional plugin metadata to package.json.
3e1bb15: Updated to use the new @backstage/plugin-auth-backend-module-onelogin-provider implementation
Updated dependencies
BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.additionalScopes configuration. In addition, the account scope has been set to required and will always be present.package.json.BackendFeature contract change.package.json.node-fetch instead of native fetch, as per https://backstage.io/docs/architecture-decisions/adrs-adr013BackendFeature contract change.package.json.BackendFeature contract change.additionalScopes configuration. In addition, the read:user scope has been set to required and will always be present.package.json.BackendFeature contract change.additionalScopes configuration. In addition, the read_user scope has been set to required and will always be present.package.json.BackendFeature contract change.additionalScopes configuration. In addition, the openid, userinfo.email, and userinfo.profile scopes have been set to required and will always be present.package.json.BackendFeature contract change.package.json.BackendFeature contract change.additionalScopes configuration.package.json.BackendFeature contract change.package.json.BackendFeature contract change.additionalScopes configuration, which means it can now also be specified as an array. In addition, the openid, email, profile, and offline_access scopes have been set to required and will always be present.package.json.BackendFeature contract change.scope config option have been removed and replaced by the standard additionalScopes config. In addition, the openid, pinniped:request-audience, username, and offline_access scopes have been set to required and will always be present.package.json.798ec37: Updated scope management for OAuth providers, where the createOAuthAuthenticator now accepts a new collection of scopes options:
scopes.persist - Whether scopes should be persisted, replaces the shouldPersistScopes option.scopes.required - A list of required scopes that will always be requested.scopes.transform - A function that can be used to transform the scopes before they are requested.The createOAuthProviderFactory has also received a new additionalScopes option, and will also read additionalScopes from the auth provider configuration. Both of these can be used to add additional scopes that should always be requested.
A significant change under the hood that this new scope management brings is that providers that persist scopes will now always merge the already granted scopes with the requested ones. The previous behavior was that the full authorization flow would not include existing scopes, while the refresh flow would only include the existing scopes.
d44a20a: Added additional plugin metadata to package.json.
Updated dependencies
package.json.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.getVoidLogger with mockServices.logger.mock in order to remove the dependency with the soon-to-be-deprecated backend-common package.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.GitlabOrgDiscoveryEntityProvider where a missing orgEnabled config key was throwing an error.GitlabDiscoveryEntityProvider where the fallback branch was taking precedence over the GitLab default branch.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.userSelect property in readMicrosoftGraphOrg methodpackage.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.package.json.EntityRelationsGraph filter that excludes entities from graphpackage.json.catalogEntity external route will now by default bind to the catalog entity page if it is available.BackendFeature contract change.package.json.package.json.package.json.package.json.package.json.package.json.BackendFeature contract change.package.json.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.package.json.getVoidLogger with mockServices.logger.mock in order to remove the dependency with the soon-to-be-deprecated backend-common package.package.json.package.json.@rjsf/utils to 5.18.4.
Updated dependency @rjsf/core to 5.18.4.
Updated dependency @rjsf/material-ui to 5.18.4.
Updated dependency @rjsf/validator-ajv8 to 5.18.4.package.json.@rjsf/utils to 5.18.4.
Updated dependency @rjsf/core to 5.18.4.
Updated dependency @rjsf/material-ui to 5.18.4.
Updated dependency @rjsf/validator-ajv8 to 5.18.4.package.json.package.json.package.json.package.json.package.json.catalogIndex external route is now optional and will by default bind to the catalog index page if it is available.package.json.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.package.json.package.json.tokenManager definition from @backstage/backend-plugin-apipackage.json.78a0b08: Internal refactor to handle BackendFeature contract change.
5c65785: Fixing issues with log redaction in the scaffolder logs
d44a20a: Added additional plugin metadata to package.json.
7d30d95: Fixing issue with log meta fields possibly being circular refs
d617103: Updating the logger redaction message to something less dramatic
f4c8486: Increase max wait time in debug:wait action to 10 minutes
bcec60f: added the following new permissions to the scaffolder backend endpoints:
scaffolder.task.createscaffolder.task.cancelscaffolder.task.readUpdated dependencies
BackendFeature contract change.GitRepository.webUrl instead of GitRepository.remoteUrl to set the value of repoContentsUrl as remoteUrl can sometimes return an URL with the wrong format (e.g. https://<organization>@dev.azure.com/<organization>/<project>/\_git/<repository>).package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.node-fetch instead of native fetch, as per https://backstage.io/docs/architecture-decisions/adrs-adr013BackendFeature contract change.gitlab:issue:edit action to edit existing GitLab issuespackage.json.gitlab:pipeline:trigger action to trigger GitLab pipelines.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.node-fetch instead of native fetch, as per https://backstage.io/docs/architecture-decisions/adrs-adr013BackendFeature contract change.package.json.d44a20a: Added additional plugin metadata to package.json.
bcec60f: added the following new permissions to the scaffolder backend endpoints:
scaffolder.task.createscaffolder.task.cancelscaffolder.task.readUpdated dependencies
package.json.getVoidLogger with mockServices.logger.mock in order to remove the dependency with the soon-to-be-deprecated backend-common package.package.json.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.BackendFeature contract change.getVoidLogger with mockServices.logger.mock in order to remove the dependency with the soon-to-be-deprecated backend-common package.package.json.BackendFeature contract change.package.json.BackendFeature contract change.package.json.getVoidLogger with mockServices.logger.mock in order to remove the dependency with the soon-to-be-deprecated backend-common package.package.json.package.json.package.json.package.json.BackendFeature contract change.getVoidLogger with mockServices.logger.mock in order to remove the dependency with the soon-to-be-deprecated backend-common package.package.json.package.json.package.json.fetchApi implementation for event source requests. This allows you to for example, override the Authorization header.TechDocsIndexPage now accepts an optional ownerPickerMode for toggling the behavior of the EntityOwnerPicker, exposing a new mode <TechDocsIndexPage ownerPickerMode="all" /> particularly suitable for larger catalogs. In this new mode, EntityOwnerPicker will display all the users and groups present in the catalog.CopyToClipboardButton component where positioning of the "Copy to clipboard" button in techdocs code snippets was broken in some cases.package.json.TechDocsSearchBar component from opening when clicking on the arrow icon.package.json.BackendFeature contract change.dockerode dependency.package.json.package.json.TechdocsGenerator won't require a containerRunner option anymore for generating TechDocs in docker.package.json.getRepoUrlFromLocationAnnotation to check for Harness SCM integrationpackage.json.package.json.BackendFeature contract change.package.json.package.json.