diff --git a/.changeset/beige-chicken-type.md b/.changeset/beige-chicken-type.md new file mode 100644 index 0000000000..d73500a7f9 --- /dev/null +++ b/.changeset/beige-chicken-type.md @@ -0,0 +1,5 @@ +--- +'yarn-plugin-backstage': patch +--- + +Use yarn's built-in http utilities for fetching release manifests diff --git a/.changeset/brave-maps-deliver.md b/.changeset/brave-maps-deliver.md new file mode 100644 index 0000000000..51b60af153 --- /dev/null +++ b/.changeset/brave-maps-deliver.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Updated Dockerfile to include `backstage.json` file diff --git a/.changeset/brave-teachers-mate.md b/.changeset/brave-teachers-mate.md new file mode 100644 index 0000000000..22f768b441 --- /dev/null +++ b/.changeset/brave-teachers-mate.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/backend-defaults': patch +'@backstage/plugin-catalog-backend': patch +--- + +Updated dependency `@opentelemetry/api` to `^1.9.0`. diff --git a/.changeset/brown-monkeys-ring.md b/.changeset/brown-monkeys-ring.md new file mode 100644 index 0000000000..5aaf738d38 --- /dev/null +++ b/.changeset/brown-monkeys-ring.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +If the Backstage yarn plugin is installed, it will now be automatically updated as part of `versions:bump`. diff --git a/.changeset/chatty-weeks-impress.md b/.changeset/chatty-weeks-impress.md new file mode 100644 index 0000000000..21beb168e9 --- /dev/null +++ b/.changeset/chatty-weeks-impress.md @@ -0,0 +1,44 @@ +--- +'@backstage/plugin-home': patch +--- + +Added a new Quick Start Card to `plugin-home`, which can display basic info to get users the info they need to onboard to the Catalog. + +``` +import { QuickStartCard } from '@backstage/plugin-home'; + + } + cardDescription="Backstage system model will help you create new entities" + video={ + + } + downloadImage={ + + } +/> +``` + +See the [storybook examples](https://backstage.io/storybook/?path=/story/plugins-home-components-quickstartcard--default) diff --git a/.changeset/chilled-taxis-dance.md b/.changeset/chilled-taxis-dance.md deleted file mode 100644 index e2a5dcecee..0000000000 --- a/.changeset/chilled-taxis-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -The check for `react-dom/client` in the Jest configuration will now properly always run from the target directory. diff --git a/.changeset/chilly-games-trade.md b/.changeset/chilly-games-trade.md new file mode 100644 index 0000000000..259063776f --- /dev/null +++ b/.changeset/chilly-games-trade.md @@ -0,0 +1,7 @@ +--- +'@backstage/backend-defaults': minor +--- + +Added a new `backend.health.headers` configuration that can be used to set additional headers to include in health check responses. + +**BREAKING CONSUMERS**: As part of this change the `createHealthRouter` function exported from `@backstage/backend-defaults/rootHttpRouter` now requires the root config service to be passed through the `config` option. diff --git a/.changeset/cold-icons-worry.md b/.changeset/cold-icons-worry.md new file mode 100644 index 0000000000..4e0b461b24 --- /dev/null +++ b/.changeset/cold-icons-worry.md @@ -0,0 +1,6 @@ +--- +'@backstage/cli': patch +--- + +Remove special-casing for `@types` packages when generating dependency entries +during templating diff --git a/.changeset/cold-jeans-stare.md b/.changeset/cold-jeans-stare.md new file mode 100644 index 0000000000..c0356db3ad --- /dev/null +++ b/.changeset/cold-jeans-stare.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Updated the template to use `@backstage/cli/config/prettier` instead of `@spotify/prettier-config`. diff --git a/.changeset/cool-days-sparkle.md b/.changeset/cool-days-sparkle.md new file mode 100644 index 0000000000..1dc9a76df7 --- /dev/null +++ b/.changeset/cool-days-sparkle.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket-server': minor +'@backstage/backend-defaults': minor +--- + +Throttles Bitbucket Server API calls diff --git a/.changeset/cuddly-chicken-wink.md b/.changeset/cuddly-chicken-wink.md new file mode 100644 index 0000000000..79843ba64d --- /dev/null +++ b/.changeset/cuddly-chicken-wink.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Export `PluginTokenHandler` and `pluginTokenHandlerDecoratorServiceRef` to allow for custom decoration of the plugin token handler without having to re-implement the entire handler. diff --git a/.changeset/cuddly-schools-scream.md b/.changeset/cuddly-schools-scream.md new file mode 100644 index 0000000000..533d3d1d4e --- /dev/null +++ b/.changeset/cuddly-schools-scream.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Pass in a default schedule to the `GithubEntityProvider` if none is provided diff --git a/.changeset/curly-hats-tell.md b/.changeset/curly-hats-tell.md new file mode 100644 index 0000000000..c0e061c99b --- /dev/null +++ b/.changeset/curly-hats-tell.md @@ -0,0 +1,18 @@ +--- +'@backstage/backend-defaults': minor +'@backstage/backend-test-utils': minor +--- + +**BREAKING** Upgraded @keyv/redis and keyv packages to resolve a bug related to incorrect resolution of cache keys. + +This is a breaking change for clients using the `redis` store for cache with `useRedisSets` option set to false since cache keys will be calculated differently (without the sets:namespace: prefix). For clients with default configuration (or useRedisSets set to false) the cache keys will stay the same, but since @keyv/redis library no longer supports redis sets they won't be utilised anymore. + +If you were using `useRedisSets` option in configuration make sure to remove it from `app-config.yaml`: + +```diff +backend: + cache: + store: redis + connection: redis://user:pass@cache.example.com:6379 +- useRedisSets: false +``` diff --git a/.changeset/cyan-rocks-divide.md b/.changeset/cyan-rocks-divide.md new file mode 100644 index 0000000000..8576e515d8 --- /dev/null +++ b/.changeset/cyan-rocks-divide.md @@ -0,0 +1,5 @@ +--- +'@backstage/integration': minor +--- + +Add the integration for Azure blob storage to read the credentials to access the storage account and provide the default credential provider. diff --git a/.changeset/cyan-trees-bow.md b/.changeset/cyan-trees-bow.md deleted file mode 100644 index 6f23f67f55..0000000000 --- a/.changeset/cyan-trees-bow.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-events-node': patch ---- - -Fixed an issue where subscribing to events threw an error and gave up too easily. Calling the subscribe method will cause the background polling loop to keep trying to connect to the events backend, even if the initial request fails. - -By default the events service will attempt to publish and subscribe to events from the events bus API in the events backend, but if it fails due to the events backend not being installed, it will bail and never try calling the API again. There is now a new `events.useEventBus` configuration and option for the `DefaultEventsService` that lets you control this behavior. You can set it to `'never'` to disabled API calls to the events backend completely, or `'always'` to never allow it to be disabled. diff --git a/.changeset/dry-badgers-prove.md b/.changeset/dry-badgers-prove.md new file mode 100644 index 0000000000..efd2011a7b --- /dev/null +++ b/.changeset/dry-badgers-prove.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Perform the by-query count inlined with the main query diff --git a/.changeset/dry-needles-taste.md b/.changeset/dry-needles-taste.md new file mode 100644 index 0000000000..472bc0edb3 --- /dev/null +++ b/.changeset/dry-needles-taste.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-app-api': patch +'@backstage/plugin-app': patch +--- + +The OAuth 2 client implementations will now attempt to refresh the session when the existing session doesn't have the required scopes. The previous behavior was to only try to refresh the session of it was missing, and otherwise directly request a new session. This fixes an issue where some auth providers will not return access tokens with certain scopes unless explicitly requested, leading to an auth popup even if the underlying session already had been granted the requested scopes. diff --git a/.changeset/dull-bulldogs-learn.md b/.changeset/dull-bulldogs-learn.md new file mode 100644 index 0000000000..0892ecb6ba --- /dev/null +++ b/.changeset/dull-bulldogs-learn.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +The user and plugin token verification in the default `AuthService` implementation will no longer forward verification errors to the caller, and instead log them as warnings. diff --git a/.changeset/dull-ties-film.md b/.changeset/dull-ties-film.md new file mode 100644 index 0000000000..4463d59d91 --- /dev/null +++ b/.changeset/dull-ties-film.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': minor +--- + +Adds an optional columns attribute to HasSubdomainsCardProps and changes its default columns diff --git a/.changeset/empty-bugs-deliver.md b/.changeset/empty-bugs-deliver.md new file mode 100644 index 0000000000..5b26f4eaca --- /dev/null +++ b/.changeset/empty-bugs-deliver.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Export `DefaultHttpAuthService` to allow for custom token extraction logic. diff --git a/.changeset/empty-colts-promise.md b/.changeset/empty-colts-promise.md new file mode 100644 index 0000000000..9f7f979b98 --- /dev/null +++ b/.changeset/empty-colts-promise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Use a join based strategy for filtering, when having small page sizes diff --git a/.changeset/empty-ways-push.md b/.changeset/empty-ways-push.md new file mode 100644 index 0000000000..11a67985d8 --- /dev/null +++ b/.changeset/empty-ways-push.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-elasticsearch': patch +--- + +Update the ElasticSearchSearchEngine translator to handle phrase searches. diff --git a/.changeset/fast-cheetahs-deliver.md b/.changeset/fast-cheetahs-deliver.md new file mode 100644 index 0000000000..ce87a68409 --- /dev/null +++ b/.changeset/fast-cheetahs-deliver.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Deprecate old-backend-system `IncrementalCatalogBuilder` diff --git a/.changeset/few-colts-train.md b/.changeset/few-colts-train.md new file mode 100644 index 0000000000..1dc6becad1 --- /dev/null +++ b/.changeset/few-colts-train.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-ldap': minor +--- + +Updated fix for ldap entity mapping which doesn't require extra config setting of dnCaseSensitive diff --git a/.changeset/few-pillows-remember.md b/.changeset/few-pillows-remember.md new file mode 100644 index 0000000000..8f13651a70 --- /dev/null +++ b/.changeset/few-pillows-remember.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fixed an issue causing the `EntityOwnerPicker` to reset scrolling when more elements are loaded. diff --git a/.changeset/fifty-countries-decide.md b/.changeset/fifty-countries-decide.md new file mode 100644 index 0000000000..9c4553f3be --- /dev/null +++ b/.changeset/fifty-countries-decide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Implement `/entities` in terms of `queryEntities` to not run into memory and performance problems on large catalogs diff --git a/.changeset/five-goats-travel.md b/.changeset/five-goats-travel.md new file mode 100644 index 0000000000..361c530fca --- /dev/null +++ b/.changeset/five-goats-travel.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-defaults': patch +--- + +Log request and response metadata so it can be used for filtering log messages. +The format of the request date was also changed from `clf` to `utc`. diff --git a/.changeset/fluffy-cobras-sort.md b/.changeset/fluffy-cobras-sort.md new file mode 100644 index 0000000000..363281a6c5 --- /dev/null +++ b/.changeset/fluffy-cobras-sort.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': minor +--- + +Implemented `AzureBlobStorageUrlReader` to read from the url of committed location from the entity provider diff --git a/.changeset/fluffy-falcons-shout.md b/.changeset/fluffy-falcons-shout.md new file mode 100644 index 0000000000..7cdce8229c --- /dev/null +++ b/.changeset/fluffy-falcons-shout.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-auth-backend': patch +'@backstage/plugin-auth-node': patch +--- + +Improved error forwarding for OAuth refresh endpoints diff --git a/.changeset/fluffy-zebras-cheer.md b/.changeset/fluffy-zebras-cheer.md new file mode 100644 index 0000000000..308f12d10a --- /dev/null +++ b/.changeset/fluffy-zebras-cheer.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-scaffolder-common': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Experimental support for `formDecorators` to enable secret collection and mutations to the parameters for scaffolder tasks diff --git a/.changeset/forty-apples-complain.md b/.changeset/forty-apples-complain.md new file mode 100644 index 0000000000..5aa177a63f --- /dev/null +++ b/.changeset/forty-apples-complain.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-plugin-api': patch +'@backstage/backend-app-api': patch +--- + +Removed unused `express` dependencies. diff --git a/.changeset/forty-pets-wave.md b/.changeset/forty-pets-wave.md deleted file mode 100644 index 1b96867e7d..0000000000 --- a/.changeset/forty-pets-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-catalog': patch ---- - -Fixed a bug where the `filter` setting of the collator was not permitted to be an array. diff --git a/.changeset/forty-ravens-fry.md b/.changeset/forty-ravens-fry.md new file mode 100644 index 0000000000..8deb149441 --- /dev/null +++ b/.changeset/forty-ravens-fry.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +The default `authServiceFactory` now correctly depends on the plugin scoped `Logger` services rather than the root scoped one. diff --git a/.changeset/friendly-dots-thank.md b/.changeset/friendly-dots-thank.md new file mode 100644 index 0000000000..50337c0a0f --- /dev/null +++ b/.changeset/friendly-dots-thank.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-search-backend-module-techdocs': patch +'@backstage/plugin-search-backend-module-catalog': patch +'@backstage/plugin-search-backend-module-explore': patch +--- + +Update README diff --git a/.changeset/gold-crabs-agree.md b/.changeset/gold-crabs-agree.md new file mode 100644 index 0000000000..1f345a8c10 --- /dev/null +++ b/.changeset/gold-crabs-agree.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Use a faster count method on pg when computing some metrics diff --git a/.changeset/gold-stingrays-cross.md b/.changeset/gold-stingrays-cross.md new file mode 100644 index 0000000000..f2a8da99b3 --- /dev/null +++ b/.changeset/gold-stingrays-cross.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Fix a bug where sometimes the `by-query` endpoint could return nulls for entities that were not yet stitched. diff --git a/.changeset/gorgeous-panthers-count.md b/.changeset/gorgeous-panthers-count.md new file mode 100644 index 0000000000..f6c05d743b --- /dev/null +++ b/.changeset/gorgeous-panthers-count.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +The --no-node-snapshot check needs to be done against process.execArgv instead of process.argv diff --git a/.changeset/great-buttons-cross.md b/.changeset/great-buttons-cross.md new file mode 100644 index 0000000000..02247b94bf --- /dev/null +++ b/.changeset/great-buttons-cross.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-app-backend': patch +--- + +Fixed a bug where config would not be injected on the `/` and `/index.html` paths. diff --git a/.changeset/green-carpets-smell.md b/.changeset/green-carpets-smell.md new file mode 100644 index 0000000000..0cda68de22 --- /dev/null +++ b/.changeset/green-carpets-smell.md @@ -0,0 +1,7 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +The `RootLifecycleService` now has a new `addBeforeShutdownHook` method, and hooks added through this method will run immediately when a termination event is received. + +The backend will not proceed with the shutdown and run the `Shutdown` hooks until all `BeforeShutdown` hooks have completed. diff --git a/.changeset/green-tools-arrive.md b/.changeset/green-tools-arrive.md deleted file mode 100644 index 78eed180d4..0000000000 --- a/.changeset/green-tools-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Fix issue with form state not refreshing when updating diff --git a/.changeset/happy-forks-listen.md b/.changeset/happy-forks-listen.md new file mode 100644 index 0000000000..4274c830f1 --- /dev/null +++ b/.changeset/happy-forks-listen.md @@ -0,0 +1,5 @@ +--- +'@backstage/release-manifests': patch +--- + +Switch to native fetch for loading release manifests diff --git a/.changeset/healthy-lions-judge.md b/.changeset/healthy-lions-judge.md deleted file mode 100644 index f9ead85d2e..0000000000 --- a/.changeset/healthy-lions-judge.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-aws-alb-provider': minor -'@backstage/plugin-auth-backend': minor ---- - -**BREAKING**: The AWS ALB `fullProfile` will no longer have the its username or email converted to lowercase. This is to ensure unique handling of the users. You may need to update and configure a custom sign-in resolver or profile transform as a result. diff --git a/.changeset/healthy-years-begin.md b/.changeset/healthy-years-begin.md new file mode 100644 index 0000000000..a1952b6648 --- /dev/null +++ b/.changeset/healthy-years-begin.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-search-react': patch +'@backstage/plugin-search': patch +--- + +Use Select from core-components and update Lifecycle filter to use Select instead checkboxes. diff --git a/.changeset/heavy-needles-poke.md b/.changeset/heavy-needles-poke.md new file mode 100644 index 0000000000..91a98a9102 --- /dev/null +++ b/.changeset/heavy-needles-poke.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-defaults': patch +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Add task metrics as two gauges that track the last start and end timestamps as epoch seconds. diff --git a/.changeset/heavy-tomatoes-laugh.md b/.changeset/heavy-tomatoes-laugh.md new file mode 100644 index 0000000000..9a4740e209 --- /dev/null +++ b/.changeset/heavy-tomatoes-laugh.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': minor +--- + +Service factories added by feature loaders now have lower priority and will be ignored if a factory for the same service is added directly by `backend.add(serviceFactory)`. diff --git a/.changeset/honest-hornets-double.md b/.changeset/honest-hornets-double.md new file mode 100644 index 0000000000..6c2bffa5af --- /dev/null +++ b/.changeset/honest-hornets-double.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': minor +--- + +Updated the `catalogServiceMock` return type to match both `CatalogService` and `CatalogApi` diff --git a/.changeset/hungry-hairs-wait.md b/.changeset/hungry-hairs-wait.md new file mode 100644 index 0000000000..ed4cd01ac7 --- /dev/null +++ b/.changeset/hungry-hairs-wait.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Generated OpenAPI clients now support paths with tags. diff --git a/.changeset/itchy-elephants-trade.md b/.changeset/itchy-elephants-trade.md deleted file mode 100644 index 8ac6aaeeb9..0000000000 --- a/.changeset/itchy-elephants-trade.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-events-backend': patch -'@backstage/plugin-events-node': patch ---- - -Fix `events.useEventBus` by propagating config to `DefaultEventsService` diff --git a/.changeset/itchy-rats-pump.md b/.changeset/itchy-rats-pump.md new file mode 100644 index 0000000000..3b9073da77 --- /dev/null +++ b/.changeset/itchy-rats-pump.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Compute deltas more efficiently, which generally leads to less wasted processing cycles diff --git a/.changeset/itchy-ravens-punch.md b/.changeset/itchy-ravens-punch.md new file mode 100644 index 0000000000..7d4cb9cd92 --- /dev/null +++ b/.changeset/itchy-ravens-punch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Implement `/entities/by-name/:kind/:namespace/:name` using `getEntitiesByRefs` diff --git a/.changeset/khaki-fireants-march.md b/.changeset/khaki-fireants-march.md deleted file mode 100644 index ec84fe1b63..0000000000 --- a/.changeset/khaki-fireants-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added `--alwaysPack` as a replacement for the now hidden `--alwaysYarnPack` flag for the `build-workspace` command. diff --git a/.changeset/khaki-ladybugs-swim.md b/.changeset/khaki-ladybugs-swim.md new file mode 100644 index 0000000000..79cc1358df --- /dev/null +++ b/.changeset/khaki-ladybugs-swim.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-node': patch +--- + +Clarified purpose of subscriber ID in TSDoc for `EventsServiceSubscribeOptions`. diff --git a/.changeset/khaki-shrimps-tease.md b/.changeset/khaki-shrimps-tease.md new file mode 100644 index 0000000000..a4dd3bc8e0 --- /dev/null +++ b/.changeset/khaki-shrimps-tease.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': minor +'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder-node': patch +'@backstage/plugin-scaffolder': patch +--- + +Added the autocomplete feature to GitlabRepoUrlPicker diff --git a/.changeset/large-birds-watch.md b/.changeset/large-birds-watch.md new file mode 100644 index 0000000000..24d63492bc --- /dev/null +++ b/.changeset/large-birds-watch.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': patch +--- + +Mock the new `RootLifecycleService.addBeforeShutdownHook` method. diff --git a/.changeset/late-kings-wave.md b/.changeset/late-kings-wave.md deleted file mode 100644 index 01877f2732..0000000000 --- a/.changeset/late-kings-wave.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added a new `"rejectFrontendNetworkRequests"` configuration flag that can be set in the `"jest"` field in the root `package.json`: - -```json -{ - "jest": { - "rejectFrontendNetworkRequests": true - } -} -``` - -This flag causes rejection of any form of network requests that are attempted to be made in frontend or common package tests. This flag can only be set in the root `package.json` and can not be overridden in individual package configurations. diff --git a/.changeset/lazy-pants-attack.md b/.changeset/lazy-pants-attack.md new file mode 100644 index 0000000000..87a5fadb45 --- /dev/null +++ b/.changeset/lazy-pants-attack.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Fix issue with `jwks` endpoint returning invalid data with `firestore` diff --git a/.changeset/lazy-years-float.md b/.changeset/lazy-years-float.md new file mode 100644 index 0000000000..23bd77a0bb --- /dev/null +++ b/.changeset/lazy-years-float.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fix catalog filtering to allow searching entities by display name diff --git a/.changeset/lemon-bulldogs-study.md b/.changeset/lemon-bulldogs-study.md new file mode 100644 index 0000000000..7bb15b8193 --- /dev/null +++ b/.changeset/lemon-bulldogs-study.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': minor +--- + +Consistent title behaviour across CatalogTable, CursorPaginatedCatalogTable, and OffsetPaginatedCatalogTable. diff --git a/.changeset/loud-trainers-yawn.md b/.changeset/loud-trainers-yawn.md deleted file mode 100644 index b48f773caa..0000000000 --- a/.changeset/loud-trainers-yawn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -The `--successCache` option for the `repo test` and `repo lint` commands now use an additive store that keeps old entries around for a week before they are cleaned up automatically. diff --git a/.changeset/lucky-crabs-vanish.md b/.changeset/lucky-crabs-vanish.md new file mode 100644 index 0000000000..158200fb7e --- /dev/null +++ b/.changeset/lucky-crabs-vanish.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-scaffolder-backend-module-github': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/create-app': patch +--- + +Add github backend module to create-app and improve error messages diff --git a/.changeset/mean-shirts-design.md b/.changeset/mean-shirts-design.md new file mode 100644 index 0000000000..ea89c6ecfd --- /dev/null +++ b/.changeset/mean-shirts-design.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli-node': patch +--- + +add PackageManager and Lockfile interfaces for future use diff --git a/.changeset/mean-years-deliver.md b/.changeset/mean-years-deliver.md deleted file mode 100644 index 82b4a12688..0000000000 --- a/.changeset/mean-years-deliver.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Fix issue with token not being available because it's now non-enumerable diff --git a/.changeset/mighty-birds-rest.md b/.changeset/mighty-birds-rest.md new file mode 100644 index 0000000000..79f1bdd075 --- /dev/null +++ b/.changeset/mighty-birds-rest.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-notifications': minor +--- + +Switched to using the new `/notifications` endpoints. Be sure to update the `notifications` plugin backend before deploying this frontend plugin change. diff --git a/.changeset/mighty-jobs-unite.md b/.changeset/mighty-jobs-unite.md deleted file mode 100644 index c8e880ba3e..0000000000 --- a/.changeset/mighty-jobs-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Uses theme values to style the API definition schema so that theme overrides apply. diff --git a/.changeset/mighty-spoons-suffer.md b/.changeset/mighty-spoons-suffer.md deleted file mode 100644 index 5b03378568..0000000000 --- a/.changeset/mighty-spoons-suffer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Avoid page re-rendering when clicking on anchor links in the same documentation page. diff --git a/.changeset/neat-insects-cough.md b/.changeset/neat-insects-cough.md new file mode 100644 index 0000000000..fbdf214edb --- /dev/null +++ b/.changeset/neat-insects-cough.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Be more aggressive in dequeueing entities for stitching diff --git a/.changeset/new-pandas-perform.md b/.changeset/new-pandas-perform.md new file mode 100644 index 0000000000..797f34d6df --- /dev/null +++ b/.changeset/new-pandas-perform.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': minor +--- + +Fix invalid path and malformed flags bugs in api-reports.ts diff --git a/.changeset/new-rules-teach.md b/.changeset/new-rules-teach.md new file mode 100644 index 0000000000..cae0215bfc --- /dev/null +++ b/.changeset/new-rules-teach.md @@ -0,0 +1,8 @@ +--- +'@backstage/catalog-client': minor +'@backstage/plugin-catalog-backend': minor +'@backstage/plugin-events-backend': minor +'@backstage/plugin-search-backend': minor +--- + +Internal updates to generated code. diff --git a/.changeset/ninety-shirts-float.md b/.changeset/ninety-shirts-float.md deleted file mode 100644 index 4ff9a39560..0000000000 --- a/.changeset/ninety-shirts-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Align with type declaration of template filter/global function by supporting undefined as return value. diff --git a/.changeset/odd-apples-explain.md b/.changeset/odd-apples-explain.md new file mode 100644 index 0000000000..324d98b0f6 --- /dev/null +++ b/.changeset/odd-apples-explain.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-auth-node': patch +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-devtools-backend': patch +'@backstage/plugin-signals-backend': patch +--- + +Restrict `@types/express` version range from `*` to `^4.17.6`. diff --git a/.changeset/odd-days-push.md b/.changeset/odd-days-push.md new file mode 100644 index 0000000000..fd46de029f --- /dev/null +++ b/.changeset/odd-days-push.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-notifications-backend': patch +--- + +Deprecated root '/' endpoints, moving them under `/notifications` instead. diff --git a/.changeset/odd-worms-peel.md b/.changeset/odd-worms-peel.md new file mode 100644 index 0000000000..90e05f1e51 --- /dev/null +++ b/.changeset/odd-worms-peel.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Correctly report stitching queue length diff --git a/.changeset/old-pandas-act.md b/.changeset/old-pandas-act.md new file mode 100644 index 0000000000..7b88652342 --- /dev/null +++ b/.changeset/old-pandas-act.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-github': patch +--- + +Minor spell fix in action parameters diff --git a/.changeset/old-taxis-exist.md b/.changeset/old-taxis-exist.md new file mode 100644 index 0000000000..f2c7ac1f02 --- /dev/null +++ b/.changeset/old-taxis-exist.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-events-backend': patch +'@backstage/plugin-events-node': patch +--- + +Allow configuring a timeout for event bus polling requests. This can be set like so in your app-config: + +```yaml +events: + notifyTimeoutMs: 30000 +``` diff --git a/.changeset/olive-berries-jump.md b/.changeset/olive-berries-jump.md new file mode 100644 index 0000000000..d8e9fb1da6 --- /dev/null +++ b/.changeset/olive-berries-jump.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Added support for the Search bar in docs residing in the entity page tab, and not only the global "/docs" page. diff --git a/.changeset/orange-coins-confess.md b/.changeset/orange-coins-confess.md new file mode 100644 index 0000000000..8e8aefb096 --- /dev/null +++ b/.changeset/orange-coins-confess.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-devtools-backend': minor +--- + +**BREAKING** Removed support for what is known as the legacy backend, please use the New Backend System. diff --git a/.changeset/orange-moles-kick.md b/.changeset/orange-moles-kick.md new file mode 100644 index 0000000000..6e6054418e --- /dev/null +++ b/.changeset/orange-moles-kick.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Emit scaffolder events using the optional `EventsService` diff --git a/.changeset/perfect-fishes-kick.md b/.changeset/perfect-fishes-kick.md new file mode 100644 index 0000000000..b9e7ade993 --- /dev/null +++ b/.changeset/perfect-fishes-kick.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-notifications-backend': minor +--- + +**BREAKING**: Removed redundant `/health` endpoint, switch to using [the built-in endpoint instead](https://backstage.io/docs/backend-system/core-services/root-health). diff --git a/.changeset/perfect-goats-mate.md b/.changeset/perfect-goats-mate.md deleted file mode 100644 index 6ad2884d08..0000000000 --- a/.changeset/perfect-goats-mate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': minor ---- - -The SupportButton component will now be hidden if no support config is specified in app-config diff --git a/.changeset/pink-bees-shake.md b/.changeset/pink-bees-shake.md new file mode 100644 index 0000000000..2d87b7ef6c --- /dev/null +++ b/.changeset/pink-bees-shake.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-node': patch +--- + +Make sure that isomorphic git push commands are not proxied. diff --git a/.changeset/pink-pets-jump.md b/.changeset/pink-pets-jump.md new file mode 100644 index 0000000000..d9bb97e36e --- /dev/null +++ b/.changeset/pink-pets-jump.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Support `connection.type: cloudsql` in database client for usage with `@google-cloud/cloud-sql-connector` and `iam` auth diff --git a/.changeset/forty-spoons-burn.md b/.changeset/polite-foxes-buy.md similarity index 59% rename from .changeset/forty-spoons-burn.md rename to .changeset/polite-foxes-buy.md index 627cb31970..a67af204e0 100644 --- a/.changeset/forty-spoons-burn.md +++ b/.changeset/polite-foxes-buy.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder-backend': patch --- -Fix tasks listing with postgres +Add fs:readdir to scaffolder startup diff --git a/.changeset/poor-hounds-jump.md b/.changeset/poor-hounds-jump.md new file mode 100644 index 0000000000..2f1abb8ce8 --- /dev/null +++ b/.changeset/poor-hounds-jump.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Bumped the version range for `html-webpack-plugin` to fix the `htmlPluginExports.getCompilationHooks is not a function` error when using experimental Rspack. diff --git a/.changeset/popular-donkeys-rhyme.md b/.changeset/popular-donkeys-rhyme.md new file mode 100644 index 0000000000..90195ff999 --- /dev/null +++ b/.changeset/popular-donkeys-rhyme.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Added `@backstage/cli/config/prettier` as a replacement for `@spotify/prettier-config`, but with the same configuration. diff --git a/.changeset/pre.json b/.changeset/pre.json index 9a94b5f4e9..241667c2c5 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -2,197 +2,313 @@ "mode": "pre", "tag": "next", "initialVersions": { - "example-app": "0.2.102", - "@backstage/app-defaults": "1.5.12", - "example-app-next": "0.0.16", - "app-next-example-plugin": "0.0.16", - "example-backend": "0.0.31", - "@backstage/backend-app-api": "1.0.1", - "@backstage/backend-defaults": "0.5.1", + "example-app": "0.2.103", + "@backstage/app-defaults": "1.5.13", + "example-app-next": "0.0.17", + "app-next-example-plugin": "0.0.17", + "example-backend": "0.0.32", + "@backstage/backend-app-api": "1.0.2", + "@backstage/backend-defaults": "0.5.3", "@backstage/backend-dev-utils": "0.1.5", - "@backstage/backend-dynamic-feature-service": "0.4.2", - "example-backend-legacy": "0.2.103", - "@backstage/backend-openapi-utils": "0.2.0", - "@backstage/backend-plugin-api": "1.0.1", - "@backstage/backend-test-utils": "1.0.1", - "@backstage/catalog-client": "1.7.1", - "@backstage/catalog-model": "1.7.0", - "@backstage/cli": "0.28.0", - "@backstage/cli-common": "0.1.14", - "@backstage/cli-node": "0.2.9", - "@backstage/codemods": "0.1.51", - "@backstage/config": "1.2.0", - "@backstage/config-loader": "1.9.1", - "@backstage/core-app-api": "1.15.1", - "@backstage/core-compat-api": "0.3.1", - "@backstage/core-components": "0.15.1", - "@backstage/core-plugin-api": "1.10.0", - "@backstage/create-app": "0.5.21", - "@backstage/dev-utils": "1.1.2", - "e2e-test": "0.2.21", + "@backstage/backend-dynamic-feature-service": "0.5.0", + "example-backend-legacy": "0.2.104", + "@backstage/backend-openapi-utils": "0.3.0", + "@backstage/backend-plugin-api": "1.0.2", + "@backstage/backend-test-utils": "1.1.0", + "@backstage/catalog-client": "1.8.0", + "@backstage/catalog-model": "1.7.1", + "@backstage/cli": "0.29.0", + "@backstage/cli-common": "0.1.15", + "@backstage/cli-node": "0.2.10", + "@backstage/codemods": "0.1.52", + "@backstage/config": "1.3.0", + "@backstage/config-loader": "1.9.2", + "@backstage/core-app-api": "1.15.2", + "@backstage/core-compat-api": "0.3.2", + "@backstage/core-components": "0.16.0", + "@backstage/core-plugin-api": "1.10.1", + "@backstage/create-app": "0.5.22", + "@backstage/dev-utils": "1.1.3", + "e2e-test": "0.2.22", "@backstage/e2e-test-utils": "0.1.1", - "@backstage/errors": "1.2.4", + "@backstage/errors": "1.2.5", "@backstage/eslint-plugin": "0.1.10", - "@backstage/frontend-app-api": "0.10.0", - "@backstage/frontend-defaults": "0.1.1", - "@internal/frontend": "0.0.2", - "@backstage/frontend-plugin-api": "0.9.0", - "@backstage/frontend-test-utils": "0.2.1", - "@backstage/integration": "1.15.1", - "@backstage/integration-aws-node": "0.1.12", - "@backstage/integration-react": "1.2.0", + "@backstage/frontend-app-api": "0.10.1", + "@backstage/frontend-defaults": "0.1.2", + "@internal/frontend": "0.0.3", + "@backstage/frontend-plugin-api": "0.9.1", + "@backstage/frontend-test-utils": "0.2.2", + "@backstage/integration": "1.15.2", + "@backstage/integration-aws-node": "0.1.13", + "@backstage/integration-react": "1.2.1", "@internal/opaque": "0.0.1", "@backstage/release-manifests": "0.0.11", - "@backstage/repo-tools": "0.10.0", - "@internal/scaffolder": "0.0.2", - "@techdocs/cli": "1.8.20", - "techdocs-cli-embedded-app": "0.2.101", - "@backstage/test-utils": "1.7.0", - "@backstage/theme": "0.6.0", - "@backstage/types": "1.1.1", + "@backstage/repo-tools": "0.11.0", + "@internal/scaffolder": "0.0.3", + "@techdocs/cli": "1.8.22", + "techdocs-cli-embedded-app": "0.2.102", + "@backstage/test-utils": "1.7.1", + "@backstage/theme": "0.6.1", + "@backstage/types": "1.2.0", "@backstage/version-bridge": "1.0.10", - "yarn-plugin-backstage": "0.0.2", - "@backstage/plugin-api-docs": "0.11.11", + "yarn-plugin-backstage": "0.0.3", + "@backstage/plugin-api-docs": "0.12.0", "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.8", - "@backstage/plugin-app": "0.1.1", - "@backstage/plugin-app-backend": "0.3.76", - "@backstage/plugin-app-node": "0.1.26", - "@backstage/plugin-app-visualizer": "0.1.11", - "@backstage/plugin-auth-backend": "0.23.1", - "@backstage/plugin-auth-backend-module-atlassian-provider": "0.3.1", - "@backstage/plugin-auth-backend-module-auth0-provider": "0.1.1", - "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.1.1", - "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.3.1", - "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.3.1", - "@backstage/plugin-auth-backend-module-github-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-gitlab-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-google-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-guest-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-microsoft-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-oauth2-provider": "0.3.1", - "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-oidc-provider": "0.3.1", - "@backstage/plugin-auth-backend-module-okta-provider": "0.1.1", - "@backstage/plugin-auth-backend-module-onelogin-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-pinniped-provider": "0.2.1", - "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.4.0", - "@backstage/plugin-auth-node": "0.5.3", - "@backstage/plugin-auth-react": "0.1.7", - "@backstage/plugin-bitbucket-cloud-common": "0.2.24", - "@backstage/plugin-catalog": "1.24.0", - "@backstage/plugin-catalog-backend": "1.27.0", - "@backstage/plugin-catalog-backend-module-aws": "0.4.3", - "@backstage/plugin-catalog-backend-module-azure": "0.2.3", - "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.4.1", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.4.0", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.2.3", - "@backstage/plugin-catalog-backend-module-gcp": "0.3.1", - "@backstage/plugin-catalog-backend-module-gerrit": "0.2.3", - "@backstage/plugin-catalog-backend-module-github": "0.7.5", - "@backstage/plugin-catalog-backend-module-github-org": "0.3.2", - "@backstage/plugin-catalog-backend-module-gitlab": "0.4.3", - "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.1", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.5.5", - "@backstage/plugin-catalog-backend-module-ldap": "0.9.1", - "@backstage/plugin-catalog-backend-module-logs": "0.1.2", - "@backstage/plugin-catalog-backend-module-msgraph": "0.6.3", - "@backstage/plugin-catalog-backend-module-openapi": "0.2.2", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.3", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.1", - "@backstage/plugin-catalog-backend-module-unprocessed": "0.5.1", - "@backstage/plugin-catalog-common": "1.1.0", - "@backstage/plugin-catalog-graph": "0.4.11", - "@backstage/plugin-catalog-import": "0.12.5", - "@backstage/plugin-catalog-node": "1.13.1", - "@backstage/plugin-catalog-react": "1.14.0", - "@backstage/plugin-catalog-unprocessed-entities": "0.2.9", - "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.4", - "@backstage/plugin-config-schema": "0.1.60", - "@backstage/plugin-devtools": "0.1.19", - "@backstage/plugin-devtools-backend": "0.4.1", - "@backstage/plugin-devtools-common": "0.1.12", - "@backstage/plugin-events-backend": "0.3.13", - "@backstage/plugin-events-backend-module-aws-sqs": "0.4.3", - "@backstage/plugin-events-backend-module-azure": "0.2.12", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.12", - "@backstage/plugin-events-backend-module-gerrit": "0.2.12", - "@backstage/plugin-events-backend-module-github": "0.2.12", - "@backstage/plugin-events-backend-module-gitlab": "0.2.12", - "@backstage/plugin-events-backend-test-utils": "0.1.36", - "@backstage/plugin-events-node": "0.4.1", - "@internal/plugin-todo-list": "1.0.32", - "@internal/plugin-todo-list-backend": "1.0.32", - "@internal/plugin-todo-list-common": "1.0.21", - "@backstage/plugin-home": "0.8.0", - "@backstage/plugin-home-react": "0.1.18", - "@backstage/plugin-kubernetes": "0.11.16", - "@backstage/plugin-kubernetes-backend": "0.18.7", - "@backstage/plugin-kubernetes-cluster": "0.0.17", - "@backstage/plugin-kubernetes-common": "0.8.3", - "@backstage/plugin-kubernetes-node": "0.1.20", - "@backstage/plugin-kubernetes-react": "0.4.4", - "@backstage/plugin-notifications": "0.3.2", - "@backstage/plugin-notifications-backend": "0.4.1", - "@backstage/plugin-notifications-backend-module-email": "0.3.1", - "@backstage/plugin-notifications-common": "0.0.5", - "@backstage/plugin-notifications-node": "0.2.7", - "@backstage/plugin-org": "0.6.31", - "@backstage/plugin-org-react": "0.1.30", - "@backstage/plugin-permission-backend": "0.5.50", - "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.1", - "@backstage/plugin-permission-common": "0.8.1", - "@backstage/plugin-permission-node": "0.8.4", - "@backstage/plugin-permission-react": "0.4.27", - "@backstage/plugin-proxy-backend": "0.5.7", - "@backstage/plugin-scaffolder": "1.26.0", - "@backstage/plugin-scaffolder-backend": "1.26.0", - "@backstage/plugin-scaffolder-backend-module-azure": "0.2.1", - "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.1", - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.1", - "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.1", - "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.1", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.1", - "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.1", - "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.1", - "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.1", - "@backstage/plugin-scaffolder-backend-module-github": "0.5.1", - "@backstage/plugin-scaffolder-backend-module-gitlab": "0.6.0", - "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.1", - "@backstage/plugin-scaffolder-backend-module-rails": "0.5.1", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.1", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.1", - "@backstage/plugin-scaffolder-common": "1.5.6", - "@backstage/plugin-scaffolder-node": "0.5.0", - "@backstage/plugin-scaffolder-node-test-utils": "0.1.13", - "@backstage/plugin-scaffolder-react": "1.13.0", - "@backstage/plugin-search": "1.4.18", - "@backstage/plugin-search-backend": "1.6.0", - "@backstage/plugin-search-backend-module-catalog": "0.2.3", - "@backstage/plugin-search-backend-module-elasticsearch": "1.6.0", - "@backstage/plugin-search-backend-module-explore": "0.2.3", - "@backstage/plugin-search-backend-module-pg": "0.5.36", - "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.1", - "@backstage/plugin-search-backend-module-techdocs": "0.3.0", - "@backstage/plugin-search-backend-node": "1.3.3", - "@backstage/plugin-search-common": "1.2.14", - "@backstage/plugin-search-react": "1.8.1", - "@backstage/plugin-signals": "0.0.11", - "@backstage/plugin-signals-backend": "0.2.1", - "@backstage/plugin-signals-node": "0.1.12", - "@backstage/plugin-signals-react": "0.0.6", - "@backstage/plugin-techdocs": "1.11.0", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.40", - "@backstage/plugin-techdocs-backend": "1.11.0", + "@backstage/plugin-app": "0.1.2", + "@backstage/plugin-app-backend": "0.4.0", + "@backstage/plugin-app-node": "0.1.27", + "@backstage/plugin-app-visualizer": "0.1.12", + "@backstage/plugin-auth-backend": "0.24.0", + "@backstage/plugin-auth-backend-module-atlassian-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-auth0-provider": "0.1.2", + "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.3.0", + "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.1.2", + "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-github-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-gitlab-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-google-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-guest-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-microsoft-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-oauth2-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-oidc-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-okta-provider": "0.1.2", + "@backstage/plugin-auth-backend-module-onelogin-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-pinniped-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.4.1", + "@backstage/plugin-auth-node": "0.5.4", + "@backstage/plugin-auth-react": "0.1.8", + "@backstage/plugin-bitbucket-cloud-common": "0.2.25", + "@backstage/plugin-catalog": "1.25.0", + "@backstage/plugin-catalog-backend": "1.28.0", + "@backstage/plugin-catalog-backend-module-aws": "0.4.5", + "@backstage/plugin-catalog-backend-module-azure": "0.2.4", + "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.4.2", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.4.2", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.2.4", + "@backstage/plugin-catalog-backend-module-gcp": "0.3.2", + "@backstage/plugin-catalog-backend-module-gerrit": "0.2.4", + "@backstage/plugin-catalog-backend-module-github": "0.7.7", + "@backstage/plugin-catalog-backend-module-github-org": "0.3.4", + "@backstage/plugin-catalog-backend-module-gitlab": "0.5.0", + "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.3", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.6.0", + "@backstage/plugin-catalog-backend-module-ldap": "0.10.0", + "@backstage/plugin-catalog-backend-module-logs": "0.1.4", + "@backstage/plugin-catalog-backend-module-msgraph": "0.6.4", + "@backstage/plugin-catalog-backend-module-openapi": "0.2.4", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.4", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.2", + "@backstage/plugin-catalog-backend-module-unprocessed": "0.5.2", + "@backstage/plugin-catalog-common": "1.1.1", + "@backstage/plugin-catalog-graph": "0.4.12", + "@backstage/plugin-catalog-import": "0.12.6", + "@backstage/plugin-catalog-node": "1.14.0", + "@backstage/plugin-catalog-react": "1.14.1", + "@backstage/plugin-catalog-unprocessed-entities": "0.2.10", + "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.5", + "@backstage/plugin-config-schema": "0.1.61", + "@backstage/plugin-devtools": "0.1.20", + "@backstage/plugin-devtools-backend": "0.4.2", + "@backstage/plugin-devtools-common": "0.1.13", + "@backstage/plugin-events-backend": "0.3.16", + "@backstage/plugin-events-backend-module-aws-sqs": "0.4.5", + "@backstage/plugin-events-backend-module-azure": "0.2.14", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.14", + "@backstage/plugin-events-backend-module-gerrit": "0.2.14", + "@backstage/plugin-events-backend-module-github": "0.2.14", + "@backstage/plugin-events-backend-module-gitlab": "0.2.14", + "@backstage/plugin-events-backend-test-utils": "0.1.38", + "@backstage/plugin-events-node": "0.4.5", + "@internal/plugin-todo-list": "1.0.33", + "@internal/plugin-todo-list-backend": "1.0.33", + "@internal/plugin-todo-list-common": "1.0.22", + "@backstage/plugin-home": "0.8.1", + "@backstage/plugin-home-react": "0.1.19", + "@backstage/plugin-kubernetes": "0.12.0", + "@backstage/plugin-kubernetes-backend": "0.19.0", + "@backstage/plugin-kubernetes-cluster": "0.0.18", + "@backstage/plugin-kubernetes-common": "0.9.0", + "@backstage/plugin-kubernetes-node": "0.2.0", + "@backstage/plugin-kubernetes-react": "0.5.0", + "@backstage/plugin-notifications": "0.4.0", + "@backstage/plugin-notifications-backend": "0.4.3", + "@backstage/plugin-notifications-backend-module-email": "0.3.3", + "@backstage/plugin-notifications-common": "0.0.6", + "@backstage/plugin-notifications-node": "0.2.9", + "@backstage/plugin-org": "0.6.32", + "@backstage/plugin-org-react": "0.1.31", + "@backstage/plugin-permission-backend": "0.5.51", + "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.2", + "@backstage/plugin-permission-common": "0.8.2", + "@backstage/plugin-permission-node": "0.8.5", + "@backstage/plugin-permission-react": "0.4.28", + "@backstage/plugin-proxy-backend": "0.5.8", + "@backstage/plugin-scaffolder": "1.27.0", + "@backstage/plugin-scaffolder-backend": "1.27.0", + "@backstage/plugin-scaffolder-backend-module-azure": "0.2.2", + "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.2", + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.2", + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.2", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.2", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.3", + "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.2", + "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.2", + "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.2", + "@backstage/plugin-scaffolder-backend-module-github": "0.5.2", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.6.1", + "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.3", + "@backstage/plugin-scaffolder-backend-module-rails": "0.5.2", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.2", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.3", + "@backstage/plugin-scaffolder-common": "1.5.7", + "@backstage/plugin-scaffolder-node": "0.6.0", + "@backstage/plugin-scaffolder-node-test-utils": "0.1.15", + "@backstage/plugin-scaffolder-react": "1.14.0", + "@backstage/plugin-search": "1.4.19", + "@backstage/plugin-search-backend": "1.7.0", + "@backstage/plugin-search-backend-module-catalog": "0.2.5", + "@backstage/plugin-search-backend-module-elasticsearch": "1.6.2", + "@backstage/plugin-search-backend-module-explore": "0.2.5", + "@backstage/plugin-search-backend-module-pg": "0.5.38", + "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.3", + "@backstage/plugin-search-backend-module-techdocs": "0.3.2", + "@backstage/plugin-search-backend-node": "1.3.5", + "@backstage/plugin-search-common": "1.2.15", + "@backstage/plugin-search-react": "1.8.2", + "@backstage/plugin-signals": "0.0.12", + "@backstage/plugin-signals-backend": "0.2.3", + "@backstage/plugin-signals-node": "0.1.14", + "@backstage/plugin-signals-react": "0.0.7", + "@backstage/plugin-techdocs": "1.11.1", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.41", + "@backstage/plugin-techdocs-backend": "1.11.2", "@backstage/plugin-techdocs-common": "0.1.0", - "@backstage/plugin-techdocs-module-addons-contrib": "1.1.16", - "@backstage/plugin-techdocs-node": "1.12.12", - "@backstage/plugin-techdocs-react": "1.2.9", - "@backstage/plugin-user-settings": "0.8.14", - "@backstage/plugin-user-settings-backend": "0.2.25", - "@backstage/plugin-user-settings-common": "0.0.1" + "@backstage/plugin-techdocs-module-addons-contrib": "1.1.17", + "@backstage/plugin-techdocs-node": "1.12.13", + "@backstage/plugin-techdocs-react": "1.2.10", + "@backstage/plugin-user-settings": "0.8.15", + "@backstage/plugin-user-settings-backend": "0.2.27", + "@backstage/plugin-user-settings-common": "0.0.1", + "@backstage/canon": "0.0.0" }, - "changesets": [] + "changesets": [ + "beige-chicken-type", + "brave-maps-deliver", + "brave-teachers-mate", + "brown-monkeys-ring", + "chatty-weeks-impress", + "chilly-games-trade", + "cold-icons-worry", + "cold-jeans-stare", + "cool-days-sparkle", + "cuddly-chicken-wink", + "cuddly-schools-scream", + "curly-hats-tell", + "cyan-rocks-divide", + "dry-badgers-prove", + "dry-needles-taste", + "dull-bulldogs-learn", + "dull-ties-film", + "empty-bugs-deliver", + "empty-colts-promise", + "empty-ways-push", + "fast-cheetahs-deliver", + "few-colts-train", + "few-pillows-remember", + "fifty-countries-decide", + "five-goats-travel", + "fluffy-cobras-sort", + "fluffy-falcons-shout", + "fluffy-zebras-cheer", + "forty-apples-complain", + "forty-ravens-fry", + "friendly-dots-thank", + "gold-crabs-agree", + "gold-stingrays-cross", + "gorgeous-panthers-count", + "great-buttons-cross", + "green-carpets-smell", + "happy-forks-listen", + "healthy-years-begin", + "heavy-needles-poke", + "heavy-tomatoes-laugh", + "honest-hornets-double", + "hungry-hairs-wait", + "itchy-rats-pump", + "itchy-ravens-punch", + "khaki-ladybugs-swim", + "khaki-shrimps-tease", + "large-birds-watch", + "lazy-pants-attack", + "lazy-years-float", + "lemon-bulldogs-study", + "lucky-crabs-vanish", + "mean-shirts-design", + "mighty-birds-rest", + "neat-insects-cough", + "new-pandas-perform", + "new-rules-teach", + "odd-apples-explain", + "odd-days-push", + "odd-worms-peel", + "old-taxis-exist", + "olive-berries-jump", + "orange-coins-confess", + "orange-moles-kick", + "perfect-fishes-kick", + "pink-bees-shake", + "pink-pets-jump", + "polite-foxes-buy", + "poor-hounds-jump", + "popular-donkeys-rhyme", + "pretty-kiwis-travel", + "real-shirts-cry", + "renovate-998a490", + "renovate-9a9f6ed", + "renovate-a5f3bd6", + "renovate-e689a2c", + "rich-beers-eat", + "rich-maps-invite", + "rich-suns-drive", + "rollup-fix-forward", + "rollup-release-borked-packages", + "rude-pears-tie", + "seven-bulldogs-count", + "short-baboons-search", + "shy-teachers-count", + "silent-pigs-collect", + "silver-actors-care", + "six-eels-add", + "sixty-shirts-rescue", + "slow-horses-destroy", + "slow-singers-jump", + "small-boxes-enjoy", + "smart-islands-judge", + "smooth-bikes-sparkle", + "spotty-shoes-exercise", + "stale-hats-exist", + "stale-rats-tease", + "strange-brooms-check", + "strong-papayas-remember", + "swift-kangaroos-drop", + "tall-comics-heal", + "ten-keys-nail", + "thick-items-bathe", + "thin-hotels-explode", + "tiny-mice-run", + "twenty-monkeys-applaud", + "twenty-parents-judge", + "violet-snakes-laugh", + "warm-pumpkins-bathe", + "weak-avocados-suffer", + "weak-meals-doubt", + "wet-rats-exist", + "young-carrots-collect", + "young-cobras-add", + "young-months-admire" + ] } diff --git a/.changeset/pretty-kiwis-travel.md b/.changeset/pretty-kiwis-travel.md new file mode 100644 index 0000000000..f3d5cbeb27 --- /dev/null +++ b/.changeset/pretty-kiwis-travel.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Implements the `DefaultRootLifecycleService.addBeforeShutdownHook` method, and updates `DefaultRootHttpRouterService` and `DefaultRootHealthService` to listen to that event to stop accepting traffic and close service connections. diff --git a/.changeset/quick-cougars-fry.md b/.changeset/quick-cougars-fry.md deleted file mode 100644 index 6ae8b66eda..0000000000 --- a/.changeset/quick-cougars-fry.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Improve Starred Entities UI to reduce whitespace and provide more context on the entities: - -- Use the Entity Presentation API (via ``) to display the entity's name -- Component's `kind` and `spec.type` are displayed as a secondary text -- List items are condensed to reduce unnecessary spacing diff --git a/.changeset/real-shirts-cry.md b/.changeset/real-shirts-cry.md new file mode 100644 index 0000000000..78056368ae --- /dev/null +++ b/.changeset/real-shirts-cry.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli-node': patch +--- + +Internal refactor diff --git a/.changeset/red-fishes-press.md b/.changeset/red-fishes-press.md deleted file mode 100644 index 8493ddf446..0000000000 --- a/.changeset/red-fishes-press.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Added DomPurify sanitizer configuration for custom elements implementing RFC https://github.com/backstage/backstage/issues/26988. -See https://backstage.io/docs/features/techdocs/how-to-guides#how-to-enable-custom-elements-in-techdocs for how to enable it in the configuration. diff --git a/.changeset/renovate-3d822ce.md b/.changeset/renovate-3d822ce.md deleted file mode 100644 index 805b924b3b..0000000000 --- a/.changeset/renovate-3d822ce.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-elasticsearch': patch ---- - -Updated dependency `@short.io/opensearch-mock` to `^0.4.0`. diff --git a/.changeset/renovate-998a490.md b/.changeset/renovate-998a490.md new file mode 100644 index 0000000000..8def7d49cd --- /dev/null +++ b/.changeset/renovate-998a490.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Updated dependency `flatted` to `3.3.2`. diff --git a/.changeset/renovate-9a9f6ed.md b/.changeset/renovate-9a9f6ed.md new file mode 100644 index 0000000000..9dad75cc3e --- /dev/null +++ b/.changeset/renovate-9a9f6ed.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Updated dependency `@module-federation/enhanced` to `^0.8.0`. diff --git a/.changeset/renovate-a5f3bd6.md b/.changeset/renovate-a5f3bd6.md new file mode 100644 index 0000000000..9911fd311f --- /dev/null +++ b/.changeset/renovate-a5f3bd6.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-home-react': patch +'@backstage/plugin-home': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Updated dependency `@rjsf/utils` to `5.23.1`. +Updated dependency `@rjsf/core` to `5.23.1`. +Updated dependency `@rjsf/material-ui` to `5.23.1`. +Updated dependency `@rjsf/validator-ajv8` to `5.23.1`. diff --git a/.changeset/renovate-e689a2c.md b/.changeset/renovate-e689a2c.md new file mode 100644 index 0000000000..7e4f999289 --- /dev/null +++ b/.changeset/renovate-e689a2c.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-compat-api': patch +--- + +Updated dependency `@oriflame/backstage-plugin-score-card` to `^0.9.0`. diff --git a/.changeset/rich-beers-eat.md b/.changeset/rich-beers-eat.md new file mode 100644 index 0000000000..55115e929e --- /dev/null +++ b/.changeset/rich-beers-eat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Wire up the events together in the new backend system diff --git a/.changeset/rich-maps-invite.md b/.changeset/rich-maps-invite.md new file mode 100644 index 0000000000..927d8e9382 --- /dev/null +++ b/.changeset/rich-maps-invite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-permission-node': patch +--- + +The `createPermissionIntegrationRouter` function now detects and prevents the exposure of duplicate permissions. diff --git a/.changeset/rich-suns-drive.md b/.changeset/rich-suns-drive.md new file mode 100644 index 0000000000..0b2eb85a5b --- /dev/null +++ b/.changeset/rich-suns-drive.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-openapi-utils': minor +--- + +Fixed a Typescript error when trying to use the new OpenAPI server-side generated code. diff --git a/.changeset/rollup-fix-forward.md b/.changeset/rollup-fix-forward.md new file mode 100644 index 0000000000..681812a134 --- /dev/null +++ b/.changeset/rollup-fix-forward.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Update `rollup` to avoid issues with build output when running `backstage-cli package build`. diff --git a/.changeset/rollup-release-borked-packages.md b/.changeset/rollup-release-borked-packages.md new file mode 100644 index 0000000000..f13d7d2de7 --- /dev/null +++ b/.changeset/rollup-release-borked-packages.md @@ -0,0 +1,12 @@ +--- +'@backstage/cli': patch +'@backstage/frontend-plugin-api': patch +'@backstage/repo-tools': patch +'@backstage/theme': patch +'@backstage/plugin-app': patch +'@backstage/plugin-catalog-backend-module-ldap': patch +'@backstage/plugin-scaffolder-backend-module-bitbucket': patch +'@backstage/plugin-techdocs-node': patch +--- + +Fixed a bug that caused missing code in published packages. diff --git a/.changeset/rude-pears-tie.md b/.changeset/rude-pears-tie.md new file mode 100644 index 0000000000..c0cb970727 --- /dev/null +++ b/.changeset/rude-pears-tie.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-defaults': patch +--- + +Remove use of the `stoppable` library on the `DefaultRootHttpRouterService` as Node's native http server [close](https://nodejs.org/api/http.html#serverclosecallback) method already drains requests. +Also, we pass a new `lifecycleMiddleware` to the `rootHttpRouterServiceFactory` configure function that must be called manually if you don't call `applyDefaults`. diff --git a/.changeset/seven-bulldogs-count.md b/.changeset/seven-bulldogs-count.md new file mode 100644 index 0000000000..9fa888767b --- /dev/null +++ b/.changeset/seven-bulldogs-count.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Add support for `--output-file` option from ESLint to `package lint` and `repo lint` commands. diff --git a/.changeset/short-baboons-search.md b/.changeset/short-baboons-search.md new file mode 100644 index 0000000000..9855ad6df7 --- /dev/null +++ b/.changeset/short-baboons-search.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': minor +--- + +All middleware used by the default `coreServices.http` is now exported for use by custom implementations. diff --git a/.changeset/shy-pots-speak.md b/.changeset/shy-pots-speak.md deleted file mode 100644 index 8eceacb9ec..0000000000 --- a/.changeset/shy-pots-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Removed unused `msw` dependency. diff --git a/.changeset/shy-rats-hear.md b/.changeset/shy-rats-hear.md deleted file mode 100644 index 460d70c56a..0000000000 --- a/.changeset/shy-rats-hear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Link to proper package in `rootLoggerServiceFactory` doc string. diff --git a/.changeset/shy-teachers-count.md b/.changeset/shy-teachers-count.md new file mode 100644 index 0000000000..7723fe377b --- /dev/null +++ b/.changeset/shy-teachers-count.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': minor +--- + +**BREAKING**: Upgraded the `gitbeaker` library to version 41. As part of this, the `scopes` parameter to the `gitlab:projectDeployToken:create` is no longer optional, so you will have to pass it a value (for example `['read_repository']`). diff --git a/.changeset/silent-pigs-collect.md b/.changeset/silent-pigs-collect.md new file mode 100644 index 0000000000..9010605ffb --- /dev/null +++ b/.changeset/silent-pigs-collect.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-node': patch +--- + +Removed unnecessary dependency on `@backstage/backend-defaults`. diff --git a/.changeset/silent-wasps-whisper.md b/.changeset/silent-wasps-whisper.md deleted file mode 100644 index 33620139e7..0000000000 --- a/.changeset/silent-wasps-whisper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Revert the change of the option label for `EntityPicker` diff --git a/.changeset/silver-actors-care.md b/.changeset/silver-actors-care.md new file mode 100644 index 0000000000..5391a1d57b --- /dev/null +++ b/.changeset/silver-actors-care.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fixed an issue where `` would re-render its children on page load for smaller screens, potentially leading to unnecessary additional backend requests. diff --git a/.changeset/six-eels-add.md b/.changeset/six-eels-add.md new file mode 100644 index 0000000000..fa0481b757 --- /dev/null +++ b/.changeset/six-eels-add.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Remove backend-common package from incremental-ingestion plugin and update related code diff --git a/.changeset/sixty-shirts-rescue.md b/.changeset/sixty-shirts-rescue.md new file mode 100644 index 0000000000..b6c1443eea --- /dev/null +++ b/.changeset/sixty-shirts-rescue.md @@ -0,0 +1,41 @@ +--- +'@backstage/plugin-auth-backend-module-cloudflare-access-provider': patch +'@backstage/plugin-auth-backend-module-bitbucket-server-provider': patch +'@backstage/plugin-search-backend-module-stack-overflow-collator': patch +'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch +'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +'@backstage/plugin-auth-backend-module-microsoft-provider': patch +'@backstage/plugin-auth-backend-module-aws-alb-provider': patch +'@backstage/plugin-scaffolder-backend-module-bitbucket': patch +'@backstage/plugin-scaffolder-backend-module-gerrit': patch +'@backstage/plugin-scaffolder-backend-module-sentry': patch +'@backstage/plugin-catalog-backend-module-puppetdb': patch +'@backstage/plugin-scaffolder-backend-module-gitea': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-search-backend-module-techdocs': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-search-backend-module-explore': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-notifications-backend': patch +'@backstage/plugin-notifications-node': patch +'@backstage/plugin-permission-backend': patch +'@backstage/backend-app-api': patch +'@backstage/plugin-devtools-backend': patch +'@backstage/plugin-techdocs-backend': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-signals-backend': patch +'@backstage/config-loader': patch +'@backstage/plugin-proxy-backend': patch +'@backstage/plugin-auth-backend': patch +'@backstage/create-app': patch +'@backstage/plugin-app-backend': patch +'@backstage/plugin-auth-node': patch +'@backstage/cli': patch +'@backstage/backend-defaults': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch +--- + +Use native fetch instead of node-fetch diff --git a/.changeset/slimy-jobs-scream.md b/.changeset/slimy-jobs-scream.md deleted file mode 100644 index e20119fed4..0000000000 --- a/.changeset/slimy-jobs-scream.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-techdocs-react': patch -'@backstage/plugin-techdocs': patch ---- - -Fix an issue that caused the current documentation page to be re-rendered when navigating to -another one. diff --git a/.changeset/slow-horses-destroy.md b/.changeset/slow-horses-destroy.md new file mode 100644 index 0000000000..fe23d6cf27 --- /dev/null +++ b/.changeset/slow-horses-destroy.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-kubernetes-backend': patch +--- + +Create a `dev/index.ts` entrypoint for `yarn start` diff --git a/.changeset/slow-mayflies-sleep.md b/.changeset/slow-mayflies-sleep.md deleted file mode 100644 index ebfb9d12d4..0000000000 --- a/.changeset/slow-mayflies-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': minor ---- - -Adds a `--watch` mode to the `schema openapi generate` command for a better local schema writing experience. diff --git a/.changeset/slow-shrimps-call.md b/.changeset/slow-shrimps-call.md deleted file mode 100644 index 7e04633307..0000000000 --- a/.changeset/slow-shrimps-call.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-notifications-backend': patch -'@backstage/plugin-notifications-common': patch -'@backstage/plugin-notifications': patch ---- - -Add support for user specific notification settings diff --git a/.changeset/slow-singers-jump.md b/.changeset/slow-singers-jump.md new file mode 100644 index 0000000000..2eef032d7b --- /dev/null +++ b/.changeset/slow-singers-jump.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Fetch all facets in a single database query diff --git a/.changeset/small-boxes-enjoy.md b/.changeset/small-boxes-enjoy.md new file mode 100644 index 0000000000..819e247d49 --- /dev/null +++ b/.changeset/small-boxes-enjoy.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +When parsing filters, do not make redundant `anyOf` and `allOf` nodes when there's only a single entry within them diff --git a/.changeset/smart-islands-judge.md b/.changeset/smart-islands-judge.md new file mode 100644 index 0000000000..8b21666c4c --- /dev/null +++ b/.changeset/smart-islands-judge.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Scaffolder field extensions registered with `FormFieldBlueprint` are now collected in the `useCustomFieldExtensions` hook, enabling them for use in the scaffolder. diff --git a/.changeset/smooth-bikes-sparkle.md b/.changeset/smooth-bikes-sparkle.md new file mode 100644 index 0000000000..0c1eba172b --- /dev/null +++ b/.changeset/smooth-bikes-sparkle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': minor +--- + +Implemented discovery for top-level groups defined in config.group or if undefined global top-level group in Gitlab diff --git a/.changeset/spotty-shoes-exercise.md b/.changeset/spotty-shoes-exercise.md new file mode 100644 index 0000000000..92e0825c9f --- /dev/null +++ b/.changeset/spotty-shoes-exercise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Support changing location keys on existing entities, in delta mutations diff --git a/.changeset/spotty-snails-worry.md b/.changeset/spotty-snails-worry.md deleted file mode 100644 index 3ecf2e9b35..0000000000 --- a/.changeset/spotty-snails-worry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-signals-backend': patch ---- - -The signals backend now supports scaled deployments where clients may be connecting to one of many signal backend instances. diff --git a/.changeset/stale-hats-exist.md b/.changeset/stale-hats-exist.md new file mode 100644 index 0000000000..227656cd5b --- /dev/null +++ b/.changeset/stale-hats-exist.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Avoid extra ordering in by-query when the user doesn't ask for it diff --git a/.changeset/stale-rats-tease.md b/.changeset/stale-rats-tease.md new file mode 100644 index 0000000000..3564742cc6 --- /dev/null +++ b/.changeset/stale-rats-tease.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-google-provider': patch +--- + +Pass through `includeGrantedScopes` in order to persist scopes across refresh calls diff --git a/.changeset/strange-brooms-check.md b/.changeset/strange-brooms-check.md new file mode 100644 index 0000000000..b6cb897170 --- /dev/null +++ b/.changeset/strange-brooms-check.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fixed an issue where the `EntityOwnerPicker` component failed to load when the `mode` prop was set to `owners-only`. In this mode, the `EntityOwnerPicker` does not load details about the owners, such as `displayName` or `title`. To display these details, use `mode=all` instead. diff --git a/.changeset/strong-papayas-remember.md b/.changeset/strong-papayas-remember.md new file mode 100644 index 0000000000..7787258c58 --- /dev/null +++ b/.changeset/strong-papayas-remember.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Fix link styling in ProvidedApisCard component so it aligns with other card components. diff --git a/.changeset/swift-kangaroos-drop.md b/.changeset/swift-kangaroos-drop.md new file mode 100644 index 0000000000..77d837deba --- /dev/null +++ b/.changeset/swift-kangaroos-drop.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-client': patch +--- + +Fixed a bug in the `queryEntities` method where errors were not being handled properly. diff --git a/.changeset/swift-laws-applaud.md b/.changeset/swift-laws-applaud.md deleted file mode 100644 index 320fb27e52..0000000000 --- a/.changeset/swift-laws-applaud.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Update upgrade-helper link in `versions:bump` command to include `yarnPlugin` param when the yarn plugin is installed diff --git a/.changeset/tall-comics-heal.md b/.changeset/tall-comics-heal.md new file mode 100644 index 0000000000..3d65caee67 --- /dev/null +++ b/.changeset/tall-comics-heal.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-azure': minor +--- + +Added the Azure Blob Storage as catalog entity provider to import all the desired entities from storage account provided in app-config.yaml diff --git a/.changeset/ten-keys-nail.md b/.changeset/ten-keys-nail.md new file mode 100644 index 0000000000..0662e4a346 --- /dev/null +++ b/.changeset/ten-keys-nail.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Fixed an issue in the WinstonLogger where Errors thrown and given to logger.error with field values that could not be cast to a string would throw a TypeError diff --git a/.changeset/thick-items-bathe.md b/.changeset/thick-items-bathe.md new file mode 100644 index 0000000000..455718ed1c --- /dev/null +++ b/.changeset/thick-items-bathe.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Added data-testid to placeholder rendered by Progress component to simplify assertions in tests diff --git a/.changeset/thin-hotels-explode.md b/.changeset/thin-hotels-explode.md new file mode 100644 index 0000000000..f06b512cc5 --- /dev/null +++ b/.changeset/thin-hotels-explode.md @@ -0,0 +1,5 @@ +--- +'@backstage/errors': patch +--- + +Trim `error.cause.stack` in addition to `error.stack` when trimming stack traces from serialized errors. diff --git a/.changeset/three-mangos-dance.md b/.changeset/three-mangos-dance.md deleted file mode 100644 index 0135869611..0000000000 --- a/.changeset/three-mangos-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Moves msw from dependencies to devDependencies diff --git a/.changeset/tiny-mice-run.md b/.changeset/tiny-mice-run.md new file mode 100644 index 0000000000..4829ef7390 --- /dev/null +++ b/.changeset/tiny-mice-run.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +The `generate-patch` command will now add a single resolution entry for all versions of the patched package, rather than separate entries for each version query. diff --git a/.changeset/twenty-monkeys-applaud.md b/.changeset/twenty-monkeys-applaud.md new file mode 100644 index 0000000000..a1b0c1d338 --- /dev/null +++ b/.changeset/twenty-monkeys-applaud.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Resolved an issue where the `templateManagementPermission` was not being exposed through the `/permissions/metadata` endpoint. diff --git a/.changeset/twenty-parents-judge.md b/.changeset/twenty-parents-judge.md new file mode 100644 index 0000000000..a639f83ba1 --- /dev/null +++ b/.changeset/twenty-parents-judge.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-app-backend': patch +--- + +Fix root route handling when query parameters are present diff --git a/.changeset/two-donuts-float.md b/.changeset/two-donuts-float.md deleted file mode 100644 index d9df082910..0000000000 --- a/.changeset/two-donuts-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-client': patch ---- - -Fix for certain filter fields in the `catalogApiMock` being case sensitive. diff --git a/.changeset/violet-ears-dance.md b/.changeset/violet-ears-dance.md deleted file mode 100644 index dba3671338..0000000000 --- a/.changeset/violet-ears-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': minor ---- - -**BREAKING**: The `LEGACY_BACKEND_START` flag has been removed, along with support for `src/run.ts` as the development entry point. diff --git a/.changeset/violet-snakes-laugh.md b/.changeset/violet-snakes-laugh.md new file mode 100644 index 0000000000..7002cfeaf0 --- /dev/null +++ b/.changeset/violet-snakes-laugh.md @@ -0,0 +1,5 @@ +--- +'@backstage/release-manifests': patch +--- + +Allow overriding the fetch function used inside getManifestByVersion diff --git a/.changeset/warm-pumpkins-bathe.md b/.changeset/warm-pumpkins-bathe.md new file mode 100644 index 0000000000..93fa603342 --- /dev/null +++ b/.changeset/warm-pumpkins-bathe.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Open links in the scaffolder entity and step descriptions in a new tab, to ensure consistency and improve user experience diff --git a/.changeset/weak-avocados-suffer.md b/.changeset/weak-avocados-suffer.md new file mode 100644 index 0000000000..01142aa927 --- /dev/null +++ b/.changeset/weak-avocados-suffer.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-ldap': minor +--- + +Add new ldap vendor config 'LLDAP' diff --git a/.changeset/weak-meals-doubt.md b/.changeset/weak-meals-doubt.md new file mode 100644 index 0000000000..42199ed296 --- /dev/null +++ b/.changeset/weak-meals-doubt.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Ensure that the scheduled worker task doesn't run at an unreasonably high frequency diff --git a/.changeset/wet-rats-exist.md b/.changeset/wet-rats-exist.md new file mode 100644 index 0000000000..08bcc1c28f --- /dev/null +++ b/.changeset/wet-rats-exist.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-app-api': patch +--- + +Decrease OAuth2 token refresh grace period diff --git a/.changeset/wild-experts-unite.md b/.changeset/wild-experts-unite.md deleted file mode 100644 index 872a3aa8de..0000000000 --- a/.changeset/wild-experts-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Bump the Webpack dependency range to `^5.94.0`, as our current configuration is not compatible with some older versions. diff --git a/.changeset/witty-bobcats-push.md b/.changeset/witty-bobcats-push.md deleted file mode 100644 index c2b357a860..0000000000 --- a/.changeset/witty-bobcats-push.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Add example template for notification sending diff --git a/.changeset/young-carrots-collect.md b/.changeset/young-carrots-collect.md new file mode 100644 index 0000000000..1350400d39 --- /dev/null +++ b/.changeset/young-carrots-collect.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Compute some metrics using search table facet aggregations instead of reading the full refresh state diff --git a/.changeset/young-cobras-add.md b/.changeset/young-cobras-add.md new file mode 100644 index 0000000000..f9172d3800 --- /dev/null +++ b/.changeset/young-cobras-add.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +As soon as a backend termination signal is received, call before shutting down root lifecycle hooks. diff --git a/.changeset/young-months-admire.md b/.changeset/young-months-admire.md new file mode 100644 index 0000000000..a2062b3f88 --- /dev/null +++ b/.changeset/young-months-admire.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-app-api': minor +'@backstage/backend-plugin-api': minor +--- + +**EXPERIMENTAL**: Adds a new `instanceMetadataService` to hold information about a specific backend instance. diff --git a/.changeset/young-penguins-act.md b/.changeset/young-penguins-act.md deleted file mode 100644 index bae2fe089f..0000000000 --- a/.changeset/young-penguins-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-client': minor ---- - -The client now automatically splits up very large `getEntitiesByRefs` calls into several smaller requests behind the scenes when needed. This ensures that each individual request does not exceed common Express.js request body limits or overload the server. diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e2c9aa8058..c7326c5f4e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -9,7 +9,7 @@ yarn.lock @backstage/maintainers @backst */yarn.lock @backstage/maintainers @backstage-service /.changeset/*.md /beps/0001-notifications-system @backstage/maintainers @backstage/notifications-maintainers -/docs/*.md @backstage/documentation-maintainers +/docs @backstage/maintainers @backstage/documentation-maintainers /docs/assets/search @backstage/search-maintainers /docs/features/search @backstage/search-maintainers /docs/features/techdocs @backstage/techdocs-maintainers @@ -18,15 +18,8 @@ yarn.lock @backstage/maintainers @backst /packages/backend-openapi-utils @backstage/maintainers @backstage/reviewers @backstage/openapi-tooling-maintainers /packages/techdocs-cli @backstage/techdocs-maintainers /packages/techdocs-cli-embedded-app @backstage/techdocs-maintainers -/plugins/adr @backstage/maintainers @backstage/reviewers @kuangp -/plugins/adr-* @backstage/maintainers @backstage/reviewers @kuangp /plugins/api-docs @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/azure-devops @backstage/maintainers @backstage/reviewers @awanlin -/plugins/azure-devops-backend @backstage/maintainers @backstage/reviewers @awanlin -/plugins/azure-devops-common @backstage/maintainers @backstage/reviewers @awanlin -/plugins/analytics-module-newrelic-browser @backstage/maintainers @backstage/reviewers @jmezach /plugins/bitbucket-cloud-common @backstage/maintainers @backstage/reviewers @pjungermann -/plugins/bitrise @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers /plugins/catalog @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers /plugins/catalog-* @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers /plugins/catalog-backend-module-aws @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers @pjungermann @@ -35,53 +28,26 @@ yarn.lock @backstage/maintainers @backst /plugins/catalog-backend-module-msgraph @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers @pjungermann /plugins/catalog-backend-module-puppetdb @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers /plugins/catalog-graph @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers @backstage/sda-se-reviewers -/plugins/cicd-statistics @backstage/sharks -/plugins/circleci @backstage/maintainers @backstage/reviewers @adamdmharvey -/plugins/code-coverage @backstage/maintainers @backstage/reviewers @alde -/plugins/code-coverage-backend @backstage/maintainers @backstage/reviewers @alde -/plugins/cost-insights @backstage/maintainers @backstage/reviewers @backstage/silver-lining -/plugins/cost-insights-* @backstage/maintainers @backstage/reviewers @backstage/silver-lining /plugins/devtools @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-backend @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-common @backstage/maintainers @backstage/reviewers @awanlin -/plugins/entity-feedback @backstage/maintainers @backstage/reviewers @kuangp -/plugins/entity-feedback-* @backstage/maintainers @backstage/reviewers @kuangp /plugins/events-* @backstage/maintainers @backstage/reviewers @backstage/events-maintainers -/plugins/explore @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/explore-react @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/fossa @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/git-release-manager @backstage/maintainers @backstage/reviewers @erikengervall /plugins/home @backstage/home-maintainers /plugins/home-* @backstage/home-maintainers -/plugins/kafka @backstage/maintainers @backstage/reviewers @andrewthauer -/plugins/kafka-backend @backstage/maintainers @backstage/reviewers @andrewthauer /plugins/kubernetes @backstage/kubernetes-maintainers /plugins/kubernetes-* @backstage/kubernetes-maintainers -/plugins/linguist @backstage/maintainers @backstage/reviewers @awanlin -/plugins/linguist-backend @backstage/maintainers @backstage/reviewers @awanlin -/plugins/linguist-common @backstage/maintainers @backstage/reviewers @awanlin /plugins/notifications @backstage/maintainers @backstage/notifications-maintainers /plugins/notifications-* @backstage/maintainers @backstage/notifications-maintainers /plugins/scaffolder-backend-module-notifications @backstage/maintainers @backstage/notifications-maintainers -/plugins/octopus-deploy @backstage/maintainers @backstage/reviewers @jmezach /plugins/permission-* @backstage/permission-maintainers -/plugins/playlist @backstage/maintainers @backstage/reviewers @kuangp -/plugins/playlist-* @backstage/maintainers @backstage/reviewers @kuangp -/plugins/rollbar @backstage/maintainers @backstage/reviewers @andrewthauer -/plugins/rollbar-backend @backstage/maintainers @backstage/reviewers @andrewthauer /plugins/scaffolder @backstage/maintainers @backstage/reviewers @backstage/scaffolder-maintainers /plugins/scaffolder-* @backstage/maintainers @backstage/reviewers @backstage/scaffolder-maintainers /plugins/search @backstage/search-maintainers /plugins/search-* @backstage/search-maintainers /plugins/signals @backstage/maintainers @backstage/notifications-maintainers /plugins/signals-* @backstage/maintainers @backstage/notifications-maintainers -/plugins/sonarqube @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers /plugins/techdocs @backstage/techdocs-maintainers /plugins/techdocs-* @backstage/techdocs-maintainers +/plugins/user-settings @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers /plugins/user-settings-backend @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/tech-insights-backend @backstage/maintainers @backstage/reviewers @xantier -/plugins/tech-insights-backend-module-jsonfc @backstage/maintainers @backstage/reviewers @xantier -/plugins/tech-insights-tech-insights-common @backstage/maintainers @backstage/reviewers @xantier -/plugins/tech-insights-tech-insights-node @backstage/maintainers @backstage/reviewers @xantier - -knip-report.md +/plugins/user-settings-common @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers diff --git a/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt index 2cbcc484f7..e0389f0adb 100644 --- a/.github/vale/config/vocabularies/Backstage/accept.txt +++ b/.github/vale/config/vocabularies/Backstage/accept.txt @@ -74,11 +74,14 @@ configmaps configs const cookiecutter +corepack Corti cron cronjobs crontab css +cve +CVEs daemonsets Datadog dataflow @@ -100,6 +103,8 @@ Deutsche dev devops devs +dequeue +dequeueing dialogs discoverability Discoverability @@ -176,6 +181,7 @@ idempotency Iglesias iLert img +impactful incentivised Indal indexable @@ -335,6 +341,7 @@ rebase rebasing Recharts Redash +redis renderer renderers replicasets @@ -368,6 +375,8 @@ scaffolded scaffolder Scaffolder scrollbar +SCM +SCMs sdks seb semlas diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml index 038061adac..1210db0ccf 100644 --- a/.github/workflows/api-breaking-changes-comment.yml +++ b/.github/workflows/api-breaking-changes-comment.yml @@ -22,7 +22,7 @@ jobs: action: ${{ steps.event.outputs.ACTION }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: disable-sudo: true egress-policy: block @@ -90,7 +90,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 # Identify comment to be updated - name: Find comment for API Changes diff --git a/.github/workflows/api-breaking-changes.yml b/.github/workflows/api-breaking-changes.yml index 62195b155e..744c9e62c3 100644 --- a/.github/workflows/api-breaking-changes.yml +++ b/.github/workflows/api-breaking-changes.yml @@ -14,11 +14,11 @@ jobs: if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: # Fetch the commit that's merged into the base rather than the target ref # This will let us diff only the contents of the PR, without fetching more history @@ -27,15 +27,15 @@ jobs: run: git fetch --depth 1 origin ${{ github.base_ref }} - name: setup-node - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: - cache-prefix: linux-v18 + cache-prefix: linux-v20 - name: breaking changes check run: | diff --git a/.github/workflows/automate_area-labels.yml b/.github/workflows/automate_area-labels.yml index 89e1adc3c3..4529b54c16 100644 --- a/.github/workflows/automate_area-labels.yml +++ b/.github/workflows/automate_area-labels.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index a0c0e44902..1a29795cce 100644 --- a/.github/workflows/automate_changeset_feedback.yml +++ b/.github/workflows/automate_changeset_feedback.yml @@ -23,18 +23,18 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: # Fetch the commit that's merged into the base rather than the target ref # This will let us diff only the contents of the PR, without fetching more history ref: 'refs/pull/${{ github.event.pull_request.number }}/merge' - name: fetch base run: git fetch --depth 1 origin ${{ github.base_ref }} - - uses: backstage/actions/changeset-feedback@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + - uses: backstage/actions/changeset-feedback@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 name: Generate feedback with: diff-ref: 'origin/master' diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 4b388d7850..7923496b3f 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -24,11 +24,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: '${{ github.event.pull_request.merge_commit_sha }}' diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml index b7adc5235a..e61ca20620 100644 --- a/.github/workflows/automate_stale.yml +++ b/.github/workflows/automate_stale.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/ci-noop.yml b/.github/workflows/ci-noop.yml index 321e4b57e7..a769ce7d50 100644 --- a/.github/workflows/ci-noop.yml +++ b/.github/workflows/ci-noop.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: Verify ${{ matrix.node-version }} steps: @@ -35,12 +35,12 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: Test ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 824889528e..24e74ff0f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true @@ -28,20 +28,20 @@ jobs: name: Install ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -55,7 +55,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true @@ -64,20 +64,20 @@ jobs: name: Verify ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -153,7 +153,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: Test ${{ matrix.node-version }} services: @@ -202,14 +202,14 @@ jobs: env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }} INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }} INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }} INTEGRATION_TEST_AZURE_TOKEN: ${{ secrets.INTEGRATION_TEST_AZURE_TOKEN }} steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: fetch master branch run: git fetch origin master @@ -219,13 +219,13 @@ jobs: run: git fetch origin ${{ github.event.pull_request.base.ref }} - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -235,7 +235,7 @@ jobs: # Use the lower-level cache actions for the success cache, so that we can store the cache even on failed builds - name: restore backstage-cli cache - uses: actions/cache/restore@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4 + uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4 with: path: .cache/backstage-cli key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }} @@ -256,7 +256,7 @@ jobs: # Always save success cache even if there were failures, that way it can be used in re-triggered builds - name: save backstage-cli cache - uses: actions/cache/save@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4 + uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4 if: always() with: path: .cache/backstage-cli diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 48ac1db289..5961a9155f 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -10,11 +10,11 @@ jobs: timeout-minutes: 10 steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: backstage/actions/cron@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + - uses: backstage/actions/cron@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index a9524b5c98..a7ac58b76a 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -16,28 +16,28 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x] + node-version: [20.x] steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: path: backstage ref: ${{ github.event.client_payload.version && env.RELEASE_VERSION || github.ref }} - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index 92c5f28498..1f18c6ed15 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit @@ -54,20 +54,20 @@ jobs: result-encoding: string - name: checkout latest release - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: refs/tags/${{ steps.find-release.outputs.result }} - - name: use node.js 18.x - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: build API reference run: yarn build:api-docs @@ -91,23 +91,23 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: checkout master - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: use node.js 18.x - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: build API reference run: yarn build:api-docs @@ -158,19 +158,19 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - name: use node.js 18.x - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth # Stable docs - name: checkout latest release - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: refs/tags/${{ needs.stable.outputs.release }} @@ -198,7 +198,7 @@ jobs: # Next docs - name: checkout master - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: clean: false @@ -225,7 +225,7 @@ jobs: run: ls microsite/build && ls microsite/build/storybook - name: Deploy both microsite and storybook to gh-pages - uses: JamesIves/github-pages-deploy-action@881db5376404c5c8d621010bcbec0310b58d5e29 # v4.6.8 + uses: JamesIves/github-pages-deploy-action@62fec3add6773ec5dbbf18d2ee4260911aa35cf4 # v4.6.9 with: branch: gh-pages folder: microsite/build diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 37b5b376e8..c66206ca8d 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] services: postgres16: @@ -61,22 +61,22 @@ jobs: env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }} INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }} INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }} INTEGRATION_TEST_AZURE_TOKEN: ${{ secrets.INTEGRATION_TEST_AZURE_TOKEN }} steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -94,7 +94,7 @@ jobs: run: yarn backstage-cli config:check --lax - name: backstage-cli cache - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4 with: path: .cache/backstage-cli key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }} @@ -143,11 +143,11 @@ jobs: strategy: matrix: - node-version: [18.x] + node-version: [20.x] steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index 2cd355b75e..c10f248f6d 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -16,7 +16,7 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml index 9ebfbee3b0..b5027d78be 100644 --- a/.github/workflows/pr-review-comment-trigger.yaml +++ b/.github/workflows/pr-review-comment-trigger.yaml @@ -20,7 +20,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml index 517a978a83..18c39ebbd1 100644 --- a/.github/workflows/pr-review-comment.yaml +++ b/.github/workflows/pr-review-comment.yaml @@ -17,7 +17,7 @@ jobs: steps: # Inspired by https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit @@ -40,7 +40,7 @@ jobs: const prNumber = artifact.name.slice('pr_number-'.length) core.setOutput('pr-number', prNumber); - - uses: backstage/actions/re-review@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + - uses: backstage/actions/re-review@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 7639ac14db..5b8673858b 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -18,12 +18,12 @@ jobs: if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: PR sync - uses: backstage/actions/pr-sync@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/pr-sync@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ec00a3a6b8..49f199cc57 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -29,12 +29,12 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: 'Checkout code' - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 with: sarif_file: results.sarif diff --git a/.github/workflows/sync_canon.yml b/.github/workflows/sync_canon.yml new file mode 100644 index 0000000000..189e43215e --- /dev/null +++ b/.github/workflows/sync_canon.yml @@ -0,0 +1,56 @@ +name: Sync Canon Storybook +on: + push: + branches: [master] + +jobs: + sync-canon-storybook: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + with: + egress-policy: audit + + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + with: + node-version: 20.x + registry-url: https://registry.npmjs.org/ # Needed for auth + + - name: yarn install + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + with: + cache-prefix: ${{ runner.os }}-v20.x + + - name: Checkout backstage/canon-storybook + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + repository: backstage/canon-storybook + path: canon-storybook + token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} + + - name: Configure Git + run: | + git config --global user.email noreply@backstage.io + git config --global user.name 'Github Canon Storybook workflow' + + - name: Build Canon Storybook + run: | + yarn workspace @backstage/canon run build-storybook + + - name: Replace contents of canon-storybook repo with Storybook build output + working-directory: canon-storybook + run: | + git rm -rf . + cp -R ../packages/canon/storybook-static/. . + + - name: Commit to canon-storybook repo + working-directory: canon-storybook + run: | + git add . + git commit -am "Canon Storybook build for backstage/backstage@${{ github.sha }}" + git push diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index 2aa84bb208..6658f8b850 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -10,22 +10,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: # Fetch changes to previous commit - required for 'only_changed' in Prettier action fetch-depth: 0 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index a89ab7629a..2c2d5a51d0 100644 --- a/.github/workflows/sync_dependabot-changesets.yml +++ b/.github/workflows/sync_dependabot-changesets.yml @@ -11,12 +11,12 @@ jobs: if: github.actor == 'dependabot[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 2 ref: ${{ github.head_ref }} diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index 4b209739c7..d4fe6e2fa0 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -8,26 +8,26 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: # 'v' prefix is added here for the tag, we keep it out of the manifest logic ref: v${{ github.event.client_payload.version }} - - name: use node.js 18.x - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: Build yarn plugin working-directory: packages/yarn-plugin @@ -35,7 +35,7 @@ jobs: # Checkout backstage/versions into /backstage/versions, which is where store the output - name: Checkout versions - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: repository: backstage/versions path: versions diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index 1c9b4a6186..e4d60777cd 100644 --- a/.github/workflows/sync_renovate-changesets.yml +++ b/.github/workflows/sync_renovate-changesets.yml @@ -11,12 +11,12 @@ jobs: if: github.actor == 'renovate[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 2 ref: ${{ github.head_ref }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 1390b4ec61..9084593052 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -12,21 +12,21 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: use node.js 18.x - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: Create Snyk report uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index 008010472b..fdcf23c21c 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -25,11 +25,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Monitor and Synchronize Snyk Policies uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master with: @@ -58,6 +58,6 @@ jobs: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} NODE_OPTIONS: --max-old-space-size=7168 - name: Upload Snyk report - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 with: sarif_file: snyk.sarif diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index 77fb5f951e..479f65a53a 100644 --- a/.github/workflows/sync_version-packages.yml +++ b/.github/workflows/sync_version-packages.yml @@ -14,11 +14,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 20000 fetch-tags: true diff --git a/.github/workflows/verify_accessibility-noop.yml b/.github/workflows/verify_accessibility-noop.yml index 37ce3513e9..9af85ec2d1 100644 --- a/.github/workflows/verify_accessibility-noop.yml +++ b/.github/workflows/verify_accessibility-noop.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index 29ff740f68..1c326bc880 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -20,19 +20,19 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - - name: Use Node.js 18.x - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x + node-version: 20.x - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: run Lighthouse CI run: | yarn dlx @lhci/cli@0.11.x autorun diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index 22eb62d4c0..c8a7d032ac 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -42,12 +42,12 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. @@ -55,7 +55,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/init@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -66,7 +66,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/autobuild@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -80,4 +80,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/analyze@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml index 9a902b6108..9a93be4090 100644 --- a/.github/workflows/verify_docs-quality.yml +++ b/.github/workflows/verify_docs-quality.yml @@ -12,11 +12,11 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Vale does not support file excludes, so we use the script to generate a list of files instead # The action also does not allow args or a local config file to be passed in, so the files array diff --git a/.github/workflows/verify_e2e-linux-noop.yml b/.github/workflows/verify_e2e-linux-noop.yml index f4f24f14f5..4e3eeb2a8c 100644 --- a/.github/workflows/verify_e2e-linux-noop.yml +++ b/.github/workflows/verify_e2e-linux-noop.yml @@ -24,12 +24,12 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 0c487429e9..ef24955b0e 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -8,6 +8,8 @@ on: - 'docs/**' - 'microsite/**' - 'beps/**' + push: + branches: [master] concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -32,20 +34,20 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Configure Git run: | @@ -53,12 +55,12 @@ jobs: git config --global user.name 'GitHub e2e user' - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index f6b300af7e..454c4c011e 100644 --- a/.github/workflows/verify_e2e-techdocs.yml +++ b/.github/workflows/verify_e2e-techdocs.yml @@ -7,6 +7,8 @@ on: - 'packages/techdocs-cli/**' - 'packages/techdocs-cli-embedded-app/**' - 'plugins/techdocs/**' + push: + branches: [master] concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -21,7 +23,7 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true @@ -30,12 +32,12 @@ jobs: name: Techdocs steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 with: python-version: '3.9' diff --git a/.github/workflows/verify_e2e-windows-noop.yml b/.github/workflows/verify_e2e-windows-noop.yml index b3998522c9..78d4c1e37f 100644 --- a/.github/workflows/verify_e2e-windows-noop.yml +++ b/.github/workflows/verify_e2e-windows-noop.yml @@ -20,12 +20,12 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index b6bfef51e5..3817af2d8a 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -11,6 +11,8 @@ on: - 'packages/cli/**' - 'packages/e2e-test/**' - 'packages/create-app/**' + push: + branches: [master] concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -22,16 +24,16 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit @@ -42,7 +44,7 @@ jobs: git config --global core.autocrlf false git config --global core.eol lf - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Configure Git run: | @@ -50,13 +52,13 @@ jobs: git config --global user.name 'GitHub e2e user' - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: setup python - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 with: python-version: '3.10' @@ -78,7 +80,7 @@ jobs: uses: browser-actions/setup-chrome@803ef6dfb4fdf22089c9563225d95e4a515820a0 # latest - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml index 5deaeafeaf..126d70b9c8 100644 --- a/.github/workflows/verify_fossa.yml +++ b/.github/workflows/verify_fossa.yml @@ -14,12 +14,12 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install Fossa run: "curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | bash" diff --git a/.github/workflows/verify_microsite-noop.yml b/.github/workflows/verify_microsite-noop.yml index f4c5ea4104..85cb1e3fee 100644 --- a/.github/workflows/verify_microsite-noop.yml +++ b/.github/workflows/verify_microsite-noop.yml @@ -21,7 +21,7 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 1d6aac21ca..2507428ec8 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -24,17 +24,17 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: use node.js 18.x - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5 + node-version: 20.x + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: '3.9' diff --git a/.github/workflows/verify_microsite_accessibility-noop.yml b/.github/workflows/verify_microsite_accessibility-noop.yml index 49721e7f51..7d4028e2dd 100644 --- a/.github/workflows/verify_microsite_accessibility-noop.yml +++ b/.github/workflows/verify_microsite_accessibility-noop.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite_accessibility.yml b/.github/workflows/verify_microsite_accessibility.yml index 6626f4def9..e22241b3e3 100644 --- a/.github/workflows/verify_microsite_accessibility.yml +++ b/.github/workflows/verify_microsite_accessibility.yml @@ -15,16 +15,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Use Node.js 18.x - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + - name: Use Node.js 20.x + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 18.x + node-version: 20.x - name: top-level install run: yarn install --immutable diff --git a/.github/workflows/verify_storybook-noop.yml b/.github/workflows/verify_storybook-noop.yml index 115c79c9c3..5b41d76e4c 100644 --- a/.github/workflows/verify_storybook-noop.yml +++ b/.github/workflows/verify_storybook-noop.yml @@ -28,7 +28,7 @@ jobs: name: Storybook steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index a3333b9bb1..bffb57e691 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -23,26 +23,26 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [18.x] + node-version: [20.x] name: Storybook steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 # Required to retrieve git history - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15 + uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install @@ -51,7 +51,7 @@ jobs: - run: yarn build-storybook - - uses: chromaui/action@1b04e0322aba2604aa23c6714aa6f704bdb301ad # v11 + - uses: chromaui/action@0efa3230f403b7848d5d65c6ce140b617fb68380 # v11 with: token: ${{ secrets.GITHUB_TOKEN }} # projectToken intentionally shared to allow collaborators to run Chromatic on forks diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index d184bdca08..e3f6959929 100644 --- a/.github/workflows/verify_windows.yml +++ b/.github/workflows/verify_windows.yml @@ -17,11 +17,11 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }} INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }} INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }} @@ -29,14 +29,14 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 + uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 with: egress-policy: audit - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/ADOPTERS.md b/ADOPTERS.md index 771596692b..b31e621938 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -276,4 +276,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Cigna](https://www.cigna.com/) / [Evernorth](https://www.evernorth.com/) | [@raphtalia](https://github.com/raphtalia), [Devon Paluso](mailto:Devon.Paluso@evernorth.com), [Bryan Rego](mailto:Bryan.Rego@evernorth.com), [Ian Skillings](mailto:Ian.Skillings@evernorth.com) | Internal developer portal providing TechDocs, software templates, centralized secret management, with information consolidation from ServiceNow, Okta, GitHub, GitLab, and WebEx. | | [Infobip](https://www.infobip.com/) | [Antonio Ereiz](https://github.com/SonilPro) | Visual representation of all our entities registered within an existing internal catalog, along with a UI for editing their manifests. It serves as the go-to place for new internal tools that require a user interface and provides standardization of new components using Software Templates. | [CloudScript](https://www.cloudscript.com.br/) | [Helias Rodrigues](https://github.com/xcloudscript) | We use it to centralize and organize the components of our internal development platform. In addition, it provides an integrated experience for developers by using all the core modules and some plugins. - +| [Alauda](https://www.alauda.io/) | [Mario](https://github.com/mario-mui) | We use it to centralize and organize the components of our internal development platform. In addition, it provides environment templates for developers to create development testing or others environments +| [New10](https://www.new10.com/) | [Cleber Gasparoto](https://github.com/chgasparoto) | We use Backstage as our internal developer portal to catalog services across teams, implement custom Tech Insights for ensuring service standards adoption, and centralize API specifications to streamline development processes and cross-team collaboration. +| [Tele2 Kazakhstan](https://tele2.kz/) / [Altel Digital](https://digital.altel.kz/) | [Kuanysh Bekkulov](https://www.linkedin.com/in/kuanysh-bekkulov/), [Alexandr Puzeyev](https://www.linkedin.com/in/alexandr-puzeyev/) | Developer portal: services, components, APIs, and resources; includes documentation (Docs-as-Code), service templates, and plugins for integration with internal systems and tools. +| [Axelerant](https://www.axelerant.com/) | [Zeshan Ziya](https://github.com/zeshanziya) | Developer portal, main gateway to infrastructure, documentation, internal tooling, and service catalog with a focus on project visibility. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c1a0283f09..58f894447b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -135,13 +135,14 @@ yarn build:backend # Build the backend package, depends on tsc yarn build:all # Build published versions of packages, depends on tsc yarn build:api-reports # Build API Reports used for documentation -yarn lint # lint packages that have changed since later commit on origin/master -yarn lint:all # lint all packages -yarn lint:docs # lint all the Markdown files -yarn lint:type-deps # verify that @types/* dependencies are placed correctly in packages +yarn lint # Lint packages that have changed since later commit on origin/master +yarn lint:all # Lint all packages +yarn lint:docs # Lint all the Markdown files +yarn lint:type-deps # Verify that @types/* dependencies are placed correctly in packages -yarn test # test packages that have changed since later commit on origin/master -yarn test:all # test all packages +yarn test # Test packages that have changed since later commit on origin/master +yarn test --no-watch # Test packages and include unchanged ones +yarn test:all # Test all packages yarn clean # Remove all output folders and @backstage/cli cache diff --git a/OWNERS.md b/OWNERS.md index 2f7942792a..58672a20da 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -10,7 +10,6 @@ Team: @backstage/maintainers | Patrik Oldsberg | Spotify | [Rugvip](https://github.com/Rugvip) | `Rugvip#0019` | | Fredrik Adelöw | Spotify | [freben](https://github.com/freben) | `freben#3926` | | Ben Lambert | Spotify | [benjdlambert](https://github.com/benjdlambert) | `blam#2159` | -| Johan Haals | Spotify | [jhaals](https://github.com/jhaals) | `Johan#0679` | ## Project Areas @@ -27,7 +26,6 @@ Scope: The catalog plugin and catalog model | Ben Lambert | Spotify | Cubic Belugas | [benjdlambert](https://github.com/benjdlambert) | `blam#2159` | | Camila Loiola | Spotify | Cubic Belugas | [camilaibs](http://github.com/camilaibs) | `camilal#0226` | | Fredrik Adelöw | Spotify | Cubic Belugas | [freben](https://github.com/freben) | `freben#3926` | -| Johan Haals | Spotify | Cubic Belugas | [jhaals](https://github.com/jhaals) | `Johan#0679` | | Mihai Tabara | Spotify | Cubic Belugas | [MihaiTabara](http://github.com/MihaiTabara) | `mihait#3107` | | Patrik Oldsberg | Spotify | Cubic Belugas | [Rugvip](https://github.com/Rugvip) | `Rugvip#0019` | | Vincenzo Scamporlino | Spotify | Cubic Belugas | [vinzscam](http://github.com/vinzscam) | `vinzscam#6944` | @@ -91,7 +89,6 @@ Scope: The Permission Framework and plugins integrating with the permission fram | Ben Lambert | Spotify | Cubic Belugas | [benjdlambert](https://github.com/benjdlambert) | `blam#2159` | | Camila Loiola | Spotify | Cubic Belugas | [camilaibs](http://github.com/camilaibs) | `camilal#0226` | | Fredrik Adelöw | Spotify | Cubic Belugas | [freben](https://github.com/freben) | `freben#3926` | -| Johan Haals | Spotify | Cubic Belugas | [jhaals](https://github.com/jhaals) | `Johan#0679` | | Mihai Tabara | Spotify | Cubic Belugas | [MihaiTabara](http://github.com/MihaiTabara) | `mihait#3107` | | Patrik Oldsberg | Spotify | Cubic Belugas | [Rugvip](https://github.com/Rugvip) | `Rugvip#0019` | | Vincenzo Scamporlino | Spotify | Cubic Belugas | [vinzscam](http://github.com/vinzscam) | `vinzscam#6944` | @@ -204,6 +201,7 @@ Scope: The Backstage Documentation | Irma Solakovic | Roadie.io | [Irma12](https://github.com/Irma12) | `Irma#7629` | | Jorge Lainfiesta | Roadie.io | [jorgelainfiesta](https://github.com/jorgelainfiesta) | `jorgel#8733` | | Jussi Hallila | Roadie.io | [Xantier](https://github.com/Xantier) | `Xantier#0086` | +| Kashish Mittal | Red Hat | [04kash](https://github.com/04kash) | `kashh._.` | | Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` | | Miklós Kiss | Roadie.io | [kissmikijr](https://github.com/kissmikijr) | `Miklos#7416` | | Patrick Jungermann | Bonial International GmbH | [pjungermann](https://github.com/pjungermann) | `pjungermann#6933` | @@ -217,6 +215,7 @@ Scope: The Backstage Documentation | Maintainer | Organization | GitHub | Discord | | ------------ | ------------ | --------------------------------------------- | -------------- | | Stefan Ålund | Spotify | [stefanalund](https://github.com/stefanalund) | `stalund#9602` | +| Johan Haals | Spotify | [jhaals](https://github.com/jhaals) | `Johan#0679` | ## Emeritus End User Sponsors diff --git a/app-config.yaml b/app-config.yaml index cb70170541..64c2fa5c4c 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -221,6 +221,17 @@ integrations: # apiBaseUrl: server.bitbucket.com # username: ${BITBUCKET_SERVER_USERNAME} # appPassword: ${BITBUCKET_SERVER_APP_PASSWORD} + + # azureBlobStorage: + # - accountName: ${ACCOUNT_NAME} # required + # endpoint: ${CUSTOM_ENDPOINT} # custom endpoint will require either aadCredentials or sasToken + # sasToken: ${SAS_TOKEN} + # aadCredential: + # clientId: ${CLIENT_ID} + # tenantId: ${TENANT_ID} + # clientSecret: ${CLIENT_SECRET} + # accountKey: ${ACCOUNT_KEY} + azure: - host: dev.azure.com token: ${AZURE_TOKEN} @@ -245,6 +256,14 @@ catalog: - Domain - Location providers: + azureBlob: + accountName: ${ACCOUNT_NAME} + containerName: ${CONTAINER_NAME} + schedule: # same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } backstageOpenapi: plugins: - catalog diff --git a/beps/NNNN-template/README.md b/beps/NNNN-template/README.md index 3ecb1ffb4e..2fce6ecd95 100644 --- a/beps/NNNN-template/README.md +++ b/beps/NNNN-template/README.md @@ -1,6 +1,6 @@ --- title: BEP Title -status: provisional +status: implementable authors: - '@ghost' owners: @@ -13,16 +13,10 @@ creation-date: yyyy-mm-dd # BEP: - - -[**Discussion Issue**](https://github.com/backstage/backstage/issues/NNNNN) - - [Summary](#summary) - [Motivation](#motivation) - [Goals](#goals) diff --git a/beps/README.md b/beps/README.md index 531bd15f50..84bf967b5c 100644 --- a/beps/README.md +++ b/beps/README.md @@ -4,19 +4,18 @@ A Backstage Enhancement Proposal (BEP) is a way to propose, communicate and coor ## Quick start for the BEP process -1. Discuss the idea with the community and maintainers. Either here on GitHub, Discord, or during community sessions or SIG meetings. - Make sure that others think the work is worth taking up and will help review the BEP and any code changes required. +1. Discuss the idea with the community and maintainers. Either here on GitHub, Discord, or during community sessions or SIG meetings. Make sure that others think the work is worth taking up and will help review the BEP and any code changes required. 1. Make a copy of the [BEP template](./NNNN-template/) directory as `beps/NNNN-short-descriptive-title`, where `NNNN` is the next available number padded with leading zeroes. 1. Fill out as much of the YAML metadata as you can. 1. Fill out the template as best you can. 1. If you want the BEP to be owned by a particular project area, add an entry for the BEP folder to [CODEOWNERS](../.github/CODEOWNERS). -1. Create a PR for the BEP. Title it "BEP: <title>". Aim to get the high level goals clarified and avoid getting hung up on specific details. The PR can be merged early and iterated on. -1. Once the BEP is ready to be merged, create a [feature issue](https://github.com/backstage/backstage/issues/new?template=feature.yaml) titled "BEP: <title>". Use the summary of the BEP as description and link to the BEP PR in the context section. Once the PR is merged, the issue should be updated to link to the BEP folder instead. This issue will serve as a general discussion issue for the BEP. -1. Once the initial BEP is merged you should keep iterating on it until it is ready to leave that `provisional` state. Leaving the `provisional` state is a decision made by the project area maintainers. +1. Create a PR for the BEP. Title it "BEP: <title>". Aim to get the high level goals clarified and avoid getting hung up on specific details. The PR can be iterated on until the BEP is ready to be merged. +1. The relevant maintainers will review the BEP and provide feedback. It can also be useful to join relevant SIG meetings to discuss the BEP, to help drive it forward faster. +1. Let the maintainers know when you think the BEP is ready to be merged. At this point the BEP should be fully filled out and ready for implementation, along with a clear owner for the work. -Just because a BEP is merged does not mean it is complete or approved for implementation. Any BEP marked as `provisional` is a working document and subject to change. +The merging of a BEP means that it is approved for implementation and has an owner that is responsible for said implementation. Up until that point, the author(s) of the BEP are responsible for driving the BEP forward. -The authors of the BEP are also responsible for driving the BEP forward all the way to implementation. The approval of a BEP is not a commitment to implement it. +While the BEP PR is open the owner can open separate PRs to ship experimental features in support of the BEP to help drive the design forward, and these may be merged pending usual PR review. If the BEP is withdrawn or rejected these features should generally be removed. ## FAQs @@ -38,7 +37,7 @@ No, except for plugins that implement core features of Backstage. The BEP proces ### Can I update an existing BEP? -Yes! As long as the BEP is still in the `provisional` state you should keep iterating on it. Please keep each PR focused on a single topic and avoid long-running and overly broad PRs. +Yes! As long as the BEP is in the `implementable` state. Updates should however only be done based on new discoveries during the implementation phase. If you want to make a significant change to a BEP that has already been approved, you should open a new BEP to replace the old one. ### Can I update a BEP that was submitted by someone else? @@ -48,6 +47,10 @@ Yes! BEPs are living documents and anyone can suggest changes to them. We encour Architecture Decision Records (ADRs) are used to document decisions made for development within the Backstage project. They are not intended to be used for proposing new features or changes to Backstage. +### What's does it mean for a BEP to be in "provisional" state? + +This is a state from an older version of the BEP process, and means that it has been approved as work to be done but the exact design is not yet agreed upon. BEPs in this state need to be moved to the `implementable` state before they can be implemented. + ### My FAQ isn't answered here! The BEP process is still evolving! @@ -72,13 +75,10 @@ At the start of each BEP is a YAML document that contains metadata about the BEP The BEP Status is critical to clearly communicate the status of each BEP. Each BEP must have its status field set to one of the following values: -- `provisional`: The BEP has been proposed and is actively being defined. The BEP as been approved by the owning project area maintainers as work to be done. -- `implementable`: The approvers have approved this BEP for implementation. -- `implemented`: The BEP has been implemented and is no longer actively changed. -- `deferred`: The BEP is proposed but not actively being worked on. -- `rejected`: The approvers and authors have decided that this BEP is not moving forward. - The BEP is kept around as a historical document. -- `withdrawn`: The authors have withdrawn the BEP. +- `implementable`: The BEP has been approved for implementation by the owning project area maintainers. +- `implemented`: The BEP has been implemented. +- `deferred`: The BEP was approved but is no longer being actively worked on. If anyone wishes to pick up the work they can move it back to the `implementable` state. +- `rejected`: The approvers and authors have decided that this BEP is not moving forward. The BEP is kept around as a historical document. - `replaced`: The BEP has been replaced by a new BEP. ### Prior Art diff --git a/catalog-info.yaml b/catalog-info.yaml index 6de6fd3426..8b5326e3e8 100644 --- a/catalog-info.yaml +++ b/catalog-info.yaml @@ -20,4 +20,4 @@ metadata: spec: type: library owner: CNCF - lifecycle: experimental + lifecycle: production diff --git a/contrib/docker/frontend-with-nginx/Dockerfile.dockerbuild b/contrib/docker/frontend-with-nginx/Dockerfile.dockerbuild index fa8e42482b..47fd506a34 100644 --- a/contrib/docker/frontend-with-nginx/Dockerfile.dockerbuild +++ b/contrib/docker/frontend-with-nginx/Dockerfile.dockerbuild @@ -35,7 +35,7 @@ -FROM node:16-buster AS build +FROM node:20-buster AS build RUN mkdir /app COPY . /app diff --git a/docs/deployment/flightcontrol.md b/contrib/docs/tutorials/flightcontrol-deployment.md similarity index 98% rename from docs/deployment/flightcontrol.md rename to contrib/docs/tutorials/flightcontrol-deployment.md index df0c9284fb..aee915ba2f 100644 --- a/docs/deployment/flightcontrol.md +++ b/contrib/docs/tutorials/flightcontrol-deployment.md @@ -1,9 +1,4 @@ ---- -id: flightcontrol -title: Deploying with Flightcontrol -sidebar_label: AWS Fargate via Flightcontrol -description: Deploying Backstage to AWS Fargate via Flightcontrol ---- +# Deploying Backstage to AWS with Flightcontrol This guide explains how to deploy Backstage to [Flightcontrol](https://www.flightcontrol.dev?ref=backstage), a platform that fully automates deployments to Amazon Web Services (AWS). Flightcontrol supports git-driven and image registry deployments. diff --git a/docs/deployment/heroku.md b/contrib/docs/tutorials/heroku-deployment.md similarity index 96% rename from docs/deployment/heroku.md rename to contrib/docs/tutorials/heroku-deployment.md index 8961848894..2dea1f021c 100644 --- a/docs/deployment/heroku.md +++ b/contrib/docs/tutorials/heroku-deployment.md @@ -1,9 +1,4 @@ ---- -id: heroku -title: Deploying with Heroku -sidebar_label: Heroku -description: How to deploy Backstage to Heroku ---- +# Deploying Backstage to Heroku Heroku is a Platform as a Service (PaaS) designed to simplify application deployment. diff --git a/docs/deployment/koyeb.md b/contrib/docs/tutorials/koyeb-deployment.md similarity index 86% rename from docs/deployment/koyeb.md rename to contrib/docs/tutorials/koyeb-deployment.md index 3e30881752..75d42d8814 100644 --- a/docs/deployment/koyeb.md +++ b/contrib/docs/tutorials/koyeb-deployment.md @@ -1,9 +1,4 @@ ---- -id: koyeb -title: Deploying with Koyeb -sidebar_label: Koyeb -description: How to deploy Backstage to Koyeb ---- +# Deploying Backstage to Koyeb This guide explains how to deploy Backstage to [Koyeb](https://www.koyeb.com/), a serverless platform that provides the fastest way to deploy applications globally. Koyeb supports git-driven and container-based deployments. @@ -31,7 +26,7 @@ backend: ## Push and deploy Backstage to Koyeb -Push your Backstage application with its [Dockerfile](docker.md) to Koyeb using the following command: +Push your Backstage application with its [Dockerfile](https://backstage.io/docs/deployment/docker) to Koyeb using the following command: ```bash koyeb app init example-backstage \ diff --git a/contrib/scaffolder/template-testing-dry-run.md b/contrib/scaffolder/template-testing-dry-run.md index 70e0c572ab..12c4210ed6 100644 --- a/contrib/scaffolder/template-testing-dry-run.md +++ b/contrib/scaffolder/template-testing-dry-run.md @@ -26,7 +26,6 @@ import { readFile, writeFile } from 'node:fs/promises'; import { gzipSync } from 'node:zlib'; import { ensureDir } from 'fs-extra'; import { program } from 'commander'; -import fetch from 'node-fetch'; import ora from 'ora'; import readdir from 'recursive-readdir'; import { parse } from 'yaml'; diff --git a/docs/architecture-decisions/adr001-add-adr-log.md b/docs/architecture-decisions/adr001-add-adr-log.md index d1bf0f83f5..de4283319a 100644 --- a/docs/architecture-decisions/adr001-add-adr-log.md +++ b/docs/architecture-decisions/adr001-add-adr-log.md @@ -7,14 +7,14 @@ description: Architecture Decision Record (ADR) logs as a reference point for th ## Decision -A decision was made to store ADRs in a log in the project repository +A decision was made to store ADRs in a log in the project repository. ## Discussion There is a need to store big decisions made in a log as a reference point for -the team, help with onboarding new members and give context to others interested +the team, help with onboarding new members, and give context to others interested in the project. ## Risks -People stop adding ADRs to the log and context gets lost +People stop adding ADRs to the log and context gets lost. diff --git a/docs/architecture-decisions/adr002-default-catalog-file-format.md b/docs/architecture-decisions/adr002-default-catalog-file-format.md index d0a657fe46..3b606cf46b 100644 --- a/docs/architecture-decisions/adr002-default-catalog-file-format.md +++ b/docs/architecture-decisions/adr002-default-catalog-file-format.md @@ -7,9 +7,9 @@ description: Architecture Decision Record (ADR) log on Default Software Catalog ## Background -Backstage comes with a software catalog functionality, that you can use to track +Backstage comes with software catalog functionality that you can use to track all your software components and more. It can be powered by data from various -sources, and one of them that is included with the package, is a custom database +sources, and one of them that is included with the package is a custom database backed catalog. It has the ability to keep itself updated automatically based on the contents of little descriptor files in your version control system of choice. Developers create these files and maintain them side by side with their @@ -21,15 +21,15 @@ This ADR describes the default format of these descriptor files. Internally at Spotify, a homegrown software catalog system is used heavily and forms a core part of Backstage and other important pieces of the infrastructure. -The user experience, learnings and certain pieces of metadata from that catalog +The user experience, learnings, and certain pieces of metadata from that catalog are being carried over to the open source effort. -The file format described herein, also draws heavy inspiration from the +The file format described herein also draws heavy inspiration from the [kubernetes object format](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/). ### Core Concepts -There are a number of descriptor files, all of whose locations (e.g. within a +There are a number of descriptor files, all of whose locations (e.g., within a version control system) are registered with the software catalog. The method of registration is not covered in this document; it could happen either manually inside Backstage, or by push events from a CI/CD pipelines, or by webhook @@ -45,7 +45,7 @@ Entities have distinct names, and they may reference each other by those names. ## Format Descriptor files use the [YAML](https://yaml.org/spec/1.2/spec.html) format. -They may be written by hand, or created using automated tools. Each file may +They may be written by hand or created using automated tools. Each file may consist of several YAML documents (separated by `---`), where each document describes a single entity. @@ -71,7 +71,7 @@ spec: ``` The root fields `apiVersion`, `kind`, `metadata`, and `spec` are part of the -_envelope_, defining the overall structure of all kinds of entity. Likewise, the +_envelope_, defining the overall structure of all kinds of entities. Likewise, the `name`, `namespace`, `labels`, and `annotations` metadata fields are of special significance and have reserved purposes and distinct shapes. @@ -87,23 +87,23 @@ The `kind` is the high level entity type being described, typically from the [Backstage system model](https://github.com/backstage/backstage/issues/390). The first versions of the catalog will focus on the `Component` kind. -The `apiVersion`is the version of specification format for that particular +The `apiVersion` is the version of the specification format for that particular entity that this file is written against. The version is used for being able to evolve the format, and the tuple of `apiVersion` and `kind` should be enough for a parser to know how to interpret the contents of the rest of the document. Backstage specific entities have an `apiVersion` that is prefixed with -`backstage.io/`, to distinguish them from other types of object that share the +`backstage.io/`, to distinguish them from other types of objects that share the same type of structure. This may be relevant when co-hosting these -specifications with e.g. kubernetes object manifests. +specifications with, e.g., Kubernetes object manifests. -Early versions of the catalog will be using alpha/beta versions, e.g. -`backstage.io/v1alpha1`, to signal that the format may still change. After that, +Early versions of the catalog will be using alpha/beta versions, e.g., +`backstage.io/v1alpha1` to signal that the format may still change. After that, we will be using `backstage.io/v1` and up. ### `metadata` -A structure that contains metadata about the entity, i.e. things that aren't +A structure that contains metadata about the entity, i.e., things that aren't directly part of the entity specification itself. See below for more details about this structure. @@ -142,40 +142,40 @@ Example: `visits-tracking-service`, `CircleciBuildsDs_avro_gcs` ### `namespace` -The `name` of a namespace that the entity belongs to. This field is optional, +The `name` of a namespace that the entity belongs to. This field is optional and currently has no special semantics apart from bounding the name uniqueness constraint if specified. It is reserved for future use and may get broader semantic implication. -Namespaces may also be part of the catalog, and are `v1` / `Namespace` entities, -i.e. not Backstage specific but the same as in Kubernetes. +Namespaces may also be part of the catalog and are `v1` / `Namespace` entities, +i.e., not Backstage specific but the same as in Kubernetes. ### `description` -A human readable description of the entity, to be shown in Backstage. Should be +A human readable description of the entity to be shown in Backstage. Should be kept short and informative, suitable to give an overview of the entity's purpose at a glance. More detailed explanations and documentation should be placed elsewhere. ### `labels` -Labels are optional key/value pairs of that are attached to the entity, and +Labels are optional key/value pairs that are attached to the entity, and their use is identical to [kubernetes object labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). -Their main purpose is for references to other entities, and for information that +Their main purpose is for references to other entities and for information that is in one way or another classifying for the current entity. They are often used as values in queries or filters. Both the key and the value are strings, subject to the following restrictions. -Keys have an optional prefix followed by a slash, and then the name part which +Keys have an optional prefix followed by a slash, and then the name part, which is required. The prefix must be a valid lowercase domain name, at most 253 characters in total. The name part must be sequences of `[a-zA-Z0-9]` separated by any of `[-_.]`, at most 63 characters in total. The `backstage.io/` prefix is reserved for use by Backstage core components. -Some keys such as `system` also have predefined semantics. +Some keys, such as `system` also have predefined semantics. Values are strings that follow the same restrictions as `name` above. @@ -186,19 +186,19 @@ identical in use to [kubernetes object annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/). Their purpose is mainly, but not limited, to reference into external systems. -This could for example be a reference to the git ref the entity was ingested +This could, for example, be a reference to the git ref the entity was ingested from, to monitoring and logging systems, to pagerduty schedules, etc. Both the key and the value are strings, subject to the following restrictions. -Keys have an optional prefix followed by a slash, and then the name part which +Keys have an optional prefix followed by a slash, and then the name part, which is required. The prefix must be a valid lowercase domain name, at most 253 characters in total. The name part must be sequences of `[a-zA-Z0-9]` separated by any of `[-_.]`, at most 63 characters in total. The `backstage.io/` prefix is reserved for use by Backstage core components. -Values can be of any length, but are limited to being strings. +Values can be of any length but are limited to being strings. ## Component diff --git a/docs/architecture-decisions/adr003-avoid-default-exports.md b/docs/architecture-decisions/adr003-avoid-default-exports.md index 8ab79a451f..24445f0be1 100644 --- a/docs/architecture-decisions/adr003-avoid-default-exports.md +++ b/docs/architecture-decisions/adr003-avoid-default-exports.md @@ -16,7 +16,7 @@ thing well". The module would be consumed structure. Now, `ESModules` are the primary authoring format. They have numerous benefits, -such as compile-time verification of exports, and standards-defined semantics. +such as compile-time verification of exports and standards-defined semantics. They have a similar mechanism known as "default exports", which allows for a consumer to `import localName from 'the-module';`. This is implicitly the same as `import { default as localName } from 'the-module';`. @@ -43,8 +43,8 @@ A summary: Using named exports helps prevent needing to rename symbols, which has myriad benefits. A few are: -- IDE tools like "Find All References" and "Go To Definition" function -- Manual codebase searching ("grep", etc) is easier with a unique symbol +- IDE tools like "Find All References" and the "Go To Definition" function. +- Manual codebase searching ("grep", etc) is easier with a unique symbol. ## Decision diff --git a/docs/architecture-decisions/adr009-entity-references.md b/docs/architecture-decisions/adr009-entity-references.md index 254ae7ac1d..7cac946388 100644 --- a/docs/architecture-decisions/adr009-entity-references.md +++ b/docs/architecture-decisions/adr009-entity-references.md @@ -45,8 +45,8 @@ Of these, only `name` is always required. Optionality of `kind` and `namespace` are contextual, and they may or may not have default contextual fallback values. All other possible key values in this structure are reserved for future use. -A system or user wanting to express a full entity name that is always valid, -shall supply the entire triplet whether using the string form or the compound +A system or user wanting to express a full entity name that is always valid +shall supply the entire triplet, whether using the string form or the compound form. A full description of the format can be found @@ -62,7 +62,7 @@ containing the reference shall take the following form: ``` All three parts are required under all circumstances. The default value for the -`namespace` in the catalog is the string `"default"`, if the entity does not +`namespace` in the catalog is the string `"default"` if the entity does not specify one explicitly in `metadata.namespace`. This means that we do not encourage the string form of entity references to be diff --git a/docs/architecture-decisions/adr013-use-node-fetch.md b/docs/architecture-decisions/adr013-use-node-fetch.md index d802988ae4..e65cf0a97b 100644 --- a/docs/architecture-decisions/adr013-use-node-fetch.md +++ b/docs/architecture-decisions/adr013-use-node-fetch.md @@ -1,10 +1,16 @@ --- id: adrs-adr013 -title: 'ADR013: Proper use of HTTP fetching libraries' +title: 'ADR013: [superseded] Proper use of HTTP fetching libraries' # prettier-ignore description: Architecture Decision Record (ADR) for the proper use of fetchApiRef, node-fetch, and cross-fetch for data fetching. --- +:::note Superseded + +This ADR has been superseded by [ADR014](./adr014-use-fetch.md) and no longer applies. + +::: + ## Context Using multiple HTTP packages for data fetching increases the complexity and the @@ -32,6 +38,8 @@ It uses `cross-fetch` internally. Example: ```ts import { useApi } from '@backstage/core-plugin-api'; + +// Inside some functional React component... const { fetch } = useApi(fetchApiRef); const response = await fetch('https://example.com/api/v1/users.json'); diff --git a/docs/architecture-decisions/adr014-use-fetch.md b/docs/architecture-decisions/adr014-use-fetch.md new file mode 100644 index 0000000000..8454e69e7c --- /dev/null +++ b/docs/architecture-decisions/adr014-use-fetch.md @@ -0,0 +1,80 @@ +--- +id: adrs-adr014 +title: 'ADR014: Proper use of HTTP fetching libraries' +# prettier-ignore +description: Architecture Decision Record (ADR) for the proper use of fetchApiRef, native fetch, and cross-fetch for data fetching. +--- + +## Context + +Until now we have been recommending the use of `node-fetch` in Node.js contexts +through [ADR013](./adr013-use-node-fetch.md). Since then, Backstage has had its +minimum requirements upgraded to Node.js 20 or newer. The Node.js platform has +established a stable, reliable `undici` based native `fetch` in these versions. +Additionally, there are [some issues](https://github.com/backstage/backstage/issues/24590) +with using third party libraries that only appeared in newer versions of +Node.js. + +## Decision + +All code that is executed in Node.js (including backend and CLIs) should use the +native `fetch` for HTTP data fetching, and `typeof fetch` as the TypeScript type +in code where a `fetch` implementation can be injected or is referred to. +Example: + +```ts +import { ResponseError } from '@backstage/errors'; + +// this is implicitly global.fetch +const response = await fetch('https://example.com/api/v1/users.json'); +if (!response.ok) { + throw await ResponseError.fromResponse(response); +} +const users = await response.json(); +``` + +Frontend plugins and packages should prefer to use the +[`fetchApiRef`](https://backstage.io/docs/reference/core-plugin-api.fetchapiref). + +```ts +import { useApi } from '@backstage/core-plugin-api'; + +// Inside some React component... +const { fetch } = useApi(fetchApiRef); + +const response = await fetch('https://example.com/api/v1/users.json'); +if (!response.ok) { + throw await ResponseError.fromResponse(response); +} +const users = await response.json(); +``` + +Isomorphic packages should have a dependency on the `cross-fetch` package for +mocking and type definitions. Preferably, classes and functions in isomorphic +packages should accept an argument of type `typeof fetch` to let callers supply +their preferred implementation of `fetch`. This lets them adorn the calls with +auth or other information, and track metrics etc, in a cross-platform way. +Example: + +```ts +import crossFetch from 'cross-fetch'; + +export class MyClient { + private readonly fetch: typeof crossFetch; + + constructor(options: { fetch?: typeof crossFetch }) { + this.fetch = options.fetch || crossFetch; + } + + async users() { + return await this.fetch('https://example.com/api/v1/users.json'); + } +} +``` + +## Consequences + +We will gradually transition away from third party `fetch` replacement packages +such as `node-fetch` and others on the Node.js platform. + +The `@mswjs/interceptors` library as used by `msw` version 1.x [does not support native fetch properly](https://github.com/mswjs/msw/issues/1563#issuecomment-1694249010) and likely never will. When you switch to using native fetch, you may see `msw` based tests start to fail to both capture and block traffic. Certain tests may need to be rewritten to use `msw` 2.x or newer instead, which uses a newer version of the interceptors. diff --git a/docs/auth/google/provider.md b/docs/auth/google/provider.md index 109c2ddd9f..e03985d432 100644 --- a/docs/auth/google/provider.md +++ b/docs/auth/google/provider.md @@ -89,6 +89,6 @@ backend.add(import('@backstage/plugin-auth-backend-module-google-provider')); ## Adding the provider to the Backstage frontend -To add the provider to the frontend, add the `googleAuthApi` reference and +To add the provider to the frontend, add the `googleAuthApiRef` reference and `SignInPage` component as shown in [Adding the provider to the sign-in page](../index.md#sign-in-configuration). diff --git a/docs/auth/service-to-service-auth.md b/docs/auth/service-to-service-auth.md index 13516a1117..126b136d0b 100644 --- a/docs/auth/service-to-service-auth.md +++ b/docs/auth/service-to-service-auth.md @@ -412,3 +412,31 @@ Each entry has one or more of the following fields: # Also supports the shorthand form: # action: create, read ``` + +## Adding custom or logic for validation and issuing of tokens + +The `pluginTokenHandlerDecoratorServiceRef` can be used to decorate the existing token handler without having to re-implement the entire `AuthService` implementation. +This is particularly useful when you want to add additional logic to the handler, such as logging or metrics or custom token validation. + +The `PluginTokenHandler` interface has two methods: + +- `issueToken`: This method is used to issue a token for a plugin. It takes in the `pluginId` and `targetPluginId` as arguments, and an optional `limitedUserToken` object which can be used to issue a token on behalf of another user. The method returns a promise that resolves to an object containing the issued token. + +- `verifyToken`: This method is used to verify a token. It takes in the token as an argument and returns a promise that resolves to an object containing the subject of the token and an optional limited user token. + +```ts +import { + PluginTokenHandler, + pluginTokenHandlerDecoratorServiceRef, +} from '@backstage/backend-defaults/auth'; +import { createServiceFactory } from '@backstage/backend-plugin-api'; + +const decoratedPluginTokenHandler = createServiceFactory({ + service: pluginTokenHandlerDecoratorServiceRef, + deps: {}, + async factory() { + return (defaultImplementation: PluginTokenHandler) => + new CustomTokenHandler(defaultImplementation); + }, +}); +``` diff --git a/docs/backend-system/architecture/07-feature-loaders.md b/docs/backend-system/architecture/07-feature-loaders.md index 43954ec443..b2cc574bf9 100644 --- a/docs/backend-system/architecture/07-feature-loaders.md +++ b/docs/backend-system/architecture/07-feature-loaders.md @@ -73,6 +73,29 @@ export default createBackendFeatureLoader({ }); ``` +### Overriding service factories + +Service factories registered by feature loaders have lower priority than ones added directly via `backend.add`. This allows you to use a feature loader for a larger number of service implementations, but still override individual services. + +The ordering in which different feature loaders or service factories are added does not matter. There is also no priority between feature loaders, if two different feature loaders add a factory for the same service, the backend will fail to start. + +```ts +const backend = createBackend(); + +backend.add( + createBackendFeatureLoader({ + async *loader() { + yield import('./commonDiscoveryService'); // discovery service + yield import('./commonRootLoggerService'); // root logger service + }, + }), +); + +backend.add(import('./myDiscoveryService')); // discovery service +``` + +The result of the above example is that the backend starts up with `./myDiscoveryService` as the discovery service implementation, while `./commonDiscoveryService` is ignored. The `./commonRootLoggerService` will still be used. + ### Dynamic logic A feature loader can also be asynchronous, and for example fetch data from an external source to determine which features to load: diff --git a/docs/backend-system/building-backends/08-migrating.md b/docs/backend-system/building-backends/08-migrating.md index 71cccab784..a827171ff7 100644 --- a/docs/backend-system/building-backends/08-migrating.md +++ b/docs/backend-system/building-backends/08-migrating.md @@ -210,6 +210,25 @@ argument of `createBackend`. ::: +## Removing `@backstage/backend-common` + +The `@backstage/backend-common` package has been deprecated as part of moving to the new backend system, an you will need to replace existing usage of it. All exports from the package have been marked as deprecated in the last few releases of the package, and each export has its own deprecation message that explains how to replace that particular export. + +These are the deprecation messages for the most common replacements: + +- `createLegacyAuthAdapters` - Migrate to use the new backend system and auth services instead. +- `errorHandler` - Use `MiddlewareFactory.create.error` from `@backstage/backend-defaults/rootHttpRouter` instead. +- `getRootLogger` - This function will be removed in the future. If you need to get the root logger in the new system, please check out this documentation: https://backstage.io/docs/backend-system/core-services/logger +- `getVoidLogger` - This function will be removed in the future. If you need to mock the root logger in the new system, please use `mockServices.logger.mock()` from `@backstage/backend-test-utils` instead. +- `legacyPlugin` - Fully use the new backend system instead. +- `loadBackendConfig` - Please migrate to the new backend system and use `coreServices.rootConfig` instead, or the [@backstage/config-loader#ConfigSources](https://backstage.io/docs/reference/config-loader.configsources) facilities if required. +- `loggerToWinstonLogger` - Migrate to use the new `LoggerService` instead. +- `resolveSafeChildPath` - This function is deprecated and will be removed in a future release, see [#24493](https://github.com/backstage/backstage/issues/24493). Please use the `resolveSafeChildPath` function from the `@backstage/backend-plugin-api` package instead. +- `ServerTokenManager` - Please [migrate](https://backstage.io/docs/tutorials/auth-service-migration) to the new `coreServices.auth`, `coreServices.httpAuth`, and `coreServices.userInfo` services as needed instead. +- `useHotMemoize` - Hot module reloading is no longer supported for backends. + +If you want to browse all of the deprecations in one place you can look at the `dist/index.d.ts` file in the package, either in `node_modules/@backstage/backend-common/dist/index.d.ts` in your own project, or it can found in the [code tab on npmjs.com](https://www.npmjs.com/package/@backstage/backend-common?activeTab=code). + ## Cleaning Up the Plugins Folder For plugins that are private and your own, you can follow a [dedicated migration guide](../building-plugins-and-modules/08-migrating.md) as you see fit, at a diff --git a/docs/backend-system/building-plugins-and-modules/02-testing.md b/docs/backend-system/building-plugins-and-modules/02-testing.md index 38107f0242..1ec100cff3 100644 --- a/docs/backend-system/building-plugins-and-modules/02-testing.md +++ b/docs/backend-system/building-plugins-and-modules/02-testing.md @@ -224,10 +224,7 @@ your test database. ```ts const { knex, subject } = await createSubject(databaseId); const { server } = await startTestBackend({ - features: [ - myPlugin(), - mockServices.database.mock({ getClient: async () => knex }), - ], + features: [myPlugin(), mockServices.database.factory({ knex })], }); ``` diff --git a/docs/backend-system/building-plugins-and-modules/08-migrating.md b/docs/backend-system/building-plugins-and-modules/08-migrating.md index 8b2ea17de8..ea86854b18 100644 --- a/docs/backend-system/building-plugins-and-modules/08-migrating.md +++ b/docs/backend-system/building-plugins-and-modules/08-migrating.md @@ -39,7 +39,7 @@ import { coreServices, createBackendPlugin, } from '@backstage/backend-plugin-api'; -import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; +import { catalogServiceRef } from '@backstage/plugin-catalog-node'; import { Router } from 'express'; import { KubernetesBuilder } from './KubernetesBuilder'; diff --git a/docs/backend-system/core-services/discovery.md b/docs/backend-system/core-services/discovery.md index 455e398d8b..4324edbbf9 100644 --- a/docs/backend-system/core-services/discovery.md +++ b/docs/backend-system/core-services/discovery.md @@ -16,7 +16,6 @@ import { coreServices, createBackendPlugin, } from '@backstage/backend-plugin-api'; -import { fetch } from 'node-fetch'; createBackendPlugin({ pluginId: 'example', diff --git a/docs/backend-system/core-services/http-auth.md b/docs/backend-system/core-services/http-auth.md index 13938c921d..f3ce96fb25 100644 --- a/docs/backend-system/core-services/http-auth.md +++ b/docs/backend-system/core-services/http-auth.md @@ -102,6 +102,45 @@ or [contribute](https://github.com/backstage/backstage/blob/master/CONTRIBUTING. ::: +### Custom token extraction logic + +In some cases, you might want to customize how tokens are extracted from incoming requests. It might be that you want to extract tokens from a different location in the request. To support this you can supply your own slightly modified httpAuth service. The `DefaultHttpAuthService` class is exported from `@backstage/backend-defaults/httpAuth` and it's static `create` method can be used to pass in a custom `getTokenFromRequest` extraction function. + +```ts +import { DefaultHttpAuthService } from '@backstage/backend-defaults/httpAuth'; +import { + coreServices, + createServiceFactory, +} from '@backstage/backend-plugin-api'; + +export const customizedAuthServiceFactory = createServiceFactory({ + service: coreServices.httpAuth, + deps: { + auth: coreServices.auth, + discovery: coreServices.discovery, + plugin: coreServices.pluginMetadata, + }, + async factory({ auth, discovery, plugin }) { + return DefaultHttpAuthService.create({ + auth, + discovery, + pluginId: plugin.getId(), + getTokenFromRequest: req => { + let token: string | undefined; + const header = req.headers.some_random_header; + if (typeof header === 'string') { + const parts = header.split(' '); + if (parts.length === 2 && parts[0] === 'Bearer') { + token = parts[1]; + } + } + return { token }; + }, + }); + }, +}); +``` + This service has no configuration options, but it abides by the policies you have set up using [the `httpRouter` service](./http-router.md) for your routes, if any. diff --git a/docs/backend-system/core-services/http-router.md b/docs/backend-system/core-services/http-router.md index 6ab8218c83..c354f4fceb 100644 --- a/docs/backend-system/core-services/http-router.md +++ b/docs/backend-system/core-services/http-router.md @@ -70,4 +70,67 @@ access the incoming credentials. ## Configuring the service -This service does not have any configuration options. +For more advanced customization, there are several APIs from the `@backstage/backend-defaults/httpRouter` package that allow you to customize the implementation of the config service. The default implementation uses all of the middleware exported from `@backstage/backend-defaults/httpRouter`, including `createLifecycleMiddleware`, `createAuthIntegrationRouter`, `createCredentialsBarrier` and `createCookieAuthRefreshMiddleware`. You can use these to create your own `httpRouter` service implementation, for example - here's how you would add a custom health check route to all plugins: + +```ts +import { + createLifecycleMiddleware, + createCookieAuthRefreshMiddleware, + createCredentialsBarrier, + createAuthIntegrationRouter, +} from '@backstage/backend-defaults/httpRouter'; +import { createServiceFactory } from '@backstage/backend-plugin-api'; + +const backend = createBackend(); + +backend.add( + createServiceFactory({ + service: coreServices.httpRouter, + initialization: 'always', + deps: { + plugin: coreServices.pluginMetadata, + config: coreServices.rootConfig, + lifecycle: coreServices.lifecycle, + rootHttpRouter: coreServices.rootHttpRouter, + auth: coreServices.auth, + httpAuth: coreServices.httpAuth, + }, + async factory({ + auth, + httpAuth, + config, + plugin, + rootHttpRouter, + lifecycle, + }) { + const router = PromiseRouter(); + + rootHttpRouter.use(`/api/${plugin.getId()}`, router); + + const credentialsBarrier = createCredentialsBarrier({ + httpAuth, + config, + }); + + router.use(createAuthIntegrationRouter({ auth })); + router.use(createLifecycleMiddleware({ lifecycle })); + router.use(credentialsBarrier.middleware); + router.use(createCookieAuthRefreshMiddleware({ auth, httpAuth })); + + // Add a custom healthcheck endpoint for all plugins. + router.use('/health', (_, res) => { + res.status(200); + }); + + return { + use(handler: Handler): void { + router.use(handler); + }, + addAuthPolicy(policy: HttpRouterServiceAuthPolicy): void { + credentialsBarrier.addAuthPolicy(policy); + }, + }; + }, + }), +); +``` diff --git a/docs/backend-system/core-services/root-health.md b/docs/backend-system/core-services/root-health.md index 663dd699ae..fa147499a6 100644 --- a/docs/backend-system/core-services/root-health.md +++ b/docs/backend-system/core-services/root-health.md @@ -38,3 +38,29 @@ backend.add( }), ); ``` + +### Custom headers in health check responses + +While not implemented directly in the root health service, the default implementation of the [RootHttpRouter](./root-http-router.md) service includes a configuration option to set additional headers to include in health check responses. For example, you can add a `service-name` header using the following configuration: + +```yaml +backend: + health: + headers: + service-name: my-service +``` + +It can be a good idea to set a header for your health check responses that +uniquely identifies your service in a multi-service environment. This ensures +that the health check that is configured for your service is actually hitting +your service and not another. + +For example, if using Envoy you can use the [`service_name_matcher`](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/health_checking#health-check-identity) configuration and +set the `x-envoy-upstream-healthchecked-cluster` header to a matching value. For example: + +```yaml +backend: + health: + headers: + x-envoy-upstream-healthchecked-cluster: my-service +``` diff --git a/docs/backend-system/core-services/root-http-router.md b/docs/backend-system/core-services/root-http-router.md index a2316b957b..9ee8599eb5 100644 --- a/docs/backend-system/core-services/root-http-router.md +++ b/docs/backend-system/core-services/root-http-router.md @@ -42,6 +42,29 @@ createBackendPlugin({ ## Configuring the service +### Via `app-config.yaml` + +The `app-config.yaml` file provides configurable options that can be adjusted to meet your `RootHttpRouterService` specific requirements: + +```yaml +backend: + lifecycle: + # (Optional) The maximum time that paused requests will wait for the service to start, before returning an error (defaults to 5 seconds). + # Supported formats: + # - A string in the format of '1d', '2 seconds' etc. as supported by the `ms` library. + # - A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'. + # - An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`. + startupRequestPauseTimeout: { seconds: 10 } + # (Optional) The minimum time that the HTTP server will delay the shutdown of the backend. During this delay health checks will be set to failing, allowing traffic to drain (defaults to 0 seconds). + # Supported formats: + # - A string in the format of '1d', '2 seconds' etc. as supported by the `ms` library. + # - A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'. + # - An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`. + serverShutdownTimeout: { seconds: 20 } +``` + +### Via Code + There's additional options that you can pass to configure the root HTTP Router service. These options are passed when you call `createBackend`. - `indexPath` - optional path to forward all unmatched requests to. Defaults to `/api/app` which is the `app-backend` plugin responsible for serving the frontend application through the backend. diff --git a/docs/backend-system/core-services/scheduler.md b/docs/backend-system/core-services/scheduler.md index e4c67a1199..154878ddfc 100644 --- a/docs/backend-system/core-services/scheduler.md +++ b/docs/backend-system/core-services/scheduler.md @@ -16,7 +16,6 @@ import { coreServices, createBackendPlugin, } from '@backstage/backend-plugin-api'; -import { fetch } from 'node-fetch'; createBackendPlugin({ pluginId: 'example', diff --git a/docs/deployment/backstage-deploy/aws.md b/docs/deployment/backstage-deploy/aws.md deleted file mode 100644 index 818850a6f5..0000000000 --- a/docs/deployment/backstage-deploy/aws.md +++ /dev/null @@ -1,182 +0,0 @@ ---- -id: aws-lightsail -title: Deploying Backstage on AWS Lightsail -sidebar_label: AWS Lightsail -description: How to deploy Backstage on AWS Lightsail ---- - -> **DISCLAIMER: The `deploy` command is in alpha and still experimental. Do not use the `deploy` command for production deployments.** - -Getting started with Backstage often involves setting up an instance on a cloud provider and sharing it with your team so they can experiment. To make this cloud deployment easier, we've built a `deploy` command to stand up a proof-of-concept instance on AWS (using Lightsail). - -## What is AWS Lightsail - -:::tip - -AWS offers a free tier for up to three months on $10 USD/month Container service (Micro -1 node). By default we use the `nano` node, so if you are a new user this approach shouldn't cost you anything. For more information, refer to the [pricing](https://aws.amazon.com/lightsail/pricing/) documentation. - -::: - -AWS Lightsail offers a simple way to run containers in the cloud. To learn more about AWS Lightsail, please refer to the [official documentation](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-services-deployments). - -## Creating user in AWS - -- Open the AWS console and navigate to the IAM section -- In the left side menu click on `Users` and then click on `Add users` -- Specify a username and then click on `Next` -- Afterwards you can assign permissions, select `Attach policies directly` and then click on `Create policy`. - This should take you to a new window in which you can create a new policy based on `JSON`. - Copy over the following: - -```json -{ - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "VisualEditor0", - "Effect": "Allow", - "Action": [ - "ecr:DescribeImageReplicationStatus", - "ecr:ListTagsForResource", - "ecr:UploadLayerPart", - "ecr:BatchGetRepositoryScanningConfiguration", - "ecr:DeleteRepository", - "ecr:GetRegistryScanningConfiguration", - "ecr:CompleteLayerUpload", - "ecr:TagResource", - "ecr:DescribeRepositories", - "ecr:DeleteRepositoryPolicy", - "ecr:BatchCheckLayerAvailability", - "ecr:GetLifecyclePolicy", - "ecr:GetRegistryPolicy", - "ecr:PutLifecyclePolicy", - "ecr:DescribeImageScanFindings", - "ecr:GetLifecyclePolicyPreview", - "ecr:CreateRepository", - "ecr:DescribeRegistry", - "ecr:GetDownloadUrlForLayer", - "ecr:GetAuthorizationToken", - "ecr:DeleteLifecyclePolicy", - "ecr:PutImage", - "ecr:UntagResource", - "ecr:SetRepositoryPolicy", - "ecr:BatchGetImage", - "ecr:InitiateLayerUpload", - "ecr:GetRepositoryPolicy", - "lightsail:CreateContainerService", - "lightsail:GetKeyPair", - "lightsail:GetContainerServiceDeployments", - "lightsail:CreateContainerServiceRegistryLogin", - "lightsail:GetContainerImages", - "lightsail:UntagResource", - "lightsail:RegisterContainerImage", - "lightsail:GetContainerServices", - "lightsail:GetContainerServicePowers", - "lightsail:GetKeyPairs", - "lightsail:CreateContainerServiceDeployment", - "lightsail:GetContainerServiceMetricData", - "lightsail:GetContainerAPIMetadata", - "lightsail:DeleteContainerService", - "lightsail:GetContainerLog", - "lightsail:TagResource" - ], - "Resource": "*" - }, - { - "Sid": "Statement1", - "Effect": "Allow", - "Action": [], - "Resource": [] - } - ] -} -``` - -Then click on `Next` and give the policy a name and a description of your liking. Afterwards, click on `Create policy`. - -- Navigate back to the user creation window and press on the refresh button and search for the policy you just created. Now, create the user. -- Now you will be redirected to all users, click on the user you just created and click on `Security credentials` -- Scroll below and click on `Create access key` -- Choose `Command Line Interface (CLI)` -- Now export the following values - -```bash -$ export AWS_ACCESS_KEY_ID=... (first value) -$ export AWS_SECRET_ACCESS_KEY=.... (second secret value) -``` - -## Configuring the Pulumi CLI - -Second, install the [Pulumi CLI](https://www.pulumi.com/docs/get-started/install/) - `backstage-deploy` uses it to -simplify the management of cloud resources (Pulumi allows us to simply specify the desired "target cloud state", and -Pulumi will intelligently create/modify/delete resources to reach that state. Nice!). - -Then we need to execute the following commands, to set Pulumi up: - -:::tip - -Make sure to store your passphrase somewhere safe as it is used to encrypt/decrypt your Pulumi config. - -::: - -```bash -$ pulumi login --local -$ export PULUMI_CONFIG_PASSPHRASE="" -``` - -By using `pulumi login --local` we are making sure that Pulumi stores our state on the local file disk. The environment variable `PULUMI_CONFIG_PASSPHRASE` is used by Pulumi to generate a unique key for your stack - -## Deploying your instance on Lightsail - -:::tip - -Make sure that [Docker](https://docs.docker.com/) is running on your machine before you start this section. - -::: - -After you have made your changes to your local instance, it's time to deploy it on Lightsail. - -First, we need to configure a new `app-config` file and update the `baseUrl`. - -```bash -$ touch app-config.deployment.yaml -``` - -And then update the file with the following yaml: - -```yaml -app: - baseUrl: ${BACKSTAGE_HOST} - -backend: - baseUrl: ${BACKSTAGE_HOST} -``` - -The environment variable `BACKSTAGE_HOST` will be set to the endpoint that AWS Lightsail creates. - -Now we can deploy our instance! - -```bash -$ npx backstage-deploy aws --stack backstage-poc --create-dockerfile -``` - -In the first part of the command, we are specifying that we want to deploy our instance on AWS. With the [`--stack`](https://www.pulumi.com/docs/reference/cli/pulumi_stack/) option, we are providing Pulumi a reference to our container deployment. Furthermore, with the `--create-dockerfile` option, there will be a `Dockerfile` and `.dockerignore` created in the root of the project. - -After running the command, Pulumi will start creating the following resources for you in AWS: - -- ECR Repository -- Lightsail Container Service -- Lightsail Container Service Deployment -- Policy that allows Lightsail to pull from ECR - -If it's the first time building the Docker image, it might take a while for everything to be fully provisioned. After the command is finished running, your Backstage instance should be up and running on AWS Lightsail! 🎉 - -### Cleaning up resources - -Cleaning up the resources is also done with the deploy command. - -```bash -$ npx backstage-deploy aws --stack backstage-poc --destroy -``` - -This will delete everything that was originally created by the `deploy` command. diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md index afab8ef54d..546d027b86 100644 --- a/docs/deployment/docker.md +++ b/docs/deployment/docker.md @@ -5,6 +5,10 @@ sidebar_label: Docker description: How to build a Backstage Docker image for deployment --- +:::note Note +Before you start this section, it would be good to have a basic understanding of Docker and how it works. If you are new to Docker, you can start with the [Docker overview](https://docs.docker.com/get-started/overview/) guide. +::: + This section describes how to build a Backstage App into a deployable Docker image. It is split into three sections, first covering the host build approach, which is recommended due to its speed and more efficient and often simpler @@ -46,8 +50,7 @@ yarn install --immutable yarn tsc # Build the backend, which bundles it all up into the packages/backend/dist folder. -# The configuration files here should match the one you use inside the Dockerfile below. -yarn build:backend --config ../../app-config.yaml --config ../../app-config.production.yaml +yarn build:backend ``` Once the host build is complete, we are ready to build our image. The following @@ -85,6 +88,7 @@ WORKDIR /app # Copy files needed by Yarn COPY --chown=node:node .yarn ./.yarn COPY --chown=node:node .yarnrc.yml ./ +COPY --chown=node:node backstage.json ./ # This switches many Node.js dependencies to production mode. ENV NODE_ENV=production @@ -181,7 +185,7 @@ the repo root: FROM node:20-bookworm-slim AS packages WORKDIR /app -COPY package.json yarn.lock ./ +COPY backstage.json package.json yarn.lock ./ COPY .yarn ./.yarn COPY .yarnrc.yml ./ @@ -219,6 +223,7 @@ WORKDIR /app COPY --from=packages --chown=node:node /app . COPY --from=packages --chown=node:node /app/.yarn ./.yarn COPY --from=packages --chown=node:node /app/.yarnrc.yml ./ +COPY --from=packages --chown=node:node /app/backstage.json ./ RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \ yarn install --immutable @@ -266,7 +271,9 @@ WORKDIR /app # Copy the install dependencies from the build stage and context COPY --from=build --chown=node:node /app/.yarn ./.yarn COPY --from=build --chown=node:node /app/.yarnrc.yml ./ +COPY --from=build --chown=node:node /app/backstage.json ./ COPY --from=build --chown=node:node /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton/ ./ + # Note: The skeleton bundle only includes package.json files -- if your app has # plugins that define a `bin` export, the bin files need to be copied as well to # be linked in node_modules/.bin during yarn install. diff --git a/docs/deployment/index.md b/docs/deployment/index.md index 0524e71db8..76c8c12932 100644 --- a/docs/deployment/index.md +++ b/docs/deployment/index.md @@ -30,14 +30,7 @@ At Spotify, we deploy software generally by: This method is covered in [Building a Docker image](docker.md) and [Deploying with Kubernetes](k8s.md). -There is also an example of deploying on [Heroku](heroku.md), which only -requires the first two steps. - -There is also a contrib guide to deploying Backstage with -[AWS Fargate and Aurora PostgreSQL](https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/aws-fargate-deployment.md). - -Please consider contributing other deployment guides if you get Backstage set up -on common infrastructure, it would be a great benefit to the community. +There are many ways to deploy Backstage! You can find more examples in the community contributed guides found [here](https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/). If you need to run Backstage behind a corporate proxy, this [contributed guide](https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md) diff --git a/docs/features/kubernetes/configuration.md b/docs/features/kubernetes/configuration.md index 7c14c40283..71fdd0be0e 100644 --- a/docs/features/kubernetes/configuration.md +++ b/docs/features/kubernetes/configuration.md @@ -17,6 +17,9 @@ The following is a full example entry in `app-config.yaml`: ```yaml kubernetes: + frontend: + podDelete: + enabled: true serviceLocatorMethod: type: 'multiTenant' clusterLocatorMethods: @@ -48,6 +51,55 @@ kubernetes: exposeDashboard: true ``` +### `frontend` (optional) + +This is an array used to configure some frontend features. + +Valid values are: + +- `podDelete` + +#### `podDelete` (optional) + +This configures the behavior of the delete pod button in the container panel. + +Valid configurations are: + +- `enabled` + +##### `enabled` + +This configuration controls the visibility of this feature. + +Valid values are: + +- `true` +- `false` + +The default value is `false`. + +#### Internationalization + +To customize or translate the **Delete Pod** text, use the following approach: + +```js +import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; +import { kubernetesReactTranslationRef } from '@backstage/plugin-kubernetes-react/alpha'; + +const app = createApp({ + __experimentalTranslations: { + resources: [ + createTranslationMessages({ + ref: kubernetesReactTranslationRef, + messages: { + "podDrawer.buttons.delete": 'Restart Pod' + } + }) + ] + }, + ... +``` + ### `serviceLocatorMethod` This configures how to determine which clusters a component is running in. diff --git a/docs/features/software-catalog/configuration.md b/docs/features/software-catalog/configuration.md index 2d86811b14..6ed5a1d4b6 100644 --- a/docs/features/software-catalog/configuration.md +++ b/docs/features/software-catalog/configuration.md @@ -204,7 +204,8 @@ It can be configured with the `stitchingStrategy` app-config parameter. ```yaml title="app-config.yaml" catalog: - stitchingStrategy: immediate + stitchingStrategy: + mode: immediate ``` For the `deferred` mode you can set up additional parameters to further tune the process, @@ -217,9 +218,10 @@ These parameters accept a duration object, similar to the `processingInterval` p ```yaml title="app-config.yaml" catalog: - stitchingStrategy: deferred - pollingInterval: { seconds: 1 } - stitchTimeout: { minutes: 1 }; + stitchingStrategy: + mode: deferred + pollingInterval: { seconds: 1 } + stitchTimeout: { minutes: 1 }; ``` ## Subscribing to Catalog Errors diff --git a/docs/features/software-catalog/faq.md b/docs/features/software-catalog/faq.md index a8a1a30379..974a4ee119 100644 --- a/docs/features/software-catalog/faq.md +++ b/docs/features/software-catalog/faq.md @@ -42,3 +42,29 @@ First, performance. As is described [here](#can-i-call-the-catalog-itself-from-i Second, user experience. The catalog is an eventually consistent system that constantly tries to mirror external realities. Users make changes in catalog-info files, or things update in external systems, and those changes get streamed in and settle over time inside the catalog. But throwing an error in a processor, instantly aborts processing of that entity and stops its ingestion. Now imagine being a large organization where these changes happen maybe hundreds of times per day. Owners of catalog-info files will constantly be surprised by their files "breaking" in ingestion, maybe a very long time after they were initially created - they were valid at their time of creation and haven't been touched since! This is very frustrating and slows down your users because things break silently for reasons out of your control. There are cases where it's fine to throw hard validation errors in processors. Notably, when it doesn't pass a schema test at all and readers of the catalog data will break if the data was let through. Setting the owner to be a number instead of a string could be such an example. + +## Can I throw errors when validating entities? + +In short: Sometimes. Only if the shape is so wrong that it would not even parse, or violates TypeScript and similar contracts. + +Never throw errors due to "soft" errors, in particular relations not matching an existing target ([see above](#can-i-validate-relations-in-processors)). For soft errors, we recommend instead letting them through into the catalog, and then implementing the checks externally and nudging people gently toward fixing their own metadata. A dynamic info bar at the top of an entity page that informs the owners as they visit the page that a certain relation seems wrong and should be fixed, can go a very long way. + +To a large degree, this boils down to user experience. The catalog is an eventually consistent system that constantly tries to mirror external realities. Users make changes in catalog-info files, or things update in external systems, and those changes get streamed in and settle over time inside the catalog. But throwing an error in a processor, instantly aborts processing of that entity and stops its ingestion. Now imagine being a large organization where these changes happen maybe hundreds of times per day. Owners of catalog-info files will constantly be surprised by their files "breaking" in ingestion, maybe a very long time after they were initially created - they were valid at their time of creation and haven't been touched since! This is very frustrating and slows down your users because things break silently for reasons out of your control. + +You can throw for "hard" errors such as when the basic expectations of the entity shape are broken, for example, if a [`metadata.annotations` value](./descriptor-format.md#annotations-optional) was an array instead of a string. That does not match the TypeScript contract, and if you accepted such an entity into the catalog, readers of those entities are likely to explode when trying to perform string operations on that value. + +## Can I represent versions (of APIs, services etc) in the catalog? + +We do not recommend trying to represent fine grained versions in the catalog. It does not have builtin facilities for that (by design), and the alternatives that exist for trying to do so anyway, end up being awkward and have significant drawbacks. You can sometimes represent major, breaking versions as separate entities (more on that below). + +This response can seem surprising, but there's a clear intent behind it. Catalog entities generally represent the "human concept" of a thing, rather than the exact technical implementation of it. The name and granularity of entries in the catalog often match the way that you think and speak of that thing when talking to others. Then, you attach plugins to that high level concept, that are responsible for showing all of the finer details about it that your users need. + +The catalog should contain _rarely changing_, _human curated_ data that is easily overseen and _managed by the owners_ of those entities. + +One example is backend services. In a fast moving world, there may be several versions of a service deployed in several environments at the same time, and those can change rapidly. Despite that, when you talk about the service with your colleagues, you probably call it e.g. "the scaffolder". So you catalog it for example as `kind: Component`, `name: scaffolder`, `type: service`. But in your frontend, you can still have rich plugins that directly query your CI/CD systems, log collectors, and similar, to show precise, real-time information about exactly what's going on in your infrastructure in terms of that service. And notably, this happened without putting the burden on your end users to maintain a complex, fast moving set of yaml data just in order to appease those views. + +Another example is software libraries. It's tempting to catalog every dependency of every software component, but it's ultimately not a good fit for the catalog. If you develop inner-source libraries that are widely used in your org, then by all means make a single component for them! That lets people search for it, find the owners, and gain similar insights. But if you want to track individual versions and their usages within the ecosystem, then that's a use case better served by a separate solution. Which then, in turn, absolutely could have a nice plugin view in Backstage so that you can see its output right in the view of the library itself! + +And finally the example of APIs. This topic can sometimes be the most contentious. It would be unfortunate to have to create entities for every iteration of your API, and it would clobber search and ultimately be confusing. + +Especially for APIs, but also the other kinds, you can still end up wanting to make a new catalog entity when a new major version of that thing is released. At that point, in some cases, the new major version is almost like a completely new component, deployed in isolation from the old one, with completely updated contracts, maybe with different documentation etc. If so then sure, make a `kind: API`, `name: customerinfo2` for example. Then you make the choice that there will be two entities popping up in search results when looking for that string, and maybe that is a good thing in this instance. diff --git a/docs/features/software-templates/experimental.md b/docs/features/software-templates/experimental.md new file mode 100644 index 0000000000..e37971ad82 --- /dev/null +++ b/docs/features/software-templates/experimental.md @@ -0,0 +1,87 @@ +--- +id: experimental +title: Experimental Features +# prettier-ignore +description: Information on Experimental Features that are currently available in the Scaffolder +--- + +## Introduction + +This section contains information and guides on the experimental features that are currently available in the Scaffolder. Be advised that these features are still in development and may not be fully stable or complete, and are subject to change at any time. + +Please leave feedback on these features in the [Backstage Discord](https://discord.com/invite/MUpMjP2) or by [creating an issue](https://github.com/backstage/backstage/issues/new/choose) on the Backstage GitHub repository. + +## Retries and Recovery + +### TODO + +## Form Decorators + +Form decorators provide the ability to run arbitrary code before the form is submitted along with secrets to the `scaffolder-backend` plugin. They are provided to the `app` using a Utility API. + +#### Installation + +To install the Form Decorators, add the following to your `packages/app/src/apis.ts`: + +```ts + createApiFactory({ + api: formDecoratorsApiRef, + deps: {}, + factory: () => + DefaultScaffolderFormDecoratorsApi.create({ + decorators: [ + // add decorators here + ], + }), + }), +``` + +And then you'll also need to define which decorators run in each template using the `EXPERIMENTAL_formDecorators` key in the template's `spec`: + +```yaml +kind: Template +metadata: + name: my-template +spec: + EXPERIMENTAL_formDecorators: + - id: my-decorator + input: + test: something funky + + parameters: ... + steps: ... +``` + +#### Creating a Decorator + +You can create a decorator using the simple helper method `createScaffolderFormDecorator`: + +```ts +export const mockDecorator = createScaffolderFormDecorator({ + // give the decorator a name + id: 'mock-decorator', + + // define the schema for the input that can be proided in `template.yaml` + schema: { + input: { + test: z => z.string(), + }, + }, + deps: { + // define dependencies here + githubApi: githubAuthApiRef, + }, + decorator: async ( + // Context has all the things needed to write simple decorators + { setSecrets, setFormState, input: { test } }, + // Depepdencies injected here + { githubApi }, + ) => { + // mutate the form state + setFormState(state => ({ ...state, test, mock: 'MOCK' })); + + // mutate the form secrets + setSecrets(state => ({ ...state, GITHUB_TOKEN: 'MOCK_TOKEN' })); + }, +}); +``` diff --git a/docs/features/software-templates/index.md b/docs/features/software-templates/index.md index 077090743f..8018b76d91 100644 --- a/docs/features/software-templates/index.md +++ b/docs/features/software-templates/index.md @@ -25,7 +25,9 @@ locations like GitHub or GitLab. If you're running Backstage with Node 20 or later, you'll need to pass the flag `--no-node-snapshot` to Node in order to use the templates feature. One way to do this is to specify the `NODE_OPTIONS` environment variable before starting Backstage: -`export NODE_OPTIONS=--no-node-snapshot` +`export NODE_OPTIONS="${NODE_OPTIONS:-} --no-node-snapshot"` + +> It's important to append to the existing `NODE_OPTIONS` value, if it's already set, rather than overwriting it, since some NodeJS Debugging tools may rely on this environment variable to work properly. ::: diff --git a/docs/features/software-templates/input-examples.md b/docs/features/software-templates/input-examples.md index ef90013e49..0162ffb8f3 100644 --- a/docs/features/software-templates/input-examples.md +++ b/docs/features/software-templates/input-examples.md @@ -198,6 +198,23 @@ parameters: ui:widget: checkboxes ``` +## Markdown text blocks + +```yaml +parameters: + - title: Fill in some steps + properties: + markdown: + type: 'null' # Needs to be quoted + description: | + ## Markdown Text Block + + Standard markdown formatting is supported including *italics*, **bold** and [links](https://example.com) + + * bullet 1 + * bullet 2 +``` + ## Use parameters as condition in steps Conditions use Javascript equality operators. @@ -250,6 +267,54 @@ parameters: - lastName ``` +### Multiple conditional fields with custom ordering + +```yaml +parameters: + - title: Fill in some steps + ui:order: + - includeName + - lastName + - includeAddress + - address + properties: + includeName: + title: Include Name? + type: boolean + default: true + includeAddress: + title: Include Address? + type: boolean + default: true + dependencies: + includeName: + allOf: + - if: + properties: + includeName: + const: true + then: + properties: + lastName: + title: Name + type: string + required: + - lastName + includeAddress: + allOf: + - if: + properties: + includeAddress: + const: true + then: + properties: + address: + title: Address + type: string + required: + - address +``` + ## Conditionally set parameters The `if` keyword within the parameter uses [nunjucks templating](https://mozilla.github.io/nunjucks/templating.html#if). The `not` keyword is unavailable; instead, use javascript equality. diff --git a/docs/features/software-templates/writing-custom-actions.md b/docs/features/software-templates/writing-custom-actions.md index 00a171523c..11e67af07f 100644 --- a/docs/features/software-templates/writing-custom-actions.md +++ b/docs/features/software-templates/writing-custom-actions.md @@ -141,6 +141,39 @@ Prefer to use `camelCase` over `snake_case` or `kebab-case` for these actions if > We're aware that there are some exceptions to this, but try to follow as close as possible. We'll be working on migrating these in the repository over time too. +### Adding a TemplateExample + +A TemplateExample is a predefined structure that can be used to create custom actions in your software templates. It serves as a blueprint for users to understand how to use a specific action and its fields as well as to ensure consistency and standardization across different custom actions. + +#### Define a TemplateExample and add to your Custom Action + +```ts title="With JSON Schema" +import { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: 'Template Example for Creating an Acme file', + example: yaml.stringify({ + steps: [ + { + action: 'acme:file:create', + name: 'Create an Acme file.', + input: { + contents: 'file contents...', + filename: 'ACME.properties', + }, + }, + ], + }), + }, +]; +``` + +Add the example to the `createTemplateAction` under the object property `examples`: + +`return createTemplateAction<{ contents: string; filename: string }>({id: 'acme:file:create', description: 'Create an Acme file', examples, ...};` + ### The context object When the action `handler` is called, we provide you a `context` as the only diff --git a/docs/features/software-templates/writing-custom-field-extensions.md b/docs/features/software-templates/writing-custom-field-extensions.md index feb0f68048..9ccd6cf1b5 100644 --- a/docs/features/software-templates/writing-custom-field-extensions.md +++ b/docs/features/software-templates/writing-custom-field-extensions.md @@ -33,6 +33,9 @@ import React from 'react'; import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react'; import type { FieldValidation } from '@rjsf/utils'; import FormControl from '@material-ui/core/FormControl'; +import FormHelperText from '@material-ui/core/FormHelperText'; +import Input from '@material-ui/core/Input'; +import InputLabel from '@material-ui/core/InputLabel'; /* This is the actual component that will get rendered in the form */ diff --git a/docs/features/software-templates/writing-templates.md b/docs/features/software-templates/writing-templates.md index e5cd7d13b7..0f3d0af2e5 100644 --- a/docs/features/software-templates/writing-templates.md +++ b/docs/features/software-templates/writing-templates.md @@ -714,7 +714,7 @@ how to use them in the Scaffolder templates. It's important to mention that Back native filters from the Nunjucks library. For a complete list of these native filters and their usage, refer to the [Nunjucks documentation](https://mozilla.github.io/nunjucks/templating.html#builtin-filters). -To create your own custom filters, look to the section [Custom Filters](#custom-filters) hereafter. +To create your own custom filters, look to the section [Custom Filters and Globals](#custom-filters-and-globals) hereafter. ### parseRepoUrl diff --git a/docs/features/techdocs/addons.md b/docs/features/techdocs/addons.md index 471e62a57f..fff1f09d71 100644 --- a/docs/features/techdocs/addons.md +++ b/docs/features/techdocs/addons.md @@ -186,7 +186,7 @@ import { useShadowRootElements } from '@backstage/plugin-techdocs-react'; // difference is that you'd set `location` to `TechDocsAddonLocations.Content`. export const MakeAllImagesCatGifsAddon = () => { // This hook can be used to get references to specific elements. If you need - // access to the whole shadow DOM, use the the underlying useShadowRoot() + // access to the whole shadow DOM, use the underlying useShadowRoot() // hook instead. const images = useShadowRootElements(['img']); diff --git a/docs/features/techdocs/getting-started.md b/docs/features/techdocs/getting-started.md index 66772c861d..2c365bb5b9 100644 --- a/docs/features/techdocs/getting-started.md +++ b/docs/features/techdocs/getting-started.md @@ -297,7 +297,9 @@ You can do so by including the following lines right above `USER node` of your `Dockerfile`: ```Dockerfile -RUN apt-get update && apt-get install -y python3 python3-pip python3-venv +RUN apt-get update && \ + apt-get install -y python3 python3-pip python3-venv && \ + rm -rf /var/lib/apt/lists/* ENV VIRTUAL_ENV=/opt/venv RUN python3 -m venv $VIRTUAL_ENV diff --git a/docs/features/techdocs/how-to-guides.md b/docs/features/techdocs/how-to-guides.md index f8be6c9dd5..31d573fdbb 100644 --- a/docs/features/techdocs/how-to-guides.md +++ b/docs/features/techdocs/how-to-guides.md @@ -600,7 +600,7 @@ Note: To refer external diagram files, we need to include the diagrams directory ## How to add Mermaid support in TechDocs -There are two options for adding Mermaid support in TechDocs: using [Kroki](https://kroki.io) or by using [markdown-inline-mermaid](https://github.com/johanneswuerbach/markdown-inline-mermaid). We currently use `markdown-inline-mermaid` for the [Mermaid example on the Demo site](https://demo.backstage.io/docs/default/component/backstage-demo/examples/mermaid/). +There are a few options for adding Mermaid support in TechDocs: using [Kroki](https://kroki.io) or [markdown-inline-mermaid](https://github.com/johanneswuerbach/markdown-inline-mermaid) to generate the diagrams at build time, or the [`backstage-plugin-techdocs-addon-mermaid`](https://github.com/johanneswuerbach/backstage-plugin-techdocs-addon-mermaid) plugin to generate the diagram in the browser. We currently use `backstage-plugin-techdocs-addon-mermaid` plugin for the [Mermaid example on the Demo site](https://demo.backstage.io/docs/default/component/backstage-demo/examples/mermaid/). ### Using Kroki @@ -706,16 +706,23 @@ Done! Now you have a support of the following diagrams along with mermaid: To use `markdown-inline-mermaid` to generate your Mermaid diagrams in TechDocs you'll need to do the following: -1. In your Dockerfile you will need to make sure you install `markdown-inline-mermaid` like this: `RUN pip3 install mkdocs-techdocs-core markdown-inline-mermaid` -2. You will also need to install the `@mermaid-js/mermaid-cli`, to do that add this: `RUN yarn global add @mermaid-js/mermaid-cli` -3. Now in your `mkdocs.yml` file you will need to add the following section (this is at the root level like `plugins` which you should already have): +1. In your Dockerfile you will need to make sure you install `markdown-inline-mermaid` and its dependencies, you will also need to install the `@mermaid-js/mermaid-cli`: + + ```dockerfile title="Dockerfile" + RUN apt-get install -y chromium + RUN pip3 install mkdocs-techdocs-core markdown-inline-mermaid + RUN npm install -g @mermaid-js/mermaid-cli + ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium + ``` + +2. Now in your `mkdocs.yml` file you will need to add the following section (this is at the root level like `plugins` which you should already have): ```yaml title="mkdocs.yml" markdown_extensions: - markdown_inline_mermaid ``` -4. With this in place you can now add Mermaid diagrams in your Markdown files like this: +3. With this in place you can now add Mermaid diagrams in your Markdown files like this: ````md ```mermaid @@ -726,6 +733,10 @@ To use `markdown-inline-mermaid` to generate your Mermaid diagrams in TechDocs y ``` ```` +### Using the `backstage-plugin-techdocs-addon-mermaid` plugin + +Please follow the [Getting Started](https://github.com/johanneswuerbach/backstage-plugin-techdocs-addon-mermaid?tab=readme-ov-file#getting-started) instructions in the plugin's README. + ## How to implement a hybrid build strategy One limitation of the [Recommended deployment](./architecture.md#recommended-deployment) is that diff --git a/docs/frontend-system/building-apps/06-plugin-conversion.md b/docs/frontend-system/building-apps/06-plugin-conversion.md index 5e7d431e73..2fab6cf828 100644 --- a/docs/frontend-system/building-apps/06-plugin-conversion.md +++ b/docs/frontend-system/building-apps/06-plugin-conversion.md @@ -58,7 +58,7 @@ The following are the known conversion functions provided by various libraries: ## Putting it all together -Using the plugin converter along with extension converters from various libraries, we can not more fully convert our 3rd-party plugin to be able to install it in an app built with the new frontend system: +Using the plugin converter along with extension converters from various libraries, we can now more fully convert our 3rd-party plugin to be able to install it in an app built with the new frontend system: ```ts import { diff --git a/docs/getting-started/concepts.md b/docs/getting-started/concepts.md deleted file mode 100644 index f8aba8537d..0000000000 --- a/docs/getting-started/concepts.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: concepts -title: Key Concepts -# prettier-ignore -description: High level key concepts used in the Backstage project ---- - -For users of Backstage, there are certain concepts which are central to its -design and functionality. Being an expert in each of these concepts is not -necessary, however having a base understanding of each will make administering, -configuring, and operating Backstage easier. - -- CHANGELOG - https://keepachangelog.com -- Docker - https://www.docker.com/ -- Monorepo - https://semaphoreci.com/blog/what-is-monorepo -- Node.js - https://nodejs.org -- React - https://reactjs.org -- Semantic Versioning - https://semver.org -- TypeScript - https://www.typescriptlang.org -- YAML - https://yaml.org -- Yarn - https://www.pluralsight.com/guides/yarn-a-package-manager-for-node-js diff --git a/docs/getting-started/config/database.md b/docs/getting-started/config/database.md index 0fbd66d5a3..699160d550 100644 --- a/docs/getting-started/config/database.md +++ b/docs/getting-started/config/database.md @@ -6,13 +6,13 @@ description: How to set up PostgreSQL for your Backstage instance. Audience: Admins -### Summary +## Summary -This guide walks through how to set up a PostgreSQL database to host your Backstage data. It assumes you've already have a scaffolded Backstage app from following the [Standalone Install](../index.md) guide. +This guide walks through how to set up a PostgreSQL database to host your Backstage data. It assumes you've already have a scaffolded Backstage app from following the [Creating your Backstage App](../index.md) guide. By the end of this tutorial, you will have a working PostgreSQL database hooked up to your Backstage install. -### Prerequisites +## Prerequisites This guide assumes a basic understanding of working on a Linux based operating system and have some experience with the terminal, specifically, these commands: `apt-get`, `psql`, `yarn`. @@ -23,7 +23,7 @@ This guide assumes a basic understanding of working on a Linux based operating s - If the database is not hosted on the same server as the Backstage app, the PostgreSQL port needs to be accessible (the default is `5432` or `5433`) -### 1. Install and configure PostgreSQL +## 1. Install and Configure PostgreSQL :::tip Already configured your database? @@ -68,17 +68,9 @@ That's enough database administration to get started. Type `\q`, followed by pressing the enter key. Then again type `exit` and press enter. Next, you need to install and configure the client. -### 2. Configuring Backstage `pg` Client +## 2. Configuring Backstage `pg` Client -Go to the root directory of your freshly installed Backstage -App. Run the following to install the PostgreSQL client into your backend: - -```bash title="From your Backstage root directory" -yarn --cwd packages/backend add pg -``` - -Use your favorite editor to open `app-config.yaml` and add your PostgreSQL -configuration in the root directory of your Backstage app using the credentials from the previous steps. +Use your favorite editor to open `app-config.yaml` and add your PostgreSQL configuration in the root directory of your Backstage app using the credentials from the previous steps. ```yaml title="app-config.yaml" backend: @@ -126,6 +118,47 @@ After the Backstage frontend launches, you should notice that nothing has change We've now made your data persist in your Backstage database. +## Alternatives + +You may not want to install Postgres locally, the following sections outline alternatives. + +### Docker + +You can run Postgres in a Docker container, this is great for local development or getting a Backstage POC up and running quickly, here's how: + +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 +``` + +Then we just need to start up the container. + +```shell +docker run -d --name postgres --restart=always -p 5432:5432 -e POSTGRES_PASSWORD= postgres:17.0-bookworm +``` + +This will run Postgres in the background for you, but remember to start it up again when you reboot your system. + +### Docker Compose + +Another way to run Postgres is to use Docker Compose, here's what that would look like: + +```yaml title="docker-compose.local.yaml" +version: '4' + +services: + postgres: + image: postgres:17.0-bookworm + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: + ports: + - 5432:5432 +``` + +Then you would just run `docker compose -f docker-compose.local.yaml up` to start Postgres. + ## Next Steps We recommend you read [Setting up authentication](./authentication.md) next. @@ -136,3 +169,4 @@ If you want to read more about the database configuration, here are some helpful - [Configuring Plugin Databases](../../tutorials/configuring-plugin-databases.md#privileges) - [Read more about Knex](http://knexjs.org/), the database wrapper that we use. +- [Install `pgAdmin` 4](https://www.pgadmin.org/), a helpful tool for querying your database. diff --git a/docs/getting-started/configure-app-with-plugins.md b/docs/getting-started/configure-app-with-plugins.md index 95fd456dc0..c31cdc0a06 100644 --- a/docs/getting-started/configure-app-with-plugins.md +++ b/docs/getting-started/configure-app-with-plugins.md @@ -4,6 +4,14 @@ title: Configuring App with plugins description: Documentation on How Configuring App with plugins --- +Audience: Developers + +:::note Note +Backstage plugins are primarily written using [TypeScript](https://www.typescriptlang.org), [Node.js](https://nodejs.org) and [React](https://reactjs.org). Having an understanding of these technologies will be beneficial on your journey to customizing Backstage! +::: + +## Summary + Backstage plugins customize the app for your needs. There is a [plugin directory](https://backstage.io/plugins) with plugins for many common infrastructure needs - CI/CD, monitoring, auditing, and more. diff --git a/docs/getting-started/homepage.md b/docs/getting-started/homepage.md index d7c9b46faa..03722daedf 100644 --- a/docs/getting-started/homepage.md +++ b/docs/getting-started/homepage.md @@ -160,7 +160,7 @@ import React from 'react'; import Grid from '@material-ui/core/Grid'; import { HomePageCompanyLogo } from '@backstage/plugin-home'; -export const homePage = ( +export const HomePage = () => ( diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index 0d5529f611..687cf0be16 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -7,6 +7,10 @@ description: How to install Backstage for your own use. Audience: Developers and Admins +:::note Note +It is not required, although recommended to have a basic understanding of [Yarn](https://www.pluralsight.com/guides/yarn-a-package-manager-for-node-js) and [npm](https://docs.npmjs.com/about-npm) before starting this guide. +::: + ## Summary This guide walks through how to get started creating your very own Backstage customizable app. This is the first step in evaluating, developing on, or demoing Backstage. @@ -21,7 +25,7 @@ If you are planning to contribute a new feature or bug fix to the Backstage proj ## Prerequisites -This guide assumes a basic understanding of working on a Linux based operating system and have some experience with the terminal, specifically, these commands: `npm`, `yarn`. +This guide also assumes a basic understanding of working on a Linux based operating system and have some experience with the terminal, specifically, these commands: `npm`, `yarn`. - Access to a Unix-based operating system, such as Linux, macOS or [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/) @@ -30,16 +34,17 @@ This guide assumes a basic understanding of working on a Linux based operating s On macOS, you will want to have run `xcode-select --install` to get the XCode command line build tooling in place. - An account with elevated rights to install the dependencies - `curl` or `wget` installed -- Node.js [Active LTS Release](https://nodejs.org/en/about/previous-releases) installed using one of these +- Node.js [Active LTS Release](../overview/versioning-policy.md#nodejs-releases) installed using one of these methods: - 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` - [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) -- `yarn` [Installation](https://classic.yarnpkg.com/en/docs/install) - - You will need to use Yarn classic to create a new project, but it can then be [migrated to Yarn 3](../tutorials/yarn-migration.md) +- `yarn` [Installation](https://yarnpkg.com/getting-started/install) + - Backstage currently uses Yarn 4.4.1, once you've ran `corepack enable` you'll want to then run `yarn set version 4.4.1` - `docker` [installation](https://docs.docker.com/engine/install/) - `git` [installation](https://github.com/git-guides/install-git) - If the system is not directly accessible over your network the following ports @@ -142,16 +147,18 @@ Choose the correct next steps for your user role, if you're likely to be deployi ### Admin -- Deploying a production server +- Deploying to production + + - [Setting up authentication](./config/authentication.md) + - [Configuring a database](./config/database.md) - [Deploying with Docker](../deployment/docker.md) - [Deploying with Kubernetes](../deployment/k8s.md) - - [Deploying with AWS Lightsail](../deployment/backstage-deploy/aws.md) + - Configuring Backstage - - [Database](./config/database.md) - - [Authentication](./config/authentication.md) - - [Plugins](./configure-app-with-plugins.md) - - [Theme](./app-custom-theme.md) - - [Homepage](./homepage.md) + + - [Adding plugins](./configure-app-with-plugins.md) + - [Customizing the theme](./app-custom-theme.md) + - [Populating the homepage](./homepage.md) ### Developer diff --git a/docs/getting-started/keeping-backstage-updated.md b/docs/getting-started/keeping-backstage-updated.md index 08b89db518..a811a33383 100644 --- a/docs/getting-started/keeping-backstage-updated.md +++ b/docs/getting-started/keeping-backstage-updated.md @@ -4,46 +4,19 @@ title: Keeping Backstage Updated description: How to keep your Backstage App updated --- +Audience: Developers and Admins + +:::note Note +To better understand the concepts in this section, it's recommended to have an understanding of [Monorepos](https://semaphoreci.com/blog/what-is-monorepo), [Semantic Versioning](https://semver.org) and [CHANGELOGs](https://keepachangelog.com). +::: + +## Summary + Backstage is always improving, so it's a good idea to stay in sync with the latest releases. Backstage is more of a library than an application or service; similar to `create-react-app`, the `@backstage/create-app` tool gives you a starting point that's meant to be evolved. -## Managing package versions with the Backstage yarn plugin - -The Backstage yarn plugin makes it easier to manage Backstage package versions, -by determining the appropriate version for each package based on the overall -Backstage version in backstage.json. This avoids the need to update every -package.json across your Backstage monorepo, and means that when adding new -`@backstage` dependencies, you don't need to worry about figuring out the right -version to use to match the currently-installed release of Backstage. - -### Requirements - -In order to use the yarn plugin, you'll need to be using yarn 4.1.1 or greater. - -### Installation - -To install the yarn plugin, run the following command in your Backstage -monorepo: - -```bash -yarn plugin import https://versions.backstage.io/v1/tags/main/yarn-plugin -``` - -The resulting changes in the file system should be committed to your repo. - -### Usage - -When the yarn plugin is installed, versions for currently-released `@backstage` -packages can be replaced in package.json with the string `"backstage:^"`. This -instructs yarn to resolve the version based on the overall Backstage version in -backstage.json. - -The `backstage-cli versions:bump` command documented below will detect the -installation of the yarn plugin, and when it's installed, will automatically -migrate dependencies across the monorepo to use it. - ## Updating Backstage versions with backstage-cli The Backstage CLI has a command to bump all `@backstage` packages and @@ -57,6 +30,12 @@ yarn backstage-cli versions:bump The reason for bumping all `@backstage` packages at once is to maintain the dependencies that they have between each other. +:::tip + +To make the version bump process even easier and more streamlined we highly recommend using the [Backstage yarn plugin](#managing-package-versions-with-the-backstage-yarn-plugin) + +::: + By default the bump command will upgrade `@backstage` packages to the latest `main` release line which is released monthly. For those in a hurry that want to track the `next` release line which releases weekly can do so using the `--release next` option. ```bash @@ -87,6 +66,53 @@ for any applicable updates when upgrading packages. As an alternative, the a consolidated view of all the changes between two versions of Backstage. You can find the current version of your Backstage installation in `backstage.json`. +## Managing package versions with the Backstage yarn plugin + +The Backstage yarn plugin makes it easier to manage Backstage package versions, +by determining the appropriate version for each package based on the overall +Backstage version in `backstage.json`. This avoids the need to update every +package.json across your Backstage monorepo, and means that when adding new +`@backstage` dependencies, you don't need to worry about figuring out the right +version to use to match the currently-installed release of Backstage. + +### Requirements + +In order to use the yarn plugin, you'll need to be using yarn 4.1.1 or greater. + +### Installation + +To install the yarn plugin, run the following command in your Backstage +monorepo: + +```bash +yarn plugin import https://versions.backstage.io/v1/tags/main/yarn-plugin +``` + +The resulting changes in the file system should be committed to your repo. + +:::tip + +For best results it's ideal to add the Backstage Yarn plugin when you are about to do a Backstage upgrade as it will make it easier to confirm everything is working. + +::: + +### Usage + +When the yarn plugin is installed, versions for currently-released `@backstage` +packages can be replaced in package.json with the string `"backstage:^"`. This +instructs yarn to resolve the version based on the overall Backstage version in +`backstage.json`. + +:::tip + +The `backstage.json` is key for the plugin to work, make sure this file is included in your CI/CD pipelines and/or any Container builds. + +::: + +The `backstage-cli versions:bump` command documented above will detect the +installation of the yarn plugin, and when it's installed, will automatically +migrate dependencies across the monorepo to use it. + ## More information on dependency mismatches Backstage is structured as a monorepo with diff --git a/docs/getting-started/register-a-component.md b/docs/getting-started/register-a-component.md index c935d25807..4e2076ee8d 100644 --- a/docs/getting-started/register-a-component.md +++ b/docs/getting-started/register-a-component.md @@ -6,6 +6,10 @@ description: Start populating your Backstage app with your data. Audience: Developers +:::note Note +Entity files are stored in YAML format, if you are not familiar with YAML, you can learn more about it [here](https://yaml.org). +::: + ## Summary This guide will walk you through how to pull Backstage data from other locations manually. There are integrations that will automatically do this for you. diff --git a/docs/integrations/azure-blobStorage/discovery.md b/docs/integrations/azure-blobStorage/discovery.md new file mode 100644 index 0000000000..32612daf75 --- /dev/null +++ b/docs/integrations/azure-blobStorage/discovery.md @@ -0,0 +1,76 @@ +--- +id: discovery +title: Azure Blob Storage Discovery +sidebar_label: Discovery +# prettier-ignore +description: Automatically discovering catalog entities from an Azure Blob Storage account +--- + +:::info +This documentation is written for [the new backend system](../../backend-system/index.md) which is the default since Backstage [version 1.24](../../releases/v1.24.0.md). +::: + +The Azure Blob Storage account integration has a special entity provider for discovering catalog +entities located in a storage account container. If you have a container that contains multiple +catalog files, and you want to automatically discover them, you can use this +provider. The provider will crawl your Blob Storage account container and register entities +matching the configured path. This can be useful as an alternative to static +locations or manually adding things to the catalog. + +To use the entity provider, you'll need an Azure Blob Storage account integration +[set up](locations.md) with `accountName` and either `aadCredential`, `sasToken`, or `accountKey` + +At production deployments, you likely manage these with the permissions attached +to your instance. + +In your configuration, you add a provider config per bucket: + +```yaml +# app-config.yaml + +catalog: + providers: + azureBlob: + providerId: + accountName: ${ACCOUNT_NAME} + containerName: ${CONTAINER_NAME} + schedule: # same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } +``` + +For simple setups, you can omit the provider ID at the config +which has the same effect as using `default` for it. + +```yaml +# app-config.yaml + +catalog: + providers: + azureBlob: + accountName: ${ACCOUNT_NAME} + containerName: ${CONTAINER_NAME} + schedule: # same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } +``` + +As this provider is not one of the default providers, you will first need to install +the Azure catalog plugin: + +```bash title="From your Backstage root directory" +yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-azure +``` + +Then updated your backend by adding the following line: + +```ts title="packages/backend/src/index.ts" +backend.add(import('@backstage/plugin-catalog-backend')); +/* highlight-add-start */ +backend.add(import('@backstage/plugin-catalog-backend-module-azure')); +/* highlight-add-end */ +``` diff --git a/docs/integrations/azure-blobStorage/locations.md b/docs/integrations/azure-blobStorage/locations.md new file mode 100644 index 0000000000..38d8555c2e --- /dev/null +++ b/docs/integrations/azure-blobStorage/locations.md @@ -0,0 +1,51 @@ +--- +id: locations +sidebar_label: Locations +title: Azure Blob Storage account Locations +# prettier-ignore +description: Setting up an integration with Azure Blob Storage account +--- + +The Azure Blob Storage account integration supports loading catalog entities from an blob storage account container. +Entities can be added to +[static catalog configuration](../../features/software-catalog/configuration.md), +or registered with the +[catalog-import](https://github.com/backstage/backstage/tree/master/plugins/catalog-import) +plugin. + +## Configuration + +To use this integration, add configuration to your `app-config.yaml`: + +Using Azure active directory credentials: + +```yaml +integrations: + azureBlobStorage: + - accountName: ${ACCOUNT_NAME} # required + endpoint: ${CUSTOM_ENDPOINT} # custom endpoint will require either aadCredentials or sasToken + aadCredential: + clientId: ${CLIENT_ID} + tenantId: ${TENANT_ID} + clientSecret: ${CLIENT_SECRET} +``` + +Using Azure storage account SAS token: + +```yaml +integrations: + azureBlobStorage: + - accountName: ${ACCOUNT_NAME} # required + endpoint: ${CUSTOM_ENDPOINT} # custom endpoint will require either aadCredentials or sasToken + sasToken: ${SAS_TOKEN} +``` + +Using Azure storage account access key: + +```yaml +integrations: + azureBlobStorage: + - accountName: ${ACCOUNT_NAME} # required + endpoint: ${CUSTOM_ENDPOINT} # custom endpoint will require either aadCredentials or sasToken + accountKey: ${ACCOUNT_KEY} +``` diff --git a/docs/integrations/bitbucketServer/discovery--old.md b/docs/integrations/bitbucketServer/discovery--old.md index d8ef11533b..83fe70da0d 100644 --- a/docs/integrations/bitbucketServer/discovery--old.md +++ b/docs/integrations/bitbucketServer/discovery--old.md @@ -1,5 +1,5 @@ --- -id: discovery +id: discovery--old title: Bitbucket Server Discovery sidebar_label: Discovery # prettier-ignore diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md index eab590ff11..de35fbcc96 100644 --- a/docs/integrations/gitlab/discovery.md +++ b/docs/integrations/gitlab/discovery.md @@ -150,6 +150,7 @@ catalog: branch: main # Optional. Used to discover on a specific branch fallbackBranch: master # Optional. Fallback to be used if there is no default branch configured at the Gitlab repository. It is only used, if `branch` is undefined. Uses `master` as default skipForkedRepos: false # Optional. If the project is a fork, skip repository + includeArchivedRepos: false # Optional. If project is archived, include repository group: example-group # Optional. Group and subgroup (if needed) to look for repositories. If not present the whole instance will be scanned entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml` projectPattern: '[\s\S]*' # Optional. Filters found projects based on provided patter. Defaults to `[\s\S]*`, which means to not filter anything @@ -212,3 +213,5 @@ catalog: If you don't want create location object if file with component definition do not exists in project, you can set the `skipReposWithoutExactFileMatch` option. That can reduce count of request to gitlab with 404 status code. If you don't want to create location object if the project is a fork, you can set the `skipForkedRepos` option. + +If you want to create location object if the project is archived, you can set the `includeArchivedRepos` option. diff --git a/docs/integrations/gitlab/org.md b/docs/integrations/gitlab/org.md index 66ce117aa0..8249a97c24 100644 --- a/docs/integrations/gitlab/org.md +++ b/docs/integrations/gitlab/org.md @@ -170,7 +170,7 @@ catalog: yourProviderId: host: gitlab.com orgEnabled: true - group: org/teams # Required for gitlab.com when `orgEnabled: true`. Optional for self managed. Must not end with slash. Accepts only groups under the provided path (which will be stripped) + group: org/teams # Required for gitlab.com when `orgEnabled: true`. Optional for self managed. Must not end with slash. Accepts only this group and groups under the provided path (which will be stripped) relations: # Optional - INHERITED # Optional. Members of any ancestor groups will also be considered members of the current group. - DESCENDANTS # Optional. Members of any descendant groups will also be considered members of the current group. @@ -240,7 +240,7 @@ catalog: yourProviderId: host: gitlab.com ## Could also be self hosted. orgEnabled: true - group: org/teams # Required for gitlab.com when `orgEnabled: true`. Optional for self managed. Must not end with slash. Accepts only groups under the provided path (which will be stripped) + group: org/teams # Required for gitlab.com when `orgEnabled: true`. Optional for self managed. Must not end with slash. Accepts only this group and groups under the provided path (which will be stripped) restrictUsersToGroup: true # Optional: Backstage will ingest only users directly assigned to org/teams. includeUsersWithoutSeat: false # Optional: Set to true to include users without paid seat, only applicable for SaaS ``` diff --git a/docs/integrations/ldap/org.md b/docs/integrations/ldap/org.md index 50cf74ffb6..4dd7b7d1d8 100644 --- a/docs/integrations/ldap/org.md +++ b/docs/integrations/ldap/org.md @@ -55,6 +55,8 @@ backend.add(import('@backstage/plugin-catalog-backend-module-ldap')); The following configuration is a small example of how a setup could look for importing groups and users from a corporate LDAP server. +Users and Groups can be configured for multiple `dn` entries as an array. + ```yaml catalog: providers: @@ -65,25 +67,24 @@ catalog: dn: uid=ldap-reader-user,ou=people,ou=example,dc=example,dc=net secret: ${LDAP_SECRET} users: - dn: ou=people,ou=example,dc=example,dc=net - options: - filter: (uid=*) - map: - description: l - set: - metadata.customField: 'hello' + - dn: ou=people,ou=example,dc=example,dc=net + options: + filter: (uid=*) + map: + description: l + set: + metadata.customField: 'hello' groups: - dn: ou=access,ou=groups,ou=example,dc=example,dc=net - options: - filter: (&(objectClass=some-group-class)(!(groupType=email))) - map: - description: l - set: - metadata.customField: 'hello' + - dn: ou=access,ou=groups,ou=example,dc=example,dc=net + options: + filter: (&(objectClass=some-group-class)(!(groupType=email))) + map: + description: l + set: + metadata.customField: 'hello' ``` -These config blocks have a lot of options in them, so we will describe each -"root" key within the block separately. +These config blocks have a lot of options in them, so we will describe each "root" key within the block separately. > NOTE: > @@ -303,6 +304,33 @@ map: members: member ``` +## Optional Vendor Configuration + +In case the LDAP vendor isn't automatically detected by the module, an optional `vendor` configuration section is available which allows overriding the location for `dn` and `uuid` settings, and a case sensitivity setting. + +#### vendor.dnAttributeName + +Allows explicitly defining the name of the attribute that stores each entry's DN. + +#### vendor.uuidAttributeName + +Allows explicitly defining the name of the attribute that stores each entry's UUID. + +#### vendor.dnCaseSensitive + +Provides the ability to ignore case sensitivity issues with user/group mappings. If set to true, the ingestion will link user/members to groups whether their `dn`, `member`, or `memberOf` values have the right case or not. + +```yaml +vendor: + # Attribute name override for the distinguished name (DN) of an entry. + dnAttributeName: dn + # Attribute name override for the unique identifier (UUID) of an entry. + uuidAttributeName: uuid + # Attribute to force values provided from dn and members/memberOf values all to lowercase. + # This is to resolve potential user/group mapping issues if case differences on dn strings. + dnCaseSensitive: true +``` + ## Customize the Provider In case you want to customize the ingested entities, the provider allows to pass diff --git a/docs/notifications/index.md b/docs/notifications/index.md index b44b04ef4e..bb8a7dc246 100644 --- a/docs/notifications/index.md +++ b/docs/notifications/index.md @@ -385,7 +385,7 @@ Refer to the [service-to-service auth documentation](https://backstage.io/docs/a An example request for creating a broadcast notification might look like: ```bash -curl -X POST https://[BACKSTAGE_BACKEND]/api/notifications -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_BASE64_SHARED_KEY_TOKEN" -d '{"recipients":{"type":"broadcast"},"payload": {"title": "Title of broadcast message","link": "http://foo.com/bar","severity": "high","topic": "The topic"}}' +curl -X POST https://[BACKSTAGE_BACKEND]/api/notifications/notifications -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_BASE64_SHARED_KEY_TOKEN" -d '{"recipients":{"type":"broadcast"},"payload": {"title": "Title of broadcast message","link": "http://foo.com/bar","severity": "high","topic": "The topic"}}' ``` ## Additional info diff --git a/docs/openapi/01-getting-started.md b/docs/openapi/01-getting-started.md index 156df9bd17..ce14cf6a7f 100644 --- a/docs/openapi/01-getting-started.md +++ b/docs/openapi/01-getting-started.md @@ -35,10 +35,10 @@ There are two required npm packages before we start, 1. `@backstage/repo-tools`, this package contains all OpenAPI-related commands for your plugins. We will be using this throughout the tutorial. 2. `@useoptic/optic`, this package is a dependency of `@backstage/repo-tools` but is only required for OpenAPI-related commands. -Further, for generating the client a `java` binary has to be available on your PATH. - You should install both of the above packages in the _root_ of your workspace. +Further, a `java` binary has to be available on your PATH. + ## Storing your OpenAPI specification You should create a new folder, `src/schema` in your backend plugin to store your OpenAPI (and any other) specifications. For example, if you're adding a specification to the catalog plugin, you would add a `src/schema` folder to `plugins/catalog-backend`, making a `plugins/catalog-backend/src/schema` directory. This directory should have an `openapi.yaml` file inside. @@ -47,12 +47,14 @@ You should create a new folder, `src/schema` in your backend plugin to store you ## Generating a typed express router from a spec -Run `yarn backstage-repo-tools package schema openapi generate --server` from the directory with your plugin. This will create an `openapi.generated.ts` file in the `src/schema` directory that contains the OpenAPI schema as well as a generated express router with types. You should add this command to your `package.json` for future use, and you can combine both the server generation and the client generation below, like so, `yarn backstage-repo-tools package schema openapi generate --server --client-package ` +Run `yarn backstage-repo-tools package schema openapi generate --server` from the directory with your plugin. This will create a `router.ts` file in the `src/schema/openapi/generated` directory that contains the OpenAPI schema as well as a factory function for a generated express router with types that match your schema. + +You should add this command to your `package.json` for future use and you can combine both the server generation and the client generation below like so, `yarn backstage-repo-tools package schema openapi generate --server --client-package ` Use it like so, update your `router.ts` or `createRouter.ts` file with the following content, ```diff -+ import { createOpenApiRouter } from '../schema/openapi.generated'; ++ import { createOpenApiRouter } from '../schema/openapi'; - import Router from 'express-promise-router'; ... @@ -65,12 +67,12 @@ export async function createRouter( ## Generating a typed client from a spec -From your current backend plugin directory, run `yarn backstage-repo-tools package schema openapi generate --client-package `. `` is a new directory and npm package that you should create. The general pattern is `plugins/-client` or if you want to co-locate this with your other shared types, use `plugins/-common`. You should add this command to your `package.json` for future use. +From your current backend plugin directory, run `yarn backstage-repo-tools package schema openapi generate --client-package `. `` is a new directory and npm package that you should create. The general pattern is to add a new entry point to your plugin's common package, `plugins/-common/client`. You should add this command to your `package.json` for future use. -The generated client will have a directory `src/generated` that exports a `DefaultApiClient` class and all generated types. You can use the client like so, +The generated client will have a directory `src/schema/openapi/generated` that exports a `DefaultApiClient` class and all generated types. You can use the client like so, ```diff -+ import { DefaultApiClient } from './generated'; ++ import { DefaultApiClient } from '../schema/openapi/generated'; export class CatalogClient implements CatalogApi { + private readonly apiClient: DefaultApiClient; diff --git a/docs/openapi/generate-client.md b/docs/openapi/generate-client.md index b8acc331e5..29756dcad2 100644 --- a/docs/openapi/generate-client.md +++ b/docs/openapi/generate-client.md @@ -20,9 +20,7 @@ info: ### Generating your client -1. Run `yarn backstage-repo-tools package schema openapi generate client --client-package `. This will create a new folder in `/src/generated` to house the generated content. -2. You should use the generated files as follows, - -- `apis/DefaultApi.client.ts` - this is the client that you should use. It has types for all of the various operations on your API. -- `models/*` - These are the types generated from your OpenAPI file, ideally you should not need to use these directly and can instead use the inferred types from `apis/DefaultApi.client.ts`. -- everything else is directory specific and shouldn't be touched. +1. Run `yarn backstage-repo-tools package schema openapi generate --client-package `. This will create a new folder in `/src/schema/openapi/generated` to house the generated content. +2. You should not need to import anything from subfolders of the `src/schema/openapi/generated` parent folder, everything you should require will be accessible from the `src/schema/openapi/generated/index.ts` file. Of note, +3. `DefaultApiClient` - this is the client that you can use to access your specific spec. +4. Any request or response types - these will be available from the index and should match the names in your spec. diff --git a/docs/overview/adopting.md b/docs/overview/adopting.md index 5b6c3bcaed..a6053d0f85 100644 --- a/docs/overview/adopting.md +++ b/docs/overview/adopting.md @@ -94,31 +94,31 @@ Examples of tactics we have used to evangelize Backstage internally: These are some of the metrics that you can use to verify if Backstage has a successful impact on your software development process: -- **Onboarding time** Time until new engineers are productive. At Spotify we +- **Onboarding time** - Time until new engineers are productive. At Spotify we measure this as the time until the employee has merged their 10th PR (this metric was down 55% two years after deploying Backstage). Even though you may not be onboarding engineers at a rapid pace, this metric is a great proxy for the overall complexity of your ecosystem. Reducing it will therefore benefit your whole engineering organization, not just new joiners. -- **Number of merges per developer/day** Less time spent jumping between +- **Number of merges per developer/day** - Less time spent jumping between different tools and looking for information means more time to focus on shipping code. A second level of bottlenecks can be identified if you categorize contributions by domain (services, web, data, etc). -- **Deploys to production** Cousin to the metric above: How many times does an +- **Deploys to production** - Cousin to the metric above: How many times does an engineer push changes into production. -- **MTTR** With clear ownership of all the pieces in your microservices +- **MTTR** - With clear ownership of all the pieces in your microservices ecosystem and all tools integrated into one place, Backstage makes it quicker for teams to find the root cause of failures, and fix them. -- **Context switching** Reducing context switching can help engineers stay in +- **Context switching** - Reducing context switching can help engineers stay in the "zone". We measure the number of different tools an engineer has to interact with in order to get a certain job done (e.g. push a change, follow it into production and validate it did not break anything). -- **T-shapedness** A +- **T-shapedness** - A [T-shaped](https://medium.com/@jchyip/why-t-shaped-people-e8706198e437) engineer is someone that is able to contribute to different domains of engineering. Teams with T-shaped people have fewer bottlenecks and can @@ -126,10 +126,10 @@ successful impact on your software development process: since tools and infrastructure are consistent between domains, and information is available centrally. -- **eNPS** Surveys asking about how productive people feel, how easy it is to +- **eNPS** - Surveys asking about how productive people feel, how easy it is to find information and overall satisfaction with internal tools. -- **Fragmentation** _(Experimental)_ Backstage +- **Fragmentation** _(Experimental)_ - Backstage [Software Templates](../features/software-templates/index.md) help drive standardization in your software ecosystem. By measuring the variance in technology between different software components it is possible to get a sense diff --git a/docs/overview/architecture-overview.md b/docs/overview/architecture-overview.md index 2295a3e503..c745719e08 100644 --- a/docs/overview/architecture-overview.md +++ b/docs/overview/architecture-overview.md @@ -323,11 +323,8 @@ backend: cache: store: redis connection: redis://user:pass@cache.example.com:6379 - useRedisSets: true ``` -The useRedisSets flag is explained [here](https://github.com/jaredwray/keyv/tree/main/packages/redis#useredissets). - Contributions supporting other cache stores are welcome! ## Containerization diff --git a/docs/overview/versioning-policy.md b/docs/overview/versioning-policy.md index 2ae73e1383..f5e2e222f8 100644 --- a/docs/overview/versioning-policy.md +++ b/docs/overview/versioning-policy.md @@ -177,6 +177,8 @@ When we say _Supporting_ a Node.js release, that means the following: - New Backstage projects created with `@backstage/create-app` will have their `engines.node` version set accordingly. - Dropping compatibility with unsupported releases is not considered a breaking change. This includes using new syntax or APIs, as well as bumping dependencies that drop support for these versions. +Based on the above Backstage supports Node.js 20 and 22 as of the `1.33.0` release. + ## TypeScript Releases The Backstage project uses [TypeScript](https://www.typescriptlang.org/) for type checking within the project, as well as external APIs and documentation. It is important to have a clear policy for which TypeScript versions we support, since we want to be able to adopt new TypeScript features, but at the same time not break existing projects that are using older versions. diff --git a/docs/plugins/guides.md b/docs/plugins/guides.md new file mode 100644 index 0000000000..a6bca91cdc --- /dev/null +++ b/docs/plugins/guides.md @@ -0,0 +1,56 @@ +--- +id: guides +title: Guides for Plugins +--- + +:::note Note +This docs is still a work in progress, many of the guides described below do not exist yet. +::: + +## Guides for Plugin Development + +### For Beginners: Introduction to Plugin Development + +This section is designed for those new to plugin development. It covers the basics and provides a foundation for more advanced topics. + +- **Introduction to Plugin Development** + - Why build plugins? Introduction to the value and impact of plugins within Backstage. + - Detailed guidance on starting and iterating on a plugin development project. + - Engaging with the community and stakeholders to propel your project. + +### For Intermediate Users: Scaling and Deploying Your Plugin + +This section helps developers prepare their plugins for broader adoption, emphasizing best practices in monitoring, logging, and performance. + +- **Scaling and Deploying Your Plugin** + - Strategies for scaling your plugin for greater adoption. + - Best practices for monitoring and logging. + - Understand plugin ownership and maintain an inner source mentality. + +### For Advanced Users: Advanced Plugin Customization and Integration + +This is for those ready to explore complex challenges and enhance their plugins with advanced features. + +- **Advanced Plugin Customization and Integration** + - Enabling resource-level authorization and interfacing with external services, SCMs, or databases. + - In-depth exploration of fostering an inner source mentality and understanding adoption dynamics. + - Decision-making frameworks: choosing between developing a new plugin or utilizing an existing open-source solution. + - Open-sourcing: How and when to contribute back to the community. + +## Additional Resources and Further Reading + +- **Real-world Implementations and Lessons** + + - [Case studies and examples from the community](https://github.com/backstage/community#newsletters). + - Best practices derived from mature implementations. + - [Existing open-source community-maintained plugins](https://github.com/backstage/community-plugins). + +- **Resource Compendium** + + - [Backstage Glossary](https://backstage.io/docs/references/glossary) of key terms. + - Recommended readings and tools for advanced developers. + +- **Certification and Learning Pathways** + - Pathways to deepen your understanding and expertise in plugin development for Backstage. + +Stay tuned for detailed exploration and guidance in each of these modules. We're excited to accompany you on your plugin development journey! diff --git a/docs/plugins/index.md b/docs/plugins/index.md index 94de3bc482..f709afa894 100644 --- a/docs/plugins/index.md +++ b/docs/plugins/index.md @@ -1,36 +1,25 @@ --- id: index -title: Intro to plugins -description: Documentation on Introduction to Plugins +title: Introduction to Plugins +description: Learn about integrating various infrastructure and software development tools into Backstage through plugins. --- -Backstage is a single-page application composed of a set of plugins. +Backstage orchestrates a cohesive single-page application by seamlessly integrating various plugins. -Our goal for the plugin ecosystem is that the definition of a plugin is flexible -enough to allow you to expose pretty much any kind of infrastructure or software -development tool as a plugin in Backstage. By following strong -[design guidelines](../dls/design.md) we ensure the overall user experience -stays consistent between plugins. +Our vision for the plugin ecosystem champions flexibility, empowering you to incorporate a broad spectrum of infrastructure and software development tools into Backstage as plugins. Adherence to stringent [design guidelines](../dls/design.md) guarantees a consistent and intuitive user experience across the entire plugin landscape. -![plugin](../assets/plugins/my-plugin_screenshot.png) +![Plugin Screenshot](../assets/plugins/my-plugin_screenshot.png) -## Creating a plugin +## Creating a Plugin -To create a plugin, follow the steps outlined [here](create-a-plugin.md). +Embark on your plugin development journey by following the detailed steps provided in the [Create a Plugin](create-a-plugin.md) documentation. -## Suggesting a plugin +## Suggesting a Plugin -If you start developing a plugin that you aim to release as open source, we -suggest that you create a -[new Issue in the community plugins repo](https://github.com/backstage/community-plugins/issues/new/choose). -This helps the community know what plugins are in development. +If you're developing an open-source plugin, we encourage you to create a [new issue in the community plugins repository](https://github.com/backstage/community-plugins/issues/new/choose). This informs the community about upcoming plugins and invites collaboration and feedback. -You can also use this process if you have an idea for a good plugin but you hope -that someone else will pick up the work. +This approach is equally beneficial if you conceive an idea for a potentially impactful plugin but prefer if another contributor undertakes its development. -## Integrate into the Software Catalog +## Integration with the Software Catalog -If your plugin isn't supposed to live as a standalone page, but rather needs to -be presented as a part of a Software Catalog (e.g. a separate tab or a card on -an "Overview" tab), then check out -[the instruction](integrating-plugin-into-software-catalog.md) on how to do it. +Should your plugin complement the Software Catalog rather than exist as a standalone feature (for instance, as an additional tab or a card within an "Overview" tab), you'll find comprehensive guidance on achieving this integration in the [Integrating Plugin into Software Catalog guide](integrating-plugin-into-software-catalog.md). diff --git a/docs/plugins/integrating-search-into-plugins.md b/docs/plugins/integrating-search-into-plugins.md index 05d07feb08..e51b4cfefa 100644 --- a/docs/plugins/integrating-search-into-plugins.md +++ b/docs/plugins/integrating-search-into-plugins.md @@ -106,15 +106,12 @@ Imagine your FAQs can be retrieved at the URL `https://backstage.example.biz/faq Below we provide an example implementation of how the FAQ collator factory could look like using our new document type, placed in the `plugins/search-backend-module-faq-snippets-collator/src/factory.ts` file: ```ts -import fetch from 'node-fetch'; import { Readable } from 'stream'; - import { LoggerService, RootConfigService, } from '@backstage/backend-plugin-api'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; - import { FaqSnippetDocument } from './types'; const DEFAULT_BASE_URL = 'https://backstage.example.biz/faq-snippets'; diff --git a/docs/plugins/internationalization.md b/docs/plugins/internationalization.md index ba3f694d0c..1fbf54d94e 100644 --- a/docs/plugins/internationalization.md +++ b/docs/plugins/internationalization.md @@ -165,8 +165,12 @@ export const userSettingsTranslations = createTranslationResource({ zh: () => import('./userSettings-zh'), }, }); +``` +```ts // packages/app/src/translations/userSettings-zh.ts + +import { createTranslationMessages } from '@backstage/core-plugin-api/alpha'; import { userSettingsTranslationRef } from '@backstage/plugin-user-settings/alpha'; const zh = createTranslationMessages({ diff --git a/docs/publishing.md b/docs/publishing.md index 740292949f..902460e61e 100644 --- a/docs/publishing.md +++ b/docs/publishing.md @@ -33,6 +33,8 @@ PR is merged. This is typically done every Tuesday around noon CET. Merging the `Version Packages (next)` Pull Request will trigger the deployment workflows. Follow along the [deployment workflow](https://github.com/backstage/backstage/actions/workflows/deploy_packages.yml). If you notice flakiness (e.g. if the build is flaky or if the release step runs into an error with releasing to npm) just restart the workflow. +When the release is ready to be published, maintainers will be notified in the private `#maintainers` channel on the Backstage Discord Server. They will then start the publishing workflow on the publishing workflows page linked in the notification message. On the publishing workflows page there is a dropdown menu called "Run workflow", this opens a form where the person responsible for the release should paste the SHA received in the Discord notification and click to run the workflow. + Congratulations on the release! There should be now a post in the [`#announcements` channel](https://discord.com/channels/687207715902193673/705123584468582400) in Discord linking to the release tag - check if links & tag look as expected. Once the notification has gone out on Discord you can unlock the main branch & the release is complete. ## Main Line Release Process diff --git a/docs/releases/v1.33.0-changelog.md b/docs/releases/v1.33.0-changelog.md new file mode 100644 index 0000000000..f8c9c17aeb --- /dev/null +++ b/docs/releases/v1.33.0-changelog.md @@ -0,0 +1,2659 @@ +# Release v1.33.0 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.33.0](https://backstage.github.io/upgrade-helper/?to=1.33.0) + +## @backstage/backend-dynamic-feature-service@0.5.0 + +### Minor Changes + +- e939cd7: **BREAKING** The `dynamicPluginsFeatureLoader` options related to the root logger behavior (`transports`, `level`, `format`) are now gathered under a single `logger` option which is a function taking an optional `Config` argument and returning the logger options. + + This breaking change is required for 2 reasons: + + - it's totally possible that the current `Config` would be required to provide the logger options, + - the logger-related options should be gathered under a common `logger` option because, when the root auditing service is introduced, distinct but similarly-named options would be required for the auditor as well. + +### Patch Changes + +- 1aeec12: Enhance the `CommonJSModuleLoader` to add support for `resolvePackagePath` calls from backend dynamic plugins, with customizable package resolution, and make the `CommonJSModuleLoader` public API. + Fixing this backend dynamic plugin limitation related to `resolvePackagePath` is important for backend dynamic plugins which use the database, since database migration scripts systematically use `resolvePackagePath`. +- 8593dfa: Improve the way alpha packages are supported when loading dynamic backend plugins. + The `ScannedPluginPackage` descriptor of dynamic backend plugins loaded from their alpha `package.json` now contain both the main package manifest and the alpha manifest. Previously it used to contain only the content of the alpha `package.json`, which is nearly empty. + This will make it easier to use or display metadata of loaded dynamic backend plugins, which is contained in the main manifest. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-defaults@0.5.3 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-events-backend@0.3.16 + - @backstage/config-loader@1.9.2 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/backend-app-api@1.0.2 + - @backstage/cli-common@0.1.15 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/cli-node@0.2.10 + - @backstage/errors@1.2.5 + - @backstage/plugin-app-node@0.1.27 + - @backstage/plugin-permission-node@0.8.5 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/backend-openapi-utils@0.3.0 + +### Minor Changes + +- 1440232: Adds a new `createValidatedOpenApiRouterFromGeneratedEndpointMap` function that uses the new static server generation in `backstage-cli package schema openapi generate --server` to create a typed express router. + +### Patch Changes + +- f01787a: Moves msw from dependencies to devDependencies +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + +## @backstage/backend-test-utils@1.1.0 + +### Minor Changes + +- 5064827: Made it possible to construct `mockServices.database` with a given knex instance + +### Patch Changes + +- 7aae8e3: The `mockServices.discovery.factory()` factory now uses the mocked discovery service as its implementation, avoid the need for configuration. +- eb82994: Removed unused `msw` dependency. +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-defaults@0.5.3 + - @backstage/types@1.2.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/backend-app-api@1.0.2 + - @backstage/errors@1.2.5 + +## @backstage/catalog-client@1.8.0 + +### Minor Changes + +- 656d1ef: Internal update to use the updated generated code from `backstage-cli package schema openapi generate --client-package ...`. +- 31c4fe0: The client now automatically splits up very large `getEntitiesByRefs` calls into several smaller requests behind the scenes when needed. This ensures that each individual request does not exceed common Express.js request body limits or overload the server. + +### Patch Changes + +- 873f89a: Fix for certain filter fields in the `catalogApiMock` being case sensitive. +- Updated dependencies + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/cli@0.29.0 + +### Minor Changes + +- bc47b17: **BREAKING**: Updates ESLint config to ignore all generated source code under `src/**/generated/**/*.ts`. + +- 6819f8c: Added a new optimization to the `repo test` command that will filter out unused packages in watch mode if all provide filters are paths that point from the repo root. This significantly speeds up running individual tests from the repo root in a large workspace, for example: + + ```sh + yarn test packages/app/src/App.test.tsx + ``` + +- d849865: The package packing now populates `typesVersions` for additional entry points rather than using additional `package.json` files for type resolution. This improves auto completion of separate entry points when consuming published packages. + +- bc71665: **BREAKING**: The `LEGACY_BACKEND_START` flag has been removed, along with support for `src/run.ts` as the development entry point. + +### Patch Changes + +- 4046d53: Fixed an issue where the `--successCache` option for the `repo test` and `repo lint` commands would be include the workspace path in generated cache keys. This previously broke caching in environments where the workspace path varies across builds. + +- 4a378d3: Fix dev server reloads of plugin discovery for new frontend system. + +- 28b60ad: The check for `react-dom/client` in the Jest configuration will now properly always run from the target directory. + +- 6b2888c: Fixed an issue with the `--successCache` flag for `repo test` where the tree hash for the wrong package directory would sometimes be used to generate the cache key. + +- e30b65d: Added `--alwaysPack` as a replacement for the now hidden `--alwaysYarnPack` flag for the `build-workspace` command. + +- be0278e: Removed circular import + +- a7f97e4: Added a new `"rejectFrontendNetworkRequests"` configuration flag that can be set in the `"jest"` field in the root `package.json`: + + ```json + { + "jest": { + "rejectFrontendNetworkRequests": true + } + } + ``` + + This flag causes rejection of any form of network requests that are attempted to be made in frontend or common package tests. This flag can only be set in the root `package.json` and can not be overridden in individual package configurations. + +- 6c48ebd: Add `--max-warnings -1` support to `backstage-cli package lint` + +- 04297a0: The `--successCache` option for the `repo test` and `repo lint` commands now use an additive store that keeps old entries around for a week before they are cleaned up automatically. + +- a2f0559: When using the experimental Rspack flag the app build and dev server now injects configuration via a `` tag in `index.html` rather than the `process.env.APP_CONFIG` definition, which will now be defined as an empty array instead. + + This requires the app to be using the config loader from the 1.31 release of Backstage. Make sure your app is using at least that version if you are upgrading to this version of the CLI. + + If you have copied the implementation of the `defaultConfigLoader`, make sure to update it to the new implementation. In particular the config loader needs to be able to read configuration from `script` tags with the type `backstage.io/config`. + +- b4627f2: Fixed an issue where the `raw-loader` for loading HTML templates was not resolved from the context of the CLI package. + +- cd1ef2b: Updated dependency `vite` to `^5.0.0`. + +- 23f1da2: Updated dependency `ts-morph` to `^24.0.0`. + +- b533056: Updated dependency `css-loader` to `^7.0.0`. + +- be008c3: Updated dependency `@module-federation/enhanced` to `^0.7.0`. + +- 6266ed3: Updated dependency `del` to `^8.0.0`. + +- 4046d53: Fixed an issue with the `repo lint` command where the cache key for the `--successCache` option would not properly ignore files that should be ignored according to `.eslintignore`s. + +- e19c53c: Fix for the `--link` flag for `package start` to deduplicate `react-router` and `react-router-dom`. + +- 17850a5: Update upgrade-helper link in `versions:bump` command to include `yarnPlugin` parameter when the yarn plugin is installed + +- 09ea093: Fixed an issue where `.css` style injection would fail for published packages. + +- 702f41d: Bumped dev dependencies `@types/node` + +- 5d74716: Remove unused backend-common dependency + +- b084f5a: Bump the Webpack dependency range to `^5.94.0`, as our current configuration is not compatible with some older versions. + +- e565f73: Added support for `.webp` files in the frontend tooling. + +- 946fa34: Added a new `--link ` option for frontend builds that allow you to override module resolution to link in an external workspace at runtime. + + As part of this change the Webpack linked workspace resolution plugin for frontend builds has been removed. It was in place to support the old workspace linking where it was done by Yarn, which is no longer a working option. + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/config-loader@1.9.2 + - @backstage/cli-common@0.1.15 + - @backstage/catalog-model@1.7.1 + - @backstage/cli-node@0.2.10 + - @backstage/errors@1.2.5 + - @backstage/eslint-plugin@0.1.10 + - @backstage/integration@1.15.2 + - @backstage/release-manifests@0.0.11 + +## @backstage/config@1.3.0 + +### Minor Changes + +- d52d7f9: Make `readDurationFromConfig` support both ISO and ms formats as well, to make it easier to enter time as an end user + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/errors@1.2.5 + +## @backstage/core-components@0.16.0 + +### Minor Changes + +- dc409c5: The SupportButton component will now be hidden if no support config is specified in app-config + +### Patch Changes + +- 0f18340: Change core component Table tool bar search box to the a appropriate Search icon and text + +- af9097e: Adds the ability to mock a media query per break point and to change the active break point during a test. Usage example: + + ```ts + const { set } = mockBreakpoint({ + initialBreakpoint: 'md', + queryBreakpointMap: { + '(min-width:1500px)': 'xl', + '(min-width:1000px)': 'lg', + '(min-width:700px)': 'md', + '(min-width:400px)': 'sm', + '(min-width:0px)': 'xs', + }, + }); + // assertions for when the active break point is "md" + set('lg'); + // assertions for when the active break point is "lg" + ``` + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/version-bridge@1.0.10 + +## @backstage/repo-tools@0.11.0 + +### Minor Changes + +- 1440232: `backstage-repo-tools package schema openapi generate --server` now generates complete TS interfaces for all request/response objects in your OpenAPI schema. This fixes an edge case around recursive schemas and standardizes both the generated client and server to have similar generated types. +- 47fdbb4: Adds a `--watch` mode to the `schema openapi generate` command for a better local schema writing experience. + +### Patch Changes + +- 95401a8: The `generate-patch` command now properly includes newly created files in the patch. +- 23f1da2: Updated dependency `ts-morph` to `^24.0.0`. +- 3f1fb21: The `generate-patch` command will now fall back to always adding a `resolutions` entry, even if no matching descriptors are found. +- dde85ee: Added a new `generate-patch` command that can be used to generate patches for current changes in a source workspace to be installed it a target workspace. +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/config-loader@1.9.2 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/cli-common@0.1.15 + - @backstage/catalog-model@1.7.1 + - @backstage/cli-node@0.2.10 + - @backstage/errors@1.2.5 + +## @backstage/types@1.2.0 + +### Minor Changes + +- c5e39e7: Introduce `createDeferred` and `DeferredPromise`. + +## @backstage/plugin-api-docs@0.12.0 + +### Minor Changes + +- 6836522: Added support for pagination in api-docs plugin - DefaultApiExplorerPage + +### Patch Changes + +- 11f57de: bump `@asyncapi/react-component` to latest `2.x` +- 3cd1dee: Uses theme values to style the API definition schema so that theme overrides apply. +- Updated dependencies + - @backstage/plugin-catalog@1.25.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-app-backend@0.4.0 + +### Minor Changes + +- 815b702: Configuration is no longer injected into static assets if a `index.html.tmpl` file is present. + +### Patch Changes + +- 815b702: The `index.html` templating is now done and served from memory rather than written to the filesystem. This means that you can now use config injection with a read-only filesystem, and you no longer need to use the `app.disableConfigInjection` flag. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/config-loader@1.9.2 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + - @backstage/plugin-app-node@0.1.27 + +## @backstage/plugin-auth-backend@0.24.0 + +### Minor Changes + +- 75168e3: **BREAKING**: The AWS ALB `fullProfile` will no longer have the its username or email converted to lowercase. This is to ensure unique handling of the users. You may need to update and configure a custom sign-in resolver or profile transform as a result. + +### Patch Changes + +- d52d7f9: Support ISO and ms string forms of durations in config too +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-auth-backend-module-google-provider@0.2.2 + - @backstage/types@1.2.0 + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.2 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.2 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.2 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.2 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.2 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.2 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.2 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.2 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.2 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.2 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.2 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.2 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.0 + +### Minor Changes + +- 75168e3: **BREAKING**: The AWS ALB `fullProfile` will no longer have the its username or email converted to lowercase. This is to ensure unique handling of the users. You may need to update and configure a custom sign-in resolver or profile transform as a result. + +### Patch Changes + +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog@1.25.0 + +### Minor Changes + +- 50df3c8: - Updated EntityLayout component to implement breadcrumb navigation based on the entity relations. + + - Added parentEntityRelations prop to EntityLayoutProps to specify relation types for parent entities. + +- 79e9631: Allow `OffsetPaginatedCatalogTable` to configure Table options and `CursorPaginatedCatalogTable` to configure `paginationPosition`. + +### Patch Changes + +- 2a67594: Fixed an issue causing the `CatalogIndexPage` to not properly filter results when using offset pagination. +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/plugin-scaffolder-common@1.5.7 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.2 + +## @backstage/plugin-catalog-backend@1.28.0 + +### Minor Changes + +- 39fd704: Internal update to use the new generated server types from `backstage-cli package schema openapi generate --server`. +- 76857da: Added `entity_ref` column to `final_entities` in order to move `refresh_state` away from the read path +- 34d4360: Drop redundant indices from the database. + + The following redundant indices are removed in this version: + + - `final_entities_entity_id_idx` - overlaps with `final_entities_pkey` + - `refresh_state_entity_id_idx` - overlaps with `refresh_state_pkey` + - `refresh_state_entity_ref_idx` - overlaps with `refresh_state_entity_ref_uniq` + - `search_key_idx` and `search_value_idx` - these were replaced by the composite index `search_key_value_idx` in #22594 + + No negative end user impact is expected, but rather that performance should increase due to less index churn. + +### Patch Changes + +- d52d7f9: Support ISO and ms string forms of durations in config too +- b89834b: Fixed an issue where entities would not be marked for restitching if only the target of a relationship changed. +- 1bf02cc: Fixed bug when searching an entity by `spec.profile.displayName` in the catalog on the frontend. Text filter fields were not applied correctly to the database query resulting in empty results. +- 4e58bc7: Upgrade to uuid v11 internally +- 5efde17: Internal refactor to slightly speed up the processing loop +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/types@1.2.0 + - @backstage/plugin-search-backend-module-catalog@0.2.5 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/backend-openapi-utils@0.3.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-node@0.8.5 + +## @backstage/plugin-catalog-backend-module-gitlab@0.5.0 + +### Minor Changes + +- 1b5fdd9: Extended the configuration with the `includeArchivedRepos` property, which allows including repositories when the project is archived. + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-defaults@0.5.3 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.0 + +### Minor Changes + +- 6cf91c5: Use `HumanDuration` for all duration needs in the public API, instead of `luxon` types. These are generally compatible, with a few caveats: + + - If you scheduled things to run quarterly (`quarter` or `quarters`), you can use `{ months: 3 }` instead. + - If you used the singular nouns such as `year: 1`, use plurals instead (e.g. `years: 1`). + +### Patch Changes + +- c5e39e7: Internal refactor to use the deferred from the types package +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog-backend-module-ldap@0.10.0 + +### Minor Changes + +- 415aeb3: Add Support for Google LDAP Vendor + +### Patch Changes + +- 884a86c: Added a `dnCaseSensitive` flag to support LDAP servers with mixed-case attributes. +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-node@1.14.0 + +### Minor Changes + +- bc13b42: The `catalogServiceRef` now has its own accompanying `CatalogService` interface that requires Backstage `credentials` objects to be passed. This new version of the `catalogServiceRef` has been promoted and is now available via the main `@backstage/plugin-catalog-node` entry point. + + The old `catalogServiceRef` with the old `CatalogApi` type is still available from the `/alpha` entry point. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-node@0.8.5 + +## @backstage/plugin-kubernetes@0.12.0 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-react@0.5.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + +## @backstage/plugin-kubernetes-backend@0.19.0 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- bee9664: Adapted the config.d.ts for custom k8s cluster authProvider implementations +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-kubernetes-node@0.2.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-node@0.8.5 + +## @backstage/plugin-kubernetes-common@0.9.0 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-kubernetes-node@0.2.0 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-kubernetes-react@0.5.0 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- 0b729da: add the pod delete feature to the kubernetes react plugin +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/core-components@0.16.0 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-notifications@0.4.0 + +### Minor Changes + +- 87ffc1c: Rephrasing labels of the View filter to be more clear. Based on the received users' feedback. + +### Patch Changes + +- 4186105: Added title to the Notifications' table. The title clearly states the filter selection and total count of messages. This change aligns the look and feel closer to other tables. +- 3a0731e: The "Created after" filter renamed to the "Sent out" based on the received users' feedback. +- 3e135f2: The notification's title is emphasized to be clearly distinguished from the description. +- 97ba58f: Add support for user specific notification settings +- 1d87c43: Show count of unread notifications in the left-side MenuItem. This replaces the simple true/false bullet. +- Updated dependencies + - @backstage/theme@0.6.1 + - @backstage/types@1.2.0 + - @backstage/core-components@0.16.0 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-signals-react@0.0.7 + +## @backstage/plugin-scaffolder@1.27.0 + +### Minor Changes + +- f61d4cc: Add scaffolder permission `scaffolder.template.management` for accessing the template management features +- 69fb6e7: Fix `contextMenu` not being disabled bug in new scaffolder pages + +### Patch Changes + +- 99471cd: fix(scaffolder): use `onInputChange` in `RepoUrlPicker` to fix issue with the value not updating properly +- 8e4bed4: Updated dependency `idb-keyval` to `5.1.5`. +- 7669af3: Revert the change of the option label for `EntityPicker` +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/types@1.2.0 + - @backstage/plugin-scaffolder-react@1.14.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/plugin-scaffolder-common@1.5.7 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/integration@1.15.2 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-scaffolder-backend@1.27.0 + +### Minor Changes + +- 0587633: Bumped the `isolated-vm` dependency from v4 to v5, which drops support for Node.js v16. +- e61d5ef: BREAKING EXPERIMENTAL: The `checkpoint` method now takes an object instead of previous arguments. + + ```ts + await ctx.checkpoint({ key: 'repo.create', fn: () => ockokit.repo.create({...})}) + ``` + + You can also now return `void` from the checkpoint if the method returns `void` inside the `checkpoint` handler. + +### Patch Changes + +- 6aa5b98: Fix tasks listing with postgres +- 59137ff: Fix issue with token not being available because it's now non-enumerable +- c5e39e7: Internal refactor to use the deferred from the types package +- e4f5d95: Align with type declaration of template filter/global function by supporting undefined as return value. +- d52d7f9: Support ISO and ms string forms of durations in config too +- 7ab3371: Modified `createDryRunner` and corresponding route to include `templateMetaData` inside the `templateInfo`. This allows custom action writers to access things like `templateInfo.entity.metadata.name` via the action context while executing templates using the dry run framework. +- 4e58bc7: Upgrade to uuid v11 internally +- 2dae341: Add new `fs:readdir` action to list current content of the workspace +- 97ba58f: Add example template for notification sending +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/backend-defaults@0.5.3 + - @backstage/types@1.2.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1 + - @backstage/plugin-scaffolder-common@1.5.7 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-bitbucket-cloud-common@0.2.25 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2 + - @backstage/plugin-permission-node@0.8.5 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2 + +## @backstage/plugin-scaffolder-node@0.6.0 + +### Minor Changes + +- e61d5ef: BREAKING EXPERIMENTAL: The `checkpoint` method now takes an object instead of previous arguments. + + ```ts + await ctx.checkpoint({ key: 'repo.create', fn: () => ockokit.repo.create({...})}) + ``` + + You can also now return `void` from the checkpoint if the method returns `void` inside the `checkpoint` handler. + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-scaffolder-common@1.5.7 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-react@1.14.0 + +### Minor Changes + +- 69fb6e7: Fix `contextMenu` not being disabled bug in new scaffolder pages + +### Patch Changes + +- 8b5ff7e: Fix issue with form state not refreshing when updating +- ade301c: Fix issue with `Stepper` and trying to trim additional properties. This is now all behind `liveOmit` and `omitExtraData` instead. +- f61d4cc: Add scaffolder permission `scaffolder.template.management` for accessing the template management features +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/theme@0.6.1 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/plugin-scaffolder-common@1.5.7 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-search-backend@1.7.0 + +### Minor Changes + +- 39fd704: Internal update to use the new generated server types from `backstage-cli package schema openapi generate --server`. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-defaults@0.5.3 + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/backend-openapi-utils@0.3.0 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-node@0.8.5 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/app-defaults@1.5.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1 + - @backstage/core-components@0.16.0 + - @backstage/core-app-api@1.15.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/backend-app-api@1.0.2 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/config-loader@1.9.2 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-node@0.8.5 + +## @backstage/backend-defaults@0.5.3 + +### Patch Changes + +- bf306cb: Removed dependency `@backstage/backend-common`. +- e30bb46: Disabling database migrations now correctly uses the `backend.default.skipMigrations` config value. +- d52d7f9: Support ISO and ms string forms of durations in config too +- f6eaec2: Link to proper package in `rootLoggerServiceFactory` doc string. +- ecf6b39: Use `node-fetch` instead of native fetch, as per +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/types@1.2.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/config-loader@1.9.2 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/backend-app-api@1.0.2 + - @backstage/cli-common@0.1.15 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/cli-node@0.2.10 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + - @backstage/plugin-permission-node@0.8.5 + +## @backstage/backend-plugin-api@1.0.2 + +### Patch Changes + +- d52d7f9: Support ISO and ms string forms of durations in config too +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + +## @backstage/catalog-model@1.7.1 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/errors@1.2.5 + +## @backstage/cli-common@0.1.15 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` + +## @backstage/cli-node@0.2.10 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + +## @backstage/codemods@0.1.52 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/cli-common@0.1.15 + +## @backstage/config-loader@1.9.2 + +### Patch Changes + +- c5e39e7: Internal refactor to use the deferred from the types package +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + +## @backstage/core-app-api@1.15.2 + +### Patch Changes + +- 44b82da: The default config loader no longer requires `process.env.APP_CONFIG` to be set, allowing config to be read from other sources instead. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-compat-api@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-plugin-api@1.10.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/errors@1.2.5 + - @backstage/version-bridge@1.0.10 + +## @backstage/create-app@0.5.22 + +### Patch Changes + +- 7907e3b: Bumped create-app version. +- 42386c2: Bumped create-app version. +- 702f41d: Updated engines to support Node 20 or 22 +- a917f86: This update adds the @backstage/repo-tools package to the versions.ts file, enabling proper version resolution for templates. The {{version '@backstage/repo-tools'}} placeholder now works as expected in the create-app process. +- 5872964: Use the main entrypoint for `create-app` installs +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/cli-common@0.1.15 + +## @backstage/dev-utils@1.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/core-app-api@1.15.2 + - @backstage/app-defaults@1.5.13 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.1 + +## @backstage/errors@1.2.5 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + +## @backstage/frontend-app-api@0.10.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/core-app-api@1.15.2 + - @backstage/frontend-defaults@0.1.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-defaults@0.1.2 + +### Patch Changes + +- 44b82da: The default config loader no longer requires `process.env.APP_CONFIG` to be set, allowing config to be read from other sources instead. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/frontend-app-api@0.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/plugin-app@0.1.2 + +## @backstage/frontend-plugin-api@0.9.1 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-test-utils@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/frontend-app-api@0.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/test-utils@1.7.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-app@0.1.2 + +## @backstage/integration@1.15.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/integration-aws-node@0.1.13 + +### Patch Changes + +- 52ae92d: The `getDefaultCredentialsChain` function now accepts and applies a `region` parameter, preventing it from defaulting to `us-east-1` when no region is specified. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/integration-react@1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration@1.15.2 + +## @techdocs/cli@1.8.22 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-defaults@0.5.3 + - @backstage/cli-common@0.1.15 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-techdocs-node@1.12.13 + +## @backstage/test-utils@1.7.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/types@1.2.0 + - @backstage/core-app-api@1.15.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/theme@0.6.1 + +### Patch Changes + +- ea75c37: Internal refactor to avoid top-level imports from MUI. + +## @backstage/plugin-app@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1 + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-app-node@0.1.27 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.9.2 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-app-visualizer@0.1.12 + +### Patch Changes + +- e586e77: New `devDependency` for local development setup. +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.2 + +### Patch Changes + +- d52d7f9: Support ISO and ms string forms of durations in config too +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.2 + +### Patch Changes + +- b833660: Fix visibility of config for use in front end code +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.2 + +### Patch Changes + +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.2 + +### Patch Changes + +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-auth-node@0.5.4 + +### Patch Changes + +- a0a9a4a: Browsers silently drop cookies that exceed 4KB, which can be problematic for refresh tokens and other large cookies.This update ensures that large cookies, like refresh tokens, are not dropped by browsers, maintaining the integrity of the authentication process. The changes include both the implementation of the cookie splitting logic and corresponding tests to validate the new functionality. +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-react@0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-bitbucket-cloud-common@0.2.25 + +### Patch Changes + +- 23f1da2: Updated dependency `ts-morph` to `^24.0.0`. +- Updated dependencies + - @backstage/integration@1.15.2 + +## @backstage/plugin-catalog-backend-module-aws@0.4.5 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-defaults@0.5.3 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-azure@0.2.4 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/backend-openapi-utils@0.3.0 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.2 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- f6b4b8a: Implemented discovery on project-level to shift Bitbucket Cloud API limits +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/plugin-bitbucket-cloud-common@0.2.25 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.4 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.4 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-catalog-backend-module-github@0.7.7 + +### Patch Changes + +- 9790c02: Fixed an issue in `GithubOrgEntityProvider` that caused an error when processing teams without a parent. +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.4 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/plugin-catalog-backend-module-github@0.7.7 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-catalog-backend-module-gitlab@0.5.0 + +## @backstage/plugin-catalog-backend-module-logs@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.4 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.4 + +### Patch Changes + +- 5f058e2: Updated dependency `@apidevtools/json-schema-ref-parser` to `^11.0.0`. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.4 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.7 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.5 + +## @backstage/plugin-catalog-common@1.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-catalog-graph@0.4.12 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + +## @backstage/plugin-catalog-import@0.12.6 + +### Patch Changes + +- ea5b7f3: Fixed parsing of catalog-info.yaml when creating a PR to register a repository if the file contains more than one document +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/integration@1.15.2 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-react@1.14.1 + +### Patch Changes + +- 9cc82c0: Fixed bug in `EntityDisplayName` where text was overflowing. +- 6fcbb3b: Ensure EntityDisplayName component link receives underline on hover. +- 9670906: Improve UI consistency of default catalog filters +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/types@1.2.0 + - @backstage/core-components@0.16.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/frontend-test-utils@0.2.2 + - @backstage/integration-react@1.2.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.10 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog-unprocessed-entities-common@0.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-config-schema@0.1.61 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-devtools@0.1.20 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/plugin-devtools-common@0.1.13 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-devtools-backend@0.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/config-loader@1.9.2 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + - @backstage/plugin-devtools-common@0.1.13 + - @backstage/plugin-permission-node@0.8.5 + +## @backstage/plugin-devtools-common@0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-events-backend@0.3.16 + +### Patch Changes + +- e02a02b: Fix `events.useEventBus` by propagating config to `DefaultEventsService` +- 9816f51: Add raw body information to `RequestDetails` + and use the raw body when validating incoming event requests. +- b7d0334: Cleaning up event subscriptions after the max age window +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/backend-openapi-utils@0.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.5 + +### Patch Changes + +- d52d7f9: Support ISO and ms string forms of durations in config too +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-events-backend-module-azure@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-events-backend-module-gerrit@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-events-backend-module-github@0.2.14 + +### Patch Changes + +- 9816f51: Fix the event request validation for incoming requests for GitHub webhook events + by using the raw body when verifying the signature. +- 9816f51: Add raw body information to `RequestDetails` + and use the raw body when validating incoming event requests. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-events-backend-module-gitlab@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-events-backend-test-utils@0.1.38 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5 + +## @backstage/plugin-events-node@0.4.5 + +### Patch Changes + +- 4501631: Fixed an issue where subscribing to events threw an error and gave up too easily. Calling the subscribe method will cause the background polling loop to keep trying to connect to the events backend, even if the initial request fails. + + By default the events service will attempt to publish and subscribe to events from the events bus API in the events backend, but if it fails due to the events backend not being installed, it will bail and never try calling the API again. There is now a new `events.useEventBus` configuration and option for the `DefaultEventsService` that lets you control this behavior. You can set it to `'never'` to disabled API calls to the events backend completely, or `'always'` to never allow it to be disabled. + +- e02a02b: Fix `events.useEventBus` by propagating config to `DefaultEventsService` + +- 9816f51: Add raw body information to `RequestDetails` + and use the raw body when validating incoming event requests. + +- 5d74716: Remove unused backend-common dependency + +- 0b57aa1: Fixed an issue where the event bus polling would duplicate and increase exponentially over time. + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + +## @backstage/plugin-home@0.8.1 + +### Patch Changes + +- 8b1b2cf: Improve Starred Entities UI to reduce whitespace and provide more context on the entities: + + - Use the Entity Presentation API (via ``) to display the entity's name + - Component's `kind` and `spec.type` are displayed as a secondary text + - List items are condensed to reduce unnecessary spacing + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/core-app-api@1.15.2 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/plugin-home-react@0.1.19 + +## @backstage/plugin-home-react@0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-kubernetes-cluster@0.0.18 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/plugin-kubernetes-react@0.5.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-notifications-backend@0.4.3 + +### Patch Changes + +- 97ba58f: Add support for user specific notification settings +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-notifications-node@0.2.9 + - @backstage/plugin-signals-node@0.1.14 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-notifications-backend-module-email@0.3.3 + +### Patch Changes + +- d52d7f9: Support ISO and ms string forms of durations in config too +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-notifications-node@0.2.9 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-notifications-common@0.0.6 + +### Patch Changes + +- 97ba58f: Add support for user specific notification settings +- Updated dependencies + - @backstage/config@1.3.0 + +## @backstage/plugin-notifications-node@0.2.9 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-signals-node@0.1.14 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-org@0.6.32 + +### Patch Changes + +- a278fdd: Fix rendering of description in MembersListCard. Add guardrails for potential long texts to prevent it from breaking the UI. +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-org-react@0.1.31 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-permission-backend@0.5.51 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-node@0.8.5 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.5 + +## @backstage/plugin-permission-common@0.8.2 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-permission-node@0.8.5 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/errors@1.2.5 + +## @backstage/plugin-permission-react@0.4.28 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-proxy-backend@0.5.8 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2 + +### Patch Changes + +- 9cf827c: Fix double branch creation in `public:bitbucket{Cloud,Server}:pull-request` + This resulted in the following error when using the actions: + + AlreadyExistsError: Failed to create branch at create-test because it already exists. + + The issue was original introduced in d103a48fa306d745599dc0c793668c9e6a479d32 + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.25 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2 + +### Patch Changes + +- 9cf827c: Fix double branch creation in `public:bitbucket{Cloud,Server}:pull-request` + This resulted in the following error when using the actions: + + AlreadyExistsError: Failed to create branch at create-test because it already exists. + + The issue was original introduced in d103a48fa306d745599dc0c793668c9e6a479d32 + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-defaults@0.5.3 + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1 + +### Patch Changes + +- cdc8b4c: Improve error messages from Gitlab +- 2dbdccb: Removed circular import +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.3 + +### Patch Changes + +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-notifications-node@0.2.9 + - @backstage/plugin-scaffolder-node@0.6.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.2 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.3 + +### Patch Changes + +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/plugin-scaffolder-node-test-utils@0.1.15 + +## @backstage/plugin-scaffolder-common@1.5.7 + +### Patch Changes + +- f61d4cc: Add scaffolder permission `scaffolder.template.management` for accessing the template management features +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.15 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/backend-test-utils@1.1.0 + - @backstage/plugin-scaffolder-node@0.6.0 + +## @backstage/plugin-search@1.4.19 + +### Patch Changes + +- a4ccc82: Removes the card UI from the search results type filter for a cleaner UI consistent with other filters +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.2 + +## @backstage/plugin-search-backend-module-catalog@0.2.5 + +### Patch Changes + +- 0b8f344: Fixed a bug where the `filter` setting of the collator was not permitted to be an array. +- 1a1e2f4: Fix search collator text formatting for catalog entities without description +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-elasticsearch@1.6.2 + +### Patch Changes + +- dae59c1: Updated dependency `@short.io/opensearch-mock` to `^0.4.0`. +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-explore@0.2.5 + +### Patch Changes + +- a9a7c7c: Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.7`. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-pg@0.5.38 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.3 + +### Patch Changes + +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-techdocs@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-techdocs-node@1.12.13 + +## @backstage/plugin-search-backend-node@1.3.5 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-defaults@0.5.3 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/errors@1.2.5 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-common@1.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-search-react@1.8.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1 + - @backstage/types@1.2.0 + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-signals@0.0.12 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/theme@0.6.1 + - @backstage/types@1.2.0 + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-signals-react@0.0.7 + +## @backstage/plugin-signals-backend@0.2.3 + +### Patch Changes + +- a1e01ff: The signals backend now supports scaled deployments where clients may be connecting to one of many signal backend instances. +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/types@1.2.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-signals-node@0.1.14 + +## @backstage/plugin-signals-node@0.1.14 + +### Patch Changes + +- 4e58bc7: Upgrade to uuid v11 internally +- 5d74716: Remove unused backend-common dependency +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/types@1.2.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + +## @backstage/plugin-signals-react@0.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-techdocs@1.11.1 + +### Patch Changes + +- 37a7810: Fixed an issue where `` would re-render infinitely under certain conditions. +- e937ae7: Fix an issue with index page of documentation site being re-rendered. +- 90246a9: Fix techdocs config schema for custom elements sanitizer +- 605bdc0: Avoid page re-rendering when clicking on anchor links in the same documentation page. +- 4f0cb89: Added DomPurify sanitizer configuration for custom elements implementing RFC . + See for how to enable it in the configuration. +- f246178: Removed `canvas` dev dependency. +- 4a2f73a: Fix an issue that caused the current documentation page to be re-rendered when navigating to + another one. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/plugin-techdocs-react@1.2.10 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/integration@1.15.2 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-auth-react@0.1.8 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.2 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.41 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.25.0 + - @backstage/plugin-techdocs@1.11.1 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/plugin-techdocs-react@1.2.10 + - @backstage/core-app-api@1.15.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.1 + - @backstage/test-utils@1.7.1 + - @backstage/plugin-search-react@1.8.2 + +## @backstage/plugin-techdocs-backend@1.11.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.2 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.13 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/plugin-techdocs-react@1.2.10 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration@1.15.2 + - @backstage/integration-react@1.2.1 + +## @backstage/plugin-techdocs-node@1.12.13 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.10 + +### Patch Changes + +- 4a2f73a: Fix an issue that caused the current documentation page to be re-rendered when navigating to + another one. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/core-components@0.16.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/plugin-user-settings@0.8.15 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/core-components@0.16.0 + - @backstage/core-app-api@1.15.2 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/plugin-signals-react@0.0.7 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.27 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/backend-defaults@0.5.3 + - @backstage/types@1.2.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-signals-node@0.1.14 + - @backstage/errors@1.2.5 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.103 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0 + - @backstage/plugin-catalog@1.25.0 + - @backstage/plugin-api-docs@0.12.0 + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/plugin-notifications@0.4.0 + - @backstage/plugin-techdocs@1.11.1 + - @backstage/plugin-search@1.4.19 + - @backstage/plugin-org@0.6.32 + - @backstage/plugin-scaffolder-react@1.14.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/plugin-scaffolder@1.27.0 + - @backstage/plugin-catalog-import@0.12.6 + - @backstage/core-components@0.16.0 + - @backstage/plugin-kubernetes@0.12.0 + - @backstage/plugin-home@0.8.1 + - @backstage/plugin-techdocs-react@1.2.10 + - @backstage/core-app-api@1.15.2 + - @backstage/plugin-signals@0.0.12 + - @backstage/plugin-kubernetes-cluster@0.0.18 + - @backstage/app-defaults@1.5.13 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.1 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-auth-react@0.1.8 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-graph@0.4.12 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10 + - @backstage/plugin-devtools@0.1.20 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17 + - @backstage/plugin-user-settings@0.8.15 + +## example-app-next@0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0 + - @backstage/plugin-catalog@1.25.0 + - @backstage/plugin-api-docs@0.12.0 + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/plugin-notifications@0.4.0 + - @backstage/plugin-techdocs@1.11.1 + - @backstage/plugin-search@1.4.19 + - @backstage/plugin-org@0.6.32 + - @backstage/plugin-scaffolder-react@1.14.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/plugin-scaffolder@1.27.0 + - @backstage/plugin-catalog-import@0.12.6 + - @backstage/core-components@0.16.0 + - @backstage/plugin-kubernetes@0.12.0 + - @backstage/plugin-home@0.8.1 + - @backstage/plugin-techdocs-react@1.2.10 + - @backstage/plugin-app-visualizer@0.1.12 + - @backstage/core-app-api@1.15.2 + - @backstage/frontend-defaults@0.1.2 + - @backstage/plugin-signals@0.0.12 + - @backstage/plugin-kubernetes-cluster@0.0.18 + - @backstage/app-defaults@1.5.13 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-app@0.1.2 + - @backstage/plugin-auth-react@0.1.8 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-graph@0.4.12 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17 + - @backstage/plugin-user-settings@0.8.15 + +## app-next-example-plugin@0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/frontend-plugin-api@0.9.1 + +## example-backend@0.0.32 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3 + - @backstage/plugin-app-backend@0.4.0 + - @backstage/plugin-search-backend-module-catalog@0.2.5 + - @backstage/plugin-scaffolder-backend@1.27.0 + - @backstage/plugin-auth-backend@0.24.0 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-search-backend@1.7.0 + - @backstage/plugin-events-backend@0.3.16 + - @backstage/plugin-kubernetes-backend@0.19.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-search-backend-module-explore@0.2.5 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-notifications-backend@0.4.3 + - @backstage/plugin-signals-backend@0.2.3 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-proxy-backend@0.5.8 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2 + - @backstage/plugin-devtools-backend@0.4.2 + - @backstage/plugin-permission-backend@0.5.51 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2 + - @backstage/plugin-permission-node@0.8.5 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2 + - @backstage/plugin-techdocs-backend@1.11.2 + +## example-backend-legacy@0.2.104 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-defaults@0.5.3 + - @backstage/plugin-app-backend@0.4.0 + - @backstage/plugin-search-backend-module-catalog@0.2.5 + - @backstage/plugin-scaffolder-backend@1.27.0 + - @backstage/plugin-auth-backend@0.24.0 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-search-backend@1.7.0 + - @backstage/plugin-events-backend@0.3.16 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1 + - @backstage/plugin-kubernetes-backend@0.19.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2 + - @backstage/plugin-search-backend-module-explore@0.2.5 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-signals-backend@0.2.3 + - @backstage/plugin-search-backend-module-pg@0.5.38 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-proxy-backend@0.5.8 + - @backstage/plugin-signals-node@0.1.14 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2 + - @backstage/catalog-model@1.7.1 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2 + - @backstage/plugin-devtools-backend@0.4.2 + - @backstage/plugin-permission-backend@0.5.51 + - @backstage/plugin-permission-node@0.8.5 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2 + - @backstage/plugin-techdocs-backend@1.11.2 + +## e2e-test@0.2.22 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.22 + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + +## @internal/frontend@0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/version-bridge@1.0.10 + +## @internal/scaffolder@0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.14.0 + +## techdocs-cli-embedded-app@0.2.102 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0 + - @backstage/plugin-catalog@1.25.0 + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/plugin-techdocs@1.11.1 + - @backstage/core-components@0.16.0 + - @backstage/plugin-techdocs-react@1.2.10 + - @backstage/core-app-api@1.15.2 + - @backstage/app-defaults@1.5.13 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.1 + - @backstage/test-utils@1.7.1 + +## yarn-plugin-backstage@0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15 + - @backstage/release-manifests@0.0.11 + +## @internal/plugin-todo-list@1.0.33 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/core-plugin-api@1.10.1 + +## @internal/plugin-todo-list-backend@1.0.33 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + +## @internal/plugin-todo-list-common@1.0.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.8.2 diff --git a/docs/releases/v1.33.0-next.0-changelog.md b/docs/releases/v1.33.0-next.0-changelog.md new file mode 100644 index 0000000000..969f47fd2e --- /dev/null +++ b/docs/releases/v1.33.0-next.0-changelog.md @@ -0,0 +1,2123 @@ +# Release v1.33.0-next.0 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.33.0-next.0](https://backstage.github.io/upgrade-helper/?to=1.33.0-next.0) + +## @backstage/catalog-client@1.8.0-next.0 + +### Minor Changes + +- 31c4fe0: The client now automatically splits up very large `getEntitiesByRefs` calls into several smaller requests behind the scenes when needed. This ensures that each individual request does not exceed common Express.js request body limits or overload the server. + +### Patch Changes + +- 873f89a: Fix for certain filter fields in the `catalogApiMock` being case sensitive. +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/cli@0.29.0-next.0 + +### Minor Changes + +- bc71665: **BREAKING**: The `LEGACY_BACKEND_START` flag has been removed, along with support for `src/run.ts` as the development entry point. + +### Patch Changes + +- 28b60ad: The check for `react-dom/client` in the Jest configuration will now properly always run from the target directory. + +- e30b65d: Added `--alwaysPack` as a replacement for the now hidden `--alwaysYarnPack` flag for the `build-workspace` command. + +- a7f97e4: Added a new `"rejectFrontendNetworkRequests"` configuration flag that can be set in the `"jest"` field in the root `package.json`: + + ```json + { + "jest": { + "rejectFrontendNetworkRequests": true + } + } + ``` + + This flag causes rejection of any form of network requests that are attempted to be made in frontend or common package tests. This flag can only be set in the root `package.json` and can not be overridden in individual package configurations. + +- 04297a0: The `--successCache` option for the `repo test` and `repo lint` commands now use an additive store that keeps old entries around for a week before they are cleaned up automatically. + +- b4627f2: Fixed an issue where the `raw-loader` for loading HTML templates was not resolved from the context of the CLI package. + +- 17850a5: Update upgrade-helper link in `versions:bump` command to include `yarnPlugin` parameter when the yarn plugin is installed + +- b084f5a: Bump the Webpack dependency range to `^5.94.0`, as our current configuration is not compatible with some older versions. + +- 946fa34: Added a new `--link ` option for frontend builds that allow you to override module resolution to link in an external workspace at runtime. + + As part of this change the Webpack linked workspace resolution plugin for frontend builds has been removed. It was in place to support the old workspace linking where it was done by Yarn, which is no longer a working option. + +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.9 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/eslint-plugin@0.1.10 + - @backstage/integration@1.15.1 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## @backstage/core-components@0.16.0-next.0 + +### Minor Changes + +- dc409c5: The SupportButton component will now be hidden if no support config is specified in app-config + +### Patch Changes + +- af9097e: Adds the ability to mock a media query per break point and to change the active break point during a test. Usage example: + + ```ts + const { set } = mockBreakpoint({ + initialBreakpoint: 'md', + queryBreakpointMap: { + '(min-width:1500px)': 'xl', + '(min-width:1000px)': 'lg', + '(min-width:700px)': 'md', + '(min-width:400px)': 'sm', + '(min-width:0px)': 'xs', + }, + }); + // assertions for when the active break point is "md" + set('lg'); + // assertions for when the active break point is "lg" + ``` + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.6.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/repo-tools@0.11.0-next.0 + +### Minor Changes + +- 47fdbb4: Adds a `--watch` mode to the `schema openapi generate` command for a better local schema writing experience. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.9 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend@0.24.0-next.0 + +### Minor Changes + +- 75168e3: **BREAKING**: The AWS ALB `fullProfile` will no longer have the its username or email converted to lowercase. This is to ensure unique handling of the users. You may need to update and configure a custom sign-in resolver or profile transform as a result. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.0-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.2-next.0 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.2-next.0 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.2-next.0 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.2-next.0 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.2-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-google-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.2-next.0 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.2-next.0 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.2-next.0 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.2-next.0 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.0-next.0 + +### Minor Changes + +- 75168e3: **BREAKING**: The AWS ALB `fullProfile` will no longer have the its username or email converted to lowercase. This is to ensure unique handling of the users. You may need to update and configure a custom sign-in resolver or profile transform as a result. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.0-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-node@1.14.0-next.0 + +### Minor Changes + +- bc13b42: The `catalogServiceRef` now has its own accompanying `CatalogService` interface that requires Backstage `credentials` objects to be passed. This new version of the `catalogServiceRef` has been promoted and is now available via the main `@backstage/plugin-catalog-node` entry point. + + The old `catalogServiceRef` with the old `CatalogApi` type is still available from the `/alpha` entry point. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + +## @backstage/app-defaults@1.5.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/backend-app-api@1.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + +## @backstage/backend-defaults@0.5.3-next.0 + +### Patch Changes + +- f6eaec2: Link to proper package in `rootLoggerServiceFactory` doc string. +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-app-api@1.0.2-next.0 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.9 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + +## @backstage/backend-dynamic-feature-service@0.4.4-next.0 + +### Patch Changes + +- 8593dfa: Improve the way alpha packages are supported when loading dynamic backend plugins. + The `ScannedPluginPackage` descriptor of dynamic backend plugins loaded from their alpha `package.json` now contain both the main package manifest and the alpha manifest. Previously it used to contain only the content of the alpha `package.json`, which is nearly empty. + This will make it easier to use or display metadata of loaded dynamic backend plugins, which is contained in the main manifest. +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-events-backend@0.3.15-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-app-api@1.0.2-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.9 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.0 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/backend-openapi-utils@0.2.1-next.0 + +### Patch Changes + +- f01787a: Moves msw from dependencies to devDependencies +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/backend-plugin-api@1.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/backend-test-utils@1.0.3-next.0 + +### Patch Changes + +- 7aae8e3: The `mockServices.discovery.factory()` factory now uses the mocked discovery service as its implementation, avoid the need for configuration. +- eb82994: Removed unused `msw` dependency. +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-app-api@1.0.2-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/core-compat-api@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/create-app@0.5.22-next.0 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.14 + +## @backstage/dev-utils@1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/app-defaults@1.5.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + +## @backstage/frontend-app-api@0.10.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-defaults@0.1.2-next.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-defaults@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-app-api@0.10.1-next.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/plugin-app@0.1.2-next.0 + +## @backstage/frontend-plugin-api@0.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-test-utils@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/frontend-app-api@0.10.1-next.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/test-utils@1.7.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-app@0.1.2-next.0 + +## @techdocs/cli@1.8.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/plugin-techdocs-node@1.12.13-next.0 + +## @backstage/plugin-api-docs@0.11.12-next.0 + +### Patch Changes + +- 11f57de: bump `@asyncapi/react-component` to latest `2.x` +- 3cd1dee: Uses theme values to style the API definition schema so that theme overrides apply. +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/plugin-catalog@1.24.1-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-app@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-app-backend@0.3.77-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.0 + +## @backstage/plugin-app-node@0.1.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config-loader@1.9.1 + +## @backstage/plugin-app-visualizer@0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.0-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + +## @backstage/plugin-auth-node@0.5.4-next.0 + +### Patch Changes + +- a0a9a4a: Browsers silently drop cookies that exceed 4KB, which can be problematic for refresh tokens and other large cookies.This update ensures that large cookies, like refresh tokens, are not dropped by browsers, maintaining the integrity of the authentication process. The changes include both the implementation of the cookie splitting logic and corresponding tests to validate the new functionality. +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-react@0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog@1.24.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.0 + +## @backstage/plugin-catalog-backend@1.27.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-openapi-utils@0.2.1-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + +## @backstage/plugin-catalog-backend-module-aws@0.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-catalog-backend-module-azure@0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-openapi-utils@0.2.1-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + +## @backstage/plugin-catalog-backend-module-github@0.7.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-backend-module-github@0.7.7-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/plugin-catalog-backend-module-gitlab@0.4.5-next.0 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.9.2-next.0 + +### Patch Changes + +- 884a86c: Added a `dnCaseSensitive` flag to support LDAP servers with mixed-case attributes. +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-logs@0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-graph@0.4.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-react@1.14.1-next.0 + +## @backstage/plugin-catalog-import@0.12.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + +## @backstage/plugin-catalog-react@1.14.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/frontend-test-utils@0.2.2-next.0 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-config-schema@0.1.61-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-devtools@0.1.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-devtools-backend@0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + +## @backstage/plugin-events-backend@0.3.15-next.0 + +### Patch Changes + +- e02a02b: Fix `events.useEventBus` by propagating config to `DefaultEventsService` +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/backend-openapi-utils@0.2.1-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-azure@0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-events-backend-module-gerrit@0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + +## @backstage/plugin-events-backend-module-github@0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-module-gitlab@0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-test-utils@0.1.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + +## @backstage/plugin-events-node@0.4.3-next.0 + +### Patch Changes + +- 4501631: Fixed an issue where subscribing to events threw an error and gave up too easily. Calling the subscribe method will cause the background polling loop to keep trying to connect to the events backend, even if the initial request fails. + + By default the events service will attempt to publish and subscribe to events from the events bus API in the events backend, but if it fails due to the events backend not being installed, it will bail and never try calling the API again. There is now a new `events.useEventBus` configuration and option for the `DefaultEventsService` that lets you control this behavior. You can set it to `'never'` to disabled API calls to the events backend completely, or `'always'` to never allow it to be disabled. + +- e02a02b: Fix `events.useEventBus` by propagating config to `DefaultEventsService` + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-home@0.8.1-next.0 + +### Patch Changes + +- 8b1b2cf: Improve Starred Entities UI to reduce whitespace and provide more context on the entities: + + - Use the Entity Presentation API (via ``) to display the entity's name + - Component's `kind` and `spec.type` are displayed as a secondary text + - List items are condensed to reduce unnecessary spacing + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-home-react@0.1.19-next.0 + +## @backstage/plugin-home-react@0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + +## @backstage/plugin-kubernetes@0.11.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.5-next.0 + +## @backstage/plugin-kubernetes-backend@0.18.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-node@0.1.21-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + +## @backstage/plugin-kubernetes-cluster@0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-kubernetes-common@0.8.3 + - @backstage/plugin-kubernetes-react@0.4.5-next.0 + +## @backstage/plugin-kubernetes-node@0.1.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-kubernetes-react@0.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-notifications@0.3.3-next.0 + +### Patch Changes + +- 97ba58f: Add support for user specific notification settings +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.6.0 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6 + +## @backstage/plugin-notifications-backend@0.4.3-next.0 + +### Patch Changes + +- 97ba58f: Add support for user specific notification settings +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-notifications-node@0.2.9-next.0 + - @backstage/plugin-signals-node@0.1.14-next.0 + +## @backstage/plugin-notifications-backend-module-email@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-notifications-node@0.2.9-next.0 + +## @backstage/plugin-notifications-common@0.0.6-next.0 + +### Patch Changes + +- 97ba58f: Add support for user specific notification settings +- Updated dependencies + - @backstage/config@1.2.0 + +## @backstage/plugin-notifications-node@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-signals-node@0.1.14-next.0 + +## @backstage/plugin-org@0.6.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + +## @backstage/plugin-org-react@0.1.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + +## @backstage/plugin-permission-backend@0.5.51-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + +## @backstage/plugin-permission-node@0.8.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-proxy-backend@0.5.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder@1.26.2-next.0 + +### Patch Changes + +- 99471cd: fix(scaffolder): use `onInputChange` in `RepoUrlPicker` to fix issue with the value not updating properly +- 7669af3: Revert the change of the option label for `EntityPicker` +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.13.2-next.0 + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-backend@1.26.3-next.0 + +### Patch Changes + +- 6aa5b98: Fix tasks listing with postgres +- 59137ff: Fix issue with token not being available because it's now non-enumerable +- e4f5d95: Align with type declaration of template filter/global function by supporting undefined as return value. +- 97ba58f: Add example template for notification sending +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.2-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.0 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2-next.0 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.2-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.0 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.0 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/plugin-notifications-node@0.2.9-next.0 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + - @backstage/plugin-scaffolder-node-test-utils@0.1.15-next.0 + +## @backstage/plugin-scaffolder-node@0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-test-utils@1.0.3-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + +## @backstage/plugin-scaffolder-react@1.13.2-next.0 + +### Patch Changes + +- 8b5ff7e: Fix issue with form state not refreshing when updating +- ade301c: Fix issue with `Stepper` and trying to trim additional properties. This is now all behind `liveOmit` and `omitExtraData` instead. +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/theme@0.6.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-search@1.4.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.0 + +## @backstage/plugin-search-backend@1.6.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-openapi-utils@0.2.1-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-catalog@0.2.5-next.0 + +### Patch Changes + +- 0b8f344: Fixed a bug where the `filter` setting of the collator was not permitted to be an array. +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.0 + +### Patch Changes + +- dae59c1: Updated dependency `@short.io/opensearch-mock` to `^0.4.0`. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-explore@0.2.5-next.0 + +### Patch Changes + +- a9a7c7c: Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.7`. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-pg@0.5.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-techdocs@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-node@1.12.13-next.0 + +## @backstage/plugin-search-backend-node@1.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-react@1.8.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/theme@0.6.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-signals@0.0.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/theme@0.6.0 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6 + +## @backstage/plugin-signals-backend@0.2.3-next.0 + +### Patch Changes + +- a1e01ff: The signals backend now supports scaled deployments where clients may be connecting to one of many signal backend instances. +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-node@0.1.14-next.0 + +## @backstage/plugin-signals-node@0.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-techdocs@1.11.1-next.0 + +### Patch Changes + +- 605bdc0: Avoid page re-rendering when clicking on anchor links in the same documentation page. +- 4f0cb89: Added DomPurify sanitizer configuration for custom elements implementing RFC . + See for how to enable it in the configuration. +- f246178: Removed `canvas` dev dependency. +- 4a2f73a: Fix an issue that caused the current documentation page to be re-rendered when navigating to + another one. +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-auth-react@0.1.8-next.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.0 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.41-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.11.1-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/test-utils@1.7.0 + - @backstage/plugin-catalog@1.24.1-next.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-search-react@1.8.2-next.0 + +## @backstage/plugin-techdocs-backend@1.11.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.0 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.13-next.0 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + +## @backstage/plugin-techdocs-node@1.12.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.10-next.0 + +### Patch Changes + +- 4a2f73a: Fix an issue that caused the current documentation page to be re-rendered when navigating to + another one. +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/plugin-user-settings@0.8.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/theme@0.6.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-signals-react@0.0.6 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-node@0.1.14-next.0 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.103-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.0 + - @backstage/plugin-api-docs@0.11.12-next.0 + - @backstage/plugin-scaffolder-react@1.13.2-next.0 + - @backstage/plugin-techdocs@1.11.1-next.0 + - @backstage/core-components@0.16.0-next.0 + - @backstage/plugin-home@0.8.1-next.0 + - @backstage/plugin-scaffolder@1.26.2-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.0 + - @backstage/plugin-notifications@0.3.3-next.0 + - @backstage/app-defaults@1.5.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.0 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-auth-react@0.1.8-next.0 + - @backstage/plugin-catalog@1.24.1-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-graph@0.4.12-next.0 + - @backstage/plugin-catalog-import@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.0 + - @backstage/plugin-devtools@0.1.20-next.0 + - @backstage/plugin-kubernetes@0.11.17-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.0 + - @backstage/plugin-org@0.6.32-next.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search@1.4.19-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.0 + - @backstage/plugin-signals@0.0.12-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.0 + - @backstage/plugin-user-settings@0.8.15-next.0 + +## example-app-next@0.0.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.0 + - @backstage/plugin-api-docs@0.11.12-next.0 + - @backstage/plugin-scaffolder-react@1.13.2-next.0 + - @backstage/plugin-techdocs@1.11.1-next.0 + - @backstage/core-components@0.16.0-next.0 + - @backstage/plugin-home@0.8.1-next.0 + - @backstage/plugin-scaffolder@1.26.2-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.0 + - @backstage/plugin-notifications@0.3.3-next.0 + - @backstage/app-defaults@1.5.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.0 + - @backstage/frontend-defaults@0.1.2-next.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-app@0.1.2-next.0 + - @backstage/plugin-app-visualizer@0.1.12-next.0 + - @backstage/plugin-auth-react@0.1.8-next.0 + - @backstage/plugin-catalog@1.24.1-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-graph@0.4.12-next.0 + - @backstage/plugin-catalog-import@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.0 + - @backstage/plugin-kubernetes@0.11.17-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.0 + - @backstage/plugin-org@0.6.32-next.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search@1.4.19-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.0 + - @backstage/plugin-signals@0.0.12-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.0 + - @backstage/plugin-user-settings@0.8.15-next.0 + +## app-next-example-plugin@0.0.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + +## example-backend@0.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.0 + - @backstage/plugin-scaffolder-backend@1.26.3-next.0 + - @backstage/plugin-auth-backend@0.24.0-next.0 + - @backstage/plugin-events-backend@0.3.15-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/plugin-notifications-backend@0.4.3-next.0 + - @backstage/plugin-signals-backend@0.2.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.77-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.0 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.0 + - @backstage/plugin-devtools-backend@0.4.2-next.0 + - @backstage/plugin-kubernetes-backend@0.18.8-next.0 + - @backstage/plugin-permission-backend@0.5.51-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + - @backstage/plugin-proxy-backend@0.5.8-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.0 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.0 + - @backstage/plugin-search-backend@1.6.2-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-techdocs-backend@1.11.2-next.0 + +## example-backend-legacy@0.2.104-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.0 + - @backstage/plugin-scaffolder-backend@1.26.3-next.0 + - @backstage/plugin-auth-backend@0.24.0-next.0 + - @backstage/plugin-events-backend@0.3.15-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/plugin-signals-backend@0.2.3-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-app-backend@0.3.77-next.0 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.0 + - @backstage/plugin-devtools-backend@0.4.2-next.0 + - @backstage/plugin-kubernetes-backend@0.18.8-next.0 + - @backstage/plugin-permission-backend@0.5.51-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + - @backstage/plugin-proxy-backend@0.5.8-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.0 + - @backstage/plugin-search-backend@1.6.2-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.38-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-signals-node@0.1.14-next.0 + - @backstage/plugin-techdocs-backend@1.11.2-next.0 + +## e2e-test@0.2.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.22-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/errors@1.2.4 + +## @internal/frontend@0.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @internal/scaffolder@0.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.13.2-next.0 + +## techdocs-cli-embedded-app@0.2.102-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.0 + - @backstage/plugin-techdocs@1.11.1-next.0 + - @backstage/core-components@0.16.0-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.0 + - @backstage/app-defaults@1.5.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/test-utils@1.7.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-catalog@1.24.1-next.0 + +## @internal/plugin-todo-list@1.0.33-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-plugin-api@1.10.0 + +## @internal/plugin-todo-list-backend@1.0.33-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/errors@1.2.4 diff --git a/docs/releases/v1.33.0-next.1-changelog.md b/docs/releases/v1.33.0-next.1-changelog.md new file mode 100644 index 0000000000..313cac1a59 --- /dev/null +++ b/docs/releases/v1.33.0-next.1-changelog.md @@ -0,0 +1,2120 @@ +# Release v1.33.0-next.1 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.33.0-next.1](https://backstage.github.io/upgrade-helper/?to=1.33.0-next.1) + +## @backstage/cli@0.29.0-next.1 + +### Minor Changes + +- 6819f8c: Added a new optimization to the `repo test` command that will filter out unused packages in watch mode if all provide filters are paths that point from the repo root. This significantly speeds up running individual tests from the repo root in a large workspace, for example: + + ```sh + yarn test packages/app/src/App.test.tsx + ``` + +### Patch Changes + +- 4046d53: Fixed an issue where the `--successCache` option for the `repo test` and `repo lint` commands would be include the workspace path in generated cache keys. This previously broke caching in environments where the workspace path varies across builds. +- 6b2888c: Fixed an issue with the `--successCache` flag for `repo test` where the tree hash for the wrong package directory would sometimes be used to generate the cache key. +- 6266ed3: Updated dependency `del` to `^8.0.0`. +- 4046d53: Fixed an issue with the `repo lint` command where the cache key for the `--successCache` option would not properly ignore files that should be ignored according to `.eslintignore`s. +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/eslint-plugin@0.1.10 + - @backstage/integration@1.15.1 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.0-next.1 + +### Minor Changes + +- 6cf91c5: Use `HumanDuration` for all duration needs in the public API, instead of `luxon` types. These are generally compatible, with a few caveats: + + - If you scheduled things to run quarterly (`quarter` or `quarters`), you can use `{ months: 3 }` instead. + - If you used the singular nouns such as `year: 1`, use plurals instead (e.g. `years: 1`). + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-kubernetes@0.12.0-next.1 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/plugin-kubernetes-react@0.5.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + +## @backstage/plugin-kubernetes-backend@0.19.0-next.1 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/plugin-kubernetes-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + +## @backstage/plugin-kubernetes-common@0.9.0-next.0 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-kubernetes-node@0.2.0-next.1 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-kubernetes-react@0.5.0-next.1 + +### Minor Changes + +- 71b8704: Bumping @kubernetes/client-node to 1.0.0-rc7 to mitigate CVEs related to the request and tough-cookie packages + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend@1.27.0-next.1 + +### Minor Changes + +- 0587633: Bumped the `isolated-vm` dependency from v4 to v5, which drops support for Node.js v16. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.1 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.2-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2-next.1 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2-next.1 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.2-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.1 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.1 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/app-defaults@1.5.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/backend-app-api@1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + +## @backstage/backend-defaults@0.5.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/backend-app-api@1.0.2-next.1 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + +## @backstage/backend-dynamic-feature-service@0.4.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/backend-app-api@1.0.2-next.1 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-events-backend@0.3.16-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/backend-openapi-utils@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/backend-plugin-api@1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/backend-test-utils@1.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@1.0.2-next.1 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/cli-common@0.1.15-next.0 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` + +## @backstage/cli-node@0.2.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/codemods@0.1.52-next.0 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + +## @backstage/config-loader@1.9.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/core-compat-api@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-components@0.16.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/version-bridge@1.0.10 + +## @backstage/create-app@0.5.22-next.1 + +### Patch Changes + +- 702f41d: Updated engines to support Node 20 or 22 +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + +## @backstage/dev-utils@1.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-catalog-react@1.14.1-next.1 + +## @backstage/frontend-app-api@0.10.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-defaults@0.1.2-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-defaults@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-app@0.1.2-next.1 + +## @backstage/frontend-plugin-api@0.9.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-test-utils@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/test-utils@1.7.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-app@0.1.2-next.1 + +## @backstage/repo-tools@0.11.0-next.1 + +### Patch Changes + +- dde85ee: Added a new `generate-patch` command that can be used to generate patches for current changes in a source workspace to be installed it a target workspace. +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + +## @techdocs/cli@1.8.22-next.1 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-techdocs-node@1.12.13-next.1 + +## @backstage/test-utils@1.7.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/theme@0.6.1-next.0 + +### Patch Changes + +- ea75c37: Internal refactor to avoid top-level imports from MUI. + +## @backstage/plugin-api-docs@0.11.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-catalog@1.24.1-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-app@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-app-backend@0.3.77-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-app-node@0.1.27-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config-loader@1.9.2-next.0 + +## @backstage/plugin-app-visualizer@0.1.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + +## @backstage/plugin-auth-backend@0.24.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend-module-google-provider@0.2.2-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.2-next.1 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.2-next.1 + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.0-next.1 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.2-next.1 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.2-next.1 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.2-next.1 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.2-next.1 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.2-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.1 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.2-next.1 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.2-next.1 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.2-next.1 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.2-next.1 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.2-next.1 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.2-next.1 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-backend@0.24.0-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.2-next.1 + +### Patch Changes + +- b833660: Fix visibility of config for use in front end code +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-backend@0.24.0-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-auth-node@0.5.4-next.1 + +## @backstage/plugin-auth-node@0.5.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-react@0.1.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog@1.24.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + +## @backstage/plugin-catalog-backend@1.27.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.2.1-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.1 + +## @backstage/plugin-catalog-backend-module-aws@0.4.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-azure@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.2.1-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-github@0.7.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-backend-module-github@0.7.7-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.4.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-catalog-backend-module-gitlab@0.4.5-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.9.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-logs@0.1.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-graph@0.4.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + +## @backstage/plugin-catalog-import@0.12.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.1 + +## @backstage/plugin-catalog-node@1.14.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + +## @backstage/plugin-catalog-react@1.14.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/frontend-test-utils@0.2.2-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-config-schema@0.1.61-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-devtools@0.1.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-devtools-backend@0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + +## @backstage/plugin-events-backend@0.3.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.2.1-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-events-backend-module-azure@0.2.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-events-backend-module-gerrit@0.2.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-events-backend-module-github@0.2.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-events-backend-module-gitlab@0.2.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-events-backend-test-utils@0.1.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-events-node@0.4.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-home@0.8.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-home-react@0.1.19-next.1 + +## @backstage/plugin-home-react@0.1.19-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + +## @backstage/plugin-kubernetes-cluster@0.0.18-next.1 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/plugin-kubernetes-react@0.5.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/plugin-catalog-react@1.14.1-next.1 + +## @backstage/plugin-notifications@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-signals-react@0.0.6 + +## @backstage/plugin-notifications-backend@0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-notifications-node@0.2.9-next.1 + - @backstage/plugin-signals-node@0.1.14-next.1 + +## @backstage/plugin-notifications-backend-module-email@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-notifications-node@0.2.9-next.1 + +## @backstage/plugin-notifications-node@0.2.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-signals-node@0.1.14-next.1 + +## @backstage/plugin-org@0.6.32-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.1 + +## @backstage/plugin-org-react@0.1.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/plugin-catalog-react@1.14.1-next.1 + +## @backstage/plugin-permission-backend@0.5.51-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + +## @backstage/plugin-permission-node@0.8.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-proxy-backend@0.5.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder@1.26.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-scaffolder-react@1.13.3-next.1 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.1 + +### Patch Changes + +- 9cf827c: Fix double branch creation in `public:bitbucket{Cloud,Server}:pull-request` + This resulted in the following error when using the actions: + + AlreadyExistsError: Failed to create branch at create-test because it already exists. + + The issue was original introduced in d103a48fa306d745599dc0c793668c9e6a479d32 + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.1 + +### Patch Changes + +- 9cf827c: Fix double branch creation in `public:bitbucket{Cloud,Server}:pull-request` + This resulted in the following error when using the actions: + + AlreadyExistsError: Failed to create branch at create-test because it already exists. + + The issue was original introduced in d103a48fa306d745599dc0c793668c9e6a479d32 + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-notifications-node@0.2.9-next.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.1 + +### Patch Changes + +- 702f41d: Bumped dev dependencies `@types/node` +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + - @backstage/plugin-scaffolder-node-test-utils@0.1.15-next.1 + +## @backstage/plugin-scaffolder-node@0.5.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-test-utils@1.0.3-next.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + +## @backstage/plugin-scaffolder-react@1.13.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-search@1.4.19-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + +## @backstage/plugin-search-backend@1.6.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-openapi-utils@0.2.1-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-catalog@0.2.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-explore@0.2.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-pg@0.5.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-techdocs@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-node@1.12.13-next.1 + +## @backstage/plugin-search-backend-node@1.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-react@1.8.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-signals@0.0.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6 + +## @backstage/plugin-signals-backend@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-signals-node@0.1.14-next.1 + +## @backstage/plugin-signals-node@0.1.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + +## @backstage/plugin-techdocs@1.11.1-next.1 + +### Patch Changes + +- 90246a9: Fix techdocs config schema for custom elements sanitizer +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.41-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.11.1-next.1 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/test-utils@1.7.1-next.0 + - @backstage/plugin-catalog@1.24.1-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + +## @backstage/plugin-techdocs-backend@1.11.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.1 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.13-next.1 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + +## @backstage/plugin-techdocs-node@1.12.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/plugin-user-settings@0.8.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-signals-react@0.0.6 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.27-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-signals-node@0.1.14-next.1 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.103-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.1 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-techdocs@1.11.1-next.1 + - @backstage/plugin-kubernetes@0.12.0-next.1 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.1 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-api-docs@0.11.12-next.1 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog@1.24.1-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-graph@0.4.12-next.1 + - @backstage/plugin-catalog-import@0.12.6-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + - @backstage/plugin-devtools@0.1.20-next.1 + - @backstage/plugin-home@0.8.1-next.1 + - @backstage/plugin-notifications@0.3.3-next.1 + - @backstage/plugin-org@0.6.32-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder@1.26.3-next.1 + - @backstage/plugin-scaffolder-react@1.13.3-next.1 + - @backstage/plugin-search@1.4.19-next.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-signals@0.0.12-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + - @backstage/plugin-user-settings@0.8.15-next.1 + +## example-app-next@0.0.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.1 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-techdocs@1.11.1-next.1 + - @backstage/plugin-kubernetes@0.12.0-next.1 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.1 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/frontend-defaults@0.1.2-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-api-docs@0.11.12-next.1 + - @backstage/plugin-app@0.1.2-next.1 + - @backstage/plugin-app-visualizer@0.1.12-next.1 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog@1.24.1-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-graph@0.4.12-next.1 + - @backstage/plugin-catalog-import@0.12.6-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + - @backstage/plugin-home@0.8.1-next.1 + - @backstage/plugin-notifications@0.3.3-next.1 + - @backstage/plugin-org@0.6.32-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder@1.26.3-next.1 + - @backstage/plugin-scaffolder-react@1.13.3-next.1 + - @backstage/plugin-search@1.4.19-next.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-signals@0.0.12-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + - @backstage/plugin-user-settings@0.8.15-next.1 + +## app-next-example-plugin@0.0.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + +## example-backend@0.0.32-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.19.0-next.1 + - @backstage/plugin-scaffolder-backend@1.27.0-next.1 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.77-next.1 + - @backstage/plugin-auth-backend@0.24.0-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.1 + - @backstage/plugin-devtools-backend@0.4.2-next.1 + - @backstage/plugin-events-backend@0.3.16-next.1 + - @backstage/plugin-notifications-backend@0.4.3-next.1 + - @backstage/plugin-permission-backend@0.5.51-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-proxy-backend@0.5.8-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.1 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.1 + - @backstage/plugin-search-backend@1.6.2-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-signals-backend@0.2.3-next.1 + - @backstage/plugin-techdocs-backend@1.11.2-next.1 + +## example-backend-legacy@0.2.104-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.19.0-next.1 + - @backstage/plugin-scaffolder-backend@1.27.0-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.1 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-app-backend@0.3.77-next.1 + - @backstage/plugin-auth-backend@0.24.0-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-devtools-backend@0.4.2-next.1 + - @backstage/plugin-events-backend@0.3.16-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-permission-backend@0.5.51-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-proxy-backend@0.5.8-next.1 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.1 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.1 + - @backstage/plugin-search-backend@1.6.2-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.1 + - @backstage/plugin-search-backend-module-pg@0.5.38-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-signals-backend@0.2.3-next.1 + - @backstage/plugin-signals-node@0.1.14-next.1 + - @backstage/plugin-techdocs-backend@1.11.2-next.1 + +## e2e-test@0.2.22-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.22-next.1 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/errors@1.2.4 + +## @internal/frontend@0.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @internal/scaffolder@0.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.13.3-next.1 + +## techdocs-cli-embedded-app@0.2.102-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.1 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-techdocs@1.11.1-next.1 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/test-utils@1.7.1-next.0 + - @backstage/plugin-catalog@1.24.1-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + +## yarn-plugin-backstage@0.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/release-manifests@0.0.11 + +## @internal/plugin-todo-list@1.0.33-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + +## @internal/plugin-todo-list-backend@1.0.33-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.1 diff --git a/docs/releases/v1.33.0-next.2-changelog.md b/docs/releases/v1.33.0-next.2-changelog.md new file mode 100644 index 0000000000..f967286e69 --- /dev/null +++ b/docs/releases/v1.33.0-next.2-changelog.md @@ -0,0 +1,1812 @@ +# Release v1.33.0-next.2 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.33.0-next.2](https://backstage.github.io/upgrade-helper/?to=1.33.0-next.2) + +## @backstage/backend-dynamic-feature-service@0.5.0-next.2 + +### Minor Changes + +- e939cd7: **BREAKING** The `dynamicPluginsFeatureLoader` options related to the root logger behavior (`transports`, `level`, `format`) are now gathered under a single `logger` option which is a function taking an optional `Config` argument and returning the logger options. + + This breaking change is required for 2 reasons: + + - it's totally possible that the current `Config` would be required to provide the logger options, + - the logger-related options should be gathered under a common `logger` option because, when the root auditing service is introduced, distinct but similarly-named options would be required for the auditor as well. + +### Patch Changes + +- 1aeec12: Enhance the `CommonJSModuleLoader` to add support for `resolvePackagePath` calls from backend dynamic plugins, with customizable package resolution, and make the `CommonJSModuleLoader` public API. + Fixing this backend dynamic plugin limitation related to `resolvePackagePath` is important for backend dynamic plugins which use the database, since database migration scripts systematically use `resolvePackagePath`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-events-backend@0.3.16-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/backend-openapi-utils@0.3.0-next.2 + +### Minor Changes + +- 1440232: Adds a new `createValidatedOpenApiRouterFromGeneratedEndpointMap` function that uses the new static server generation in `backstage-cli package schema openapi generate --server` to create a typed express router. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/backend-test-utils@1.1.0-next.2 + +### Minor Changes + +- 5064827: Made it possible to construct `mockServices.database` with a given knex instance + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/catalog-client@1.8.0-next.1 + +### Minor Changes + +- 656d1ef: Internal update to use the updated generated code from `backstage-cli package schema openapi generate --client-package ...`. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/cli@0.29.0-next.2 + +### Minor Changes + +- bc47b17: **BREAKING**: Updates ESLint config to ignore all generated source code under `src/**/generated/**/*.ts`. + +### Patch Changes + +- e19c53c: Fix for the `--link` flag for `package start` to deduplicate `react-router` and `react-router-dom`. +- e565f73: Added support for `.webp` files in the frontend tooling. +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/eslint-plugin@0.1.10 + - @backstage/integration@1.15.1 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## @backstage/repo-tools@0.11.0-next.2 + +### Minor Changes + +- 1440232: `backstage-repo-tools package schema openapi generate --server` now generates complete TS interfaces for all request/response objects in your OpenAPI schema. This fixes an edge case around recursive schemas and standardizes both the generated client and server to have similar generated types. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-backend@1.28.0-next.2 + +### Minor Changes + +- 39fd704: Internal update to use the new generated server types from `backstage-cli package schema openapi generate --server`. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/backend-openapi-utils@0.3.0-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/plugin-catalog-backend-module-gitlab@0.5.0-next.2 + +### Minor Changes + +- 1b5fdd9: Extended the configuration with the `includeArchivedRepos` property, which allows including repositories when the project is archived. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.10.0-next.2 + +### Minor Changes + +- 415aeb3: Add Support for Google LDAP Vendor + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-search-backend@1.7.0-next.2 + +### Minor Changes + +- 39fd704: Internal update to use the new generated server types from `backstage-cli package schema openapi generate --server`. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/backend-openapi-utils@0.3.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/backend-app-api@1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/backend-defaults@0.5.3-next.2 + +### Patch Changes + +- e30bb46: Disabling database migrations now correctly uses the `backend.default.skipMigrations` config value. +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/backend-plugin-api@1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/create-app@0.5.22-next.2 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + +## @backstage/dev-utils@1.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + +## @techdocs/cli@1.8.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-techdocs-node@1.12.13-next.2 + +## @backstage/plugin-api-docs@0.11.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.1-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-app-backend@0.3.77-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.2 + +## @backstage/plugin-app-node@0.1.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config-loader@1.9.2-next.0 + +## @backstage/plugin-app-visualizer@0.1.12-next.2 + +### Patch Changes + +- e586e77: New `devDependency` for local development setup. +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + +## @backstage/plugin-auth-backend@0.24.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.2-next.2 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.2-next.2 + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.0-next.2 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.2-next.2 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.2-next.2 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.2-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-google-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.2-next.2 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.2-next.2 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.2-next.2 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.2-next.2 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + +## @backstage/plugin-auth-node@0.5.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog@1.24.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + +## @backstage/plugin-catalog-backend-module-aws@0.4.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + +## @backstage/plugin-catalog-backend-module-azure@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.3.0-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + +## @backstage/plugin-catalog-backend-module-github@0.7.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-catalog-backend-module-github@0.7.7-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-gitlab@0.5.0-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-backend-module-logs@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-graph@0.4.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-import@0.12.6-next.2 + +### Patch Changes + +- ea5b7f3: Fixed parsing of catalog-info.yaml when creating a PR to register a repository if the file contains more than one document +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-node@1.14.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/plugin-catalog-react@1.14.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/frontend-test-utils@0.2.2-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-devtools-backend@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/plugin-events-backend@0.3.16-next.2 + +### Patch Changes + +- b7d0334: Cleaning up event subscriptions after the max age window +- Updated dependencies + - @backstage/backend-openapi-utils@0.3.0-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-azure@0.2.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-events-backend-module-gerrit@0.2.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-events-backend-module-github@0.2.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-module-gitlab@0.2.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-test-utils@0.1.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + +## @backstage/plugin-events-node@0.4.5-next.2 + +### Patch Changes + +- 0b57aa1: Fixed an issue where the event bus polling would duplicate and increase exponentially over time. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-home@0.8.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-home-react@0.1.19-next.1 + +## @backstage/plugin-kubernetes@0.12.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/plugin-kubernetes-react@0.5.0-next.1 + +## @backstage/plugin-kubernetes-backend@0.19.0-next.2 + +### Patch Changes + +- bee9664: Adapted the config.d.ts for custom k8s cluster authProvider implementations +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/plugin-kubernetes-node@0.2.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/plugin-kubernetes-cluster@0.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/plugin-kubernetes-react@0.5.0-next.1 + +## @backstage/plugin-kubernetes-node@0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + +## @backstage/plugin-notifications-backend@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-notifications-node@0.2.9-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-signals-node@0.1.14-next.2 + +## @backstage/plugin-notifications-backend-module-email@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-notifications-node@0.2.9-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-notifications-common@0.0.6-next.0 + +## @backstage/plugin-notifications-node@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-signals-node@0.1.14-next.2 + +## @backstage/plugin-org@0.6.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-org-react@0.1.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + +## @backstage/plugin-permission-backend@0.5.51-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/plugin-permission-node@0.8.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-proxy-backend@0.5.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder@1.26.3-next.2 + +### Patch Changes + +- 8e4bed4: Updated dependency `idb-keyval` to `5.1.5`. +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/plugin-scaffolder-react@1.13.3-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-backend@1.27.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.2-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.2 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2-next.2 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.2-next.2 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.2 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.2 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.24 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-notifications-node@0.2.9-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + - @backstage/plugin-scaffolder-node-test-utils@0.1.15-next.2 + +## @backstage/plugin-scaffolder-node@0.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-test-utils@1.1.0-next.2 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + +## @backstage/plugin-scaffolder-react@1.13.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/theme@0.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-search@1.4.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + +## @backstage/plugin-search-backend-module-catalog@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-explore@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-pg@0.5.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-techdocs@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-node@1.12.13-next.2 + +## @backstage/plugin-search-backend-node@1.3.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-signals-backend@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-node@0.1.14-next.2 + +## @backstage/plugin-signals-node@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-techdocs@1.11.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.1-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/test-utils@1.7.1-next.0 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-techdocs@1.11.1-next.2 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + +## @backstage/plugin-techdocs-backend@1.11.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.13-next.2 + +## @backstage/plugin-techdocs-node@1.12.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-user-settings@0.8.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/theme@0.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-node@0.1.14-next.2 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.103-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.2 + - @backstage/plugin-catalog-import@0.12.6-next.2 + - @backstage/plugin-scaffolder@1.26.3-next.2 + - @backstage/plugin-catalog@1.24.1-next.2 + - @backstage/plugin-catalog-graph@0.4.12-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/plugin-home@0.8.1-next.2 + - @backstage/plugin-org@0.6.32-next.2 + - @backstage/plugin-scaffolder-react@1.13.3-next.2 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-api-docs@0.11.12-next.2 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + - @backstage/plugin-devtools@0.1.20-next.1 + - @backstage/plugin-kubernetes@0.12.0-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.2 + - @backstage/plugin-notifications@0.3.3-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search@1.4.19-next.2 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-signals@0.0.12-next.1 + - @backstage/plugin-techdocs@1.11.1-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + - @backstage/plugin-user-settings@0.8.15-next.2 + +## example-app-next@0.0.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.2 + - @backstage/plugin-catalog-import@0.12.6-next.2 + - @backstage/plugin-scaffolder@1.26.3-next.2 + - @backstage/plugin-app-visualizer@0.1.12-next.2 + - @backstage/plugin-catalog@1.24.1-next.2 + - @backstage/plugin-catalog-graph@0.4.12-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/plugin-home@0.8.1-next.2 + - @backstage/plugin-org@0.6.32-next.2 + - @backstage/plugin-scaffolder-react@1.13.3-next.2 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/frontend-defaults@0.1.2-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-api-docs@0.11.12-next.2 + - @backstage/plugin-app@0.1.2-next.1 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + - @backstage/plugin-kubernetes@0.12.0-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.2 + - @backstage/plugin-notifications@0.3.3-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search@1.4.19-next.2 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-signals@0.0.12-next.1 + - @backstage/plugin-techdocs@1.11.1-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + - @backstage/plugin-user-settings@0.8.15-next.2 + +## example-backend@0.0.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/plugin-search-backend@1.7.0-next.2 + - @backstage/plugin-kubernetes-backend@0.19.0-next.2 + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-events-backend@0.3.16-next.2 + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-notifications-backend@0.4.3-next.2 + - @backstage/plugin-scaffolder-backend@1.27.0-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.2 + - @backstage/plugin-techdocs-backend@1.11.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.77-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + - @backstage/plugin-devtools-backend@0.4.2-next.2 + - @backstage/plugin-permission-backend@0.5.51-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-proxy-backend@0.5.8-next.2 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.2 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-signals-backend@0.2.3-next.2 + +## example-backend-legacy@0.2.104-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/plugin-search-backend@1.7.0-next.2 + - @backstage/plugin-kubernetes-backend@0.19.0-next.2 + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-events-backend@0.3.16-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-scaffolder-backend@1.27.0-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.2 + - @backstage/plugin-techdocs-backend@1.11.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-app-backend@0.3.77-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + - @backstage/plugin-devtools-backend@0.4.2-next.2 + - @backstage/plugin-permission-backend@0.5.51-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-proxy-backend@0.5.8-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.2 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.38-next.2 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-signals-backend@0.2.3-next.2 + - @backstage/plugin-signals-node@0.1.14-next.2 + +## e2e-test@0.2.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.22-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/errors@1.2.4 + +## @internal/scaffolder@0.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.13.3-next.2 + +## techdocs-cli-embedded-app@0.2.102-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.2 + - @backstage/plugin-catalog@1.24.1-next.2 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/test-utils@1.7.1-next.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-techdocs@1.11.1-next.2 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + +## @internal/plugin-todo-list-backend@1.0.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/errors@1.2.4 diff --git a/docs/releases/v1.33.0-next.3-changelog.md b/docs/releases/v1.33.0-next.3-changelog.md new file mode 100644 index 0000000000..db1702283b --- /dev/null +++ b/docs/releases/v1.33.0-next.3-changelog.md @@ -0,0 +1,1607 @@ +# Release v1.33.0-next.3 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.33.0-next.3](https://backstage.github.io/upgrade-helper/?to=1.33.0-next.3) + +## @backstage/cli@0.29.0-next.3 + +### Minor Changes + +- d849865: The package packing now populates `typesVersions` for additional entry points rather than using additional `package.json` files for type resolution. This improves auto completion of separate entry points when consuming published packages. + +### Patch Changes + +- 4a378d3: Fix dev server reloads of plugin discovery for new frontend system. +- 6c48ebd: Add `--max-warnings -1` support to `backstage-cli package lint` +- 23f1da2: Updated dependency `ts-morph` to `^24.0.0`. +- b533056: Updated dependency `css-loader` to `^7.0.0`. +- be008c3: Updated dependency `@module-federation/enhanced` to `^0.7.0`. +- 09ea093: Fixed an issue where `.css` style injection would fail for published packages. +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/eslint-plugin@0.1.10 + - @backstage/integration@1.15.1 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog@1.25.0-next.3 + +### Minor Changes + +- 50df3c8: - Updated EntityLayout component to implement breadcrumb navigation based on the entity relations. + + - Added parentEntityRelations prop to EntityLayoutProps to specify relation types for parent entities. + +- 79e9631: Allow `OffsetPaginatedCatalogTable` to configure Table options and `CursorPaginatedCatalogTable` to configure `paginationPosition`. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.7-next.0 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.2 + +## @backstage/plugin-catalog-backend@1.28.0-next.3 + +### Minor Changes + +- 76857da: Added `entity_ref` column to `final_entities` in order to move `refresh_state` away from the read path +- 34d4360: Drop redundant indices from the database. + + The following redundant indices are removed in this version: + + - `final_entities_entity_id_idx` - overlaps with `final_entities_pkey` + - `refresh_state_entity_id_idx` - overlaps with `refresh_state_pkey` + - `refresh_state_entity_ref_idx` - overlaps with `refresh_state_entity_ref_uniq` + - `search_key_idx` and `search_value_idx` - these were replaced by the composite index `search_key_value_idx` in #22594 + + No negative end user impact is expected, but rather that performance should increase due to less index churn. + +### Patch Changes + +- b89834b: Fixed an issue where entities would not be marked for restitching if only the target of a relationship changed. +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-openapi-utils@0.3.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.3 + +## @backstage/plugin-scaffolder@1.27.0-next.3 + +### Minor Changes + +- f61d4cc: Add scaffolder permission `scaffolder.template.management` for accessing the template management features +- 69fb6e7: Fix `contextMenu` not being disabled bug in new scaffolder pages + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.7-next.0 + - @backstage/plugin-scaffolder-react@1.14.0-next.3 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-scaffolder-react@1.14.0-next.3 + +### Minor Changes + +- 69fb6e7: Fix `contextMenu` not being disabled bug in new scaffolder pages + +### Patch Changes + +- f61d4cc: Add scaffolder permission `scaffolder.template.management` for accessing the template management features +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.7-next.0 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/theme@0.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/app-defaults@1.5.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/backend-defaults@0.5.3-next.3 + +### Patch Changes + +- ecf6b39: Use `node-fetch` instead of native fetch, as per +- Updated dependencies + - @backstage/integration-aws-node@0.1.13-next.0 + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/backend-dynamic-feature-service@0.5.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/plugin-events-backend@0.3.16-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/backend-test-utils@1.1.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + +## @backstage/core-compat-api@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-components@0.16.0-next.2 + +### Patch Changes + +- 0f18340: Change core component Table tool bar search box to the a appropriate Search icon and text +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.6.1-next.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/create-app@0.5.22-next.3 + +### Patch Changes + +- 5872964: Use the main entrypoint for `create-app` installs +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + +## @backstage/dev-utils@1.1.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/app-defaults@1.5.13-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + +## @backstage/frontend-app-api@0.10.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-defaults@0.1.2-next.2 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-defaults@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-app-api@0.10.1-next.2 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/plugin-app@0.1.2-next.2 + +## @backstage/frontend-plugin-api@0.9.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-test-utils@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/frontend-app-api@0.10.1-next.2 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/test-utils@1.7.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-app@0.1.2-next.2 + +## @backstage/integration-aws-node@0.1.13-next.0 + +### Patch Changes + +- 52ae92d: The `getDefaultCredentialsChain` function now accepts and applies a `region` parameter, preventing it from defaulting to `us-east-1` when no region is specified. +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/repo-tools@0.11.0-next.3 + +### Patch Changes + +- 95401a8: The `generate-patch` command now properly includes newly created files in the patch. +- 23f1da2: Updated dependency `ts-morph` to `^24.0.0`. +- 3f1fb21: The `generate-patch` command will now fall back to always adding a `resolutions` entry, even if no matching descriptors are found. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + +## @techdocs/cli@1.8.22-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/config@1.2.0 + - @backstage/plugin-techdocs-node@1.12.13-next.3 + +## @backstage/plugin-api-docs@0.11.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.25.0-next.3 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-app@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-app-visualizer@0.1.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + +## @backstage/plugin-auth-react@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-bitbucket-cloud-common@0.2.25-next.0 + +### Patch Changes + +- 23f1da2: Updated dependency `ts-morph` to `^24.0.0`. +- Updated dependencies + - @backstage/integration@1.15.1 + +## @backstage/plugin-catalog-backend-module-aws@0.4.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.1.13-next.0 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.2-next.3 + +### Patch Changes + +- f6b4b8a: Implemented discovery on project-level to shift Bitbucket Cloud API limits +- Updated dependencies + - @backstage/plugin-bitbucket-cloud-common@0.2.25-next.0 + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + +## @backstage/plugin-catalog-backend-module-github@0.7.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-backend-module-github@0.7.7-next.3 + - @backstage/plugin-catalog-node@1.14.0-next.2 + +## @backstage/plugin-catalog-backend-module-gitlab@0.5.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/plugin-catalog-backend-module-gitlab@0.5.0-next.3 + - @backstage/plugin-catalog-node@1.14.0-next.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-backend-module-logs@0.1.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.7-next.0 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + +## @backstage/plugin-catalog-graph@0.4.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-import@0.12.6-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-react@1.14.1-next.3 + +### Patch Changes + +- 6fcbb3b: Ensure EntityDisplayName component link receives underline on hover. +- 9670906: Improve UI consistency of default catalog filters +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/frontend-test-utils@0.2.2-next.2 + - @backstage/integration-react@1.2.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-config-schema@0.1.61-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-devtools@0.1.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/plugin-devtools-common@0.1.12 + - @backstage/plugin-permission-react@0.4.27 + +## @backstage/plugin-events-backend@0.3.16-next.3 + +### Patch Changes + +- 9816f51: Add raw body information to `RequestDetails` + and use the raw body when validating incoming event requests. +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-openapi-utils@0.3.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-events-backend-module-azure@0.2.14-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.14-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-events-backend-module-gerrit@0.2.14-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + +## @backstage/plugin-events-backend-module-github@0.2.14-next.3 + +### Patch Changes + +- 9816f51: Fix the event request validation for incoming requests for GitHub webhook events + by using the raw body when verifying the signature. +- 9816f51: Add raw body information to `RequestDetails` + and use the raw body when validating incoming event requests. +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-module-gitlab@0.2.14-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + +## @backstage/plugin-events-backend-test-utils@0.1.38-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + +## @backstage/plugin-events-node@0.4.5-next.3 + +### Patch Changes + +- 9816f51: Add raw body information to `RequestDetails` + and use the raw body when validating incoming event requests. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-home@0.8.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-home-react@0.1.19-next.2 + +## @backstage/plugin-home-react@0.1.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + +## @backstage/plugin-kubernetes@0.12.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-react@0.5.0-next.2 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + +## @backstage/plugin-kubernetes-backend@0.19.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.1.13-next.0 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + - @backstage/plugin-kubernetes-node@0.2.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## @backstage/plugin-kubernetes-cluster@0.0.18-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-react@0.5.0-next.2 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + +## @backstage/plugin-kubernetes-react@0.5.0-next.2 + +### Patch Changes + +- 0b729da: add the pod delete feature to the kubernetes react plugin +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-common@0.9.0-next.0 + +## @backstage/plugin-notifications@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/theme@0.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-signals-react@0.0.6 + +## @backstage/plugin-notifications-backend@0.4.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-notifications-node@0.2.9-next.3 + - @backstage/plugin-signals-node@0.1.14-next.3 + +## @backstage/plugin-notifications-backend-module-email@0.3.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.1.13-next.0 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-notifications-node@0.2.9-next.3 + +## @backstage/plugin-notifications-node@0.2.9-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-signals-node@0.1.14-next.3 + +## @backstage/plugin-org@0.6.32-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-org-react@0.1.31-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/core-plugin-api@1.10.0 + +## @backstage/plugin-scaffolder-backend@1.27.0-next.3 + +### Patch Changes + +- 7ab3371: Modified `createDryRunner` and corresponding route to include `templateMetaData` inside the `templateInfo`. This allows custom action writers to access things like `templateInfo.entity.metadata.name` via the action context while executing templates using the dry run framework. +- 2dae341: Add new `fs:readdir` action to list current content of the workspace +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.7-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.25-next.0 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.3 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.2-next.3 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2-next.3 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.3 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.3 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2-next.3 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.2-next.3 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.3 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.3 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.3 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.3 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-bitbucket-cloud-common@0.2.25-next.0 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/plugin-notifications-common@0.0.6-next.0 + - @backstage/plugin-notifications-node@0.2.9-next.3 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + - @backstage/plugin-scaffolder-node-test-utils@0.1.15-next.3 + +## @backstage/plugin-scaffolder-common@1.5.7-next.0 + +### Patch Changes + +- f61d4cc: Add scaffolder permission `scaffolder.template.management` for accessing the template management features +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-scaffolder-node@0.5.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.7-next.0 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.15-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-test-utils@1.1.0-next.3 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + +## @backstage/plugin-search@1.4.19-next.3 + +### Patch Changes + +- a4ccc82: Removes the card UI from the search results type filter for a cleaner UI consistent with other filters +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.2 + +## @backstage/plugin-search-backend@1.7.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-openapi-utils@0.3.0-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-catalog@0.2.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.1.13-next.0 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-explore@0.2.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-pg@0.5.38-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-backend-module-techdocs@0.3.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-node@1.12.13-next.3 + +## @backstage/plugin-search-backend-node@1.3.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-search-react@1.8.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/theme@0.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/plugin-signals@0.0.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6 + +## @backstage/plugin-signals-backend@0.2.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-signals-node@0.1.14-next.3 + +## @backstage/plugin-signals-node@0.1.14-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + +## @backstage/plugin-techdocs@1.11.1-next.3 + +### Patch Changes + +- e937ae7: Fix an issue with index page of documentation site being re-rendered. +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-auth-react@0.1.8-next.2 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.2 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.10-next.2 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.41-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.25.0-next.3 + - @backstage/plugin-techdocs@1.11.1-next.3 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/test-utils@1.7.1-next.0 + - @backstage/plugin-search-react@1.8.2-next.2 + - @backstage/plugin-techdocs-react@1.2.10-next.2 + +## @backstage/plugin-techdocs-backend@1.11.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.3 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.13-next.3 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration@1.15.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-techdocs-react@1.2.10-next.2 + +## @backstage/plugin-techdocs-node@1.12.13-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.1.13-next.0 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/plugin-user-settings@0.8.15-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/theme@0.6.1-next.0 + - @backstage/types@1.1.1 + - @backstage/plugin-signals-react@0.0.6 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.27-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-signals-node@0.1.14-next.3 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.103-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.25.0-next.3 + - @backstage/cli@0.29.0-next.3 + - @backstage/plugin-search@1.4.19-next.3 + - @backstage/plugin-techdocs@1.11.1-next.3 + - @backstage/plugin-scaffolder-react@1.14.0-next.3 + - @backstage/plugin-scaffolder@1.27.0-next.3 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/plugin-api-docs@0.11.12-next.3 + - @backstage/plugin-catalog-graph@0.4.12-next.3 + - @backstage/plugin-catalog-import@0.12.6-next.3 + - @backstage/plugin-org@0.6.32-next.3 + - @backstage/plugin-user-settings@0.8.15-next.3 + - @backstage/app-defaults@1.5.13-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.2 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-auth-react@0.1.8-next.2 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.2 + - @backstage/plugin-devtools@0.1.20-next.2 + - @backstage/plugin-home@0.8.1-next.3 + - @backstage/plugin-kubernetes@0.12.0-next.3 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.3 + - @backstage/plugin-notifications@0.3.3-next.2 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.2 + - @backstage/plugin-signals@0.0.12-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.2 + - @backstage/plugin-techdocs-react@1.2.10-next.2 + +## example-app-next@0.0.17-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.25.0-next.3 + - @backstage/cli@0.29.0-next.3 + - @backstage/plugin-search@1.4.19-next.3 + - @backstage/plugin-techdocs@1.11.1-next.3 + - @backstage/plugin-scaffolder-react@1.14.0-next.3 + - @backstage/plugin-scaffolder@1.27.0-next.3 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/plugin-api-docs@0.11.12-next.3 + - @backstage/plugin-catalog-graph@0.4.12-next.3 + - @backstage/plugin-catalog-import@0.12.6-next.3 + - @backstage/plugin-org@0.6.32-next.3 + - @backstage/plugin-user-settings@0.8.15-next.3 + - @backstage/app-defaults@1.5.13-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.2 + - @backstage/frontend-defaults@0.1.2-next.2 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-app@0.1.2-next.2 + - @backstage/plugin-app-visualizer@0.1.12-next.3 + - @backstage/plugin-auth-react@0.1.8-next.2 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.2 + - @backstage/plugin-home@0.8.1-next.3 + - @backstage/plugin-kubernetes@0.12.0-next.3 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.3 + - @backstage/plugin-notifications@0.3.3-next.2 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.2 + - @backstage/plugin-signals@0.0.12-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.2 + - @backstage/plugin-techdocs-react@1.2.10-next.2 + +## app-next-example-plugin@0.0.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/frontend-plugin-api@0.9.1-next.2 + +## example-backend@0.0.32-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-backend@0.3.16-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/plugin-scaffolder-backend@1.27.0-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.77-next.2 + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + - @backstage/plugin-devtools-backend@0.4.2-next.2 + - @backstage/plugin-kubernetes-backend@0.19.0-next.3 + - @backstage/plugin-notifications-backend@0.4.3-next.3 + - @backstage/plugin-permission-backend@0.5.51-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-proxy-backend@0.5.8-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.3 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.3 + - @backstage/plugin-search-backend@1.7.0-next.3 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.3 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.3 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-signals-backend@0.2.3-next.3 + - @backstage/plugin-techdocs-backend@1.11.2-next.3 + +## example-backend-legacy@0.2.104-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/plugin-events-backend@0.3.16-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/plugin-scaffolder-backend@1.27.0-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-app-backend@0.3.77-next.2 + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-devtools-backend@0.4.2-next.2 + - @backstage/plugin-kubernetes-backend@0.19.0-next.3 + - @backstage/plugin-permission-backend@0.5.51-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-proxy-backend@0.5.8-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.3 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.3 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.3 + - @backstage/plugin-search-backend@1.7.0-next.3 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.3 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.3 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.3 + - @backstage/plugin-search-backend-module-pg@0.5.38-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.3 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-signals-backend@0.2.3-next.3 + - @backstage/plugin-signals-node@0.1.14-next.3 + - @backstage/plugin-techdocs-backend@1.11.2-next.3 + +## e2e-test@0.2.22-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.22-next.3 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/errors@1.2.4 + +## @internal/frontend@0.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10 + +## @internal/scaffolder@0.0.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.14.0-next.3 + +## techdocs-cli-embedded-app@0.2.102-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.25.0-next.3 + - @backstage/cli@0.29.0-next.3 + - @backstage/plugin-techdocs@1.11.1-next.3 + - @backstage/core-components@0.16.0-next.2 + - @backstage/app-defaults@1.5.13-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/integration-react@1.2.0 + - @backstage/test-utils@1.7.1-next.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.2 + +## @internal/plugin-todo-list@1.0.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-plugin-api@1.10.0 diff --git a/docs/releases/v1.33.0.md b/docs/releases/v1.33.0.md new file mode 100644 index 0000000000..c8798ea9e5 --- /dev/null +++ b/docs/releases/v1.33.0.md @@ -0,0 +1,73 @@ +--- +id: v1.33.0 +title: v1.33.0 +description: Backstage Release v1.33.0 +--- + +These are the release notes for the v1.33.0 release of [Backstage](https://backstage.io/). + +A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for the hard work in getting this release developed and done. + +## Highlights + +### Catalog performance improvements and breadcrumbs + +Some database improvements and fixes have been made to the catalog. The `refresh_state` table is no longer needed in the read path, and some indices have been dropped. We don't expect this to have any negative impact on end users; rather, performance should increase due to reduced index churn and less used storage. + +Entity pages now also by default have a breadcrumb control in the page header, showing the context of the current entity such as what system and domain it’s in, if any. + +### App backend config injection with read-only filesystem + +The `app-backend` now stores the templated `index.html` file in memory rather than writing it to disk. This means you no longer need to use the `app.disableConfigInjection` flag when running with a read-only filesystem, allowing you to take advantage of the config injection. + +### **BREAKING**: `LEGACY_BACKEND_START` has been removed + +The CLI no longer supports the `LEGACY_BACKEND_START` flag, which means that old dev endpoints in `src/run.ts` have to be migrated to the new `dev/index.ts` structure instead. + +### Scaffolder now supports Node.js v22 + +The `isolated-vm` dependency has been upgraded to `v5`, which means the scaffolder now supports Node.js v22. It also means that running Scaffolder with Node.js v16 is no longer possible. + +### Scaffolder permissions and actions + +A new `scaffolder.template.management` permission has been added. This permission is useful if you want to limit access to the frontend template management features. Contributed by [@stephenglass](https://github.com/stephenglass) in [#26946](https://github.com/backstage/backstage/pull/26946) + +A new `fs:readdir` action has been added. This action is useful if you need to retrieve the contents of a specific directory within a workspace. Contributed by [@secustor](https://github.com/secustor) in [#27283](https://github.com/backstage/backstage/pull/27283) + +### Catalog service ref for backends + +The `@backstage/plugin-catalog-node` package now has a `catalogServiceRef` that backends should move to depending on for their catalog communication needs. If you are currently instantiating a `CatalogService` by hand, you will enjoy using this new service instead. The most important improvement is that it supports a credentials argument directly which gives it support for proper auth toward the catalog without having to make tokens with the `auth` core service. + +### New generate-patch cli command + +We have added a new `generate-patch` CLI command that can be used to generate patches for current changes in a source workspace, which can then be installed in a target workspace. This allows you to easily and immediately use changes that have been contributed upstream, without needing to wait for a release. +[#27331](https://github.com/backstage/backstage/pull/27331) + +### Google LDAP support + +Added support for Google LDAP to `@backstage/plugin-catalog-backend-module-ldap`. Contributed by [@megatroom](https://github.com/megatroom) in [#27373](https://github.com/backstage/backstage/pull/27373) + +### **BREAKING** AWS ALB authentication + +The AWS ALB `fullProfile` will no longer have its username or email converted to lowercase. This is to ensure unique handling of the users. You may need to update and configure a custom sign-in resolver or profile transform as a result via `@backstage/plugin-auth-backend-module-aws-alb-provider`. + +## Security Fixes + +The kubernetes plugin received a bump of the `@kubernetes/client-node` dependency to mitigate CVEs related to the `request` and `tough-cookie` packages. Contributed by [@coreydaley](https://github.com/coreydaley) in [#25385](https://github.com/backstage/backstage/pull/25385) + +## Upgrade path + +We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated). + +## Links and References + +Below you can find a list of links and references to help you learn about and start using this new release. + +- [Backstage official website](https://backstage.io/), [documentation](https://backstage.io/docs/), and [getting started guide](https://backstage.io/docs/getting-started/) +- [GitHub repository](https://github.com/backstage/backstage) +- Backstage's [versioning and support policy](https://backstage.io/docs/overview/versioning-policy) +- [Community Discord](https://discord.gg/backstage-687207715902193673) for discussions and support +- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.33.0-changelog.md) +- Backstage [Demos](https://backstage.io/demos), [Blog](https://backstage.io/blog), [Roadmap](https://backstage.io/docs/overview/roadmap) and [Plugins](https://backstage.io/plugins) + +Sign up for our [newsletter](https://info.backstage.spotify.com/newsletter_subscribe) if you want to be informed about what is happening in the world of Backstage. diff --git a/docs/releases/v1.34.0-next.0-changelog.md b/docs/releases/v1.34.0-next.0-changelog.md new file mode 100644 index 0000000000..4ed7a2a57b --- /dev/null +++ b/docs/releases/v1.34.0-next.0-changelog.md @@ -0,0 +1,2234 @@ +# Release v1.34.0-next.0 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.34.0-next.0](https://backstage.github.io/upgrade-helper/?to=1.34.0-next.0) + +## @backstage/backend-defaults@0.6.0-next.0 + +### Minor Changes + +- de6f280: **BREAKING** Upgraded @keyv/redis and keyv packages to resolve a bug related to incorrect resolution of cache keys. + + This is a breaking change for clients using the `redis` store for cache with `useRedisSets` option set to false since cache keys will be calculated differently (without the sets:namespace: prefix). For clients with default configuration (or useRedisSets set to false) the cache keys will stay the same, but since @keyv/redis library no longer supports redis sets they won't be utilised anymore. + + If you were using `useRedisSets` option in configuration make sure to remove it from `app-config.yaml`: + + ```diff + backend: + cache: + store: redis + connection: redis://user:pass@cache.example.com:6379 + - useRedisSets: false + ``` + +- 277092a: Implemented `AzureBlobStorageUrlReader` to read from the url of committed location from the entity provider + +- 18a2c00: All middleware used by the default `coreServices.http` is now exported for use by custom implementations. + +### Patch Changes + +- 8863b38: Export `PluginTokenHandler` and `pluginTokenHandlerDecoratorServiceRef` to allow for custom decoration of the plugin token handler without having to re-implement the entire handler. +- 97c6837: Export `DefaultHttpAuthService` to allow for custom token extraction logic. +- e5255f1: Log request and response metadata so it can be used for filtering log messages. + The format of the request date was also changed from `clf` to `utc`. +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/backend-app-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + - @backstage/integration-aws-node@0.1.13 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## @backstage/backend-test-utils@1.2.0-next.0 + +### Minor Changes + +- de6f280: **BREAKING** Upgraded @keyv/redis and keyv packages to resolve a bug related to incorrect resolution of cache keys. + + This is a breaking change for clients using the `redis` store for cache with `useRedisSets` option set to false since cache keys will be calculated differently (without the sets:namespace: prefix). For clients with default configuration (or useRedisSets set to false) the cache keys will stay the same, but since @keyv/redis library no longer supports redis sets they won't be utilised anymore. + + If you were using `useRedisSets` option in configuration make sure to remove it from `app-config.yaml`: + + ```diff + backend: + cache: + store: redis + connection: redis://user:pass@cache.example.com:6379 + - useRedisSets: false + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/backend-app-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/integration@1.16.0-next.0 + +### Minor Changes + +- 277092a: Add the integration for Azure blob storage to read the credentials to access the storage account and provide the default credential provider. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/repo-tools@0.12.0-next.0 + +### Minor Changes + +- c1eccd6: Fix invalid path and malformed flags bugs in api-reports.ts + +### Patch Changes + +- 5f04976: Fixed a bug that caused missing code in published packages. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/cli-common@0.1.15 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog-backend-module-azure@0.3.0-next.0 + +### Minor Changes + +- 277092a: Added the Azure Blob Storage as catalog entity provider to import all the desired entities from storage account provided in app-config.yaml + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.11.0-next.0 + +### Minor Changes + +- 732700a: Updated fix for ldap entity mapping which doesn't require extra config setting of dnCaseSensitive +- 95ac4a2: Add new ldap vendor config 'LLDAP' + +### Patch Changes + +- 5f04976: Fixed a bug that caused missing code in published packages. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-scaffolder-backend@1.28.0-next.0 + +### Minor Changes + +- c05a343: Emit scaffolder events using the optional `EventsService` + +### Patch Changes + +- 3c62a50: Experimental support for `formDecorators` to enable secret collection and mutations to the parameters for scaffolder tasks +- 8f59dc5: Add fs:readdir to scaffolder startup +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.4-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.3-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.3-next.0 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.3-next.0 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.3-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.0 + +### Minor Changes + +- c4ffd13: Added the autocomplete feature to GitlabRepoUrlPicker +- 32459d0: **BREAKING**: Upgraded the `gitbeaker` library to version 41. As part of this, the `scopes` parameter to the `gitlab:projectDeployToken:create` is no longer optional, so you will have to pass it a value (for example `['read_repository']`). + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/app-defaults@1.5.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/backend-app-api@1.0.3-next.0 + +### Patch Changes + +- eef3ef1: Removed unused `express` dependencies. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## @backstage/backend-dynamic-feature-service@0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/backend-app-api@1.0.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-events-backend@0.3.17-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-app-node@0.1.28-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/backend-openapi-utils@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/backend-plugin-api@1.0.3-next.0 + +### Patch Changes + +- eef3ef1: Removed unused `express` dependencies. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/catalog-client@1.8.1-next.0 + +### Patch Changes + +- d7e7836: Fixed a bug in the `queryEntities` method where errors were not being handled properly. +- Updated dependencies + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/cli@0.29.3-next.0 + +### Patch Changes + +- 2b6c1ea: If the Backstage yarn plugin is installed, it will now be automatically updated as part of `versions:bump`. +- 7dcff85: Remove special-casing for `@types` packages when generating dependency entries + during templating +- 0aff006: Bumped the version range for `html-webpack-plugin` to fix the `htmlPluginExports.getCompilationHooks is not a function` error when using experimental Rspack. +- 583f3d4: Added `@backstage/cli/config/prettier` as a replacement for `@spotify/prettier-config`, but with the same configuration. +- 5f04976: Update `rollup` to avoid issues with build output when running `backstage-cli package build`. +- 5f04976: Fixed a bug that caused missing code in published packages. +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/release-manifests@0.0.12-next.0 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + - @backstage/eslint-plugin@0.1.10 + - @backstage/types@1.2.0 + +## @backstage/cli-node@0.2.11-next.0 + +### Patch Changes + +- af665ea: add PackageManager and Lockfile interfaces for future use +- cbfc69e: Internal refactor +- Updated dependencies + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/core-app-api@1.15.3-next.0 + +### Patch Changes + +- e5fa018: The OAuth 2 client implementations will now attempt to refresh the session when the existing session doesn't have the required scopes. The previous behavior was to only try to refresh the session of it was missing, and otherwise directly request a new session. This fixes an issue where some auth providers will not return access tokens with certain scopes unless explicitly requested, leading to an auth popup even if the underlying session already had been granted the requested scopes. +- 2830689: Decrease OAuth2 token refresh grace period +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-compat-api@0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-components@0.16.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.3-next.0 + - @backstage/config@1.3.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/version-bridge@1.0.10 + +## @backstage/create-app@0.5.23-next.0 + +### Patch Changes + +- 5819f8d: Updated Dockerfile to include `backstage.json` file +- 583f3d4: Updated the template to use `@backstage/cli/config/prettier` instead of `@spotify/prettier-config`. +- Updated dependencies + - @backstage/cli-common@0.1.15 + +## @backstage/dev-utils@1.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/app-defaults@1.5.15-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.2-next.0 + +## @backstage/frontend-app-api@0.10.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/config@1.3.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-defaults@0.1.4-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-defaults@0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-app@0.1.4-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/frontend-app-api@0.10.3-next.0 + +## @backstage/frontend-plugin-api@0.9.3-next.0 + +### Patch Changes + +- 5f04976: Fixed a bug that caused missing code in published packages. +- Updated dependencies + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-test-utils@0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-app@0.1.4-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/config@1.3.0 + - @backstage/frontend-app-api@0.10.3-next.0 + - @backstage/test-utils@1.7.3-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/integration-react@1.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/config@1.3.0 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/release-manifests@0.0.12-next.0 + +### Patch Changes + +- 2e140dc: Switch to native fetch for loading release manifests + +## @techdocs/cli@1.8.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/plugin-techdocs-node@1.12.15-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + +## @backstage/test-utils@1.7.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/config@1.3.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/theme@0.6.3-next.0 + +### Patch Changes + +- 5f04976: Fixed a bug that caused missing code in published packages. + +## @backstage/plugin-api-docs@0.12.2-next.0 + +### Patch Changes + +- 11babd9: Fix link styling in ProvidedApisCard component so it aligns with other card components. +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-catalog@1.25.2-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-app@0.1.4-next.0 + +### Patch Changes + +- e5fa018: The OAuth 2 client implementations will now attempt to refresh the session when the existing session doesn't have the required scopes. The previous behavior was to only try to refresh the session of it was missing, and otherwise directly request a new session. This fixes an issue where some auth providers will not return access tokens with certain scopes unless explicitly requested, leading to an auth popup even if the underlying session already had been granted the requested scopes. +- 5f04976: Fixed a bug that caused missing code in published packages. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-app-backend@0.4.3-next.0 + +### Patch Changes + +- 74c3f2a: Fixed a bug where config would not be injected on the `/` and `/index.html` paths. +- d66fa80: Fix root route handling when query parameters are present +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-app-node@0.1.28-next.0 + +## @backstage/plugin-app-node@0.1.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config-loader@1.9.2 + +## @backstage/plugin-app-visualizer@0.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-auth-backend@0.24.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.3-next.0 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.3-next.0 + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.1-next.0 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.3-next.0 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.3-next.0 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.3-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-google-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.3-next.0 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.3-next.0 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.3-next.0 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.3-next.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-auth-backend@0.24.1-next.0 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-auth-backend@0.24.1-next.0 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-auth-node@0.5.5-next.0 + +### Patch Changes + +- 1e624ca: Restrict `@types/express` version range from `*` to `^4.17.6`. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-auth-react@0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-bitbucket-cloud-common@0.2.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-catalog@1.25.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + - @backstage/plugin-search-react@1.8.4-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-catalog-backend@1.28.1-next.0 + +### Patch Changes + +- f159b25: Compute deltas more efficiently, which generally leads to less wasted processing cycles +- 56511ba: Be more aggressive in dequeueing entities for stitching +- 71152e3: Correctly report stitching queue length +- 3ab57c6: Support changing location keys on existing entities, in delta mutations +- 2924ffe: Compute some metrics using search table facet aggregations instead of reading the full refresh state +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/backend-openapi-utils@0.3.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## @backstage/plugin-catalog-backend-module-aws@0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-kubernetes-common@0.9.0 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/backend-openapi-utils@0.3.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-kubernetes-common@0.9.0 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-github@0.7.8-next.0 + +### Patch Changes + +- 468bbcc: Pass in a default schedule to the `GithubEntityProvider` if none is provided +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-github@0.7.8-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-catalog-backend-module-gitlab@0.5.1-next.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.1-next.0 + +### Patch Changes + +- cce9cae: Deprecate old-backend-system `IncrementalCatalogBuilder` +- 5aa44d2: Wire up the events together in the new backend system +- cbfc69e: Create a `dev/index.ts` entrypoint for `yarn start` +- 3ca5f70: Ensure that the scheduled worker task doesn't run at an unreasonably high frequency +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-catalog-backend-module-logs@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.5 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-catalog-graph@0.4.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/types@1.2.0 + +## @backstage/plugin-catalog-import@0.12.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-node@1.14.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## @backstage/plugin-catalog-react@1.14.3-next.0 + +### Patch Changes + +- f18c67d: Fix catalog filtering to allow searching entities by display name +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-test-utils@0.2.4-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.1 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-config-schema@0.1.63-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-devtools@0.1.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-devtools-common@0.1.13 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-devtools-backend@0.4.3-next.0 + +### Patch Changes + +- 1e624ca: Restrict `@types/express` version range from `*` to `^4.17.6`. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-devtools-common@0.1.13 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## @backstage/plugin-events-backend@0.3.17-next.0 + +### Patch Changes + +- 1577511: Allow configuring a timeout for event bus polling requests. This can be set like so in your app-config: + + ```yaml + events: + notifyTimeoutMs: 30000 + ``` + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/backend-openapi-utils@0.3.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-events-backend-module-azure@0.2.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + +## @backstage/plugin-events-backend-module-gerrit@0.2.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + +## @backstage/plugin-events-backend-module-github@0.2.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/config@1.3.0 + +## @backstage/plugin-events-backend-module-gitlab@0.2.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/config@1.3.0 + +## @backstage/plugin-events-backend-test-utils@0.1.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.6-next.0 + +## @backstage/plugin-events-node@0.4.6-next.0 + +### Patch Changes + +- 79a06f6: Clarified purpose of subscriber ID in TSDoc for `EventsServiceSubscribeOptions`. + +- 1577511: Allow configuring a timeout for event bus polling requests. This can be set like so in your app-config: + + ```yaml + events: + notifyTimeoutMs: 30000 + ``` + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-home@0.8.3-next.0 + +### Patch Changes + +- 9951ba4: Updated dependency `@rjsf/utils` to `5.23.1`. + Updated dependency `@rjsf/core` to `5.23.1`. + Updated dependency `@rjsf/material-ui` to `5.23.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.23.1`. +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/plugin-home-react@0.1.21-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-home-react@0.1.21-next.0 + +### Patch Changes + +- 9951ba4: Updated dependency `@rjsf/utils` to `5.23.1`. + Updated dependency `@rjsf/core` to `5.23.1`. + Updated dependency `@rjsf/material-ui` to `5.23.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.23.1`. +- Updated dependencies + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-kubernetes@0.12.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-kubernetes-react@0.5.2-next.0 + +## @backstage/plugin-kubernetes-backend@0.19.1-next.0 + +### Patch Changes + +- cbfc69e: Create a `dev/index.ts` entrypoint for `yarn start` +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration-aws-node@0.1.13 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-kubernetes-node@0.2.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## @backstage/plugin-kubernetes-cluster@0.0.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-kubernetes-react@0.5.2-next.0 + +## @backstage/plugin-kubernetes-node@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.0 + +## @backstage/plugin-kubernetes-react@0.5.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.1 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.0 + +## @backstage/plugin-notifications@0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.3-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-signals-react@0.0.7 + +## @backstage/plugin-notifications-backend@0.4.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-notifications-node@0.2.10-next.0 + - @backstage/plugin-signals-node@0.1.15-next.0 + +## @backstage/plugin-notifications-backend-module-email@0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-notifications-node@0.2.10-next.0 + +## @backstage/plugin-notifications-node@0.2.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-signals-node@0.1.15-next.0 + +## @backstage/plugin-org@0.6.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-org-react@0.1.33-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-permission-backend@0.5.52-next.0 + +### Patch Changes + +- 1e624ca: Restrict `@types/express` version range from `*` to `^4.17.6`. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## @backstage/plugin-permission-node@0.8.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-proxy-backend@0.5.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder@1.27.2-next.0 + +### Patch Changes + +- 3c62a50: Experimental support for `formDecorators` to enable secret collection and mutations to the parameters for scaffolder tasks +- c4ffd13: Added the autocomplete feature to GitlabRepoUrlPicker +- 9951ba4: Updated dependency `@rjsf/utils` to `5.23.1`. + Updated dependency `@rjsf/core` to `5.23.1`. + Updated dependency `@rjsf/material-ui` to `5.23.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.23.1`. +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + - @backstage/plugin-scaffolder-react@1.14.2-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.4-next.0 + +### Patch Changes + +- 5f04976: Fixed a bug that caused missing code in published packages. +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.3-next.0 + +### Patch Changes + +- c4ffd13: Added the autocomplete feature to GitlabRepoUrlPicker +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-notifications-node@0.2.10-next.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-scaffolder-node-test-utils@0.1.16-next.0 + +## @backstage/plugin-scaffolder-common@1.5.8-next.0 + +### Patch Changes + +- 3c62a50: Experimental support for `formDecorators` to enable secret collection and mutations to the parameters for scaffolder tasks +- Updated dependencies + - @backstage/catalog-model@1.7.1 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-scaffolder-node@0.6.1-next.0 + +### Patch Changes + +- c4ffd13: Added the autocomplete feature to GitlabRepoUrlPicker +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-test-utils@1.2.0-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-react@1.14.2-next.0 + +### Patch Changes + +- 3c62a50: Experimental support for `formDecorators` to enable secret collection and mutations to the parameters for scaffolder tasks +- c4ffd13: Added the autocomplete feature to GitlabRepoUrlPicker +- 9951ba4: Updated dependency `@rjsf/utils` to `5.23.1`. + Updated dependency `@rjsf/core` to `5.23.1`. + Updated dependency `@rjsf/material-ui` to `5.23.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.23.1`. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-search@1.4.21-next.0 + +### Patch Changes + +- d311c84: Use Select from core-components and update Lifecycle filter to use Select instead checkboxes. +- Updated dependencies + - @backstage/plugin-search-react@1.8.4-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend@1.7.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/backend-openapi-utils@0.3.1-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-catalog@0.2.6-next.0 + +### Patch Changes + +- ed0aaec: Update README +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config@1.3.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-explore@0.2.6-next.0 + +### Patch Changes + +- ed0aaec: Update README +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config@1.3.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-pg@0.5.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config@1.3.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config@1.3.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-techdocs@0.3.4-next.0 + +### Patch Changes + +- ed0aaec: Update README +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-techdocs-node@1.12.15-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-node@1.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-react@1.8.4-next.0 + +### Patch Changes + +- d311c84: Use Select from core-components and update Lifecycle filter to use Select instead checkboxes. +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-signals@0.0.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.3-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/types@1.2.0 + - @backstage/plugin-signals-react@0.0.7 + +## @backstage/plugin-signals-backend@0.2.4-next.0 + +### Patch Changes + +- 1e624ca: Restrict `@types/express` version range from `*` to `^4.17.6`. +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-signals-node@0.1.15-next.0 + +## @backstage/plugin-signals-node@0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-techdocs@1.11.3-next.0 + +### Patch Changes + +- 7d8777d: Added support for the Search bar in docs residing in the entity page tab, and not only the global "/docs" page. +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-search-react@1.8.4-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-auth-react@0.1.10-next.0 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.12-next.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.43-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-search-react@1.8.4-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/plugin-techdocs@1.11.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/test-utils@1.7.3-next.0 + - @backstage/plugin-catalog@1.25.2-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.0 + +## @backstage/plugin-techdocs-backend@1.11.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.0 + - @backstage/plugin-techdocs-node@1.12.15-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.0 + +## @backstage/plugin-techdocs-node@1.12.15-next.0 + +### Patch Changes + +- 5f04976: Fixed a bug that caused missing code in published packages. +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/plugin-user-settings@0.8.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-signals-react@0.0.7 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-signals-node@0.1.15-next.0 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.104-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.3-next.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-scaffolder-react@1.14.2-next.0 + - @backstage/plugin-scaffolder@1.27.2-next.0 + - @backstage/plugin-search-react@1.8.4-next.0 + - @backstage/plugin-search@1.4.21-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/plugin-techdocs@1.11.3-next.0 + - @backstage/plugin-home@0.8.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-api-docs@0.12.2-next.0 + - @backstage/app-defaults@1.5.15-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.3-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-auth-react@0.1.10-next.0 + - @backstage/plugin-catalog@1.25.2-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-graph@0.4.14-next.0 + - @backstage/plugin-catalog-import@0.12.8-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.0 + - @backstage/plugin-devtools@0.1.22-next.0 + - @backstage/plugin-kubernetes@0.12.2-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.0 + - @backstage/plugin-notifications@0.4.2-next.0 + - @backstage/plugin-org@0.6.34-next.0 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-signals@0.0.14-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.0 + - @backstage/plugin-user-settings@0.8.17-next.0 + +## example-app-next@0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.3-next.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-app@0.1.4-next.0 + - @backstage/plugin-scaffolder-react@1.14.2-next.0 + - @backstage/plugin-scaffolder@1.27.2-next.0 + - @backstage/plugin-search-react@1.8.4-next.0 + - @backstage/plugin-search@1.4.21-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/plugin-techdocs@1.11.3-next.0 + - @backstage/plugin-home@0.8.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-api-docs@0.12.2-next.0 + - @backstage/app-defaults@1.5.15-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.3-next.0 + - @backstage/frontend-defaults@0.1.4-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-app-visualizer@0.1.14-next.0 + - @backstage/plugin-auth-react@0.1.10-next.0 + - @backstage/plugin-catalog@1.25.2-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-graph@0.4.14-next.0 + - @backstage/plugin-catalog-import@0.12.8-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.0 + - @backstage/plugin-kubernetes@0.12.2-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.0 + - @backstage/plugin-notifications@0.4.2-next.0 + - @backstage/plugin-org@0.6.34-next.0 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-signals@0.0.14-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.0 + - @backstage/plugin-user-settings@0.8.17-next.0 + +## app-next-example-plugin@0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/core-components@0.16.2-next.0 + +## example-backend@0.0.33-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/plugin-scaffolder-backend@1.28.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.0 + - @backstage/plugin-app-backend@0.4.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-permission-backend@0.5.52-next.0 + - @backstage/plugin-devtools-backend@0.4.3-next.0 + - @backstage/plugin-signals-backend@0.2.4-next.0 + - @backstage/plugin-events-backend@0.3.17-next.0 + - @backstage/plugin-kubernetes-backend@0.19.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-auth-backend@0.24.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.0 + - @backstage/plugin-notifications-backend@0.4.4-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + - @backstage/plugin-proxy-backend@0.5.9-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.3-next.0 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.4-next.0 + - @backstage/plugin-search-backend@1.7.1-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-techdocs-backend@1.11.4-next.0 + +## example-backend-legacy@0.2.105-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-scaffolder-backend@1.28.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.0 + - @backstage/plugin-app-backend@0.4.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-permission-backend@0.5.52-next.0 + - @backstage/plugin-devtools-backend@0.4.3-next.0 + - @backstage/plugin-signals-backend@0.2.4-next.0 + - @backstage/plugin-events-backend@0.3.17-next.0 + - @backstage/plugin-kubernetes-backend@0.19.1-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-auth-backend@0.24.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + - @backstage/plugin-proxy-backend@0.5.9-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.3-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.3-next.0 + - @backstage/plugin-search-backend@1.7.1-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.39-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-signals-node@0.1.15-next.0 + - @backstage/plugin-techdocs-backend@1.11.4-next.0 + +## e2e-test@0.2.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.23-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + +## @internal/frontend@0.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @internal/scaffolder@0.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.14.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + +## techdocs-cli-embedded-app@0.2.103-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.3-next.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-techdocs@1.11.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/app-defaults@1.5.15-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/test-utils@1.7.3-next.0 + - @backstage/plugin-catalog@1.25.2-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.0 + +## yarn-plugin-backstage@0.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/release-manifests@0.0.12-next.0 + - @backstage/cli-common@0.1.15 + +## @internal/plugin-todo-list@1.0.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + +## @internal/plugin-todo-list-backend@1.0.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/errors@1.2.5 diff --git a/docs/releases/v1.34.0-next.1-changelog.md b/docs/releases/v1.34.0-next.1-changelog.md new file mode 100644 index 0000000000..b61e5b1560 --- /dev/null +++ b/docs/releases/v1.34.0-next.1-changelog.md @@ -0,0 +1,2146 @@ +# Release v1.34.0-next.1 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.34.0-next.1](https://backstage.github.io/upgrade-helper/?to=1.34.0-next.1) + +## @backstage/backend-app-api@1.1.0-next.1 + +### Minor Changes + +- 12eac85: **EXPERIMENTAL**: Adds a new `instanceMetadataService` to hold information about a specific backend instance. + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/backend-plugin-api@1.1.0-next.1 + +### Minor Changes + +- 12eac85: **EXPERIMENTAL**: Adds a new `instanceMetadataService` to hold information about a specific backend instance. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/catalog-client@1.9.0-next.1 + +### Minor Changes + +- 384e494: Internal updates to generated code. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog-backend@1.29.0-next.1 + +### Minor Changes + +- 384e494: Internal updates to generated code. +- 1d0bc11: Fetch all facets in a single database query + +### Patch Changes + +- e4aab10: Fix a bug where sometimes the `by-query` endpoint could return nulls for entities that were not yet stitched. +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.1 + - @backstage/backend-openapi-utils@0.3.1-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-events-node@0.4.6-next.1 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-catalog-node@1.15.0-next.1 + +### Minor Changes + +- 8edc4cd: Updated the `catalogServiceMock` return type to match both `CatalogService` and `CatalogApi` + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-devtools-backend@0.5.0-next.1 + +### Minor Changes + +- c781a9a: **BREAKING** Removed support for what is known as the legacy backend, please use the New Backend System. + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-devtools-common@0.1.13 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-events-backend@0.4.0-next.1 + +### Minor Changes + +- 384e494: Internal updates to generated code. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/backend-openapi-utils@0.3.1-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-search-backend@1.8.0-next.1 + +### Minor Changes + +- 384e494: Internal updates to generated code. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/backend-openapi-utils@0.3.1-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/app-defaults@1.5.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/backend-defaults@0.6.0-next.1 + +### Patch Changes + +- fe87fbf: Add task metrics as two gauges that track the last start and end timestamps as epoch seconds. +- 1ac6b72: Support `connection.type: cloudsql` in database client for usage with `@google-cloud/cloud-sql-connector` and `iam` auth +- 5c9cc05: Use native fetch instead of node-fetch +- cf627c6: Fixed an issue in the WinstonLogger where Errors thrown and given to logger.error with field values that could not be cast to a string would throw a TypeError +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-app-api@1.1.0-next.1 + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/cli-common@0.1.15 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/types@1.2.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/backend-dynamic-feature-service@0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-events-backend@0.4.0-next.1 + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-app-api@1.1.0-next.1 + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-app-node@0.1.28-next.1 + - @backstage/plugin-events-node@0.4.6-next.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/backend-openapi-utils@0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/backend-test-utils@1.2.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/backend-app-api@1.1.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/cli@0.29.3-next.1 + +### Patch Changes + +- a49030a: Add support for `--output-file` option from ESLint to `package lint` and `repo lint` commands. +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/config-loader@1.9.3-next.0 + - @backstage/release-manifests@0.0.12-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/cli-common@0.1.15 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/eslint-plugin@0.1.10 + - @backstage/integration@1.16.0-next.0 + - @backstage/types@1.2.0 + +## @backstage/config-loader@1.9.3-next.0 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/core-compat-api@0.3.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-components@0.16.2-next.1 + +### Patch Changes + +- e47be38: Added data-testid to placeholder rendered by Progress component to simplify assertions in tests +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/theme@0.6.3-next.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/create-app@0.5.23-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/cli-common@0.1.15 + +## @backstage/dev-utils@1.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/app-defaults@1.5.15-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/theme@0.6.3-next.0 + +## @backstage/frontend-app-api@0.10.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-defaults@0.1.4-next.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-defaults@0.1.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/frontend-app-api@0.10.3-next.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/plugin-app@0.1.4-next.1 + +## @backstage/frontend-plugin-api@0.9.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-test-utils@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/frontend-app-api@0.10.3-next.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/test-utils@1.7.3-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-app@0.1.4-next.1 + +## @backstage/release-manifests@0.0.12-next.1 + +### Patch Changes + +- b29eaea: Allow overriding the fetch function used inside getManifestByVersion + +## @backstage/repo-tools@0.12.0-next.1 + +### Patch Changes + +- 860e3b5: Generated OpenAPI clients now support paths with tags. +- 00058d0: The `generate-patch` command will now add a single resolution entry for all versions of the patched package, rather than separate entries for each version query. +- Updated dependencies + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/cli-common@0.1.15 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/errors@1.2.5 + +## @techdocs/cli@1.8.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/plugin-techdocs-node@1.12.15-next.1 + +## @backstage/plugin-api-docs@0.12.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/plugin-catalog@1.25.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-app@0.1.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-app-backend@0.4.3-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-app-node@0.1.28-next.1 + +## @backstage/plugin-app-node@0.1.28-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-app-visualizer@0.1.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + +## @backstage/plugin-auth-backend@0.24.1-next.1 + +### Patch Changes + +- c907440: Improved error forwarding for OAuth refresh endpoints +- 40518ab: Fix issue with `jwks` endpoint returning invalid data with `firestore` +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.3-next.1 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.3-next.1 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.3-next.1 + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.1-next.1 + - @backstage/plugin-auth-backend-module-google-provider@0.2.3-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.3-next.1 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.3-next.1 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.3-next.1 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.3-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.1 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.3-next.1 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.3-next.1 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.3-next.1 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.3-next.1 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.3-next.1 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.3-next.1 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.3-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.1-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.1-next.1 + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.3-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.3-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.3-next.1 + +### Patch Changes + +- 79b055a: Pass through `includeGrantedScopes` in order to persist scopes across refresh calls +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.3-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.1-next.1 + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + +## @backstage/plugin-auth-node@0.5.5-next.1 + +### Patch Changes + +- c907440: Improved error forwarding for OAuth refresh endpoints +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-auth-react@0.1.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog@1.25.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.4-next.1 + +## @backstage/plugin-catalog-backend-module-aws@0.4.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-kubernetes-common@0.9.0 + +## @backstage/plugin-catalog-backend-module-azure@0.3.0-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/backend-openapi-utils@0.3.1-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.5-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-kubernetes-common@0.9.0 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.5-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-catalog-backend-module-github@0.7.8-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/plugin-catalog-backend-module-github@0.7.8-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.5.1-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/plugin-catalog-backend-module-gitlab@0.5.1-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.1-next.1 + +### Patch Changes + +- fe87fbf: Add task metrics as two gauges that track the last start and end timestamps as epoch seconds. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-events-node@0.4.6-next.1 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-catalog-backend-module-ldap@0.11.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-logs@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.5-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.5-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.5 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-catalog-graph@0.4.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/types@1.2.0 + +## @backstage/plugin-catalog-import@0.12.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/integration@1.16.0-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-catalog-react@1.14.3-next.1 + +### Patch Changes + +- d97a2cd: Fixed an issue causing the `EntityOwnerPicker` to reset scrolling when more elements are loaded. +- Updated dependencies + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/frontend-test-utils@0.2.4-next.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + +## @backstage/plugin-config-schema@0.1.63-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-devtools@0.1.22-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/plugin-devtools-common@0.1.13 + - @backstage/plugin-permission-react@0.4.28 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-events-backend-module-azure@0.2.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-events-backend-module-gerrit@0.2.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-events-backend-module-github@0.2.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-events-backend-module-gitlab@0.2.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-events-backend-test-utils@0.1.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-events-node@0.4.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## @backstage/plugin-home@0.8.3-next.1 + +### Patch Changes + +- 7248f3b: Added a new Quick Start Card to `plugin-home`, which can display basic info to get users the info they need to onboard to the Catalog. + + import { QuickStartCard } from '@backstage/plugin-home'; + + } + cardDescription="Backstage system model will help you create new entities" + video={ + + } + downloadImage={ + + } + /> + + See the [storybook examples](https://backstage.io/storybook/?path=/story/plugins-home-components-quickstartcard--default) + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-home-react@0.1.21-next.1 + +## @backstage/plugin-home-react@0.1.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-kubernetes@0.12.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-kubernetes-react@0.5.2-next.1 + +## @backstage/plugin-kubernetes-backend@0.19.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/plugin-kubernetes-node@0.2.1-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration-aws-node@0.1.13 + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-kubernetes-cluster@0.0.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-kubernetes-common@0.9.0 + - @backstage/plugin-kubernetes-react@0.5.2-next.1 + +## @backstage/plugin-kubernetes-node@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.0 + +## @backstage/plugin-kubernetes-react@0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.0 + +## @backstage/plugin-notifications@0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-notifications-common@0.0.6 + - @backstage/plugin-signals-react@0.0.7 + +## @backstage/plugin-notifications-backend@0.4.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-notifications-node@0.2.10-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-signals-node@0.1.15-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-events-node@0.4.6-next.1 + - @backstage/plugin-notifications-common@0.0.6 + +## @backstage/plugin-notifications-backend-module-email@0.3.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-notifications-node@0.2.10-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/types@1.2.0 + - @backstage/plugin-notifications-common@0.0.6 + +## @backstage/plugin-notifications-node@0.2.10-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-signals-node@0.1.15-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-notifications-common@0.0.6 + +## @backstage/plugin-org@0.6.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/plugin-catalog-common@1.1.1 + +## @backstage/plugin-org-react@0.1.33-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + +## @backstage/plugin-permission-backend@0.5.52-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-permission-node@0.8.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-common@0.8.2 + +## @backstage/plugin-proxy-backend@0.5.9-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder@1.27.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-scaffolder-react@1.14.2-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/integration@1.16.0-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + +## @backstage/plugin-scaffolder-backend@1.28.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.4-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.4-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.5-next.1 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.4-next.1 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.4-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.1 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.4-next.1 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.0 + - @backstage/plugin-events-node@0.4.6-next.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.5-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.4-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.4-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.0 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/plugin-notifications-node@0.2.10-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-notifications-common@0.0.6 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-scaffolder-node-test-utils@0.1.17-next.1 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-node@0.6.2-next.1 + +### Patch Changes + +- 1a23421: Make sure that isomorphic git push commands are not proxied. +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/backend-test-utils@1.2.0-next.1 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-react@1.14.2-next.1 + +### Patch Changes + +- c846d76: Updated dependency `flatted` to `3.3.2`. +- b21a5ae: Open links in the scaffolder entity and step descriptions in a new tab, to ensure consistency and improve user experience +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-scaffolder-common@1.5.8-next.0 + +## @backstage/plugin-search@1.4.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.4-next.1 + +## @backstage/plugin-search-backend-module-catalog@0.2.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.1 + +### Patch Changes + +- 991c9fe: Update the ElasticSearchSearchEngine translator to handle phrase searches. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-explore@0.2.6-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-pg@0.5.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-backend-module-techdocs@0.3.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-techdocs-node@1.12.15-next.1 + +## @backstage/plugin-search-backend-node@1.3.6-next.1 + +### Patch Changes + +- 5ae8a2c: Removed unnecessary dependency on `@backstage/backend-defaults`. +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-search-react@1.8.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.15 + +## @backstage/plugin-signals@0.0.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-signals-react@0.0.7 + +## @backstage/plugin-signals-backend@0.2.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-signals-node@0.1.15-next.1 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-signals-node@0.1.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/config@1.3.0 + - @backstage/types@1.2.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## @backstage/plugin-techdocs@1.11.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/integration@1.16.0-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-auth-react@0.1.10-next.1 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.4-next.1 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.12-next.1 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.43-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/plugin-catalog@1.25.2-next.1 + - @backstage/plugin-techdocs@1.11.3-next.1 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/test-utils@1.7.3-next.0 + - @backstage/plugin-search-react@1.8.4-next.1 + - @backstage/plugin-techdocs-react@1.2.12-next.1 + +## @backstage/plugin-techdocs-backend@1.11.4-next.1 + +### Patch Changes + +- 5c9cc05: Use native fetch instead of node-fetch +- Updated dependencies + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-node@1.12.15-next.1 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration@1.16.0-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.1 + +## @backstage/plugin-techdocs-node@1.12.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/version-bridge@1.0.10 + +## @backstage/plugin-user-settings@0.8.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/errors@1.2.5 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-signals-react@0.0.7 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.28-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-signals-node@0.1.15-next.1 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.104-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home@0.8.3-next.1 + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/plugin-scaffolder-react@1.14.2-next.1 + - @backstage/cli@0.29.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/plugin-api-docs@0.12.2-next.1 + - @backstage/plugin-catalog@1.25.2-next.1 + - @backstage/plugin-catalog-graph@0.4.14-next.1 + - @backstage/plugin-catalog-import@0.12.8-next.1 + - @backstage/plugin-kubernetes@0.12.2-next.1 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.1 + - @backstage/plugin-org@0.6.34-next.1 + - @backstage/plugin-scaffolder@1.27.2-next.1 + - @backstage/plugin-search@1.4.21-next.1 + - @backstage/plugin-techdocs@1.11.3-next.1 + - @backstage/plugin-user-settings@0.8.17-next.1 + - @backstage/app-defaults@1.5.15-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.3-next.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-auth-react@0.1.10-next.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.1 + - @backstage/plugin-devtools@0.1.22-next.1 + - @backstage/plugin-notifications@0.4.2-next.1 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.4-next.1 + - @backstage/plugin-signals@0.0.14-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.1 + - @backstage/plugin-techdocs-react@1.2.12-next.1 + +## example-app-next@0.0.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home@0.8.3-next.1 + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/plugin-scaffolder-react@1.14.2-next.1 + - @backstage/cli@0.29.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/plugin-api-docs@0.12.2-next.1 + - @backstage/plugin-catalog@1.25.2-next.1 + - @backstage/plugin-catalog-graph@0.4.14-next.1 + - @backstage/plugin-catalog-import@0.12.8-next.1 + - @backstage/plugin-kubernetes@0.12.2-next.1 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.1 + - @backstage/plugin-org@0.6.34-next.1 + - @backstage/plugin-scaffolder@1.27.2-next.1 + - @backstage/plugin-search@1.4.21-next.1 + - @backstage/plugin-techdocs@1.11.3-next.1 + - @backstage/plugin-user-settings@0.8.17-next.1 + - @backstage/app-defaults@1.5.15-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.3-next.1 + - @backstage/frontend-defaults@0.1.4-next.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-app@0.1.4-next.1 + - @backstage/plugin-app-visualizer@0.1.14-next.1 + - @backstage/plugin-auth-react@0.1.10-next.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.1 + - @backstage/plugin-notifications@0.4.2-next.1 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.4-next.1 + - @backstage/plugin-signals@0.0.14-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.1 + - @backstage/plugin-techdocs-react@1.2.12-next.1 + +## app-next-example-plugin@0.0.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + +## example-backend@0.0.33-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.1-next.1 + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-events-backend@0.4.0-next.1 + - @backstage/plugin-search-backend@1.8.0-next.1 + - @backstage/plugin-devtools-backend@0.5.0-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.1 + - @backstage/plugin-notifications-backend@0.4.4-next.1 + - @backstage/plugin-permission-backend@0.5.52-next.1 + - @backstage/plugin-techdocs-backend@1.11.4-next.1 + - @backstage/plugin-signals-backend@0.2.4-next.1 + - @backstage/plugin-proxy-backend@0.5.9-next.1 + - @backstage/plugin-app-backend@0.4.3-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.1 + - @backstage/plugin-kubernetes-backend@0.19.1-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/plugin-scaffolder-backend@1.28.0-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.1 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.5-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-permission-common@0.8.2 + +## example-backend-legacy@0.2.105-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.1 + - @backstage/plugin-auth-backend@0.24.1-next.1 + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-events-backend@0.4.0-next.1 + - @backstage/plugin-search-backend@1.8.0-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.1 + - @backstage/plugin-permission-backend@0.5.52-next.1 + - @backstage/plugin-techdocs-backend@1.11.4-next.1 + - @backstage/plugin-signals-backend@0.2.4-next.1 + - @backstage/plugin-proxy-backend@0.5.9-next.1 + - @backstage/plugin-app-backend@0.4.3-next.1 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.1 + - @backstage/plugin-kubernetes-backend@0.19.1-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/plugin-scaffolder-backend@1.28.0-next.1 + - @backstage/plugin-signals-node@0.1.15-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.1 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.4-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-events-node@0.4.6-next.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-backend-module-pg@0.5.39-next.1 + +## e2e-test@0.2.23-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.23-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/errors@1.2.5 + +## @internal/frontend@0.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @internal/scaffolder@0.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.14.2-next.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + +## techdocs-cli-embedded-app@0.2.103-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/plugin-catalog@1.25.2-next.1 + - @backstage/plugin-techdocs@1.11.3-next.1 + - @backstage/app-defaults@1.5.15-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/test-utils@1.7.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.1 + +## yarn-plugin-backstage@0.0.4-next.1 + +### Patch Changes + +- 48cc7c5: Use yarn's built-in http utilities for fetching release manifests +- Updated dependencies + - @backstage/release-manifests@0.0.12-next.1 + - @backstage/cli-common@0.1.15 + +## @internal/plugin-todo-list@1.0.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-plugin-api@1.10.1 + +## @internal/plugin-todo-list-backend@1.0.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/errors@1.2.5 diff --git a/docs/releases/v1.34.0-next.2-changelog.md b/docs/releases/v1.34.0-next.2-changelog.md new file mode 100644 index 0000000000..7be3b11c59 --- /dev/null +++ b/docs/releases/v1.34.0-next.2-changelog.md @@ -0,0 +1,2268 @@ +# Release v1.34.0-next.2 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.34.0-next.2](https://backstage.github.io/upgrade-helper/?to=1.34.0-next.2) + +## @backstage/backend-app-api@1.1.0-next.2 + +### Minor Changes + +- ebf083d: Service factories added by feature loaders now have lower priority and will be ignored if a factory for the same service is added directly by `backend.add(serviceFactory)`. + +### Patch Changes + +- 0e9c9fa: As soon as a backend termination signal is received, call before shutting down root lifecycle hooks. +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/backend-defaults@0.6.0-next.2 + +### Minor Changes + +- fd5d337: Added a new `backend.health.headers` configuration that can be used to set additional headers to include in health check responses. + + **BREAKING CONSUMERS**: As part of this change the `createHealthRouter` function exported from `@backstage/backend-defaults/rootHttpRouter` now requires the root config service to be passed through the `config` option. + +- 3f34ea9: Throttles Bitbucket Server API calls + +### Patch Changes + +- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`. +- 57e0b11: The user and plugin token verification in the default `AuthService` implementation will no longer forward verification errors to the caller, and instead log them as warnings. +- 57e0b11: The default `authServiceFactory` now correctly depends on the plugin scoped `Logger` services rather than the root scoped one. +- 0e9c9fa: Implements the `DefaultRootLifecycleService.addBeforeShutdownHook` method, and updates `DefaultRootHttpRouterService` and `DefaultRootHealthService` to listen to that event to stop accepting traffic and close service connections. +- d0cbd82: Remove use of the `stoppable` library on the `DefaultRootHttpRouterService` as Node's native http server [close](https://nodejs.org/api/http.html#serverclosecallback) method already drains requests. + Also, we pass a new `lifecycleMiddleware` to the `rootHttpRouterServiceFactory` configure function that must be called manually if you don't call `applyDefaults`. +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/backend-app-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/cli-node@0.2.11-next.1 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/integration-aws-node@0.1.14-next.0 + - @backstage/types@1.2.0 + +## @backstage/backend-openapi-utils@0.4.0-next.2 + +### Minor Changes + +- afcebea: Fixed a Typescript error when trying to use the new OpenAPI server-side generated code. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-catalog@1.26.0-next.2 + +### Minor Changes + +- 25beb82: Adds an optional columns attribute to HasSubdomainsCardProps and changes its default columns +- 39f1abc: Consistent title behaviour across CatalogTable, CursorPaginatedCatalogTable, and OffsetPaginatedCatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.1 + - @backstage/plugin-search-common@1.2.16-next.0 + - @backstage/plugin-search-react@1.8.4-next.2 + +## @backstage/plugin-catalog-backend@1.29.0-next.2 + +### Minor Changes + +- c1307b4: Implement `/entities` in terms of `queryEntities` to not run into memory and performance problems on large catalogs + +### Patch Changes + +- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`. +- 8013c9c: Perform the by-query count inlined with the main query +- feba9ee: Use a join based strategy for filtering, when having small page sizes +- 1fdb48e: Use a faster count method on pg when computing some metrics +- 0c33465: Implement `/entities/by-name/:kind/:namespace/:name` using `getEntitiesByRefs` +- d93390d: When parsing filters, do not make redundant `anyOf` and `allOf` nodes when there's only a single entry within them +- 24ecea8: Avoid extra ordering in by-query when the user doesn't ask for it +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/backend-openapi-utils@0.4.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.3.0-next.2 + +### Minor Changes + +- 3f34ea9: Throttles Bitbucket Server API calls + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.6.0-next.2 + +### Minor Changes + +- 99dce5c: Implemented discovery for top-level groups defined in config.group or if undefined global top-level group in Gitlab + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-notifications@0.5.0-next.2 + +### Minor Changes + +- fc15b77: Switched to using the new `/notifications` endpoints. Be sure to update the `notifications` plugin backend before deploying this frontend plugin change. + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-notifications-common@0.0.7-next.0 + - @backstage/plugin-signals-react@0.0.8-next.0 + +## @backstage/plugin-notifications-backend@0.5.0-next.2 + +### Minor Changes + +- fc15b77: **BREAKING**: Removed redundant `/health` endpoint, switch to using [the built-in endpoint instead](https://backstage.io/docs/backend-system/core-services/root-health). + +### Patch Changes + +- fc15b77: Deprecated root '/' endpoints, moving them under `/notifications` instead. +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/plugin-notifications-node@0.2.10-next.2 + - @backstage/plugin-signals-node@0.1.15-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-notifications-common@0.0.7-next.0 + +## @backstage/app-defaults@1.5.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + +## @backstage/backend-dynamic-feature-service@0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/backend-app-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-events-backend@0.4.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/plugin-app-node@0.1.28-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/cli-node@0.2.11-next.1 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/backend-plugin-api@1.1.0-next.2 + +### Patch Changes + +- 0e9c9fa: The `RootLifecycleService` now has a new `addBeforeShutdownHook` method, and hooks added through this method will run immediately when a termination event is received. + + The backend will not proceed with the shutdown and run the `Shutdown` hooks until all `BeforeShutdown` hooks have completed. + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/backend-test-utils@1.2.0-next.2 + +### Patch Changes + +- 0e9c9fa: Mock the new `RootLifecycleService.addBeforeShutdownHook` method. +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/backend-app-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/catalog-client@1.9.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-model@1.7.2-next.0 + +## @backstage/catalog-model@1.7.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/types@1.2.0 + +## @backstage/cli@0.29.3-next.2 + +### Patch Changes + +- 62a9062: Updated dependency `@module-federation/enhanced` to `^0.8.0`. +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/cli-node@0.2.11-next.1 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/eslint-plugin@0.1.10 + - @backstage/integration@1.16.0-next.1 + - @backstage/release-manifests@0.0.12-next.1 + - @backstage/types@1.2.0 + +## @backstage/cli-node@0.2.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/types@1.2.0 + +## @backstage/config@1.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/types@1.2.0 + +## @backstage/config-loader@1.9.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/core-app-api@1.15.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.1-next.0 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-compat-api@0.3.4-next.2 + +### Patch Changes + +- 1f30730: Updated dependency `@oriflame/backstage-plugin-score-card` to `^0.9.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-components@0.16.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/core-plugin-api@1.10.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/create-app@0.5.23-next.2 + +### Patch Changes + +- e913fdf: Add github backend module to create-app and improve error messages +- Updated dependencies + - @backstage/cli-common@0.1.15 + +## @backstage/dev-utils@1.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/app-defaults@1.5.15-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/theme@0.6.3-next.0 + +## @backstage/errors@1.2.6-next.0 + +### Patch Changes + +- 1d4b5b9: Trim `error.cause.stack` in addition to `error.stack` when trimming stack traces from serialized errors. +- Updated dependencies + - @backstage/types@1.2.0 + +## @backstage/frontend-app-api@0.10.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-defaults@0.1.4-next.2 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-defaults@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/frontend-app-api@0.10.3-next.2 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/plugin-app@0.1.4-next.2 + +## @backstage/frontend-plugin-api@0.9.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/frontend-test-utils@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.1-next.0 + - @backstage/frontend-app-api@0.10.3-next.2 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/test-utils@1.7.3-next.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-app@0.1.4-next.2 + +## @backstage/integration@1.16.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/config@1.3.1-next.0 + +## @backstage/integration-aws-node@0.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/config@1.3.1-next.0 + +## @backstage/integration-react@1.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.1-next.0 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/repo-tools@0.12.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/cli-node@0.2.11-next.1 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/cli-common@0.1.15 + +## @techdocs/cli@1.8.24-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/plugin-techdocs-node@1.12.15-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + +## @backstage/test-utils@1.7.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.1-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + +## @backstage/plugin-api-docs@0.12.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.26.0-next.2 + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + +## @backstage/plugin-app@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + +## @backstage/plugin-app-backend@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-app-node@0.1.28-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-app-node@0.1.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/config-loader@1.9.3-next.1 + +## @backstage/plugin-app-visualizer@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + +## @backstage/plugin-auth-backend@0.24.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.3-next.2 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.3-next.2 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.3-next.2 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.3-next.2 + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.3-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.2 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.3-next.2 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.3-next.2 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.3-next.2 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.3-next.2 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.3-next.2 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.3-next.2 + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.1-next.2 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.3-next.2 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.3-next.2 + - @backstage/plugin-auth-backend-module-google-provider@0.2.3-next.2 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.3-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-backend@0.24.1-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/catalog-model@1.7.2-next.0 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/config@1.3.1-next.0 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/types@1.2.0 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/catalog-model@1.7.2-next.0 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-backend@0.24.1-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/config@1.3.1-next.0 + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/catalog-model@1.7.2-next.0 + +## @backstage/plugin-auth-node@0.5.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-auth-react@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + +## @backstage/plugin-bitbucket-cloud-common@0.2.26-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-catalog-backend-module-aws@0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/integration-aws-node@0.1.14-next.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-kubernetes-common@0.9.1-next.0 + +## @backstage/plugin-catalog-backend-module-azure@0.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/backend-openapi-utils@0.4.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.1 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-kubernetes-common@0.9.1-next.0 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-catalog-backend-module-github@0.7.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-backend-module-github@0.7.8-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/config@1.3.1-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-backend-module-gitlab@0.6.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.1-next.2 + +### Patch Changes + +- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`. +- d42ecb0: Remove backend-common package from incremental-ingestion plugin and update related code +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.11.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-catalog-backend-module-logs@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.1 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.6-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-catalog-common@1.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-catalog-graph@0.4.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/types@1.2.0 + +## @backstage/plugin-catalog-import@0.12.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/integration@1.16.0-next.1 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-catalog-node@1.15.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-catalog-react@1.14.3-next.2 + +### Patch Changes + +- 95092a6: Fixed an issue where `` would re-render its children on page load for smaller screens, potentially leading to unnecessary additional backend requests. +- 4a43398: Fixed an issue where the `EntityOwnerPicker` component failed to load when the `mode` prop was set to `owners-only`. In this mode, the `EntityOwnerPicker` does not load details about the owners, such as `displayName` or `title`. To display these details, use `mode=all` instead. +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/frontend-test-utils@0.2.4-next.2 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + +## @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + +## @backstage/plugin-catalog-unprocessed-entities-common@0.0.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-config-schema@0.1.63-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-devtools@0.1.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/plugin-devtools-common@0.1.14-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + +## @backstage/plugin-devtools-backend@0.5.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-devtools-common@0.1.14-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-devtools-common@0.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-events-backend@0.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/backend-openapi-utils@0.4.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-events-backend-module-aws-sqs@0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-events-backend-module-azure@0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + +## @backstage/plugin-events-backend-module-gerrit@0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + +## @backstage/plugin-events-backend-module-github@0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/config@1.3.1-next.0 + +## @backstage/plugin-events-backend-module-gitlab@0.2.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/config@1.3.1-next.0 + +## @backstage/plugin-events-backend-test-utils@0.1.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.6-next.2 + +## @backstage/plugin-events-node@0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-home@0.8.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-home-react@0.1.21-next.2 + +## @backstage/plugin-home-react@0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + +## @backstage/plugin-kubernetes@0.12.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/plugin-kubernetes-common@0.9.1-next.0 + - @backstage/plugin-kubernetes-react@0.5.2-next.2 + +## @backstage/plugin-kubernetes-backend@0.19.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-kubernetes-node@0.2.1-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration-aws-node@0.1.14-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.1-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-kubernetes-cluster@0.0.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/plugin-kubernetes-common@0.9.1-next.0 + - @backstage/plugin-kubernetes-react@0.5.2-next.2 + +## @backstage/plugin-kubernetes-common@0.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-kubernetes-node@0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.1-next.0 + +## @backstage/plugin-kubernetes-react@0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-kubernetes-common@0.9.1-next.0 + +## @backstage/plugin-notifications-backend-module-email@0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-notifications-node@0.2.10-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration-aws-node@0.1.14-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-notifications-common@0.0.7-next.0 + +## @backstage/plugin-notifications-common@0.0.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.1-next.0 + +## @backstage/plugin-notifications-node@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-signals-node@0.1.15-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/plugin-notifications-common@0.0.7-next.0 + +## @backstage/plugin-org@0.6.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/plugin-catalog-common@1.1.2-next.0 + +## @backstage/plugin-org-react@0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + +## @backstage/plugin-permission-backend@0.5.52-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-permission-common@0.8.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.6-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-permission-node@0.8.6-next.2 + +### Patch Changes + +- b149e2a: The `createPermissionIntegrationRouter` function now detects and prevents the exposure of duplicate permissions. +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-permission-react@0.4.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.3.1-next.0 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-proxy-backend@0.5.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder@1.27.2-next.2 + +### Patch Changes + +- 184161f: Scaffolder field extensions registered with `FormFieldBlueprint` are now collected in the `useCustomFieldExtensions` hook, enabling them for use in the scaffolder. +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/plugin-scaffolder-react@1.14.2-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/integration@1.16.0-next.1 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.1 + +## @backstage/plugin-scaffolder-backend@1.28.0-next.2 + +### Patch Changes + +- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`. +- 6c326cf: The --no-node-snapshot check needs to be done against process.execArgv instead of process.argv +- e913fdf: Add github backend module to create-app and improve error messages +- 0851834: Resolved an issue where the `templateManagementPermission` was not being exposed through the `/permissions/metadata` endpoint. +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/plugin-scaffolder-backend-module-azure@0.2.4-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.5-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.4-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.4-next.2 + - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.4-next.2 + - @backstage/plugin-scaffolder-backend-module-gitea@0.2.4-next.2 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.2 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/types@1.2.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.1 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.1 + +## @backstage/plugin-scaffolder-backend-module-azure@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.4-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.4-next.2 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.1 + +## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-backend-module-gcp@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-gitea@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.2 + +### Patch Changes + +- e913fdf: Add github backend module to create-app and improve error messages +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + +## @backstage/plugin-scaffolder-backend-module-notifications@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-notifications-node@0.2.10-next.2 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/plugin-notifications-common@0.0.7-next.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.5.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/config@1.3.1-next.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/plugin-scaffolder-node-test-utils@0.1.17-next.2 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-common@1.5.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-scaffolder-node@0.6.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/types@1.2.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.1 + +## @backstage/plugin-scaffolder-node-test-utils@0.1.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-test-utils@1.2.0-next.2 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/types@1.2.0 + +## @backstage/plugin-scaffolder-react@1.14.2-next.2 + +### Patch Changes + +- 184161f: Scaffolder field extensions registered with `FormFieldBlueprint` are now collected in the `useCustomFieldExtensions` hook, enabling them for use in the scaffolder. +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-permission-react@0.4.29-next.0 + - @backstage/plugin-scaffolder-common@1.5.8-next.1 + +## @backstage/plugin-search@1.4.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.16-next.0 + - @backstage/plugin-search-react@1.8.4-next.2 + +## @backstage/plugin-search-backend@1.8.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/backend-openapi-utils@0.4.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-search-backend-module-catalog@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/integration-aws-node@0.1.14-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-search-backend-module-explore@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-search-backend-module-pg@0.5.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-techdocs-node@1.12.15-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-search-backend-node@1.3.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-search-common@1.2.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## @backstage/plugin-search-react@1.8.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + - @backstage/plugin-search-common@1.2.16-next.0 + +## @backstage/plugin-signals@0.0.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-signals-react@0.0.8-next.0 + +## @backstage/plugin-signals-backend@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/plugin-signals-node@0.1.15-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-signals-node@0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-signals-react@0.0.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/types@1.2.0 + +## @backstage/plugin-techdocs@1.11.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/integration@1.16.0-next.1 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-auth-react@0.1.10-next.2 + - @backstage/plugin-search-common@1.2.16-next.0 + - @backstage/plugin-search-react@1.8.4-next.2 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.12-next.2 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.26.0-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/test-utils@1.7.3-next.1 + - @backstage/plugin-search-react@1.8.4-next.2 + - @backstage/plugin-techdocs@1.11.3-next.2 + - @backstage/plugin-techdocs-react@1.2.12-next.2 + +## @backstage/plugin-techdocs-backend@1.11.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2 + - @backstage/plugin-techdocs-node@1.12.15-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/plugin-techdocs-react@1.2.12-next.2 + +## @backstage/plugin-techdocs-node@1.12.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/integration-aws-node@0.1.14-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + - @backstage/plugin-techdocs-common@0.1.0 + +## @backstage/plugin-techdocs-react@1.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/version-bridge@1.0.10 + +## @backstage/plugin-user-settings@0.8.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/theme@0.6.3-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-signals-react@0.0.8-next.0 + - @backstage/plugin-user-settings-common@0.0.1 + +## @backstage/plugin-user-settings-backend@0.2.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-signals-node@0.1.15-next.2 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-user-settings-common@0.0.1 + +## example-app@0.2.104-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.26.0-next.2 + - @backstage/plugin-notifications@0.5.0-next.2 + - @backstage/cli@0.29.3-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/plugin-scaffolder-react@1.14.2-next.2 + - @backstage/plugin-scaffolder@1.27.2-next.2 + - @backstage/plugin-api-docs@0.12.2-next.2 + - @backstage/plugin-catalog-graph@0.4.14-next.2 + - @backstage/plugin-catalog-import@0.12.8-next.2 + - @backstage/plugin-org@0.6.34-next.2 + - @backstage/plugin-user-settings@0.8.17-next.2 + - @backstage/app-defaults@1.5.15-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-app-api@0.10.3-next.2 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-auth-react@0.1.10-next.2 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.2 + - @backstage/plugin-devtools@0.1.22-next.2 + - @backstage/plugin-home@0.8.3-next.2 + - @backstage/plugin-kubernetes@0.12.2-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.2 + - @backstage/plugin-permission-react@0.4.29-next.0 + - @backstage/plugin-search@1.4.21-next.2 + - @backstage/plugin-search-common@1.2.16-next.0 + - @backstage/plugin-search-react@1.8.4-next.2 + - @backstage/plugin-signals@0.0.14-next.2 + - @backstage/plugin-techdocs@1.11.3-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.2 + - @backstage/plugin-techdocs-react@1.2.12-next.2 + +## example-app-next@0.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.26.0-next.2 + - @backstage/plugin-notifications@0.5.0-next.2 + - @backstage/cli@0.29.3-next.2 + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/plugin-scaffolder-react@1.14.2-next.2 + - @backstage/plugin-scaffolder@1.27.2-next.2 + - @backstage/plugin-api-docs@0.12.2-next.2 + - @backstage/plugin-catalog-graph@0.4.14-next.2 + - @backstage/plugin-catalog-import@0.12.8-next.2 + - @backstage/plugin-org@0.6.34-next.2 + - @backstage/plugin-user-settings@0.8.17-next.2 + - @backstage/app-defaults@1.5.15-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-app-api@0.10.3-next.2 + - @backstage/frontend-defaults@0.1.4-next.2 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-app@0.1.4-next.2 + - @backstage/plugin-app-visualizer@0.1.14-next.2 + - @backstage/plugin-auth-react@0.1.10-next.2 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.2 + - @backstage/plugin-home@0.8.3-next.2 + - @backstage/plugin-kubernetes@0.12.2-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.2 + - @backstage/plugin-permission-react@0.4.29-next.0 + - @backstage/plugin-search@1.4.21-next.2 + - @backstage/plugin-search-common@1.2.16-next.0 + - @backstage/plugin-search-react@1.8.4-next.2 + - @backstage/plugin-signals@0.0.14-next.2 + - @backstage/plugin-techdocs@1.11.3-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.2 + - @backstage/plugin-techdocs-react@1.2.12-next.2 + +## app-next-example-plugin@0.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/frontend-plugin-api@0.9.3-next.2 + +## example-backend@0.0.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.28.0-next.2 + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.2 + - @backstage/plugin-notifications-backend@0.5.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/plugin-app-backend@0.4.3-next.2 + - @backstage/plugin-auth-backend@0.24.1-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.2 + - @backstage/plugin-devtools-backend@0.5.0-next.2 + - @backstage/plugin-events-backend@0.4.0-next.2 + - @backstage/plugin-kubernetes-backend@0.19.1-next.2 + - @backstage/plugin-proxy-backend@0.5.9-next.2 + - @backstage/plugin-search-backend@1.8.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/plugin-signals-backend@0.2.4-next.2 + - @backstage/plugin-techdocs-backend@1.11.4-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.2 + - @backstage/plugin-permission-backend@0.5.52-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.2 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.5-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## example-backend-legacy@0.2.105-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.28.0-next.2 + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/plugin-app-backend@0.4.3-next.2 + - @backstage/plugin-auth-backend@0.24.1-next.2 + - @backstage/plugin-events-backend@0.4.0-next.2 + - @backstage/plugin-kubernetes-backend@0.19.1-next.2 + - @backstage/plugin-proxy-backend@0.5.9-next.2 + - @backstage/plugin-search-backend@1.8.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/plugin-signals-backend@0.2.4-next.2 + - @backstage/plugin-techdocs-backend@1.11.4-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/plugin-permission-backend@0.5.52-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4-next.2 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.4-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.39-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2 + - @backstage/plugin-signals-node@0.1.15-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## e2e-test@0.2.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.23-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/cli-common@0.1.15 + +## @internal/frontend@0.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/types@1.2.0 + - @backstage/version-bridge@1.0.10 + +## @internal/scaffolder@0.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.14.2-next.2 + - @backstage/frontend-plugin-api@0.9.3-next.2 + +## techdocs-cli-embedded-app@0.2.103-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.26.0-next.2 + - @backstage/cli@0.29.3-next.2 + - @backstage/app-defaults@1.5.15-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/test-utils@1.7.3-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-techdocs@1.11.3-next.2 + - @backstage/plugin-techdocs-react@1.2.12-next.2 + +## @internal/plugin-todo-list@1.0.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + +## @internal/plugin-todo-list-backend@1.0.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + +## @internal/plugin-todo-list-common@1.0.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.8.3-next.0 diff --git a/docs/tooling/cli/03-commands.md b/docs/tooling/cli/03-commands.md index 913a71f514..2da7e11ef4 100644 --- a/docs/tooling/cli/03-commands.md +++ b/docs/tooling/cli/03-commands.md @@ -15,8 +15,6 @@ Below is a cleaned up output of `yarn backstage-cli --help`: ```text new [options] Open up an interactive guide to creating new things in your app -test Run tests, forwarding args to Jest, defaulting to watch - mode [DEPRECATED] config:docs [options] Browse the configuration reference documentation config:print [options] Print the app configuration for the current package config:check [options] Validate that the given configuration loads and matches @@ -94,9 +92,52 @@ Usage: backstage-cli repo lint [options] Lint all packages in the project Options: - --format Lint report output format (default: "eslint-formatter-friendly") - --since Only lint packages that changed since the specified ref - --fix Attempt to automatically fix violations + --format Lint report output format (default: "eslint-formatter-friendly") + --since Only lint packages that changed since the specified ref + --successCache Enable success caching, which skips running tests for unchanged packages that were successful in the previous run + --successCacheDir Set the success cache location, (default: node_modules/.cache/backstage-cli) + --fix Attempt to automatically fix violations +``` + +## repo test + +Test packages in the project. It is recommended to have this command be used as the `test` script in the root `package.json` in your project: + +```json title="package.json in the root of your project" +{ + ... + "scripts": { + ... + "test": "backstage-cli repo test" + } +} +``` + +If run without any arguments it will default to running changed tests in watch mode, unless the `CI` environment flag is set, in which case it will run all tests without watching: + +```sh title="Run changes tests from repo root" +yarn test +``` + +If arguments are provided, they will be forwarded to Jest and used to filter test to execute. If full paths to tests are provided, only those tests will be included, for example: + +```sh title="Run specific tests from repo root" +yarn test packages/app/src/App.test.tsx +``` + +If you want to avoid re-running tests that have not changed since the last successful run in CI, you can use the `--successCache` flag. By default this cache is stored in `node_modules/.cache/backstage-cli`, but you can choose a different directory with the `--successCacheDir `. + +```text +Usage: backstage-cli repo test [options] + +Run tests, forwarding args to Jest, defaulting to watch mode + +Options: + --since Only test packages that changed since the specified ref + --successCache Enable success caching, which skips running tests for unchanged packages that were successful in the previous run + --successCacheDir Set the success cache location, (default: node_modules/.cache/backstage-cli) + --jest-help Show help for Jest CLI options, which are passed through + -h, --help display help for command ``` ## package start @@ -146,8 +187,9 @@ Usage: backstage-cli package lint [options] Lint a package Options: - --format Lint report output format (default: "eslint-formatter-friendly") - --fix Attempt to automatically fix violations + --format Lint report output format (default: "eslint-formatter-friendly") + --fix Attempt to automatically fix violations + --max-warnings Fail if more than this number of warnings. -1 allows warnings. (default: 0) ``` ## package test diff --git a/docs/tooling/local-dev/linking-local-packages.md b/docs/tooling/local-dev/linking-local-packages.md index eb2a2cba37..9205195f64 100644 --- a/docs/tooling/local-dev/linking-local-packages.md +++ b/docs/tooling/local-dev/linking-local-packages.md @@ -18,89 +18,48 @@ together: For example, you might want to make modifications to `@backstage/core-plugin-api` and try them out in your company's instance of Backstage. -## Linking in Backstage NPM Packages +## External workspace linking -To link in external packages, add them to your root `package.json` and `lerna.json` -`"workspace"` paths. These can be either relative or absolute paths with or without -globs. +:::info +Workspace linking is an experimental feature and may not work in all cases. +::: -For example: +The `backstage-cli package start` command that is used for local development of all packages supports a `--link` flag that can be used to link a single external workspace to the current workspace. It hooks into the module resolution and will override all imports of packages in the linked workspace to be imported from there instead. The only exception are the `react` and `react-dom` packages, which will always be resolved from the target package. -```json title="/lerna.json" -... -"packages": [ - "packages/*", - "plugins/*", - "../backstage/packages/core-plugin-api", // New path added to work on @backstage/core-plugin-api -], -... -``` +When linking an external workspace, make sure that dependencies are installed and up to date in both workspaces, and that the versions of `react` and `react-dom` are the same in both workspaces. -```json title="/package.json" -... -"workspaces": { - "packages": [ - "packages/*", - "plugins/*", - "../backstage/packages/core-plugin-api", // New path added to work on @backstage/core-plugin-api - ], -} -... -``` - -Now reinstall all packages from the root to make yarn set up symlinks from your application to the core Backstage clone: +If you're within the `packages/app` folder inside your `my-backstage-application` workspace in the above example, you can link the `backstage` workspace using the following command: ```bash -yarn install +yarn start --link ../../../backstage ``` -## Making Backstage Changes +The path provided to the `--link` option can be a relative or absolute path, and should point to the root of the external workspace. -With this in place you can now modify the `@backstage/core-plugin-api` package -within the main repo, and have those changes be reflected and tested in your -app. Simply run your app using `yarn dev` (or `yarn start` for just frontend) as -normal. +With the `start` command up and running and serving the development version of your frontend app in the browser, you can now make changes to both workspaces and see the changes reflected in the browser. + +You can also link backend packages using the exact same process, simply start your backend package with the same `--link ` option. ## Common Problems -### Backend Issues +### React errors -For backend packages you need to make sure that linked packages are -not dependencies of any non-linked package. If you for example want to work on -`@backstage/backend-common`, you need to also link in other backend plugins and -packages that depend on `@backstage/backend-common`, or temporarily disable -those plugins in your backend. This is because the transformation of backend -module tree stops whenever a non-local package is encountered, and from that -point node will `require` packages directly for that entire module subtree. +If you are encountering errors related to React, it is likely that the versions of React in the two workspaces are different. Make sure that the versions of `react` and `react-dom` are the same in both workspaces, or at least that they are in sync between the package that you're serving the app from and the external workspace. -### Typescript Issues +## Generating temporary patches -Type checking can also have issues when linking in external packages, since the -linked in packages will use the types in the external project and dependency -version mismatches between the two projects may cause errors. To fix any of -those errors you need to sync versions of the dependencies in the two projects. -A simple way to do this can be to copy over `yarn.lock` from the external -project and run `yarn install`, although this is quite intrusive and can cause -other issues in existing projects, so use this method with care. It can often be -best to simply ignore the type errors, as app serving will work just fine -anyway. +!!!info +This feature is experimental and currently only supports Yarn workspaces. +!!! -Another issue with type checking is that the incremental type cache doesn't -invalidate correctly for the linked in packages, causing type checking to not -reflect changes made to types. You can work around this by either setting -`compilerOptions.incremental = false` in `tsconfig.json`, or by deleting the -types cache folder `dist-types` before running `yarn tsc`. +After making local changes to a package in an external workspace you might often want to merge and deploy these changes in your own project. You can use Yarn patches for this purpose, but it can be quite cumbersome to create these patches manually. To make this process easier, you can use `yarn backstage-repo-tools generate-patch` command from the `@backstage/repo-tools` package to generate a patch and resolution entries in the external workspace. -### Version Issues +For example, if you've made changes to the `@backstage/backend-app-api` package in a local clone of the main `backstage` repository, you can generate a patch for your internal project as follows: -While `yarn install` might not error, it does not mean that the linking worked properly. -You will know that linking worked properly when: +```bash title="Run in the cloned backstage repository" +yarn backstage-repo-tools generate-patch @backstage/backend-app-api --target ../our-developer-portal +``` -1. Your Backstage application root `/node_modules/@backstage/[some package]` is a symlink -2. Your Backstage application `/packages/app/node_modules` and `/packages/backend/node_modules` does - not contain the package you are attempting to link! +This will generate a patch file in your `our-developer-portal` workspace. The patch will be based on the most recently released version of the source package, with the additional changes on top. -If you see Yarn continuing to download the package you are trying to link from NPM, you might need to be -explicit in your `package.json` version so that it exactly matches what you have in the cloned Backstage -repository on your machine. For example, if you have cloned `/plugins/catalog` with version -`"version": "1.19.1-next.1"` you will need to be explicit in your application to point to `"1.19.1-next.1"`. +If you want to base the patch on a different version of the source package, you can specify the version using the `--base-version ` option, and if you want to only use the patch for a specific version query, you can specify that using the `--query ` option. diff --git a/docs/tutorials/migrate-to-mui5.md b/docs/tutorials/migrate-to-mui5.md index c65abbc680..a0f8a9017e 100644 --- a/docs/tutorials/migrate-to-mui5.md +++ b/docs/tutorials/migrate-to-mui5.md @@ -4,6 +4,12 @@ title: Migrating from Material UI v4 to v5 description: Additional resources for the Material UI v5 migration guide specifically for Backstage --- +:::info + +We are in the process of determining the path forward regarding a New Design System for Backstage, for the time being we recommend pausing any migrations to MUI v5 until this has been settled. More details can be found in ["RFC: New design system for Backstage"](https://github.com/backstage/backstage/issues/27726). + +::: + Backstage supports developing new plugins or components using Material UI v5. At the same time, large parts of the application as well as existing plugins will still be using Material UI v4. To support Material UI v4 and v5 at the same time, we have introduced a new concept called the `UnifiedTheme`. The goal of the `UnifiedTheme` is to allow gradual migration by running both versions in parallel, applying theme options similarly & supporting potential future versions of Material UI. By default, the `UnifiedThemeProvider` is already used. If you add a custom theme in your `createApp` function, you would need to replace the Material UI `ThemeProvider` with the `UnifiedThemeProvider`: diff --git a/docs/tutorials/setup-opentelemetry.md b/docs/tutorials/setup-opentelemetry.md index cba8ba7049..c7687f1ab9 100644 --- a/docs/tutorials/setup-opentelemetry.md +++ b/docs/tutorials/setup-opentelemetry.md @@ -66,6 +66,14 @@ You can now start your Backstage instance as usual, using `yarn dev`. ## Production Setup +In your `.dockerignore`, add this line: + +``` +!packages/backend/src/instrumentation.js +``` + +This ensures that Docker build will not ignore the instrumentation file if you are following the recommended `.dockerignore` setup. + In your `Dockerfile`, copy `instrumentation.js` file into the root of the working directory. ```Dockerfile diff --git a/microsite/blog/2023-05-06-backstage-deploy-alpha.mdx b/microsite/blog/2023-05-06-backstage-deploy-alpha.mdx index 1a783b026a..126bbb9e7d 100644 --- a/microsite/blog/2023-05-06-backstage-deploy-alpha.mdx +++ b/microsite/blog/2023-05-06-backstage-deploy-alpha.mdx @@ -40,7 +40,7 @@ Deploy CLI makes use of [Pulumi](https://www.pulumi.com/docs/) which is an infra You can find the step-by-step installation documentation for Pulumi under the [Deployment section](https://backstage.io/docs/deployment/backstage-deploy/aws-lightsail). -But we summarize the steps to deploy your POC here. You can invoke the the CLI you can use the following command: +But we summarize the steps to deploy your POC here. You can invoke the CLI you can use the following command: ```bash $ npx backstage-deploy aws --create-dockerfile diff --git a/microsite/blog/2024-12-09-kubecon-slc-24.mdx b/microsite/blog/2024-12-09-kubecon-slc-24.mdx new file mode 100644 index 0000000000..c3fa2f70a8 --- /dev/null +++ b/microsite/blog/2024-12-09-kubecon-slc-24.mdx @@ -0,0 +1,201 @@ +--- +# prettier-ignore +title: "Backstage in Salt Lake City: Highlights from BackstageCon and KubeCon + CloudNativeCon North America 2024" +author: André Wanlin, Spotify & Camila Loiola, Spotify +--- + +![Beaver in front of snowcapped mountains peeking over a banner that reads BackstageCon and KubeCon + CloudNativeCon North America 2024, Salt Lake City](assets/2024-12-09/backstagecon-kubecon-2024-salt-lake-city.png) + +**tl;dr:** Salt Lake City did not disappoint! Backstage continues to be at the forefront of many conversations being had at BackstageCon and across KubeCon + CloudNativeCon. If you weren't able to join us, all the [BackstageCon talks][yt] are available for replay on YouTube. Read on for the highlights — plus, photos of super cute pups — as a treat! 🐕 + +[yt]: https://www.youtube.com/playlist?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X + +{/* truncate */} + +## What everyone was talking about at BackstageCon🦫 + +![Speakers on stage at BackstageCon North America 2024](assets/2024-12-09/kc24slc-spotify-backstagecon.jpg) + +[BackstageCon](https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/backstagecon/) featured a day of talks tailored to the diverse Backstage community. Whether you were an evaluator, adopter, integrator, builder, or an innovator, there was something valuable for everyone. Here were the big themes from the day. + +### Evaluating Backstage ROI + +- Olivier (Avalia Systems) presented what makes digital portals [helpful to C-level executives][olivier]. + +- Himanshu (Harness) shared strategies for adopting Backstage in ways that drive [meaningful value for engineers][himanshu]. + +- Eric (Quantum Metric) explained [how startups can benefit][eric] from what big techies have been contributing to Backstage. + +- Tom (Spotify) shared how developer productivity furthers Spotify’s mission to [empower creators][tom] and what the future holds for Backstage. + +[olivier]: https://youtu.be/kb3F98fKvaQ?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[himanshu]: https://youtu.be/FACtDHQvNf0?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[eric]: https://youtu.be/9qPsuMSw_dM?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[tom]: https://youtu.be/AU9BwkRMmMY?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X + +### Sharing Backstage adoption journeys + +- A panel discussion — featuring practitioners from Adobe, American Airlines, JPMorgan Chase, Red Hat, and Roku — showcased [real-world adoption stories from large companies][panel], spanning various stages of Backstage usage. Hear how devs at American Airlines can use Scaffolder to get a new site provisioned and deployed on the .aa.com domain in 20 minutes. “I’ve done it in seven,” said Jay Cox, principal engineer. “It used to take a month.” + +- Lizzie (Booz Allen Hamilton) explored corporate barriers to Backstage adoption and lessons learned along the way, including how to navigate [cultural tensions][lizzie] and the importance of listening to your devs, in order to bring the latest advancements in developer experience to a government consulting company that’s going on “110 years young”. + +- Amber and Daniel (Liatrio) elaborated on why [automated governance][amber] belongs inside Backstage portals to facilitate centralized compliance — so your devs don't get held up from going to prod by unforeseen checks. + +[panel]: https://youtu.be/DAjhjS2Xg4Q?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[lizzie]: https://youtu.be/RTYVmMbkdNA?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[amber]: https://youtu.be/GaGbjMJCcRU?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X + +### Maintaining a Backstage instance + +- Djamaile and Mitch (Spotify) provided [actionable tips][djamaile] for managing Backstage instances, including how to keep them aligned with the latest open source features. + +- Ashna and Mesut (Booking.com) showed how to customize your instance to mirror your company's unique identity and how to leverage reusability for a [smoother user experience for your devs][ashna]. + +- Paul (Red Hat) presented a [platform engineer’s POV][paul] of what it means to maintain a Backstage instance. + +- Yishai (Linear B) spoke about how to approach software engineering intelligence (SEI) and developer productivity metrics inside Backstage, including [do’s and don’ts][yishai]. + +[djamaile]: https://youtu.be/dbLqwEVl52U?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[ashna]: https://youtu.be/QV40Yz2i3jQ?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[paul]: https://youtu.be/CtbfN--mJkE?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[yishai]: https://youtu.be/mxVW2AGoI3A?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X + +### Building with Backstage core features + +- Avantika and Emma (Spotify) walked us through the advantages of the new backend system, recommending [best practices for plugin development][tika] and showcasing why migrating to this updated version is an extensibility game changer. + +- Will and Ryan (Microsoft) shared how Software Catalog and Templates provide the model to [build visualizations][will] of your cloud native applications. + +[tika]: https://youtu.be/n7GUlLHN2tQ?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[will]: https://youtu.be/U2-Lo-yuvdc?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X + +### AI-powered Backstage plugins and modules + +Innovative use cases featuring AI integration took center stage. + +- Niall (Amazon Web Services) demonstrated how to [interact with plugin services][niall] using artificial intelligence prompts. + +- Ben (Red Hat) outlined [broader AI integrations][ben] to enhance Backstage, sparking exciting possibilities for the future. + +The sessions offered a wealth of knowledge and inspiration, underscoring the versatility and potential of Backstage for organizations at every level. The Backstage booth was hopping all day long as community members and cloud natives took advantage of being able to ask the experts questions and learn more about the project. + +[niall]: https://youtu.be/DCXzCrIDOAs?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X +[ben]: https://youtu.be/cl6E0A5R_nI?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X + +## Backstage at the big show: KubeCon⎈ + CloudNativeCon☁️ + +![A view of the crowd entering KubeCon as seen from the top of the convention center escalator](assets/2024-12-09/kc24slc-cncf-entrance.jpg) +📸 _[See more KubeCon photos from the CNCF’s Flickr album](https://www.flickr.com/photos/143247548@N03/albums/72177720321905538/) →_ + +My friends, what an intense conference! + +Over the course of three packed days, there were a bunch of activities, including talks, a kiosk, and a Contribfest, all centered around Backstage. + +### Maintainers take the stage + +![Backstage maintainers presenting in a ballroom](assets/2024-12-09/kc24slc-spotify-maintainers.jpg) + +This may be old hat for those who are regular KubeCon attendees, but it’s still pretty exciting to catch up on all the Backstage updates straight from the core maintainers. Spotify’s Ben Lambert and Patrik Oldsberg were in the spotlight in Ballroom C addressing an attentive crowd of Backstage adopters, users, and fans. + +Highlights of their maintainers talk include: + +- **Project updates:** Yarn 4 is now the default, the new built-in event bus has arrived, and the (New) Backend System is now 1.0! +- **Security Audit:** Another security audit has been completed with the helpful support of the CNCF +- **Scaffolder updates:** Addition of Form Decorators and support for Retries! +- **New Frontend System:** Focus on the plugin builder experience! + +Watch their entire talk — “[How to Expand Your IDP: The New Building Blocks of Backstage](https://youtu.be/BzPCJMQH8tg?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X)” — for all the details. + +### Toyota and Akamai in the house + +![A packed ballroom with Backstage displayed on two large screens](assets/2024-12-09/kc24slc-cncf-toyota.jpg) +📸 [CNCF](https://www.flickr.com/photos/143247548@N03/albums/72177720321905538/) + +There were great talks from Backstage adopters during KubeCon, too. Toyota and Akamai packed the rooms with their Backstage knowledge. + +- “[Shifting Gears: Leveraging CNCF Tools to Streamline Operations at Toyota Connected][toyota]”: Benson and Rob talk about failures and successes adopting CNCF tools (including ArgoCD and Backstage) to unify operations, streamline workflows, and enhance cross-team collaboration. + +- “[From Chaos to Calm: Building a Unified and Scalable CI/CD Pipeline at Akamai][akamai]”: Tomer dives into development efficiency and how you can “conquer cloud-native deployments by adding the right tools, such as Argo Rollouts and Backstage”. + +[toyota]: https://youtu.be/4w_AC81_GZM?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X&t=856 +[akamai]: https://youtu.be/RFVB9CEEn1I?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X + +### And the award goes to… + +![Adobe accepts the CNCF Top End User Award on the Keynote stage at KubeCon + CloudNativeCon North America 2024](assets/2024-12-09/kc24slc-cncf-adobe.jpg) + +📸 [CNCF](https://www.flickr.com/photos/143247548@N03/albums/72177720321905538/) + +Adobe gave a shoutout to Backstage from the Keynote mainstage on Thursday morning when they (spoiler alert) [accepted the CNCF’s Top End User Award][keynote], thanking the cloud native community and all the projects that they use. + +But Adobe isn’t just a Backstage adopter, they are a model citizen — giving back to the community through their example, having “developed a reference architecture for its IDP, built using Argo, Backstage, Helm, and Kubernetes, which other organizations can use as a template for designing and implementing their systems”. + +As Taylor Dolezal, head of ecosystem at the CNCF, [says][announcement]: “Their commitment to nurturing technological excellence and developer experience exemplifies what we hope to see in the end user ecosystem. It’s not just about tool adoption or code contributions — it’s about synthesizing these learnings into assets that empower others in their cloud native journeys.” + +Way to go, Adobe! + +[keynote]: https://youtu.be/p7J0lAU3AWo +[announcement]: https://www.cncf.io/announcements/2024/11/14/cncf-presents-top-end-user-award-to-adobe/ + +### A bustling CNCF project pavilion + +![A volunteer wearing an “Ask me about Backstage” T-shirt talks to a visitor at the project kiosk](assets/2024-12-09/kc24slc-cncf-kiosk.jpg) + +📸 [CNCF](https://www.flickr.com/photos/143247548@N03/albums/72177720321905538/) + +The CNCF Projects Pavilion was buzzing with activity all week, and the Backstage kiosk was a hub of excitement. Attendees stopped by with a mix of curiosity and enthusiasm, sparking conversations that highlighted the dynamic nature of our community. + +Curious visitors asked, “What is Backstage all about?”, while adopters sought personalized advice on customizing Backstage for their specific company needs. Contributors dropped in to say, “Hey, you reviewed my pull request!” And professionals proudly shared their achievements as Backstage experts — in fact, now there’s a way to make that expertise official — by becoming a [Certified Backstage Associate (CBA)](https://training.linuxfoundation.org/blog/just-launched-certified-backstage-associate-cba/), a new certification that was just launched by the CNCF and The Linux Foundation. + +Developers eager to give back to the community came to learn how to start contributing, and some of the kindest Backstage fans simply stopped by to say, “Thank you”. Their gratitude and encouragement are a powerful reminder of why we do what we do. + +Every interaction in person made the day special, and we wrapped up with a deep sense of fulfillment and pride in how far Backstage has come. Here's to building an even brighter future together! + +## Contribfest! It’s All About Community👩‍💻 + +![Various developers and their laptops participating in the Backstage Contribfest](assets/2024-12-09/kc24slc-spotify-cncf-contribfest.gif) + +📸 Spotify, [CNCF](https://www.flickr.com/photos/143247548@N03/albums/72177720321905538/) + +On Thursday, the first-ever Backstage Contribfest session took place — hosted by Yi Cai and Paul Schultz from Red Hat, and André Wanlin, Patrik Oldsberg, and Ben Lambert from Spotify. + +Participants who hadn't yet used or contributed to Backstage eagerly joined the project's contributors community and were eager to help. Together with the group, experienced Backstage engineers stepped in to assist attendees — whether troubleshooting environment setup or explaining how specific framework and plugin features are implemented. It was a great example of a community coming together to support learning and contribution. + +The energy in the room, with 60 enthusiastic participants, was absolutely electric! It was amazing to see ideas bouncing around, impromptu collaboration happening at every corner, and a shared passion for advancing the Backstage project. + +Among the great contributions to come out of this event are: + +- [Add Pagination to Tech Docs Table](https://github.com/backstage/backstage/pull/27694) +- [Add Home Page Quick Start Card](https://github.com/backstage/backstage/pull/27705) +- [Truncate commit message to first newline](https://github.com/backstage/community-plugins/pull/2012) + +A heartfelt thank you to everyone who joined us — it’s your talent and collaborative spirit that truly define the Backstage community. This event was a powerful reminder that it’s the people behind the project who make Backstage what it is today 💚. + +And if you missed out on the fun, it's never too late to join the Backstage community. Just follow along with the [Contribfest slide deck](https://static.sched.com/hosted_files/kccncna2024/53/KubeCon-ContribFest-Backstage-NA-2024.pdf) to get started with contributing! + +## Bonus pups!🐕 + +Nothing improves developer experience like hanging out with some fluffy friends. So please enjoy these photos from KubeCon’s “[Pet A Pup](https://www.flickr.com/photos/143247548@N03/albums/72177720321905538/with/54155382123)” station. + +(All 📸 [CNCF](https://www.flickr.com/photos/143247548@N03/albums/72177720321905538/with/54155382123). Please note: the last pup is not a pup.) + +![A labrador retriever pup in the middle of three people calmly getting pets](assets/2024-12-09/kc24slc-cncf-bestpup1.jpg) +The best labrador-retriever pup graciously accepting pets from the cloud native community. + +![A fluffy white pup staring at the camera surrounded by attendees](assets/2024-12-09/kc24slc-cncf-bestpup2.jpg) +The best fluffy white pup surrounded by admirers. + +![A lanky racing pup getting pet on the face](assets/2024-12-09/kc24slc-cncf-bestpup3.jpg) +The best racing-style pup getting face scritches. + +![A yellow pup squinting while getting pets from an attendee in a yellow shirt](assets/2024-12-09/kc24slc-cncf-bestpup4.jpg) +The best yellow pup getting pets from his twinsie. + +![A fluffy cat getting pets.](assets/2024-12-09/kc24slc-cncf-bestpup5.jpg) +See? Not a pup. But did get pets. + +[You, too, can give these pups some love](https://www.therapyanimalsutah.org). + +## Cheerio! We’ll see you in London!💂 + +And that’s a wrap on Salt Lake City! [Join us in London](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/) in April for more community-building fun at BackstageCon and KubeCon + CloudNativeCon Europe 2025! diff --git a/microsite/blog/assets/2024-12-09/backstagecon-kubecon-2024-salt-lake-city.png b/microsite/blog/assets/2024-12-09/backstagecon-kubecon-2024-salt-lake-city.png new file mode 100644 index 0000000000..518d71fc36 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/backstagecon-kubecon-2024-salt-lake-city.png differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-adobe.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-adobe.jpg new file mode 100644 index 0000000000..c428da1c1b Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-adobe.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup1.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup1.jpg new file mode 100644 index 0000000000..919a16108d Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup1.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup2.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup2.jpg new file mode 100644 index 0000000000..b169eaa52c Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup2.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup3.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup3.jpg new file mode 100644 index 0000000000..a46e320a97 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup3.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup4.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup4.jpg new file mode 100644 index 0000000000..7fa4a405e0 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup4.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup5.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup5.jpg new file mode 100644 index 0000000000..8847adb161 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-bestpup5.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-entrance.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-entrance.jpg new file mode 100644 index 0000000000..5ec34ddf60 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-entrance.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-kiosk.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-kiosk.jpg new file mode 100644 index 0000000000..a25c55a6b3 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-kiosk.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-cncf-toyota.jpg b/microsite/blog/assets/2024-12-09/kc24slc-cncf-toyota.jpg new file mode 100644 index 0000000000..2727992735 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-cncf-toyota.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-spotify-backstagecon.jpg b/microsite/blog/assets/2024-12-09/kc24slc-spotify-backstagecon.jpg new file mode 100644 index 0000000000..579e12cad9 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-spotify-backstagecon.jpg differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-spotify-cncf-contribfest.gif b/microsite/blog/assets/2024-12-09/kc24slc-spotify-cncf-contribfest.gif new file mode 100644 index 0000000000..1a89c6586c Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-spotify-cncf-contribfest.gif differ diff --git a/microsite/blog/assets/2024-12-09/kc24slc-spotify-maintainers.jpg b/microsite/blog/assets/2024-12-09/kc24slc-spotify-maintainers.jpg new file mode 100644 index 0000000000..8a657886b0 Binary files /dev/null and b/microsite/blog/assets/2024-12-09/kc24slc-spotify-maintainers.jpg differ diff --git a/microsite/data/plugins/catalog-webhook.yaml b/microsite/data/plugins/catalog-webhook.yaml new file mode 100644 index 0000000000..5c72cdd605 --- /dev/null +++ b/microsite/data/plugins/catalog-webhook.yaml @@ -0,0 +1,10 @@ +--- +title: Catalog Webhook +author: Forged Apps +authorUrl: https://forgedapps.com +category: Catalog +description: Send catalog entity changes to a remote endpoint to keep an external system in sync with Backstage. +documentation: https://github.com/ForgedApps/backstage-catalog-webhook-plugin/blob/main/README.md +iconUrl: /img/forgedapps.jpg +npmPackageName: '@forgedapps/backstage-catalog-webhook-plugin' +addedDate: '2024-10-28' diff --git a/microsite/data/plugins/changelog.yaml b/microsite/data/plugins/changelog.yaml deleted file mode 100644 index a1ee12feea..0000000000 --- a/microsite/data/plugins/changelog.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Changelog viewer -author: RSC Labs -authorUrl: https://rsoftcon.com/ -category: Discovery -description: View changelogs for your components in Backstage. Built-in support of "Keep the changelog" and "Semver" formats. -documentation: https://github.com/RSC-Labs/backstage-changelog-plugin/blob/main/README.md -iconUrl: https://raw.githubusercontent.com/RSC-Labs/backstage-changelog-plugin/main/docs/plugin_icon.png -npmPackageName: '@rsc-labs/backstage-changelog-plugin' -tags: - - changelog -addedDate: '2023-10-22' diff --git a/microsite/data/plugins/daytona.yaml b/microsite/data/plugins/daytona.yaml new file mode 100644 index 0000000000..cf3baaaa92 --- /dev/null +++ b/microsite/data/plugins/daytona.yaml @@ -0,0 +1,14 @@ +--- +title: Daytona +author: Daytona +authorUrl: https://www.daytona.io/ +category: Development +description: Open Source Development Environment Manager +documentation: https://github.com/daytonaio/backstage-plugins/tree/main/plugins/daytona +iconUrl: /img/daytona.svg +npmPackageName: '@daytonaio/backstage-plugin-daytona' +tags: + - Development + - Tools + - Productivity +addedDate: '2024-11-02' diff --git a/microsite/data/plugins/dora-metrics.yaml b/microsite/data/plugins/dora-metrics.yaml new file mode 100644 index 0000000000..1831c7488f --- /dev/null +++ b/microsite/data/plugins/dora-metrics.yaml @@ -0,0 +1,10 @@ +--- +title: Liatrio DORA Metrics +author: Liatrio +authorUrl: https://github.com/liatrio +category: Observability +description: Provide a seamless way to display DORA Metrics in your developer portals. +documentation: https://github.com/liatrio/backstage-dora-plugin/tree/main +iconUrl: /img/liatrio-icon.png +npmPackageName: '@liatrio/backstage-dora-plugin' +addedDate: '2024-10-14' diff --git a/microsite/data/plugins/highlights.yaml b/microsite/data/plugins/highlights.yaml deleted file mode 100644 index 82d303f4ed..0000000000 --- a/microsite/data/plugins/highlights.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Highlights -author: RSC Labs -authorUrl: https://rsoftcon.com/ -category: Discovery -description: Highlight what is important for you and put it on front for the quick view and access. Built-in support of Git information from GitHub and GitLab. -documentation: https://github.com/RSC-Labs/backstage-highlights-plugin/blob/main/README.md -iconUrl: https://raw.githubusercontent.com/RSC-Labs/backstage-highlights-plugin/main/docs/highlighter.png -npmPackageName: '@rsc-labs/backstage-highlights-plugin' -tags: - - highlights -addedDate: '2023-11-20' diff --git a/microsite/data/plugins/mend.yaml b/microsite/data/plugins/mend.yaml new file mode 100644 index 0000000000..8c18c6b71f --- /dev/null +++ b/microsite/data/plugins/mend.yaml @@ -0,0 +1,12 @@ +--- +title: Mend.io +author: Mend.io +authorUrl: https://www.mend.io/ +category: Security +description: Proactive application risk management for developer and security teams directly in Backstage +documentation: https://github.com/backstage/community-plugins/tree/main/workspaces/mend/plugins/mend +iconUrl: https://avatars.githubusercontent.com/u/105765982?s=200&v=4 +npmPackageName: '@backstage-community/plugin-mend' +tags: + - security +addedDate: '2024-10-15' diff --git a/microsite/data/plugins/npm.yaml b/microsite/data/plugins/npm.yaml new file mode 100644 index 0000000000..67f3de976f --- /dev/null +++ b/microsite/data/plugins/npm.yaml @@ -0,0 +1,9 @@ +--- +title: NPM +author: Christoph Jerolimov +authorUrl: https://github.com/christoph-jerolimov +category: Artifacts +description: A plugin that shows meta info and latest versions from a npm registry. +documentation: https://github.com/backstage/community-plugins/blob/main/workspaces/npm/plugins/npm/README.md +npmPackageName: '@backstage-community/plugin-npm' +addedDate: '2024-11-29' diff --git a/microsite/data/plugins/synergy.yaml b/microsite/data/plugins/synergy.yaml new file mode 100644 index 0000000000..6c5e722322 --- /dev/null +++ b/microsite/data/plugins/synergy.yaml @@ -0,0 +1,10 @@ +--- +title: Synergy +author: Jitesh Yadav +authorUrl: https://github.com/jiteshy +category: Collaboration +description: An inner-source dashboard for managing in-house open-source projects, issues, and attracting maintainers to foster collaboration." +documentation: https://github.com/jiteshy/backstage-plugin-synergy/blob/main/README.md +iconUrl: /img/synergy-logo.png +npmPackageName: '@jiteshy/backstage-plugin-synergy' +addedDate: '2024-12-03' diff --git a/microsite/package.json b/microsite/package.json index fc3405c744..e3b0388903 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -17,7 +17,7 @@ "version": "docusaurus-version", "write-translations": "docusaurus-write-translations" }, - "prettier": "@spotify/prettier-config", + "prettier": "@backstage/cli/config/prettier", "dependencies": { "@docusaurus/core": "^3.1.1", "@docusaurus/plugin-client-redirects": "^3.1.1", @@ -38,7 +38,6 @@ "devDependencies": { "@docusaurus/module-type-aliases": "^3.1.1", "@docusaurus/tsconfig": "^3.1.1", - "@spotify/prettier-config": "^15.0.0", "@types/luxon": "^3.0.0", "@types/webpack-env": "^1.18.0", "js-yaml": "^4.1.0", diff --git a/microsite/sidebars.js b/microsite/sidebars.js index 871cec0a0f..2647143065 100644 --- a/microsite/sidebars.js +++ b/microsite/sidebars.js @@ -27,6 +27,16 @@ module.exports = { 'getting-started/homepage', ], }, + { + type: 'category', + label: 'Deploying Backstage', + items: [ + 'deployment/index', + 'deployment/scaling', + 'deployment/docker', + 'deployment/k8s', + ], + }, { type: 'category', label: 'Using Backstage', @@ -37,7 +47,6 @@ module.exports = { ], }, 'getting-started/keeping-backstage-updated', - 'getting-started/concepts', ], 'Core Features': [ { @@ -92,6 +101,7 @@ module.exports = { 'features/software-templates/migrating-to-rjsf-v5', 'features/software-templates/migrating-from-v1beta2-to-v1beta3', 'features/software-templates/dry-run-testing', + 'features/software-templates/experimental', ], }, { @@ -138,6 +148,14 @@ module.exports = { 'integrations/aws-s3/discovery', ], }, + { + type: 'category', + label: 'Azure Blob Storage', + items: [ + 'integrations/azure-blobStorage/locations', + 'integrations/azure-blobStorage/discovery', + ], + }, { type: 'category', label: 'Azure', @@ -341,20 +359,6 @@ module.exports = { }, 'tooling/package-metadata', ], - Deployment: [ - 'deployment/index', - 'deployment/scaling', - 'deployment/docker', - 'deployment/k8s', - 'deployment/heroku', - 'deployment/koyeb', - 'deployment/flightcontrol', - { - type: 'category', - label: 'Using Backstage Deploy (alpha)', - items: ['deployment/backstage-deploy/aws-lightsail'], - }, - ], 'New Backend System': [ 'backend-system/index', { diff --git a/microsite/src/pages/plugins/_pluginCard.tsx b/microsite/src/pages/plugins/_pluginCard.tsx index ba8e8069d2..ba7864f9aa 100644 --- a/microsite/src/pages/plugins/_pluginCard.tsx +++ b/microsite/src/pages/plugins/_pluginCard.tsx @@ -9,14 +9,14 @@ export interface IPluginData { category: string; description: string; documentation: string; - iconUrl: string; + iconUrl?: string; title: string; addedDate: string; isNew: boolean; order?: number; } -const defaultIconUrl = 'img/logo-gradient-on-dark.svg'; +const defaultIconUrl = '/img/logo-gradient-on-dark.svg'; export const PluginCard = ({ author, diff --git a/microsite/static/img/daytona.svg b/microsite/static/img/daytona.svg new file mode 100644 index 0000000000..1920b2f878 --- /dev/null +++ b/microsite/static/img/daytona.svg @@ -0,0 +1,62 @@ + + + + + + + + + + diff --git a/microsite/static/img/forgedapps.jpg b/microsite/static/img/forgedapps.jpg new file mode 100644 index 0000000000..67b088c629 Binary files /dev/null and b/microsite/static/img/forgedapps.jpg differ diff --git a/microsite/static/img/liatrio-icon.png b/microsite/static/img/liatrio-icon.png new file mode 100644 index 0000000000..775a5f6e6d Binary files /dev/null and b/microsite/static/img/liatrio-icon.png differ diff --git a/microsite/static/img/synergy-logo.png b/microsite/static/img/synergy-logo.png new file mode 100644 index 0000000000..42eb59c704 Binary files /dev/null and b/microsite/static/img/synergy-logo.png differ diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 510f30c094..6197b0463e 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2403,14 +2403,14 @@ __metadata: linkType: hard "@mdx-js/react@npm:^3.0.0": - version: 3.0.1 - resolution: "@mdx-js/react@npm:3.0.1" + version: 3.1.0 + resolution: "@mdx-js/react@npm:3.1.0" dependencies: "@types/mdx": ^2.0.0 peerDependencies: "@types/react": ">=16" react: ">=16" - checksum: 1063a597264f6a8840aa13274a99beef8983a88dd45b0c5b8e48e6216bc23d33e247da8e2d95d6e1874483f8b4e0903b166ce5046874aa7ffa2b1333057dcddf + checksum: c5a9c495f43f498ece24a768762a1743abe2be33d050d7eab731beb754e631700547f039198c6262c998d9a443906bd78811c3fa38bc2fb37659848161dac331 languageName: node linkType: hard @@ -2684,15 +2684,6 @@ __metadata: languageName: node linkType: hard -"@spotify/prettier-config@npm:^15.0.0": - version: 15.0.0 - resolution: "@spotify/prettier-config@npm:15.0.0" - peerDependencies: - prettier: 2.x - checksum: aa5ec5739427f9acdb9d62ae6c04f04a344898567239f7ee45c75c6205ebdffbc61747ea8de6e83baf0bc3785359967de4b7097a8723c4b4063ff57dc5cb6c44 - languageName: node - linkType: hard - "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0": version: 8.0.0 resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0" @@ -2849,92 +2840,92 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-darwin-arm64@npm:1.7.36" +"@swc/core-darwin-arm64@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-darwin-arm64@npm:1.9.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-darwin-x64@npm:1.7.36" +"@swc/core-darwin-x64@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-darwin-x64@npm:1.9.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.7.36" +"@swc/core-linux-arm-gnueabihf@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.9.3" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-linux-arm64-gnu@npm:1.7.36" +"@swc/core-linux-arm64-gnu@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-linux-arm64-gnu@npm:1.9.3" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-linux-arm64-musl@npm:1.7.36" +"@swc/core-linux-arm64-musl@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-linux-arm64-musl@npm:1.9.3" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-linux-x64-gnu@npm:1.7.36" +"@swc/core-linux-x64-gnu@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-linux-x64-gnu@npm:1.9.3" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-linux-x64-musl@npm:1.7.36" +"@swc/core-linux-x64-musl@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-linux-x64-musl@npm:1.9.3" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-win32-arm64-msvc@npm:1.7.36" +"@swc/core-win32-arm64-msvc@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-win32-arm64-msvc@npm:1.9.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-win32-ia32-msvc@npm:1.7.36" +"@swc/core-win32-ia32-msvc@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-win32-ia32-msvc@npm:1.9.3" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.7.36": - version: 1.7.36 - resolution: "@swc/core-win32-x64-msvc@npm:1.7.36" +"@swc/core-win32-x64-msvc@npm:1.9.3": + version: 1.9.3 + resolution: "@swc/core-win32-x64-msvc@npm:1.9.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.7.36 - resolution: "@swc/core@npm:1.7.36" + version: 1.9.3 + resolution: "@swc/core@npm:1.9.3" dependencies: - "@swc/core-darwin-arm64": 1.7.36 - "@swc/core-darwin-x64": 1.7.36 - "@swc/core-linux-arm-gnueabihf": 1.7.36 - "@swc/core-linux-arm64-gnu": 1.7.36 - "@swc/core-linux-arm64-musl": 1.7.36 - "@swc/core-linux-x64-gnu": 1.7.36 - "@swc/core-linux-x64-musl": 1.7.36 - "@swc/core-win32-arm64-msvc": 1.7.36 - "@swc/core-win32-ia32-msvc": 1.7.36 - "@swc/core-win32-x64-msvc": 1.7.36 + "@swc/core-darwin-arm64": 1.9.3 + "@swc/core-darwin-x64": 1.9.3 + "@swc/core-linux-arm-gnueabihf": 1.9.3 + "@swc/core-linux-arm64-gnu": 1.9.3 + "@swc/core-linux-arm64-musl": 1.9.3 + "@swc/core-linux-x64-gnu": 1.9.3 + "@swc/core-linux-x64-musl": 1.9.3 + "@swc/core-win32-arm64-msvc": 1.9.3 + "@swc/core-win32-ia32-msvc": 1.9.3 + "@swc/core-win32-x64-msvc": 1.9.3 "@swc/counter": ^0.1.3 - "@swc/types": ^0.1.13 + "@swc/types": ^0.1.17 peerDependencies: "@swc/helpers": "*" dependenciesMeta: @@ -2961,7 +2952,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 848531930b7d179b2bb9ba38e0d39dd127d66b16cc5c9ee9ec318fd50156ada18bc1368f2d02e0ba745b8f43eec0f695eaf89b6a9f8e52a239c5ab3e4b07ee27 + checksum: 4d83aee0b4d9c543f247d680796e5b9cb69997369dcd81642c2603e185312dfb1674328a7ceb1d352c21275155a71789f76dafe8853055d076b6241d5760bbed languageName: node linkType: hard @@ -2972,12 +2963,12 @@ __metadata: languageName: node linkType: hard -"@swc/types@npm:^0.1.13": - version: 0.1.13 - resolution: "@swc/types@npm:0.1.13" +"@swc/types@npm:^0.1.17": + version: 0.1.17 + resolution: "@swc/types@npm:0.1.17" dependencies: "@swc/counter": ^0.1.3 - checksum: 4d9ef0fba20e410bee38b20b60eeb284a1284c1cf6b5f84754b6f5e467e5e0621e2db67dc31e22c524a8d63f36d0a1d530126cd97752a85f140d91bf53553e01 + checksum: 6cc87b8ddfb540096abdf40bc29742df0b7d068f97c1ce6c32cd1b7073cde263ed7bc3bae1fba7bf0e1a0f5d63336e9fa092e05a54f6d9b3570df956d2acaff6 languageName: node linkType: hard @@ -4008,7 +3999,6 @@ __metadata: "@docusaurus/tsconfig": ^3.1.1 "@docusaurus/types": ^3.1.1 "@mdx-js/react": ^3.0.0 - "@spotify/prettier-config": ^15.0.0 "@swc/core": ^1.3.46 "@types/luxon": ^3.0.0 "@types/webpack-env": ^1.18.0 @@ -4831,13 +4821,13 @@ __metadata: linkType: hard "cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b languageName: node linkType: hard @@ -6776,8 +6766,8 @@ __metadata: linkType: hard "http-proxy-middleware@npm:^2.0.3": - version: 2.0.6 - resolution: "http-proxy-middleware@npm:2.0.6" + version: 2.0.7 + resolution: "http-proxy-middleware@npm:2.0.7" dependencies: "@types/http-proxy": ^1.17.8 http-proxy: ^1.18.1 @@ -6789,7 +6779,7 @@ __metadata: peerDependenciesMeta: "@types/express": optional: true - checksum: 2ee85bc878afa6cbf34491e972ece0f5be0a3e5c98a60850cf40d2a9a5356e1fc57aab6cff33c1fc37691b0121c3a42602d2b1956c52577e87a5b77b62ae1c3a + checksum: 18caa21145917aa1054740353916e8f03f5a3a93bede9106f1f44d84f7b174df17af1c72bf5fade5cc440c2058ee813f47cbb2bdd6ae6874af1cf33e0ac575f3 languageName: node linkType: hard @@ -6892,10 +6882,10 @@ __metadata: languageName: node linkType: hard -"immutable@npm:^4.0.0": - version: 4.2.2 - resolution: "immutable@npm:4.2.2" - checksum: 4d6437ea9388fe8ceca7eed5c768cf438cda7fa14d2831b87b90aa00cc60d536964d107c255b8a2e5dbf4f44a0e1295afbb9d1f0a65fb4f57b936e71df601862 +"immutable@npm:^5.0.2": + version: 5.0.2 + resolution: "immutable@npm:5.0.2" + checksum: 4adbd70580c78fafa7e367473e4f307f78f6768372ef464d45ba55f670b7f61d92c71461da571d80011544b61416d3dee0132736d9b592f33dcfa86e43bdd8f1 languageName: node linkType: hard @@ -10663,16 +10653,19 @@ __metadata: linkType: hard "sass@npm:^1.57.1": - version: 1.80.2 - resolution: "sass@npm:1.80.2" + version: 1.81.0 + resolution: "sass@npm:1.81.0" dependencies: "@parcel/watcher": ^2.4.1 chokidar: ^4.0.0 - immutable: ^4.0.0 + immutable: ^5.0.2 source-map-js: ">=0.6.2 <2.0.0" + dependenciesMeta: + "@parcel/watcher": + optional: true bin: sass: sass.js - checksum: a2dfb2ce4ff961470ff015c1a0b01b961665f33883cd83b9b27c18031d74c8ecbc8ae602a0a517439effbc8a284d95c5be5b20c14f435946a09d7a30e32292c4 + checksum: 93db5b342c3b0449af2b08123ed4c0793643bd3a30f78e4e0686a1aa991ad640e0d9bc8da09aa5d7ff313bbd317b3be9c827cca60fb33b07d9f4b14b001eccfe languageName: node linkType: hard diff --git a/mkdocs.yml b/mkdocs.yml index aa545111d4..748cdd8232 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -5,6 +5,9 @@ edit_uri: edit/master/docs plugins: - techdocs-core + - redirects: + redirect_maps: + 'index.md': 'overview/what-is-backstage.md' # For sidebar navigation on https://backstage.io/, see `microsite/sidebars.js` nav: @@ -27,12 +30,16 @@ nav: - Configuring App with plugins: 'getting-started/configure-app-with-plugins.md' - Customize the look-and-feel of your App: 'getting-started/app-custom-theme.md' - Customizing your Homepage: 'getting-started/homepage.md' + - Deployment: + - Deploying Backstage: 'deployment/index.md' + - Scaling: 'deployment/scaling.md' + - Docker: 'deployment/docker.md' + - Kubernetes: 'deployment/k8s.md' - Using Backstage: - Logging in: 'getting-started/logging-in.md' - Register a component: 'getting-started/register-a-component.md' - Create a component: 'getting-started/create-a-component.md' - Keeping Backstage Updated: 'getting-started/keeping-backstage-updated.md' - - Key Concepts: 'getting-started/concepts.md' - Core Features: - Software Catalog: - Overview: 'features/software-catalog/index.md' @@ -186,13 +193,6 @@ nav: - Debugging Backstage: 'tooling/local-dev/debugging.md' - Profiling Backstage: 'tooling/local-dev/profiling.md' - Package Metadata: 'tooling/package-metadata.md' - - Deployment: - - Deploying Backstage: 'deployment/index.md' - - Scaling: 'deployment/scaling.md' - - Docker: 'deployment/docker.md' - - Kubernetes: 'deployment/k8s.md' - - Heroku: 'deployment/heroku.md' - - Koyeb: 'deployment/koyeb.md' - Designing for Backstage: - Design: 'dls/design.md' - Component Design Guidelines: 'dls/component-design-guidelines.md' @@ -227,6 +227,7 @@ nav: - ADR011 - Plugin Package Structure: 'architecture-decisions/adr011-plugin-package-structure.md' - ADR012 - Use Luxon Locale: 'architecture-decisions/adr012-use-luxon-locale-and-date-presets.md' - ADR013 - Use node-fetch: 'architecture-decisions/adr013-use-node-fetch.md' + - ADR014 - Use fetch: 'architecture-decisions/adr014-use-fetch.md' - FAQ: - Overview: 'faq/index.md' - Product FAQ: 'faq/product.md' diff --git a/package.json b/package.json index c574e37ffa..9c4a772ebc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "root", - "version": "1.32.0", + "version": "1.34.0-next.2", "private": true, "repository": { "type": "git", @@ -49,9 +49,9 @@ "storybook": "yarn ./storybook run storybook", "techdocs-cli": "node scripts/techdocs-cli.js", "techdocs-cli:dev": "cross-env TECHDOCS_CLI_DEV_MODE=true node scripts/techdocs-cli.js", - "test": "backstage-cli repo test", - "test:all": "backstage-cli repo test --coverage", - "test:e2e": "playwright test", + "test": "NODE_OPTIONS=--no-node-snapshot backstage-cli repo test", + "test:all": "NODE_OPTIONS=--no-node-snapshot backstage-cli repo test --coverage", + "test:e2e": "NODE_OPTIONS=--no-node-snapshot playwright test", "tsc": "tsc", "tsc:full": "backstage-cli repo clean && tsc --skipLibCheck false --incremental false" }, @@ -83,7 +83,7 @@ "node ./scripts/verify-lockfile-duplicates --fix" ] }, - "prettier": "@spotify/prettier-config", + "prettier": "@backstage/cli/config/prettier", "resolutions": { "@changesets/assemble-release-plan@^6.0.0": "patch:@changesets/assemble-release-plan@npm%3A6.0.0#./.yarn/patches/@changesets-assemble-release-plan-npm-6.0.0-f7b3005037.patch", "@material-ui/pickers@^3.2.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch", @@ -108,9 +108,10 @@ "@octokit/rest": "^19.0.3", "@playwright/test": "^1.32.3", "@spotify/eslint-plugin": "^15.0.0", - "@spotify/prettier-config": "^15.0.0", "@techdocs/cli": "workspace:*", - "@types/node": "^18.17.8", + "@types/cacheable-request": "^8.3.6", + "@types/memjs": "^1.3.3", + "@types/node": "^20.16.0", "@types/webpack": "^5.28.0", "array-to-table": "^1.0.1", "command-exists": "^1.2.9", @@ -138,6 +139,6 @@ }, "packageManager": "yarn@3.8.1", "engines": { - "node": "18 || 20" + "node": "20 || 22" } } diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index c232018c20..660d8d4ebb 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,82 @@ # @backstage/app-defaults +## 1.5.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.29-next.0 + +## 1.5.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-permission-react@0.4.28 + +## 1.5.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-permission-react@0.4.28 + +## 1.5.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1 + - @backstage/core-components@0.16.0 + - @backstage/core-app-api@1.15.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/plugin-permission-react@0.4.28 + +## 1.5.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-permission-react@0.4.27 + +## 1.5.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.1-next.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/plugin-permission-react@0.4.27 + +## 1.5.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-permission-react@0.4.27 + ## 1.5.12 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 72c09d292d..1a0c1f0d74 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/app-defaults", - "version": "1.5.12", + "version": "1.5.15-next.2", "description": "Provides the default wiring of a Backstage App", "backstage": { "role": "web-library" diff --git a/packages/app-defaults/src/createApp.tsx b/packages/app-defaults/src/createApp.tsx index 6cac337d22..1d400aff7a 100644 --- a/packages/app-defaults/src/createApp.tsx +++ b/packages/app-defaults/src/createApp.tsx @@ -86,7 +86,7 @@ export type OptionalAppOptions = { /** * A set of components to override the default components with. * - * The override is applied for each icon individually. + * The override is applied for each app component individually. * * @public */ diff --git a/packages/app-next-example-plugin/CHANGELOG.md b/packages/app-next-example-plugin/CHANGELOG.md index 489b8b5944..0ff4bde808 100644 --- a/packages/app-next-example-plugin/CHANGELOG.md +++ b/packages/app-next-example-plugin/CHANGELOG.md @@ -1,5 +1,61 @@ # app-next-example-plugin +## 0.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.2 + - @backstage/frontend-plugin-api@0.9.3-next.2 + +## 0.0.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.2-next.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + +## 0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/core-components@0.16.2-next.0 + +## 0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0 + - @backstage/frontend-plugin-api@0.9.1 + +## 0.0.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.2 + - @backstage/frontend-plugin-api@0.9.1-next.2 + +## 0.0.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + +## 0.0.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.16.0-next.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + ## 0.0.16 ### Patch Changes diff --git a/packages/app-next-example-plugin/package.json b/packages/app-next-example-plugin/package.json index 854a380b9b..acbe3831c4 100644 --- a/packages/app-next-example-plugin/package.json +++ b/packages/app-next-example-plugin/package.json @@ -1,6 +1,6 @@ { "name": "app-next-example-plugin", - "version": "0.0.16", + "version": "0.0.18-next.2", "description": "Backstage internal example plugin", "backstage": { "role": "frontend-plugin", diff --git a/packages/app-next/CHANGELOG.md b/packages/app-next/CHANGELOG.md index 6d499212be..354ae53a70 100644 --- a/packages/app-next/CHANGELOG.md +++ b/packages/app-next/CHANGELOG.md @@ -1,5 +1,365 @@ # example-app-next +## 0.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.26.0-next.2 + - @backstage/plugin-notifications@0.5.0-next.2 + - @backstage/cli@0.29.3-next.2 + - @backstage/core-compat-api@0.3.4-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/plugin-scaffolder-react@1.14.2-next.2 + - @backstage/plugin-scaffolder@1.27.2-next.2 + - @backstage/plugin-api-docs@0.12.2-next.2 + - @backstage/plugin-catalog-graph@0.4.14-next.2 + - @backstage/plugin-catalog-import@0.12.8-next.2 + - @backstage/plugin-org@0.6.34-next.2 + - @backstage/plugin-user-settings@0.8.17-next.2 + - @backstage/app-defaults@1.5.15-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-app-api@0.10.3-next.2 + - @backstage/frontend-defaults@0.1.4-next.2 + - @backstage/frontend-plugin-api@0.9.3-next.2 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-app@0.1.4-next.2 + - @backstage/plugin-app-visualizer@0.1.14-next.2 + - @backstage/plugin-auth-react@0.1.10-next.2 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.2 + - @backstage/plugin-home@0.8.3-next.2 + - @backstage/plugin-kubernetes@0.12.2-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.2 + - @backstage/plugin-permission-react@0.4.29-next.0 + - @backstage/plugin-search@1.4.21-next.2 + - @backstage/plugin-search-common@1.2.16-next.0 + - @backstage/plugin-search-react@1.8.4-next.2 + - @backstage/plugin-signals@0.0.14-next.2 + - @backstage/plugin-techdocs@1.11.3-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.2 + - @backstage/plugin-techdocs-react@1.2.12-next.2 + +## 0.0.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home@0.8.3-next.1 + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/plugin-scaffolder-react@1.14.2-next.1 + - @backstage/cli@0.29.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/plugin-api-docs@0.12.2-next.1 + - @backstage/plugin-catalog@1.25.2-next.1 + - @backstage/plugin-catalog-graph@0.4.14-next.1 + - @backstage/plugin-catalog-import@0.12.8-next.1 + - @backstage/plugin-kubernetes@0.12.2-next.1 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.1 + - @backstage/plugin-org@0.6.34-next.1 + - @backstage/plugin-scaffolder@1.27.2-next.1 + - @backstage/plugin-search@1.4.21-next.1 + - @backstage/plugin-techdocs@1.11.3-next.1 + - @backstage/plugin-user-settings@0.8.17-next.1 + - @backstage/app-defaults@1.5.15-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-compat-api@0.3.4-next.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.3-next.1 + - @backstage/frontend-defaults@0.1.4-next.1 + - @backstage/frontend-plugin-api@0.9.3-next.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-app@0.1.4-next.1 + - @backstage/plugin-app-visualizer@0.1.14-next.1 + - @backstage/plugin-auth-react@0.1.10-next.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.1 + - @backstage/plugin-notifications@0.4.2-next.1 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.4-next.1 + - @backstage/plugin-signals@0.0.14-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.1 + - @backstage/plugin-techdocs-react@1.2.12-next.1 + +## 0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.3-next.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-app@0.1.4-next.0 + - @backstage/plugin-scaffolder-react@1.14.2-next.0 + - @backstage/plugin-scaffolder@1.27.2-next.0 + - @backstage/plugin-search-react@1.8.4-next.0 + - @backstage/plugin-search@1.4.21-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/plugin-techdocs@1.11.3-next.0 + - @backstage/plugin-home@0.8.3-next.0 + - @backstage/frontend-plugin-api@0.9.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-api-docs@0.12.2-next.0 + - @backstage/app-defaults@1.5.15-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-compat-api@0.3.4-next.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.3-next.0 + - @backstage/frontend-defaults@0.1.4-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-app-visualizer@0.1.14-next.0 + - @backstage/plugin-auth-react@0.1.10-next.0 + - @backstage/plugin-catalog@1.25.2-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-graph@0.4.14-next.0 + - @backstage/plugin-catalog-import@0.12.8-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.0 + - @backstage/plugin-kubernetes@0.12.2-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.0 + - @backstage/plugin-notifications@0.4.2-next.0 + - @backstage/plugin-org@0.6.34-next.0 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-signals@0.0.14-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.0 + - @backstage/plugin-user-settings@0.8.17-next.0 + +## 0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0 + - @backstage/plugin-catalog@1.25.0 + - @backstage/plugin-api-docs@0.12.0 + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/plugin-notifications@0.4.0 + - @backstage/plugin-techdocs@1.11.1 + - @backstage/plugin-search@1.4.19 + - @backstage/plugin-org@0.6.32 + - @backstage/plugin-scaffolder-react@1.14.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/plugin-scaffolder@1.27.0 + - @backstage/plugin-catalog-import@0.12.6 + - @backstage/core-components@0.16.0 + - @backstage/plugin-kubernetes@0.12.0 + - @backstage/plugin-home@0.8.1 + - @backstage/plugin-techdocs-react@1.2.10 + - @backstage/plugin-app-visualizer@0.1.12 + - @backstage/core-app-api@1.15.2 + - @backstage/frontend-defaults@0.1.2 + - @backstage/plugin-signals@0.0.12 + - @backstage/plugin-kubernetes-cluster@0.0.18 + - @backstage/app-defaults@1.5.13 + - @backstage/catalog-model@1.7.1 + - @backstage/core-compat-api@0.3.2 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.1 + - @backstage/frontend-plugin-api@0.9.1 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-app@0.1.2 + - @backstage/plugin-auth-react@0.1.8 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-graph@0.4.12 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17 + - @backstage/plugin-user-settings@0.8.15 + +## 0.0.17-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.25.0-next.3 + - @backstage/cli@0.29.0-next.3 + - @backstage/plugin-search@1.4.19-next.3 + - @backstage/plugin-techdocs@1.11.1-next.3 + - @backstage/plugin-scaffolder-react@1.14.0-next.3 + - @backstage/plugin-scaffolder@1.27.0-next.3 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/core-compat-api@0.3.2-next.2 + - @backstage/plugin-api-docs@0.11.12-next.3 + - @backstage/plugin-catalog-graph@0.4.12-next.3 + - @backstage/plugin-catalog-import@0.12.6-next.3 + - @backstage/plugin-org@0.6.32-next.3 + - @backstage/plugin-user-settings@0.8.15-next.3 + - @backstage/app-defaults@1.5.13-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.2 + - @backstage/frontend-defaults@0.1.2-next.2 + - @backstage/frontend-plugin-api@0.9.1-next.2 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-app@0.1.2-next.2 + - @backstage/plugin-app-visualizer@0.1.12-next.3 + - @backstage/plugin-auth-react@0.1.8-next.2 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.2 + - @backstage/plugin-home@0.8.1-next.3 + - @backstage/plugin-kubernetes@0.12.0-next.3 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.3 + - @backstage/plugin-notifications@0.3.3-next.2 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.2 + - @backstage/plugin-signals@0.0.12-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.2 + - @backstage/plugin-techdocs-react@1.2.10-next.2 + +## 0.0.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.2 + - @backstage/plugin-catalog-import@0.12.6-next.2 + - @backstage/plugin-scaffolder@1.26.3-next.2 + - @backstage/plugin-app-visualizer@0.1.12-next.2 + - @backstage/plugin-catalog@1.24.1-next.2 + - @backstage/plugin-catalog-graph@0.4.12-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/plugin-home@0.8.1-next.2 + - @backstage/plugin-org@0.6.32-next.2 + - @backstage/plugin-scaffolder-react@1.13.3-next.2 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/frontend-defaults@0.1.2-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-api-docs@0.11.12-next.2 + - @backstage/plugin-app@0.1.2-next.1 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + - @backstage/plugin-kubernetes@0.12.0-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.2 + - @backstage/plugin-notifications@0.3.3-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search@1.4.19-next.2 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-signals@0.0.12-next.1 + - @backstage/plugin-techdocs@1.11.1-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + - @backstage/plugin-user-settings@0.8.15-next.2 + +## 0.0.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.1 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-techdocs@1.11.1-next.1 + - @backstage/plugin-kubernetes@0.12.0-next.1 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.1 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/frontend-defaults@0.1.2-next.1 + - @backstage/frontend-plugin-api@0.9.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-api-docs@0.11.12-next.1 + - @backstage/plugin-app@0.1.2-next.1 + - @backstage/plugin-app-visualizer@0.1.12-next.1 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog@1.24.1-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-graph@0.4.12-next.1 + - @backstage/plugin-catalog-import@0.12.6-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + - @backstage/plugin-home@0.8.1-next.1 + - @backstage/plugin-notifications@0.3.3-next.1 + - @backstage/plugin-org@0.6.32-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder@1.26.3-next.1 + - @backstage/plugin-scaffolder-react@1.13.3-next.1 + - @backstage/plugin-search@1.4.19-next.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-signals@0.0.12-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + - @backstage/plugin-user-settings@0.8.15-next.1 + +## 0.0.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.0 + - @backstage/plugin-api-docs@0.11.12-next.0 + - @backstage/plugin-scaffolder-react@1.13.2-next.0 + - @backstage/plugin-techdocs@1.11.1-next.0 + - @backstage/core-components@0.16.0-next.0 + - @backstage/plugin-home@0.8.1-next.0 + - @backstage/plugin-scaffolder@1.26.2-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.0 + - @backstage/plugin-notifications@0.3.3-next.0 + - @backstage/app-defaults@1.5.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-compat-api@0.3.2-next.0 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.0 + - @backstage/frontend-defaults@0.1.2-next.0 + - @backstage/frontend-plugin-api@0.9.1-next.0 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-app@0.1.2-next.0 + - @backstage/plugin-app-visualizer@0.1.12-next.0 + - @backstage/plugin-auth-react@0.1.8-next.0 + - @backstage/plugin-catalog@1.24.1-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-graph@0.4.12-next.0 + - @backstage/plugin-catalog-import@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.0 + - @backstage/plugin-kubernetes@0.11.17-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.0 + - @backstage/plugin-org@0.6.32-next.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search@1.4.19-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.0 + - @backstage/plugin-signals@0.0.12-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.0 + - @backstage/plugin-user-settings@0.8.15-next.0 + ## 0.0.16 ### Patch Changes diff --git a/packages/app-next/package.json b/packages/app-next/package.json index 1ffea86aeb..c39fac7e6a 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -1,6 +1,6 @@ { "name": "example-app-next", - "version": "0.0.16", + "version": "0.0.18-next.2", "backstage": { "role": "frontend" }, diff --git a/packages/app/.eslintrc.js b/packages/app/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/packages/app/.eslintrc.js +++ b/packages/app/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 6f33cf3949..fd244dde7e 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,333 @@ # example-app +## 0.2.104-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.26.0-next.2 + - @backstage/plugin-notifications@0.5.0-next.2 + - @backstage/cli@0.29.3-next.2 + - @backstage/plugin-catalog-react@1.14.3-next.2 + - @backstage/plugin-scaffolder-react@1.14.2-next.2 + - @backstage/plugin-scaffolder@1.27.2-next.2 + - @backstage/plugin-api-docs@0.12.2-next.2 + - @backstage/plugin-catalog-graph@0.4.14-next.2 + - @backstage/plugin-catalog-import@0.12.8-next.2 + - @backstage/plugin-org@0.6.34-next.2 + - @backstage/plugin-user-settings@0.8.17-next.2 + - @backstage/app-defaults@1.5.15-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/core-app-api@1.15.3-next.1 + - @backstage/core-components@0.16.2-next.2 + - @backstage/core-plugin-api@1.10.2-next.0 + - @backstage/frontend-app-api@0.10.3-next.2 + - @backstage/integration-react@1.2.2-next.1 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-auth-react@0.1.10-next.2 + - @backstage/plugin-catalog-common@1.1.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.2 + - @backstage/plugin-devtools@0.1.22-next.2 + - @backstage/plugin-home@0.8.3-next.2 + - @backstage/plugin-kubernetes@0.12.2-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.2 + - @backstage/plugin-permission-react@0.4.29-next.0 + - @backstage/plugin-search@1.4.21-next.2 + - @backstage/plugin-search-common@1.2.16-next.0 + - @backstage/plugin-search-react@1.8.4-next.2 + - @backstage/plugin-signals@0.0.14-next.2 + - @backstage/plugin-techdocs@1.11.3-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.2 + - @backstage/plugin-techdocs-react@1.2.12-next.2 + +## 0.2.104-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home@0.8.3-next.1 + - @backstage/plugin-catalog-react@1.14.3-next.1 + - @backstage/plugin-scaffolder-react@1.14.2-next.1 + - @backstage/cli@0.29.3-next.1 + - @backstage/core-components@0.16.2-next.1 + - @backstage/plugin-api-docs@0.12.2-next.1 + - @backstage/plugin-catalog@1.25.2-next.1 + - @backstage/plugin-catalog-graph@0.4.14-next.1 + - @backstage/plugin-catalog-import@0.12.8-next.1 + - @backstage/plugin-kubernetes@0.12.2-next.1 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.1 + - @backstage/plugin-org@0.6.34-next.1 + - @backstage/plugin-scaffolder@1.27.2-next.1 + - @backstage/plugin-search@1.4.21-next.1 + - @backstage/plugin-techdocs@1.11.3-next.1 + - @backstage/plugin-user-settings@0.8.17-next.1 + - @backstage/app-defaults@1.5.15-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.3-next.1 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-auth-react@0.1.10-next.1 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.1 + - @backstage/plugin-devtools@0.1.22-next.1 + - @backstage/plugin-notifications@0.4.2-next.1 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.4-next.1 + - @backstage/plugin-signals@0.0.14-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.1 + - @backstage/plugin-techdocs-react@1.2.12-next.1 + +## 0.2.104-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.3-next.0 + - @backstage/core-app-api@1.15.3-next.0 + - @backstage/plugin-scaffolder-react@1.14.2-next.0 + - @backstage/plugin-scaffolder@1.27.2-next.0 + - @backstage/plugin-search-react@1.8.4-next.0 + - @backstage/plugin-search@1.4.21-next.0 + - @backstage/plugin-catalog-react@1.14.3-next.0 + - @backstage/plugin-techdocs@1.11.3-next.0 + - @backstage/plugin-home@0.8.3-next.0 + - @backstage/theme@0.6.3-next.0 + - @backstage/plugin-api-docs@0.12.2-next.0 + - @backstage/app-defaults@1.5.15-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/core-components@0.16.2-next.0 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.3-next.0 + - @backstage/integration-react@1.2.2-next.0 + - @backstage/plugin-auth-react@0.1.10-next.0 + - @backstage/plugin-catalog@1.25.2-next.0 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-graph@0.4.14-next.0 + - @backstage/plugin-catalog-import@0.12.8-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.12-next.0 + - @backstage/plugin-devtools@0.1.22-next.0 + - @backstage/plugin-kubernetes@0.12.2-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.20-next.0 + - @backstage/plugin-notifications@0.4.2-next.0 + - @backstage/plugin-org@0.6.34-next.0 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-signals@0.0.14-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.19-next.0 + - @backstage/plugin-techdocs-react@1.2.12-next.0 + - @backstage/plugin-user-settings@0.8.17-next.0 + +## 0.2.103 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0 + - @backstage/plugin-catalog@1.25.0 + - @backstage/plugin-api-docs@0.12.0 + - @backstage/config@1.3.0 + - @backstage/theme@0.6.1 + - @backstage/plugin-notifications@0.4.0 + - @backstage/plugin-techdocs@1.11.1 + - @backstage/plugin-search@1.4.19 + - @backstage/plugin-org@0.6.32 + - @backstage/plugin-scaffolder-react@1.14.0 + - @backstage/plugin-catalog-react@1.14.1 + - @backstage/plugin-scaffolder@1.27.0 + - @backstage/plugin-catalog-import@0.12.6 + - @backstage/core-components@0.16.0 + - @backstage/plugin-kubernetes@0.12.0 + - @backstage/plugin-home@0.8.1 + - @backstage/plugin-techdocs-react@1.2.10 + - @backstage/core-app-api@1.15.2 + - @backstage/plugin-signals@0.0.12 + - @backstage/plugin-kubernetes-cluster@0.0.18 + - @backstage/app-defaults@1.5.13 + - @backstage/catalog-model@1.7.1 + - @backstage/core-plugin-api@1.10.1 + - @backstage/frontend-app-api@0.10.1 + - @backstage/integration-react@1.2.1 + - @backstage/plugin-auth-react@0.1.8 + - @backstage/plugin-catalog-common@1.1.1 + - @backstage/plugin-catalog-graph@0.4.12 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10 + - @backstage/plugin-devtools@0.1.20 + - @backstage/plugin-permission-react@0.4.28 + - @backstage/plugin-search-common@1.2.15 + - @backstage/plugin-search-react@1.8.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17 + - @backstage/plugin-user-settings@0.8.15 + +## 0.2.103-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.25.0-next.3 + - @backstage/cli@0.29.0-next.3 + - @backstage/plugin-search@1.4.19-next.3 + - @backstage/plugin-techdocs@1.11.1-next.3 + - @backstage/plugin-scaffolder-react@1.14.0-next.3 + - @backstage/plugin-scaffolder@1.27.0-next.3 + - @backstage/core-components@0.16.0-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.3 + - @backstage/plugin-api-docs@0.11.12-next.3 + - @backstage/plugin-catalog-graph@0.4.12-next.3 + - @backstage/plugin-catalog-import@0.12.6-next.3 + - @backstage/plugin-org@0.6.32-next.3 + - @backstage/plugin-user-settings@0.8.15-next.3 + - @backstage/app-defaults@1.5.13-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.2 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-auth-react@0.1.8-next.2 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.2 + - @backstage/plugin-devtools@0.1.20-next.2 + - @backstage/plugin-home@0.8.1-next.3 + - @backstage/plugin-kubernetes@0.12.0-next.3 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.3 + - @backstage/plugin-notifications@0.3.3-next.2 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.2 + - @backstage/plugin-signals@0.0.12-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.2 + - @backstage/plugin-techdocs-react@1.2.10-next.2 + +## 0.2.103-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.2 + - @backstage/plugin-catalog-import@0.12.6-next.2 + - @backstage/plugin-scaffolder@1.26.3-next.2 + - @backstage/plugin-catalog@1.24.1-next.2 + - @backstage/plugin-catalog-graph@0.4.12-next.2 + - @backstage/plugin-catalog-react@1.14.1-next.2 + - @backstage/plugin-home@0.8.1-next.2 + - @backstage/plugin-org@0.6.32-next.2 + - @backstage/plugin-scaffolder-react@1.13.3-next.2 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-api-docs@0.11.12-next.2 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + - @backstage/plugin-devtools@0.1.20-next.1 + - @backstage/plugin-kubernetes@0.12.0-next.2 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.2 + - @backstage/plugin-notifications@0.3.3-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search@1.4.19-next.2 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-signals@0.0.12-next.1 + - @backstage/plugin-techdocs@1.11.1-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + - @backstage/plugin-user-settings@0.8.15-next.2 + +## 0.2.103-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.1 + - @backstage/theme@0.6.1-next.0 + - @backstage/plugin-techdocs@1.11.1-next.1 + - @backstage/plugin-kubernetes@0.12.0-next.1 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.1 + - @backstage/app-defaults@1.5.13-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-components@0.16.0-next.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.1 + - @backstage/integration-react@1.2.0 + - @backstage/plugin-api-docs@0.11.12-next.1 + - @backstage/plugin-auth-react@0.1.8-next.1 + - @backstage/plugin-catalog@1.24.1-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-graph@0.4.12-next.1 + - @backstage/plugin-catalog-import@0.12.6-next.1 + - @backstage/plugin-catalog-react@1.14.1-next.1 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.1 + - @backstage/plugin-devtools@0.1.20-next.1 + - @backstage/plugin-home@0.8.1-next.1 + - @backstage/plugin-notifications@0.3.3-next.1 + - @backstage/plugin-org@0.6.32-next.1 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-scaffolder@1.26.3-next.1 + - @backstage/plugin-scaffolder-react@1.13.3-next.1 + - @backstage/plugin-search@1.4.19-next.1 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.1 + - @backstage/plugin-signals@0.0.12-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.1 + - @backstage/plugin-techdocs-react@1.2.10-next.1 + - @backstage/plugin-user-settings@0.8.15-next.1 + +## 0.2.103-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.29.0-next.0 + - @backstage/plugin-api-docs@0.11.12-next.0 + - @backstage/plugin-scaffolder-react@1.13.2-next.0 + - @backstage/plugin-techdocs@1.11.1-next.0 + - @backstage/core-components@0.16.0-next.0 + - @backstage/plugin-home@0.8.1-next.0 + - @backstage/plugin-scaffolder@1.26.2-next.0 + - @backstage/plugin-techdocs-react@1.2.10-next.0 + - @backstage/plugin-notifications@0.3.3-next.0 + - @backstage/app-defaults@1.5.13-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1 + - @backstage/core-plugin-api@1.10.0 + - @backstage/frontend-app-api@0.10.1-next.0 + - @backstage/integration-react@1.2.0 + - @backstage/theme@0.6.0 + - @backstage/plugin-auth-react@0.1.8-next.0 + - @backstage/plugin-catalog@1.24.1-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-catalog-graph@0.4.12-next.0 + - @backstage/plugin-catalog-import@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.14.1-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.2.10-next.0 + - @backstage/plugin-devtools@0.1.20-next.0 + - @backstage/plugin-kubernetes@0.11.17-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.18-next.0 + - @backstage/plugin-org@0.6.32-next.0 + - @backstage/plugin-permission-react@0.4.27 + - @backstage/plugin-search@1.4.19-next.0 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.2-next.0 + - @backstage/plugin-signals@0.0.12-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.17-next.0 + - @backstage/plugin-user-settings@0.8.15-next.0 + ## 0.2.102 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 2012f9888d..67228f4b74 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.102", + "version": "0.2.104-next.2", "backstage": { "role": "frontend" }, diff --git a/packages/app/src/apis.ts b/packages/app/src/apis.ts index 0c2ccbad22..e39122337f 100644 --- a/packages/app/src/apis.ts +++ b/packages/app/src/apis.ts @@ -26,6 +26,9 @@ import { discoveryApiRef, } from '@backstage/core-plugin-api'; import { AuthProxyDiscoveryApi } from './AuthProxyDiscoveryApi'; +import { formDecoratorsApiRef } from '@backstage/plugin-scaffolder/alpha'; +import { DefaultScaffolderFormDecoratorsApi } from '@backstage/plugin-scaffolder/alpha'; +import { mockDecorator } from './components/scaffolder/decorators'; export const apis: AnyApiFactory[] = [ createApiFactory({ @@ -39,5 +42,14 @@ export const apis: AnyApiFactory[] = [ factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi), }), + createApiFactory({ + api: formDecoratorsApiRef, + deps: {}, + factory: () => + DefaultScaffolderFormDecoratorsApi.create({ + decorators: [mockDecorator], + }), + }), + ScmAuth.createDefaultApiFactory(), ]; diff --git a/packages/app/src/components/Root/LogoFull.tsx b/packages/app/src/components/Root/LogoFull.tsx index c7b1c846c4..da6911bb17 100644 --- a/packages/app/src/components/Root/LogoFull.tsx +++ b/packages/app/src/components/Root/LogoFull.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; const useStyles = makeStyles({ svg: { diff --git a/packages/app/src/components/Root/LogoIcon.jsx b/packages/app/src/components/Root/LogoIcon.jsx index 5ec778cca2..966b491674 100644 --- a/packages/app/src/components/Root/LogoIcon.jsx +++ b/packages/app/src/components/Root/LogoIcon.jsx @@ -17,7 +17,7 @@ // NOTE: This file is intentionally .jsx, so that there is one file in this repo where we make sure .jsx files work. import React from 'react'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; const useStyles = makeStyles({ svg: { diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index af053f623c..b74c6459d8 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -15,7 +15,7 @@ */ import React, { PropsWithChildren } from 'react'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import HomeIcon from '@material-ui/icons/Home'; import RuleIcon from '@material-ui/icons/AssignmentTurnedIn'; import MapIcon from '@material-ui/icons/MyLocation'; diff --git a/packages/app/src/components/advancedSettings/AdvancedSettings.tsx b/packages/app/src/components/advancedSettings/AdvancedSettings.tsx index 574f7ec754..3383198a1f 100644 --- a/packages/app/src/components/advancedSettings/AdvancedSettings.tsx +++ b/packages/app/src/components/advancedSettings/AdvancedSettings.tsx @@ -16,14 +16,12 @@ import React from 'react'; import { InfoCard } from '@backstage/core-components'; -import { - List, - Grid, - ListItem, - ListItemText, - ListItemSecondaryAction, - Switch, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import Grid from '@material-ui/core/Grid'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import Switch from '@material-ui/core/Switch'; import useLocalStorage from 'react-use/esm/useLocalStorage'; export function AdvancedSettings() { diff --git a/packages/app/src/components/catalog/EntityPage.test.tsx b/packages/app/src/components/catalog/EntityPage.test.tsx index 0943a82efb..06a568279b 100644 --- a/packages/app/src/components/catalog/EntityPage.test.tsx +++ b/packages/app/src/components/catalog/EntityPage.test.tsx @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import { EntityLayout, catalogPlugin } from '@backstage/plugin-catalog'; import { EntityProvider, starredEntitiesApiRef, MockStarredEntitiesApi, + catalogApiRef, } from '@backstage/plugin-catalog-react'; import { permissionApiRef } from '@backstage/plugin-permission-react'; import { @@ -28,6 +28,7 @@ import { } from '@backstage/test-utils'; import React from 'react'; import { cicdContent } from './EntityPage'; +import { catalogApiMock } from '@backstage/plugin-catalog-react/testUtils'; describe('EntityPage Test', () => { const entity = { @@ -55,6 +56,7 @@ describe('EntityPage Test', () => { apis={[ [starredEntitiesApiRef, new MockStarredEntitiesApi()], [permissionApiRef, mockApis.permission()], + [catalogApiRef, catalogApiMock()], ]} > diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 586c793a4f..11fc60bd0e 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -70,7 +70,8 @@ import { EntityOwnershipCard, EntityUserProfileCard, } from '@backstage/plugin-org'; -import { Button, Grid } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; import React, { ReactNode } from 'react'; import { TechDocsAddons } from '@backstage/plugin-techdocs-react'; import { @@ -84,15 +85,14 @@ const customEntityFilterKind = ['Component', 'API', 'System']; const EntityLayoutWrapper = (props: { children?: ReactNode }) => { return ( - <> - - {props.children} - - + + {props.children} + ); }; diff --git a/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx b/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx index cb3d684389..f16f98f9af 100644 --- a/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx +++ b/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx @@ -37,7 +37,8 @@ import { searchApiRef, SearchContextProvider, } from '@backstage/plugin-search-react'; -import { Grid, makeStyles } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import { makeStyles } from '@material-ui/core/styles'; import React, { ComponentType, PropsWithChildren } from 'react'; const entities = [ @@ -126,8 +127,8 @@ const useStyles = makeStyles(theme => ({ boxShadow: theme.shadows[1], }, searchBarOutline: { - borderStyle: 'none' - } + borderStyle: 'none', + }, })); const useLogoStyles = makeStyles(theme => ({ @@ -156,9 +157,14 @@ export const DefaultTemplate = () => { className={container} logo={} /> - + diff --git a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx index e236e01d79..953420c3e6 100644 --- a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx +++ b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx @@ -16,7 +16,7 @@ import React from 'react'; import type { FieldValidation } from '@rjsf/utils'; import { scaffolderPlugin } from '@backstage/plugin-scaffolder'; -import { TextField } from '@material-ui/core'; +import TextField from '@material-ui/core/TextField'; import { createScaffolderFieldExtension, FieldExtensionComponentProps, diff --git a/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx b/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx index b23d6e4073..d05635314f 100644 --- a/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx +++ b/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx @@ -19,7 +19,7 @@ import { LayoutTemplate, scaffolderPlugin, } from '@backstage/plugin-scaffolder'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; const TwoColumn: LayoutTemplate = ({ properties, description, title }) => { const mid = Math.ceil(properties.length / 2); diff --git a/packages/app/src/components/scaffolder/decorators.ts b/packages/app/src/components/scaffolder/decorators.ts new file mode 100644 index 0000000000..ffb78562f8 --- /dev/null +++ b/packages/app/src/components/scaffolder/decorators.ts @@ -0,0 +1,36 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { githubAuthApiRef } from '@backstage/core-plugin-api'; +import { createScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha'; + +export const mockDecorator = createScaffolderFormDecorator({ + id: 'mock-decorator', + schema: { + input: { + test: z => z.string(), + }, + }, + deps: { + githubApi: githubAuthApiRef, + }, + decorator: async ( + { setSecrets, setFormState, input: { test } }, + { githubApi: _githubApi }, + ) => { + setFormState(state => ({ ...state, test, mock: 'MOCK' })); + setSecrets(state => ({ ...state, GITHUB_TOKEN: 'MOCK_TOKEN' })); + }, +}); diff --git a/packages/app/src/components/search/SearchModal.tsx b/packages/app/src/components/search/SearchModal.tsx index 34caeeae63..0f80d0fc68 100644 --- a/packages/app/src/components/search/SearchModal.tsx +++ b/packages/app/src/components/search/SearchModal.tsx @@ -29,14 +29,12 @@ import { } from '@backstage/plugin-search-react'; import { TechDocsSearchResultListItem } from '@backstage/plugin-techdocs'; import { CatalogSearchResultListItem } from '@backstage/plugin-catalog'; -import { - Box, - DialogActions, - DialogContent, - DialogTitle, - Grid, - makeStyles, -} from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import Grid from '@material-ui/core/Grid'; +import { makeStyles } from '@material-ui/core/styles'; import Button from '@material-ui/core/Button'; import IconButton from '@material-ui/core/IconButton'; import ArrowForwardIcon from '@material-ui/icons/ArrowForward'; diff --git a/packages/app/src/components/search/SearchPage.tsx b/packages/app/src/components/search/SearchPage.tsx index 6914fa71cb..5a520e9211 100644 --- a/packages/app/src/components/search/SearchPage.tsx +++ b/packages/app/src/components/search/SearchPage.tsx @@ -25,8 +25,8 @@ import { import { useApi } from '@backstage/core-plugin-api'; import { CatalogSearchResultListItem } from '@backstage/plugin-catalog'; import { - catalogApiRef, CATALOG_FILTER_EXISTS, + catalogApiRef, } from '@backstage/plugin-catalog-react'; import { SearchType } from '@backstage/plugin-search'; import { @@ -38,7 +38,10 @@ import { useSearch, } from '@backstage/plugin-search-react'; import { TechDocsSearchResultListItem } from '@backstage/plugin-techdocs'; -import { Grid, makeStyles, Paper, Theme } from '@material-ui/core'; +import Paper from '@material-ui/core/Paper'; +import Grid from '@material-ui/core/Grid'; +import { Theme } from '@material-ui/core/styles/createTheme'; +import { makeStyles } from '@material-ui/core/styles'; import React from 'react'; const useStyles = makeStyles((theme: Theme) => ({ @@ -70,7 +73,7 @@ const SearchPage = () => { {!isMobile && ( { name="kind" values={['Component', 'Template']} /> - ) { + const fn = jest.fn().mockReturnValue({}); + return Object.assign( + fn, + createServiceFactory({ + service: ref, + deps: {}, + factory: fn, + }), + ); +} + const testPlugin = createBackendPlugin({ pluginId: 'test', register(reg) { @@ -166,6 +180,151 @@ describe('BackendInitializer', () => { expect(moduleInit).toHaveBeenCalled(); }); + it('should ignore services provided by feature loaders that have already been explicitly added', async () => { + const ref = createServiceRef<{}>({ id: '1' }); + const factory1 = mkNoopFactory(ref); + const factory2 = mkNoopFactory(ref); + const factory3 = mkNoopFactory(ref); + + const init = new BackendInitializer([...baseFactories, factory1]); + init.add(factory2); + init.add( + createBackendFeatureLoader({ + deps: {}, + *loader() { + yield factory3; + }, + }), + ); + init.add( + createBackendPlugin({ + pluginId: 'tester', + register(reg) { + reg.registerInit({ + deps: { ref }, + async init() {}, + }); + }, + }), + ); + + await init.start(); + + expect(factory1).not.toHaveBeenCalled(); + expect(factory2).toHaveBeenCalled(); + expect(factory3).not.toHaveBeenCalled(); + }); + + it('should include all multiton service factories', async () => { + expect.assertions(5); + + const ref = createServiceRef({ id: '1', multiton: true }); + const factory1 = mkNoopFactory(ref).mockResolvedValue(1); + const factory2 = mkNoopFactory(ref).mockResolvedValue(2); + const factory3 = mkNoopFactory(ref).mockResolvedValue(3); + const factory4 = mkNoopFactory(ref).mockResolvedValue(4); + + const init = new BackendInitializer([...baseFactories, factory1]); + init.add(factory2); + init.add( + createBackendFeatureLoader({ + deps: {}, + *loader() { + yield factory3; + yield factory4; + }, + }), + ); + init.add( + createBackendPlugin({ + pluginId: 'tester', + register(reg) { + reg.registerInit({ + deps: { ns: ref }, + async init({ ns }) { + expect(ns).toEqual([1, 2, 3, 4]); + }, + }); + }, + }), + ); + + await init.start(); + + expect(factory1).toHaveBeenCalled(); + expect(factory2).toHaveBeenCalled(); + expect(factory3).toHaveBeenCalled(); + expect(factory4).toHaveBeenCalled(); + }); + + // Note: this is an important escape hatch in case to loaders conflict and you need to select the winning service factory + it('should allow duplicate service from feature loaders if overridden', async () => { + const ref = createServiceRef<{}>({ id: '1' }); + const factory1 = mkNoopFactory(ref); + const factory2 = mkNoopFactory(ref); + const factory3 = mkNoopFactory(ref); + const factory4 = mkNoopFactory(ref); + + const init = new BackendInitializer([...baseFactories, factory1]); + init.add(factory2); + init.add( + createBackendFeatureLoader({ + deps: {}, + *loader() { + yield factory3; + yield factory4; + }, + }), + ); + init.add( + createBackendPlugin({ + pluginId: 'tester', + register(reg) { + reg.registerInit({ + deps: { ref }, + async init() {}, + }); + }, + }), + ); + + await init.start(); + + expect(factory1).not.toHaveBeenCalled(); + expect(factory2).toHaveBeenCalled(); + expect(factory3).not.toHaveBeenCalled(); + expect(factory4).not.toHaveBeenCalled(); + }); + + it('should reject duplicate service factories from feature loader without an explicit override', async () => { + const ref = createServiceRef<{}>({ id: '1' }); + const factory1 = mkNoopFactory(ref); + const factory2 = mkNoopFactory(ref); + const factory3 = mkNoopFactory(ref); + + const init = new BackendInitializer([...baseFactories, factory1]); + init.add( + createBackendFeatureLoader({ + deps: {}, + *loader() { + yield factory2; + }, + }), + ); + init.add( + createBackendFeatureLoader({ + deps: {}, + *loader() { + yield factory3; + }, + }), + ); + + await expect(init.start()).rejects.toThrow( + 'Duplicate service implementations provided for 1 by both feature loader created at', + ); + }); + it('should refuse to override already initialized services through loaded features', async () => { const ref1 = createServiceRef<{ x: number }>({ id: '1', @@ -724,4 +883,59 @@ describe('BackendInitializer', () => { await init.start(); }); + + it('should properly add plugins + modules to the instance metadata service', async () => { + expect.assertions(1); + const backend = new BackendInitializer(baseFactories); + const plugin = createBackendPlugin({ + pluginId: 'test', + register(reg) { + reg.registerInit({ + deps: {}, + async init() {}, + }); + }, + }); + const instanceMetadataPlugin = createBackendPlugin({ + pluginId: 'instance-metadata', + register(reg) { + reg.registerInit({ + deps: { + instanceMetadata: instanceMetadataServiceRef, + }, + async init({ instanceMetadata }) { + expect(instanceMetadata.getInstalledFeatures()).toEqual([ + { + pluginId: 'test', + type: 'plugin', + }, + { + pluginId: 'test', + moduleId: 'test', + type: 'module', + }, + { + pluginId: 'instance-metadata', + type: 'plugin', + }, + ]); + }, + }); + }, + }); + const module = createBackendModule({ + pluginId: 'test', + moduleId: 'test', + register(reg) { + reg.registerInit({ + deps: {}, + async init() {}, + }); + }, + }); + backend.add(plugin); + backend.add(module); + backend.add(instanceMetadataPlugin); + await backend.start(); + }); }); diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts index 3ea1200898..b8c37f7471 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts @@ -22,6 +22,7 @@ import { ServiceFactory, LifecycleService, RootLifecycleService, + createServiceFactory, } from '@backstage/backend-plugin-api'; import { ServiceOrExtensionPoint } from './types'; // Direct internal import to avoid duplication @@ -34,7 +35,11 @@ import type { // eslint-disable-next-line @backstage/no-relative-monorepo-imports import type { InternalServiceFactory } from '../../../backend-plugin-api/src/services/system/types'; import { ForwardedError, ConflictError } from '@backstage/errors'; -import { featureDiscoveryServiceRef } from '@backstage/backend-plugin-api/alpha'; +import { + instanceMetadataServiceRef, + featureDiscoveryServiceRef, + BackendFeatureMeta, +} from '@backstage/backend-plugin-api/alpha'; import { DependencyGraph } from '../lib/DependencyGraph'; import { ServiceRegistry } from './ServiceRegistry'; import { createInitializationLogger } from './createInitializationLogger'; @@ -96,6 +101,39 @@ const instanceRegistry = new (class InstanceRegistry { }; })(); +function createInstanceMetadataServiceFactory( + registrations: InternalBackendRegistrations[], +) { + const installedFeatures = registrations + .map(registration => { + if (registration.featureType === 'registrations') { + return registration + .getRegistrations() + .map(feature => { + if (feature.type === 'plugin') { + return { type: 'plugin', pluginId: feature.pluginId }; + } else if (feature.type === 'module') { + return { + type: 'module', + pluginId: feature.pluginId, + moduleId: feature.moduleId, + }; + } + // Ignore unknown feature types. + return undefined; + }) + .filter(Boolean) as BackendFeatureMeta[]; + } + return []; + }) + .flat(); + return createServiceFactory({ + service: instanceMetadataServiceRef, + deps: {}, + factory: async () => ({ getInstalledFeatures: () => installedFeatures }), + }); +} + export class BackendInitializer { #startPromise?: Promise; #stopPromise?: Promise; @@ -210,6 +248,10 @@ export class BackendInitializer { await this.#applyBackendFeatureLoaders(this.#registeredFeatureLoaders); + this.#serviceRegistry.add( + createInstanceMetadataServiceFactory(this.#registrations), + ); + // Initialize all root scoped services await this.#serviceRegistry.initializeEagerServicesWithScope('root'); @@ -407,6 +449,11 @@ export class BackendInitializer { // The startup failed, but we may still want to do cleanup so we continue silently } + const rootLifecycleService = await this.#getRootLifecycleImpl(); + + // Root services like the health one need to immediatelly be notified of the shutdown + await rootLifecycleService.beforeShutdown(); + // Get all plugins. const allPlugins = new Set(); for (const feature of this.#registrations) { @@ -426,14 +473,14 @@ export class BackendInitializer { ); // Once all plugin shutdown hooks are done, run root shutdown hooks. - const lifecycleService = await this.#getRootLifecycleImpl(); - await lifecycleService.shutdown(); + await rootLifecycleService.shutdown(); } // Bit of a hacky way to grab the lifecycle services, potentially find a nicer way to do this async #getRootLifecycleImpl(): Promise< RootLifecycleService & { startup(): Promise; + beforeShutdown(): Promise; shutdown(): Promise; } > { @@ -477,6 +524,11 @@ export class BackendInitializer { } async #applyBackendFeatureLoaders(loaders: InternalBackendFeatureLoader[]) { + const servicesAddedByLoaders = new Map< + string, + InternalBackendFeatureLoader + >(); + for (const loader of loaders) { const deps = new Map(); const missingRefs = new Set(); @@ -522,8 +574,32 @@ export class BackendInitializer { if (isBackendFeatureLoader(feature)) { newLoaders.push(feature); } else { - didAddServiceFactory ||= isServiceFactory(feature); - this.#addFeature(feature); + // This block makes sure that feature loaders do not provide duplicate + // implementations for the same service, but at the same time allows + // service factories provided by feature loaders to be overridden by + // ones that are explicitly installed with backend.add(serviceFactory). + // + // If a factory has already been explicitly installed, the service + // factory provided by the loader will simply be ignored. + if (isServiceFactory(feature) && !feature.service.multiton) { + const conflictingLoader = servicesAddedByLoaders.get( + feature.service.id, + ); + if (conflictingLoader) { + throw new Error( + `Duplicate service implementations provided for ${feature.service.id} by both feature loader ${loader.description} and feature loader ${conflictingLoader.description}`, + ); + } + + // Check that this service wasn't already explicitly added by backend.add(serviceFactory) + if (!this.#serviceRegistry.hasBeenAdded(feature.service)) { + didAddServiceFactory = true; + servicesAddedByLoaders.set(feature.service.id, loader); + this.#addFeature(feature); + } + } else { + this.#addFeature(feature); + } } } diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.ts index 0abd5605ae..90b108206e 100644 --- a/packages/backend-app-api/src/wiring/ServiceRegistry.ts +++ b/packages/backend-app-api/src/wiring/ServiceRegistry.ts @@ -191,6 +191,13 @@ export class ServiceRegistry { } } + hasBeenAdded(ref: ServiceRef) { + if (ref.id === coreServices.pluginMetadata.id) { + return true; + } + return this.#addedFactoryIds.has(ref.id); + } + add(factory: ServiceFactory) { const factoryId = factory.service.id; if (factoryId === coreServices.pluginMetadata.id) { diff --git a/packages/backend-app-api/src/wiring/createSpecializedBackend.test.ts b/packages/backend-app-api/src/wiring/createSpecializedBackend.test.ts index 1fd7fcbbec..32c1fbcd0e 100644 --- a/packages/backend-app-api/src/wiring/createSpecializedBackend.test.ts +++ b/packages/backend-app-api/src/wiring/createSpecializedBackend.test.ts @@ -36,6 +36,7 @@ describe('createSpecializedBackend', () => { deps: {}, factory: async () => ({ addStartupHook: () => {}, + addBeforeShutdownHook: () => {}, addShutdownHook: () => {}, }), }), @@ -44,6 +45,7 @@ describe('createSpecializedBackend', () => { deps: {}, factory: async () => ({ addStartupHook: () => {}, + addBeforeShutdownHook: () => {}, addShutdownHook: () => {}, }), }), diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 6a0fb84a48..4d3cb90097 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,215 @@ # @backstage/backend-defaults +## 0.6.0-next.2 + +### Minor Changes + +- fd5d337: Added a new `backend.health.headers` configuration that can be used to set additional headers to include in health check responses. + + **BREAKING CONSUMERS**: As part of this change the `createHealthRouter` function exported from `@backstage/backend-defaults/rootHttpRouter` now requires the root config service to be passed through the `config` option. + +- 3f34ea9: Throttles Bitbucket Server API calls + +### Patch Changes + +- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`. +- 57e0b11: The user and plugin token verification in the default `AuthService` implementation will no longer forward verification errors to the caller, and instead log them as warnings. +- 57e0b11: The default `authServiceFactory` now correctly depends on the plugin scoped `Logger` services rather than the root scoped one. +- 0e9c9fa: Implements the `DefaultRootLifecycleService.addBeforeShutdownHook` method, and updates `DefaultRootHttpRouterService` and `DefaultRootHealthService` to listen to that event to stop accepting traffic and close service connections. +- d0cbd82: Remove use of the `stoppable` library on the `DefaultRootHttpRouterService` as Node's native http server [close](https://nodejs.org/api/http.html#serverclosecallback) method already drains requests. + Also, we pass a new `lifecycleMiddleware` to the `rootHttpRouterServiceFactory` configure function that must be called manually if you don't call `applyDefaults`. +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/backend-app-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/cli-node@0.2.11-next.1 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/integration-aws-node@0.1.14-next.0 + - @backstage/types@1.2.0 + +## 0.6.0-next.1 + +### Patch Changes + +- fe87fbf: Add task metrics as two gauges that track the last start and end timestamps as epoch seconds. +- 1ac6b72: Support `connection.type: cloudsql` in database client for usage with `@google-cloud/cloud-sql-connector` and `iam` auth +- 5c9cc05: Use native fetch instead of node-fetch +- cf627c6: Fixed an issue in the WinstonLogger where Errors thrown and given to logger.error with field values that could not be cast to a string would throw a TypeError +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/backend-app-api@1.1.0-next.1 + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/cli-common@0.1.15 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/integration@1.16.0-next.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/types@1.2.0 + - @backstage/plugin-events-node@0.4.6-next.1 + +## 0.6.0-next.0 + +### Minor Changes + +- de6f280: **BREAKING** Upgraded @keyv/redis and keyv packages to resolve a bug related to incorrect resolution of cache keys. + + This is a breaking change for clients using the `redis` store for cache with `useRedisSets` option set to false since cache keys will be calculated differently (without the sets:namespace: prefix). For clients with default configuration (or useRedisSets set to false) the cache keys will stay the same, but since @keyv/redis library no longer supports redis sets they won't be utilised anymore. + + If you were using `useRedisSets` option in configuration make sure to remove it from `app-config.yaml`: + + ```diff + backend: + cache: + store: redis + connection: redis://user:pass@cache.example.com:6379 + - useRedisSets: false + ``` + +- 277092a: Implemented `AzureBlobStorageUrlReader` to read from the url of committed location from the entity provider +- 18a2c00: All middleware used by the default `coreServices.http` is now exported for use by custom implementations. + +### Patch Changes + +- 8863b38: Export `PluginTokenHandler` and `pluginTokenHandlerDecoratorServiceRef` to allow for custom decoration of the plugin token handler without having to re-implement the entire handler. +- 97c6837: Export `DefaultHttpAuthService` to allow for custom token extraction logic. +- e5255f1: Log request and response metadata so it can be used for filtering log messages. + The format of the request date was also changed from `clf` to `utc`. +- Updated dependencies + - @backstage/integration@1.16.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/backend-app-api@1.0.3-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + - @backstage/integration-aws-node@0.1.13 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-node@0.8.6-next.0 + +## 0.5.3 + +### Patch Changes + +- bf306cb: Removed dependency `@backstage/backend-common`. +- e30bb46: Disabling database migrations now correctly uses the `backend.default.skipMigrations` config value. +- d52d7f9: Support ISO and ms string forms of durations in config too +- f6eaec2: Link to proper package in `rootLoggerServiceFactory` doc string. +- ecf6b39: Use `node-fetch` instead of native fetch, as per https://backstage.io/docs/architecture-decisions/adrs-adr013 +- 4e58bc7: Upgrade to uuid v11 internally +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/types@1.2.0 + - @backstage/integration-aws-node@0.1.13 + - @backstage/config-loader@1.9.2 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/backend-app-api@1.0.2 + - @backstage/cli-common@0.1.15 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/cli-node@0.2.10 + - @backstage/errors@1.2.5 + - @backstage/integration@1.15.2 + - @backstage/plugin-permission-node@0.8.5 + +## 0.5.3-next.3 + +### Patch Changes + +- ecf6b39: Use `node-fetch` instead of native fetch, as per https://backstage.io/docs/architecture-decisions/adrs-adr013 +- Updated dependencies + - @backstage/integration-aws-node@0.1.13-next.0 + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## 0.5.3-next.2 + +### Patch Changes + +- e30bb46: Disabling database migrations now correctly uses the `backend.default.skipMigrations` config value. +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + +## 0.5.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/backend-app-api@1.0.2-next.1 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + +## 0.5.3-next.0 + +### Patch Changes + +- f6eaec2: Link to proper package in `rootLoggerServiceFactory` doc string. +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-app-api@1.0.2-next.0 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.9 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/integration@1.15.1 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + ## 0.5.1 ### Patch Changes diff --git a/packages/backend-defaults/config.d.ts b/packages/backend-defaults/config.d.ts index a8c6e1c290..e2a748f85d 100644 --- a/packages/backend-defaults/config.d.ts +++ b/packages/backend-defaults/config.d.ts @@ -28,6 +28,29 @@ export interface Config { */ baseUrl: string; + lifecycle?: { + /** + * The maximum time that paused requests will wait for the service to start, before returning an error. + * Defaults to 5 seconds + * Supported formats: + * - A string in the format of '1d', '2 seconds' etc. as supported by the `ms` + * library. + * - A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'. + * - An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`. + */ + startupRequestPauseTimeout?: string | HumanDuration; + /** + * The minimum time that the HTTP server will delay the shutdown of the backend. During this delay health checks will be set to failing, allowing traffic to drain. + * Defaults to 0 seconds. + * Supported formats: + * - A string in the format of '1d', '2 seconds' etc. as supported by the `ms` + * library. + * - A standard ISO formatted duration string, e.g. 'P2DT6H' or 'PT1M'. + * - An object with individual units (in plural) as keys, e.g. `{ days: 2, hours: 6 }`. + */ + serverShutdownDelay?: string | HumanDuration; + }; + /** Address that the backend should listen to. */ listen?: | string @@ -384,6 +407,16 @@ export interface Config { */ connection: | string + | { + /** + * The specific config for cloudsql connections + */ + type: 'cloudsql'; + /** + * The instance connection name for the cloudsql instance, e.g. `project:region:instance` + */ + instance: string; + } | { /** * Password that belongs to the client User @@ -441,7 +474,30 @@ export interface Config { * Database connection string or Knex object override * @visibility secret */ - connection?: string | object; + connection?: + | string + | { + /** + * The specific config for cloudsql connections + */ + type: 'cloudsql'; + /** + * The instance connection name for the cloudsql instance, e.g. `project:region:instance` + */ + instance: string; + } + | { + /** + * Password that belongs to the client User + * @visibility secret + */ + password?: string; + /** + * Other connection settings + */ + [key: string]: unknown; + }; + /** * Whether to ensure the given database exists by creating it if it does not. * Defaults to base config if unspecified. @@ -474,8 +530,8 @@ export interface Config { cache?: | { store: 'memory'; - /** An optional default TTL (in milliseconds). */ - defaultTtl?: number | HumanDuration; + /** An optional default TTL (in milliseconds, if given as a number). */ + defaultTtl?: number | HumanDuration | string; } | { store: 'redis'; @@ -484,13 +540,8 @@ export interface Config { * @visibility secret */ connection: string; - /** An optional default TTL (in milliseconds). */ - defaultTtl?: number | HumanDuration; - /** - * Whether or not [useRedisSets](https://github.com/jaredwray/keyv/tree/main/packages/redis#useredissets) should be configured to this redis cache. - * Defaults to true if unspecified. - */ - useRedisSets?: boolean; + /** An optional default TTL (in milliseconds, if given as a number). */ + defaultTtl?: number | HumanDuration | string; } | { store: 'memcache'; @@ -500,7 +551,7 @@ export interface Config { */ connection: string; /** An optional default TTL (in milliseconds). */ - defaultTtl?: number | HumanDuration; + defaultTtl?: number | HumanDuration | string; }; cors?: { @@ -524,6 +575,23 @@ export interface Config { */ csp?: { [policyId: string]: string[] | false }; + /** + * Options for the health check service and endpoint. + */ + health?: { + /** + * Additional headers to always include in the health check response. + * + * It can be a good idea to set a header that uniquely identifies your service + * in a multi-service environment. This ensures that the health check that is + * configured for your service is actually hitting your service and not another. + * + * For example, if using Envoy you can use the `service_name_matcher` configuration + * and set the `x-envoy-upstream-healthchecked-cluster` header to a matching value. + */ + headers?: { [name: string]: string }; + }; + /** * Configuration related to URL reading, used for example for reading catalog info * files, scaffolder templates, and techdocs content. diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 687d7379f1..c384833c55 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-defaults", - "version": "0.5.1", + "version": "0.6.0-next.2", "description": "Backend defaults used by Backstage backend apps", "backstage": { "role": "node-library" @@ -119,8 +119,9 @@ "@aws-sdk/client-s3": "^3.350.0", "@aws-sdk/credential-providers": "^3.350.0", "@aws-sdk/types": "^3.347.0", + "@azure/identity": "^4.0.0", + "@azure/storage-blob": "^12.5.0", "@backstage/backend-app-api": "workspace:^", - "@backstage/backend-common": "^0.25.0", "@backstage/backend-dev-utils": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/cli-common": "workspace:^", @@ -135,11 +136,11 @@ "@backstage/plugin-permission-node": "workspace:^", "@backstage/types": "workspace:^", "@google-cloud/storage": "^7.0.0", - "@keyv/memcache": "^1.3.5", - "@keyv/redis": "^2.5.3", + "@keyv/memcache": "^2.0.1", + "@keyv/redis": "^4.0.1", "@manypkg/get-packages": "^1.1.3", "@octokit/rest": "^19.0.3", - "@opentelemetry/api": "^1.3.0", + "@opentelemetry/api": "^1.9.0", "@types/cors": "^2.8.6", "@types/express": "^4.17.6", "archiver": "^7.0.0", @@ -157,44 +158,51 @@ "helmet": "^6.0.0", "isomorphic-git": "^1.23.0", "jose": "^5.0.0", - "keyv": "^4.5.2", + "keyv": "^5.2.1", "knex": "^3.0.0", "lodash": "^4.17.21", "logform": "^2.3.2", "luxon": "^3.0.0", "minimatch": "^9.0.0", "minimist": "^1.2.5", - "morgan": "^1.10.0", "mysql2": "^3.0.0", "node-fetch": "^2.7.0", "node-forge": "^1.3.1", "p-limit": "^3.1.0", + "p-throttle": "^4.1.1", "path-to-regexp": "^8.0.0", "pg": "^8.11.3", "pg-connection-string": "^2.3.0", "pg-format": "^1.0.4", "raw-body": "^2.4.1", "selfsigned": "^2.0.0", - "stoppable": "^1.1.0", "tar": "^6.1.12", "triple-beam": "^1.4.1", - "uuid": "^9.0.0", + "uuid": "^11.0.0", "winston": "^3.2.1", "winston-transport": "^4.5.0", "yauzl": "^3.0.0", "yn": "^4.0.0", "zod": "^3.22.4" }, + "peerDependencies": { + "@google-cloud/cloud-sql-connector": "^1.4.0" + }, + "peerDependenciesMeta": { + "@google-cloud/cloud-sql-connector": { + "optional": true + } + }, "devDependencies": { "@aws-sdk/util-stream-node": "^3.350.0", "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", + "@google-cloud/cloud-sql-connector": "^1.4.0", "@types/archiver": "^6.0.0", "@types/base64-stream": "^1.0.2", "@types/concat-stream": "^2.0.0", "@types/http-errors": "^2.0.0", - "@types/morgan": "^1.9.0", "@types/node-forge": "^1.3.0", "@types/pg-format": "^1.0.5", "@types/stoppable": "^1.1.0", @@ -202,6 +210,7 @@ "aws-sdk-client-mock": "^4.0.0", "http-errors": "^2.0.0", "msw": "^1.0.0", + "node-mocks-http": "^1.0.0", "supertest": "^7.0.0", "wait-for-expect": "^3.0.2" }, diff --git a/packages/backend-defaults/report-auth.api.md b/packages/backend-defaults/report-auth.api.md index 2f201e4573..1883e65a6a 100644 --- a/packages/backend-defaults/report-auth.api.md +++ b/packages/backend-defaults/report-auth.api.md @@ -5,6 +5,7 @@ ```ts import { AuthService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; +import { ServiceRef } from '@backstage/backend-plugin-api'; // @public export const authServiceFactory: ServiceFactory< @@ -13,5 +14,35 @@ export const authServiceFactory: ServiceFactory< 'singleton' >; +// @public +export interface PluginTokenHandler { + // (undocumented) + issueToken(options: { + pluginId: string; + targetPluginId: string; + onBehalfOf?: { + limitedUserToken: string; + expiresAt: Date; + }; + }): Promise<{ + token: string; + }>; + // (undocumented) + verifyToken(token: string): Promise< + | { + subject: string; + limitedUserToken?: string; + } + | undefined + >; +} + +// @public +export const pluginTokenHandlerDecoratorServiceRef: ServiceRef< + (defaultImplementation: PluginTokenHandler) => PluginTokenHandler, + 'plugin', + 'singleton' +>; + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/report-httpAuth.api.md b/packages/backend-defaults/report-httpAuth.api.md index 6c08a6f4d0..b3843beb3d 100644 --- a/packages/backend-defaults/report-httpAuth.api.md +++ b/packages/backend-defaults/report-httpAuth.api.md @@ -3,9 +3,51 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { AuthService } from '@backstage/backend-plugin-api'; +import { BackstageCredentials } from '@backstage/backend-plugin-api'; +import { BackstagePrincipalTypes } from '@backstage/backend-plugin-api'; +import { DiscoveryService } from '@backstage/backend-plugin-api'; import { HttpAuthService } from '@backstage/backend-plugin-api'; +import { Request as Request_2 } from 'express'; +import { Response as Response_2 } from 'express'; import { ServiceFactory } from '@backstage/backend-plugin-api'; +// @public +export class DefaultHttpAuthService implements HttpAuthService { + // (undocumented) + static create(options: DefaultHttpAuthServiceOptions): DefaultHttpAuthService; + // (undocumented) + credentials( + req: Request_2, + options?: { + allow?: Array; + allowLimitedAccess?: boolean; + }, + ): Promise>; + // (undocumented) + issueUserCookie( + res: Response_2, + options?: { + credentials?: BackstageCredentials; + }, + ): Promise<{ + expiresAt: Date; + }>; +} + +// @public +export interface DefaultHttpAuthServiceOptions { + // (undocumented) + auth: AuthService; + // (undocumented) + discovery: DiscoveryService; + getTokenFromRequest?: (req: Request_2) => { + token?: string; + }; + // (undocumented) + pluginId: string; +} + // @public export const httpAuthServiceFactory: ServiceFactory< HttpAuthService, diff --git a/packages/backend-defaults/report-httpRouter.api.md b/packages/backend-defaults/report-httpRouter.api.md index 97805bc926..4f6c6f06dc 100644 --- a/packages/backend-defaults/report-httpRouter.api.md +++ b/packages/backend-defaults/report-httpRouter.api.md @@ -3,9 +3,45 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +/// + +import { AuthService } from '@backstage/backend-plugin-api'; +import express from 'express'; +import { HttpAuthService } from '@backstage/backend-plugin-api'; import { HttpRouterService } from '@backstage/backend-plugin-api'; +import { HttpRouterServiceAuthPolicy } from '@backstage/backend-plugin-api'; +import { HumanDuration } from '@backstage/types'; +import { LifecycleService } from '@backstage/backend-plugin-api'; +import { RequestHandler } from 'express'; +import { RootConfigService } from '@backstage/backend-plugin-api'; +import { Router } from 'express'; import { ServiceFactory } from '@backstage/backend-plugin-api'; +// @public (undocumented) +export function createAuthIntegrationRouter(options: { + auth: AuthService; +}): express.Router; + +// @public +export function createCookieAuthRefreshMiddleware(options: { + auth: AuthService; + httpAuth: HttpAuthService; +}): Router; + +// @public (undocumented) +export function createCredentialsBarrier(options: { + httpAuth: HttpAuthService; + config: RootConfigService; +}): { + middleware: RequestHandler; + addAuthPolicy: (policy: HttpRouterServiceAuthPolicy) => void; +}; + +// @public +export function createLifecycleMiddleware( + options: LifecycleMiddlewareOptions, +): RequestHandler; + // @public export const httpRouterServiceFactory: ServiceFactory< HttpRouterService, @@ -13,5 +49,12 @@ export const httpRouterServiceFactory: ServiceFactory< 'singleton' >; +// @public +export interface LifecycleMiddlewareOptions { + // (undocumented) + lifecycle: LifecycleService; + startupRequestPauseTimeout?: HumanDuration; +} + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/report-rootHttpRouter.api.md b/packages/backend-defaults/report-rootHttpRouter.api.md index 3686f25a12..4489fed107 100644 --- a/packages/backend-defaults/report-rootHttpRouter.api.md +++ b/packages/backend-defaults/report-rootHttpRouter.api.md @@ -27,6 +27,7 @@ import { ServiceFactory } from '@backstage/backend-plugin-api'; // @public (undocumented) export function createHealthRouter(options: { health: RootHealthService; + config: RootConfigService; }): Router; // @public @@ -133,6 +134,8 @@ export interface RootHttpRouterConfigureContext { // (undocumented) lifecycle: LifecycleService; // (undocumented) + lifecycleMiddleware: RequestHandler; + // (undocumented) logger: LoggerService; // (undocumented) middleware: MiddlewareFactory; diff --git a/packages/backend-defaults/report-urlReader.api.md b/packages/backend-defaults/report-urlReader.api.md index f8b8db2954..efe4a9ae47 100644 --- a/packages/backend-defaults/report-urlReader.api.md +++ b/packages/backend-defaults/report-urlReader.api.md @@ -7,6 +7,8 @@ import { AwsCredentialsManager } from '@backstage/integration-aws-node'; import { AwsS3Integration } from '@backstage/integration'; +import { AzureBlobStorageIntergation } from '@backstage/integration'; +import { AzureCredentialsManager } from '@backstage/integration'; import { AzureDevOpsCredentialsProvider } from '@backstage/integration'; import { AzureIntegration } from '@backstage/integration'; import { BitbucketCloudIntegration } from '@backstage/integration'; @@ -60,6 +62,35 @@ export class AwsS3UrlReader implements UrlReaderService { toString(): string; } +// @public +export class AzureBlobStorageUrlReader implements UrlReaderService { + constructor( + credsManager: AzureCredentialsManager, + integration: AzureBlobStorageIntergation, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderServiceReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderServiceReadUrlOptions, + ): Promise; + // (undocumented) + search(): Promise; + // (undocumented) + toString(): string; +} + // @public export class AzureUrlReader implements UrlReaderService { constructor( @@ -384,17 +415,29 @@ export interface ReadTreeResponseFactory { } // @public -export type ReadTreeResponseFactoryOptions = { - stream: Readable; - subpath?: string; - etag: string; - filter?: ( - path: string, - info?: { - size: number; - }, - ) => boolean; -}; +export type ReadTreeResponseFactoryOptions = + | { + stream: Readable; + subpath?: string; + etag: string; + filter?: ( + path: string, + info?: { + size: number; + }, + ) => boolean; + } + | { + response: Response; + subpath?: string; + etag?: string; + filter?: ( + path: string, + info?: { + size: number; + }, + ) => boolean; + }; // @public export class ReadUrlResponseFactory { @@ -406,6 +449,9 @@ export class ReadUrlResponseFactory { stream: Readable, options?: ReadUrlResponseFactoryFromStreamOptions, ): Promise; + static fromResponse( + response: Response, + ): Promise; } // @public diff --git a/packages/backend-defaults/src/CreateBackend.test.ts b/packages/backend-defaults/src/CreateBackend.test.ts index 55fdbe5a6a..57977e9647 100644 --- a/packages/backend-defaults/src/CreateBackend.test.ts +++ b/packages/backend-defaults/src/CreateBackend.test.ts @@ -47,6 +47,7 @@ describe('createBackend', () => { deps: {}, factory: async () => ({ addStartupHook: () => {}, + addBeforeShutdownHook: () => {}, addShutdownHook: () => {}, }), }), @@ -57,6 +58,7 @@ describe('createBackend', () => { deps: {}, factory: async () => ({ addStartupHook: () => {}, + addBeforeShutdownHook: () => {}, addShutdownHook: () => {}, }), }), diff --git a/packages/backend-defaults/src/entrypoints/auth/DefaultAuthService.ts b/packages/backend-defaults/src/entrypoints/auth/DefaultAuthService.ts index 05d62a54a2..a81a99fec7 100644 --- a/packages/backend-defaults/src/entrypoints/auth/DefaultAuthService.ts +++ b/packages/backend-defaults/src/entrypoints/auth/DefaultAuthService.ts @@ -169,7 +169,10 @@ export class DefaultAuthService implements AuthService { return this.pluginTokenHandler.issueToken({ pluginId: this.pluginId, targetPluginId, - onBehalfOf, + onBehalfOf: { + limitedUserToken: onBehalfOf.token, + expiresAt: onBehalfOf.expiresAt, + }, }); } default: diff --git a/packages/backend-defaults/src/entrypoints/auth/authServiceFactory.test.ts b/packages/backend-defaults/src/entrypoints/auth/authServiceFactory.test.ts index cb672ed7f1..a244614135 100644 --- a/packages/backend-defaults/src/entrypoints/auth/authServiceFactory.test.ts +++ b/packages/backend-defaults/src/entrypoints/auth/authServiceFactory.test.ts @@ -19,12 +19,17 @@ import { mockServices, registerMswTestHooks, } from '@backstage/backend-test-utils'; -import { authServiceFactory } from './authServiceFactory'; +import { + authServiceFactory, + pluginTokenHandlerDecoratorServiceRef, +} from './authServiceFactory'; import { base64url, decodeJwt } from 'jose'; import { discoveryServiceFactory } from '../discovery'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { toInternalBackstageCredentials } from './helpers'; +import { PluginTokenHandler } from './plugin/PluginTokenHandler'; +import { createServiceFactory } from '@backstage/backend-plugin-api'; const server = setupServer(); @@ -104,8 +109,9 @@ describe('authServiceFactory', () => { }); it('should authenticate issued tokens with new auth', async () => { + const logger = mockServices.logger.mock(); const tester = ServiceFactoryTester.from(authServiceFactory, { - dependencies: mockDeps, + dependencies: [...mockDeps, logger.factory], }); const searchAuth = await tester.getSubject('search'); @@ -129,8 +135,13 @@ describe('authServiceFactory', () => { targetPluginId: 'catalog', }); + expect(logger.warn).not.toHaveBeenCalled(); await expect(searchAuth.authenticate(searchToken)).rejects.toThrow( - 'Invalid plugin token', + 'Failed plugin token verification', + ); + expect(logger.warn).toHaveBeenCalledWith( + 'Failed to verify incoming plugin token', + expect.any(Error), ); await expect(catalogAuth.authenticate(searchToken)).resolves.toEqual( expect.objectContaining({ @@ -407,4 +418,40 @@ describe('authServiceFactory', () => { principal: { subject: 'unlimited-static-subject' }, }); }); + + describe('decorate PluginTokenHandler', () => { + it('should allow custom logic to be injected into the plugin token handler', async () => { + const customLogic = jest.fn(); + const customPluginTokenHandler = createServiceFactory({ + service: pluginTokenHandlerDecoratorServiceRef, + deps: {}, + async factory() { + return (defaultImplementation: PluginTokenHandler) => + new (class CustomHandler implements PluginTokenHandler { + verifyToken( + token: string, + ): Promise< + { subject: string; limitedUserToken?: string } | undefined + > { + customLogic(token); + return defaultImplementation.verifyToken(token); + } + issueToken(options: { + pluginId: string; + targetPluginId: string; + limitedUserToken?: { token: string; expiresAt: Date }; + }): Promise<{ token: string }> { + return defaultImplementation.issueToken(options); + } + })(); + }, + }); + const tester = ServiceFactoryTester.from(authServiceFactory, { + dependencies: [...mockDeps, customPluginTokenHandler], + }); + const searchAuth = await tester.getSubject('search'); + searchAuth.authenticate('unlimited-static-token'); + expect(customLogic).toHaveBeenCalledWith('unlimited-static-token'); + }); + }); }); diff --git a/packages/backend-defaults/src/entrypoints/auth/authServiceFactory.ts b/packages/backend-defaults/src/entrypoints/auth/authServiceFactory.ts index 34071ca541..91910292e6 100644 --- a/packages/backend-defaults/src/entrypoints/auth/authServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/auth/authServiceFactory.ts @@ -17,13 +17,35 @@ import { coreServices, createServiceFactory, + createServiceRef, } from '@backstage/backend-plugin-api'; import { DefaultAuthService } from './DefaultAuthService'; import { ExternalTokenHandler } from './external/ExternalTokenHandler'; -import { PluginTokenHandler } from './plugin/PluginTokenHandler'; +import { + DefaultPluginTokenHandler, + PluginTokenHandler, +} from './plugin/PluginTokenHandler'; import { createPluginKeySource } from './plugin/keys/createPluginKeySource'; import { UserTokenHandler } from './user/UserTokenHandler'; +/** + * @public + * This service is used to decorate the default plugin token handler with custom logic. + */ +export const pluginTokenHandlerDecoratorServiceRef = createServiceRef< + (defaultImplementation: PluginTokenHandler) => PluginTokenHandler +>({ + id: 'core.auth.pluginTokenHandlerDecorator', + defaultFactory: async service => + createServiceFactory({ + service, + deps: {}, + factory: async () => { + return impl => impl; + }, + }), +}); + /** * Handles token authentication and credentials management. * @@ -37,12 +59,20 @@ export const authServiceFactory = createServiceFactory({ service: coreServices.auth, deps: { config: coreServices.rootConfig, - logger: coreServices.rootLogger, + logger: coreServices.logger, discovery: coreServices.discovery, plugin: coreServices.pluginMetadata, database: coreServices.database, + pluginTokenHandlerDecorator: pluginTokenHandlerDecoratorServiceRef, }, - async factory({ config, discovery, plugin, logger, database }) { + async factory({ + config, + discovery, + plugin, + logger, + database, + pluginTokenHandlerDecorator, + }) { const disableDefaultAuthPolicy = config.getOptionalBoolean( 'backend.auth.dangerouslyDisableDefaultAuthPolicy', @@ -59,15 +89,18 @@ export const authServiceFactory = createServiceFactory({ const userTokens = UserTokenHandler.create({ discovery, + logger, }); - const pluginTokens = PluginTokenHandler.create({ - ownPluginId: plugin.getId(), - logger, - keySource, - keyDuration, - discovery, - }); + const pluginTokens = pluginTokenHandlerDecorator( + DefaultPluginTokenHandler.create({ + ownPluginId: plugin.getId(), + logger, + keySource, + keyDuration, + discovery, + }), + ); const externalTokens = ExternalTokenHandler.create({ ownPluginId: plugin.getId(), diff --git a/packages/backend-defaults/src/entrypoints/auth/index.ts b/packages/backend-defaults/src/entrypoints/auth/index.ts index 1b55d46a83..e48926f0ce 100644 --- a/packages/backend-defaults/src/entrypoints/auth/index.ts +++ b/packages/backend-defaults/src/entrypoints/auth/index.ts @@ -14,4 +14,9 @@ * limitations under the License. */ -export { authServiceFactory } from './authServiceFactory'; +export { + authServiceFactory, + pluginTokenHandlerDecoratorServiceRef, +} from './authServiceFactory'; + +export type { PluginTokenHandler } from './plugin/PluginTokenHandler'; diff --git a/packages/backend-defaults/src/entrypoints/auth/plugin/PluginTokenHandler.test.ts b/packages/backend-defaults/src/entrypoints/auth/plugin/PluginTokenHandler.test.ts index ce470eff04..558bc5d0da 100644 --- a/packages/backend-defaults/src/entrypoints/auth/plugin/PluginTokenHandler.test.ts +++ b/packages/backend-defaults/src/entrypoints/auth/plugin/PluginTokenHandler.test.ts @@ -15,7 +15,7 @@ */ import { mockServices } from '@backstage/backend-test-utils'; -import { PluginTokenHandler } from './PluginTokenHandler'; +import { DefaultPluginTokenHandler } from './PluginTokenHandler'; import { decodeJwt } from 'jose'; describe('PluginTokenHandler', () => { @@ -42,7 +42,7 @@ describe('PluginTokenHandler', () => { }); const getKeyMock = jest.fn(async () => mockPrivateKey); - const handler = PluginTokenHandler.create({ + const handler = DefaultPluginTokenHandler.create({ discovery: mockServices.discovery(), keyDuration: { seconds: 10 }, logger: mockServices.logger.mock(), diff --git a/packages/backend-defaults/src/entrypoints/auth/plugin/PluginTokenHandler.ts b/packages/backend-defaults/src/entrypoints/auth/plugin/PluginTokenHandler.ts index ff594ecbd4..9aec52bc08 100644 --- a/packages/backend-defaults/src/entrypoints/auth/plugin/PluginTokenHandler.ts +++ b/packages/backend-defaults/src/entrypoints/auth/plugin/PluginTokenHandler.ts @@ -16,7 +16,7 @@ import { DiscoveryService, LoggerService } from '@backstage/backend-plugin-api'; import { decodeJwt, importJWK, SignJWT, decodeProtectedHeader } from 'jose'; -import { AuthenticationError } from '@backstage/errors'; +import { assertError, AuthenticationError } from '@backstage/errors'; import { jwtVerify } from 'jose'; import { tokenTypes } from '@backstage/plugin-auth-node'; import { JwksClient } from '../JwksClient'; @@ -44,7 +44,22 @@ type Options = { algorithm?: string; }; -export class PluginTokenHandler { +/** + * @public + * Issues and verifies {@link https://backstage.iceio/docs/auth/service-to-service-auth | service-to-service tokens}. + */ +export interface PluginTokenHandler { + verifyToken( + token: string, + ): Promise<{ subject: string; limitedUserToken?: string } | undefined>; + issueToken(options: { + pluginId: string; + targetPluginId: string; + onBehalfOf?: { limitedUserToken: string; expiresAt: Date }; + }): Promise<{ token: string }>; +} + +export class DefaultPluginTokenHandler implements PluginTokenHandler { private jwksMap = new Map(); // Tracking state for isTargetPluginSupported @@ -52,7 +67,7 @@ export class PluginTokenHandler { private targetPluginInflightChecks = new Map>(); static create(options: Options) { - return new PluginTokenHandler( + return new DefaultPluginTokenHandler( options.logger, options.ownPluginId, options.keySource, @@ -105,7 +120,8 @@ export class PluginTokenHandler { requiredClaims: ['iat', 'exp', 'sub', 'aud'], }, ).catch(e => { - throw new AuthenticationError('Invalid plugin token', e); + this.logger.warn('Failed to verify incoming plugin token', e); + throw new AuthenticationError('Failed plugin token verification'); }); return { subject: `plugin:${payload.sub}`, limitedUserToken: payload.obo }; @@ -114,7 +130,7 @@ export class PluginTokenHandler { async issueToken(options: { pluginId: string; targetPluginId: string; - onBehalfOf?: { token: string; expiresAt: Date }; + onBehalfOf?: { limitedUserToken: string; expiresAt: Date }; }): Promise<{ token: string }> { const { pluginId, targetPluginId, onBehalfOf } = options; const key = await this.keySource.getPrivateSigningKey(); @@ -130,7 +146,7 @@ export class PluginTokenHandler { ) : ourExp; - const claims = { sub, aud, iat, exp, obo: onBehalfOf?.token }; + const claims = { sub, aud, iat, exp, obo: onBehalfOf?.limitedUserToken }; const token = await new SignJWT(claims) .setProtectedHeader({ typ: tokenTypes.plugin.typParam, @@ -180,6 +196,7 @@ export class PluginTokenHandler { this.supportedTargetPlugins.add(targetPluginId); return true; } catch (error) { + assertError(error); this.logger.error('Unexpected failure for target JWKS check', error); return false; } finally { diff --git a/packages/backend-defaults/src/entrypoints/auth/plugin/keys/DatabaseKeyStore.test.ts b/packages/backend-defaults/src/entrypoints/auth/plugin/keys/DatabaseKeyStore.test.ts index 551cccaf73..feb253e7ed 100644 --- a/packages/backend-defaults/src/entrypoints/auth/plugin/keys/DatabaseKeyStore.test.ts +++ b/packages/backend-defaults/src/entrypoints/auth/plugin/keys/DatabaseKeyStore.test.ts @@ -46,7 +46,7 @@ describe('DatabaseKeyStore', () => { knex, logger, keyStore: await DatabaseKeyStore.create({ - database: { getClient: async () => knex }, + database: mockServices.database({ knex }), logger, }), }; diff --git a/packages/backend-defaults/src/entrypoints/auth/user/UserTokenHandler.test.ts b/packages/backend-defaults/src/entrypoints/auth/user/UserTokenHandler.test.ts index e85ec8db63..251e4c3adf 100644 --- a/packages/backend-defaults/src/entrypoints/auth/user/UserTokenHandler.test.ts +++ b/packages/backend-defaults/src/entrypoints/auth/user/UserTokenHandler.test.ts @@ -64,13 +64,17 @@ async function createToken(options: { describe('UserTokenHandler', () => { let userTokenHandler: UserTokenHandler; + const logger = mockServices.logger.mock(); + registerMswTestHooks(server); beforeEach(() => { jest.useRealTimers(); + jest.resetAllMocks(); userTokenHandler = UserTokenHandler.create({ discovery: mockServices.discovery(), + logger, }); server.use( @@ -120,7 +124,7 @@ describe('UserTokenHandler', () => { signature: 'sig', }), ), - ).rejects.toThrow('signature verification failed'); + ).rejects.toThrow('Failed user token verification'); await expect( userTokenHandler.verifyToken( @@ -130,7 +134,7 @@ describe('UserTokenHandler', () => { signature: 'sig', }), ), - ).rejects.toThrow('signature verification failed'); + ).rejects.toThrow('Failed user token verification'); }); it('should fail to verify tokens that have a bad alg', async () => { @@ -156,8 +160,13 @@ describe('UserTokenHandler', () => { }); const token = `${header}.${payload}.`; + expect(logger.warn).not.toHaveBeenCalled(); await expect(userTokenHandler.verifyToken(token)).rejects.toThrow( - /Unsupported "alg" value/, + 'Failed user token verification', + ); + expect(logger.warn).toHaveBeenCalledWith( + 'Failed to verify incoming user token', + expect.any(Error), ); }); diff --git a/packages/backend-defaults/src/entrypoints/auth/user/UserTokenHandler.ts b/packages/backend-defaults/src/entrypoints/auth/user/UserTokenHandler.ts index 4dd1874843..d205fa6b82 100644 --- a/packages/backend-defaults/src/entrypoints/auth/user/UserTokenHandler.ts +++ b/packages/backend-defaults/src/entrypoints/auth/user/UserTokenHandler.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { DiscoveryService } from '@backstage/backend-plugin-api'; +import { DiscoveryService, LoggerService } from '@backstage/backend-plugin-api'; import { AuthenticationError } from '@backstage/errors'; import { tokenTypes } from '@backstage/plugin-auth-node'; import { @@ -33,15 +33,21 @@ import { JwksClient } from '../JwksClient'; * @internal */ export class UserTokenHandler { - static create(options: { discovery: DiscoveryService }): UserTokenHandler { + static create(options: { + discovery: DiscoveryService; + logger: LoggerService; + }): UserTokenHandler { const jwksClient = new JwksClient(async () => { const url = await options.discovery.getBaseUrl('auth'); return new URL(`${url}/.well-known/jwks.json`); }); - return new UserTokenHandler(jwksClient); + return new UserTokenHandler(jwksClient, options.logger); } - constructor(private readonly jwksClient: JwksClient) {} + constructor( + private readonly jwksClient: JwksClient, + private readonly logger: LoggerService, + ) {} async verifyToken(token: string) { const verifyOpts = this.#getTokenVerificationOptions(token); @@ -57,7 +63,8 @@ export class UserTokenHandler { this.jwksClient.getKey, verifyOpts, ).catch(e => { - throw new AuthenticationError('Invalid token', e); + this.logger.warn('Failed to verify incoming user token', e); + throw new AuthenticationError('Failed user token verification'); }); const userEntityRef = payload.sub; diff --git a/packages/backend-defaults/src/entrypoints/cache/CacheManager.test.ts b/packages/backend-defaults/src/entrypoints/cache/CacheManager.test.ts index 997739faa2..d15671d5d2 100644 --- a/packages/backend-defaults/src/entrypoints/cache/CacheManager.test.ts +++ b/packages/backend-defaults/src/entrypoints/cache/CacheManager.test.ts @@ -25,15 +25,21 @@ import { CacheManager } from './CacheManager'; // Contrived code because it's hard to spy on a default export jest.mock('@keyv/redis', () => { const Actual = jest.requireActual('@keyv/redis'); - return jest.fn((...args: any[]) => { - return new Actual(...args); - }); + const DefaultConstructor = Actual.default; + return { + ...Actual, + __esModule: true, + default: jest.fn((...args: any[]) => new DefaultConstructor(...args)), + }; }); jest.mock('@keyv/memcache', () => { const Actual = jest.requireActual('@keyv/memcache'); - return jest.fn((...args: any[]) => { - return new Actual(...args); - }); + const DefaultConstructor = Actual.default; + return { + ...Actual, + __esModule: true, + default: jest.fn((...args: any[]) => new DefaultConstructor(...args)), + }; }); describe('CacheManager integration', () => { @@ -42,7 +48,7 @@ describe('CacheManager integration', () => { afterEach(jest.clearAllMocks); it.each(caches.eachSupportedId())( - 'only creates one underlying connection, %p', + 'only creates one underlying connection per plugin, %p', async cacheId => { const { store, connection } = await caches.init(cacheId); @@ -59,10 +65,10 @@ describe('CacheManager integration', () => { if (store === 'redis') { // eslint-disable-next-line jest/no-conditional-expect - expect(KeyvRedis).toHaveBeenCalledTimes(1); + expect(KeyvRedis).toHaveBeenCalledTimes(3); } else if (store === 'memcache') { // eslint-disable-next-line jest/no-conditional-expect - expect(KeyvMemcache).toHaveBeenCalledTimes(1); + expect(KeyvMemcache).toHaveBeenCalledTimes(3); } }, ); @@ -185,6 +191,6 @@ describe('CacheManager integration', () => { }, }), ), - ).toThrow(/Invalid configuration backend.cache.defaultTtl/); + ).toThrow(/Invalid duration 'hello' in config/); }); }); diff --git a/packages/backend-defaults/src/entrypoints/cache/CacheManager.ts b/packages/backend-defaults/src/entrypoints/cache/CacheManager.ts index a54959f155..57c326f00d 100644 --- a/packages/backend-defaults/src/entrypoints/cache/CacheManager.ts +++ b/packages/backend-defaults/src/entrypoints/cache/CacheManager.ts @@ -24,6 +24,7 @@ import Keyv from 'keyv'; import { DefaultCacheClient } from './CacheClient'; import { CacheManagerOptions, ttlToMilliseconds } from './types'; import { durationToMilliseconds } from '@backstage/types'; +import { readDurationFromConfig } from '@backstage/config'; type StoreFactory = (pluginId: string, defaultTtl: number | undefined) => Keyv; @@ -48,7 +49,6 @@ export class CacheManager { private readonly logger?: LoggerService; private readonly store: keyof CacheManager['storeFactories']; private readonly connection: string; - private readonly useRedisSets: boolean; private readonly errorHandler: CacheManagerOptions['onError']; private readonly defaultTtl?: number; @@ -68,24 +68,23 @@ export class CacheManager { const defaultTtlConfig = config.getOptional('backend.cache.defaultTtl'); const connectionString = config.getOptionalString('backend.cache.connection') || ''; - const useRedisSets = - config.getOptionalBoolean('backend.cache.useRedisSets') ?? true; const logger = options.logger?.child({ type: 'cacheManager', }); + if (config.has('backend.cache.useRedisSets')) { + logger?.warn( + "The 'backend.cache.useRedisSets' configuration key is deprecated and no longer has any effect. The underlying '@keyv/redis' library no longer supports redis sets.", + ); + } + let defaultTtl: number | undefined; - if (defaultTtlConfig !== undefined && defaultTtlConfig !== null) { + if (defaultTtlConfig !== undefined) { if (typeof defaultTtlConfig === 'number') { defaultTtl = defaultTtlConfig; - } else if ( - typeof defaultTtlConfig === 'object' && - !Array.isArray(defaultTtlConfig) - ) { - defaultTtl = durationToMilliseconds(defaultTtlConfig); } else { - throw new Error( - `Invalid configuration backend.cache.defaultTtl: ${defaultTtlConfig}, expected milliseconds number or HumanDuration object`, + defaultTtl = durationToMilliseconds( + readDurationFromConfig(config, { key: 'backend.cache.defaultTtl' }), ); } } @@ -93,7 +92,6 @@ export class CacheManager { return new CacheManager( store, connectionString, - useRedisSets, options.onError, logger, defaultTtl, @@ -104,7 +102,6 @@ export class CacheManager { constructor( store: string, connectionString: string, - useRedisSets: boolean, errorHandler: CacheManagerOptions['onError'], logger?: LoggerService, defaultTtl?: number, @@ -115,7 +112,6 @@ export class CacheManager { this.logger = logger; this.store = store as keyof CacheManager['storeFactories']; this.connection = connectionString; - this.useRedisSets = useRedisSets; this.errorHandler = errorHandler; this.defaultTtl = defaultTtl; } @@ -143,15 +139,16 @@ export class CacheManager { } private createRedisStoreFactory(): StoreFactory { - const KeyvRedis = require('@keyv/redis'); - let store: typeof KeyvRedis | undefined; + const KeyvRedis = require('@keyv/redis').default; + const stores: Record = {}; + return (pluginId, defaultTtl) => { - if (!store) { - store = new KeyvRedis(this.connection, { - useRedisSets: this.useRedisSets, + if (!stores[pluginId]) { + stores[pluginId] = new KeyvRedis(this.connection, { + keyPrefixSeparator: ':', }); // Always provide an error handler to avoid stopping the process - store.on('error', (err: Error) => { + stores[pluginId].on('error', (err: Error) => { this.logger?.error('Failed to create redis cache client', err); this.errorHandler?.(err); }); @@ -159,21 +156,22 @@ export class CacheManager { return new Keyv({ namespace: pluginId, ttl: defaultTtl, - store, + store: stores[pluginId], emitErrors: false, - useRedisSets: this.useRedisSets, + useKeyPrefix: false, }); }; } private createMemcacheStoreFactory(): StoreFactory { - const KeyvMemcache = require('@keyv/memcache'); - let store: typeof KeyvMemcache | undefined; + const KeyvMemcache = require('@keyv/memcache').default; + const stores: Record = {}; + return (pluginId, defaultTtl) => { - if (!store) { - store = new KeyvMemcache(this.connection); + if (!stores[pluginId]) { + stores[pluginId] = new KeyvMemcache(this.connection); // Always provide an error handler to avoid stopping the process - store.on('error', (err: Error) => { + stores[pluginId].on('error', (err: Error) => { this.logger?.error('Failed to create memcache cache client', err); this.errorHandler?.(err); }); @@ -182,7 +180,7 @@ export class CacheManager { namespace: pluginId, ttl: defaultTtl, emitErrors: false, - store, + store: stores[pluginId], }); }; } diff --git a/packages/backend-defaults/src/entrypoints/database/DatabaseManager.test.ts b/packages/backend-defaults/src/entrypoints/database/DatabaseManager.test.ts index 27cb511477..fb8e4011a8 100644 --- a/packages/backend-defaults/src/entrypoints/database/DatabaseManager.test.ts +++ b/packages/backend-defaults/src/entrypoints/database/DatabaseManager.test.ts @@ -106,12 +106,8 @@ describe('DatabaseManagerImpl', () => { const impl = new DatabaseManagerImpl( new ConfigReader({ client: 'pg', - backend: { - database: { - skipMigrations: true, - plugin: { plugin1: { skipMigrations: true } }, - }, - }, + skipMigrations: true, + plugin: { plugin1: { skipMigrations: true } }, }), { pg: connector, @@ -139,9 +135,7 @@ describe('DatabaseManagerImpl', () => { const impl = new DatabaseManagerImpl( new ConfigReader({ client: 'pg', - backend: { - database: { plugin: { plugin1: { skipMigrations: true } } }, - }, + plugin: { plugin1: { skipMigrations: true } }, }), { pg: connector, @@ -158,12 +152,8 @@ describe('DatabaseManagerImpl', () => { const impl2 = new DatabaseManagerImpl( new ConfigReader({ client: 'pg', - backend: { - database: { - skipMigrations: true, - plugin: { plugin1: { skipMigrations: false } }, - }, - }, + skipMigrations: true, + plugin: { plugin1: { skipMigrations: false } }, }), { pg: connector, diff --git a/packages/backend-defaults/src/entrypoints/database/DatabaseManager.ts b/packages/backend-defaults/src/entrypoints/database/DatabaseManager.ts index 7fddb17987..75e7d35eee 100644 --- a/packages/backend-defaults/src/entrypoints/database/DatabaseManager.ts +++ b/packages/backend-defaults/src/entrypoints/database/DatabaseManager.ts @@ -96,10 +96,8 @@ export class DatabaseManagerImpl { const skip = this.options?.migrations?.skip ?? - this.config.getOptionalBoolean( - `backend.database.plugin.${pluginId}.skipMigrations`, - ) ?? - this.config.getOptionalBoolean('backend.database.skipMigrations') ?? + this.config.getOptionalBoolean(`plugin.${pluginId}.skipMigrations`) ?? + this.config.getOptionalBoolean('skipMigrations') ?? false; return { getClient, migrations: { skip } }; diff --git a/packages/backend-defaults/src/entrypoints/database/connectors/postgres.test.ts b/packages/backend-defaults/src/entrypoints/database/connectors/postgres.test.ts index 1e07984967..1a3691c83b 100644 --- a/packages/backend-defaults/src/entrypoints/database/connectors/postgres.test.ts +++ b/packages/backend-defaults/src/entrypoints/database/connectors/postgres.test.ts @@ -22,6 +22,8 @@ import { parsePgConnectionString, } from './postgres'; +jest.mock('@google-cloud/cloud-sql-connector'); + describe('postgres', () => { const createMockConnection = () => ({ host: 'acme', @@ -37,33 +39,35 @@ describe('postgres', () => { new ConfigReader({ client: 'pg', connection }); describe('buildPgDatabaseConfig', () => { - it('builds a postgres config', () => { + it('builds a postgres config', async () => { const mockConnection = createMockConnection(); - expect(buildPgDatabaseConfig(createConfig(mockConnection))).toEqual({ - client: 'pg', - connection: mockConnection, - useNullAsDefault: true, - }); - }); - - it('builds a connection string config', () => { - const mockConnectionString = createMockConnectionString(); - - expect(buildPgDatabaseConfig(createConfig(mockConnectionString))).toEqual( + expect(await buildPgDatabaseConfig(createConfig(mockConnection))).toEqual( { client: 'pg', - connection: mockConnectionString, + connection: mockConnection, useNullAsDefault: true, }, ); }); - it('overrides the database name', () => { + it('builds a connection string config', async () => { + const mockConnectionString = createMockConnectionString(); + + expect( + await buildPgDatabaseConfig(createConfig(mockConnectionString)), + ).toEqual({ + client: 'pg', + connection: mockConnectionString, + useNullAsDefault: true, + }); + }); + + it('overrides the database name', async () => { const mockConnection = createMockConnection(); expect( - buildPgDatabaseConfig(createConfig(mockConnection), { + await buildPgDatabaseConfig(createConfig(mockConnection), { connection: { database: 'other_db' }, }), ).toEqual({ @@ -76,14 +80,14 @@ describe('postgres', () => { }); }); - it('overrides the schema name', () => { + it('overrides the schema name', async () => { const mockConnection = { ...createMockConnection(), schema: 'schemaName', }; expect( - buildPgDatabaseConfig(createConfig(mockConnection), { + await buildPgDatabaseConfig(createConfig(mockConnection), { searchPath: ['schemaName'], }), ).toEqual({ @@ -94,11 +98,11 @@ describe('postgres', () => { }); }); - it('adds additional config settings', () => { + it('adds additional config settings', async () => { const mockConnection = createMockConnection(); expect( - buildPgDatabaseConfig(createConfig(mockConnection), { + await buildPgDatabaseConfig(createConfig(mockConnection), { connection: { database: 'other_db' }, pool: { min: 0, max: 7 }, debug: true, @@ -115,12 +119,12 @@ describe('postgres', () => { }); }); - it('overrides the database from connection string', () => { + it('overrides the database from connection string', async () => { const mockConnectionString = createMockConnectionString(); const mockConnection = createMockConnection(); expect( - buildPgDatabaseConfig(createConfig(mockConnectionString), { + await buildPgDatabaseConfig(createConfig(mockConnectionString), { connection: { database: 'other_db' }, }), ).toEqual({ @@ -133,6 +137,124 @@ describe('postgres', () => { useNullAsDefault: true, }); }); + + it('uses the correct config when using cloudsql', async () => { + expect( + await buildPgDatabaseConfig( + new ConfigReader({ + client: 'pg', + connection: { + type: 'cloudsql', + user: 'ben@gke.com', + instance: 'project:region:instance', + port: 5423, + }, + }), + { connection: { database: 'other_db' } }, + ), + ).toEqual({ + client: 'pg', + connection: { + user: 'ben@gke.com', + port: 5423, + database: 'other_db', + }, + useNullAsDefault: true, + }); + }); + + it('should throw with incorrect config', async () => { + await expect( + buildPgDatabaseConfig( + new ConfigReader({ + client: 'pg', + connection: { + type: 'cloudsql', + }, + }), + ), + ).rejects.toThrow(/Missing instance connection name for Cloud SQL/); + + await expect( + buildPgDatabaseConfig( + new ConfigReader({ + client: 'not-pg', + connection: { + type: 'cloudsql', + instance: 'asd:asd:asd', + }, + }), + ), + ).rejects.toThrow(/Cloud SQL only supports the pg client/); + }); + + it('adds the settings from cloud-sql-connector', async () => { + const { Connector } = jest.requireMock( + '@google-cloud/cloud-sql-connector', + ) as jest.Mocked; + + const mockStream = (): any => {}; + Connector.prototype.getOptions.mockResolvedValue({ stream: mockStream }); + + expect( + await buildPgDatabaseConfig( + new ConfigReader({ + client: 'pg', + connection: { + type: 'cloudsql', + user: 'ben@gke.com', + instance: 'project:region:instance', + port: 5423, + }, + }), + { connection: { database: 'other_db' } }, + ), + ).toEqual({ + client: 'pg', + connection: { + user: 'ben@gke.com', + port: 5423, + stream: mockStream, + database: 'other_db', + }, + useNullAsDefault: true, + }); + }); + + it('throws an error when the connection type is not supported', async () => { + await expect( + buildPgDatabaseConfig( + new ConfigReader({ + client: 'pg', + connection: { + type: 'not-supported', + }, + }), + ), + ).rejects.toThrow('Unknown connection type: not-supported'); + }); + + it('supports default as the default connection type', async () => { + await expect( + buildPgDatabaseConfig( + new ConfigReader({ + client: 'pg', + connection: { + type: 'default', + port: '5432', + database: 'other_db', + }, + }), + ), + ).resolves.toEqual({ + client: 'pg', + connection: { + port: '5432', + database: 'other_db', + }, + useNullAsDefault: true, + }); + }); }); describe('getPgConnectionConfig', () => { @@ -174,9 +296,9 @@ describe('postgres', () => { }); describe('createPgDatabaseClient', () => { - it('creates a postgres knex instance', () => { + it('creates a postgres knex instance', async () => { expect( - createPgDatabaseClient( + await createPgDatabaseClient( createConfig({ host: 'acme', user: 'foo', @@ -187,14 +309,14 @@ describe('postgres', () => { ).toBeTruthy(); }); - it('attempts to read an ssl cert', () => { - expect(() => + it('attempts to read an ssl cert', async () => { + await expect(() => createPgDatabaseClient( createConfig( 'postgresql://postgres:pass@localhost:5432/dbname?sslrootcert=/path/to/file', ), ), - ).toThrow(/no such file or directory/); + ).rejects.toThrow(/no such file or directory/); }); }); diff --git a/packages/backend-defaults/src/entrypoints/database/connectors/postgres.ts b/packages/backend-defaults/src/entrypoints/database/connectors/postgres.ts index b5cfffd1f4..e7e973ae4b 100644 --- a/packages/backend-defaults/src/entrypoints/database/connectors/postgres.ts +++ b/packages/backend-defaults/src/entrypoints/database/connectors/postgres.ts @@ -37,11 +37,11 @@ const ddlLimiter = limiterFactory(1); * @param dbConfig - The database config * @param overrides - Additional options to merge with the config */ -export function createPgDatabaseClient( +export async function createPgDatabaseClient( dbConfig: Config, overrides?: Knex.Config, ) { - const knexConfig = buildPgDatabaseConfig(dbConfig, overrides); + const knexConfig = await buildPgDatabaseConfig(dbConfig, overrides); const database = knexFactory(knexConfig); const role = dbConfig.getOptionalString('role'); @@ -64,11 +64,11 @@ export function createPgDatabaseClient( * @param dbConfig - The database config * @param overrides - Additional options to merge with the config */ -export function buildPgDatabaseConfig( +export async function buildPgDatabaseConfig( dbConfig: Config, overrides?: Knex.Config, ) { - return mergeDatabaseConfig( + const config = mergeDatabaseConfig( dbConfig.get(), { connection: getPgConnectionConfig(dbConfig, !!overrides), @@ -76,6 +76,49 @@ export function buildPgDatabaseConfig( }, overrides, ); + + const sanitizedConfig = JSON.parse(JSON.stringify(config)); + + // Trim additional properties from the connection object passed to knex + delete sanitizedConfig.connection.type; + delete sanitizedConfig.connection.instance; + + if (config.connection.type === 'default' || !config.connection.type) { + return sanitizedConfig; + } + + if (config.connection.type !== 'cloudsql') { + throw new Error(`Unknown connection type: ${config.connection.type}`); + } + + if (config.client !== 'pg') { + throw new Error('Cloud SQL only supports the pg client'); + } + + if (!config.connection.instance) { + throw new Error('Missing instance connection name for Cloud SQL'); + } + + const { + Connector: CloudSqlConnector, + IpAddressTypes, + AuthTypes, + } = await import('@google-cloud/cloud-sql-connector'); + const connector = new CloudSqlConnector(); + const clientOpts = await connector.getOptions({ + instanceConnectionName: config.connection.instance, + ipType: IpAddressTypes.PUBLIC, + authType: AuthTypes.IAM, + }); + + return { + ...sanitizedConfig, + client: 'pg', + connection: { + ...sanitizedConfig.connection, + ...clientOpts, + }, + }; } /** @@ -130,7 +173,7 @@ export async function ensurePgDatabaseExists( dbConfig: Config, ...databases: Array ) { - const admin = createPgDatabaseClient(dbConfig, { + const admin = await createPgDatabaseClient(dbConfig, { connection: { database: 'postgres', }, @@ -186,7 +229,7 @@ export async function ensurePgSchemaExists( dbConfig: Config, ...schemas: Array ): Promise { - const admin = createPgDatabaseClient(dbConfig); + const admin = await createPgDatabaseClient(dbConfig); const role = dbConfig.getOptionalString('role'); try { @@ -219,7 +262,7 @@ export async function dropPgDatabase( dbConfig: Config, ...databases: Array ) { - const admin = createPgDatabaseClient(dbConfig); + const admin = await createPgDatabaseClient(dbConfig); try { await Promise.all( databases.map(async database => { diff --git a/packages/backend-defaults/src/entrypoints/httpAuth/DefaultHttpAuthService.test.ts b/packages/backend-defaults/src/entrypoints/httpAuth/DefaultHttpAuthService.test.ts new file mode 100644 index 0000000000..e314564b59 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/httpAuth/DefaultHttpAuthService.test.ts @@ -0,0 +1,42 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DefaultHttpAuthService } from './httpAuthServiceFactory'; +import { mockServices } from '@backstage/backend-test-utils'; +import { createRequest } from 'node-mocks-http'; + +describe('DefaultHttpAuthService', () => { + it('should extract token from custom header', async () => { + const auth = mockServices.auth.mock(); + const httpAuthService = DefaultHttpAuthService.create({ + discovery: mockServices.discovery(), + auth, + pluginId: 'test', + getTokenFromRequest: req => { + let token: string | undefined; + const header = req.headers.test; + if (typeof header === 'string') { + token = header; + } + return { token }; + }, + }); + await httpAuthService.credentials( + createRequest({ headers: { test: 'mock-user-token' } }), + ); + expect(auth.authenticate).toHaveBeenCalledWith('mock-user-token'); + }); +}); diff --git a/packages/backend-defaults/src/entrypoints/httpAuth/httpAuthServiceFactory.ts b/packages/backend-defaults/src/entrypoints/httpAuth/httpAuthServiceFactory.ts index 76550873f6..4bc6b3b1fc 100644 --- a/packages/backend-defaults/src/entrypoints/httpAuth/httpAuthServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/httpAuth/httpAuthServiceFactory.ts @@ -33,17 +33,14 @@ const FIVE_MINUTES_MS = 5 * 60 * 1000; const BACKSTAGE_AUTH_COOKIE = 'backstage-auth'; function getTokenFromRequest(req: Request) { - // TODO: support multiple auth headers (iterate rawHeaders) + let token: string | undefined; const authHeader = req.headers.authorization; if (typeof authHeader === 'string') { const matches = authHeader.match(/^Bearer[ ]+(\S+)$/i); - const token = matches?.[1]; - if (token) { - return token; - } + token = matches?.[1]; } - return undefined; + return { token }; } function getCookieFromRequest(req: Request) { @@ -71,23 +68,55 @@ type RequestWithCredentials = Request & { [limitedCredentialsSymbol]?: Promise; }; -class DefaultHttpAuthService implements HttpAuthService { +/** + * @public + * Options for creating a DefaultHttpAuthService. + */ +export interface DefaultHttpAuthServiceOptions { + auth: AuthService; + discovery: DiscoveryService; + pluginId: string; + /** + * Optionally override logic for extracting the token from the request. + */ + getTokenFromRequest?: (req: Request) => { token?: string }; +} + +/** + * @public + * DefaultHttpAuthService is the default implementation of the HttpAuthService + */ +export class DefaultHttpAuthService implements HttpAuthService { readonly #auth: AuthService; readonly #discovery: DiscoveryService; readonly #pluginId: string; + readonly #getToken: (req: Request) => { token?: string }; - constructor( + private constructor( auth: AuthService, discovery: DiscoveryService, pluginId: string, + getToken?: (req: Request) => { token?: string }, ) { this.#auth = auth; this.#discovery = discovery; this.#pluginId = pluginId; + this.#getToken = getToken ?? getTokenFromRequest; + } + + static create( + options: DefaultHttpAuthServiceOptions, + ): DefaultHttpAuthService { + return new DefaultHttpAuthService( + options.auth, + options.discovery, + options.pluginId, + options.getTokenFromRequest, + ); } async #extractCredentialsFromRequest(req: Request) { - const token = getTokenFromRequest(req); + const { token } = this.#getToken(req); if (!token) { return await this.#auth.getNoneCredentials(); } @@ -96,7 +125,7 @@ class DefaultHttpAuthService implements HttpAuthService { } async #extractLimitedCredentialsFromRequest(req: Request) { - const token = getTokenFromRequest(req); + const { token } = this.#getToken(req); if (token) { return await this.#auth.authenticate(token, { allowLimitedAccess: true, @@ -289,6 +318,10 @@ export const httpAuthServiceFactory = createServiceFactory({ plugin: coreServices.pluginMetadata, }, async factory({ auth, discovery, plugin }) { - return new DefaultHttpAuthService(auth, discovery, plugin.getId()); + return DefaultHttpAuthService.create({ + auth, + discovery, + pluginId: plugin.getId(), + }); }, }); diff --git a/packages/backend-defaults/src/entrypoints/httpAuth/index.ts b/packages/backend-defaults/src/entrypoints/httpAuth/index.ts index edd7e53026..9afe06ae0e 100644 --- a/packages/backend-defaults/src/entrypoints/httpAuth/index.ts +++ b/packages/backend-defaults/src/entrypoints/httpAuth/index.ts @@ -14,4 +14,8 @@ * limitations under the License. */ -export { httpAuthServiceFactory } from './httpAuthServiceFactory'; +export { + httpAuthServiceFactory, + DefaultHttpAuthService, +} from './httpAuthServiceFactory'; +export type { DefaultHttpAuthServiceOptions } from './httpAuthServiceFactory'; diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/createAuthIntegrationRouter.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/createAuthIntegrationRouter.ts similarity index 98% rename from packages/backend-defaults/src/entrypoints/httpRouter/createAuthIntegrationRouter.ts rename to packages/backend-defaults/src/entrypoints/httpRouter/http/createAuthIntegrationRouter.ts index ef36e7ba2d..3d36ef8e34 100644 --- a/packages/backend-defaults/src/entrypoints/httpRouter/createAuthIntegrationRouter.ts +++ b/packages/backend-defaults/src/entrypoints/httpRouter/http/createAuthIntegrationRouter.ts @@ -18,6 +18,9 @@ import { AuthService } from '@backstage/backend-plugin-api'; import express from 'express'; import Router from 'express-promise-router'; +/** + * @public + */ export function createAuthIntegrationRouter(options: { auth: AuthService; }): express.Router { diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/createCookieAuthRefreshMiddleware.test.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/createCookieAuthRefreshMiddleware.test.ts similarity index 100% rename from packages/backend-defaults/src/entrypoints/httpRouter/createCookieAuthRefreshMiddleware.test.ts rename to packages/backend-defaults/src/entrypoints/httpRouter/http/createCookieAuthRefreshMiddleware.test.ts diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/createCookieAuthRefreshMiddleware.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/createCookieAuthRefreshMiddleware.ts similarity index 100% rename from packages/backend-defaults/src/entrypoints/httpRouter/createCookieAuthRefreshMiddleware.ts rename to packages/backend-defaults/src/entrypoints/httpRouter/http/createCookieAuthRefreshMiddleware.ts diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/createCredentialsBarrier.test.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/createCredentialsBarrier.test.ts similarity index 100% rename from packages/backend-defaults/src/entrypoints/httpRouter/createCredentialsBarrier.test.ts rename to packages/backend-defaults/src/entrypoints/httpRouter/http/createCredentialsBarrier.test.ts diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/createCredentialsBarrier.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/createCredentialsBarrier.ts similarity index 99% rename from packages/backend-defaults/src/entrypoints/httpRouter/createCredentialsBarrier.ts rename to packages/backend-defaults/src/entrypoints/httpRouter/http/createCredentialsBarrier.ts index dd6c95ca82..f6332c6d28 100644 --- a/packages/backend-defaults/src/entrypoints/httpRouter/createCredentialsBarrier.ts +++ b/packages/backend-defaults/src/entrypoints/httpRouter/http/createCredentialsBarrier.ts @@ -36,6 +36,9 @@ export function createPathPolicyPredicate(policyPath: string) { }; } +/** + * @public + */ export function createCredentialsBarrier(options: { httpAuth: HttpAuthService; config: RootConfigService; diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/createLifecycleMiddleware.test.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/createLifecycleMiddleware.test.ts similarity index 96% rename from packages/backend-defaults/src/entrypoints/httpRouter/createLifecycleMiddleware.test.ts rename to packages/backend-defaults/src/entrypoints/httpRouter/http/createLifecycleMiddleware.test.ts index 31eecf14bb..3b85c8cb92 100644 --- a/packages/backend-defaults/src/entrypoints/httpRouter/createLifecycleMiddleware.test.ts +++ b/packages/backend-defaults/src/entrypoints/httpRouter/http/createLifecycleMiddleware.test.ts @@ -15,7 +15,7 @@ */ import { createLifecycleMiddleware } from './createLifecycleMiddleware'; -import { BackendLifecycleImpl } from '../rootLifecycle/rootLifecycleServiceFactory'; +import { BackendLifecycleImpl } from '../../rootLifecycle/rootLifecycleServiceFactory'; import { mockServices } from '@backstage/backend-test-utils'; import { ServiceUnavailableError } from '@backstage/errors'; diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/createLifecycleMiddleware.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/createLifecycleMiddleware.ts similarity index 99% rename from packages/backend-defaults/src/entrypoints/httpRouter/createLifecycleMiddleware.ts rename to packages/backend-defaults/src/entrypoints/httpRouter/http/createLifecycleMiddleware.ts index 18ff2f0840..3f8ee3ea69 100644 --- a/packages/backend-defaults/src/entrypoints/httpRouter/createLifecycleMiddleware.ts +++ b/packages/backend-defaults/src/entrypoints/httpRouter/http/createLifecycleMiddleware.ts @@ -23,7 +23,7 @@ export const DEFAULT_TIMEOUT = { seconds: 5 }; /** * Options for {@link createLifecycleMiddleware}. - * @internal + * @public */ export interface LifecycleMiddlewareOptions { lifecycle: LifecycleService; @@ -47,7 +47,7 @@ export interface LifecycleMiddlewareOptions { * If the service is shutting down, all requests will be rejected with a * {@link @backstage/errors#ServiceUnavailableError}. * - * @internal + * @public */ export function createLifecycleMiddleware( options: LifecycleMiddlewareOptions, diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/http/index.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/index.ts new file mode 100644 index 0000000000..d31ea74fe8 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/httpRouter/http/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { createAuthIntegrationRouter } from './createAuthIntegrationRouter'; +export { createCredentialsBarrier } from './createCredentialsBarrier'; +export { createLifecycleMiddleware } from './createLifecycleMiddleware'; +export type { LifecycleMiddlewareOptions } from './createLifecycleMiddleware'; +export { createCookieAuthRefreshMiddleware } from './createCookieAuthRefreshMiddleware'; diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/httpRouterServiceFactory.ts b/packages/backend-defaults/src/entrypoints/httpRouter/httpRouterServiceFactory.ts index fb2646580b..a448827e16 100644 --- a/packages/backend-defaults/src/entrypoints/httpRouter/httpRouterServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/httpRouter/httpRouterServiceFactory.ts @@ -21,10 +21,11 @@ import { createServiceFactory, HttpRouterServiceAuthPolicy, } from '@backstage/backend-plugin-api'; -import { createLifecycleMiddleware } from './createLifecycleMiddleware'; -import { createCredentialsBarrier } from './createCredentialsBarrier'; -import { createAuthIntegrationRouter } from './createAuthIntegrationRouter'; -import { createCookieAuthRefreshMiddleware } from './createCookieAuthRefreshMiddleware'; +import { + createCookieAuthRefreshMiddleware, + createCredentialsBarrier, + createAuthIntegrationRouter, +} from './http'; /** * HTTP route registration for plugins. @@ -41,12 +42,11 @@ export const httpRouterServiceFactory = createServiceFactory({ deps: { plugin: coreServices.pluginMetadata, config: coreServices.rootConfig, - lifecycle: coreServices.lifecycle, rootHttpRouter: coreServices.rootHttpRouter, auth: coreServices.auth, httpAuth: coreServices.httpAuth, }, - async factory({ auth, httpAuth, config, plugin, rootHttpRouter, lifecycle }) { + async factory({ auth, httpAuth, config, plugin, rootHttpRouter }) { const router = PromiseRouter(); rootHttpRouter.use(`/api/${plugin.getId()}`, router); @@ -57,7 +57,6 @@ export const httpRouterServiceFactory = createServiceFactory({ }); router.use(createAuthIntegrationRouter({ auth })); - router.use(createLifecycleMiddleware({ lifecycle })); router.use(credentialsBarrier.middleware); router.use(createCookieAuthRefreshMiddleware({ auth, httpAuth })); diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/index.ts b/packages/backend-defaults/src/entrypoints/httpRouter/index.ts index 15bced5ef3..fc9752bdc1 100644 --- a/packages/backend-defaults/src/entrypoints/httpRouter/index.ts +++ b/packages/backend-defaults/src/entrypoints/httpRouter/index.ts @@ -15,3 +15,4 @@ */ export { httpRouterServiceFactory } from './httpRouterServiceFactory'; +export * from './http'; diff --git a/packages/backend-defaults/src/entrypoints/rootHealth/rootHealthServiceFactory.test.ts b/packages/backend-defaults/src/entrypoints/rootHealth/rootHealthServiceFactory.test.ts index 0eee5c18c6..ca9085273c 100644 --- a/packages/backend-defaults/src/entrypoints/rootHealth/rootHealthServiceFactory.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootHealth/rootHealthServiceFactory.test.ts @@ -53,11 +53,11 @@ describe('DefaultRootHealthService', () => { it(`should return a 500 response if the server has stopped`, async () => { let mockServerStartedFn = () => {}; - let mockServerStoppedFn = () => {}; + let mockServerBeforeStoppedFn = () => {}; const lifecycle = mockServices.rootLifecycle.mock({ addStartupHook: jest.fn(fn => (mockServerStartedFn = fn)), - addShutdownHook: jest.fn(fn => (mockServerStoppedFn = fn)), + addBeforeShutdownHook: jest.fn(fn => (mockServerBeforeStoppedFn = fn)), }); const service = new DefaultRootHealthService({ @@ -65,11 +65,11 @@ describe('DefaultRootHealthService', () => { }); mockServerStartedFn(); - mockServerStoppedFn(); + mockServerBeforeStoppedFn(); await expect(service.getReadiness()).resolves.toEqual({ status: 503, payload: { - message: 'Backend has not started yet', + message: 'Backend is shuttting down', status: 'error', }, }); diff --git a/packages/backend-defaults/src/entrypoints/rootHealth/rootHealthServiceFactory.ts b/packages/backend-defaults/src/entrypoints/rootHealth/rootHealthServiceFactory.ts index c8b4ad5394..b201079b4f 100644 --- a/packages/backend-defaults/src/entrypoints/rootHealth/rootHealthServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/rootHealth/rootHealthServiceFactory.ts @@ -23,14 +23,14 @@ import { /** @internal */ export class DefaultRootHealthService implements RootHealthService { - #isRunning = false; + #state: 'init' | 'up' | 'down' = 'init'; constructor(readonly options: { lifecycle: RootLifecycleService }) { options.lifecycle.addStartupHook(() => { - this.#isRunning = true; + this.#state = 'up'; }); - options.lifecycle.addShutdownHook(() => { - this.#isRunning = false; + options.lifecycle.addBeforeShutdownHook(() => { + this.#state = 'down'; }); } @@ -39,12 +39,18 @@ export class DefaultRootHealthService implements RootHealthService { } async getReadiness(): Promise<{ status: number; payload?: any }> { - if (!this.#isRunning) { + if (this.#state === 'init') { return { status: 503, payload: { message: 'Backend has not started yet', status: 'error' }, }; } + if (this.#state === 'down') { + return { + status: 503, + payload: { message: 'Backend is shuttting down', status: 'error' }, + }; + } return { status: 200, payload: { status: 'ok' } }; } diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/createHealthRouter.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/createHealthRouter.ts index 3772ab0fab..a22f4f32a0 100644 --- a/packages/backend-defaults/src/entrypoints/rootHttpRouter/createHealthRouter.ts +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/createHealthRouter.ts @@ -14,20 +14,50 @@ * limitations under the License. */ -import { RootHealthService } from '@backstage/backend-plugin-api'; +import { + RootConfigService, + RootHealthService, +} from '@backstage/backend-plugin-api'; import Router from 'express-promise-router'; import { Request, Response } from 'express'; +const HEADER_CONFIG_KEY = 'backend.health.headers'; + /** * @public */ -export function createHealthRouter(options: { health: RootHealthService }) { +export function createHealthRouter(options: { + health: RootHealthService; + config: RootConfigService; +}) { + const headersConfig = options.config + .getOptionalConfig(HEADER_CONFIG_KEY) + ?.get(); + if (headersConfig) { + for (const [key, value] of Object.entries(headersConfig)) { + if (!key || typeof key !== 'string') { + throw new Error( + `Invalid header name in at ${HEADER_CONFIG_KEY}, must be a non-empty string`, + ); + } + if (!value || typeof value !== 'string') { + throw new Error( + `Invalid header value in at ${HEADER_CONFIG_KEY}, must be a non-empty string`, + ); + } + } + } + const headers = headersConfig && new Headers(headersConfig as HeadersInit); + const router = Router(); router.get( '/.backstage/health/v1/readiness', async (_request: Request, response: Response) => { const { status, payload } = await options.health.getReadiness(); + if (headers) { + response.setHeaders(headers); + } response.status(status).json(payload); }, ); @@ -36,6 +66,9 @@ export function createHealthRouter(options: { health: RootHealthService }) { '/.backstage/health/v1/liveness', async (_request: Request, response: Response) => { const { status, payload } = await options.health.getLiveness(); + if (headers) { + response.setHeaders(headers); + } response.status(status).json(payload); }, ); diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/createLifecycleMiddleware.test.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/createLifecycleMiddleware.test.ts new file mode 100644 index 0000000000..76af28cc6e --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/createLifecycleMiddleware.test.ts @@ -0,0 +1,108 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createLifecycleMiddleware } from './createLifecycleMiddleware'; +import { BackendLifecycleImpl } from '../rootLifecycle/rootLifecycleServiceFactory'; +import { mockServices } from '@backstage/backend-test-utils'; +import { ServiceUnavailableError } from '@backstage/errors'; + +describe('createLifecycleMiddleware', () => { + it('should pause requests when plugin is not ready', async () => { + const lifecycle = new BackendLifecycleImpl(mockServices.rootLogger()); + + const middleware = createLifecycleMiddleware({ lifecycle }); + + const next = jest.fn(); + middleware({} as any, {} as any, next); + expect(next).not.toHaveBeenCalled(); + await lifecycle.startup(); + + // pending call + expect(next).toHaveBeenCalledWith(); + + // new call + const next2 = jest.fn(); + middleware({} as any, {} as any, next2); + expect(next2).toHaveBeenCalledWith(); + }); + + it('should throw ServiceUnavailableError after shutdown', async () => { + const lifecycle = new BackendLifecycleImpl(mockServices.rootLogger()); + const middleware = createLifecycleMiddleware({ lifecycle }); + + const next = jest.fn(); + middleware({} as any, {} as any, next); + expect(next).not.toHaveBeenCalled(); + await lifecycle.shutdown(); + + // pending call + expect(next).toHaveBeenCalledWith( + new ServiceUnavailableError('Service is shutting down'), + ); + + // new call + const next2 = jest.fn(); + middleware({} as any, {} as any, next2); + expect(next2).toHaveBeenCalledWith( + new ServiceUnavailableError('Service is shutting down'), + ); + }); + + it('should throw ServiceUnavailableError after timeout', async () => { + const lifecycle = new BackendLifecycleImpl(mockServices.rootLogger()); + const middleware = createLifecycleMiddleware({ + lifecycle, + startupRequestPauseTimeout: { milliseconds: 1 }, + }); + + const next = jest.fn(); + middleware({} as any, {} as any, next); + expect(next).not.toHaveBeenCalled(); + + await new Promise(r => setTimeout(r, 2)); + + expect(next).toHaveBeenCalledWith( + new ServiceUnavailableError('Service has not started up yet'), + ); + }); + + it('should delay service shutdown for the default timeout duration', async () => { + jest.useFakeTimers(); + const defaultTimeout = 30000; + const lifecycle = new BackendLifecycleImpl(mockServices.rootLogger()); + createLifecycleMiddleware({ lifecycle }); + const beforeShutdownPromise = lifecycle.beforeShutdown().then(() => { + jest.useRealTimers(); + }); + jest.advanceTimersByTime(defaultTimeout); + return expect(beforeShutdownPromise).resolves.toBeUndefined(); + }); + + it('should delay service shutdown for the configured timeout duration - time in human duration', async () => { + jest.useFakeTimers(); + const configuredTimeout = 20000; + const lifecycle = new BackendLifecycleImpl(mockServices.rootLogger()); + createLifecycleMiddleware({ + lifecycle, + serverShutdownDelay: { milliseconds: configuredTimeout }, + }); + const beforeShutdownPromise = lifecycle.beforeShutdown().then(() => { + jest.useRealTimers(); + }); + jest.advanceTimersByTime(configuredTimeout); + return expect(beforeShutdownPromise).resolves.toBeUndefined(); + }); +}); diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/createLifecycleMiddleware.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/createLifecycleMiddleware.ts new file mode 100644 index 0000000000..3745f7f48d --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/createLifecycleMiddleware.ts @@ -0,0 +1,124 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { RootLifecycleService } from '@backstage/backend-plugin-api'; +import { ServiceUnavailableError } from '@backstage/errors'; +import { HumanDuration, durationToMilliseconds } from '@backstage/types'; +import { RequestHandler } from 'express'; + +export const DEFAULT_STARTUP_REQUEST_PAUSE_TIMEOUT = { seconds: 5 }; +export const DEFAULT_SERVER_SHUTDOWN_TIMEOUT = { seconds: 0 }; + +/** + * Options for {@link createLifecycleMiddleware}. + * @public + */ +export interface LifecycleMiddlewareOptions { + lifecycle: RootLifecycleService; + /** + * The maximum time that paused requests will wait for the service to start, before returning an error. + * + * Defaults to 5 seconds. + */ + startupRequestPauseTimeout?: HumanDuration; + /** + * The maximum time that the server will wait for stop accepting traffic, before returning an error. + * + * Defaults to 0 seconds. + */ + serverShutdownDelay?: HumanDuration; +} + +/** + * Creates a middleware that pauses requests until the service has started. + * + * @remarks + * + * Requests that arrive before the service has started will be paused until startup is complete. + * If the service does not start within the provided timeout, the request will be rejected with a + * {@link @backstage/errors#ServiceUnavailableError}. + * + * If the service is shutting down, all requests will be rejected with a + * {@link @backstage/errors#ServiceUnavailableError}. + * + * @public + */ +export function createLifecycleMiddleware( + options: LifecycleMiddlewareOptions, +): RequestHandler { + const { lifecycle, startupRequestPauseTimeout, serverShutdownDelay } = + options; + + let state: 'init' | 'up' | 'down' = 'init'; + const waiting = new Set<{ + next: (err?: Error) => void; + timeout: NodeJS.Timeout; + }>(); + + lifecycle.addStartupHook(async () => { + if (state === 'init') { + state = 'up'; + for (const item of waiting) { + clearTimeout(item.timeout); + item.next(); + } + waiting.clear(); + } + }); + + lifecycle.addBeforeShutdownHook(async () => { + const timeoutMs = durationToMilliseconds( + serverShutdownDelay ?? DEFAULT_SERVER_SHUTDOWN_TIMEOUT, + ); + return await new Promise(resolve => { + setTimeout(resolve, timeoutMs); + }); + }); + + lifecycle.addShutdownHook(async () => { + state = 'down'; + for (const item of waiting) { + clearTimeout(item.timeout); + item.next(new ServiceUnavailableError('Service is shutting down')); + } + waiting.clear(); + }); + + return (_req, _res, next) => { + if (state === 'up') { + next(); + return; + } else if (state === 'down') { + next(new ServiceUnavailableError('Service is shutting down')); + return; + } + + const timeoutMs = durationToMilliseconds( + startupRequestPauseTimeout ?? DEFAULT_STARTUP_REQUEST_PAUSE_TIMEOUT, + ); + + const item = { + next, + timeout: setTimeout(() => { + if (waiting.delete(item)) { + next(new ServiceUnavailableError('Service has not started up yet')); + } + }, timeoutMs), + }; + + waiting.add(item); + }; +} diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.test.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.test.ts index 418d170365..1c140791b6 100644 --- a/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.test.ts @@ -27,33 +27,22 @@ import express from 'express'; import createError from 'http-errors'; import request from 'supertest'; import { MiddlewareFactory } from './MiddlewareFactory'; -import { ConfigReader } from '@backstage/config'; +import { mockServices } from '@backstage/backend-test-utils'; + +jest.useFakeTimers({ now: new Date('2024-11-20T00:00:00Z') }); describe('MiddlewareFactory', () => { describe('middleware.error', () => { - const childLogger = { - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - debug: jest.fn(), - child: jest.fn(), - }; - - const logger = { - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - debug: jest.fn(), - child: () => childLogger, - }; + const childLogger = mockServices.logger.mock(); + const logger = mockServices.logger.mock({ child: () => childLogger }); const middleware = MiddlewareFactory.create({ logger, - config: new ConfigReader({}), + config: mockServices.rootConfig.mock(), }); beforeEach(() => { - jest.resetAllMocks(); + jest.clearAllMocks(); }); it('gives default code and message', async () => { @@ -195,9 +184,7 @@ describe('MiddlewareFactory', () => { it('should filter out internal errors', async () => { const app = express(); - const grandChildLogger = { - error: jest.fn(), - }; + const grandChildLogger = mockServices.logger.mock(); childLogger.child.mockReturnValue(grandChildLogger); class DatabaseError extends Error {} @@ -254,5 +241,57 @@ describe('MiddlewareFactory', () => { expect(childLogger.error).toHaveBeenCalled(); }); + + it('should log incoming requests', async () => { + const app = express(); + app.use(middleware.logging()); + app.get('/', (_req, res) => res.send('')); + + await request(app).get('/').expect(200); + + expect(logger.info).toHaveBeenCalledWith( + expect.stringContaining( + '[2024-11-20T00:00:00.000Z] "GET / HTTP/1.1" 200 0 "-" "-"', + ), + { + type: 'incomingRequest', + date: '2024-11-20T00:00:00.000Z', + method: 'GET', + url: '/', + status: 200, + httpVersion: '1.1', + contentLength: 0, + }, + ); + }); + + it('should log request with all data fields', async () => { + const app = express(); + app.use(middleware.logging()); + app.get('/', (_req, res) => res.send('Hello World')); + + await request(app) + .get('/') + .set('User-Agent', 'test-agent') + .set('referrer', 'test-referrer') + .expect(200); + + expect(logger.info).toHaveBeenCalledWith( + expect.stringContaining( + '[2024-11-20T00:00:00.000Z] "GET / HTTP/1.1" 200 11 "test-referrer" "test-agent"', + ), + { + type: 'incomingRequest', + date: '2024-11-20T00:00:00.000Z', + method: 'GET', + url: '/', + status: 200, + httpVersion: '1.1', + userAgent: 'test-agent', + referrer: 'test-referrer', + contentLength: 11, + }, + ); + }); }); }); diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.ts index f38c10820a..1ff9bd15d1 100644 --- a/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.ts +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.ts @@ -27,7 +27,6 @@ import { } from 'express'; import cors from 'cors'; import helmet from 'helmet'; -import morgan from 'morgan'; import compression from 'compression'; import { readHelmetOptions } from './readHelmetOptions'; import { readCorsOptions } from './readCorsOptions'; @@ -45,6 +44,45 @@ import { import { NotImplementedError } from '@backstage/errors'; import { applyInternalErrorFilter } from './applyInternalErrorFilter'; +type LogMeta = { + date: string; + method: string; + url: string; + status: number; + httpVersion: string; + userAgent?: string; + contentLength?: number; + referrer?: string; +}; + +function getLogMeta(req: Request, res: Response): LogMeta { + const referrer = req.headers.referer ?? req.headers.referrer; + const userAgent = req.headers['user-agent']; + const contentLength = Number(res.getHeader('content-length')); + + const meta: LogMeta = { + date: new Date().toISOString(), + method: req.method, + url: req.originalUrl ?? req.url, + status: res.statusCode, + httpVersion: `${req.httpVersionMajor}.${req.httpVersionMinor}`, + }; + + if (userAgent) { + meta.userAgent = userAgent; + } + + if (isFinite(contentLength)) { + meta.contentLength = contentLength; + } + + if (referrer) { + meta.referrer = Array.isArray(referrer) ? referrer.join(', ') : referrer; + } + + return meta; +} + /** * Options used to create a {@link MiddlewareFactory}. * @@ -137,18 +175,24 @@ export class MiddlewareFactory { * @returns An Express request handler */ logging(): RequestHandler { - const logger = this.#logger.child({ - type: 'incomingRequest', - }); - const customMorganFormat = - '[:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'; - return morgan(customMorganFormat, { - stream: { - write(message: string) { - logger.info(message.trimEnd()); - }, - }, - }); + const logger = this.#logger; + return (req: Request, res: Response, next: NextFunction) => { + res.on('finish', () => { + const meta = getLogMeta(req, res); + logger.info( + `[${meta.date}] "${meta.method} ${meta.url} HTTP/${ + meta.httpVersion + }" ${meta.status} ${meta.contentLength ?? 0} "${ + meta.referrer ?? '-' + }" "${meta.userAgent ?? '-'}"`, + { + type: 'incomingRequest', + ...meta, + }, + ); + }); + next(); + }; } /** diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/createHttpServer.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/createHttpServer.ts index 5c526ba1e2..9449291628 100644 --- a/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/createHttpServer.ts +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/createHttpServer.ts @@ -16,7 +16,6 @@ import * as http from 'http'; import * as https from 'https'; -import stoppableServer from 'stoppable'; import { RequestListener } from 'http'; import { LoggerService } from '@backstage/backend-plugin-api'; import { HttpServerOptions, ExtendedHttpServer } from './types'; @@ -33,13 +32,6 @@ export async function createHttpServer( deps: { logger: LoggerService }, ): Promise { const server = await createServer(listener, options, deps); - - const stopper = stoppableServer(server, 0); - // The stopper here is actually the server itself, so if we try - // to call stopper.stop() down in the stop implementation, we'll - // be calling ourselves. - const stopServer = stopper.stop.bind(stopper); - return Object.assign(server, { start() { return new Promise((resolve, reject) => { @@ -61,7 +53,7 @@ export async function createHttpServer( stop() { return new Promise((resolve, reject) => { - stopServer((error?: Error) => { + server.close(error => { if (error) { reject(error); } else { diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.test.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.test.ts index dea0159dff..fb0d6cdad0 100644 --- a/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.test.ts @@ -21,16 +21,205 @@ import { import { Express } from 'express'; import request from 'supertest'; import { rootHttpRouterServiceFactory } from './rootHttpRouterServiceFactory'; -import { coreServices } from '@backstage/backend-plugin-api'; +import { + ServiceFactory, + coreServices, + createServiceFactory, +} from '@backstage/backend-plugin-api'; +import { BackendLifecycleImpl } from '../rootLifecycle/rootLifecycleServiceFactory'; + +async function createExpressApp(...dependencies: ServiceFactory[]) { + let app: Express | undefined = undefined; + + const tester = ServiceFactoryTester.from( + rootHttpRouterServiceFactory({ + configure(options) { + options.applyDefaults(); + app = options.app; + }, + }), + { + dependencies, + }, + ); + + // Trigger creation of the http service, accessing the app instance through the configure callback + await tester.getSubject(); + + if (!app) { + throw new Error('App not yet created'); + } + + return { app, tester }; +} describe('rootHttpRouterServiceFactory', () => { it('should make the health endpoints available', async () => { + const { app, tester } = await createExpressApp( + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { port: 0 }, + }, + }, + }), + ); + + await request(app) + .get('/.backstage/health/v1/liveness') + .expect(200, { status: 'ok' }); + + await request(app).get('/.backstage/health/v1/readiness').expect(503, { + message: 'Backend has not started yet', + status: 'error', + }); + + const lifecycle = await tester.getService(coreServices.rootLifecycle); + + await (lifecycle as any).startup(); // Trigger startup by calling the private startup method + + await request(app).get('/.backstage/health/v1/readiness').expect(200, { + status: 'ok', + }); + + expect('test').toBe('test'); + }); + + it('should include custom headers for health endpoint', async () => { + const { app, tester } = await createExpressApp( + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { port: 0 }, + health: { + headers: { + 'x-test-header': 'test', + }, + }, + }, + }, + }), + ); + + const lRes = await request(app).get('/.backstage/health/v1/liveness'); + + expect(lRes.status).toBe(200); + expect(lRes.get('x-test-header')).toBe('test'); + + const r1Res = await request(app).get('/.backstage/health/v1/readiness'); + + expect(r1Res.status).toBe(503); + expect(r1Res.get('x-test-header')).toBe('test'); + + await request(app) + .get('/.backstage/health/v1/liveness') + .expect(200, { status: 'ok' }); + + await request(app).get('/.backstage/health/v1/readiness').expect(503, { + message: 'Backend has not started yet', + status: 'error', + }); + + const lifecycle = await tester.getService(coreServices.rootLifecycle); + + await (lifecycle as any).startup(); // Trigger startup by calling the private startup method + + const r2Res = await request(app).get('/.backstage/health/v1/readiness'); + + expect(r2Res.status).toBe(200); + expect(r2Res.get('x-test-header')).toBe('test'); + }); + + it('should reject invalid health headers config', async () => { + await expect( + createExpressApp( + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { port: 0 }, + health: { + headers: 'not-an-object', + }, + }, + }, + }), + ), + ).rejects.toThrow( + "Invalid type in config for key 'backend.health.headers' in 'mock-config', got string, wanted object", + ); + + await expect( + createExpressApp( + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { port: 0 }, + health: { + headers: [], + }, + }, + }, + }), + ), + ).rejects.toThrow( + "Invalid type in config for key 'backend.health.headers' in 'mock-config', got array, wanted object", + ); + + await expect( + createExpressApp( + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { port: 0 }, + health: { + headers: { + 'invalid-header': {}, + }, + }, + }, + }, + }), + ), + ).rejects.toThrow( + 'Invalid header value in at backend.health.headers, must be a non-empty string', + ); + + await expect( + createExpressApp( + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { port: 0 }, + health: { + headers: { + 'invalid-header': '', + }, + }, + }, + }, + }), + ), + ).rejects.toThrow( + 'Invalid header value in at backend.health.headers, must be a non-empty string', + ); + }); + + it('should wait the server to shutdown', async () => { + jest.useFakeTimers(); + let app: Express | undefined = undefined; + const lifecycleMock = new BackendLifecycleImpl(mockServices.rootLogger()); const tester = ServiceFactoryTester.from( rootHttpRouterServiceFactory({ configure(options) { - options.applyDefaults(); + console.log('configure'); + options.app.use(options.healthRouter); + options.app.use(options.lifecycleMiddleware); + options.app.get('/test', (_req, res) => { + res.status(200).send({ status: 'ok' }).end(); + }); + options.app.use(options.middleware.error()); app = options.app; }, }), @@ -42,33 +231,102 @@ describe('rootHttpRouterServiceFactory', () => { backend: { baseUrl: 'http://localhost', listen: { host: '', port: 0 }, + lifecycle: { + serverShutdownDelay: '30s', + }, }, }, }), + createServiceFactory({ + service: coreServices.rootLifecycle, + deps: {}, + factory() { + return lifecycleMock; + }, + }), ], }, ); - // Trigger creation of the http service, accessing the app instance through the configure callback await tester.getSubject(); - await request(app!) - .get('/.backstage/health/v1/liveness') - .expect(200, { status: 'ok' }); - - await request(app!).get('/.backstage/health/v1/readiness').expect(503, { - message: 'Backend has not started yet', - status: 'error', - }); - + // Trigger creation of the http service, accessing the app instance through the configure callback const lifecycle = await tester.getService(coreServices.rootLifecycle); await (lifecycle as any).startup(); // Trigger startup by calling the private startup method - await request(app!).get('/.backstage/health/v1/readiness').expect(200, { + await request(app!).get('/test').expect(200, { status: 'ok', }); - expect('test').toBe('test'); + await request(app) + .get('/.backstage/health/v1/liveness') + .expect(200, { status: 'ok' }); + + await request(app).get('/.backstage/health/v1/readiness').expect(200, { + status: 'ok', + }); + + const beforeShutdownPromise = (lifecycle as any) + .beforeShutdown() + .then(() => { + return (lifecycle as any).shutdown(); + }); + + // Continue accepting requests + await request(app!).get('/test').expect(200, { + status: 'ok', + }); + + await request(app) + .get('/.backstage/health/v1/liveness') + .expect(200, { status: 'ok' }); + + // Immediately start failing the readiness health check + await request(app).get('/.backstage/health/v1/readiness').expect(503, { + message: 'Backend is shuttting down', + status: 'error', + }); + + jest.advanceTimersByTime(29999); + + // Still accepting requests 1 ms before shutdown + await request(app!).get('/test').expect(200, { + status: 'ok', + }); + + await request(app) + .get('/.backstage/health/v1/liveness') + .expect(200, { status: 'ok' }); + + await request(app).get('/.backstage/health/v1/readiness').expect(503, { + message: 'Backend is shuttting down', + status: 'error', + }); + + jest.advanceTimersByTime(1); + + // No longer accepting requests after shutdown + await request(app!) + .get('/test') + .expect(503, { + error: { + name: 'ServiceUnavailableError', + message: 'Service is shutting down', + }, + request: { method: 'GET', url: '/test' }, + response: { statusCode: 503 }, + }); + + await request(app) + .get('/.backstage/health/v1/liveness') + .expect(200, { status: 'ok' }); + + await request(app).get('/.backstage/health/v1/readiness').expect(503, { + message: 'Backend is shuttting down', + status: 'error', + }); + + return await expect(beforeShutdownPromise).resolves.toBeUndefined(); }); }); diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.ts index 59811c15d4..4afdfb1ec2 100644 --- a/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.ts @@ -30,6 +30,9 @@ import { } from './http'; import { DefaultRootHttpRouter } from './DefaultRootHttpRouter'; import { createHealthRouter } from './createHealthRouter'; +import { createLifecycleMiddleware } from './createLifecycleMiddleware'; +import { readDurationFromConfig } from '@backstage/config'; +import { HumanDuration } from '@backstage/types'; /** * @public @@ -43,6 +46,7 @@ export interface RootHttpRouterConfigureContext { logger: LoggerService; lifecycle: LifecycleService; healthRouter: RequestHandler; + lifecycleMiddleware: RequestHandler; applyDefaults: () => void; } @@ -89,7 +93,28 @@ const rootHttpRouterServiceFactoryWithOptions = ( const middleware = MiddlewareFactory.create({ config, logger }); const routes = router.handler(); - const healthRouter = createHealthRouter({ health }); + const healthRouter = createHealthRouter({ config, health }); + + let startupRequestPauseTimeout: HumanDuration | undefined; + if (config.has('backend.lifecycle.startupRequestPauseTimeout')) { + startupRequestPauseTimeout = readDurationFromConfig(config, { + key: 'backend.lifecycle.startupRequestPauseTimeout', + }); + } + + let serverShutdownDelay: HumanDuration | undefined; + if (config.has('backend.lifecycle.serverShutdownDelay')) { + serverShutdownDelay = readDurationFromConfig(config, { + key: 'backend.lifecycle.serverShutdownDelay', + }); + } + + const lifecycleMiddleware = createLifecycleMiddleware({ + lifecycle, + startupRequestPauseTimeout, + serverShutdownDelay, + }); + const server = await createHttpServer( app, readHttpServerOptions(config.getOptionalConfig('backend')), @@ -105,6 +130,7 @@ const rootHttpRouterServiceFactoryWithOptions = ( logger, lifecycle, healthRouter, + lifecycleMiddleware, applyDefaults() { if (process.env.NODE_ENV === 'development') { app.set('json spaces', 2); @@ -114,6 +140,7 @@ const rootHttpRouterServiceFactoryWithOptions = ( app.use(middleware.compression()); app.use(middleware.logging()); app.use(healthRouter); + app.use(lifecycleMiddleware); app.use(routes); app.use(middleware.notFound()); app.use(middleware.error()); diff --git a/packages/backend-defaults/src/entrypoints/rootLifecycle/rootLifecycleServiceFactory.ts b/packages/backend-defaults/src/entrypoints/rootLifecycle/rootLifecycleServiceFactory.ts index e724c2f5cb..abba4beece 100644 --- a/packages/backend-defaults/src/entrypoints/rootLifecycle/rootLifecycleServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/rootLifecycle/rootLifecycleServiceFactory.ts @@ -65,6 +65,39 @@ export class BackendLifecycleImpl implements RootLifecycleService { ); } + #hasBeforeShutdown = false; + #beforeShutdownTasks: Array<{ hook: () => void | Promise }> = []; + + addBeforeShutdownHook(hook: () => void): void { + if (this.#hasBeforeShutdown) { + throw new Error( + 'Attempt to add before shutdown hook after shutdown has started', + ); + } + this.#beforeShutdownTasks.push({ hook }); + } + + async beforeShutdown(): Promise { + if (this.#hasBeforeShutdown) { + return; + } + this.#hasBeforeShutdown = true; + + this.logger.debug( + `Running ${this.#beforeShutdownTasks.length} before shutdown tasks...`, + ); + await Promise.all( + this.#beforeShutdownTasks.map(async ({ hook }) => { + try { + await hook(); + this.logger.debug(`Before shutdown hook succeeded`); + } catch (error) { + this.logger.error(`Before shutdown hook failed, ${error}`); + } + }), + ); + } + #hasShutdown = false; #shutdownTasks: Array<{ hook: LifecycleServiceShutdownHook; diff --git a/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.test.ts b/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.test.ts index 0f9e079943..ec46f22759 100644 --- a/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.test.ts @@ -93,4 +93,28 @@ describe('WinstonLogger', () => { expect.any(Function), ); }); + + it('gracefully handles fields that are not castable to a string', () => { + const mockTransport = new Transport({ + log: jest.fn(), + logv: jest.fn(), + }); + + const logger = WinstonLogger.create({ + transports: [mockTransport], + }); + + logger.error('something went wrong', { + field: Object.create(null), + }); + + expect(mockTransport.log).toHaveBeenCalledWith( + expect.objectContaining({ + [MESSAGE]: expect.stringContaining( + '[field value not castable to string]', + ), + }), + expect.any(Function), + ); + }); }); diff --git a/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.ts b/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.ts index 38d05f6511..9f7532e66b 100644 --- a/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.ts +++ b/packages/backend-defaults/src/entrypoints/rootLogger/WinstonLogger.ts @@ -147,10 +147,17 @@ export class WinstonLogger implements RootLoggerService { const prefixColor = colorizer.colorize('prefix', prefix); const extraFields = Object.entries(fields) - .map( - ([key, value]) => - `${colorizer.colorize('field', `${key}`)}=${value}`, - ) + .map(([key, value]) => { + let stringValue = ''; + + try { + stringValue = `${value}`; + } catch (e) { + stringValue = '[field value not castable to string]'; + } + + return `${colorizer.colorize('field', `${key}`)}=${stringValue}`; + }) .join(' '); return `${timestampColor} ${prefixColor} ${level} ${message} ${extraFields}`; diff --git a/packages/backend-defaults/src/entrypoints/scheduler/lib/DefaultSchedulerService.test.ts b/packages/backend-defaults/src/entrypoints/scheduler/lib/DefaultSchedulerService.test.ts index 63b900fab2..199d25f2aa 100644 --- a/packages/backend-defaults/src/entrypoints/scheduler/lib/DefaultSchedulerService.test.ts +++ b/packages/backend-defaults/src/entrypoints/scheduler/lib/DefaultSchedulerService.test.ts @@ -14,16 +14,11 @@ * limitations under the License. */ -import { - TestDatabaseId, - TestDatabases, - mockServices, -} from '@backstage/backend-test-utils'; +import { TestDatabases, mockServices } from '@backstage/backend-test-utils'; import { Duration } from 'luxon'; import waitForExpect from 'wait-for-expect'; import { DefaultSchedulerService } from './DefaultSchedulerService'; import { createTestScopedSignal } from './__testUtils__/createTestScopedSignal'; -import { DatabaseService } from '@backstage/backend-plugin-api'; jest.setTimeout(60_000); @@ -32,19 +27,12 @@ describe('TaskScheduler', () => { const databases = TestDatabases.create(); const testScopedSignal = createTestScopedSignal(); - async function createDatabase( - databaseId: TestDatabaseId, - ): Promise { - const knex = await databases.init(databaseId); - return { - getClient: async () => knex, - }; - } - it.each(databases.eachSupportedId())( 'can return a working v1 plugin impl, %p', async databaseId => { - const database = await createDatabase(databaseId); + const knex = await databases.init(databaseId); + const database = mockServices.database({ knex }); + const manager = DefaultSchedulerService.create({ database, logger }); const fn = jest.fn(); @@ -65,7 +53,9 @@ describe('TaskScheduler', () => { it.each(databases.eachSupportedId())( 'can return a working v2 plugin impl, %p', async databaseId => { - const database = await createDatabase(databaseId); + const knex = await databases.init(databaseId); + const database = mockServices.database({ knex }); + const manager = DefaultSchedulerService.create({ database, logger }); const fn = jest.fn(); diff --git a/packages/backend-defaults/src/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.test.ts b/packages/backend-defaults/src/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.test.ts index 3cb41a0b48..1ce1401829 100644 --- a/packages/backend-defaults/src/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.test.ts +++ b/packages/backend-defaults/src/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.test.ts @@ -26,14 +26,7 @@ import { PluginTaskSchedulerImpl, parseDuration, } from './PluginTaskSchedulerImpl'; - -function defer() { - let resolve = () => {}; - const promise = new Promise(_resolve => { - resolve = _resolve; - }); - return { promise, resolve }; -} +import { createDeferred } from '@backstage/types'; jest.setTimeout(60_000); @@ -62,7 +55,11 @@ describe('PluginTaskManagerImpl', () => { const manager = new PluginTaskSchedulerImpl( async () => knex, mockServices.logger.mock(), - { addShutdownHook, addStartupHook: jest.fn() }, + { + addShutdownHook, + addBeforeShutdownHook: jest.fn(), + addStartupHook: jest.fn(), + }, ); return { knex, manager }; } @@ -188,14 +185,14 @@ describe('PluginTaskManagerImpl', () => { async databaseId => { const { manager } = await init(databaseId); - const { promise, resolve } = defer(); + const promise = createDeferred(); await manager.scheduleTask({ id: 'task1', timeout: Duration.fromMillis(5000), frequency: Duration.fromObject({ years: 1 }), fn: async () => { - resolve(); + promise.resolve(); await new Promise(r => setTimeout(r, 20000)); }, scope: 'global', @@ -313,14 +310,14 @@ describe('PluginTaskManagerImpl', () => { it('cant trigger a running task', async () => { const { manager } = await init('SQLITE_3'); - const { promise, resolve } = defer(); + const promise = createDeferred(); await manager.scheduleTask({ id: 'task1', timeout: Duration.fromMillis(5000), frequency: Duration.fromObject({ years: 1 }), fn: async () => { - resolve(); + promise.resolve(); await new Promise(r => setTimeout(r, 20000)); }, scope: 'local', diff --git a/packages/backend-defaults/src/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.ts b/packages/backend-defaults/src/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.ts index 5c04521149..ce1ff823cf 100644 --- a/packages/backend-defaults/src/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.ts +++ b/packages/backend-defaults/src/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.ts @@ -24,7 +24,7 @@ import { SchedulerServiceTaskRunner, SchedulerServiceTaskScheduleDefinition, } from '@backstage/backend-plugin-api'; -import { Counter, Histogram, metrics, trace } from '@opentelemetry/api'; +import { Counter, Histogram, Gauge, metrics, trace } from '@opentelemetry/api'; import { Knex } from 'knex'; import { Duration } from 'luxon'; import { LocalTaskWorker } from './LocalTaskWorker'; @@ -44,6 +44,8 @@ export class PluginTaskSchedulerImpl implements SchedulerService { private readonly counter: Counter; private readonly duration: Histogram; + private readonly lastStarted: Gauge; + private readonly lastCompleted: Gauge; constructor( private readonly databaseFactory: () => Promise, @@ -58,6 +60,17 @@ export class PluginTaskSchedulerImpl implements SchedulerService { description: 'Histogram of task run durations', unit: 'seconds', }); + this.lastStarted = meter.createGauge('backend_tasks.task.runs.started', { + description: 'Epoch timestamp seconds when the task was last started', + unit: 'seconds', + }); + this.lastCompleted = meter.createGauge( + 'backend_tasks.task.runs.completed', + { + description: 'Epoch timestamp seconds when the task was last completed', + unit: 'seconds', + }, + ); this.shutdownInitiated = new Promise(shutdownInitiated => { rootLifecycle?.addShutdownHook(() => shutdownInitiated(true)); }); @@ -144,6 +157,7 @@ export class PluginTaskSchedulerImpl implements SchedulerService { scope, }; this.counter.add(1, { ...labels, result: 'started' }); + this.lastStarted.record(Date.now() / 1000, { taskId: task.id }); const startTime = process.hrtime(); @@ -170,6 +184,7 @@ export class PluginTaskSchedulerImpl implements SchedulerService { const endTime = delta[0] + delta[1] / 1e9; this.counter.add(1, labels); this.duration.record(endTime, labels); + this.lastCompleted.record(Date.now() / 1000, labels); } }; } diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureBlobStorageUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureBlobStorageUrlReader.ts new file mode 100644 index 0000000000..069b772a15 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureBlobStorageUrlReader.ts @@ -0,0 +1,235 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + BlobDownloadOptions, + BlobServiceClient, + ContainerClient, + StorageSharedKeyCredential, +} from '@azure/storage-blob'; +import { ReaderFactory, ReadTreeResponseFactory } from './types'; +import { ForwardedError, NotModifiedError } from '@backstage/errors'; +import { Readable } from 'stream'; +import { relative } from 'path/posix'; +import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; +import { + AzureBlobStorageIntergation, + AzureCredentialsManager, + DefaultAzureCredentialsManager, + ScmIntegrations, +} from '@backstage/integration'; +import { + UrlReaderService, + UrlReaderServiceReadTreeOptions, + UrlReaderServiceReadTreeResponse, + UrlReaderServiceReadUrlOptions, + UrlReaderServiceReadUrlResponse, + UrlReaderServiceSearchResponse, +} from '@backstage/backend-plugin-api'; + +export function parseUrl(url: string): { path: string; container: string } { + const parsedUrl = new URL(url); + const pathSegments = parsedUrl.pathname.split('/').filter(Boolean); + + if (pathSegments.length < 2) { + throw new Error(`Invalid Azure Blob Storage URL format: ${url}`); + } + + // First segment is the container name, rest is the blob path + const container = pathSegments[0]; + const path = pathSegments.slice(1).join('/'); + + return { path, container }; +} + +/** + * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for Azure storage accounts urls. + * + * @public + */ +export class AzureBlobStorageUrlReader implements UrlReaderService { + static factory: ReaderFactory = ({ config, treeResponseFactory }) => { + const integrations = ScmIntegrations.fromConfig(config); + + const credsManager = + DefaultAzureCredentialsManager.fromIntegrations(integrations); + + return integrations.azureBlobStorage.list().map(integrationConfig => { + const reader = new AzureBlobStorageUrlReader( + credsManager, + integrationConfig, + { + treeResponseFactory, + }, + ); + + const predicate = (url: URL) => + url.host.endsWith( + `${integrationConfig.config.accountName}.${integrationConfig.config.host}`, + ); + return { reader, predicate }; + }); + }; + + // private readonly blobServiceClient: BlobServiceClient; + + constructor( + private readonly credsManager: AzureCredentialsManager, + private readonly integration: AzureBlobStorageIntergation, + private readonly deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ) {} + + private async createContainerClient( + containerName: string, + ): Promise { + const accountName = this.integration.config.accountName; // Use the account name from the integration config + const accountKey = this.integration.config.accountKey; // Get the account key if it exists + + if (accountKey && accountName) { + const creds = new StorageSharedKeyCredential(accountName, accountKey); + const blobServiceClient = new BlobServiceClient( + `https://${accountName}.${this.integration.config.host}`, + creds, + ); + return blobServiceClient.getContainerClient(containerName); + } + // Use the credentials manager to get the correct credentials + const credential = await this.credsManager.getCredentials( + accountName as string, + ); + + let blobServiceClientUrl: string; + + if (this.integration.config.endpoint) { + if (this.integration.config.sasToken) { + blobServiceClientUrl = `${this.integration.config.endpoint}?${this.integration.config.sasToken}`; + } else { + blobServiceClientUrl = `${this.integration.config.endpoint}`; + } + } else { + blobServiceClientUrl = `https://${this.integration.config.accountName}.${this.integration.config.host}`; + } + + const blobServiceClient = new BlobServiceClient( + blobServiceClientUrl, + credential, + ); + return blobServiceClient.getContainerClient(containerName); + } + + async read(url: string): Promise { + const response = await this.readUrl(url); + return response.buffer(); + } + + async readUrl( + url: string, + options?: UrlReaderServiceReadUrlOptions, + ): Promise { + const { etag, lastModifiedAfter } = options ?? {}; + + try { + const { path, container } = parseUrl(url); + + const containerClient = await this.createContainerClient(container); + const blobClient = containerClient.getBlobClient(path); + + const getBlobOptions: BlobDownloadOptions = { + abortSignal: options?.signal, + conditions: { + ...(etag && { ifNoneMatch: etag }), + ...(lastModifiedAfter && { ifModifiedSince: lastModifiedAfter }), + }, + }; + + const downloadBlockBlobResponse = await blobClient.download( + 0, + undefined, + getBlobOptions, + ); + + return ReadUrlResponseFactory.fromReadable( + downloadBlockBlobResponse.readableStreamBody as Readable, + { + etag: downloadBlockBlobResponse.etag, + lastModifiedAt: downloadBlockBlobResponse.lastModified, + }, + ); + } catch (e) { + if (e.$metadata && e.$metadata.httpStatusCode === 304) { + throw new NotModifiedError(); + } + + throw new ForwardedError( + 'Could not retrieve file from Azure Blob Storage', + e, + ); + } + } + + async readTree( + url: string, + options?: UrlReaderServiceReadTreeOptions, + ): Promise { + try { + const { path, container } = parseUrl(url); + + const containerClient = await this.createContainerClient(container); + + const blobs = containerClient.listBlobsFlat({ prefix: path }); + + const responses = []; + + for await (const blob of blobs) { + const blobClient = containerClient.getBlobClient(blob.name); + const downloadBlockBlobResponse = await blobClient.download( + undefined, + undefined, + { abortSignal: options?.signal }, + ); + + responses.push({ + data: Readable.from( + downloadBlockBlobResponse.readableStreamBody as Readable, + ), + path: relative(path, blob.name), + lastModifiedAt: blob.properties.lastModified, + }); + } + + return this.deps.treeResponseFactory.fromReadableArray(responses); + } catch (e) { + throw new ForwardedError( + 'Could not retrieve file tree from Azure Blob Storage', + e, + ); + } + } + + async search(): Promise { + throw new Error('AzureBlobStorageUrlReader does not implement search'); + } + + toString() { + const accountName = this.integration.config.accountName; + const accountKey = this.integration.config.accountKey; + return `azureBlobStorage{accountName=${accountName},authed=${Boolean( + accountKey, + )}}`; + } +} diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.ts index 50513fcdcc..b46e7c20cd 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.ts @@ -32,9 +32,7 @@ import { ScmIntegrations, AzureIntegration, } from '@backstage/integration'; -import fetch, { Response } from 'node-fetch'; import { Minimatch } from 'minimatch'; -import { Readable } from 'stream'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; import { ReadTreeResponseFactory, ReaderFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; @@ -101,7 +99,7 @@ export class AzureUrlReader implements UrlReaderService { // for private repos when PAT is not valid, Azure API returns a http status code 203 with sign in page html if (response.ok && response.status !== 203) { - return ReadUrlResponseFactory.fromNodeJSReadable(response.body); + return ReadUrlResponseFactory.fromResponse(response); } const message = `${url} could not be read as ${builtUrl}, ${response.status} ${response.statusText}`; @@ -172,7 +170,7 @@ export class AzureUrlReader implements UrlReaderService { } return await this.deps.treeResponseFactory.fromZipArchive({ - stream: Readable.from(archiveAzureResponse.body), + response: archiveAzureResponse, etag: commitSha, filter, subpath, diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts index b7b733867e..f6742c7423 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts @@ -32,14 +32,11 @@ import { getBitbucketCloudRequestOptions, ScmIntegrations, } from '@backstage/integration'; -import fetch, { Response } from 'node-fetch'; import parseGitUrl from 'git-url-parse'; import { trimEnd } from 'lodash'; import { Minimatch } from 'minimatch'; -import { Readable } from 'stream'; import { ReaderFactory, ReadTreeResponseFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; -import { parseLastModified } from './util'; /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for files from Bitbucket Cloud. @@ -116,12 +113,7 @@ export class BitbucketCloudUrlReader implements UrlReaderService { } if (response.ok) { - return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { - etag: response.headers.get('ETag') ?? undefined, - lastModifiedAt: parseLastModified( - response.headers.get('Last-Modified'), - ), - }); + return ReadUrlResponseFactory.fromResponse(response); } const message = `${url} could not be read as ${bitbucketUrl}, ${response.status} ${response.statusText}`; @@ -159,7 +151,7 @@ export class BitbucketCloudUrlReader implements UrlReaderService { } return await this.deps.treeResponseFactory.fromTarArchive({ - stream: Readable.from(archiveResponse.body), + response: archiveResponse, subpath: filepath, etag: lastCommitShortHash, filter: options?.filter, diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.ts index 332e300cb8..d327f80704 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.ts @@ -31,14 +31,25 @@ import { getBitbucketServerRequestOptions, ScmIntegrations, } from '@backstage/integration'; -import fetch, { Response } from 'node-fetch'; import parseGitUrl from 'git-url-parse'; import { trimEnd } from 'lodash'; import { Minimatch } from 'minimatch'; -import { Readable } from 'stream'; import { ReaderFactory, ReadTreeResponseFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; -import { parseLastModified } from './util'; + +import pThrottle from 'p-throttle'; + +// 1 per second +const throttle = pThrottle({ + limit: 1, + interval: 1000, +}); + +const throttledFetch = throttle( + async (url: RequestInfo, options?: RequestInit) => { + return await fetch(url, options); + }, +); /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for files from Bitbucket Server APIs. @@ -82,7 +93,7 @@ export class BitbucketServerUrlReader implements UrlReaderService { let response: Response; try { - response = await fetch(bitbucketUrl.toString(), { + response = await throttledFetch(bitbucketUrl.toString(), { headers: { ...requestOptions.headers, ...(etag && { 'If-None-Match': etag }), @@ -107,12 +118,7 @@ export class BitbucketServerUrlReader implements UrlReaderService { } if (response.ok) { - return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { - etag: response.headers.get('ETag') ?? undefined, - lastModifiedAt: parseLastModified( - response.headers.get('Last-Modified'), - ), - }); + return ReadUrlResponseFactory.fromResponse(response); } const message = `${url} could not be read as ${bitbucketUrl}, ${response.status} ${response.statusText}`; @@ -137,7 +143,7 @@ export class BitbucketServerUrlReader implements UrlReaderService { url, this.integration.config, ); - const archiveResponse = await fetch( + const archiveResponse = await throttledFetch( downloadUrl, getBitbucketServerRequestOptions(this.integration.config), ); @@ -150,7 +156,7 @@ export class BitbucketServerUrlReader implements UrlReaderService { } return await this.deps.treeResponseFactory.fromTarArchive({ - stream: Readable.from(archiveResponse.body), + response: archiveResponse, subpath: filepath, etag: lastCommitShortHash, filter: options?.filter, @@ -206,7 +212,7 @@ export class BitbucketServerUrlReader implements UrlReaderService { // https://docs.atlassian.com/bitbucket-server/rest/7.9.0/bitbucket-rest.html#idp211 (branches docs) const branchListUrl = `${this.integration.config.apiBaseUrl}/projects/${project}/repos/${repoName}/branches${branchParameter}`; - const branchListResponse = await fetch( + const branchListResponse = await throttledFetch( branchListUrl, getBitbucketServerRequestOptions(this.integration.config), ); diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.ts index 55d676ed91..c12998509e 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.ts @@ -32,15 +32,12 @@ import { getBitbucketRequestOptions, ScmIntegrations, } from '@backstage/integration'; -import fetch, { Response } from 'node-fetch'; import parseGitUrl from 'git-url-parse'; import { trimEnd } from 'lodash'; import { Minimatch } from 'minimatch'; -import { Readable } from 'stream'; import { LoggerService } from '@backstage/backend-plugin-api'; import { ReaderFactory, ReadTreeResponseFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; -import { parseLastModified } from './util'; /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for files from Bitbucket v1 and v2 APIs, such @@ -127,12 +124,7 @@ export class BitbucketUrlReader implements UrlReaderService { } if (response.ok) { - return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { - etag: response.headers.get('ETag') ?? undefined, - lastModifiedAt: parseLastModified( - response.headers.get('Last-Modified'), - ), - }); + return ReadUrlResponseFactory.fromResponse(response); } const message = `${url} could not be read as ${bitbucketUrl}, ${response.status} ${response.statusText}`; @@ -170,7 +162,7 @@ export class BitbucketUrlReader implements UrlReaderService { } return await this.deps.treeResponseFactory.fromTarArchive({ - stream: Readable.from(archiveBitbucketResponse.body), + response: archiveBitbucketResponse, subpath: filepath, etag: lastCommitShortHash, filter: options?.filter, diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.ts index 55041cf036..0e5a279c4d 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.ts @@ -22,11 +22,9 @@ import { UrlReaderServiceSearchResponse, } from '@backstage/backend-plugin-api'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; -import fetch, { Response } from 'node-fetch'; import { ReaderFactory } from './types'; import path from 'path'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; -import { parseLastModified } from './util'; const isInRange = (num: number, [start, end]: [number, number]) => { return num >= start && num <= end; @@ -150,12 +148,7 @@ export class FetchUrlReader implements UrlReaderService { } if (response.ok) { - return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { - etag: response.headers.get('ETag') ?? undefined, - lastModifiedAt: parseLastModified( - response.headers.get('Last-Modified'), - ), - }); + return ReadUrlResponseFactory.fromResponse(response); } const message = `could not read ${url}, ${response.status} ${response.statusText}`; diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.ts index d8471c43f3..502c2d2ff9 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.ts @@ -32,7 +32,6 @@ import { ScmIntegrations, } from '@backstage/integration'; import { ReaderFactory, ReadTreeResponseFactory } from './types'; -import fetch, { Response } from 'node-fetch'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { AuthenticationError, @@ -149,7 +148,7 @@ export class GiteaUrlReader implements UrlReaderService { const parsedUri = parseGiteaUrl(this.integration.config, url); return this.deps.treeResponseFactory.fromTarArchive({ - stream: Readable.from(response.body), + response: response, subpath: parsedUri.path, etag: lastCommitHash, filter: options?.filter, diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.ts index f5050cca5e..c1d8c02a53 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.ts @@ -34,11 +34,8 @@ import { import parseGitUrl from 'git-url-parse'; import { trimEnd, trimStart } from 'lodash'; import { Minimatch } from 'minimatch'; -import fetch, { Response } from 'node-fetch'; -import { Readable } from 'stream'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { ReadTreeResponseFactory, ReaderFactory } from './types'; -import { parseLastModified } from './util'; /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for files on GitLab. @@ -101,12 +98,7 @@ export class GitlabUrlReader implements UrlReaderService { } if (response.ok) { - return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { - etag: response.headers.get('ETag') ?? undefined, - lastModifiedAt: parseLastModified( - response.headers.get('Last-Modified'), - ), - }); + return ReadUrlResponseFactory.fromResponse(response); } const message = `${url} could not be read as ${builtUrl}, ${response.status} ${response.statusText}`; @@ -228,7 +220,7 @@ export class GitlabUrlReader implements UrlReaderService { } return await this.deps.treeResponseFactory.fromTarArchive({ - stream: Readable.from(archiveGitLabResponse.body), + response: archiveGitLabResponse, subpath: filepath, etag: commitSha, filter: options?.filter, diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.ts index ecc1bd6101..1f4f297c5a 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.ts @@ -19,6 +19,7 @@ import { UrlReaderServiceReadUrlResponse } from '@backstage/backend-plugin-api'; import getRawBody from 'raw-body'; import { Readable } from 'stream'; import { ReadUrlResponseFactoryFromStreamOptions } from './types'; +import { parseLastModified, responseToReadable } from './util'; /** * Utility class for UrlReader implementations to create valid ReadUrlResponse @@ -28,7 +29,7 @@ import { ReadUrlResponseFactoryFromStreamOptions } from './types'; */ export class ReadUrlResponseFactory { /** - * Resolves a ReadUrlResponse from a Readable stream. + * Resolves a UrlReaderServiceReadUrlResponse from a Readable stream. */ static async fromReadable( stream: Readable, @@ -64,7 +65,7 @@ export class ReadUrlResponseFactory { } /** - * Resolves a ReadUrlResponse from an old-style NodeJS.ReadableStream. + * Resolves a UrlReaderServiceReadUrlResponse from an old-style NodeJS.ReadableStream. */ static async fromNodeJSReadable( oldStyleStream: NodeJS.ReadableStream, @@ -73,4 +74,21 @@ export class ReadUrlResponseFactory { const readable = Readable.from(oldStyleStream); return ReadUrlResponseFactory.fromReadable(readable, options); } + + /** + * Resolves a UrlReaderServiceReadUrlResponse from a native fetch response body. + */ + static async fromResponse( + response: Response, + ): Promise { + const etag = response.headers.get('etag') || undefined; + const lastModifiedAt = parseLastModified( + response.headers.get('last-modified'), + ); + + return ReadUrlResponseFactory.fromReadable(responseToReadable(response), { + etag, + lastModifiedAt, + }); + } } diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaders.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaders.ts index 96e9ed6509..229bdd4903 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaders.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaders.ts @@ -35,6 +35,7 @@ import { AwsS3UrlReader } from './AwsS3UrlReader'; import { GiteaUrlReader } from './GiteaUrlReader'; import { AwsCodeCommitUrlReader } from './AwsCodeCommitUrlReader'; import { HarnessUrlReader } from './HarnessUrlReader'; +import { AzureBlobStorageUrlReader } from './AzureBlobStorageUrlReader'; /** * Creation options for {@link @backstage/backend-plugin-api#UrlReaderService}. @@ -99,6 +100,7 @@ export class UrlReaders { GoogleGcsUrlReader.factory, HarnessUrlReader.factory, AwsS3UrlReader.factory, + AzureBlobStorageUrlReader.factory, AwsCodeCommitUrlReader.factory, FetchUrlReader.factory, ]), diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/index.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/index.ts index 678c6ef64b..fc33efbc3a 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/index.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/index.ts @@ -24,6 +24,7 @@ export { GitlabUrlReader } from './GitlabUrlReader'; export { GiteaUrlReader } from './GiteaUrlReader'; export { HarnessUrlReader } from './HarnessUrlReader'; export { AwsS3UrlReader } from './AwsS3UrlReader'; +export { AzureBlobStorageUrlReader } from './AzureBlobStorageUrlReader'; export { FetchUrlReader } from './FetchUrlReader'; export { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; export type { diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.ts index 1973b2158f..a8f187d7b8 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.ts @@ -15,6 +15,7 @@ */ import os from 'os'; +import { Readable } from 'stream'; import { Config } from '@backstage/config'; import { ReadTreeResponseFactoryOptions, @@ -25,6 +26,7 @@ import { TarArchiveResponse } from './TarArchiveResponse'; import { ZipArchiveResponse } from './ZipArchiveResponse'; import { ReadableArrayResponse } from './ReadableArrayResponse'; import { UrlReaderServiceReadTreeResponse } from '@backstage/backend-plugin-api'; +import { responseToReadable } from '../util'; export class DefaultReadTreeResponseFactory implements ReadTreeResponseFactory { static create(options: { config: Config }): DefaultReadTreeResponseFactory { @@ -41,11 +43,21 @@ export class DefaultReadTreeResponseFactory implements ReadTreeResponseFactory { stripFirstDirectory?: boolean; }, ): Promise { + let stream: Readable; + let etag: string; + if ('stream' in options) { + stream = options.stream; + etag = options.etag; + } else { + stream = responseToReadable(options.response); + etag = (options.etag ?? options.response.headers.get('etag')) || ''; + } + return new TarArchiveResponse( - options.stream, + stream, options.subpath ?? '', this.workDir, - options.etag, + etag, options.filter, options.stripFirstDirectory ?? true, ); @@ -54,11 +66,21 @@ export class DefaultReadTreeResponseFactory implements ReadTreeResponseFactory { async fromZipArchive( options: ReadTreeResponseFactoryOptions, ): Promise { + let stream: Readable; + let etag: string; + if ('stream' in options) { + stream = options.stream; + etag = options.etag; + } else { + stream = responseToReadable(options.response); + etag = (options.etag ?? options.response.headers.get('etag')) || ''; + } + return new ZipArchiveResponse( - options.stream, + stream, options.subpath ?? '', this.workDir, - options.etag, + etag, options.filter, ); } diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/types.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/types.ts index 5afbed178f..f8f03a6f3b 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/types.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/types.ts @@ -60,17 +60,28 @@ export type ReadUrlResponseFactoryFromStreamOptions = { * * @public */ -export type ReadTreeResponseFactoryOptions = { - // A binary stream of a tar archive. - stream: Readable; - // If unset, the files at the root of the tree will be read. - // subpath must not contain the name of the top level directory. - subpath?: string; - // etag of the blob - etag: string; - // Filter passed on from the ReadTreeOptions - filter?: (path: string, info?: { size: number }) => boolean; -}; +export type ReadTreeResponseFactoryOptions = + | { + // A binary stream of a tar archive. + stream: Readable; + // If unset, the files at the root of the tree will be read. + // subpath must not contain the name of the top level directory. + subpath?: string; + // etag of the blob + etag: string; + // Filter passed on from the ReadTreeOptions + filter?: (path: string, info?: { size: number }) => boolean; + } + | { + /** A response from a fetch request */ + response: Response; + /** If unset, the files at the root of the tree will be read. Subpath must not contain the name of the top level directory. */ + subpath?: string; + /** etag of the blob, to optionally override what the response header may or may not say */ + etag?: string; + /** Filter passed on from the ReadTreeOptions */ + filter?: (path: string, info?: { size: number }) => boolean; + }; /** * Options that control {@link ReadTreeResponseFactory.fromReadableArray} diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/util.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/util.ts index 3d65c2c527..bd19feef2d 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/util.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/util.ts @@ -14,10 +14,47 @@ * limitations under the License. */ -export function parseLastModified(value: string | null | undefined) { +import { PassThrough, Readable } from 'stream'; +import { ReadableStream as WebReadableStream } from 'stream/web'; + +export function parseLastModified( + value: string | null | undefined, +): Date | undefined { if (!value) { return undefined; } - return new Date(value); + try { + const result = new Date(value); + result.toISOString(); // triggers exception if input was invalid + return result; + } catch { + return undefined; + } +} + +export function responseToReadable(response: Response): Readable { + return response.body + ? Readable.from(toWeb(response.body)) + : new PassThrough().end(); +} + +// The NodeJS ReadableStream is that fetch returns is super basic and not even +// iterable. This function converts it to the smarter, iterable stream/web +// variant instead. +export function toWeb( + responseBody: ReadableStream, +): WebReadableStream { + const reader = responseBody.getReader(); + return new WebReadableStream({ + async pull(controller) { + const { value, done } = await reader.read(); + if (value) { + controller.enqueue(value); + } + if (done) { + controller.close(); + } + }, + }); } diff --git a/packages/backend-defaults/src/entrypoints/userInfo/DefaultUserInfoService.ts b/packages/backend-defaults/src/entrypoints/userInfo/DefaultUserInfoService.ts index 83bbba89b7..21f8de5631 100644 --- a/packages/backend-defaults/src/entrypoints/userInfo/DefaultUserInfoService.ts +++ b/packages/backend-defaults/src/entrypoints/userInfo/DefaultUserInfoService.ts @@ -22,7 +22,6 @@ import { } from '@backstage/backend-plugin-api'; import { ResponseError } from '@backstage/errors'; import { decodeJwt } from 'jose'; -import fetch from 'node-fetch'; import { toInternalBackstageCredentials } from '../auth/helpers'; export type Options = { diff --git a/packages/backend-dynamic-feature-service/CHANGELOG.md b/packages/backend-dynamic-feature-service/CHANGELOG.md index 57e3a086b7..d01ee9ab5c 100644 --- a/packages/backend-dynamic-feature-service/CHANGELOG.md +++ b/packages/backend-dynamic-feature-service/CHANGELOG.md @@ -1,5 +1,233 @@ # @backstage/backend-dynamic-feature-service +## 0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/backend-app-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/plugin-events-backend@0.4.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/plugin-app-node@0.1.28-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/plugin-scaffolder-node@0.6.2-next.2 + - @backstage/cli-node@0.2.11-next.1 + - @backstage/config-loader@1.9.3-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.1-next.0 + - @backstage/types@1.2.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + - @backstage/plugin-search-common@1.2.16-next.0 + +## 0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-events-backend@0.4.0-next.1 + - @backstage/plugin-scaffolder-node@0.6.2-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/backend-app-api@1.1.0-next.1 + - @backstage/config-loader@1.9.3-next.0 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/cli-common@0.1.15 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/config@1.3.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-app-node@0.1.28-next.1 + - @backstage/plugin-events-node@0.4.6-next.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-common@1.2.15 + +## 0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/backend-app-api@1.0.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-scaffolder-node@0.6.1-next.0 + - @backstage/cli-node@0.2.11-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-events-backend@0.3.17-next.0 + - @backstage/cli-common@0.1.15 + - @backstage/config@1.3.0 + - @backstage/config-loader@1.9.2 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + - @backstage/plugin-app-node@0.1.28-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-search-common@1.2.15 + +## 0.5.0 + +### Minor Changes + +- e939cd7: **BREAKING** The `dynamicPluginsFeatureLoader` options related to the root logger behavior (`transports`, `level`, `format`) are now gathered under a single `logger` option which is a function taking an optional `Config` argument and returning the logger options. + + This breaking change is required for 2 reasons: + + - it's totally possible that the current `Config` would be required to provide the logger options, + - the logger-related options should be gathered under a common `logger` option because, when the root auditing service is introduced, distinct but similarly-named options would be required for the auditor as well. + +### Patch Changes + +- 1aeec12: Enhance the `CommonJSModuleLoader` to add support for `resolvePackagePath` calls from backend dynamic plugins, with customizable package resolution, and make the `CommonJSModuleLoader` public API. + Fixing this backend dynamic plugin limitation related to `resolvePackagePath` is important for backend dynamic plugins which use the database, since database migration scripts systematically use `resolvePackagePath`. +- 8593dfa: Improve the way alpha packages are supported when loading dynamic backend plugins. + The `ScannedPluginPackage` descriptor of dynamic backend plugins loaded from their alpha `package.json` now contain both the main package manifest and the alpha manifest. Previously it used to contain only the content of the alpha `package.json`, which is nearly empty. + This will make it easier to use or display metadata of loaded dynamic backend plugins, which is contained in the main manifest. +- Updated dependencies + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-defaults@0.5.3 + - @backstage/types@1.2.0 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-events-backend@0.3.16 + - @backstage/config-loader@1.9.2 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/backend-app-api@1.0.2 + - @backstage/cli-common@0.1.15 + - @backstage/plugin-scaffolder-node@0.6.0 + - @backstage/cli-node@0.2.10 + - @backstage/errors@1.2.5 + - @backstage/plugin-app-node@0.1.27 + - @backstage/plugin-permission-node@0.8.5 + - @backstage/plugin-search-common@1.2.15 + +## 0.5.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/plugin-events-backend@0.3.16-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-scaffolder-node@0.5.1-next.3 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-search-common@1.2.14 + +## 0.5.0-next.2 + +### Minor Changes + +- e939cd7: **BREAKING** The `dynamicPluginsFeatureLoader` options related to the root logger behavior (`transports`, `level`, `format`) are now gathered under a single `logger` option which is a function taking an optional `Config` argument and returning the logger options. + + This breaking change is required for 2 reasons: + + - it's totally possible that the current `Config` would be required to provide the logger options, + - the logger-related options should be gathered under a common `logger` option because, when the root auditing service is introduced, distinct but similarly-named options would be required for the auditor as well. + +### Patch Changes + +- 1aeec12: Enhance the `CommonJSModuleLoader` to add support for `resolvePackagePath` calls from backend dynamic plugins, with customizable package resolution, and make the `CommonJSModuleLoader` public API. + Fixing this backend dynamic plugin limitation related to `resolvePackagePath` is important for backend dynamic plugins which use the database, since database migration scripts systematically use `resolvePackagePath`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-events-backend@0.3.16-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/backend-app-api@1.0.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/cli-common@0.1.15-next.0 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-scaffolder-node@0.5.1-next.2 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-search-common@1.2.14 + +## 0.4.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.15-next.0 + - @backstage/backend-app-api@1.0.2-next.1 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/cli-node@0.2.10-next.0 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-events-backend@0.3.16-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-scaffolder-node@0.5.1-next.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-search-common@1.2.14 + +## 0.4.4-next.0 + +### Patch Changes + +- 8593dfa: Improve the way alpha packages are supported when loading dynamic backend plugins. + The `ScannedPluginPackage` descriptor of dynamic backend plugins loaded from their alpha `package.json` now contain both the main package manifest and the alpha manifest. Previously it used to contain only the content of the alpha `package.json`, which is nearly empty. + This will make it easier to use or display metadata of loaded dynamic backend plugins, which is contained in the main manifest. +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-events-backend@0.3.15-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/backend-app-api@1.0.2-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/cli-common@0.1.14 + - @backstage/cli-node@0.2.9 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.27-next.0 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + - @backstage/plugin-scaffolder-node@0.5.1-next.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-search-common@1.2.14 + ## 0.4.2 ### Patch Changes diff --git a/packages/backend-dynamic-feature-service/package.json b/packages/backend-dynamic-feature-service/package.json index d0cfcce912..cb34c886e7 100644 --- a/packages/backend-dynamic-feature-service/package.json +++ b/packages/backend-dynamic-feature-service/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-dynamic-feature-service", - "version": "0.4.2", + "version": "0.5.2-next.2", "description": "Backstage dynamic feature service", "backstage": { "role": "node-library" diff --git a/packages/backend-dynamic-feature-service/report.api.md b/packages/backend-dynamic-feature-service/report.api.md index 7003b3bc2c..6e53f3747f 100644 --- a/packages/backend-dynamic-feature-service/report.api.md +++ b/packages/backend-dynamic-feature-service/report.api.md @@ -68,6 +68,32 @@ export interface BaseDynamicPlugin { version: string; } +// @public (undocumented) +export class CommonJSModuleLoader implements ModuleLoader { + constructor(options: CommonJSModuleLoaderOptions); + // (undocumented) + bootstrap( + backstageRoot: string, + dynamicPluginsPaths: string[], + scannedPluginManifests: Map, + ): Promise; + // (undocumented) + load(packagePath: string): Promise; + // (undocumented) + readonly options: CommonJSModuleLoaderOptions; +} + +// @public (undocumented) +export type CommonJSModuleLoaderOptions = { + logger: LoggerService; + dynamicPluginPackageNameSuffixes?: String[]; + customResolveDynamicPackage?: ( + logger: LoggerService, + searchedPackageName: string, + scannedPluginManifests: Map, + ) => string | undefined; +}; + // @public (undocumented) export type DynamicPlugin = FrontendDynamicPlugin | BackendDynamicPlugin; @@ -139,8 +165,9 @@ export const dynamicPluginsFeatureLoader: (( // @public (undocumented) export type DynamicPluginsFeatureLoaderOptions = DynamicPluginsFactoryOptions & - DynamicPluginsSchemasOptions & - DynamicPluginsRootLoggerFactoryOptions; + DynamicPluginsSchemasOptions & { + logger?: (config?: Config) => DynamicPluginsRootLoggerFactoryOptions; + }; // @public @deprecated (undocumented) export const dynamicPluginsFrontendSchemas: BackendFeature; @@ -263,7 +290,11 @@ export type LegacyPluginEnvironment = { // @public (undocumented) export interface ModuleLoader { // (undocumented) - bootstrap(backstageRoot: string, dynamicPluginPaths: string[]): Promise; + bootstrap( + backstageRoot: string, + dynamicPluginPaths: string[], + scannedPluginManifests?: Map, + ): Promise; // (undocumented) load(id: string): Promise; } @@ -287,6 +318,8 @@ export type ScannedPluginManifest = BackstagePackageJson & // @public (undocumented) export interface ScannedPluginPackage { + // (undocumented) + alphaManifest?: BackstagePackageJson; // (undocumented) location: URL; // (undocumented) diff --git a/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/alpha/package.json b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/alpha/package.json new file mode 100644 index 0000000000..0b10e92f3b --- /dev/null +++ b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/alpha/package.json @@ -0,0 +1,5 @@ +{ + "name": "plugin-test-backend-alpha-dynamic__alpha", + "version": "0.0.0", + "main": "../dist/alpha.cjs.js" +} diff --git a/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/dist/alpha.cjs.js b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/dist/alpha.cjs.js new file mode 100644 index 0000000000..1b4cb79d30 --- /dev/null +++ b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/dist/alpha.cjs.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var backendPluginApi = require('@backstage/backend-plugin-api'); + +const testAlphaPlugin = backendPluginApi.createBackendPlugin({ + pluginId: "test-alpha", + register(env) { + env.registerInit({ + deps: { + logger: backendPluginApi.coreServices.rootLogger, + }, + async init({ + logger, + }) { + logger.info("This plugin has been loaded from the alpha package."); + } + }); + } +}); + +exports.default = testAlphaPlugin; diff --git a/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/dist/index.cjs.js b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/dist/index.cjs.js new file mode 100644 index 0000000000..cf5c9078e2 --- /dev/null +++ b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/dist/index.cjs.js @@ -0,0 +1,3 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/package.json b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/package.json new file mode 100644 index 0000000000..90cee28b0f --- /dev/null +++ b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root-for-alpha/test-backend-alpha-dynamic/package.json @@ -0,0 +1,36 @@ +{ + "name": "plugin-test-backend-alpha-dynamic", + "version": "0.0.0", + "description": "A test dynamic backend module that exposes alpha API.", + "backstage": { + "role": "backend-plugin", + "pluginId": "test-alpha", + "pluginPackages": [ + "plugin-test-backend-alpha" + ] + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "backstage", + "dynamic" + ], + "exports": { + ".": { + "require": "./dist/index.cjs.js", + "default": "./dist/index.cjs.js" + }, + "./alpha": { + "require": "./dist/alpha.cjs.js", + "default": "./dist/alpha.cjs.js" + }, + "./package.json": "./package.json" + }, + "main": "./dist/index.cjs.js", + "files": [ + "dist", + "alpha" + ], + "bundleDependencies": true +} diff --git a/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root/test-backend-dynamic/dist/index.cjs.js b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root/test-backend-dynamic/dist/index.cjs.js index 6cc4a4f125..77c2e32bef 100644 --- a/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root/test-backend-dynamic/dist/index.cjs.js +++ b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root/test-backend-dynamic/dist/index.cjs.js @@ -10,6 +10,8 @@ const url = require('url'); const privateDep = require('private-dep-with-frontend-plugin-index-path'); +const someResource = backendPluginApi.resolvePackagePath('plugin-test-backend', 'someResource.txt'); + const testPlugin = backendPluginApi.createBackendPlugin({ pluginId: "test", register(env) { diff --git a/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root/test-backend-dynamic/someResource.txt b/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root/test-backend-dynamic/someResource.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/backend-dynamic-feature-service/src/features/features.test.ts b/packages/backend-dynamic-feature-service/src/features/features.test.ts index ad46b0c5f8..fb6aa5e48a 100644 --- a/packages/backend-dynamic-feature-service/src/features/features.test.ts +++ b/packages/backend-dynamic-feature-service/src/features/features.test.ts @@ -25,24 +25,29 @@ import path, { resolve as resolvePath } from 'path'; import { BackendFeature, createBackendPlugin, - LoggerService, } from '@backstage/backend-plugin-api'; -import { CommonJSModuleLoader } from '../loader/CommonJSModuleLoader'; +import { + CommonJSModuleLoader, + CommonJSModuleLoaderOptions, +} from '../loader/CommonJSModuleLoader'; import * as winston from 'winston'; +import * as url from 'url'; import { MESSAGE } from 'triple-beam'; import { overridePackagePathResolution } from '@backstage/backend-plugin-api/testUtils'; +import { ScannedPluginPackage } from '../scanner'; // these can get a bit slow in CI jest.setTimeout(60_000); async function jestFreeTypescriptAwareModuleLoader( - logger: LoggerService, - dontBootstrap: boolean = false, + options: CommonJSModuleLoaderOptions & { + dontBootstrap?: boolean; + }, ) { - const loader = new CommonJSModuleLoader(logger); + const loader = new CommonJSModuleLoader(options); (loader as any).module = await loader.load('node:module'); loader.load(path.resolve(__dirname, '../../../cli/config/nodeTransform.cjs')); - if (dontBootstrap) { + if (options.dontBootstrap) { loader.bootstrap = async () => {}; } return loader; @@ -67,6 +72,8 @@ class MockedTransport extends winston.transports.Console { class DynamicPluginLister { readonly loadedPlugins: DynamicPlugin[] = []; + getScannedPackage?: (plugin: DynamicPlugin) => ScannedPluginPackage; + feature(): BackendFeature { // eslint-disable-next-line consistent-this const that = this; @@ -78,6 +85,8 @@ class DynamicPluginLister { dynamicPlugins: dynamicPluginsServiceRef, }, async init({ dynamicPlugins }) { + that.getScannedPackage = plugin => + dynamicPlugins.getScannedPackage(plugin); that.loadedPlugins.push( ...dynamicPlugins.plugins({ includeFailed: true }), ); @@ -112,9 +121,14 @@ describe('dynamicPluginsFeatureLoader', () => { }), dynamicPluginsFeatureLoader({ moduleLoader: logger => - jestFreeTypescriptAwareModuleLoader(logger, true), - transports: [mockedTransport], - format: winston.format.simple(), + jestFreeTypescriptAwareModuleLoader({ + logger, + dontBootstrap: true, + }), + logger: () => ({ + transports: [mockedTransport], + format: winston.format.simple(), + }), }), dynamicPLuginsLister.feature(), ], @@ -137,6 +151,57 @@ describe('dynamicPluginsFeatureLoader', () => { ]); }); + it('should fail on resolvePackagePath because -dynamic suffix is not allowed for dynamic plugin packages.', async () => { + const dynamicPLuginsLister = new DynamicPluginLister(); + const mockedTransport = new MockedTransport(); + await startTestBackend({ + features: [ + mockServices.rootConfig.factory({ + data: { + dynamicPlugins: { + rootDirectory: dynamicPluginsRootDirectory, + }, + }, + }), + dynamicPluginsFeatureLoader({ + moduleLoader: logger => + jestFreeTypescriptAwareModuleLoader({ + logger, + dynamicPluginPackageNameSuffixes: [], + }), + logger: () => ({ + transports: [mockedTransport], + format: winston.format.simple(), + }), + }), + dynamicPLuginsLister.feature(), + ], + }); + expect(mockedTransport.logs).toContainEqual( + expect.stringMatching( + "error: an error occurred while loading dynamic backend plugin 'plugin-test-backend-dynamic' from '.*/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root/test-backend-dynamic", + ), + ); + expect(dynamicPLuginsLister.loadedPlugins).toMatchObject([ + { + name: 'plugin-test-backend-dynamic', + platform: 'node', + role: 'backend-plugin', + version: '0.0.0', + failure: + expect.stringMatching(`Error: Cannot find module 'plugin-test-backend/package.json' +Require stack: +- .*/packages/backend-plugin-api/src/paths.ts +- .*/packages/backend-plugin-api/src/index.ts +- .*/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts +- .*/packages/backend-dynamic-feature-service/src/manager/index.ts +- .*/packages/backend-dynamic-feature-service/src/features/__fixtures__/dynamic-plugins-root/test-backend-dynamic/dist/index.cjs.js +`), + }, + expect.anything(), + ]); + }); + it('should load and show the 2 dynamic plugins in a list of dynamic plugins returned by a static backend plugin', async () => { const dynamicPLuginsLister = new DynamicPluginLister(); await startTestBackend({ @@ -149,7 +214,8 @@ describe('dynamicPluginsFeatureLoader', () => { }, }), dynamicPluginsFeatureLoader({ - moduleLoader: jestFreeTypescriptAwareModuleLoader, + moduleLoader: logger => + jestFreeTypescriptAwareModuleLoader({ logger }), }), dynamicPLuginsLister.feature(), ], @@ -174,6 +240,43 @@ describe('dynamicPluginsFeatureLoader', () => { ]); }); + it('should allow overriding logger options based on config', async () => { + const mockedTransport = new MockedTransport(); + await startTestBackend({ + features: [ + mockServices.rootConfig.factory({ + data: { + dynamicPlugins: { + rootDirectory: dynamicPluginsRootDirectory, + }, + customLogLabel: 'a very nice label', + }, + }), + dynamicPluginsFeatureLoader({ + moduleLoader: logger => + jestFreeTypescriptAwareModuleLoader({ logger }), + logger: config => { + const label = config?.getString('customLogLabel') ?? 'no-label'; + return { + transports: [mockedTransport], + format: winston.format.combine( + winston.format.label({ + label, + message: true, + }), + winston.format.simple(), + ), + }; + }, + }), + ], + }); + + expect(mockedTransport.logs).toContainEqual( + 'info: [a very nice label] Found 0 new secrets in config that will be redacted {"service":"backstage"}', + ); + }); + it('should redact the secret config values of dynamic plugin config schemas in logs', async () => { const mockedTransport = new MockedTransport(); await startTestBackend({ @@ -189,9 +292,12 @@ describe('dynamicPluginsFeatureLoader', () => { }, }), dynamicPluginsFeatureLoader({ - moduleLoader: jestFreeTypescriptAwareModuleLoader, - transports: [mockedTransport], - format: winston.format.simple(), + moduleLoader: logger => + jestFreeTypescriptAwareModuleLoader({ logger }), + logger: () => ({ + transports: [mockedTransport], + format: winston.format.simple(), + }), }), ], }); @@ -239,7 +345,8 @@ describe('dynamicPluginsFeatureLoader', () => { }, }), dynamicPluginsFeatureLoader({ - moduleLoader: jestFreeTypescriptAwareModuleLoader, + moduleLoader: logger => + jestFreeTypescriptAwareModuleLoader({ logger }), }), import('@backstage/plugin-app-backend'), ], @@ -275,7 +382,8 @@ describe('dynamicPluginsFeatureLoader', () => { }, }), dynamicPluginsFeatureLoader({ - moduleLoader: jestFreeTypescriptAwareModuleLoader, + moduleLoader: logger => + jestFreeTypescriptAwareModuleLoader({ logger }), }), ], }); @@ -308,4 +416,73 @@ describe('dynamicPluginsFeatureLoader', () => { }, }); }); + + it('should load a backend plugin from the alpha package first', async () => { + const dynamicPLuginsLister = new DynamicPluginLister(); + const mockedTransport = new MockedTransport(); + const dynamicPluginsRootForAlpha = resolvePath( + __dirname, + '__fixtures__/dynamic-plugins-root-for-alpha', + ); + await startTestBackend({ + features: [ + mockServices.rootConfig.factory({ + data: { + dynamicPlugins: { + rootDirectory: dynamicPluginsRootForAlpha, + }, + }, + }), + dynamicPluginsFeatureLoader({ + moduleLoader: logger => + jestFreeTypescriptAwareModuleLoader({ logger }), + logger: () => ({ + transports: [mockedTransport], + format: winston.format.simple(), + }), + }), + dynamicPLuginsLister.feature(), + ], + }); + + expect(mockedTransport.logs).toContainEqual( + 'info: This plugin has been loaded from the alpha package. {"service":"backstage"}', + ); + + const loadedPlugins = dynamicPLuginsLister.loadedPlugins; + expect(loadedPlugins).toMatchObject([ + { + installer: { + kind: 'new', + }, + name: 'plugin-test-backend-alpha-dynamic', + platform: 'node', + role: 'backend-plugin', + version: '0.0.0', + }, + ]); + expect( + dynamicPLuginsLister.getScannedPackage?.(loadedPlugins[0]), + ).toMatchObject({ + location: url.pathToFileURL( + path.resolve(dynamicPluginsRootForAlpha, 'test-backend-alpha-dynamic'), + ), + manifest: { + name: 'plugin-test-backend-alpha-dynamic', + version: '0.0.0', + description: 'A test dynamic backend module that exposes alpha API.', + backstage: { + role: 'backend-plugin', + pluginId: 'test-alpha', + pluginPackages: ['plugin-test-backend-alpha'], + }, + keywords: ['backstage', 'dynamic'], + }, + alphaManifest: { + name: 'plugin-test-backend-alpha-dynamic__alpha', + version: '0.0.0', + main: '../dist/alpha.cjs.js', + }, + }); + }); }); diff --git a/packages/backend-dynamic-feature-service/src/features/features.ts b/packages/backend-dynamic-feature-service/src/features/features.ts index 4788f1da75..94711816d7 100644 --- a/packages/backend-dynamic-feature-service/src/features/features.ts +++ b/packages/backend-dynamic-feature-service/src/features/features.ts @@ -18,26 +18,28 @@ import { coreServices, createBackendFeatureLoader, } from '@backstage/backend-plugin-api'; -import { - DynamicPluginsSchemasOptions, - dynamicPluginsFrontendSchemas, - dynamicPluginsRootLoggerServiceFactory, - dynamicPluginsSchemasServiceFactory, -} from '../schemas'; +import type { Config } from '@backstage/config'; import { DynamicPluginsFactoryOptions, dynamicPluginsFeatureDiscoveryLoader, dynamicPluginsServiceFactory, } from '../manager'; -import { DynamicPluginsRootLoggerFactoryOptions } from '../schemas'; import { configKey } from '../scanner/plugin-scanner'; +import { + DynamicPluginsRootLoggerFactoryOptions, + DynamicPluginsSchemasOptions, + dynamicPluginsFrontendSchemas, + dynamicPluginsRootLoggerServiceFactory, + dynamicPluginsSchemasServiceFactory, +} from '../schemas'; /** * @public */ export type DynamicPluginsFeatureLoaderOptions = DynamicPluginsFactoryOptions & - DynamicPluginsSchemasOptions & - DynamicPluginsRootLoggerFactoryOptions; + DynamicPluginsSchemasOptions & { + logger?: (config?: Config) => DynamicPluginsRootLoggerFactoryOptions; + }; const dynamicPluginsFeatureLoaderWithOptions = ( options?: DynamicPluginsFeatureLoaderOptions, @@ -49,13 +51,18 @@ const dynamicPluginsFeatureLoaderWithOptions = ( *loader({ config }) { const dynamicPluginsEnabled = config.has(configKey); + let rootLoggerOptions: DynamicPluginsRootLoggerFactoryOptions = {}; + if (options?.logger) { + rootLoggerOptions = options.logger(config); + } + yield* [ dynamicPluginsSchemasServiceFactory(options), dynamicPluginsServiceFactory(options), ]; if (dynamicPluginsEnabled) { yield* [ - dynamicPluginsRootLoggerServiceFactory(options), + dynamicPluginsRootLoggerServiceFactory(rootLoggerOptions), dynamicPluginsFrontendSchemas, dynamicPluginsFeatureDiscoveryLoader, ]; @@ -94,12 +101,13 @@ const dynamicPluginsFeatureLoaderWithOptions = ( * import { dynamicPluginsFeatureLoader } from '@backstage/backend-dynamic-feature-service'; * import { myCustomModuleLoader } from './myCustomModuleLoader'; * import { myCustomSchemaLocator } from './myCustomSchemaLocator'; + * import { myConfiguredLoggerOptions } from './myConfiguredLoggerOptions'; * * const backend = createBackend(); * backend.add(dynamicPluginsFeatureLoader({ * moduleLoader: myCustomModuleLoader, * schemaLocator: myCustomSchemaLocator, - * + * logger: (config) => myConfiguredLoggerOptions(config), * })); * //... * backend.start(); diff --git a/packages/backend-dynamic-feature-service/src/loader/CommonJSModuleLoader.ts b/packages/backend-dynamic-feature-service/src/loader/CommonJSModuleLoader.ts index f9d4a48a44..50a6028422 100644 --- a/packages/backend-dynamic-feature-service/src/loader/CommonJSModuleLoader.ts +++ b/packages/backend-dynamic-feature-service/src/loader/CommonJSModuleLoader.ts @@ -16,17 +16,35 @@ import { ModuleLoader } from './types'; import { LoggerService } from '@backstage/backend-plugin-api'; import path from 'path'; +import { ScannedPluginManifest } from '../scanner'; +/** + * @public + */ +export type CommonJSModuleLoaderOptions = { + logger: LoggerService; + dynamicPluginPackageNameSuffixes?: String[]; + customResolveDynamicPackage?: ( + logger: LoggerService, + searchedPackageName: string, + scannedPluginManifests: Map, + ) => string | undefined; +}; + +/** + * @public + */ export class CommonJSModuleLoader implements ModuleLoader { private module: any; - constructor(public readonly logger: LoggerService) { + constructor(public readonly options: CommonJSModuleLoaderOptions) { this.module = require('node:module'); } async bootstrap( backstageRoot: string, dynamicPluginsPaths: string[], + scannedPluginManifests: Map, ): Promise { const backstageRootNodeModulesPath = `${backstageRoot}/node_modules`; const dynamicNodeModulesPaths = [ @@ -44,11 +62,91 @@ export class CommonJSModuleLoader implements ModuleLoader { dynamicNodeModulesPaths.some(p => nodeModulePath.startsWith(p)) ); }); - this.logger.debug( + this.options.logger.debug( `Overriding node_modules search path for dynamic plugin ${from} to: ${filtered}`, ); return filtered; }; + + // The whole piece of code below is a way to accomodate the limitations of + // the current `resolvePackagePath` implementation, which cannot be provided + // some custom locations where it should find the assets of some given packages. + // + // Since the packages for dynamic plugins are not located in the main backstage + // monorepo structure, and since dynamic plugins could also be repackaged + // (typically renamed with a `-dynamic` suffix), for now we have to customize + // module file name resolution here to support these use-cases. + // + // This might not be necessary anymore according to future enhancements to the + // `resolvePackagePath` feature. + const oldResolveFileName = this.module._resolveFilename; + this.module._resolveFilename = ( + request: string, + mod: NodeModule, + _: boolean, + options: any, + ): any => { + let errorToThrow: any; + try { + return oldResolveFileName(request, mod, _, options); + } catch (e) { + errorToThrow = e; + this.options.logger.debug( + `Could not resolve '${request}' inside the Core backstage backend application`, + e instanceof Error ? e : undefined, + ); + } + + // Are we trying to resolve a `package.json` from an originating module of the core backstage application + // (this is mostly done by calling `@backstage/backend-plugin-api/resolvePackagePath`). + const resolvingPackageJsonFromBackstageApplication = + request?.endsWith('/package.json') && + mod?.path && + !dynamicPluginsPaths.some(p => mod.path.startsWith(p)); + + // If not, we don't need the dedicated specfic case below. + if (!resolvingPackageJsonFromBackstageApplication) { + throw errorToThrow; + } + + this.options.logger.info( + `Resolving '${request}' in the dynamic backend plugins`, + ); + const searchedPackageName = request.replace(/\/package.json$/, ''); + + // First search for a dynamic plugin package matching the expected package name, + // taking in account accepted dynamic plugin package name suffixes + // (suffix accepted by default is '-dynamic'). + const searchedPackageNamesWithSuffixes = ( + this.options.dynamicPluginPackageNameSuffixes ?? ['-dynamic'] + ).map(s => `${searchedPackageName}${s}`); + for (const [realPath, pkg] of scannedPluginManifests.entries()) { + if ( + [searchedPackageName, ...searchedPackageNamesWithSuffixes].includes( + pkg.name, + ) + ) { + const resolvedPath = path.resolve(realPath, 'package.json'); + this.options.logger.info(`Resolved '${request}' at ${resolvedPath}`); + return resolvedPath; + } + } + + // If a custom resolution is provided, use it. + // This allows accomodating alternate ways to package dynamic plugins: + // static plugin package wrapped inside a distinct dynamic plugin package for example. + if (this.options.customResolveDynamicPackage) { + const resolvedPath = this.options.customResolveDynamicPackage( + this.options.logger, + searchedPackageName, + scannedPluginManifests, + ); + if (resolvedPath) { + return resolvedPath; + } + } + throw errorToThrow; + }; } async load(packagePath: string): Promise { diff --git a/packages/backend-dynamic-feature-service/src/loader/index.ts b/packages/backend-dynamic-feature-service/src/loader/index.ts index ff0892e66d..fe4f34dc90 100644 --- a/packages/backend-dynamic-feature-service/src/loader/index.ts +++ b/packages/backend-dynamic-feature-service/src/loader/index.ts @@ -15,3 +15,5 @@ */ export type { ModuleLoader } from './types'; +export type { CommonJSModuleLoaderOptions } from './CommonJSModuleLoader'; +export { CommonJSModuleLoader } from './CommonJSModuleLoader'; diff --git a/packages/backend-dynamic-feature-service/src/loader/types.ts b/packages/backend-dynamic-feature-service/src/loader/types.ts index 12a051e482..99f3c00607 100644 --- a/packages/backend-dynamic-feature-service/src/loader/types.ts +++ b/packages/backend-dynamic-feature-service/src/loader/types.ts @@ -14,11 +14,17 @@ * limitations under the License. */ +import { ScannedPluginManifest } from '../scanner'; + /** * @public */ export interface ModuleLoader { - bootstrap(backstageRoot: string, dynamicPluginPaths: string[]): Promise; + bootstrap( + backstageRoot: string, + dynamicPluginPaths: string[], + scannedPluginManifests?: Map, + ): Promise; load(id: string): Promise; } diff --git a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts index b6854e3263..d7133a804a 100644 --- a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts +++ b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts @@ -44,7 +44,7 @@ import { PluginScanner } from '../scanner/plugin-scanner'; import { findPaths } from '@backstage/cli-common'; import { createMockDirectory } from '@backstage/backend-test-utils'; import { rootLifecycleServiceFactory } from '@backstage/backend-defaults/rootLifecycle'; -import { PackageRole } from '@backstage/cli-node'; +import { BackstagePackageJson, PackageRole } from '@backstage/cli-node'; describe('backend-dynamic-feature-service', () => { const mockDir = createMockDirectory(); @@ -61,6 +61,13 @@ describe('backend-dynamic-feature-service', () => { relativePath: string[]; content: string; }; + alpha?: { + packageManifest: BackstagePackageJson; + indexFile: { + relativePath: string[]; + content: string; + }; + }; expectedLogs?(location: URL): { errors?: LogContent[]; warns?: LogContent[]; @@ -127,7 +134,7 @@ describe('backend-dynamic-feature-service', () => { }, indexFile: { relativePath: ['dist', 'index.cjs.js'], - content: `const alpha = { $$type: '@backstage/BackendFeature' }; exports["default"] = alpha;`, + content: `const feature = { $$type: '@backstage/BackendFeature' }; exports["default"] = feature;`, }, expectedLogs(location) { return { @@ -158,6 +165,60 @@ describe('backend-dynamic-feature-service', () => { ); }, }, + { + name: 'should load the alpha variant of a backend plugin in priority', + packageManifest: { + name: 'backend-dynamic-plugin-test', + version: '0.0.0', + backstage: { + role: 'backend-plugin', + }, + main: 'dist/index.cjs.js', + }, + indexFile: { + relativePath: ['dist', 'index.cjs.js'], + content: `throw 'should not take this one';`, + }, + alpha: { + packageManifest: { + name: 'backend-dynamic-plugin-test', + version: '0.0.0', + main: '../dist/alpha.cjs.js', + }, + indexFile: { + relativePath: ['dist', 'alpha.cjs.js'], + content: `const alpha = { $$type: '@backstage/BackendFeature' }; exports["default"] = alpha;`, + }, + }, + expectedLogs(location) { + return { + infos: [ + { + message: `loaded dynamic backend plugin 'backend-dynamic-plugin-test' from '${location}/alpha'`, + }, + ], + }; + }, + checkLoadedPlugins(plugins) { + expect(plugins).toMatchObject([ + { + name: 'backend-dynamic-plugin-test', + version: '0.0.0', + role: 'backend-plugin', + platform: 'node', + installer: { + kind: 'new', + }, + }, + ]); + const installer: NewBackendPluginInstaller = ( + plugins[0] as BackendDynamicPlugin + ).installer as NewBackendPluginInstaller; + expect((installer.install() as BackendFeature).$$type).toEqual( + '@backstage/BackendFeature', + ); + }, + }, { name: 'should successfully load a new backend plugin by the default BackendFeatureFactory', packageManifest: { @@ -580,11 +641,12 @@ describe('backend-dynamic-feature-service', () => { const plugin: ScannedPluginPackage = { location: url.pathToFileURL(mockDir.resolve(randomUUID())), manifest: tc.packageManifest, + alphaManifest: tc.alpha?.packageManifest, }; const mockedFiles = { [path.join(url.fileURLToPath(plugin.location), 'package.json')]: - JSON.stringify(plugin), + JSON.stringify(tc.packageManifest), }; if (tc.indexFile) { mockedFiles[ @@ -594,6 +656,18 @@ describe('backend-dynamic-feature-service', () => { ) ] = tc.indexFile.content; } + if (tc.alpha) { + mockedFiles[ + path.join(url.fileURLToPath(plugin.location), 'alpha', 'package.json') + ] = JSON.stringify(tc.alpha.packageManifest); + mockedFiles[ + path.join( + url.fileURLToPath(plugin.location), + ...tc.alpha.indexFile.relativePath, + ) + ] = tc.alpha.indexFile.content; + } + mockDir.setContent(mockedFiles); const logger = new MockedLogger(); @@ -1012,9 +1086,25 @@ describe('backend-dynamic-feature-service', () => { expect(fromConfigSpier).toHaveBeenCalled(); expect(applyConfigSpier).toHaveBeenCalled(); expect(scanRootSpier).toHaveBeenCalled(); + const realPath = fs.realpathSync( + otherMockDir.resolve('a-dynamic-plugin'), + ); expect(mockedModuleLoader.bootstrap).toHaveBeenCalledWith( findPaths(__dirname).targetRoot, - [fs.realpathSync(otherMockDir.resolve('a-dynamic-plugin'))], + [realPath], + new Map([ + [ + realPath, + { + name: 'test', + main: 'dist/index.cjs.js', + version: '0.0.0', + backstage: { + role: 'backend-plugin', + }, + }, + ], + ]), ); expect(mockedModuleLoader.load).toHaveBeenCalledWith( mockDir.resolve( diff --git a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts index a94a01f0f1..c64fca053c 100644 --- a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts +++ b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts @@ -36,7 +36,6 @@ import { } from '@backstage/backend-plugin-api'; import { PackageRole, PackageRoles } from '@backstage/cli-node'; import { findPaths } from '@backstage/cli-common'; -import path from 'path'; import * as fs from 'fs'; import { FeatureDiscoveryService, @@ -71,24 +70,26 @@ export class DynamicPluginManager implements DynamicPluginProvider { const scannedPlugins = (await scanner.scanRoot()).packages; scanner.trackChanges(); const moduleLoader = - options.moduleLoader || new CommonJSModuleLoader(options.logger); + options.moduleLoader || + new CommonJSModuleLoader({ logger: options.logger }); const manager = new DynamicPluginManager( options.logger, scannedPlugins, moduleLoader, ); - const dynamicPluginsPaths = scannedPlugins.map(p => - fs.realpathSync( - path.dirname( - path.dirname( - path.resolve(url.fileURLToPath(p.location), p.manifest.main), - ), - ), - ), + const scannedPluginManifestsPerRealPath = new Map( + scannedPlugins.map(p => [ + fs.realpathSync(url.fileURLToPath(p.location)), + p.manifest, + ]), ); - await moduleLoader.bootstrap(backstageRoot, dynamicPluginsPaths); + await moduleLoader.bootstrap( + backstageRoot, + [...scannedPluginManifestsPerRealPath.keys()], + scannedPluginManifestsPerRealPath, + ); scanner.subscribeToRootDirectoryChange(async () => { manager._availablePackages = (await scanner.scanRoot()).packages; @@ -164,8 +165,13 @@ export class DynamicPluginManager implements DynamicPluginProvider { private async loadBackendPlugin( plugin: ScannedPluginPackage, ): Promise { + const usedPluginManifest = + plugin.alphaManifest?.main ?? plugin.manifest.main; + const usedPluginLocation = plugin.alphaManifest?.main + ? `${plugin.location}/alpha` + : plugin.location; const packagePath = url.fileURLToPath( - `${plugin.location}/${plugin.manifest.main}`, + `${usedPluginLocation}/${usedPluginManifest}`, ); const dynamicPlugin: BackendDynamicPlugin = { name: plugin.manifest.name, @@ -194,12 +200,12 @@ export class DynamicPluginManager implements DynamicPluginProvider { } if (dynamicPlugin.installer) { this.logger.info( - `loaded dynamic backend plugin '${plugin.manifest.name}' from '${plugin.location}'`, + `loaded dynamic backend plugin '${plugin.manifest.name}' from '${usedPluginLocation}'`, ); } else { dynamicPlugin.failure = `the module should either export a 'BackendFeature' or 'BackendFeatureFactory' as default export, or export a 'const dynamicPluginInstaller: BackendDynamicPluginInstaller' field as dynamic loading entrypoint.`; this.logger.error( - `dynamic backend plugin '${plugin.manifest.name}' could not be loaded from '${plugin.location}': ${dynamicPlugin.failure}`, + `dynamic backend plugin '${plugin.manifest.name}' could not be loaded from '${usedPluginLocation}': ${dynamicPlugin.failure}`, ); } return dynamicPlugin; @@ -210,7 +216,7 @@ export class DynamicPluginManager implements DynamicPluginProvider { : new Error(error); dynamicPlugin.failure = `${typedError.name}: ${typedError.message}`; this.logger.error( - `an error occurred while loading dynamic backend plugin '${plugin.manifest.name}' from '${plugin.location}'`, + `an error occurred while loading dynamic backend plugin '${plugin.manifest.name}' from '${usedPluginLocation}'`, typedError, ); return dynamicPlugin; diff --git a/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.test.ts b/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.test.ts index 3086f2c16e..89fc42359f 100644 --- a/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.test.ts +++ b/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.test.ts @@ -30,6 +30,7 @@ const mockDir = createMockDirectory(); describe('plugin-scanner', () => { const env = process.env; + beforeEach(() => { jest.resetModules(); }); @@ -38,7 +39,6 @@ describe('plugin-scanner', () => { mockDir.clear(); process.env = env; }); - describe('applyConfig', () => { type TestCase = { name: string; @@ -430,16 +430,19 @@ Please add '${mockDir.resolve( expectedPluginPackages: [ { location: url.pathToFileURL( - mockDir.resolve( - 'backstageRoot/dist-dynamic/test-backend-plugin/alpha', - ), + mockDir.resolve('backstageRoot/dist-dynamic/test-backend-plugin'), ), manifest: { name: 'test-backend-plugin-dynamic', version: '0.0.0', - main: '../dist/alpha.cjs.js', + main: 'dist/index.cjs.js', backstage: { role: 'backend-plugin' }, }, + alphaManifest: { + name: 'test-backend-plugin-dynamic', + version: '0.0.0', + main: '../dist/alpha.cjs.js', + }, }, ], }, @@ -539,9 +542,11 @@ Please add '${mockDir.resolve( expectedLogs: { errors: [ { - message: `failed to load dynamic plugin manifest from '${mockDir.resolve( - 'backstageRoot/dist-dynamic/test-backend-plugin/alpha', - )}'`, + message: expect.stringContaining( + `failed to load dynamic plugin manifest from '${mockDir.resolve( + 'backstageRoot/dist-dynamic/test-backend-plugin/alpha', + )}'; caused by SyntaxError: Unexpected token`, + ), meta: { name: 'SyntaxError', message: expect.stringContaining('Unexpected token'), diff --git a/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.ts b/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.ts index 7091999e7b..5b254908b2 100644 --- a/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.ts +++ b/packages/backend-dynamic-feature-service/src/scanner/plugin-scanner.ts @@ -21,8 +21,8 @@ import * as chokidar from 'chokidar'; import * as path from 'path'; import * as url from 'url'; import debounce from 'lodash/debounce'; -import { PackagePlatform, PackageRoles } from '@backstage/cli-node'; import { LoggerService } from '@backstage/backend-plugin-api'; +import { ForwardedError } from '@backstage/errors'; export interface DynamicPluginScannerOptions { config: Config; @@ -161,52 +161,25 @@ export class PluginScanner { } let scannedPlugin: ScannedPluginPackage; - let platform: PackagePlatform; try { scannedPlugin = await this.scanDir(pluginHome); if (!scannedPlugin.manifest.main) { throw new Error("field 'main' not found in 'package.json'"); } - if (scannedPlugin.manifest.backstage?.role) { - platform = PackageRoles.getRoleInfo( - scannedPlugin.manifest.backstage.role, - ).platform; - } else { + if (!scannedPlugin.manifest.backstage?.role) { throw new Error("field 'backstage.role' not found in 'package.json'"); } } catch (e) { - this.logger.error( - `failed to load dynamic plugin manifest from '${pluginHome}'`, - e, - ); + if (e instanceof ForwardedError) { + this.logger.error(e.message, e.cause); + } else { + this.logger.error( + `failed to load dynamic plugin manifest from '${pluginHome}'`, + e, + ); + } continue; } - - if (platform === 'node') { - if (this.preferAlpha) { - const pluginHomeAlpha = path.resolve(pluginHome, 'alpha'); - if (existsSync(pluginHomeAlpha)) { - if ((await fs.lstat(pluginHomeAlpha)).isDirectory()) { - const backstage = scannedPlugin.manifest.backstage; - try { - scannedPlugin = await this.scanDir(pluginHomeAlpha); - } catch (e) { - this.logger.error( - `failed to load dynamic plugin manifest from '${pluginHomeAlpha}'`, - e, - ); - continue; - } - scannedPlugin.manifest.backstage = backstage; - } else { - this.logger.warn( - `skipping '${pluginHomeAlpha}' since it is not a directory`, - ); - } - } - } - } - scannedPlugins.push(scannedPlugin); } return { packages: scannedPlugins }; @@ -216,10 +189,37 @@ export class PluginScanner { const manifestFile = path.resolve(pluginHome, 'package.json'); const content = await fs.readFile(manifestFile); const manifest: ScannedPluginManifest = JSON.parse(content.toString()); - return { + const scannedPluginPackage: ScannedPluginPackage = { location: url.pathToFileURL(pluginHome), manifest: manifest, }; + + if (this.preferAlpha) { + const pluginHomeAlpha = path.resolve(pluginHome, 'alpha'); + if (existsSync(pluginHomeAlpha)) { + if ((await fs.lstat(pluginHomeAlpha)).isDirectory()) { + try { + const alphaContent = await fs.readFile( + path.resolve(pluginHomeAlpha, 'package.json'), + ); + scannedPluginPackage.alphaManifest = JSON.parse( + alphaContent.toString(), + ); + } catch (e) { + throw new ForwardedError( + `failed to load dynamic plugin manifest from '${pluginHome}/alpha'`, + e, + ); + } + } else { + this.logger.warn( + `skipping '${pluginHomeAlpha}' since it is not a directory`, + ); + } + } + } + + return scannedPluginPackage; } async trackChanges(): Promise { diff --git a/packages/backend-dynamic-feature-service/src/scanner/types.ts b/packages/backend-dynamic-feature-service/src/scanner/types.ts index 5bac92f064..bfb3e21c89 100644 --- a/packages/backend-dynamic-feature-service/src/scanner/types.ts +++ b/packages/backend-dynamic-feature-service/src/scanner/types.ts @@ -22,6 +22,7 @@ import { BackstagePackageJson, PackageRole } from '@backstage/cli-node'; export interface ScannedPluginPackage { location: URL; manifest: ScannedPluginManifest; + alphaManifest?: BackstagePackageJson; } /** diff --git a/packages/backend-dynamic-feature-service/src/schemas/schemas.ts b/packages/backend-dynamic-feature-service/src/schemas/schemas.ts index 52fb5eab6d..0e873e986c 100644 --- a/packages/backend-dynamic-feature-service/src/schemas/schemas.ts +++ b/packages/backend-dynamic-feature-service/src/schemas/schemas.ts @@ -161,10 +161,7 @@ async function gatherDynamicPluginsSchemas( let schemaLocation = schemaLocator(pluginPackage); if (!path.isAbsolute(schemaLocation)) { - let pluginLocation = url.fileURLToPath(pluginPackage.location); - if (path.basename(pluginLocation) === 'alpha') { - pluginLocation = path.dirname(pluginLocation); - } + const pluginLocation = url.fileURLToPath(pluginPackage.location); schemaLocation = path.resolve(pluginLocation, schemaLocation); } diff --git a/packages/backend-legacy/CHANGELOG.md b/packages/backend-legacy/CHANGELOG.md index 58c6bdc7c0..2e5fdf3d48 100644 --- a/packages/backend-legacy/CHANGELOG.md +++ b/packages/backend-legacy/CHANGELOG.md @@ -1,5 +1,331 @@ # example-backend-legacy +## 0.2.105-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.28.0-next.2 + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/plugin-app-backend@0.4.3-next.2 + - @backstage/plugin-auth-backend@0.24.1-next.2 + - @backstage/plugin-events-backend@0.4.0-next.2 + - @backstage/plugin-kubernetes-backend@0.19.1-next.2 + - @backstage/plugin-proxy-backend@0.5.9-next.2 + - @backstage/plugin-search-backend@1.8.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/plugin-signals-backend@0.2.4-next.2 + - @backstage/plugin-techdocs-backend@1.11.4-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.2 + - @backstage/plugin-catalog-node@1.15.0-next.2 + - @backstage/plugin-events-node@0.4.6-next.2 + - @backstage/plugin-permission-backend@0.5.52-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4-next.2 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.4-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.39-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2 + - @backstage/plugin-signals-node@0.1.15-next.2 + - @backstage/catalog-client@1.9.0-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/config@1.3.1-next.0 + - @backstage/integration@1.16.0-next.1 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## 0.2.105-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.1 + - @backstage/plugin-auth-backend@0.24.1-next.1 + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-catalog-node@1.15.0-next.1 + - @backstage/catalog-client@1.9.0-next.1 + - @backstage/plugin-events-backend@0.4.0-next.1 + - @backstage/plugin-search-backend@1.8.0-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.1 + - @backstage/plugin-permission-backend@0.5.52-next.1 + - @backstage/plugin-techdocs-backend@1.11.4-next.1 + - @backstage/plugin-signals-backend@0.2.4-next.1 + - @backstage/plugin-proxy-backend@0.5.9-next.1 + - @backstage/plugin-app-backend@0.4.3-next.1 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.1 + - @backstage/plugin-kubernetes-backend@0.19.1-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/plugin-scaffolder-backend@1.28.0-next.1 + - @backstage/plugin-signals-node@0.1.15-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.1 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.4-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-events-node@0.4.6-next.1 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-search-backend-module-pg@0.5.39-next.1 + +## 0.2.105-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/integration@1.16.0-next.0 + - @backstage/plugin-scaffolder-backend@1.28.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.0 + - @backstage/plugin-app-backend@0.4.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-events-node@0.4.6-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-permission-backend@0.5.52-next.0 + - @backstage/plugin-devtools-backend@0.4.3-next.0 + - @backstage/plugin-signals-backend@0.2.4-next.0 + - @backstage/plugin-events-backend@0.3.17-next.0 + - @backstage/plugin-kubernetes-backend@0.19.1-next.0 + - @backstage/catalog-client@1.8.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/config@1.3.0 + - @backstage/plugin-auth-backend@0.24.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.0 + - @backstage/plugin-catalog-node@1.14.1-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + - @backstage/plugin-proxy-backend@0.5.9-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.3-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.3-next.0 + - @backstage/plugin-search-backend@1.7.1-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.39-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-signals-node@0.1.15-next.0 + - @backstage/plugin-techdocs-backend@1.11.4-next.0 + +## 0.2.104 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0 + - @backstage/config@1.3.0 + - @backstage/plugin-events-node@0.4.5 + - @backstage/backend-defaults@0.5.3 + - @backstage/plugin-app-backend@0.4.0 + - @backstage/plugin-search-backend-module-catalog@0.2.5 + - @backstage/plugin-scaffolder-backend@1.27.0 + - @backstage/plugin-auth-backend@0.24.0 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-search-backend@1.7.0 + - @backstage/plugin-events-backend@0.3.16 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1 + - @backstage/plugin-kubernetes-backend@0.19.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2 + - @backstage/plugin-search-backend-module-explore@0.2.5 + - @backstage/plugin-catalog-node@1.14.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-signals-backend@0.2.3 + - @backstage/plugin-search-backend-module-pg@0.5.38 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-proxy-backend@0.5.8 + - @backstage/plugin-signals-node@0.1.14 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2 + - @backstage/catalog-model@1.7.1 + - @backstage/integration@1.15.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2 + - @backstage/plugin-devtools-backend@0.4.2 + - @backstage/plugin-permission-backend@0.5.51 + - @backstage/plugin-permission-node@0.8.5 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2 + - @backstage/plugin-techdocs-backend@1.11.2 + +## 0.2.104-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.5-next.3 + - @backstage/plugin-events-backend@0.3.16-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/plugin-scaffolder-backend@1.27.0-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-app-backend@0.3.77-next.2 + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-devtools-backend@0.4.2-next.2 + - @backstage/plugin-kubernetes-backend@0.19.0-next.3 + - @backstage/plugin-permission-backend@0.5.51-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-proxy-backend@0.5.8-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.3 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.3 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.3 + - @backstage/plugin-search-backend@1.7.0-next.3 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.3 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.3 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.3 + - @backstage/plugin-search-backend-module-pg@0.5.38-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.3 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-signals-backend@0.2.3-next.3 + - @backstage/plugin-signals-node@0.1.14-next.3 + - @backstage/plugin-techdocs-backend@1.11.2-next.3 + +## 0.2.104-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.8.0-next.1 + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/plugin-search-backend@1.7.0-next.2 + - @backstage/plugin-kubernetes-backend@0.19.0-next.2 + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-events-backend@0.3.16-next.2 + - @backstage/plugin-events-node@0.4.5-next.2 + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-node@1.14.0-next.2 + - @backstage/plugin-scaffolder-backend@1.27.0-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.2 + - @backstage/plugin-techdocs-backend@1.11.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-app-backend@0.3.77-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + - @backstage/plugin-devtools-backend@0.4.2-next.2 + - @backstage/plugin-permission-backend@0.5.51-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-proxy-backend@0.5.8-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.2 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.38-next.2 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-signals-backend@0.2.3-next.2 + - @backstage/plugin-signals-node@0.1.14-next.2 + +## 0.2.104-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.19.0-next.1 + - @backstage/plugin-scaffolder-backend@1.27.0-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.1 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-app-backend@0.3.77-next.1 + - @backstage/plugin-auth-backend@0.24.0-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.14.0-next.1 + - @backstage/plugin-devtools-backend@0.4.2-next.1 + - @backstage/plugin-events-backend@0.3.16-next.1 + - @backstage/plugin-events-node@0.4.4-next.1 + - @backstage/plugin-permission-backend@0.5.51-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-proxy-backend@0.5.8-next.1 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.1 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.1 + - @backstage/plugin-search-backend@1.6.2-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.1 + - @backstage/plugin-search-backend-module-pg@0.5.38-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-signals-backend@0.2.3-next.1 + - @backstage/plugin-signals-node@0.1.14-next.1 + - @backstage/plugin-techdocs-backend@1.11.2-next.1 + +## 0.2.104-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.4.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.0 + - @backstage/plugin-scaffolder-backend@1.26.3-next.0 + - @backstage/plugin-auth-backend@0.24.0-next.0 + - @backstage/plugin-events-backend@0.3.15-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.0 + - @backstage/plugin-catalog-node@1.14.0-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/plugin-signals-backend@0.2.3-next.0 + - @backstage/catalog-client@1.8.0-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/integration@1.15.1 + - @backstage/plugin-app-backend@0.3.77-next.0 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.0 + - @backstage/plugin-devtools-backend@0.4.2-next.0 + - @backstage/plugin-kubernetes-backend@0.18.8-next.0 + - @backstage/plugin-permission-backend@0.5.51-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + - @backstage/plugin-proxy-backend@0.5.8-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.0 + - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.0 + - @backstage/plugin-search-backend@1.6.2-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.38-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-signals-node@0.1.14-next.0 + - @backstage/plugin-techdocs-backend@1.11.2-next.0 + ## 0.2.103 ### Patch Changes diff --git a/packages/backend-legacy/package.json b/packages/backend-legacy/package.json index 563bcb830e..f1ac32e60b 100644 --- a/packages/backend-legacy/package.json +++ b/packages/backend-legacy/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-legacy", - "version": "0.2.103", + "version": "0.2.105-next.2", "backstage": { "role": "backend" }, @@ -42,7 +42,6 @@ "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", - "@backstage/plugin-devtools-backend": "workspace:^", "@backstage/plugin-events-backend": "workspace:^", "@backstage/plugin-events-node": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", diff --git a/packages/backend-legacy/src/index.ts b/packages/backend-legacy/src/index.ts index 23f71baba5..8ef969ff2b 100644 --- a/packages/backend-legacy/src/index.ts +++ b/packages/backend-legacy/src/index.ts @@ -48,7 +48,6 @@ import techdocs from './plugins/techdocs'; import app from './plugins/app'; import permission from './plugins/permission'; import signals from './plugins/signals'; -import devtools from './plugins/devtools'; import { PluginEnvironment } from './types'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; @@ -138,7 +137,6 @@ async function main() { const appEnv = useHotMemoize(module, () => createEnv('app')); const permissionEnv = useHotMemoize(module, () => createEnv('permission')); const eventsEnv = useHotMemoize(module, () => createEnv('events')); - const devToolsEnv = useHotMemoize(module, () => createEnv('devtools')); const signalsEnv = useHotMemoize(module, () => createEnv('signals')); const apiRouter = Router(); @@ -151,7 +149,6 @@ async function main() { apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv)); apiRouter.use('/proxy', await proxy(proxyEnv)); apiRouter.use('/permission', await permission(permissionEnv)); - apiRouter.use('/devtools', await devtools(devToolsEnv)); apiRouter.use('/signals', await signals(signalsEnv)); apiRouter.use(notFoundHandler()); diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index 83e7f1cfd2..35ec5cc456 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,82 @@ # @backstage/backend-openapi-utils +## 0.4.0-next.2 + +### Minor Changes + +- afcebea: Fixed a Typescript error when trying to use the new OpenAPI server-side generated code. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/errors@1.2.6-next.0 + - @backstage/types@1.2.0 + +## 0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/errors@1.2.5 + - @backstage/types@1.2.0 + +## 0.3.0 + +### Minor Changes + +- 1440232: Adds a new `createValidatedOpenApiRouterFromGeneratedEndpointMap` function that uses the new static server generation in `backstage-cli package schema openapi generate --server` to create a typed express router. + +### Patch Changes + +- f01787a: Moves msw from dependencies to devDependencies +- Updated dependencies + - @backstage/types@1.2.0 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/errors@1.2.5 + +## 0.3.0-next.2 + +### Minor Changes + +- 1440232: Adds a new `createValidatedOpenApiRouterFromGeneratedEndpointMap` function that uses the new static server generation in `backstage-cli package schema openapi generate --server` to create a typed express router. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## 0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## 0.2.1-next.0 + +### Patch Changes + +- f01787a: Moves msw from dependencies to devDependencies +- Updated dependencies + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + ## 0.2.0 ### Minor Changes diff --git a/packages/backend-openapi-utils/README.md b/packages/backend-openapi-utils/README.md index 3d3f40682e..33f2200f81 100644 --- a/packages/backend-openapi-utils/README.md +++ b/packages/backend-openapi-utils/README.md @@ -1,4 +1,4 @@ -# @backstage/openapi-utils +# @backstage/backend-openapi-utils ## Summary diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index ddb50812c2..099afe2419 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-openapi-utils", - "version": "0.2.0", + "version": "0.4.0-next.2", "description": "OpenAPI typescript support.", "backstage": { "role": "node-library" diff --git a/packages/backend-openapi-utils/report.api.md b/packages/backend-openapi-utils/report.api.md index 2f660cd0d6..22913eb321 100644 --- a/packages/backend-openapi-utils/report.api.md +++ b/packages/backend-openapi-utils/report.api.md @@ -102,12 +102,45 @@ export function createValidatedOpenApiRouter( }, ): ApiRouter; +// @public +export function createValidatedOpenApiRouterFromGeneratedEndpointMap< + T extends EndpointMap, +>( + spec: RequiredDoc, + options?: { + validatorOptions?: Partial['0']>; + middleware?: RequestHandler[]; + }, +): TypedRouter; + // @public (undocumented) type DiscriminateUnion = Extract< T, Record >; +// @public (undocumented) +type DocEndpoint = ValueOf<{ + [Template in keyof Doc]: Template extends `#${string}|${infer Endpoint}` + ? Endpoint + : never; +}>; + +// @public (undocumented) +type DocEndpointMethod< + Doc extends EndpointMap, + Endpoint extends DocEndpoint, +> = ValueOf<{ + [Template in keyof Doc]: Template extends `#${infer Method}|${Endpoint}` + ? Method + : never; +}>; + +// @public (undocumented) +type DocEndpointTemplate = PathTemplate< + DocEndpoint +>; + // @public (undocumented) type DocOperation< Doc extends RequiredDoc, @@ -239,6 +272,85 @@ interface DocRequestMatcher< ): T; } +// @public (undocumented) +type EndpointMap = Record< + string, + { + query?: object; + body?: object; + response?: object | void; + path?: object; + } +>; + +// @public +type EndpointMapRequestHandler< + Doc extends EndpointMap, + Path extends DocEndpoint, + Method extends DocEndpointMethod, +> = core.RequestHandler< + StaticPathParamsSchema, + StaticResponseSchema, + StaticRequestBodySchema, + StaticQueryParamsSchema, + Record +>; + +// @public +type EndpointMapRequestHandlerParams< + Doc extends EndpointMap, + Path extends DocEndpoint, + Method extends DocEndpointMethod, +> = core.RequestHandlerParams< + StaticPathParamsSchema, + StaticResponseSchema, + StaticRequestBodySchema, + StaticQueryParamsSchema, + Record +>; + +// @public +interface EndpointMapRequestMatcher< + Doc extends EndpointMap, + T, + Method extends HttpMethods, +> { + // (undocumented) + < + TPath extends MethodAwareDocEndpoints< + Doc, + DocEndpoint, + Method & DocEndpointMethod> + >, + TMethod extends Method & + DocEndpointMethod>, + >( + path: TPath, + ...handlers: Array< + EndpointMapRequestHandler, TMethod> + > + ): T; + // (undocumented) + < + TPath extends MethodAwareDocEndpoints< + Doc, + DocEndpoint, + Method & DocEndpointMethod> + >, + TMethod extends Method & + DocEndpointMethod>, + >( + path: TPath, + ...handlers: Array< + EndpointMapRequestHandlerParams< + Doc, + TemplateToDocEndpoint, + TMethod + > + > + ): T; +} + // @public (undocumented) type Filter = T extends U ? T : never; @@ -278,6 +390,9 @@ type HeaderSchema< Method extends DocPathMethod, > = ParametersSchema; +// @public (undocumented) +type HttpMethods = 'all' | 'put' | 'get' | 'post' | '_delete'; + // @public type Immutable = T extends | Function @@ -401,6 +516,20 @@ declare namespace internal { Response_3 as Response, ResponseSchemas, ResponseBodyToJsonSchema, + EndpointMap, + HttpMethods, + StaticPathParamsSchema, + StaticRequestBodySchema, + StaticResponseSchema, + StaticQueryParamsSchema, + EndpointMapRequestHandler, + EndpointMapRequestHandlerParams, + DocEndpoint, + DocEndpointMethod, + MethodAwareDocEndpoints, + DocEndpointTemplate, + TemplateToDocEndpoint, + EndpointMapRequestMatcher, }; } export { internal }; @@ -427,6 +556,19 @@ type MapToSchema< : never; }; +// @public (undocumented) +type MethodAwareDocEndpoints< + Doc extends EndpointMap, + Endpoint extends DocEndpoint, + Method extends DocEndpointMethod, +> = ValueOf<{ + [Template in keyof Doc]: Template extends `#${Method}|${infer E}` + ? E extends DocEndpoint + ? PathTemplate + : never + : never; +}>; + // @public (undocumented) type MethodAwareDocPath< Doc extends PathDoc, @@ -513,7 +655,7 @@ type PathSchema< > = ParametersSchema; // @public -type PathTemplate = +export type PathTemplate = Path extends `${infer Prefix}{${infer PathName}}${infer Suffix}` ? `${Prefix}:${PathName}${PathTemplate}` : Path; @@ -684,6 +826,60 @@ type SchemaRef = Schema extends { [Key in keyof Schema]: SchemaRef; }; +// @public (undocumented) +type StaticPathParamsSchema< + Doc extends EndpointMap, + Endpoint extends DocEndpoint, + Method extends DocEndpointMethod, +> = `#${Method}|${Endpoint}` extends keyof Doc + ? 'path' extends keyof Doc[`#${Method}|${Endpoint}`] + ? Doc[`#${Method}|${Endpoint}`]['path'] + : never + : never; + +// @public (undocumented) +type StaticQueryParamsSchema< + Doc extends EndpointMap, + Endpoint extends DocEndpoint, + Method extends DocEndpointMethod, +> = `#${Method}|${Endpoint}` extends keyof Doc + ? 'query' extends keyof Doc[`#${Method}|${Endpoint}`] + ? Doc[`#${Method}|${Endpoint}`]['query'] + : never + : never; + +// @public (undocumented) +type StaticRequestBodySchema< + Doc extends EndpointMap, + Endpoint extends DocEndpoint, + Method extends DocEndpointMethod, +> = `#${Method}|${Endpoint}` extends keyof Doc + ? 'body' extends keyof Doc[`#${Method}|${Endpoint}`] + ? Doc[`#${Method}|${Endpoint}`]['body'] + : unknown + : unknown; + +// @public (undocumented) +type StaticResponseSchema< + Doc extends EndpointMap, + Endpoint extends DocEndpoint, + Method extends DocEndpointMethod, +> = `#${Method}|${Endpoint}` extends keyof Doc + ? 'response' extends keyof Doc[`#${Method}|${Endpoint}`] + ? Doc[`#${Method}|${Endpoint}`]['response'] + : unknown + : unknown; + +// @public (undocumented) +type TemplateToDocEndpoint< + Doc extends EndpointMap, + Path extends DocEndpointTemplate, +> = ValueOf<{ + [Template in DocEndpoint]: Path extends PathTemplate