docs/releases/v1.24.0-changelog.md
4a3d434: BREAKING: For users that have migrated to the new backend system, incoming requests will now be rejected if they are not properly authenticated (e.g. with a Backstage bearer token or a backend token). Please see the Auth Service Migration tutorial for more information on how to circumvent this behavior in the short term and how to properly leverage it in the longer term.
Added service factories for the new auth, httpAuth, and userInfo services that were created as part of BEP-0003.
minimatch to v9WinstonLogger.create making some of the arguments optionalpermissionsServiceFactory to forward the AuthService to the implementation.'none' principal are rate-limited automatically.DefaultUserInfoService claims check strictercreateConfigSecretEnumerator/alpha sub-path will no longer attempt to load packages that are not Backstage backend packages.tsx dependency had a new contract for signalling dependencies, breaking watch mode. This change fixed file watches as well as enables sourcemaps.backend package.build-workspace command to fail when invoked with --alwaysYarnPack enabled in environments with limited resources.EXPERIMENTAL_LAZY_COMPILATION flag, which enables the experimental Webpack lazy compilation option in frontend builds.minimatch to v9ts-node dev dependency.replace-in-file dependency@spotify/prettier-config to ^15.0.0.
Updated dependency @spotify/eslint-config-base to ^15.0.0.
Updated dependency @spotify/eslint-config-react to ^15.0.0.
Updated dependency @spotify/eslint-config-typescript to ^15.0.0.ConfigReader now treats null values as present but explicitly undefined, meaning it will not fall back to the next level of configuration.null values read from configuration files in configuration data, rather than treating them as an absence of config.minimatch to v9ts-node dev dependency.CatalogIdentityClient constructor now also requires the discovery service to be forwarded from the plugin environment. This is part of the migration to support the new auth services, which has also been done for the createRouter function.minimatch to v9jose to v5google-auth-library to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.1bedb23: Adds a new guest provider that maps guest users to actual tokens. This also shifts the default guest login to user:development/guest to reduce overlap with your production/real data. To change that (or set it back to the old default, use the new auth.providers.guest.userEntityRef config key) like so,
auth:
providers:
guest:
userEntityRef: user:default/guest
This also adds a new property to control the ownership entity refs,
auth:
providers:
guest:
ownershipEntityRefs:
- guests
- development/custom
guest user does not exist in catalog9fdb86a: Ability to fetch the README file from a different Azure DevOps path.
Defaults to the current, Azure DevOps default behaviour (README.md in the root of the git repo); to use a different path, add the annotation dev.azure.com/readme-path
Example:
dev.azure.com/readme-path: /my-path/README.md
a9e7bd6: BREAKING The AzureDevOpsClient no longer requires identityAPi but now requires fetchApi.
Updated to use fetchApi as per ADR013
3270b1b: Azure DevOps plugin is now integrated with permission framework for its core features, see the https://github.com/backstage/backstage/blob/master/plugins/azure-devops/README.md#permission-framework for more details.
customStyles for Avatar9fdb86a: Ability to fetch the README file from a different Azure DevOps path.
Defaults to the current, Azure DevOps default behaviour (README.md in the root of the git repo); to use a different path, add the annotation dev.azure.com/readme-path
Example:
dev.azure.com/readme-path: /my-path/README.md
3270b1b: Azure DevOps plugin is now integrated with permission framework for its core features, see the https://github.com/backstage/backstage/blob/master/plugins/azure-devops/README.md#permission-framework for more details.
azureDevOps configuration section is now optional and the azureDevOps.token has been deprecated. Use integrations.azure instead, see the Azure DevOps Locations documentation for more details.9fdb86a: Ability to fetch the README file from a different Azure DevOps path.
Defaults to the current, Azure DevOps default behaviour (README.md in the root of the git repo); to use a different path, add the annotation dev.azure.com/readme-path
Example:
dev.azure.com/readme-path: /my-path/README.md
createRouter method now requires the discovery service to be forwarded from the plugin environment. This is part of the migration to support new auth services.hidden- tags from the list of tags that are returned. Updated the log endpoint to /logstream-quickstart rather than just /logstream to stream logs in the Azure Portal UI.PaginatedCatalogTable for better visibility on what you're viewing.PaginatedCatalogTable was not propagating table options to its child table./alpha plugin now correctly renders the entity 404 page.no-top-level-material-ui-4-imports ESLint rule to aid with the migration to Material UI v5CatalogIndexPageinitiallySelectedNamespaces which accepts an array of Namespaces to have selected by defaultspec.target field to be searchable in the catalog table for locations. Previously, only the spec.targets field was be searchable. This makes locations generated by providers such as the GithubEntityProvider searchable in the catalog table. #23098CatalogBuilder.create method now accepts a discovery option, which is recommended to forward from the plugin environment, as it will otherwise fall back to use the HostDiscovery implementation.minimatch to v9getEntitiesByRefsuuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.null values associated to deeply nested or long keys.9e527c9: BREAKING CHANGE: Migrates the BitbucketCloudEntityProvider to use the EventsService; fix new backend system support.
BitbucketCloudEntityProvider.fromConfig accepts events: EventsService as optional argument to its options.
With provided events, the event-based updates/refresh will be available.
However, the EventSubscriber interface was removed including its supportsEventTopics() and onEvent(params).
The event subscription happens on connect(connection) if the events is available.
Migration:
const bitbucketCloudProvider = BitbucketCloudEntityProvider.fromConfig(
env.config,
{
catalogApi: new CatalogClient({ discoveryApi: env.discovery }),
+ events: env.events,
logger: env.logger,
scheduler: env.scheduler,
tokenManager: env.tokenManager,
},
);
- env.eventBroker.subscribe(bitbucketCloudProvider);
New Backend System:
Before this change, using this module with the new backend system was broken. Now, you can add the catalog module for Bitbucket Cloud incl. event support backend. Event support will always be enabled. However, no updates/refresh will happen without receiving events.
backend.add(
import('@backstage/plugin-catalog-backend-module-bitbucket-cloud/alpha'),
);
uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.924c1ac: BREAKING- the @backstage/plugin-catalog-backend-module-unprocessed constructor is now private, and have been moved to using the static .create method instead which now requires a PermissionService and DiscoveryService.
If you're using this module in the old backend system you'll need to migrate to using the .create method and pass in the new required parameters in packages/backend/src/plugins/catalog.ts.
No changes should be required if you're using the new backend system.
- const unprocessed = new UnprocessedEntitiesModule(
- await env.database.getClient(),
- router,
- );
+ const unprocessed = UnprocessedEntitiesModule.create({
+ database: await env.database.getClient(),
+ router,
+ permissions: env.permissions,
+ discovery: env.discovery,
+ });
unprocessed.registerRoutes();
Adds the ability to delete an unprocessed entity from the refresh_state table. This change requires enabling permissions for your Backstage instance.
totalItems on useEntityList.DefaultFilters componentinitiallySelectedNamespaces which accepts an array of Namespaces to have selected by default924c1ac: BREAKING- the @backstage/plugin-catalog-backend-module-unprocessed constructor is now private, and have been moved to using the static .create method instead which now requires a PermissionService and DiscoveryService.
If you're using this module in the old backend system you'll need to migrate to using the .create method and pass in the new required parameters in packages/backend/src/plugins/catalog.ts.
No changes should be required if you're using the new backend system.
- const unprocessed = new UnprocessedEntitiesModule(
- await env.database.getClient(),
- router,
- );
+ const unprocessed = UnprocessedEntitiesModule.create({
+ database: await env.database.getClient(),
+ router,
+ permissions: env.permissions,
+ discovery: env.discovery,
+ });
unprocessed.registerRoutes();
Adds the ability to delete an unprocessed entity from the refresh_state table. This change requires enabling permissions for your Backstage instance.
no-top-level-material-ui-4-imports ESLint rule to aid with the migration to Material UI v5createRouter method now requires the discovery service to be forwarded from the plugin environment. This is part of the migration to support new auth services.devDependencies identified in Knip Reportc4bd794: BREAKING CHANGE: Migrate HttpPostIngressEventPublisher and eventsPlugin to use EventsService.
Uses the EventsService instead of EventBroker at HttpPostIngressEventPublisher,
dropping the use of EventPublisher including setEventBroker(..).
Now, HttpPostIngressEventPublisher.fromConfig requires events: EventsService as option.
const http = HttpPostIngressEventPublisher.fromConfig({
config: env.config,
+ events: env.events,
logger: env.logger,
});
http.bind(eventsRouter);
// e.g. at packages/backend/src/plugins/events.ts
- await new EventsBackend(env.logger)
- .setEventBroker(env.eventBroker)
- .addPublishers(http)
- .start();
// or for other kinds of setups
- await Promise.all(http.map(publisher => publisher.setEventBroker(eventBroker)));
eventsPlugin uses the eventsServiceRef as dependency.
Unsupported (and deprecated) extension point methods will throw an error to prevent unintended behavior.
import { eventsServiceRef } from '@backstage/plugin-events-node';
56969b6: Add new EventsService as well as eventsServiceRef for the new backend system.
Summary:
EventsService, eventsServiceRef, TestEventsServiceEventBroker, EventPublisher, EventSubscriber, DefaultEventBroker, EventsBackend,
most parts of EventsExtensionPoint (alpha),
TestEventBroker, TestEventPublisher, TestEventSubscriberAdd the eventsServiceRef as dependency to your backend plugins
or backend plugin modules.
Details:
The previous implementation using the EventsExtensionPoint was added in the early stages
of the new backend system and does not respect the plugin isolation.
This made it not compatible anymore with the new backend system.
Additionally, the previous interfaces had some room for simplification, supporting less exposure of internal concerns as well.
Hereby, this change adds a new EventsService interface as replacement for the now deprecated EventBroker.
The new interface does not require any EventPublisher or EventSubscriber interfaces anymore.
Instead, it is expected that the EventsService gets passed into publishers and subscribers,
and used internally. There is no need to expose anything of that at their own interfaces.
Most parts of EventsExtensionPoint (alpha) are deprecated as well and were not usable
(by other plugins or their modules) anyway.
The DefaultEventBroker implementation is deprecated and wraps the new DefaultEventsService implementation.
Optionally, an instance can be passed as argument to allow mixed setups to operate alongside.
Updated dependencies
132d672: BREAKING CHANGE: Migrate AwsSqsConsumingEventPublisher and its backend module to use EventsService.
Uses the EventsService instead of EventBroker at AwsSqsConsumingEventPublisher,
dropping the use of EventPublisher including setEventBroker(..).
Now, AwsSqsConsumingEventPublisher.fromConfig requires events: EventsService as option.
const sqs = AwsSqsConsumingEventPublisher.fromConfig({
config: env.config,
+ events: env.events,
logger: env.logger,
scheduler: env.scheduler,
});
+ await Promise.all(sqs.map(publisher => publisher.start()));
// e.g. at packages/backend/src/plugins/events.ts
- await new EventsBackend(env.logger)
- .setEventBroker(env.eventBroker)
- .addPublishers(sqs)
- .start();
// or for other kinds of setups
- await Promise.all(sqs.map(publisher => publisher.setEventBroker(eventBroker)));
eventsModuleAwsSqsConsumingEventPublisher uses the eventsServiceRef as dependency,
instead of eventsExtensionPoint.
eff3ca9: BREAKING CHANGE: Migrate EventRouter implementations from EventBroker to EventsService.
EventRouter uses the new EventsService instead of the EventBroker now,
causing a breaking change to its signature.
All of its extensions and implementations got adjusted accordingly.
(SubTopicEventRouter, AzureDevOpsEventRouter, BitbucketCloudEventRouter,
GerritEventRouter, GithubEventRouter, GitlabEventRouter)
Required adjustments were made to all backend modules for the new backend system,
now also making use of the eventsServiceRef instead of the eventsExtensionPoint.
Migration:
Example for implementations of SubTopicEventRouter:
import {
EventParams,
+ EventsService,
SubTopicEventRouter,
} from '@backstage/plugin-events-node';
export class GithubEventRouter extends SubTopicEventRouter {
- constructor() {
- super('github');
+ constructor(options: { events: EventsService }) {
+ super({
+ events: options.events,
+ topic: 'github',
+ });
}
+ protected getSubscriberId(): string {
+ return 'GithubEventRouter';
+ }
+
// ...
}
Example for a direct extension of EventRouter:
class MyEventRouter extends EventRouter {
- constructor(/* ... */) {
+ constructor(options: {
+ events: EventsService;
+ // ...
+ }) {
- super();
// ...
+ super({
+ events: options.events,
+ topics: topics,
+ });
}
+
+ protected getSubscriberId(): string {
+ return 'MyEventRouter';
+ }
-
- supportsEventTopics(): string[] {
- return this.topics;
- }
}
eff3ca9: BREAKING CHANGE: Migrate EventRouter implementations from EventBroker to EventsService.
EventRouter uses the new EventsService instead of the EventBroker now,
causing a breaking change to its signature.
All of its extensions and implementations got adjusted accordingly.
(SubTopicEventRouter, AzureDevOpsEventRouter, BitbucketCloudEventRouter,
GerritEventRouter, GithubEventRouter, GitlabEventRouter)
Required adjustments were made to all backend modules for the new backend system,
now also making use of the eventsServiceRef instead of the eventsExtensionPoint.
Migration:
Example for implementations of SubTopicEventRouter:
import {
EventParams,
+ EventsService,
SubTopicEventRouter,
} from '@backstage/plugin-events-node';
export class GithubEventRouter extends SubTopicEventRouter {
- constructor() {
- super('github');
+ constructor(options: { events: EventsService }) {
+ super({
+ events: options.events,
+ topic: 'github',
+ });
}
+ protected getSubscriberId(): string {
+ return 'GithubEventRouter';
+ }
+
// ...
}
Example for a direct extension of EventRouter:
class MyEventRouter extends EventRouter {
- constructor(/* ... */) {
+ constructor(options: {
+ events: EventsService;
+ // ...
+ }) {
- super();
// ...
+ super({
+ events: options.events,
+ topics: topics,
+ });
}
+
+ protected getSubscriberId(): string {
+ return 'MyEventRouter';
+ }
-
- supportsEventTopics(): string[] {
- return this.topics;
- }
}
eff3ca9: BREAKING CHANGE: Migrate EventRouter implementations from EventBroker to EventsService.
EventRouter uses the new EventsService instead of the EventBroker now,
causing a breaking change to its signature.
All of its extensions and implementations got adjusted accordingly.
(SubTopicEventRouter, AzureDevOpsEventRouter, BitbucketCloudEventRouter,
GerritEventRouter, GithubEventRouter, GitlabEventRouter)
Required adjustments were made to all backend modules for the new backend system,
now also making use of the eventsServiceRef instead of the eventsExtensionPoint.
Migration:
Example for implementations of SubTopicEventRouter:
import {
EventParams,
+ EventsService,
SubTopicEventRouter,
} from '@backstage/plugin-events-node';
export class GithubEventRouter extends SubTopicEventRouter {
- constructor() {
- super('github');
+ constructor(options: { events: EventsService }) {
+ super({
+ events: options.events,
+ topic: 'github',
+ });
}
+ protected getSubscriberId(): string {
+ return 'GithubEventRouter';
+ }
+
// ...
}
Example for a direct extension of EventRouter:
class MyEventRouter extends EventRouter {
- constructor(/* ... */) {
+ constructor(options: {
+ events: EventsService;
+ // ...
+ }) {
- super();
// ...
+ super({
+ events: options.events,
+ topics: topics,
+ });
}
+
+ protected getSubscriberId(): string {
+ return 'MyEventRouter';
+ }
-
- supportsEventTopics(): string[] {
- return this.topics;
- }
}
eff3ca9: BREAKING CHANGE: Migrate EventRouter implementations from EventBroker to EventsService.
EventRouter uses the new EventsService instead of the EventBroker now,
causing a breaking change to its signature.
All of its extensions and implementations got adjusted accordingly.
(SubTopicEventRouter, AzureDevOpsEventRouter, BitbucketCloudEventRouter,
GerritEventRouter, GithubEventRouter, GitlabEventRouter)
Required adjustments were made to all backend modules for the new backend system,
now also making use of the eventsServiceRef instead of the eventsExtensionPoint.
Migration:
Example for implementations of SubTopicEventRouter:
import {
EventParams,
+ EventsService,
SubTopicEventRouter,
} from '@backstage/plugin-events-node';
export class GithubEventRouter extends SubTopicEventRouter {
- constructor() {
- super('github');
+ constructor(options: { events: EventsService }) {
+ super({
+ events: options.events,
+ topic: 'github',
+ });
}
+ protected getSubscriberId(): string {
+ return 'GithubEventRouter';
+ }
+
// ...
}
Example for a direct extension of EventRouter:
class MyEventRouter extends EventRouter {
- constructor(/* ... */) {
+ constructor(options: {
+ events: EventsService;
+ // ...
+ }) {
- super();
// ...
+ super({
+ events: options.events,
+ topics: topics,
+ });
}
+
+ protected getSubscriberId(): string {
+ return 'MyEventRouter';
+ }
-
- supportsEventTopics(): string[] {
- return this.topics;
- }
}
eff3ca9: BREAKING CHANGE: Migrate EventRouter implementations from EventBroker to EventsService.
EventRouter uses the new EventsService instead of the EventBroker now,
causing a breaking change to its signature.
All of its extensions and implementations got adjusted accordingly.
(SubTopicEventRouter, AzureDevOpsEventRouter, BitbucketCloudEventRouter,
GerritEventRouter, GithubEventRouter, GitlabEventRouter)
Required adjustments were made to all backend modules for the new backend system,
now also making use of the eventsServiceRef instead of the eventsExtensionPoint.
Migration:
Example for implementations of SubTopicEventRouter:
import {
EventParams,
+ EventsService,
SubTopicEventRouter,
} from '@backstage/plugin-events-node';
export class GithubEventRouter extends SubTopicEventRouter {
- constructor() {
- super('github');
+ constructor(options: { events: EventsService }) {
+ super({
+ events: options.events,
+ topic: 'github',
+ });
}
+ protected getSubscriberId(): string {
+ return 'GithubEventRouter';
+ }
+
// ...
}
Example for a direct extension of EventRouter:
class MyEventRouter extends EventRouter {
- constructor(/* ... */) {
+ constructor(options: {
+ events: EventsService;
+ // ...
+ }) {
- super();
// ...
+ super({
+ events: options.events,
+ topics: topics,
+ });
}
+
+ protected getSubscriberId(): string {
+ return 'MyEventRouter';
+ }
-
- supportsEventTopics(): string[] {
- return this.topics;
- }
}
eff3ca9: BREAKING CHANGE: Migrate EventRouter implementations from EventBroker to EventsService.
EventRouter uses the new EventsService instead of the EventBroker now,
causing a breaking change to its signature.
All of its extensions and implementations got adjusted accordingly.
(SubTopicEventRouter, AzureDevOpsEventRouter, BitbucketCloudEventRouter,
GerritEventRouter, GithubEventRouter, GitlabEventRouter)
Required adjustments were made to all backend modules for the new backend system,
now also making use of the eventsServiceRef instead of the eventsExtensionPoint.
Migration:
Example for implementations of SubTopicEventRouter:
import {
EventParams,
+ EventsService,
SubTopicEventRouter,
} from '@backstage/plugin-events-node';
export class GithubEventRouter extends SubTopicEventRouter {
- constructor() {
- super('github');
+ constructor(options: { events: EventsService }) {
+ super({
+ events: options.events,
+ topic: 'github',
+ });
}
+ protected getSubscriberId(): string {
+ return 'GithubEventRouter';
+ }
+
// ...
}
Example for a direct extension of EventRouter:
class MyEventRouter extends EventRouter {
- constructor(/* ... */) {
+ constructor(options: {
+ events: EventsService;
+ // ...
+ }) {
- super();
// ...
+ super({
+ events: options.events,
+ topics: topics,
+ });
}
+
+ protected getSubscriberId(): string {
+ return 'MyEventRouter';
+ }
-
- supportsEventTopics(): string[] {
- return this.topics;
- }
}
56969b6: Add new EventsService as well as eventsServiceRef for the new backend system.
Summary:
EventsService, eventsServiceRef, TestEventsServiceEventBroker, EventPublisher, EventSubscriber, DefaultEventBroker, EventsBackend,
most parts of EventsExtensionPoint (alpha),
TestEventBroker, TestEventPublisher, TestEventSubscriberAdd the eventsServiceRef as dependency to your backend plugins
or backend plugin modules.
Details:
The previous implementation using the EventsExtensionPoint was added in the early stages
of the new backend system and does not respect the plugin isolation.
This made it not compatible anymore with the new backend system.
Additionally, the previous interfaces had some room for simplification, supporting less exposure of internal concerns as well.
Hereby, this change adds a new EventsService interface as replacement for the now deprecated EventBroker.
The new interface does not require any EventPublisher or EventSubscriber interfaces anymore.
Instead, it is expected that the EventsService gets passed into publishers and subscribers,
and used internally. There is no need to expose anything of that at their own interfaces.
Most parts of EventsExtensionPoint (alpha) are deprecated as well and were not usable
(by other plugins or their modules) anyway.
The DefaultEventBroker implementation is deprecated and wraps the new DefaultEventsService implementation.
Optionally, an instance can be passed as argument to allow mixed setups to operate alongside.
Updated dependencies
@rjsf/utils to 5.17.1.
Updated dependency @rjsf/core to 5.17.1.
Updated dependency @rjsf/material-ui to 5.17.1.
Updated dependency @rjsf/validator-ajv8 to 5.17.1.no-top-level-material-ui-4-imports ESLint rule to aid with the migration to Material UI v555191cc: BREAKING: Both createRouter and DefaultJenkinsInfoProvider.fromConfig now require the discovery service to be forwarded from the plugin environment. This is part of the migration to support new auth services.
The JenkinsInfoProvider interface has been updated to receive credentials of the type BackstageCredentials rather than a token.
KubernetesBuilder.createBuilder method now requires the discovery service to be forwarded from the plugin environment. This is part of the migration to support new auth services.serviceAccount strategy is used and no serviceAccountToken has been provided, the proxy endpoint assumes backstage is running on Kubernetes and gets the URL and CA from the Pod instance.sort/sortOrder to orderField and created_after to createdAfter to unify with other plugins.sort/sortOrder to orderField and created_after to createdAfter to unify with other plugins.EventsService and makes it mandatoryba14c0e: Support for broadcast notifications
dff7a7e: All notifications can be marked and filtered by severity critical, high, normal or low, the default is 'normal'
4467036: Allow unauthenticated access to health check endpoint.
6c1547a: BREAKING Type definition added to signal recipients
Update to use {type: 'broadcast'} instead null and {type: 'user', entityRef: ''}
instead string entity references
75f2d84: the user can newly mark notifications as "Saved" for their better visibility in the future
a790a3d: Move notification origin resolving to backend with new auth
5d9c5ba: The Notifications can be newly filtered based on the Created Date.
0fb419b: Updated dependency uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.
84af361: Migrated to using the new auth services.
6d84ee6: Changed to use the refactored signal service naming
Updated dependencies
uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.@rjsf/utils to 5.17.1.
Updated dependency @rjsf/core to 5.17.1.
Updated dependency @rjsf/material-ui to 5.17.1.
Updated dependency @rjsf/validator-ajv8 to 5.17.1.no-top-level-material-ui-4-imports ESLint rule to aid with the migration to Material UI v5ctx.logStreamPermissionsService.TaskSpec984abfa: Fixing the lost of the initial state after a task recovery.
703ebc9: Fix support for unauthenticated requests to create scaffolder tasks
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
0fb419b: Updated dependency uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.
bbd1fe1: Made "checkpoint" on scaffolder action context non-optional
Updated dependencies
iid as issuesIid from the gitlab:issues:create actionf44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
logStream in the ActionContext. Please move to using ctx.logger.x instead.f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
dist/index.cjs.js instead of dist/index.esm.js.6c1547a: BREAKING Type definition added to signal recipients
Update to use {type: 'broadcast'} instead null and {type: 'user', entityRef: ''}
instead string entity references
daf85dc: BREAKING CHANGE: Migrates signals to use the EventsService and makes it mandatory
uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.6c1547a: BREAKING Type definition added to signal recipients
Update to use {type: 'broadcast'} instead null and {type: 'user', entityRef: ''}
instead string entity references
daf85dc: BREAKING CHANGE: Migrates signals to use the EventsService and makes it mandatory
SignalService to SignalsService and signalService to signalServiceRef
to follow the naming scheme of services and their referencesuuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.FactRetrieverContext type now contains an additional auth field.README.md to reflect correct timeline item order.TechdocsGeneratorExtensionPoint to allow adding a custom generatorTechdocsGeneratorExtensionPoint to allow adding a custom generator7422430: Resolve the basePath before constructing the target path
999224f: Bump dependency minimatch to v9
e0b997c: Fix issue where resolveSafeChildPath path would incorrectly resolve when operating on a symlink
9802004: Added the UserInfoApi as both an optional input and as an output for createLegacyAuthAdapters
2af5354: Bump dependency jose to v5
ff40ada: Updated dependency mysql2 to ^3.0.0.
0fb419b: Updated dependency uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.
568881f: Updated dependency yauzl to ^3.0.0.
4a3d434: Added a createLegacyAuthAdapters function that can be used as a compatibility adapter for backend plugins who want to start using the new auth and httpAuth services that were created as part of BEP-0003.
See the Auth Service Migration tutorial for more information on the usage of this adapter.
Updated dependencies
events: EventsService to LegacyPluginEnvironment.json-schema-to-ts to ^3.0.0.4a3d434: Added the new auth, httpAuth, and userInfo services that were created as part of BEP-0003 to the coreServices.
At the same time, the httpRouter service gained a new addAuthPolicy method that lets your plugin declare exemptions to the default auth policy - for example if you want to allow unauthenticated or cookie-based access to some subset of your feature routes.
If you have migrated to the new backend system, please see the Auth Service Migration tutorial for more information on how to move toward using these services.
0502d82: Updated the PermissionsService methods to accept BackstageCredentials through options.
Updated dependencies
uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.4a3d434: Added support for the new auth and httpAuth services that were created as part of BEP-0003. These services will be present by default in test apps, and you can access mocked versions of their features under mockServices.auth and mockServices.httpAuth if you want to inspect or replace their behaviors.
There is also a new mockCredentials that you can use for acquiring mocks of the various types of credentials that are used in the new system.
9802004: Added mockServices.userInfo, which now also automatically is made available in test backends.
fd61d39: Updated dependency testcontainers to ^10.0.0.
ff40ada: Updated dependency mysql2 to ^3.0.0.
0fb419b: Updated dependency uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.
Updated dependencies
getEntitiesByRefsts-node dev dependency.Link component has been removed for now, in order to avoid broad breakages of tests in existing projects where the component is tested without being wrapped in an API provider.withStyles so it can be customised easierreact-idle-timer to 5.7.2.SignInPage's 'guest' provider now supports the @backstage/plugin-auth-backend-module-guest-provider package to generate tokens. It will continue to use the old frontend-only auth as a fallback.customStyles prop for the Avatar component in favour of the classes prop.ts-node dev dependency.minimatch to v9loadingComponent parameter to createApp()microsoftAuthApi scopes for Azure DevOps to be fully qualified.ts-node dev dependency.defaultTypography to make adjusting these values in a custom theme easierno-top-level-material-ui-4-imports in the ADR plugin to migrate the Material UI imports.marked to ^12.0.0.DefaultAdrCollatorFactory to support new auth services.AppIcon component in the navigation item extension.graphiql to 3.1.1.@asyncapi/react-component to 1.3.1.jose to v5providerInfo not being set properly for some proxy providers, by making providerInfo an explicit optional return from authenticategoogle-auth-library to ^9.0.0.providerInfo not being set properly for some proxy providers, by making providerInfo an explicit optional return from authenticategoogle-auth-library to ^9.0.0.jose to v5jose to v5providerInfo not being set properly for some proxy providers, by making providerInfo an explicit optional return from authenticatejose to v5jose to v5jose to v5getBearerTokenFromAuthorizationHeader function, which is being replaced by the new HttpAuthService.jose to v5uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.providerInfo not being set properly for some proxy providers, by making providerInfo an explicit optional return from authenticateno-top-level-material-ui-4-imports to aid with the migration to Material UI v5.customStyles for Avatarno-top-level-material-ui-4-import ESLint rule to the Bitrise plugin to aid with the migration to Material UI v5.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.a936a8f: Migrated the GithubLocationAnalyzer to support new auth services.
999224f: Bump dependency minimatch to v9
2eb0da3: Support EventsService and events with the new backend system (through EventsService) for GithubOrgEntityProvider and GithubMultiOrgEntityProvider.
New/Current Backend System:
The events support for the provider will be enabled always, making it ready to consume events from its subscribed topics. In order to receive events and make use of this feature, you still need to set up receiving events from the event source as before.
Legacy Backend System:
You can pass the EventsService instance to the factory method as one of its options:
// packages/backend/src/plugins/catalog.ts
const githubOrgProvider = GithubOrgEntityProvider.fromConfig(env.config, {
events: env.events,
// ...
});
- env.eventBroker.subscribe(githubOrgProvider);
// packages/backend/src/plugins/catalog.ts
const githubMultiOrgProvider = GithubMultiOrgEntityProvider.fromConfig(env.config, {
events: env.events,
// ...
});
- env.eventBroker.subscribe(githubMultiOrgProvider);
bcf55d5: Support EventsService and events with the new backend system (through EventsService).
New/Current Backend System:
The events support for the provider will be enabled always, making it ready to consume events from its subscribed topics. In order to receive events and make use of this feature, you still need to set up receiving events from the event source as before.
Legacy Backend System:
You can pass the EventsService instance to the factory method as one of its options:
// packages/backend/src/plugins/catalog.ts
const githubProvider = GithubEntityProvider.fromConfig(env.config, {
+ events: env.events,
logger: env.logger,
scheduler: env.scheduler,
});
- env.eventBroker.subscribe(githubProvider);
0fb419b: Updated dependency uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.
9eab52a: Add location analyzer when installing the module
Updated dependencies
2eb0da3: Support EventsService and events with the new backend system (through EventsService) for GithubOrgEntityProvider and GithubMultiOrgEntityProvider.
New/Current Backend System:
The events support for the provider will be enabled always, making it ready to consume events from its subscribed topics. In order to receive events and make use of this feature, you still need to set up receiving events from the event source as before.
Legacy Backend System:
You can pass the EventsService instance to the factory method as one of its options:
// packages/backend/src/plugins/catalog.ts
const githubOrgProvider = GithubOrgEntityProvider.fromConfig(env.config, {
events: env.events,
// ...
});
- env.eventBroker.subscribe(githubOrgProvider);
// packages/backend/src/plugins/catalog.ts
const githubMultiOrgProvider = GithubMultiOrgEntityProvider.fromConfig(env.config, {
events: env.events,
// ...
});
- env.eventBroker.subscribe(githubMultiOrgProvider);
Updated dependencies
uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.visibility to group entity annotations.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.no-top-level-material-ui-4-imports ESLint rule to aid with the migration to Material UI v5no-top-level-material-ui-4-imports ESLint rule to aid with the migration to Material UI v5924c1ac: BREAKING- the @backstage/plugin-catalog-backend-module-unprocessed constructor is now private, and have been moved to using the static .create method instead which now requires a PermissionService and DiscoveryService.
If you're using this module in the old backend system you'll need to migrate to using the .create method and pass in the new required parameters in packages/backend/src/plugins/catalog.ts.
No changes should be required if you're using the new backend system.
- const unprocessed = new UnprocessedEntitiesModule(
- await env.database.getClient(),
- router,
- );
+ const unprocessed = UnprocessedEntitiesModule.create({
+ database: await env.database.getClient(),
+ router,
+ permissions: env.permissions,
+ discovery: env.discovery,
+ });
unprocessed.registerRoutes();
Adds the ability to delete an unprocessed entity from the refresh_state table. This change requires enabling permissions for your Backstage instance.
Updated dependencies
p-limit dependency version to v3plugins/circleci.no-top-level-material-ui-4-imports in the Code-Climate plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the Code-Coverage plugin to migrate the Material UI imports.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.no-top-level-material-ui-4-imports in the Codescene plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports ESLint rule to aid with the migration to Material UI v5yup to ^1.0.0.fetchApi as per ADR013devDependencies identified in Knip ReportFeedbackResponseTable.tsx when there is no response, and fix typo in Feedback Dialog Box.56969b6: Add new EventsService as well as eventsServiceRef for the new backend system.
Summary:
EventsService, eventsServiceRef, TestEventsServiceEventBroker, EventPublisher, EventSubscriber, DefaultEventBroker, EventsBackend,
most parts of EventsExtensionPoint (alpha),
TestEventBroker, TestEventPublisher, TestEventSubscriberAdd the eventsServiceRef as dependency to your backend plugins
or backend plugin modules.
Details:
The previous implementation using the EventsExtensionPoint was added in the early stages
of the new backend system and does not respect the plugin isolation.
This made it not compatible anymore with the new backend system.
Additionally, the previous interfaces had some room for simplification, supporting less exposure of internal concerns as well.
Hereby, this change adds a new EventsService interface as replacement for the now deprecated EventBroker.
The new interface does not require any EventPublisher or EventSubscriber interfaces anymore.
Instead, it is expected that the EventsService gets passed into publishers and subscribers,
and used internally. There is no need to expose anything of that at their own interfaces.
Most parts of EventsExtensionPoint (alpha) are deprecated as well and were not usable
(by other plugins or their modules) anyway.
The DefaultEventBroker implementation is deprecated and wraps the new DefaultEventsService implementation.
Optionally, an instance can be passed as argument to allow mixed setups to operate alongside.
Updated dependencies
no-top-level-material-ui-4-imports in the gcalendar plugin to migrate the Material UI imports.CardHeader component in the github-pull-requests-board plugin will show the status for the PRp-limit dependency version to v3@rjsf/utils to 5.17.1.
Updated dependency @rjsf/core to 5.17.1.
Updated dependency @rjsf/material-ui to 5.17.1.
Updated dependency @rjsf/validator-ajv8 to 5.17.1.no-top-level-material-ui-4-imports in the Jenkins plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the Kafka plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the Lighthouse plugin to migrate the Material UI imports.createScheduler function now requires the discovery service to be forwarded from the plugin environment. This is part of the migration to support new auth services.fetchApi as per ADR013luxon to ^3.0.0.dependencies and devDependencies identified in Knip Reportluxon to ^3.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.dependencies and devDependencies identified in Knip ReportcustomStyles for AvatarrelationsType argument to MembersListCard.
This can be used to display an aggregated user list for groups by default.OwnershipCard component failed to scroll properly when used alongside react-grid-layout.4467036: Allow unauthenticated access to health check endpoint.
9802004: Migrated to use the new auth services introduced in BEP-0003.
The createRouter function now accepts auth, httpAuth and userInfo options. Theses are used internally to support the new backend system, and can be ignored.
Updated dependencies
token option of the PermissionEvaluator methods is now deprecated. The options that only apply to backend implementations have been moved to PermissionsService from @backstage/backend-plugin-api instead.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.ServerPermissionClient has been migrated to implement the PermissionsService interface, now accepting the new BackstageCredentials object in addition to the token option, which is now deprecated. It now also optionally depends on the new AuthService.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.yup to ^1.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.2bd1410: Removed unused dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
2bd1410: Removed unused dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
2bd1410: Removed unused dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
2bd1410: Removed unused dependencies
0e48aaf: Added an option to specify a commit author by adding gitAuthorName and gitAuthorEmail options to the publish:bitbucketServer:pull-request action
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
e9663a9: Move away from using ctx.logStream
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
9f19476: Updated README
Updated dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
35fe005: Export getOctokitOptions for easy re-use of Octokit configuration handling
1753898: Updated dependency octokit-plugin-create-pull-request to ^5.0.0.
Updated dependencies
e9663a9: Move away from using ctx.logStream
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
f44589d: Introduced createMockActionContext to unify the way of creating scaffolder mock context.
It will help to maintain tests in a long run during structural changes of action context.
Updated dependencies
flatted to 3.3.1.@rjsf/utils to 5.17.1.
Updated dependency @rjsf/core to 5.17.1.
Updated dependency @rjsf/material-ui to 5.17.1.
Updated dependency @rjsf/validator-ajv8 to 5.17.1.no-top-level-material-ui-4-imports in the search plugin to migrate the Material UI imports.auth services, it now accepts an optional discovery service option to get credentials for the permission service.QueryTranslator, QueryRequestOptions and SearchEngine from the @backstage/plugin-search-backend-node.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.QueryTranslator, QueryRequestOptions and SearchEngine from the @backstage/plugin-search-backend-node.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.QueryTranslator, QueryRequestOptions and SearchEngine types. These new types were extracted from the @backstage/plugin-search-common package and the token property was deprecated in favor of the a new credentials one.QueryTranslator, QueryRequestOptions and SearchEngine in favor of the types exported from @backstage/plugin-search-backend-node.no-top-level-material-ui-4-imports in the sentry plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the shortcuts plugin to migrate the Material UI imports.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.no-top-level-material-ui-4-imports in the signals plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the sonarqube plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the splunk-on-call plugin to migrate the Material UI imports.StackOverflowSearchResultListItemno-top-level-material-ui-4-imports in the stack-overflow plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the stackstorm plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the tech-insights plugin to migrate the Material UI imports.onlyFailed prop to ScorecardsCard, and isFailed to each check type.uuid to ^9.0.0.
Updated dependency @types/uuid to ^9.0.0.AuthService.no-top-level-material-ui-4-imports to aid with the migration to Material UI v5.no-top-level-material-ui-4-imports in the user-settings plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the vault plugin to migrate the Material UI imports.no-top-level-material-ui-4-imports in the xcmetrics plugin to migrate the Material UI imports.