# Release v1.29.0 Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.29.0](https://backstage.github.io/upgrade-helper/?to=1.29.0) ## @backstage/backend-app-api@0.8.0 ### Minor Changes - 1cb84d7: **BREAKING**: Removed the depreacted `getPath` option from `httpRouterServiceFactory`, as well as the `HttpRouterFactoryOptions` type. - f691c9b: **BREAKING**: Removed the ability to pass callback-form service factories through the `defaultServiceFactories` option of `createSpecializedBackend`. This is an immediate breaking change as usage of this function is expected to be very rare. ### Patch Changes - 2f99178: The `ServiceFactoryTest.get` method was deprecated and the `ServiceFactoryTest.getSubject` should be used instead. The `getSubject` method has the same behavior, but has a better method name to indicate that the service instance returned is the subject currently being tested. - b05e1e1: Service factories exported by this package have been updated to use the new service factory format that doesn't use a callback. - 617a7d2: Internal refactor that avoids the use of service factory options. - b60db08: Fixing exporting of classes properly from new packages - 18b96b1: The ability to install backend features in callback form (`() => BackendFeature`) has been deprecated. This typically means that you need to update the installed features to use the latest version of `@backstage/backend-plugin-api`. If the feature is from a third-party package, please reach out to the package maintainer to update it. - a63c4b6: Fixing issue with `MiddlewareFactory` deprecation wrapping - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-common@0.23.3 - @backstage/cli-node@0.2.7 - @backstage/backend-tasks@0.5.27 - @backstage/plugin-permission-node@0.8.0 - @backstage/plugin-auth-node@0.4.17 - @backstage/config-loader@1.8.1 - @backstage/cli-common@0.1.14 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/backend-defaults@0.4.0 ### Minor Changes - 1cb84d7: **BREAKING**: Removed the depreacted `getPath` option from `httpRouterServiceFactory`, as well as the `HttpRouterFactoryOptions` type. ### Patch Changes - 53ced70: Added a new Root Health Service which adds new endpoints for health checks. - 2f99178: The `ServiceFactoryTest.get` method was deprecated and the `ServiceFactoryTest.getSubject` should be used instead. The `getSubject` method has the same behavior, but has a better method name to indicate that the service instance returned is the subject currently being tested. - 083eaf9: Fix bug where ISO durations could no longer be used for schedules - b05e1e1: Service factories exported by this package have been updated to use the new service factory format that doesn't use a callback. - 419f387: Refactor of `rootHttpRouterServiceFactory` to allow it to be constructed with options, but without declaring options via `createServiceFactory`. - cb14a05: Repack the package to fix issues with typescript with named exports - b9ed1bb: bumped better-sqlite3 from ^9.0.0 to ^11.0.0 - e28af58: Refactor of `rootConfigServiceFactory` to allow it to be constructed with options, but without declaring options via `createServiceFactory`. - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-app-api@0.8.0 - @backstage/backend-common@0.23.3 - @backstage/plugin-permission-node@0.8.0 - @backstage/integration@1.13.0 - @backstage/plugin-events-node@0.3.8 - @backstage/plugin-auth-node@0.4.17 - @backstage/config-loader@1.8.1 - @backstage/backend-dev-utils@0.1.4 - @backstage/cli-common@0.1.14 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/integration-aws-node@0.1.12 - @backstage/types@1.1.1 ## @backstage/backend-plugin-api@0.7.0 ### Minor Changes - 36f91e8: **BREAKING**: The `PermissionsService` no longer supports passing the deprecated `token` option, and the request options are now required. ### Patch Changes - 53ced70: Added a new Root Health Service which adds new endpoints for health checks. - 083eaf9: Fix bug where ISO durations could no longer be used for schedules - 062c01c: Deprecated the ability to define options for service factories through `createServiceFactory`. In the future all service factories will return a plain `ServiceFactory` object, rather than allowing users to pass options to the factory. To allow for customization of a service implementation one can instead export one or a few building blocks that allows for simple re-implementation of the service instead. For example, instead of: ```ts export const fooServiceFactory = createServiceFactory( (options?: { bar: string }) => ({ service: fooServiceRef, deps: { logger: coreServices.logger }, factory({ logger }) { return { // Implementation of the foo service using the `bar` option. }; }, }), ); ``` We instead encourage service implementations to provide an easy to use API for re-implementing the service for advanced use-cases: ```ts /** @public */ export class DefaultFooService implements FooService { static create(options: { bar: string; logger: LoggerService }) { return new DefaultFooService(options.logger, options.bar ?? 'default'); } private constructor( private readonly logger: string, private readonly bar: string, ) {} // The rest of the implementation } ``` A user that wishes to customize the service can then easily do so by defining their own factory: ```ts export const customFooServiceFactory = createServiceFactory({ service: fooServiceRef, deps: { logger: coreServices.logger }, factory({ logger }) { return DefaultFooService.create({ logger, bar: 'baz' }); }, }); ``` This is of course more verbose than the previous solution where the factory could be customized through `fooServiceFactory({ bar: 'baz' })`, but this is a simplified which in practice should be using static configuration instead. In cases where the old options patterns significantly improves the usability of the service factory, the old pattern can still be implemented like this: ```ts const fooServiceFactoryWithOptions = (options?: { bar: string }) => createServiceFactory({ service: fooServiceRef, deps: { logger: coreServices.logger }, factory({ logger }) { return { // Implementation of the foo service using the `bar` option. }; }, }); export const fooServiceFactory = Object.assign( fooServiceFactoryWithOptions, fooServiceFactoryWithOptions(), ); ``` This change is being made because the ability to define an options callback encourages bad design of services factories. When possible, a service should be configurable through static configuration, and the existence of options may discourage that. More importantly though, the existing options do not work well with the dependency injection system of services, which is a problem for callbacks an other more advanced options. This lead to a bad pattern where only a few explicit dependencies where made available in callbacks, rather than providing an API that allowed simple re-implementation of the service with full access to dependency injection. A separate benefit of this change is that it simplifies the TypeScript types in a way that allows TypeScript to provide a much better error message when a service factory doesn't properly implement the service interface. - fe47a3e: All service config types were renamed to option types in order to standardize frontend and backend `create*` function signatures: - The `ServiceRefConfig` type was renamed to`ServiceRefOptions`; - The `RootServiceFactoryConfig` type was renamed to `RootServiceFactoryOptions`; - The `PluginServiceFactoryConfig` type was renamed to `PluginServiceFactoryOptions` - Updated dependencies - @backstage/plugin-permission-common@0.8.0 - @backstage/plugin-auth-node@0.4.17 - @backstage/cli-common@0.1.14 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/core-app-api@1.14.0 ### Minor Changes - d3c39fc: Allow for the disabling of external routes through config, which was rendered impossible after the introduction of default targets. ```yaml app: routes: bindings: # This has the effect of removing the button for registering new # catalog entities in the scaffolder template list view scaffolder.registerComponent: false ``` ### Patch Changes - db2e2d5: Updated config schema to support app.routes.bindings - Updated dependencies - @backstage/config@1.2.0 - @backstage/core-plugin-api@1.9.3 - @backstage/types@1.1.1 - @backstage/version-bridge@1.0.8 ## @backstage/integration@1.13.0 ### Minor Changes - b5deed0: Add support for `token` for `bitbucketCloud` integration ### Patch Changes - Updated dependencies - @backstage/config@1.2.0 - @backstage/errors@1.2.4 ## @backstage/plugin-catalog-backend@1.24.0 ### Minor Changes - b9ed1bb: bumped better-sqlite3 from ^9.0.0 to ^11.0.0 ### Patch Changes - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-common@0.23.3 - @backstage/backend-tasks@0.5.27 - @backstage/plugin-permission-common@0.8.0 - @backstage/plugin-permission-node@0.8.0 - @backstage/integration@1.13.0 - @backstage/plugin-events-node@0.3.8 - @backstage/backend-openapi-utils@0.1.15 - @backstage/plugin-catalog-node@1.12.4 - @backstage/plugin-search-backend-module-catalog@0.1.28 - @backstage/plugin-catalog-common@1.0.25 - @backstage/catalog-client@1.6.5 - @backstage/catalog-model@1.5.0 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/plugin-catalog-backend-module-ldap@0.7.0 ### Minor Changes - cb32ca7: **BREAKING**: `readLdapOrg` and the `LdapProviderConfig` type now always accept arrays of user and group configs, not just single items. Added support for single ldap catalog provider to provide list and undefined user and group bindings next to standard single one. ### Patch Changes - 083eaf9: Fix bug where ISO durations could no longer be used for schedules - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-tasks@0.5.27 - @backstage/plugin-catalog-node@1.12.4 - @backstage/plugin-catalog-common@1.0.25 - @backstage/catalog-model@1.5.0 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/plugin-permission-common@0.8.0 ### Minor Changes - f4085b8: **BREAKING**: Removed the deprecated and unused `token` option from `EvaluatorRequestOptions`. The `PermissionsClient` now has its own `PermissionClientRequestOptions` type that declares the `token` option instead. ### Patch Changes - Updated dependencies - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/plugin-permission-node@0.8.0 ### Minor Changes - 36f91e8: **BREAKING**: Updated the `ServerPermissionClient` to match the new `PermissionsService` interface, where the deprecated `token` option has been removed and the options are now required. ### Patch Changes - ed10fd2: The `PermissionPolicy` interface has been updated to align with the recent changes to the Backstage auth system. The second argument to the `handle` method is now of the new `PolicyQueryUser` type. This type maintains the old fields from the `BackstageIdentityResponse`, which are now all deprecated. Instead, two new fields have been added, which allows access to the same information: - `credentials` - A `BackstageCredentials` object, which is useful for making requests to other services on behalf of the user as part of evaluating the policy. This replaces the deprecated `token` field. See the [Auth Service documentation](https://backstage.io/docs/backend-system/core-services/auth#creating-request-tokens) for information about how to create a token using these credentials. - `info` - A `BackstageUserInfo` object, which contains the same information as the deprecated `identity`, except for the `type` field that was redundant. Most existing policies can be updated by replacing the `BackstageIdentityResponse` type with `PolicyQueryUser`, which is exported from `@backstage/plugin-permission-node`, as well as replacing any occurrences of `user?.identity` with `user?.info`. - 28b2cfb: Fix invalid cross-reference in API Reference docs - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-common@0.23.3 - @backstage/plugin-permission-common@0.8.0 - @backstage/plugin-auth-node@0.4.17 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 ## @backstage/plugin-scaffolder@1.23.0 ### Minor Changes - 52b6db0: Use virtualization with `EntityPicker` as done earlier with `MultiEntityPicker` to fix performance issues with large data sets. `VirtualizedListbox` extracted into reusable component. - 3583ce5: Use virtualization with `MultiEntityPicker`. Fixes performance issues with large data sets. - b5deed0: Add support for `bitbucketCloud` autocomplete in `RepoUrlPicker` ### Patch Changes - 4d7e11f: enable resizing of the task log stream viewer - 661b354: Fixed a bug where the `RepoUrlPicker` would still require the `owner` field for `azure` - cc81579: Updated dependency `@rjsf/utils` to `5.18.5`. Updated dependency `@rjsf/core` to `5.18.5`. Updated dependency `@rjsf/material-ui` to `5.18.5`. Updated dependency `@rjsf/validator-ajv8` to `5.18.5`. - 89c44b3: Support `catalogFilter` array on `OwnedEntityPicker` - Updated dependencies - @backstage/core-components@0.14.9 - @backstage/integration@1.13.0 - @backstage/plugin-catalog-react@1.12.2 - @backstage/plugin-scaffolder-react@1.10.0 - @backstage/plugin-permission-react@0.4.24 - @backstage/plugin-catalog-common@1.0.25 - @backstage/plugin-scaffolder-common@1.5.4 - @backstage/frontend-plugin-api@0.6.7 - @backstage/integration-react@1.1.29 - @backstage/catalog-client@1.6.5 - @backstage/catalog-model@1.5.0 - @backstage/core-compat-api@0.2.7 - @backstage/core-plugin-api@1.9.3 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/plugin-scaffolder-backend@1.23.0 ### Minor Changes - b5deed0: Add support for `autocomplete` extension point to provide additional `autocomplete` handlers - 0b52438: Serialization of the scaffolder workspace into GCP bucket ### Patch Changes - b9451dd: Updated `catalog:write` scaffolder action to show correct file path location in log message - ff1bb4c: Added a documentation how to use checkpoints - da90cce: Updated dependency `esbuild` to `^0.21.0`. - 62d1fe3: Fix user entity not being fetched for scaffolder dry runner - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-common@0.23.3 - @backstage/backend-tasks@0.5.27 - @backstage/plugin-scaffolder-backend-module-github@0.4.0 - @backstage/plugin-permission-common@0.8.0 - @backstage/plugin-permission-node@0.8.0 - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.4 - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.12 - @backstage/integration@1.13.0 - @backstage/plugin-scaffolder-backend-module-azure@0.1.14 - @backstage/plugin-scaffolder-node@0.4.8 - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.12 - @backstage/plugin-bitbucket-cloud-common@0.2.21 - @backstage/plugin-auth-node@0.4.17 - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.20 - @backstage/plugin-catalog-node@1.12.4 - @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.12 - @backstage/plugin-scaffolder-backend-module-gerrit@0.1.14 - @backstage/plugin-scaffolder-backend-module-gitea@0.1.12 - @backstage/plugin-scaffolder-common@1.5.4 - @backstage/catalog-client@1.6.5 - @backstage/catalog-model@1.5.0 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/plugin-scaffolder-backend-module-gcp@0.1.0 ### Minor Changes - 0b52438: Serialization of the scaffolder workspace into GCP bucket ### Patch Changes - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/integration@1.13.0 - @backstage/plugin-scaffolder-node@0.4.8 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 ## @backstage/plugin-scaffolder-backend-module-github@0.4.0 ### Minor Changes - 70c4b36: Adds support for custom tag policies when creating GitHub environments. ### Patch Changes - ccfc9d1: Fixed bug resulting from missing required owner and repo arguments in `getEnvironmentPublicKey` in action `github:environment:create`. Adding environment secrets now works as expected. - 141f366: Added action to enable GitHub Pages on a repo - 4410fed: Fixed issue with octokit call missing owner and repo when creating environment variables and secrets using github:environment:create action - dfaa28d: Adds `requireLastPushApproval` input property to configure Branch Protection Settings in `github:publish` action Adds `requireLastPushApproval` input property to configure Branch Protection Settings in `github:repo:push` action - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-common@0.23.3 - @backstage/integration@1.13.0 - @backstage/plugin-scaffolder-node@0.4.8 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 ## @backstage/plugin-scaffolder-react@1.10.0 ### Minor Changes - 354e68c: Improve validation error display text in scaffolder - b5deed0: Add support for `bitbucketCloud` autocomplete in `RepoUrlPicker` ### Patch Changes - cc81579: Updated dependency `@rjsf/utils` to `5.18.5`. Updated dependency `@rjsf/core` to `5.18.5`. Updated dependency `@rjsf/material-ui` to `5.18.5`. Updated dependency `@rjsf/validator-ajv8` to `5.18.5`. - 4d7e11f: disables rendering of output box if no output is returned - Updated dependencies - @backstage/core-components@0.14.9 - @backstage/plugin-catalog-react@1.12.2 - @backstage/plugin-permission-react@0.4.24 - @backstage/plugin-scaffolder-common@1.5.4 - @backstage/catalog-client@1.6.5 - @backstage/catalog-model@1.5.0 - @backstage/core-plugin-api@1.9.3 - @backstage/theme@0.5.6 - @backstage/types@1.1.1 - @backstage/version-bridge@1.0.8 ## @backstage/app-defaults@1.5.8 ### Patch Changes - Updated dependencies - @backstage/core-components@0.14.9 - @backstage/core-app-api@1.14.0 - @backstage/plugin-permission-react@0.4.24 - @backstage/core-plugin-api@1.9.3 - @backstage/theme@0.5.6 ## @backstage/backend-common@0.23.3 ### Patch Changes - 8c09c97: Deprecate legacy status check factory, handler and types. - d228862: Update default backend plugin created by the cli to use non-deprecated error handling middleware - c964a3d: Add dependencies that are needed by cross-imports from backend-defaults - b60db08: Fixing exporting of classes properly from new packages - b9ed1bb: bumped better-sqlite3 from ^9.0.0 to ^11.0.0 - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/integration@1.13.0 - @backstage/plugin-auth-node@0.4.17 - @backstage/config-loader@1.8.1 - @backstage/backend-dev-utils@0.1.4 - @backstage/cli-common@0.1.14 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/integration-aws-node@0.1.12 - @backstage/types@1.1.1 ## @backstage/backend-dynamic-feature-service@0.2.15 ### Patch Changes - b05e1e1: Service factories exported by this package have been updated to use the new service factory format that doesn't use a callback. - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-app-api@0.8.0 - @backstage/backend-common@0.23.3 - @backstage/cli-node@0.2.7 - @backstage/backend-tasks@0.5.27 - @backstage/plugin-permission-common@0.8.0 - @backstage/plugin-permission-node@0.8.0 - @backstage/plugin-scaffolder-node@0.4.8 - @backstage/plugin-events-node@0.3.8 - @backstage/plugin-auth-node@0.4.17 - @backstage/plugin-catalog-backend@1.24.0 - @backstage/plugin-app-node@0.1.22 - @backstage/plugin-events-backend@0.3.9 - @backstage/plugin-search-backend-node@1.2.27 - @backstage/config-loader@1.8.1 - @backstage/plugin-search-common@1.2.13 - @backstage/cli-common@0.1.14 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/backend-openapi-utils@0.1.15 ### Patch Changes - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/errors@1.2.4 ## @backstage/backend-tasks@0.5.27 ### Patch Changes - 083eaf9: Fix bug where ISO durations could no longer be used for schedules - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-common@0.23.3 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/backend-test-utils@0.4.4 ### Patch Changes - 2f99178: The `ServiceFactoryTest.get` method was deprecated and the `ServiceFactoryTest.getSubject` should be used instead. The `getSubject` method has the same behavior, but has a better method name to indicate that the service instance returned is the subject currently being tested. - edf5cc3: The function `isDockerDisabledForTests` is deprecated and will no longer be exported in the near future as it should only be used internally. - b05e1e1: Service factories exported by this package have been updated to use the new service factory format that doesn't use a callback. - fce7887: Added mock for the Root Health Service in `mockServices`. - 906c817: Updated `startTestBackend` and `ServiceFactoryTester` to only accept plain service factory or backend feature objects, no longer supporting the callback form. This lines up with the changes to `@backstage/backend-plugin-api` and should not require any code changes. - 95a3a0b: Rename frontend and backend `setupRequestMockHandlers` methods to `registerMswTestHooks`. - b9ed1bb: bumped better-sqlite3 from ^9.0.0 to ^11.0.0 - 98ccf00: Internal refactor of `mockServices.httpAuth.factory` to allow it to still be constructed with options, but without declaring options via `createServiceFactory`. - Updated dependencies - @backstage/backend-plugin-api@0.7.0 - @backstage/backend-defaults@0.4.0 - @backstage/backend-app-api@0.8.0 - @backstage/plugin-events-node@0.3.8 - @backstage/plugin-auth-node@0.4.17 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/cli@0.26.11 ### Patch Changes - 133464c: Added experimental support for dynamic frontend plugin builds, enabled via setting `EXPERIMENTAL_MODULE_FEDERATION` for the app build, and using the `frontend-dynamic-container` package role to create a container. Both of these are experimental and will change in the future. - e2e320c: - remove unused dependencies `winston` and `yn` from the template of backend plugins; - update `msw` to version `2.3.1` in the template of backend plugins; starting with v1 and switching later to v2 is tedious and not straight forward; it's easier to start with v2; - 0540c5a: Updated the scaffolding output message for `plugin-common` in `backstage-cli`. Now, when executing `backstage-cli new` to create a new `plugin-common` package, the output message accurately reflects the action by displaying `Creating common plugin package...` instead of the previous, less accurate `Creating backend plugin...`. - 7652db4: Only bootstrap global-agent if it's actually being used - f0c0039: Fix issue with CLI that was preventing upgrading from 1.28 - d228862: Update default backend plugin created by the cli to use non-deprecated error handling middleware - da90cce: Updated dependency `esbuild` to `^0.21.0`. - a60d73b: Fix a few minor issues with the backend template that were causing failing linting checks in the main repo. - 0510d98: Subpath export `package.json` should be of a unique name to avoid typescript resolution issues - 4baac0c: The `backendPlugin` and `backendModule` factory now includes a step for automatically adding the new backend plugin/module to the `index.ts` file of the backend. - Updated dependencies - @backstage/cli-node@0.2.7 - @backstage/integration@1.13.0 - @backstage/config-loader@1.8.1 - @backstage/catalog-model@1.5.0 - @backstage/cli-common@0.1.14 - @backstage/config@1.2.0 - @backstage/errors@1.2.4 - @backstage/eslint-plugin@0.1.8 - @backstage/release-manifests@0.0.11 - @backstage/types@1.1.1 ## @backstage/cli-node@0.2.7 ### Patch Changes - 133464c: Added internal metadata for the new experimental `frontend-dynamic-container` role. - Updated dependencies - @backstage/cli-common@0.1.14 - @backstage/errors@1.2.4 - @backstage/types@1.1.1 ## @backstage/core-compat-api@0.2.7 ### Patch Changes - Updated dependencies - @backstage/frontend-plugin-api@0.6.7 - @backstage/core-plugin-api@1.9.3 - @backstage/version-bridge@1.0.8 ## @backstage/core-components@0.14.9 ### Patch Changes - d4ffdbb: Fixed bug where `