docs/releases/v1.10.0-changelog.md
scaffolderApiRef for the @backstage/plugin-scaffolder to this package for easy re-use across things that want to interact with the scaffolder.02b119ff93: BREAKING: The httpRouterFactory now accepts a getPath option rather than indexPlugin. To set up custom index path, configure the new rootHttpRouterFactory with a custom indexPath instead.
Added an implementation for the new rootHttpRouterServiceRef.
ServiceFactoryOrFunction type.@backstage/backend-common, and replaced the middleware option with a configure callback option.createServiceFactory from @backstage/backend-plugin-api.createSpecializedBackend function will now throw an error if duplicate service implementations are provided.plugin as the label for the plugin ID, rather than pluginId.DefaultRootHttpRouter. It only implements the routing layer and needs to be exposed via an HTTP server similar to the built-in setup in the rootHttpRouterFactory.@backstage/backend-common. There is a now WinstonLogger which implements the RootLoggerService through Winston with accompanying utilities. For configuration the loadBackendConfig function has been moved over, but it now instead returns an object with a config property.loggerToWinstonLogger to @backstage/backend-common.RootLifecycleService.5e2cebe9a3: BREAKING: Removed deprecated read method from the UrlReader interface. All implementations should use the readUrl method instead.
Migrated UrlReader and related types to backend/backend-plugin-api, types remain re-exported from backend-common for now.
legacyPlugin and the lower level makeLegacyPlugin wrappers that convert legacy plugins to the new backend system. This will be used to ease the future migration to the new backend system, but we discourage use of it for now.loggerToWinstonLogger, which was moved from @backstage/backend-plugin-api.Logger type from winston with LoggerService from @backstage/backend-plugin-api. This is not a breaking change as the LoggerService is a subset of the Logger interface.TokenManagerService, CacheService and DatabaseService into backend-plugin-api.PluginEndpointDiscovery type from backend-common to backend-plugin-api.createRootLogger to make it possible to override the default service log label.@backstage/backend-app-api for the implementation of createServiceBuilder.better-sqlite3 to ^8.0.0.loggerToWinstonLogger to @backstage/backend-common.6cfd4d7073: Added RootLifecycleService and rootLifecycleServiceRef, as well as added a logger option to the existing LifecycleServiceShutdownHook.
ecc6bfe4c9: Added ServiceFactoryOrFunction type, for use when either a ServiceFactory or () => ServiceFactory can be used.
5b7bcd3c5e: Added createSharedEnvironment for creating a shared environment containing commonly used services in a split backend setup of the backend.
02b119ff93: Added a new rootHttpRouterServiceRef and RootHttpRouterService interface.
5e2cebe9a3: Migrate UrlReader into this package to gradually remove the dependency on backend-common.
843a0a158c: Added new core identity service.
5437fe488f: Migrated types related to TokenManagerService, CacheService and DatabaseService into backend-plugin-api.
6f02d23b01: Moved PluginEndpointDiscovery type from backend-common to backend-plugin-api.
483e907eaf: The createServiceFactory function has been updated to no longer use a duplicate callback pattern for plugin scoped services. The outer callback is now replaced by an optional createRootContext method. This change was made in order to support TypeScript 4.9, but it also simplifies the API surface a bit, especially for plugin scoped service factories that don't need to create a root context. In addition, the factory and root context functions can now be synchronous.
A factory that previously would have looked like this:
createServiceFactory({
service: coreServices.cache,
deps: {
config: coreServices.config,
plugin: coreServices.pluginMetadata,
},
async factory({ config }) {
const cacheManager = CacheManager.fromConfig(config);
return async ({ plugin }) => {
return cacheManager.forPlugin(plugin.getId());
};
},
});
Now instead looks like this:
createServiceFactory({
service: coreServices.cache,
deps: {
config: coreServices.config,
plugin: coreServices.pluginMetadata,
},
async createRootContext({ config }) {
return CacheManager.fromConfig(config);
},
async factory({ plugin }, manager) {
return manager.forPlugin(plugin.getId());
},
});
Although in many cases the createRootContext isn't needed, for example:
createServiceFactory({
service: coreServices.logger,
deps: {
rootLogger: coreServices.rootLogger,
plugin: coreServices.pluginMetadata,
},
factory({ rootLogger, plugin }) {
return rootLogger.child({ plugin: plugin.getId() });
},
});
16054afdec: Documented coreServices an all of its members.
0e63aab311: Updated the RootLoggerService to also have an addRedactions method.
62b04bb865: Updates all create* methods to simplify their type definitions and ensure they all have configuration interfaces.
Updated dependencies
order directive on getEntitiesby-refs endpoint to receive fields through the POST body as well as through query parameters.--preview-app-bundle-path and --preview-app-port options to the serve command enabling previewing with apps other than the provided onee4469d0ec1: The ADR plugin can now work with sites other than GitHub. Expanded the ADR backend plugin to provide endpoints to facilitate this.
BREAKING The ADR plugin now requires the @backstage/plugin-adr-backend plugin to be installed by using the createRouter method to add into your backend. You read more in the install instructions
by-refs endpoint to receive fields through the POST body as well as through query parameters.better-sqlite3 to ^8.0.0.loggerToWinstonLogger to @backstage/backend-common.e4c0240445: Added catalogFilter field to OwnerPicker and EntityPicker components to support filtering options by any field(s) of an entity.
The allowedKinds field has been deprecated. Use catalogFilter instead. This field allows users to specify a filter on the shape of EntityFilterQuery, which can be passed into the CatalogClient. See examples below:
Get all entities of kind Group
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
Get entities of kind Group and spec.type team
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
spec.type: team
b4955ed7b9: - Deprecation - Deprecated the following exports, please import them directly from @backstage/plugin-scaffolder-react instead
createScaffolderFieldExtension
ScaffolderFieldExtensions
useTemplateSecrets
scaffolderApiRef
ScaffolderApi
ScaffolderUseTemplateSecrets
TemplateParameterSchema
CustomFieldExtensionSchema
CustomFieldValidator
FieldExtensionOptions
FieldExtensionComponentProps
FieldExtensionComponent
ListActionsResponse
LogEvent
ScaffolderDryRunOptions
ScaffolderDryRunResponse
ScaffolderGetIntegrationsListOptions
ScaffolderGetIntegrationsListResponse
ScaffolderOutputlink
ScaffolderScaffoldOptions
ScaffolderScaffoldResponse
ScaffolderStreamLogsOptions
ScaffolderTask
ScaffolderTaskOutput
ScaffolderTaskStatus
Deprecation - Deprecated the rootRouteRef export, this should now be used from scaffolderPlugin.routes.root
The following /alpha types have removed from this package and moved to the @backstage/plugin-scaffolder-react/alpha package
createNextScaffolderFieldExtension
FormProps
NextCustomFieldValidator
NextFieldExtensionComponentProps
NextFieldExtensionOptions
@rjsf/validator-ajv8 to @rjsf/validator-v6MarkdownContent component. This will allow the page to show richer content to describe scaffolder actions.onChange handler toStepper componentuse-immer to ^0.8.0.a6808b67a7: Implement Required approving review count, Restrictions, and Required commit signing support for publish:github action
04a2048fb8: Allow custom repository roles to be configured on github repos
c0ad7341f7: Add Scaffolder action catalog:fetch to get entity by entity reference from catalog
b44eb68bcb: This change adds changes to provide examples alongside scaffolder task actions.
The createTemplateAction function now takes a list of examples e.g.
const actionExamples = [
{
description: 'Example 1',
example: yaml.stringify({
steps: [
{
action: 'test:action',
id: 'test',
input: {
input1: 'value',
},
},
],
}),
},
];
export function createTestAction() {
return createTemplateAction({
id: 'test:action',
examples: [
{
description: 'Example 1',
examples: actionExamples
}
],
...,
});
These examples can be retrieved later from the api.
curl http://localhost:7007/api/scaffolder/v2/actions
[
{
"id": "test:action",
"examples": [
{
"description": "Example 1",
"example": "steps:\n - action: test:action\n id: test\n input:\n input1: value\n"
}
],
"schema": {
"input": {
"type": "object",
"properties": {
"input1": {
"title": "Input 1",
"type": "string"
}
}
}
}
}
]
72d6b9f4e2: Added ability to override the commit message and author details for the publish:bitbucketServer action.
a69664faee: Add Github repository support for squash merge commit title and message options
2fadff2a25: Change scaffolder task actions to include markdown to demonstrate the new ActionsPage markdown feature.
ecbec4ec4c: Internal refactor to match new options pattern in the experimental backend system.
e4c0240445: Added catalogFilter field to OwnerPicker and EntityPicker components to support filtering options by any field(s) of an entity.
The allowedKinds field has been deprecated. Use catalogFilter instead. This field allows users to specify a filter on the shape of EntityFilterQuery, which can be passed into the CatalogClient. See examples below:
Get all entities of kind Group
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
Get entities of kind Group and spec.type team
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
spec.type: team
8e06f3cf00: Switched imports of loggerToWinstonLogger to @backstage/backend-common.
Updated dependencies
6d9a93def8: Allow customizing empty state component through noResultsComponent property.
Example:
<SearchResult noResultsComponent={<>No results were found</>}>
{({ results }) => (
<List>
{results.map(({ type, document }) => {
switch (type) {
case 'custom-result-item':
return (
<CustomResultListItem
key={document.location}
result={document}
/>
);
default:
return (
<DefaultResultListItem
key={document.location}
result={document}
/>
);
}
})}
</List>
)}
</SearchResult>
rootLifecycleServiceRef.ServiceFactoryOrFunction type.createBackend, which can be created using createSharedEnvironment from @backstage/backend-plugin-api.TaskScheduler.forPlugin method.rootLifecycleServiceRef.startTestBackend setup now includes default implementations for all core services.createServiceFactory from @backstage/backend-plugin-api.startTestBackend now has default implementations of all core services. It now also returns a TestBackend instance, which provides access to the underlying server that can be used with testing libraries such as supertest.better-sqlite3 to ^8.0.0.ThemeProvider from the ExampleComponent test in the plugin template.yarn.lock when using Yarn 3.versions:bump and versions:check.type-festrepo test, repo lint, and repo build commands will now analyze yarn.lock for dependency changes when searching for changed packages. This allows you to use the --since <ref> flag even if you have yarn.lock changes."true" 1 on and y will become true when using getBoolean and the opposites false.
This happens particularly when such parameters are used with environmental substitution as environment variables are always strings.f834622f56: Bumped create-app version.
724b55689b: Avoid potential temporary directory conflict.
a2a70504e3: Remove deprecated create-plugin script from the default-app template's package.json.hbs.
Also, update the documentation to not mention the create-plugin script and instead mention
the new script.
016a52c28f: Bumped the minimum version of better-sqlite3. You can make the following change to your packages/backend/package.json to keep your instance of Backstage updated.
- "better-sqlite3": "^7.5.0",
+ "better-sqlite3": "^8.0.0",
Updated dependencies
peerDependencies because we need to always use same version as in api-extractor@microsoft/tsdoc-config to 0.16.2.createRouter method which uses UrlReaders to make requests to your SCM. Please make sure you read the install instructions@apollo/explorer to ^2.0.0.loggerToWinstonLogger to @backstage/backend-common.ProjectCard to indicate more content.isBazaarAvailable helper to be used with the EntitySwitch.ts-morph to ^17.0.0.EntityLabelsCard to show the labels for an entity.loggerToWinstonLogger to @backstage/backend-common.loggerToWinstonLogger to @backstage/backend-common.loggerToWinstonLogger to @backstage/backend-common.loggerToWinstonLogger to @backstage/backend-common.loggerToWinstonLogger to @backstage/backend-common.427d8f4411: Added support for event based updates in the GithubOrgEntityProvider!
Based on webhook events from GitHub the affected User or Group entity will be refreshed.
This includes adding new entities, refreshing existing ones, and removing obsolete ones.
Please find more information at https://backstage.io/docs/integrations/github/org#installation-with-events-support
f8d91a8810: fixed catalogPath option to properly glob match on received GitHub events.
9f2b786fc9: Provide context for logged errors.
8e06f3cf00: Switched imports of loggerToWinstonLogger to @backstage/backend-common.
Updated dependencies
loggerToWinstonLogger to @backstage/backend-common.loggerToWinstonLogger to @backstage/backend-common.loggerToWinstonLogger to @backstage/backend-common.CatalogGraphCard to the CatalogGraphPage no longer includes an explicit maxDepth parameter, letting the CatalogGraphPage choose the initial maxDepth instead.createServiceFactory from @backstage/backend-plugin-api.EntityTagPicker that filtered on unavailable tags for the selected kind.EntityPeekAheadPopover component. It shows more details about the associated entity. See the playbook here https://backstage.io/storybook/?path=/story/catalog-entitypeekaheadpopover--defaultRouterOptions now accepts an optional catalogApi argument, allowing custom catalog clients to be used. This is leveraged in the local standalone development runner to pass in a catalog client that returns fake data.onEvent method of subscribers. The returned promise from publish method will also not resolve until all subscribers have handled the event.loggerToWinstonLogger to @backstage/backend-common.loggerToWinstonLogger to @backstage/backend-common.README.md examplesGroupsDiagram not grown on screen on its own.msw to ^0.49.0README.md examplesswr to ^2.0.0.swr to ^2.0.0.e4c0240445: Added catalogFilter field to OwnerPicker and EntityPicker components to support filtering options by any field(s) of an entity.
The allowedKinds field has been deprecated. Use catalogFilter instead. This field allows users to specify a filter on the shape of EntityFilterQuery, which can be passed into the CatalogClient. See examples below:
Get all entities of kind Group
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
Get entities of kind Group and spec.type team
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
spec.type: team
Updated dependencies
268b8634f9: handle skipActiveRecord rails new argument
2fadff2a25: Change scaffolder task actions to include markdown to demonstrate the new ActionsPage markdown feature.
e4c0240445: Added catalogFilter field to OwnerPicker and EntityPicker components to support filtering options by any field(s) of an entity.
The allowedKinds field has been deprecated. Use catalogFilter instead. This field allows users to specify a filter on the shape of EntityFilterQuery, which can be passed into the CatalogClient. See examples below:
Get all entities of kind Group
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
Get entities of kind Group and spec.type team
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
spec.type: team
Updated dependencies
e4c0240445: Added catalogFilter field to OwnerPicker and EntityPicker components to support filtering options by any field(s) of an entity.
The allowedKinds field has been deprecated. Use catalogFilter instead. This field allows users to specify a filter on the shape of EntityFilterQuery, which can be passed into the CatalogClient. See examples below:
Get all entities of kind Group
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
Get entities of kind Group and spec.type team
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
spec.type: team
Updated dependencies
ElasticSearchSearchEngine.newClient() method.persistenceContext on TechInsights construction to enable integrators to provide their own database implementations for fact handling.jss to ~10.9.0.jss to ~10.9.0.UserSettingsIdentityCard to have clickable entity refs