Back to Backstage

Release v1.29.0

docs/releases/v1.29.0-changelog.md

1.51.0-next.281.9 KB
Original Source

Release v1.29.0

Upgrade Helper: https://backstage.github.io/upgrade-helper/?to=1.29.0

@backstage/[email protected]

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/[email protected]

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/[email protected]

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<FooService>(
      (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<FooService>({
      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<FooService>({
        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 toServiceRefOptions;
    • The RootServiceFactoryConfig type was renamed to RootServiceFactoryOptions;
    • The PluginServiceFactoryConfig type was renamed to PluginServiceFactoryOptions
  • Updated dependencies

@backstage/[email protected]

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

@backstage/[email protected]

Minor Changes

  • b5deed0: Add support for token for bitbucketCloud integration

Patch Changes

@backstage/[email protected]

Minor Changes

  • b9ed1bb: bumped better-sqlite3 from ^9.0.0 to ^11.0.0

Patch Changes

@backstage/[email protected]

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

@backstage/[email protected]

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

@backstage/[email protected]

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 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/[email protected]

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

@backstage/[email protected]

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

@backstage/[email protected]

Minor Changes

  • 0b52438: Serialization of the scaffolder workspace into GCP bucket

Patch Changes

@backstage/[email protected]

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/[email protected]

Minor Changes

  • 354e68c: Improve validation error display text in scaffolder
  • b5deed0: Add support for bitbucketCloud autocomplete in RepoUrlPicker

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

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/[email protected]

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/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

  • d4ffdbb: Fixed bug where <Select> component with empty string as placeholder gave an error
  • 99d672d: Modified the Select component to take in a data-testid parameter ensuring backwards compatibility with default value corresponding to previously hardcoded data-testid of "select".
  • Updated dependencies

@backstage/[email protected]

Patch Changes

  • 780d994: Added MyGroupsSidebarItem to the sidebar in the create-app template
  • f03d12a: Bumped create-app version.
  • e90a2cd: Added the Catalog logs module to the create-app template
  • 3ac2a6a: Added the Postgres Search Engine to the create-app template
  • Updated dependencies

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@techdocs/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

  • b9832ae: Fix several issues with the Atlassian auth provider (type definition, profile url, profile transformation, scopes)
  • Updated dependencies

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

  • b5deed0: Add support for autocomplete handler to provide autocomplete options for RepoUrlPicker
  • Updated dependencies

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

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/[email protected]

Patch Changes

@backstage/[email protected]

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.
  • Updated dependencies

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

  • 4e4ef2b: Move notification processor filter parsing to common package
  • Updated dependencies

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

  • 5132d28: The useGetEntities hook could result in requests to /api/catalog/entities where the headers exceed the default maximum Node.js header size of 16KB. The hook logic has been adjusted to batch the requests.

  • c307ef4: Added relationType property to EntityMembersListCard component that allows for display users related to a group via some other relationship aside from memberOf.

    Also, as a side effect, the relationsType property has been deprecated in favor of a more accurately named relationAggregation property.

  • Updated dependencies

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

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 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.

  • Updated dependencies

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

@backstage/[email protected]

Patch Changes

[email protected]

Patch Changes

[email protected]

Patch Changes

[email protected]

Patch Changes

[email protected]

Patch Changes

[email protected]

Patch Changes

[email protected]

Patch Changes

[email protected]

Patch Changes

@internal/[email protected]

Patch Changes

@internal/[email protected]

Patch Changes

@internal/[email protected]

Patch Changes