Merge branch 'backstage:master' into milliehartnt123-create-ui-doc

This commit is contained in:
milliehartnt123
2026-01-20 12:27:24 -05:00
committed by GitHub
739 changed files with 22159 additions and 7711 deletions
@@ -14,7 +14,7 @@ system, see [migrating](./08-migrating.md).
This section covers how to set up and customize your own Backstage backend. It covers some aspects of how backend instances fit into the larger system, but for a more in-depth explanation of the role of backends in the backend system, see [the architecture section](../architecture/02-backends.md).
# Overview
## Overview
A minimal Backstage backend is very lightweight. It is a single package with a `package.json` file and a `src/index.ts` file, not counting surrounding tooling and documentation. The package is typically placed within the `packages/backend` folder of a Backstage monorepo, but that is up to you. The backend package is part of any project created with `@backstage/create-app`, so you typically do not need to create it yourself.
+4 -4
View File
@@ -53,7 +53,7 @@ Once the host build is complete, we are ready to build our image. The following
`Dockerfile` is included when creating a new app with `@backstage/create-app`:
```dockerfile
FROM node:22-bookworm-slim
FROM node:24-trixie-slim
# Set Python interpreter for `node-gyp` to use
ENV PYTHON=/usr/bin/python3
@@ -178,7 +178,7 @@ the repo root:
```dockerfile
# Stage 1 - Create yarn install skeleton layer
FROM node:22-bookworm-slim AS packages
FROM node:24-trixie-slim AS packages
WORKDIR /app
COPY backstage.json package.json yarn.lock ./
@@ -193,7 +193,7 @@ COPY plugins plugins
RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -exec rm -rf {} \+
# Stage 2 - Install dependencies and build packages
FROM node:22-bookworm-slim AS build
FROM node:24-trixie-slim AS build
# Set Python interpreter for `node-gyp` to use
ENV PYTHON=/usr/bin/python3
@@ -231,7 +231,7 @@ RUN mkdir packages/backend/dist/skeleton packages/backend/dist/bundle \
&& tar xzf packages/backend/dist/bundle.tar.gz -C packages/backend/dist/bundle
# Stage 3 - Build the actual backend image and install production dependencies
FROM node:22-bookworm-slim
FROM node:24-trixie-slim
# Set Python interpreter for `node-gyp` to use
ENV PYTHON=/usr/bin/python3
+1 -1
View File
@@ -7,7 +7,7 @@ description: General technical questions about Backstage.
### What technology does Backstage use?
Backstage is a large scale [TypeScript](https://www.typescriptlang.org/)
application whose frontend parts use [React](https://react.dev/) and
framework whose frontend parts use [React](https://react.dev/) and
[Material UI](https://material-ui.com/), while the backend parts use
[Node.js](https://nodejs.org/) and the [Express](https://expressjs.com/)
framework.
@@ -181,28 +181,30 @@ this remote source, users cannot also register new entities with e.g. the
[catalog-import](https://github.com/backstage/backstage/tree/master/plugins/catalog-import)
plugin.
## Clean up orphaned entities
## Automatic removal of orphaned entities
In short, entities can become orphaned through multiple means, such as when a catalog-info YAML file is moved from one place to another in the version control system without updating the registration in the catalog. For safety reasons, the default behavior is to just tag the orphaned entities, and keep them around. You can read more about orphaned entities [here](life-of-an-entity.md#orphaning).
Entities can become orphaned through multiple means, such as when a catalog-info YAML file is moved from one place to another in the version control system without updating the registration in the catalog. The default behavior is to automatically remove orphaned entities. You can read more about orphaned entities [here](life-of-an-entity.md#orphaning).
However, if you do wish to automatically remove the orphaned entities, you can use the following configuration, and everything with an orphaned entity tag will be eventually deleted.
However, if you wish to keep orphaned entities, you can use the following configuration, and automatic cleanup will be disabled.
```yaml
catalog:
orphanStrategy: delete
orphanStrategy: keep
```
## Clean up entities from orphaned entity providers
## Automatic removal of entities from orphaned entity providers
By default, if an entity provider which has provided entities to the catalog, is no longer configured, then the entities remain in the catalog until they are manually unregistered.
By default, if an entity provider which has provided entities to the catalog is no longer configured, then the entities it provided will be automatically removed.
To remove these entities automatically, you can use the following configuration.
To keep these entities instead, you can use the following configuration.
```yaml
catalog:
orphanProviderStrategy: delete
orphanProviderStrategy: keep
```
If you have had providers installed in the past that ingested entities into the catalog that you want to keep, the recommendation is to add the provider back to the catalog. If you dont want the provider to run, you can schedule it with a very large interval.
## Processing Interval
The [processing loop](./life-of-an-entity.md#processing) is
@@ -254,8 +254,8 @@ either, it becomes _orphaned_. The end result is as follows:
the child entity.
- The child entity is _not_ removed from the catalog, but stays around until
explicitly deleted via the catalog API, implicitly if `orphanStrategy: delete`
configuration is set, or until it is "reclaimed" by the original parent
or another parent starting to reference it.
configuration is set (the default), or until it is "reclaimed" by the original
parent or another parent starting to reference it.
- The catalog page in Backstage for the child entity detects the new annotation
and informs users about the orphan status.
@@ -282,21 +282,13 @@ Orphaning can occur in several different scenarios.
> to inform the owner that something is wrong. But processing and other
> behaviors continue as usual.
The reason that the orphaning mechanism exists instead of having an eager
deletion triggered, is safety. Scenarios like these can happen purely by
accident, due to the asynchronous nature of the system and the fallible nature
of humans. In particular when external systems start consuming and relying on
the catalog, there could be substantial consequences to suddenly dropping
entities without explicit owner consent. The catalog therefore takes the stance
that entities that often were added by direct user action should also be deleted
only by direct user action.
However, if you want to delete orphaned entities automatically anyway, you can
enable the automated clean up with the following app-config option.
The default behavior of the catalog is to automatically remove orphaned
entities. However, if you want to keep them instead, you can disable the
automated cleanup with the following app-config option.
```
catalog:
orphanStrategy: delete
orphanStrategy: keep
```
## Implicit Deletion
+44 -4
View File
@@ -172,15 +172,17 @@ TechDocs will publish documentation to this bucket and will fetch files from
here to serve documentation in Backstage. Note that the bucket names are
globally unique.
Set the config `techdocs.publisher.awsS3.bucketName` in your `app-config.yaml`
to the name of the bucket you just created.
Set the bucket name and region in your `app-config.yaml` to the name of the bucket you just created:
```yaml
techdocs:
publisher:
type: 'awsS3'
/* highlight-add-start */
awsS3:
bucketName: 'name-of-techdocs-storage-bucket'
region: 'us-east-1'
/* highlight-add-end */
```
**3. Create minimal AWS IAM policies to manage TechDocs**
@@ -266,7 +268,7 @@ environment automatically by defining appropriate IAM role with access to the
bucket. Read more in the
[official AWS documentation for using IAM roles](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html#use-roles).
**4b. Authentication using app-config.yaml**
**4b. Authentication using app-config.yaml via aws.accounts**
AWS credentials and region can be provided to the AWS SDK via `app-config.yaml`.
If the configs below are present, they will be used over existing `AWS_*`
@@ -290,7 +292,45 @@ aws:
Refer to the
[official AWS documentation for obtaining the credentials](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html).
**4c. Authentication using an assumed role** Users with multiple AWS accounts
**4c. Authentication using app-config.yaml via integrations.awsS3**
If you already have an [AWS S3 integration](../../integrations/aws-s3/locations.md), you can use it to authenticate with AWS S3:
```yaml
techdocs:
publisher:
type: 'awsS3'
awsS3:
bucketName: 'name-of-techdocs-storage-bucket'
region: 'eu-west-1'
integrations:
awsS3:
- accessKeyId: ${AWS_ACCESS_KEY_ID}
secretAccessKey: ${AWS_SECRET_ACCESS_KEY}
```
This will use the credentials from the integration to authenticate with AWS S3 and it does not require any additional configuration in the `app-config.yaml`. However, **if you have multiple S3 integrations**, you **must** specify the target integration by setting the `accessKeyId` in the `techdocs.publisher.awsS3.credentials` config:
```yaml
techdocs:
publisher:
type: 'awsS3'
awsS3:
bucketName: 'name-of-techdocs-storage-bucket'
region: 'eu-west-1'
/* highlight-add-start */
credentials:
accessKeyId: ${AWS_ACCESS_KEY_ID_1}
/* highlight-add-end */
integrations:
awsS3:
- accessKeyId: ${AWS_ACCESS_KEY_ID_1}
secretAccessKey: ${AWS_SECRET_ACCESS_KEY_1}
- accessKeyId: ${AWS_ACCESS_KEY_ID_2}
secretAccessKey: ${AWS_SECRET_ACCESS_KEY_2}
```
**4d. Authentication using an assumed role** Users with multiple AWS accounts
may want to use a role for S3 storage that is in a different AWS account. Using
the `roleArn` parameter as seen below, you can instruct the TechDocs publisher
to assume a role before accessing S3.
@@ -444,7 +444,7 @@ const app = createApp({
Can be converted to the following extension:
```tsx
import { SignInPageBlueprint } from '@backstage/frontend-plugin-api';
import { SignInPageBlueprint } from '@backstage/plugin-app-react';
const signInPage = SignInPageBlueprint.make({
params: {
@@ -492,7 +492,7 @@ const app = createApp({
Can be converted to the following extension:
```tsx
import { ThemeBlueprint } from '@backstage/frontend-plugin-api';
import { ThemeBlueprint } from '@backstage/plugin-app-react';
const customLightThemeExtension = ThemeBlueprint.make({
name: 'custom-light',
@@ -535,7 +535,7 @@ const app = createApp({
Icons are now installed as extensions, using the `IconBundleBlueprint` to make new instances which can be added to the app.
```ts
import { IconBundleBlueprint } from '@backstage/frontend-plugin-api';
import { IconBundleBlueprint } from '@backstage/plugin-app-react';
const exampleIconBundle = IconBundleBlueprint.make({
name: 'example-bundle',
@@ -586,10 +586,8 @@ Can be converted to the following extension:
```tsx
import { catalogTranslationRef } from '@backstage/plugin-catalog/alpha';
import {
createTranslationMessages,
TranslationBlueprint,
} from '@backstage/frontend-plugin-api';
import { createTranslationMessages } from '@backstage/frontend-plugin-api';
import { TranslationBlueprint } from '@backstage/plugin-app-react';
const catalogTranslations = TranslationBlueprint.make({
name: 'catalog-overrides',
@@ -662,7 +660,7 @@ const convertedRootFeatures = convertLegacyAppRoot(
);
```
Any app root wrapper needs to be migrated to be an extension, created using `AppRootWrapperBlueprint`. Note that if you have multiple wrappers they must be completely independent of each other, i.e. the order in which they the appear in the React tree should not matter. If that is not the case then you should group them into a single wrapper.
Any app root wrapper needs to be migrated to be an extension, created using `AppRootWrapperBlueprint` from `@backstage/plugin-app-react`. Note that if you have multiple wrappers they must be completely independent of each other, i.e. the order in which they the appear in the React tree should not matter. If that is not the case then you should group them into a single wrapper.
Here is an example converting the `CustomAppBarrier` into extension:
@@ -705,7 +703,7 @@ export const navModule = createFrontendModule({
Then in the actual implementation for the `SidebarContent` extension, you can provide something like the following, where you implement the entire `Sidebar` component.
```tsx title="in packages/app/src/modules/nav/Sidebar.tsx"
import { NavContentBlueprint } from '@backstage/frontend-plugin-api';
import { NavContentBlueprint } from '@backstage/plugin-app-react';
export const SidebarContent = NavContentBlueprint.make({
params: {
@@ -124,7 +124,7 @@ export interface ExampleApi {
}
export const exampleApiRef = createApiRef<ExampleApi>({
id: 'plugin.example',
id: 'plugin.example.api',
});
export class DefaultExampleApi implements ExampleApi {
@@ -23,6 +23,14 @@ Navigation item extensions are used to provide menu items that link to different
Page extensions provide content for a particular route in the app. By default pages are attached to the app routes extensions, which renders the root routes.
## Extension blueprints in `@backstage/frontend-plugin-api/alpha`
### Plugin Wrapper - [Reference](https://backstage.io/api/stable/variables/_backstage_frontend-plugin-api.packages-frontend-plugin-api_src_alpha.PluginWrapperBlueprint.html)
Plugin wrappers allow you to install components that will wrap all elements rendered as part of a plugin. This can be useful if you need to add a global provider, for example for a query client. The provided wrapper will be rendered as separate elements for each wrapped plugin element, so be sure to use a central store like a [Utility API](../utility-apis/01-index.md) if you want to share state between wrapper instances.
## Extension blueprints in `@backstage/plugin-app-react`
### SignInPage - [Reference](https://backstage.io/api/stable/variables/_backstage_frontend-plugin-api.SignInPageBlueprint.html)
Sign-in page extension have a single purpose - to implement a custom sign-in page. They are always attached to the app root extension and are rendered before the rest of the app until the user is signed in.
@@ -43,6 +51,14 @@ Icon bundle extensions provide the ability to replace or provide new icons to th
Translation extension provide custom translation messages for the app. They can be used both to override the default english messages to custom ones, as well as provide translations for additional languages.
### NavContent - [Reference](https://backstage.io/api/stable/variables/_backstage_frontend-plugin-api.NavContentBlueprint.html)
Nav content extensions allow you to replace the entire navbar with your own component. They are always attached to the app nav extension.
### Router - [Reference](https://backstage.io/api/stable/variables/_backstage_frontend-plugin-api.RouterBlueprint.html)
Router extensions allow you to replace the router component used by the app. They are always attached to the app root extension.
## Extension blueprints in `@backstage/plugin-catalog-react/alpha`
These are the [extension blueprints](../architecture/23-extension-blueprints.md) provided by the Catalog plugin.
@@ -52,11 +52,8 @@ In order to override a Swappable Component, you need to create a `SwappableCompo
There are two different ways to add extensions to the `app` plugin, both are documented below in an example of overriding the `Progress` Swappable Component.
```tsx title="in packages/app/src/App.tsx"
import {
Progress,
SwappableComponentBlueprint,
createFrontendModule,
} from '@backstage/frontend-plugin-api';
import { Progress, createFrontendModule } from '@backstage/frontend-plugin-api';
import { SwappableComponentBlueprint } from '@backstage/plugin-app-react';
import { MyCustomProgress } from './CustomProgress';
import { createApp } from '@backstage/frontend-defaults';
import appPlugin from '@backstage/plugin-app';
@@ -36,6 +36,9 @@ export const workApiRef = createApiRef<WorkApi>({
Both of these are properly exported publicly from the package, so that consumers can reach them.
The frontend system infers the owning plugin for an API from the `ApiRef` id, so
use the pattern `plugin.<plugin-id>.*` to make ownership explicit. This ensures that other plugins can't mistakenly override your API.
## Providing an extension through your plugin
The plugin itself now wants to provide this API and its default implementation, in the form of an API extension. Doing so means that when users install the Example plugin, an instance of the Work utility API will also be automatically available in their apps - both to the Example plugin itself, and to others. We do this in the main plugin package, not the `-react` package.
@@ -36,6 +36,8 @@ Well written input-enabled extension often have extension creator functions that
Like with other extension types, you replace Utility APIs with your own custom implementation using [extension overrides](../architecture/25-extension-overrides.md).
Note that it is only possible to override a Utility API using a module for the plugin that originally provided the API. Attempting to override an API using a different plugin or module for a different plugin will result in a conflict error.
```tsx title="in your app"
/* highlight-add-start */
import { createFrontendModule } from '@backstage/frontend-plugin-api';
+3 -3
View File
@@ -129,13 +129,13 @@ You can run Postgres in a Docker container, this is great for local development
First we need to pull down the container image, we'll use Postgres 17, check out the [Postgres Version Policy](../../overview/versioning-policy.md#postgresql-releases) to learn which versions are supported.
```shell
docker pull postgres:17.0-bookworm
docker pull postgres:17.0-trixie
```
Then we just need to start up the container.
```shell
docker run -d --name postgres --restart=always -p 5432:5432 -e POSTGRES_PASSWORD=<secret> postgres:17.0-bookworm
docker run -d --name postgres --restart=always -p 5432:5432 -e POSTGRES_PASSWORD=<secret> postgres:17.0-trixie
```
This will run Postgres in the background for you, but remember to start it up again when you reboot your system.
@@ -149,7 +149,7 @@ version: '4'
services:
postgres:
image: postgres:17.0-bookworm
image: postgres:17.0-trixie
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: <secret>
+1 -1
View File
@@ -81,7 +81,7 @@ This guide also assumes a basic understanding of working on a Linux based operat
- Using `nvm` (recommended)
- [Installing nvm](https://github.com/nvm-sh/nvm#install--update-script)
- [Install and change Node version with nvm](https://nodejs.org/en/download/package-manager/#nvm)
- Node 20 is a good starting point, this can be installed using `nvm install lts/iron`
- Node 24 is a good starting point, this can be installed using `nvm install lts/krypton`
- [Binary Download](https://nodejs.org/en/download/)
- [Package manager](https://nodejs.org/en/download/package-manager/)
- [Using NodeSource packages](https://github.com/nodesource/distributions/blob/master/README.md)
+385
View File
@@ -0,0 +1,385 @@
# Release v1.47.0-next.2
Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.47.0-next.2](https://backstage.github.io/upgrade-helper/?to=1.47.0-next.2)
## @backstage/app-defaults@1.7.4-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/core-components@0.18.5-next.0
### Patch Changes
- a723b8a: The MarkdownContent component now handles HTML content the same way as GitHub when rendering GitHub-flavored Markdown
## @backstage/create-app@0.7.8-next.2
### Patch Changes
- f1fe6fe: Updated Dockerfile to use Node 24 and Debian Trixie
## @backstage/dev-utils@1.1.19-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/app-defaults@1.7.4-next.0
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
## @backstage/frontend-defaults@0.3.5-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-app@0.3.4-next.1
## @backstage/plugin-api-docs@0.13.3-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog@1.32.2-next.1
- @backstage/plugin-catalog-react@1.21.5-next.1
## @backstage/plugin-app@0.3.4-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/integration-react@1.2.14-next.0
## @backstage/plugin-app-visualizer@0.1.27-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-auth@0.1.4-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-auth-react@0.1.23-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-catalog@1.32.2-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-search-react@1.10.2-next.0
- @backstage/plugin-techdocs-react@1.3.7-next.0
## @backstage/plugin-catalog-graph@0.5.5-next.1
### Patch Changes
- 5c49a00: Update for the `qs` library bump: the old array limit setting has changed to be more strict; you can no longer just give a zero to mean unlimited. So we choose an arbitrary high value, to at least go higher than the default 20.
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
## @backstage/plugin-catalog-import@0.13.9-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
## @backstage/plugin-catalog-react@1.21.5-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/integration-react@1.2.14-next.0
## @backstage/plugin-catalog-unprocessed-entities@0.2.25-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-config-schema@0.1.76-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-devtools@0.1.35-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-home@0.8.16-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-home-react@0.1.34-next.0
## @backstage/plugin-home-react@0.1.34-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-kubernetes@0.12.15-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-kubernetes-react@0.5.15-next.0
## @backstage/plugin-kubernetes-cluster@0.0.33-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-kubernetes-react@0.5.15-next.0
## @backstage/plugin-kubernetes-react@0.5.15-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-notifications@0.5.13-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-org@0.6.48-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
## @backstage/plugin-org-react@0.1.46-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
## @backstage/plugin-scaffolder@1.35.1-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-scaffolder-react@1.19.5-next.1
- @backstage/plugin-techdocs-react@1.3.7-next.0
## @backstage/plugin-scaffolder-react@1.19.5-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
## @backstage/plugin-search@1.5.2-next.1
### Patch Changes
- 5c49a00: Update for the `qs` library bump: the old array limit setting has changed to be more strict; you can no longer just give a zero to mean unlimited. So we choose an arbitrary high value, to at least go higher than the default 20.
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-search-react@1.10.2-next.0
## @backstage/plugin-search-react@1.10.2-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-signals@0.0.27-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-techdocs@1.16.2-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-auth-react@0.1.23-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-search-react@1.10.2-next.0
- @backstage/plugin-techdocs-react@1.3.7-next.0
## @backstage/plugin-techdocs-addons-test-utils@2.0.1-next.1
### Patch Changes
- Updated dependencies
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-catalog@1.32.2-next.1
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-search-react@1.10.2-next.0
- @backstage/plugin-techdocs@1.16.2-next.1
- @backstage/plugin-techdocs-react@1.3.7-next.0
## @backstage/plugin-techdocs-module-addons-contrib@1.1.32-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-techdocs-react@1.3.7-next.0
## @backstage/plugin-techdocs-react@1.3.7-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## @backstage/plugin-user-settings@0.8.31-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-react@1.21.5-next.1
## example-app@0.2.117-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-graph@0.5.5-next.1
- @backstage/plugin-search@1.5.2-next.1
- @backstage/app-defaults@1.7.4-next.0
- @backstage/cli@0.35.2-next.1
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-api-docs@0.13.3-next.1
- @backstage/plugin-auth-react@0.1.23-next.0
- @backstage/plugin-catalog@1.32.2-next.1
- @backstage/plugin-catalog-import@0.13.9-next.1
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-catalog-unprocessed-entities@0.2.25-next.0
- @backstage/plugin-devtools@0.1.35-next.1
- @backstage/plugin-home@0.8.16-next.1
- @backstage/plugin-kubernetes@0.12.15-next.1
- @backstage/plugin-kubernetes-cluster@0.0.33-next.1
- @backstage/plugin-notifications@0.5.13-next.0
- @backstage/plugin-org@0.6.48-next.1
- @backstage/plugin-scaffolder@1.35.1-next.1
- @backstage/plugin-scaffolder-react@1.19.5-next.1
- @backstage/plugin-search-react@1.10.2-next.0
- @backstage/plugin-signals@0.0.27-next.0
- @backstage/plugin-techdocs@1.16.2-next.1
- @backstage/plugin-techdocs-module-addons-contrib@1.1.32-next.1
- @backstage/plugin-techdocs-react@1.3.7-next.0
- @backstage/plugin-user-settings@0.8.31-next.1
## example-app-next@0.0.31-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/plugin-catalog-graph@0.5.5-next.1
- @backstage/plugin-search@1.5.2-next.1
- @backstage/app-defaults@1.7.4-next.0
- @backstage/cli@0.35.2-next.1
- @backstage/frontend-defaults@0.3.5-next.1
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-api-docs@0.13.3-next.1
- @backstage/plugin-app@0.3.4-next.1
- @backstage/plugin-app-visualizer@0.1.27-next.1
- @backstage/plugin-auth@0.1.4-next.0
- @backstage/plugin-auth-react@0.1.23-next.0
- @backstage/plugin-catalog@1.32.2-next.1
- @backstage/plugin-catalog-import@0.13.9-next.1
- @backstage/plugin-catalog-react@1.21.5-next.1
- @backstage/plugin-catalog-unprocessed-entities@0.2.25-next.0
- @backstage/plugin-home@0.8.16-next.1
- @backstage/plugin-kubernetes@0.12.15-next.1
- @backstage/plugin-kubernetes-cluster@0.0.33-next.1
- @backstage/plugin-notifications@0.5.13-next.0
- @backstage/plugin-org@0.6.48-next.1
- @backstage/plugin-scaffolder@1.35.1-next.1
- @backstage/plugin-scaffolder-react@1.19.5-next.1
- @backstage/plugin-search-react@1.10.2-next.0
- @backstage/plugin-signals@0.0.27-next.0
- @backstage/plugin-techdocs@1.16.2-next.1
- @backstage/plugin-techdocs-module-addons-contrib@1.1.32-next.1
- @backstage/plugin-techdocs-react@1.3.7-next.0
- @backstage/plugin-user-settings@0.8.31-next.1
## app-next-example-plugin@0.0.31-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
## techdocs-cli-embedded-app@0.2.116-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
- @backstage/app-defaults@1.7.4-next.0
- @backstage/cli@0.35.2-next.1
- @backstage/integration-react@1.2.14-next.0
- @backstage/plugin-catalog@1.32.2-next.1
- @backstage/plugin-techdocs@1.16.2-next.1
- @backstage/plugin-techdocs-react@1.3.7-next.0
## @internal/plugin-todo-list@1.0.47-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.5-next.0
+365
View File
@@ -0,0 +1,365 @@
# Release v1.47.0-next.3
Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.47.0-next.3](https://backstage.github.io/upgrade-helper/?to=1.47.0-next.3)
## @backstage/backend-defaults@0.15.0-next.2
### Minor Changes
- 6fc00e6: Added action filtering support with glob patterns and attribute constraints.
The `ActionsService` now supports filtering actions based on configuration. This allows controlling which actions are exposed to consumers like the MCP backend.
Configuration example:
```yaml
backend:
actions:
pluginSources:
- catalog
- scaffolder
filter:
include:
- id: 'catalog:*'
attributes:
destructive: false
- id: 'scaffolder:*'
exclude:
- id: '*:delete-*'
- attributes:
readOnly: false
```
Filtering logic:
- `include`: Rules for actions to include. Each rule can specify an `id` glob pattern and/or `attributes` constraints. An action must match at least one rule to be included. If no include rules are specified, all actions are included by default.
- `exclude`: Rules for actions to exclude. Takes precedence over include rules.
- Each rule combines `id` and `attributes` with AND logic (both must match if specified).
### Patch Changes
- Updated dependencies
- @backstage/backend-app-api@1.4.0
- @backstage/plugin-auth-node@0.6.10
- @backstage/plugin-permission-node@0.10.7
## @backstage/ui@0.11.0-next.1
### Minor Changes
- 243e5e7: **BREAKING**: Redesigned Table component with new `useTable` hook API.
- The `Table` component (React Aria wrapper) is renamed to `TableRoot`
- New high-level `Table` component that handles data display, pagination, sorting, and selection
- The `useTable` hook is completely redesigned with a new API supporting three pagination modes (complete, offset, cursor)
- New types: `ColumnConfig`, `TableProps`, `TableItem`, `UseTableOptions`, `UseTableResult`
New features include unified pagination modes, debounced query changes, stale data preservation during reloads, and row selection with toggle/replace behaviors.
**Migration guide:**
1. Update imports and use the new `useTable` hook:
```diff
-import { Table, useTable } from '@backstage/ui';
-const { data, paginationProps } = useTable({ data: items, pagination: {...} });
+import { Table, useTable, type ColumnConfig } from '@backstage/ui';
+const { tableProps } = useTable({
+ mode: 'complete',
+ getData: () => items,
+});
```
2. Define columns and render with the new Table API:
```diff
-<Table aria-label="My table">
- <TableHeader>...</TableHeader>
- <TableBody items={data}>...</TableBody>
-</Table>
-<TablePagination {...paginationProps} />
+const columns: ColumnConfig<Item>[] = [
+ { id: 'name', label: 'Name', isRowHeader: true, cell: item => <CellText title={item.name} /> },
+ { id: 'type', label: 'Type', cell: item => <CellText title={item.type} /> },
+];
+
+<Table columnConfig={columns} {...tableProps} />
```
Affected components: Table, TableRoot, TablePagination
- 95246eb: **Breaking** Updating color tokens to match the new neutral style on different surfaces.
## Migration notes
There's no direct replacement for the old tint tokens but you can use the new neutral set of color tokens on surface 0 or 1 as a replacement.
- `--bui-bg-tint` can be replaced by `--bui-bg-neutral-on-surface-0`
- `--bui-bg-tint-hover` can be replaced by `--bui-bg-neutral-on-surface-0-hover`
- `--bui-bg-tint-pressed` can be replaced by `--bui-bg-neutral-on-surface-0-pressed`
- `--bui-bg-tint-disabled` can be replaced by `--bui-bg-neutral-on-surface-0-disabled`
- ea0c6d8: Introduce new `ToggleButton` & `ToggleButtonGroup` components in Backstage UI
### Patch Changes
- 21c87cc: Fixes disabled state in primary and secondary buttons in Backstage UI.
- b3253b6: Fixed `Link` component causing hard page refreshes for internal routes. The component now properly uses React Router's navigation instead of full page reloads.
## @backstage/plugin-auth-backend@0.26.0-next.0
### Minor Changes
- 7ffc873: Fix `user_created_at` migration causing `SQLiteError` regarding use of non-constants for defaults
### Patch Changes
- Updated dependencies
- @backstage/plugin-auth-node@0.6.10
## @backstage/plugin-events-backend-module-kafka@0.3.0-next.0
### Minor Changes
- ef5bbd8: Add support for Kafka offset configuration (`fromBeginning`) and `autoCommit`
## @backstage/plugin-home@0.9.0-next.2
### Minor Changes
- e091a83: Widget configurations are now only saved to storage when the Save button is explicitly clicked. Added a Cancel button that allows users to discard unsaved changes and revert to the last saved state.
## @backstage/backend-dynamic-feature-service@0.7.8-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
- @backstage/plugin-auth-node@0.6.10
- @backstage/plugin-catalog-backend@3.3.1-next.1
- @backstage/plugin-events-backend@0.5.10-next.0
- @backstage/plugin-permission-node@0.10.7
- @backstage/plugin-search-backend-node@1.4.0
## @backstage/backend-test-utils@1.10.3-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
- @backstage/backend-app-api@1.4.0
- @backstage/plugin-auth-node@0.6.10
## @backstage/create-app@0.7.8-next.3
### Patch Changes
- Bumped create-app version.
## @techdocs/cli@1.10.4-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
## @backstage/plugin-api-docs@0.13.3-next.2
### Patch Changes
- 0216090: Updated dependency `@types/swagger-ui-react` to `^5.0.0`.
- abeba2b: Fix types with new bumped dependency
- Updated dependencies
- @backstage/plugin-catalog@1.32.2-next.2
## @backstage/plugin-auth-backend-module-aws-alb-provider@0.4.11-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-auth-backend@0.26.0-next.0
- @backstage/plugin-auth-node@0.6.10
## @backstage/plugin-auth-backend-module-oidc-provider@0.4.11-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-auth-backend@0.26.0-next.0
- @backstage/plugin-auth-node@0.6.10
## @backstage/plugin-catalog@1.32.2-next.2
### Patch Changes
- 7ca91e8: Header in EntityLayout should always be shown.
Monitoring the loading status caused flickering when the refresh() method of the Async Entity was invoked.
## @backstage/plugin-catalog-backend-module-aws@0.4.19-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
## @backstage/plugin-catalog-backend-module-github@0.12.1-next.1
### Patch Changes
- cb4b907: Improved efficiency of `GithubOrgEntityProvider` membership event handling and edit team. The provider now fetches only the specific user's teams instead of all organization users when processing membership events, and uses `addEntitiesOperation` instead of `replaceEntitiesOperation` to avoid unnecessary entity deletions.
## @backstage/plugin-catalog-backend-module-gitlab@0.7.7-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.7.8-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
- @backstage/plugin-catalog-backend@3.3.1-next.1
## @backstage/plugin-catalog-backend-module-puppetdb@0.2.18-next.0
### Patch Changes
- a307700: Fixed crash when `latest_report_status` is undefined
## @backstage/plugin-devtools-backend@0.5.13-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
- @backstage/plugin-permission-node@0.10.7
## @backstage/plugin-mcp-actions-backend@0.1.7-next.1
### Patch Changes
- 4d82a35: build(deps): bump `@modelcontextprotocol/sdk` from 1.24.3 to 1.25.2
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
## @backstage/plugin-scaffolder@1.35.1-next.2
### Patch Changes
- 9d75495: Fixed bug in RepoUrlPickerComponent component where repository names were not being autocompleted.
## @backstage/plugin-scaffolder-backend@3.1.1-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
- @backstage/plugin-scaffolder-backend-module-github@0.9.4-next.1
- @backstage/plugin-auth-node@0.6.10
- @backstage/plugin-permission-node@0.10.7
## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.19-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
## @backstage/plugin-scaffolder-backend-module-github@0.9.4-next.1
### Patch Changes
- bb7088b: Added options to set [workflow access level][access-level] for repositories to `github:repo:create`
This is useful when creating repositories for GitHub Actions to manage access
to the workflows during creation.
```diff
- action: github:repo:create
id: create-repo
input:
repoUrl: github.com?owner=owner&repo=repo
visibility: private
+ workflowAccess: organization
```
[access-level]: https://docs.github.com/en/rest/actions/permissions?apiVersion=2022-11-28#set-the-level-of-access-for-workflows-outside-of-the-repository
## @backstage/plugin-search-backend@2.0.10-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
- @backstage/plugin-permission-node@0.10.7
- @backstage/plugin-search-backend-node@1.4.0
## @backstage/plugin-techdocs-backend@2.1.4-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
## @backstage/plugin-user-settings-backend@0.3.10-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
- @backstage/plugin-auth-node@0.6.10
## example-app@0.2.117-next.3
### Patch Changes
- Updated dependencies
- @backstage/ui@0.11.0-next.1
- @backstage/plugin-catalog@1.32.2-next.2
- @backstage/plugin-home@0.9.0-next.2
- @backstage/plugin-api-docs@0.13.3-next.2
- @backstage/plugin-scaffolder@1.35.1-next.2
- @backstage/cli@0.35.2-next.1
## example-app-next@0.0.31-next.3
### Patch Changes
- Updated dependencies
- @backstage/ui@0.11.0-next.1
- @backstage/plugin-catalog@1.32.2-next.2
- @backstage/plugin-home@0.9.0-next.2
- @backstage/plugin-api-docs@0.13.3-next.2
- @backstage/plugin-scaffolder@1.35.1-next.2
- @backstage/cli@0.35.2-next.1
## example-backend@0.0.46-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.15.0-next.2
- @backstage/plugin-mcp-actions-backend@0.1.7-next.1
- @backstage/plugin-auth-backend@0.26.0-next.0
- @backstage/plugin-scaffolder-backend-module-github@0.9.4-next.1
- @backstage/plugin-app-backend@0.5.9
- @backstage/plugin-auth-backend-module-github-provider@0.4.0
- @backstage/plugin-auth-backend-module-openshift-provider@0.1.3
- @backstage/plugin-auth-node@0.6.10
- @backstage/plugin-catalog-backend@3.3.1-next.1
- @backstage/plugin-devtools-backend@0.5.13-next.1
- @backstage/plugin-events-backend@0.5.10-next.0
- @backstage/plugin-events-backend-module-google-pubsub@0.1.7
- @backstage/plugin-kubernetes-backend@0.21.0
- @backstage/plugin-notifications-backend@0.6.1
- @backstage/plugin-permission-backend@0.7.7
- @backstage/plugin-permission-node@0.10.7
- @backstage/plugin-proxy-backend@0.6.9
- @backstage/plugin-scaffolder-backend@3.1.1-next.2
- @backstage/plugin-search-backend@2.0.10-next.1
- @backstage/plugin-search-backend-node@1.4.0
- @backstage/plugin-signals-backend@0.3.11
- @backstage/plugin-techdocs-backend@2.1.4-next.2
+1 -1
View File
@@ -417,7 +417,7 @@ The following is an example of a `Dockerfile` that can be used to package the
output of building a package with role `'backend'` into an image:
```Dockerfile
FROM node:20-bookworm-slim
FROM node:24-trixie-slim
WORKDIR /app
COPY yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
+73 -2
View File
@@ -432,8 +432,79 @@ Usage: backstage-cli create-github-app <github-org>
Outputs debug information which is useful when opening an issue. Outputs system
information, node.js and npm versions, CLI version and type (inside backstage
repo or a created app), all `@backstage/*` package dependency versions.
repo or a created app), all `@backstage/*` package dependency versions, and any
packages that contain a `backstage` field in their `package.json`.
The command distinguishes between installed packages (from npm) and local
workspace packages, making it easier to understand your Backstage setup.
```text
Usage: backstage-cli info
Usage: backstage-cli info [options]
Options:
--include <patterns...> Glob patterns for additional packages to include
(e.g., @mycompany/backstage-*)
--format <text|json> Output format (default: text)
-h, --help display help for command
```
### Examples
Output debug information to the console:
```bash
yarn backstage-cli info
```
Include additional packages matching a glob pattern:
```bash
yarn backstage-cli info --include "@mycompany/*"
```
Output as JSON:
```bash
yarn backstage-cli info --format json
```
Export JSON to a file for further processing:
```bash
yarn backstage-cli info --format json > backstage-info.json
```
Combine options to include custom packages and export to JSON:
```bash
yarn backstage-cli info --include "@mycompany/backstage-*" --include "@internal/*" --format json > debug-info.json
```
Export text output to a file:
```bash
yarn backstage-cli info --format text > backstage-info.txt
```
### JSON Output Format
When using `--format json`, the output is structured as follows:
```json
{
"system": {
"os": "Darwin 23.0.0 - darwin/arm64",
"node": "v18.17.0",
"yarn": "3.6.0",
"cli": { "version": "0.27.0", "local": false },
"backstage": "1.20.0"
},
"dependencies": {
"@backstage/core-plugin-api": "1.8.0",
"@backstage/plugin-catalog": "1.15.0"
},
"local": {
"@mycompany/backstage-plugin-custom": "0.1.0"
}
}
```