diff --git a/.changeset/angry-mayflies-collect.md b/.changeset/angry-mayflies-collect.md
new file mode 100644
index 0000000000..df49f98b33
--- /dev/null
+++ b/.changeset/angry-mayflies-collect.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+Correct size of FavoriteToggle and inherit non-starred color from parent
diff --git a/.changeset/angry-windows-decide.md b/.changeset/angry-windows-decide.md
new file mode 100644
index 0000000000..6a5c225e80
--- /dev/null
+++ b/.changeset/angry-windows-decide.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Fix extra divider displayed in owner list picker on list tasks page
diff --git a/.changeset/big-eagles-grab.md b/.changeset/big-eagles-grab.md
deleted file mode 100644
index 9ece8f64df..0000000000
--- a/.changeset/big-eagles-grab.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-github': patch
----
-
-Added examples for github:environment:create action and improve its test cases
diff --git a/.changeset/big-rules-nail.md b/.changeset/big-rules-nail.md
new file mode 100644
index 0000000000..959ce2a26e
--- /dev/null
+++ b/.changeset/big-rules-nail.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-backend-module-elasticsearch': patch
+---
+
+Align the configuration schema with the docs and actual behavior of the code
diff --git a/.changeset/blue-pumas-cheer.md b/.changeset/blue-pumas-cheer.md
deleted file mode 100644
index f6cbf180ff..0000000000
--- a/.changeset/blue-pumas-cheer.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/create-app': patch
----
-
-Added the Kubernetes plugin to `create-app`
diff --git a/.changeset/breezy-bulldogs-smell.md b/.changeset/breezy-bulldogs-smell.md
new file mode 100644
index 0000000000..69825142cb
--- /dev/null
+++ b/.changeset/breezy-bulldogs-smell.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Create a separate route for the Scaffolder template editor and add the ability to refresh the page without closing the directory. Also, when the directory is closed, the user will stay on the editor page and can load a template folder from there.
diff --git a/.changeset/breezy-jeans-tie.md b/.changeset/breezy-jeans-tie.md
deleted file mode 100644
index 4601389a4c..0000000000
--- a/.changeset/breezy-jeans-tie.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-'@backstage/plugin-auth-backend-module-cloudflare-access-provider': patch
-'@backstage/plugin-auth-backend-module-vmware-cloud-provider': patch
-'@backstage/plugin-auth-backend-module-atlassian-provider': patch
-'@backstage/plugin-auth-backend-module-bitbucket-provider': patch
-'@backstage/plugin-auth-backend-module-microsoft-provider': patch
-'@backstage/plugin-auth-backend-module-onelogin-provider': patch
-'@backstage/plugin-auth-backend-module-aws-alb-provider': patch
-'@backstage/plugin-auth-backend-module-gcp-iap-provider': patch
-'@backstage/plugin-auth-backend-module-github-provider': patch
-'@backstage/plugin-auth-backend-module-gitlab-provider': patch
-'@backstage/plugin-auth-backend-module-google-provider': patch
-'@backstage/plugin-auth-backend-module-oauth2-provider': patch
-'@backstage/plugin-auth-backend-module-oidc-provider': patch
-'@backstage/plugin-auth-backend-module-okta-provider': patch
----
-
-Add `signIn` to authentication provider configuration schema
diff --git a/.changeset/bright-trainers-brake.md b/.changeset/bright-trainers-brake.md
deleted file mode 100644
index 2299d83a32..0000000000
--- a/.changeset/bright-trainers-brake.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/cli': patch
----
-
-Add frontend-dynamic-container role to eslint config factory
diff --git a/.changeset/brown-frogs-walk.md b/.changeset/brown-frogs-walk.md
new file mode 100644
index 0000000000..6fae44be73
--- /dev/null
+++ b/.changeset/brown-frogs-walk.md
@@ -0,0 +1,17 @@
+---
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+Add `fetch:template:file` scaffolder action to download a single file and template the contents. Example usage:
+
+```yaml
+- id: fetch-file
+ name: Fetch File
+ action: fetch:template:file
+ input:
+ url: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/skeleton/catalog-info.yaml
+ targetPath: './target/catalog-info.yaml'
+ values:
+ component_id: My Component
+ owner: Test
+```
diff --git a/.changeset/chair-fairs-drive.md b/.changeset/chair-fairs-drive.md
new file mode 100644
index 0000000000..91c00c063a
--- /dev/null
+++ b/.changeset/chair-fairs-drive.md
@@ -0,0 +1,9 @@
+---
+'@backstage/frontend-plugin-api': minor
+---
+
+Removed deprecated `namespace` option from `createExtension` and `createExtensionBlueprint`, including `.make` and `.makeWithOverides`, it's no longer necessary and will use the `pluginId` instead.
+
+Removed deprecated `createExtensionOverrides` this should be replaced with `createFrontendModule` instead.
+
+Removed deprecated `BackstagePlugin` type, use `FrontendPlugin` type instead from this same package.
diff --git a/.changeset/chilled-dolphins-join.md b/.changeset/chilled-dolphins-join.md
new file mode 100644
index 0000000000..4c3f5a381b
--- /dev/null
+++ b/.changeset/chilled-dolphins-join.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog': minor
+---
+
+Updated default columns for location entities to remove description and tags from the catalog table view.
diff --git a/.changeset/chilly-trains-sleep.md b/.changeset/chilly-trains-sleep.md
deleted file mode 100644
index cde7600c8b..0000000000
--- a/.changeset/chilly-trains-sleep.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-'@backstage/plugin-events-backend-module-aws-sqs': patch
-'@backstage/plugin-catalog-backend-module-aws': patch
-'@backstage/backend-common': patch
----
-
-Setup user agent header for AWS sdk clients, this enables users to better track API calls made from Backstage to AWS APIs through things like CloudTrail.
diff --git a/.changeset/clever-paws-stare.md b/.changeset/clever-paws-stare.md
new file mode 100644
index 0000000000..ad56a5306e
--- /dev/null
+++ b/.changeset/clever-paws-stare.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Added functionality to the prepack script that will append the default export type for entry points to the `exports` object before publishing. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first.
diff --git a/.changeset/cold-nails-rescue.md b/.changeset/cold-nails-rescue.md
new file mode 100644
index 0000000000..b7667305ca
--- /dev/null
+++ b/.changeset/cold-nails-rescue.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': minor
+---
+
+**BREAKING**: The Jest configuration defined at `@backstage/cli/config/jest` no longer collects configuration defined in the `"jest"` field from all parent `package.json` files. Instead, it will only read and merge configuration from the `package.json` in the monorepo root if it exists, as well as the target package. In addition, configuration defined in the root `package.json` will now only be merged into each package configuration if it is a valid project-level configuration key.
diff --git a/.changeset/cool-insects-remember.md b/.changeset/cool-insects-remember.md
deleted file mode 100644
index ab33015377..0000000000
--- a/.changeset/cool-insects-remember.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-notifications': patch
----
-
-Add examples for notification:send scaffolder action & improve related tests
diff --git a/.changeset/create-app-1727774359.md b/.changeset/create-app-1727774359.md
new file mode 100644
index 0000000000..b50d431d4b
--- /dev/null
+++ b/.changeset/create-app-1727774359.md
@@ -0,0 +1,5 @@
+---
+'@backstage/create-app': patch
+---
+
+Bumped create-app version.
diff --git a/.changeset/curly-foxes-brake.md b/.changeset/curly-foxes-brake.md
new file mode 100644
index 0000000000..6946f30371
--- /dev/null
+++ b/.changeset/curly-foxes-brake.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Apply `defaultValue` props in `MultiEntityPicker`
diff --git a/.changeset/cyan-cooks-sing.md b/.changeset/cyan-cooks-sing.md
new file mode 100644
index 0000000000..70492d0165
--- /dev/null
+++ b/.changeset/cyan-cooks-sing.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-gerrit': patch
+---
+
+Fixed an issue preventing the provider's `schedule` config from being applied."
diff --git a/.changeset/cyan-peaches-lay.md b/.changeset/cyan-peaches-lay.md
new file mode 100644
index 0000000000..a2b393caf8
--- /dev/null
+++ b/.changeset/cyan-peaches-lay.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Create a separate route for the template form editor so we refresh it without being redirected to scaffolder edit page.
diff --git a/.changeset/cyan-vans-study.md b/.changeset/cyan-vans-study.md
new file mode 100644
index 0000000000..a69b95fd85
--- /dev/null
+++ b/.changeset/cyan-vans-study.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+Include step name and step id to checkpoint key
diff --git a/.changeset/dry-frogs-drum.md b/.changeset/dry-frogs-drum.md
new file mode 100644
index 0000000000..c929732943
--- /dev/null
+++ b/.changeset/dry-frogs-drum.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Change task list created at column to show timestamp
diff --git a/.changeset/dry-squids-tap.md b/.changeset/dry-squids-tap.md
deleted file mode 100644
index 0a95332eed..0000000000
--- a/.changeset/dry-squids-tap.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-'@backstage/frontend-plugin-api': patch
----
-
-Introduce a new way to encapsulate extension kinds that replaces the extension creator pattern with `createExtensionBlueprint`
-
-This allows the creation of extension instances with the following pattern:
-
-```tsx
-// create the extension blueprint which is used to create instances
-const EntityCardBlueprint = createExtensionBlueprint({
- kind: 'entity-card',
- attachTo: { id: 'test', input: 'default' },
- output: [coreExtensionData.reactElement],
- factory(params: { text: string }) {
- return [coreExtensionData.reactElement(
{params.text} )];
- },
-});
-
-// create an instance of the extension blueprint with params
-const testExtension = EntityCardBlueprint.make({
- name: 'foo',
- params: {
- text: 'Hello World',
- },
-});
-```
diff --git a/.changeset/dull-ghosts-double.md b/.changeset/dull-ghosts-double.md
deleted file mode 100644
index 0bc5a09791..0000000000
--- a/.changeset/dull-ghosts-double.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-'@backstage/plugin-catalog-react': patch
-'@backstage/plugin-search-react': patch
-'@backstage/plugin-home': patch
----
-
-Updated alpha definitions of extension data references.
diff --git a/.changeset/early-drinks-kneel.md b/.changeset/early-drinks-kneel.md
new file mode 100644
index 0000000000..c744cd5d7c
--- /dev/null
+++ b/.changeset/early-drinks-kneel.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-scaffolder-backend': minor
+'@backstage/plugin-scaffolder-node': minor
+---
+
+Added pagination support for listing of tasks and the ability to filter on several users and task statuses.
diff --git a/.changeset/early-sloths-cross.md b/.changeset/early-sloths-cross.md
new file mode 100644
index 0000000000..7f4a563918
--- /dev/null
+++ b/.changeset/early-sloths-cross.md
@@ -0,0 +1,49 @@
+---
+'@backstage/plugin-signals-react': patch
+'@backstage/plugin-signals': patch
+'@backstage/plugin-api-docs-module-protoc-gen-doc': patch
+'@backstage/plugin-techdocs-module-addons-contrib': patch
+'@backstage/plugin-catalog-unprocessed-entities': patch
+'@backstage/plugin-scaffolder-node-test-utils': patch
+'@backstage/plugin-techdocs-addons-test-utils': patch
+'@backstage/frontend-plugin-api': patch
+'@backstage/frontend-test-utils': patch
+'@backstage/integration-react': patch
+'@backstage/plugin-kubernetes-cluster': patch
+'@backstage/frontend-app-api': patch
+'@backstage/core-compat-api': patch
+'@backstage/core-components': patch
+'@backstage/core-plugin-api': patch
+'@backstage/plugin-kubernetes-react': patch
+'@backstage/plugin-permission-react': patch
+'@backstage/plugin-scaffolder-react': patch
+'@backstage/version-bridge': patch
+'@backstage/plugin-app-visualizer': patch
+'@backstage/plugin-catalog-import': patch
+'@backstage/plugin-techdocs-react': patch
+'@backstage/app-defaults': patch
+'@backstage/core-app-api': patch
+'@backstage/plugin-catalog-graph': patch
+'@backstage/plugin-catalog-react': patch
+'@backstage/plugin-config-schema': patch
+'@backstage/plugin-notifications': patch
+'@backstage/plugin-user-settings': patch
+'@backstage/plugin-search-react': patch
+'@backstage/test-utils': patch
+'@backstage/dev-utils': patch
+'@backstage/plugin-auth-react': patch
+'@backstage/plugin-home-react': patch
+'@backstage/plugin-kubernetes': patch
+'@backstage/plugin-scaffolder': patch
+'@backstage/plugin-org-react': patch
+'@backstage/plugin-api-docs': patch
+'@backstage/plugin-devtools': patch
+'@backstage/plugin-techdocs': patch
+'@backstage/plugin-catalog': patch
+'@backstage/theme': patch
+'@backstage/plugin-search': patch
+'@backstage/plugin-home': patch
+'@backstage/plugin-org': patch
+---
+
+Move `@types/react` to a peer dependency.
diff --git a/.changeset/early-trees-dance.md b/.changeset/early-trees-dance.md
deleted file mode 100644
index 55b2c08f89..0000000000
--- a/.changeset/early-trees-dance.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/frontend-plugin-api': patch
----
-
-The `ExtensionBoundary` now by default infers whether it's routable from whether it outputs a route path.
diff --git a/.changeset/eight-steaks-chew.md b/.changeset/eight-steaks-chew.md
new file mode 100644
index 0000000000..4651d3fb8c
--- /dev/null
+++ b/.changeset/eight-steaks-chew.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-scaffolder-react': minor
+'@backstage/plugin-scaffolder': minor
+---
+
+Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin
diff --git a/.changeset/eighty-mirrors-flow.md b/.changeset/eighty-mirrors-flow.md
deleted file mode 100644
index 57e978a78c..0000000000
--- a/.changeset/eighty-mirrors-flow.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/core-components': patch
----
-
-Move the `Link` component to the `RoutedTabs` instead of the `HeaderTabs` component
diff --git a/.changeset/eleven-pugs-hear.md b/.changeset/eleven-pugs-hear.md
new file mode 100644
index 0000000000..5d65057e0b
--- /dev/null
+++ b/.changeset/eleven-pugs-hear.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-api-docs': patch
+'@backstage/plugin-catalog': patch
+---
+
+Empty states updated with external link icon for learn more links
diff --git a/.changeset/fair-chairs-drive.md b/.changeset/fair-chairs-drive.md
new file mode 100644
index 0000000000..fae2195821
--- /dev/null
+++ b/.changeset/fair-chairs-drive.md
@@ -0,0 +1,5 @@
+---
+'@backstage/frontend-app-api': minor
+---
+
+Removed deprecated `createApp` and `CreateAppFeatureLoader` from `@backstage/frontend-app-api`, use the same `createApp` and `CreateAppFeatureLoader` import from `@backstage/frontend-defaults` instead.
diff --git a/.changeset/famous-bobcats-remain.md b/.changeset/famous-bobcats-remain.md
new file mode 100644
index 0000000000..6943eb7e56
--- /dev/null
+++ b/.changeset/famous-bobcats-remain.md
@@ -0,0 +1,5 @@
+---
+'@backstage/eslint-plugin': patch
+---
+
+Internal refactor to deal with `estree` upgrade
diff --git a/.changeset/few-wasps-hug.md b/.changeset/few-wasps-hug.md
deleted file mode 100644
index 66cf34fc0b..0000000000
--- a/.changeset/few-wasps-hug.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-react': patch
----
-
-Correct `EntityDisplayName`'s icon alignment with the text.
diff --git a/.changeset/fifty-trainers-watch.md b/.changeset/fifty-trainers-watch.md
new file mode 100644
index 0000000000..5cef1ad2b2
--- /dev/null
+++ b/.changeset/fifty-trainers-watch.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-techdocs': patch
+---
+
+Make `emptyState` input optional on `entity-content:techdocs` extension so that
+the default empty state extension works correctly.
diff --git a/.changeset/five-gorillas-pay.md b/.changeset/five-gorillas-pay.md
new file mode 100644
index 0000000000..c5cd18a186
--- /dev/null
+++ b/.changeset/five-gorillas-pay.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page.
diff --git a/.changeset/five-turkeys-taste.md b/.changeset/five-turkeys-taste.md
new file mode 100644
index 0000000000..7f3361ebbf
--- /dev/null
+++ b/.changeset/five-turkeys-taste.md
@@ -0,0 +1,5 @@
+---
+'@backstage/repo-tools': patch
+---
+
+Properly log instructions when APIs do not match
diff --git a/.changeset/cuddly-zebras-crash.md b/.changeset/flat-eels-exist.md
similarity index 50%
rename from .changeset/cuddly-zebras-crash.md
rename to .changeset/flat-eels-exist.md
index 473ac4053f..fb30b51e82 100644
--- a/.changeset/cuddly-zebras-crash.md
+++ b/.changeset/flat-eels-exist.md
@@ -2,4 +2,4 @@
'@backstage/cli': patch
---
-Use ES2022 in CLI bundler
+Remove unknown dependency `diff`
diff --git a/.changeset/flat-plums-grow.md b/.changeset/flat-plums-grow.md
deleted file mode 100644
index 7057216786..0000000000
--- a/.changeset/flat-plums-grow.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-react': patch
----
-
-Add ability to customise form fields in the UI by exposing `uiSchema` and `formContext` in `FormProps`
diff --git a/.changeset/fluffy-pears-cry.md b/.changeset/fluffy-pears-cry.md
new file mode 100644
index 0000000000..2da74eb857
--- /dev/null
+++ b/.changeset/fluffy-pears-cry.md
@@ -0,0 +1,6 @@
+---
+'@backstage/repo-tools': minor
+---
+
+Update @microsoft/api-extractor and use their api report resolution.
+Change api report format from `api-report.md` to `report.api.md`
diff --git a/.changeset/forty-ties-agree.md b/.changeset/forty-ties-agree.md
deleted file mode 100644
index caa45841a2..0000000000
--- a/.changeset/forty-ties-agree.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-'@backstage/frontend-plugin-api': patch
----
-
-Added a new `IconBundleBlueprint` that lets you create icon bundle extensions that can be installed in an App in order to override or add new app icons.
-
-```tsx
-import { IconBundleBlueprint } from '@backstage/frontend-plugin-api';
-
-const exampleIconBundle = IconBundleBlueprint.make({
- name: 'example-bundle',
- params: {
- icons: {
- user: MyOwnUserIcon,
- },
- },
-});
-```
diff --git a/.changeset/forty-ties-disagree.md b/.changeset/forty-ties-disagree.md
deleted file mode 100644
index 214097b35d..0000000000
--- a/.changeset/forty-ties-disagree.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/frontend-app-api': patch
----
-
-Support icon overriding with the new `IconBundleBlueprint` API.
diff --git a/.changeset/four-moons-watch.md b/.changeset/four-moons-watch.md
new file mode 100644
index 0000000000..3d0b25c1d5
--- /dev/null
+++ b/.changeset/four-moons-watch.md
@@ -0,0 +1,5 @@
+---
+'@backstage/integration-react': patch
+---
+
+Revert of change #26430
diff --git a/.changeset/friendly-cougars-return.md b/.changeset/friendly-cougars-return.md
new file mode 100644
index 0000000000..8852177e0a
--- /dev/null
+++ b/.changeset/friendly-cougars-return.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Added support for a new experimental `EXPERIMENTAL_TRIM_NEXT_ENTRY` flag which removes any `./next` entry points present in packages when building and publishing.
diff --git a/.changeset/friendly-feet-refuse.md b/.changeset/friendly-feet-refuse.md
deleted file mode 100644
index 677d21d48a..0000000000
--- a/.changeset/friendly-feet-refuse.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-rails': patch
----
-
-Add examples for fetch:rails scaffolder action & improve related tests
diff --git a/.changeset/funny-rocks-train.md b/.changeset/funny-rocks-train.md
new file mode 100644
index 0000000000..f5b2fbba63
--- /dev/null
+++ b/.changeset/funny-rocks-train.md
@@ -0,0 +1,6 @@
+---
+'@backstage/frontend-plugin-api': patch
+'@backstage/frontend-test-utils': patch
+---
+
+Internal refactor of usage of opaque types.
diff --git a/.changeset/fuzzy-elephants-tease.md b/.changeset/fuzzy-elephants-tease.md
new file mode 100644
index 0000000000..014a1136fd
--- /dev/null
+++ b/.changeset/fuzzy-elephants-tease.md
@@ -0,0 +1,5 @@
+---
+'@backstage/create-app': patch
+---
+
+Fixed lack of `.yarnrc.yml` in the template.
diff --git a/.changeset/gentle-dryers-smile.md b/.changeset/gentle-dryers-smile.md
deleted file mode 100644
index b061461da1..0000000000
--- a/.changeset/gentle-dryers-smile.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/backend-defaults': patch
----
-
-The `createHealthRouter` utility that allows you to create a health check router is now exported via `@backstage/backend-defaults/rootHttpRouter`.
diff --git a/.changeset/giant-kiwis-retire.md b/.changeset/giant-kiwis-retire.md
new file mode 100644
index 0000000000..380e05042f
--- /dev/null
+++ b/.changeset/giant-kiwis-retire.md
@@ -0,0 +1,5 @@
+---
+'@backstage/app-defaults': patch
+---
+
+Added `externalLink` to icon defaults
diff --git a/.changeset/gold-pots-end.md b/.changeset/gold-pots-end.md
new file mode 100644
index 0000000000..e7291fc3ad
--- /dev/null
+++ b/.changeset/gold-pots-end.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': minor
+---
+
+Improved the layout of the manage templates page (`/edit`) by adding icons and descriptions that better describe what each page is for. Updated the header menu to link back to the scaffolder create page.
diff --git a/.changeset/green-bottles-live.md b/.changeset/green-bottles-live.md
new file mode 100644
index 0000000000..6bed257eee
--- /dev/null
+++ b/.changeset/green-bottles-live.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-scaffolder-react': patch
+'@backstage/plugin-scaffolder': patch
+---
+
+Add support for pagination in scaffolder tasks list
diff --git a/.changeset/green-planets-reflect.md b/.changeset/green-planets-reflect.md
deleted file mode 100644
index 513f0480a5..0000000000
--- a/.changeset/green-planets-reflect.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-'@backstage/frontend-test-utils': patch
-'@backstage/frontend-app-api': patch
----
-
-Added support for v2 extensions, which declare their inputs and outputs without using a data map.
diff --git a/.changeset/grumpy-owls-suffer.md b/.changeset/grumpy-owls-suffer.md
deleted file mode 100644
index 977055eb33..0000000000
--- a/.changeset/grumpy-owls-suffer.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-gitlab': patch
----
-
-Allow the `createGitlabProjectVariableAction` to use oauth tokens
diff --git a/.changeset/happy-ligers-think.md b/.changeset/happy-ligers-think.md
new file mode 100644
index 0000000000..69dd68ae6c
--- /dev/null
+++ b/.changeset/happy-ligers-think.md
@@ -0,0 +1,5 @@
+---
+'@backstage/app-defaults': patch
+---
+
+Updated the `bitbucket-server-auth` default API to set its environment based on the `auth.environment` config option instead of being hardcoded to `development`.
diff --git a/.changeset/heavy-numbers-love.md b/.changeset/heavy-numbers-love.md
deleted file mode 100644
index c18d144636..0000000000
--- a/.changeset/heavy-numbers-love.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/cli': patch
----
-
-Updated default backend plugin to use `RootConfigService` instead of `Config`. This also removes the dependency on `@backstage/config` as it's no longer used.
diff --git a/.changeset/hip-hairs-exist.md b/.changeset/hip-hairs-exist.md
deleted file mode 100644
index d8cb939dfb..0000000000
--- a/.changeset/hip-hairs-exist.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-'@backstage/plugin-catalog-backend': patch
-'@backstage/plugin-catalog-node': patch
----
-
-Added setAllowedLocationTypes while introducing a new extension point called CatalogLocationsExtensionPoint
diff --git a/.changeset/honest-impalas-rescue.md b/.changeset/honest-impalas-rescue.md
new file mode 100644
index 0000000000..bac076bba6
--- /dev/null
+++ b/.changeset/honest-impalas-rescue.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+Fixed a bug in the `SidebarSubmenu` core component that caused the nested menu to overlap with the sidebar when the user hovers over the pinned sidebar.
diff --git a/.changeset/hungry-buckets-repair.md b/.changeset/hungry-buckets-repair.md
new file mode 100644
index 0000000000..fde682d603
--- /dev/null
+++ b/.changeset/hungry-buckets-repair.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Change "Register Existing Component" CTA to outlined as it's not a primary action on the scaffolder pages
diff --git a/.changeset/large-hats-reply.md b/.changeset/large-hats-reply.md
new file mode 100644
index 0000000000..02fe00d70c
--- /dev/null
+++ b/.changeset/large-hats-reply.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': minor
+---
+
+Text field content of the `EntityPicker` is now more readable as it uses entity title instead of entity reference.
diff --git a/.changeset/large-plants-rhyme.md b/.changeset/large-plants-rhyme.md
new file mode 100644
index 0000000000..3566826730
--- /dev/null
+++ b/.changeset/large-plants-rhyme.md
@@ -0,0 +1,30 @@
+---
+'@backstage/frontend-plugin-api': patch
+---
+
+It is now possible to override the blueprint parameters when overriding an extension created from a blueprint:
+
+```ts
+const myExtension = MyBlueprint.make({
+ params: {
+ myParam: 'myDefault',
+ },
+});
+
+const myOverride = myExtension.override({
+ params: {
+ myParam: 'myOverride',
+ },
+});
+const myFactoryOverride = myExtension.override({
+ factory(origFactory) {
+ return origFactory({
+ params: {
+ myParam: 'myOverride',
+ },
+ });
+ },
+});
+```
+
+The provided parameters will be merged with the original parameters of the extension.
diff --git a/.changeset/late-games-protect.md b/.changeset/late-games-protect.md
deleted file mode 100644
index 584780f836..0000000000
--- a/.changeset/late-games-protect.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-react': minor
----
-
-Add scaffolder option to display object items in separate rows on review page
diff --git a/.changeset/light-pianos-exercise.md b/.changeset/light-pianos-exercise.md
deleted file mode 100644
index 4bf161eb06..0000000000
--- a/.changeset/light-pianos-exercise.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-graph': patch
----
-
-Memoize entity graph nodes when applying an `entityFilter` to prevent repeated redraws
diff --git a/.changeset/light-rats-travel.md b/.changeset/light-rats-travel.md
new file mode 100644
index 0000000000..de497567ef
--- /dev/null
+++ b/.changeset/light-rats-travel.md
@@ -0,0 +1,54 @@
+---
+'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch
+'@backstage/plugin-search-backend-module-stack-overflow-collator': patch
+'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
+'@backstage/plugin-scaffolder-backend-module-notifications': patch
+'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
+'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
+'@backstage/plugin-auth-backend-module-aws-alb-provider': patch
+'@backstage/plugin-search-backend-module-elasticsearch': patch
+'@backstage/plugin-auth-backend-module-guest-provider': patch
+'@backstage/plugin-catalog-backend-module-unprocessed': patch
+'@backstage/plugin-notifications-backend-module-email': patch
+'@backstage/plugin-auth-backend-module-oidc-provider': patch
+'@backstage/plugin-catalog-backend-module-gitlab-org': patch
+'@backstage/backend-dynamic-feature-service': patch
+'@backstage/plugin-scaffolder-backend-module-github': patch
+'@backstage/plugin-scaffolder-backend-module-gitlab': patch
+'@backstage/plugin-scaffolder-backend-module-yeoman': patch
+'@backstage/plugin-scaffolder-backend-module-rails': patch
+'@backstage/plugin-catalog-backend-module-openapi': patch
+'@backstage/plugin-search-backend-module-techdocs': patch
+'@backstage/plugin-catalog-backend-module-github': patch
+'@backstage/plugin-events-backend-module-aws-sqs': patch
+'@backstage/plugin-search-backend-module-catalog': patch
+'@backstage/plugin-search-backend-module-explore': patch
+'@backstage/plugin-scaffolder-node-test-utils': patch
+'@backstage/plugin-search-backend-module-pg': patch
+'@backstage/plugin-notifications-backend': patch
+'@backstage/plugin-search-backend-node': patch
+'@backstage/plugin-kubernetes-backend': patch
+'@backstage/plugin-notifications-node': patch
+'@backstage/plugin-permission-backend': patch
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/backend-defaults': patch
+'@backstage/backend-app-api': patch
+'@backstage/plugin-devtools-backend': patch
+'@backstage/plugin-techdocs-backend': patch
+'@backstage/plugin-catalog-backend': patch
+'@backstage/plugin-kubernetes-node': patch
+'@backstage/plugin-permission-node': patch
+'@backstage/plugin-scaffolder-node': patch
+'@backstage/plugin-signals-backend': patch
+'@backstage/plugin-events-backend': patch
+'@backstage/plugin-search-backend': patch
+'@backstage/plugin-proxy-backend': patch
+'@backstage/plugin-auth-backend': patch
+'@backstage/plugin-signals-node': patch
+'@backstage/plugin-app-backend': patch
+'@backstage/plugin-events-node': patch
+'@backstage/plugin-auth-node': patch
+'@backstage/cli': patch
+---
+
+Remove references to in-repo backend-common
diff --git a/.changeset/little-bulldogs-guess.md b/.changeset/little-bulldogs-guess.md
deleted file mode 100644
index 3e646a033f..0000000000
--- a/.changeset/little-bulldogs-guess.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/cli': patch
----
-
-The experimental module federation build now has the ability to force the use of development versions of `react` and `react-dom` by setting the `FORCE_REACT_DEVELOPMENT` flag.
diff --git a/.changeset/little-suns-fly.md b/.changeset/little-suns-fly.md
deleted file mode 100644
index 887df4be6d..0000000000
--- a/.changeset/little-suns-fly.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-backend-module-msgraph': patch
----
-
-Added option to ingest groups based on their group membership in Azure Entra ID
diff --git a/.changeset/long-humans-hunt.md b/.changeset/long-humans-hunt.md
new file mode 100644
index 0000000000..e27ebfbd3d
--- /dev/null
+++ b/.changeset/long-humans-hunt.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': minor
+---
+
+Added ability to create a new local scaffolder template to ease onboarding when creating new templates.
diff --git a/.changeset/loud-hotels-tan.md b/.changeset/loud-hotels-tan.md
new file mode 100644
index 0000000000..34890dfe97
--- /dev/null
+++ b/.changeset/loud-hotels-tan.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-react': minor
+---
+
+Added a new prop, `disableTooltip` to the `EntityRefLink` component
diff --git a/.changeset/mean-apricots-perform.md b/.changeset/mean-apricots-perform.md
deleted file mode 100644
index c93514cb7f..0000000000
--- a/.changeset/mean-apricots-perform.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-kubernetes': patch
----
-
-Adds support for Backstage's new frontend system, available via the `/alpha` sub-path export.
diff --git a/.changeset/mighty-dolls-retire.md b/.changeset/mighty-dolls-retire.md
deleted file mode 100644
index b31c443a38..0000000000
--- a/.changeset/mighty-dolls-retire.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-react': patch
----
-
-Internal refactor to remove unnecessary `routable` prop in the implementation of the `createEntityContentExtension` alpha export.
diff --git a/.changeset/mighty-geckos-kiss.md b/.changeset/mighty-geckos-kiss.md
deleted file mode 100644
index 0761d8b257..0000000000
--- a/.changeset/mighty-geckos-kiss.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-techdocs-node': patch
----
-
-Update `patchMkdocsYmlPrebuild` to modify `repo_url` and `edit_uri` independently.
diff --git a/.changeset/modern-parrots-protect.md b/.changeset/modern-parrots-protect.md
deleted file mode 100644
index bb4df2c248..0000000000
--- a/.changeset/modern-parrots-protect.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-react': patch
----
-
-support `ajv-errors` for scaffolder validation to allow for customizing the error messages
diff --git a/.changeset/nasty-lamps-greet.md b/.changeset/nasty-lamps-greet.md
new file mode 100644
index 0000000000..75d8086db7
--- /dev/null
+++ b/.changeset/nasty-lamps-greet.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': minor
+---
+
+Added ability to link to a specific action on the actions page
diff --git a/.changeset/neat-bears-divide.md b/.changeset/neat-bears-divide.md
deleted file mode 100644
index a94b17f74d..0000000000
--- a/.changeset/neat-bears-divide.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/config-loader': patch
----
-
-The `env` option of `ConfigSources.default` now correctly allows undefined members.
diff --git a/.changeset/neat-gifts-join.md b/.changeset/neat-gifts-join.md
deleted file mode 100644
index cd140c4692..0000000000
--- a/.changeset/neat-gifts-join.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-devtools-backend': patch
----
-
-Removed unused code for lockfile analysis.
diff --git a/.changeset/new-scissors-try.md b/.changeset/new-scissors-try.md
deleted file mode 100644
index a9e9a45ce7..0000000000
--- a/.changeset/new-scissors-try.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-auth-backend-module-microsoft-provider': patch
----
-
-Updated the Microsoft authenticator to accurately define required scopes, but to also omit the required and additional scopes when requesting resource scopes.
diff --git a/.changeset/nice-badgers-travel.md b/.changeset/nice-badgers-travel.md
new file mode 100644
index 0000000000..7ec79b56d8
--- /dev/null
+++ b/.changeset/nice-badgers-travel.md
@@ -0,0 +1,5 @@
+---
+'@backstage/repo-tools': minor
+---
+
+Adds a new command `backstage-repo-tools peer-deps` for validating your usage of peer dependencies in your plugins. It currently supports react related peer dependencies. It also has a `--fix` mode for quickly fixing any issues that it finds.
diff --git a/.changeset/nice-peas-retire.md b/.changeset/nice-peas-retire.md
deleted file mode 100644
index 7b7b13706d..0000000000
--- a/.changeset/nice-peas-retire.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-'@backstage/integration': minor
-'@backstage/backend-defaults': patch
----
-
-Updated `GitlabUrlReader.readUrl` and `GitlabUrlReader.readTree` to accept a user-provided token, supporting both bearer and private tokens.
diff --git a/.changeset/nine-cherries-decide.md b/.changeset/nine-cherries-decide.md
deleted file mode 100644
index b20c24aa85..0000000000
--- a/.changeset/nine-cherries-decide.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-'@backstage/backend-common': patch
----
-
-The remaining exports in the package have now been deprecated:
-
-- `cacheToPluginCacheManager`
-- `createLegacyAuthAdapters`
-- `LegacyCreateRouter`
-- `legacyPlugin`
-- `loggerToWinstonLogger`
-- `makeLegacyPlugin`
-
-Users of these export should fully [migrate to the new backend system](https://backstage.io/docs/backend-system/building-backends/migrating).
diff --git a/.changeset/nine-glasses-nail.md b/.changeset/nine-glasses-nail.md
deleted file mode 100644
index 138acce3dd..0000000000
--- a/.changeset/nine-glasses-nail.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-search-backend-module-pg': patch
----
-
-Removing `@backstage/backend-app-api` dependency
diff --git a/.changeset/ninety-icons-smile.md b/.changeset/ninety-icons-smile.md
deleted file mode 100644
index f137879706..0000000000
--- a/.changeset/ninety-icons-smile.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/cli': patch
----
-
-Remove usage of deprecated functionality from @backstage/config-loader
diff --git a/.changeset/odd-books-share.md b/.changeset/odd-books-share.md
deleted file mode 100644
index 858a2564ad..0000000000
--- a/.changeset/odd-books-share.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-backend': patch
----
-
-Preserve default `allowedLocationTypes` when `setAllowedLocationTypes()` of `CatalogLocationsExtensionPoint` is not called.
diff --git a/.changeset/pink-gorillas-brake.md b/.changeset/pink-gorillas-brake.md
deleted file mode 100644
index 188884f13c..0000000000
--- a/.changeset/pink-gorillas-brake.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-react': patch
----
-
-Fix extra divider displayed on user list picker component
diff --git a/.changeset/plenty-tools-exist.md b/.changeset/plenty-tools-exist.md
deleted file mode 100644
index 0ce22a74f2..0000000000
--- a/.changeset/plenty-tools-exist.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-gitlab': patch
----
-
-Added test cases for gitlab:issue:edit examples
diff --git a/.changeset/polite-days-flash.md b/.changeset/polite-days-flash.md
new file mode 100644
index 0000000000..6a54d08c5a
--- /dev/null
+++ b/.changeset/polite-days-flash.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-compat-api': patch
+---
+
+Internal update to remove deprecated `BackstagePlugin` type and move to `FrontendPlugin`
diff --git a/.changeset/pre.json b/.changeset/pre.json
index 7da5b582e1..1d47683d1b 100644
--- a/.changeset/pre.json
+++ b/.changeset/pre.json
@@ -2,241 +2,262 @@
"mode": "pre",
"tag": "next",
"initialVersions": {
- "example-app": "0.2.99",
- "@backstage/app-defaults": "1.5.8",
- "example-app-next": "0.0.13",
- "app-next-example-plugin": "0.0.13",
- "example-backend": "0.0.28",
- "@backstage/backend-app-api": "0.8.0",
- "@backstage/backend-common": "0.23.3",
- "@backstage/backend-defaults": "0.4.0",
- "@backstage/backend-dev-utils": "0.1.4",
- "@backstage/backend-dynamic-feature-service": "0.2.15",
- "example-backend-legacy": "0.2.100",
- "@backstage/backend-openapi-utils": "0.1.15",
- "@backstage/backend-plugin-api": "0.7.0",
- "@backstage/backend-tasks": "0.5.27",
- "@backstage/backend-test-utils": "0.4.4",
- "@backstage/catalog-client": "1.6.5",
- "@backstage/catalog-model": "1.5.0",
- "@backstage/cli": "0.26.11",
+ "example-app": "0.2.101",
+ "@backstage/app-defaults": "1.5.11",
+ "example-app-next": "0.0.15",
+ "app-next-example-plugin": "0.0.15",
+ "example-backend": "0.0.30",
+ "@backstage/backend-app-api": "1.0.0",
+ "@backstage/backend-defaults": "0.5.0",
+ "@backstage/backend-dev-utils": "0.1.5",
+ "@backstage/backend-dynamic-feature-service": "0.4.0",
+ "example-backend-legacy": "0.2.102",
+ "@backstage/backend-openapi-utils": "0.1.18",
+ "@backstage/backend-plugin-api": "1.0.0",
+ "@backstage/backend-test-utils": "1.0.0",
+ "@backstage/catalog-client": "1.7.0",
+ "@backstage/catalog-model": "1.7.0",
+ "@backstage/cli": "0.27.1",
"@backstage/cli-common": "0.1.14",
- "@backstage/cli-node": "0.2.7",
- "@backstage/codemods": "0.1.49",
+ "@backstage/cli-node": "0.2.8",
+ "@backstage/codemods": "0.1.50",
"@backstage/config": "1.2.0",
- "@backstage/config-loader": "1.8.1",
- "@backstage/core-app-api": "1.14.0",
- "@backstage/core-compat-api": "0.2.7",
- "@backstage/core-components": "0.14.9",
- "@backstage/core-plugin-api": "1.9.3",
- "@backstage/create-app": "0.5.17",
- "@backstage/dev-utils": "1.0.35",
- "e2e-test": "0.2.18",
+ "@backstage/config-loader": "1.9.1",
+ "@backstage/core-app-api": "1.15.0",
+ "@backstage/core-compat-api": "0.3.0",
+ "@backstage/core-components": "0.15.0",
+ "@backstage/core-plugin-api": "1.9.4",
+ "@backstage/create-app": "0.5.19",
+ "@backstage/dev-utils": "1.1.0",
+ "e2e-test": "0.2.20",
"@backstage/e2e-test-utils": "0.1.1",
"@backstage/errors": "1.2.4",
- "@backstage/eslint-plugin": "0.1.8",
- "@backstage/frontend-app-api": "0.7.3",
- "@backstage/frontend-plugin-api": "0.6.7",
- "@backstage/frontend-test-utils": "0.1.10",
- "@backstage/integration": "1.13.0",
+ "@backstage/eslint-plugin": "0.1.9",
+ "@backstage/frontend-app-api": "0.9.0",
+ "@backstage/frontend-defaults": "0.1.0",
+ "@internal/frontend": "0.0.1",
+ "@backstage/frontend-plugin-api": "0.8.0",
+ "@backstage/frontend-test-utils": "0.2.0",
+ "@backstage/integration": "1.15.0",
"@backstage/integration-aws-node": "0.1.12",
- "@backstage/integration-react": "1.1.29",
+ "@backstage/integration-react": "1.1.31",
+ "@internal/opaque": "0.0.1",
"@backstage/release-manifests": "0.0.11",
- "@backstage/repo-tools": "0.9.4",
- "@techdocs/cli": "1.8.16",
- "techdocs-cli-embedded-app": "0.2.98",
- "@backstage/test-utils": "1.5.8",
- "@backstage/theme": "0.5.6",
+ "@backstage/repo-tools": "0.9.7",
+ "@techdocs/cli": "1.8.19",
+ "techdocs-cli-embedded-app": "0.2.100",
+ "@backstage/test-utils": "1.6.0",
+ "@backstage/theme": "0.5.7",
"@backstage/types": "1.1.1",
- "@backstage/version-bridge": "1.0.8",
- "yarn-plugin-backstage": "0.0.1",
- "@backstage/plugin-api-docs": "0.11.7",
+ "@backstage/version-bridge": "1.0.9",
+ "yarn-plugin-backstage": "0.0.2",
+ "@backstage/plugin-api-docs": "0.11.9",
"@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.7",
- "@backstage/plugin-app-backend": "0.3.71",
- "@backstage/plugin-app-node": "0.1.22",
- "@backstage/plugin-app-visualizer": "0.1.8",
- "@backstage/plugin-auth-backend": "0.22.9",
- "@backstage/plugin-auth-backend-module-atlassian-provider": "0.2.3",
- "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.1.14",
- "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.1.5",
- "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.1.5",
- "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.1.5",
- "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.2.17",
- "@backstage/plugin-auth-backend-module-github-provider": "0.1.19",
- "@backstage/plugin-auth-backend-module-gitlab-provider": "0.1.19",
- "@backstage/plugin-auth-backend-module-google-provider": "0.1.19",
- "@backstage/plugin-auth-backend-module-guest-provider": "0.1.8",
- "@backstage/plugin-auth-backend-module-microsoft-provider": "0.1.17",
- "@backstage/plugin-auth-backend-module-oauth2-provider": "0.2.3",
- "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.1.15",
- "@backstage/plugin-auth-backend-module-oidc-provider": "0.2.3",
- "@backstage/plugin-auth-backend-module-okta-provider": "0.0.15",
- "@backstage/plugin-auth-backend-module-onelogin-provider": "0.1.3",
- "@backstage/plugin-auth-backend-module-pinniped-provider": "0.1.16",
- "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.2.3",
- "@backstage/plugin-auth-node": "0.4.17",
- "@backstage/plugin-auth-react": "0.1.4",
- "@backstage/plugin-bitbucket-cloud-common": "0.2.21",
- "@backstage/plugin-catalog": "1.21.1",
- "@backstage/plugin-catalog-backend": "1.24.0",
- "@backstage/plugin-catalog-backend-module-aws": "0.3.17",
- "@backstage/plugin-catalog-backend-module-azure": "0.1.42",
- "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.2.5",
- "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.2.9",
- "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.36",
- "@backstage/plugin-catalog-backend-module-gcp": "0.1.23",
- "@backstage/plugin-catalog-backend-module-gerrit": "0.1.39",
- "@backstage/plugin-catalog-backend-module-github": "0.6.5",
- "@backstage/plugin-catalog-backend-module-github-org": "0.1.17",
- "@backstage/plugin-catalog-backend-module-gitlab": "0.3.21",
- "@backstage/plugin-catalog-backend-module-gitlab-org": "0.0.5",
- "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.4.27",
- "@backstage/plugin-catalog-backend-module-ldap": "0.7.0",
- "@backstage/plugin-catalog-backend-module-logs": "0.0.1",
- "@backstage/plugin-catalog-backend-module-msgraph": "0.5.30",
- "@backstage/plugin-catalog-backend-module-openapi": "0.1.40",
- "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.28",
- "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.1.20",
- "@backstage/plugin-catalog-backend-module-unprocessed": "0.4.9",
- "@backstage/plugin-catalog-common": "1.0.25",
- "@backstage/plugin-catalog-graph": "0.4.7",
- "@backstage/plugin-catalog-import": "0.12.1",
- "@backstage/plugin-catalog-node": "1.12.4",
- "@backstage/plugin-catalog-react": "1.12.2",
- "@backstage/plugin-catalog-unprocessed-entities": "0.2.6",
- "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.3",
- "@backstage/plugin-config-schema": "0.1.57",
- "@backstage/plugin-devtools": "0.1.16",
- "@backstage/plugin-devtools-backend": "0.3.8",
- "@backstage/plugin-devtools-common": "0.1.11",
- "@backstage/plugin-events-backend": "0.3.9",
- "@backstage/plugin-events-backend-module-aws-sqs": "0.3.8",
- "@backstage/plugin-events-backend-module-azure": "0.2.8",
- "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.8",
- "@backstage/plugin-events-backend-module-gerrit": "0.2.8",
- "@backstage/plugin-events-backend-module-github": "0.2.8",
- "@backstage/plugin-events-backend-module-gitlab": "0.2.8",
- "@backstage/plugin-events-backend-test-utils": "0.1.32",
- "@backstage/plugin-events-node": "0.3.8",
- "@internal/plugin-todo-list": "1.0.29",
- "@internal/plugin-todo-list-backend": "1.0.29",
- "@internal/plugin-todo-list-common": "1.0.20",
- "@backstage/plugin-home": "0.7.7",
- "@backstage/plugin-home-react": "0.1.15",
- "@backstage/plugin-kubernetes": "0.11.12",
- "@backstage/plugin-kubernetes-backend": "0.18.3",
- "@backstage/plugin-kubernetes-cluster": "0.0.13",
- "@backstage/plugin-kubernetes-common": "0.8.1",
- "@backstage/plugin-kubernetes-node": "0.1.16",
- "@backstage/plugin-kubernetes-react": "0.4.1",
- "@backstage/plugin-notifications": "0.2.3",
- "@backstage/plugin-notifications-backend": "0.3.3",
- "@backstage/plugin-notifications-backend-module-email": "0.1.3",
+ "@backstage/plugin-app": "0.1.0",
+ "@backstage/plugin-app-backend": "0.3.74",
+ "@backstage/plugin-app-node": "0.1.25",
+ "@backstage/plugin-app-visualizer": "0.1.10",
+ "@backstage/plugin-auth-backend": "0.23.0",
+ "@backstage/plugin-auth-backend-module-atlassian-provider": "0.3.0",
+ "@backstage/plugin-auth-backend-module-auth0-provider": "0.1.0",
+ "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.1.0",
+ "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.3.0",
+ "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.3.0",
+ "@backstage/plugin-auth-backend-module-github-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-gitlab-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-google-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-guest-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-microsoft-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-oauth2-provider": "0.3.0",
+ "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-oidc-provider": "0.3.0",
+ "@backstage/plugin-auth-backend-module-okta-provider": "0.1.0",
+ "@backstage/plugin-auth-backend-module-onelogin-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-pinniped-provider": "0.2.0",
+ "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.3.0",
+ "@backstage/plugin-auth-node": "0.5.2",
+ "@backstage/plugin-auth-react": "0.1.6",
+ "@backstage/plugin-bitbucket-cloud-common": "0.2.23",
+ "@backstage/plugin-catalog": "1.23.0",
+ "@backstage/plugin-catalog-backend": "1.26.0",
+ "@backstage/plugin-catalog-backend-module-aws": "0.4.2",
+ "@backstage/plugin-catalog-backend-module-azure": "0.2.2",
+ "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.4.0",
+ "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.3.2",
+ "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.2.2",
+ "@backstage/plugin-catalog-backend-module-gcp": "0.3.0",
+ "@backstage/plugin-catalog-backend-module-gerrit": "0.2.2",
+ "@backstage/plugin-catalog-backend-module-github": "0.7.3",
+ "@backstage/plugin-catalog-backend-module-github-org": "0.3.0",
+ "@backstage/plugin-catalog-backend-module-gitlab": "0.4.2",
+ "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.0",
+ "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.5.3",
+ "@backstage/plugin-catalog-backend-module-ldap": "0.9.0",
+ "@backstage/plugin-catalog-backend-module-logs": "0.1.0",
+ "@backstage/plugin-catalog-backend-module-msgraph": "0.6.2",
+ "@backstage/plugin-catalog-backend-module-openapi": "0.2.0",
+ "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.2",
+ "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.0",
+ "@backstage/plugin-catalog-backend-module-unprocessed": "0.5.0",
+ "@backstage/plugin-catalog-common": "1.1.0",
+ "@backstage/plugin-catalog-graph": "0.4.9",
+ "@backstage/plugin-catalog-import": "0.12.3",
+ "@backstage/plugin-catalog-node": "1.13.0",
+ "@backstage/plugin-catalog-react": "1.13.0",
+ "@backstage/plugin-catalog-unprocessed-entities": "0.2.8",
+ "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.4",
+ "@backstage/plugin-config-schema": "0.1.59",
+ "@backstage/plugin-devtools": "0.1.18",
+ "@backstage/plugin-devtools-backend": "0.4.0",
+ "@backstage/plugin-devtools-common": "0.1.12",
+ "@backstage/plugin-events-backend": "0.3.12",
+ "@backstage/plugin-events-backend-module-aws-sqs": "0.4.2",
+ "@backstage/plugin-events-backend-module-azure": "0.2.11",
+ "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.11",
+ "@backstage/plugin-events-backend-module-gerrit": "0.2.11",
+ "@backstage/plugin-events-backend-module-github": "0.2.11",
+ "@backstage/plugin-events-backend-module-gitlab": "0.2.11",
+ "@backstage/plugin-events-backend-test-utils": "0.1.35",
+ "@backstage/plugin-events-node": "0.4.0",
+ "@internal/plugin-todo-list": "1.0.31",
+ "@internal/plugin-todo-list-backend": "1.0.31",
+ "@internal/plugin-todo-list-common": "1.0.21",
+ "@backstage/plugin-home": "0.7.10",
+ "@backstage/plugin-home-react": "0.1.17",
+ "@backstage/plugin-kubernetes": "0.11.14",
+ "@backstage/plugin-kubernetes-backend": "0.18.6",
+ "@backstage/plugin-kubernetes-cluster": "0.0.15",
+ "@backstage/plugin-kubernetes-common": "0.8.3",
+ "@backstage/plugin-kubernetes-node": "0.1.19",
+ "@backstage/plugin-kubernetes-react": "0.4.3",
+ "@backstage/plugin-notifications": "0.3.1",
+ "@backstage/plugin-notifications-backend": "0.4.0",
+ "@backstage/plugin-notifications-backend-module-email": "0.3.0",
"@backstage/plugin-notifications-common": "0.0.5",
- "@backstage/plugin-notifications-node": "0.2.3",
- "@backstage/plugin-org": "0.6.27",
- "@backstage/plugin-org-react": "0.1.26",
- "@backstage/plugin-permission-backend": "0.5.46",
- "@backstage/plugin-permission-backend-module-allow-all-policy": "0.1.19",
- "@backstage/plugin-permission-common": "0.8.0",
- "@backstage/plugin-permission-node": "0.8.0",
- "@backstage/plugin-permission-react": "0.4.24",
- "@backstage/plugin-proxy-backend": "0.5.3",
- "@backstage/plugin-scaffolder": "1.23.0",
- "@backstage/plugin-scaffolder-backend": "1.23.0",
- "@backstage/plugin-scaffolder-backend-module-azure": "0.1.14",
- "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.2.12",
- "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.1.12",
- "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.1.12",
- "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.2.23",
- "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.46",
- "@backstage/plugin-scaffolder-backend-module-gcp": "0.1.0",
- "@backstage/plugin-scaffolder-backend-module-gerrit": "0.1.14",
- "@backstage/plugin-scaffolder-backend-module-gitea": "0.1.12",
- "@backstage/plugin-scaffolder-backend-module-github": "0.4.0",
- "@backstage/plugin-scaffolder-backend-module-gitlab": "0.4.4",
- "@backstage/plugin-scaffolder-backend-module-notifications": "0.0.5",
- "@backstage/plugin-scaffolder-backend-module-rails": "0.4.39",
- "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.30",
- "@backstage/plugin-scaffolder-backend-module-yeoman": "0.3.6",
- "@backstage/plugin-scaffolder-common": "1.5.4",
- "@backstage/plugin-scaffolder-node": "0.4.8",
- "@backstage/plugin-scaffolder-node-test-utils": "0.1.9",
- "@backstage/plugin-scaffolder-react": "1.10.0",
- "@backstage/plugin-search": "1.4.14",
- "@backstage/plugin-search-backend": "1.5.14",
- "@backstage/plugin-search-backend-module-catalog": "0.1.28",
- "@backstage/plugin-search-backend-module-elasticsearch": "1.5.3",
- "@backstage/plugin-search-backend-module-explore": "0.1.28",
- "@backstage/plugin-search-backend-module-pg": "0.5.32",
- "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.1.15",
- "@backstage/plugin-search-backend-module-techdocs": "0.1.27",
- "@backstage/plugin-search-backend-node": "1.2.27",
- "@backstage/plugin-search-common": "1.2.13",
- "@backstage/plugin-search-react": "1.7.13",
- "@backstage/plugin-signals": "0.0.8",
- "@backstage/plugin-signals-backend": "0.1.8",
- "@backstage/plugin-signals-node": "0.1.8",
- "@backstage/plugin-signals-react": "0.0.4",
- "@backstage/plugin-techdocs": "1.10.7",
- "@backstage/plugin-techdocs-addons-test-utils": "1.0.35",
- "@backstage/plugin-techdocs-backend": "1.10.9",
- "@backstage/plugin-techdocs-module-addons-contrib": "1.1.12",
- "@backstage/plugin-techdocs-node": "1.12.8",
- "@backstage/plugin-techdocs-react": "1.2.6",
- "@backstage/plugin-user-settings": "0.8.9",
- "@backstage/plugin-user-settings-backend": "0.2.21",
- "@backstage/plugin-user-settings-common": "0.0.1"
+ "@backstage/plugin-notifications-node": "0.2.6",
+ "@backstage/plugin-org": "0.6.29",
+ "@backstage/plugin-org-react": "0.1.28",
+ "@backstage/plugin-permission-backend": "0.5.49",
+ "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.0",
+ "@backstage/plugin-permission-common": "0.8.1",
+ "@backstage/plugin-permission-node": "0.8.3",
+ "@backstage/plugin-permission-react": "0.4.26",
+ "@backstage/plugin-proxy-backend": "0.5.6",
+ "@backstage/plugin-scaffolder": "1.25.0",
+ "@backstage/plugin-scaffolder-backend": "1.25.0",
+ "@backstage/plugin-scaffolder-backend-module-azure": "0.2.0",
+ "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.0",
+ "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.0",
+ "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.0",
+ "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.0",
+ "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.0",
+ "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.0",
+ "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.0",
+ "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.0",
+ "@backstage/plugin-scaffolder-backend-module-github": "0.5.0",
+ "@backstage/plugin-scaffolder-backend-module-gitlab": "0.5.0",
+ "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.0",
+ "@backstage/plugin-scaffolder-backend-module-rails": "0.5.0",
+ "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.0",
+ "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.0",
+ "@backstage/plugin-scaffolder-common": "1.5.6",
+ "@backstage/plugin-scaffolder-node": "0.4.11",
+ "@backstage/plugin-scaffolder-node-test-utils": "0.1.12",
+ "@backstage/plugin-scaffolder-react": "1.12.0",
+ "@backstage/plugin-search": "1.4.16",
+ "@backstage/plugin-search-backend": "1.5.17",
+ "@backstage/plugin-search-backend-module-catalog": "0.2.2",
+ "@backstage/plugin-search-backend-module-elasticsearch": "1.5.6",
+ "@backstage/plugin-search-backend-module-explore": "0.2.2",
+ "@backstage/plugin-search-backend-module-pg": "0.5.35",
+ "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.0",
+ "@backstage/plugin-search-backend-module-techdocs": "0.2.2",
+ "@backstage/plugin-search-backend-node": "1.3.2",
+ "@backstage/plugin-search-common": "1.2.14",
+ "@backstage/plugin-search-react": "1.8.0",
+ "@backstage/plugin-signals": "0.0.10",
+ "@backstage/plugin-signals-backend": "0.2.0",
+ "@backstage/plugin-signals-node": "0.1.11",
+ "@backstage/plugin-signals-react": "0.0.5",
+ "@backstage/plugin-techdocs": "1.10.9",
+ "@backstage/plugin-techdocs-addons-test-utils": "1.0.38",
+ "@backstage/plugin-techdocs-backend": "1.10.13",
+ "@backstage/plugin-techdocs-common": "0.1.0",
+ "@backstage/plugin-techdocs-module-addons-contrib": "1.1.14",
+ "@backstage/plugin-techdocs-node": "1.12.11",
+ "@backstage/plugin-techdocs-react": "1.2.8",
+ "@backstage/plugin-user-settings": "0.8.12",
+ "@backstage/plugin-user-settings-backend": "0.2.24",
+ "@backstage/plugin-user-settings-common": "0.0.1",
+ "@internal/scaffolder": "0.0.1"
},
"changesets": [
- "blue-pumas-cheer",
- "bright-trainers-brake",
- "chilly-trains-sleep",
- "cool-insects-remember",
- "cuddly-zebras-crash",
- "dry-squids-tap",
- "dull-ghosts-double",
- "early-trees-dance",
- "eighty-mirrors-flow",
- "flat-plums-grow",
- "forty-ties-agree",
- "forty-ties-disagree",
- "friendly-feet-refuse",
- "gentle-dryers-smile",
- "grumpy-owls-suffer",
- "heavy-numbers-love",
- "hip-hairs-exist",
- "late-games-protect",
- "light-pianos-exercise",
- "little-bulldogs-guess",
- "little-suns-fly",
- "mighty-dolls-retire",
- "modern-parrots-protect",
- "neat-gifts-join",
- "new-scissors-try",
- "nice-peas-retire",
- "nine-cherries-decide",
- "nine-glasses-nail",
- "ninety-icons-smile",
- "pink-gorillas-brake",
- "plenty-tools-exist",
- "rich-mugs-dress",
- "selfish-bees-think",
- "six-rats-kick",
- "slow-toes-jog",
- "small-spoons-shout",
- "soft-gorillas-refuse",
- "spotty-planets-accept",
- "strange-papayas-beg",
- "strong-otters-compete",
- "stupid-dots-relate",
- "swift-kings-sparkle",
- "thirty-paws-hope",
- "tiny-oranges-pretend",
- "tough-lies-repair",
- "violet-jokes-wave",
- "wicked-bobcats-teach",
- "wild-eggs-exist",
- "witty-bears-behave"
+ "angry-mayflies-collect",
+ "angry-windows-decide",
+ "big-rules-nail",
+ "breezy-bulldogs-smell",
+ "brown-frogs-walk",
+ "chair-fairs-drive",
+ "chilled-dolphins-join",
+ "clever-paws-stare",
+ "cold-nails-rescue",
+ "create-app-1727774359",
+ "curly-foxes-brake",
+ "cyan-cooks-sing",
+ "cyan-peaches-lay",
+ "cyan-vans-study",
+ "dry-frogs-drum",
+ "early-drinks-kneel",
+ "early-sloths-cross",
+ "eight-steaks-chew",
+ "eleven-pugs-hear",
+ "fair-chairs-drive",
+ "famous-bobcats-remain",
+ "fifty-trainers-watch",
+ "five-gorillas-pay",
+ "five-turkeys-taste",
+ "flat-eels-exist",
+ "fluffy-pears-cry",
+ "four-moons-watch",
+ "friendly-cougars-return",
+ "funny-rocks-train",
+ "fuzzy-elephants-tease",
+ "giant-kiwis-retire",
+ "gold-pots-end",
+ "green-bottles-live",
+ "happy-ligers-think",
+ "honest-impalas-rescue",
+ "hungry-buckets-repair",
+ "large-hats-reply",
+ "large-plants-rhyme",
+ "light-rats-travel",
+ "long-humans-hunt",
+ "loud-hotels-tan",
+ "nasty-lamps-greet",
+ "nice-badgers-travel",
+ "polite-days-flash",
+ "pretty-plants-hammer",
+ "quiet-dingos-bathe",
+ "renovate-156753b",
+ "rich-deers-attend",
+ "rich-needles-collect",
+ "rude-apricots-eat",
+ "shy-olives-swim",
+ "slow-gorillas-thank",
+ "slow-trees-compare",
+ "sour-grapes-trade",
+ "sour-phones-fix",
+ "stale-roses-serve",
+ "strange-bees-attack",
+ "strong-monkeys-melt",
+ "sweet-chicken-smash",
+ "thirty-pets-fry",
+ "tiny-pugs-kick",
+ "tough-pillows-sip",
+ "two-plums-fail",
+ "weak-bottles-cross"
]
}
diff --git a/.changeset/pretty-plants-hammer.md b/.changeset/pretty-plants-hammer.md
new file mode 100644
index 0000000000..c070f769c4
--- /dev/null
+++ b/.changeset/pretty-plants-hammer.md
@@ -0,0 +1,5 @@
+---
+'@backstage/integration-react': minor
+---
+
+Added new ScmAuth method `forBitbucketServer` that uses correct OAuth scopes by default. Also updated `forBitbucket` method to allow overriding the default OAuth scopes.
diff --git a/.changeset/quiet-dingos-bathe.md b/.changeset/quiet-dingos-bathe.md
new file mode 100644
index 0000000000..b0e41de687
--- /dev/null
+++ b/.changeset/quiet-dingos-bathe.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Fixed a bug where the concurrency limiter for URL reading was not honored
diff --git a/.changeset/rare-crabs-cheat.md b/.changeset/rare-crabs-cheat.md
new file mode 100644
index 0000000000..6b4fd37ed7
--- /dev/null
+++ b/.changeset/rare-crabs-cheat.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-techdocs': patch
+---
+
+Add support for mkdocs material palette conditional hashes.
diff --git a/.changeset/rare-foxes-compete.md b/.changeset/rare-foxes-compete.md
deleted file mode 100644
index 64dd9b557e..0000000000
--- a/.changeset/rare-foxes-compete.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-'@backstage/frontend-plugin-api': patch
----
-
-Extensions have been changed to be declared with an array of inputs and outputs, rather than a map of named data refs. This change was made to reduce confusion around the role of the input and output names, as well as enable more powerful APIs for overriding extensions.
-
-An extension that was previously declared like this:
-
-```tsx
-const exampleExtension = createExtension({
- name: 'example',
- inputs: {
- items: createExtensionInput({
- element: coreExtensionData.reactElement,
- }),
- },
- output: {
- element: coreExtensionData.reactElement,
- },
- factory({ inputs }) {
- return {
- element: (
-
- Example
- {inputs.items.map(item => {
- return
{item.output.element}
;
- })}
-
- ),
- };
- },
-});
-```
-
-Should be migrated to the following:
-
-```tsx
-const exampleExtension = createExtension({
- name: 'example',
- inputs: {
- items: createExtensionInput([coreExtensionData.reactElement]),
- },
- output: [coreExtensionData.reactElement],
- factory({ inputs }) {
- return [
- coreExtensionData.reactElement(
-
- Example
- {inputs.items.map(item => {
- return
{item.get(coreExtensionData.reactElement)}
;
- })}
-
,
- ),
- ];
- },
-});
-```
diff --git a/.changeset/red-radios-promise.md b/.changeset/red-radios-promise.md
deleted file mode 100644
index ea876c3480..0000000000
--- a/.changeset/red-radios-promise.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-backend-module-gitlab': patch
----
-
-Adds new optional `excludeRepos` configuration option to the Gitlab catalog provider.
diff --git a/.changeset/renovate-156753b.md b/.changeset/renovate-156753b.md
new file mode 100644
index 0000000000..0ef9afb0e2
--- /dev/null
+++ b/.changeset/renovate-156753b.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-kubernetes-cluster': patch
+'@backstage/plugin-kubernetes-react': patch
+'@backstage/plugin-kubernetes': patch
+---
+
+Updated dependency `@kubernetes-models/base` to `^5.0.0`.
diff --git a/.changeset/rich-deers-attend.md b/.changeset/rich-deers-attend.md
new file mode 100644
index 0000000000..1b26636009
--- /dev/null
+++ b/.changeset/rich-deers-attend.md
@@ -0,0 +1,7 @@
+---
+'@backstage/backend-app-api': patch
+---
+
+The backend will no longer exit immediately if any plugin or modules fails to initialize. Instead, the backend will wait for all plugins and modules to either start up successfully or throw, and then shut down the backend if there were any initialization errors.
+
+This fixes an issue where backend initialization errors in adjacent plugins during database schema migration could cause the database migrations to be stuck in a locked state.
diff --git a/.changeset/rich-mugs-dress.md b/.changeset/rich-mugs-dress.md
deleted file mode 100644
index 5008e33a70..0000000000
--- a/.changeset/rich-mugs-dress.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-'@backstage/config-loader': patch
----
-
-Add boolean `allowMissingDefaultConfig` option to `ConfigSources.default` and
-`ConfigSources.defaultForTargets`, which results in omission of a ConfigSource
-for the default app-config.yaml configuration file if it's not present.
diff --git a/.changeset/rich-needles-collect.md b/.changeset/rich-needles-collect.md
new file mode 100644
index 0000000000..dab36e9543
--- /dev/null
+++ b/.changeset/rich-needles-collect.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-react': minor
+---
+
+Renamed Template Editor to Manage Templates.
diff --git a/.changeset/rude-apricots-eat.md b/.changeset/rude-apricots-eat.md
new file mode 100644
index 0000000000..198d6a0ec7
--- /dev/null
+++ b/.changeset/rude-apricots-eat.md
@@ -0,0 +1,6 @@
+---
+'@backstage/backend-defaults': patch
+'@backstage/integration': patch
+---
+
+Updating error message for getProjectId when fetching Gitlab project from its url to be more accurate
diff --git a/.changeset/selfish-bees-think.md b/.changeset/selfish-bees-think.md
deleted file mode 100644
index 15598ea551..0000000000
--- a/.changeset/selfish-bees-think.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/backend-defaults': patch
----
-
-Fixed the routing of the new health check service, the health endpoints should now properly be available at `/.backstage/health/v1/readiness` and `/.backstage/health/v1/liveness`.
diff --git a/.changeset/seven-eggs-admire.md b/.changeset/seven-eggs-admire.md
deleted file mode 100644
index d68b38e2d7..0000000000
--- a/.changeset/seven-eggs-admire.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/create-app': patch
----
-
-Updated dockerfile and `app-config.production.yaml` to make it easier to get started with example data
diff --git a/.changeset/shaggy-dodos-applaud.md b/.changeset/shaggy-dodos-applaud.md
deleted file mode 100644
index b7f968aa39..0000000000
--- a/.changeset/shaggy-dodos-applaud.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/cli': patch
----
-
-Switched the target from `'ES2022'` to `'es2022'` for better compatibility with older versions of `swc`.
diff --git a/.changeset/shy-olives-swim.md b/.changeset/shy-olives-swim.md
new file mode 100644
index 0000000000..8a9a07fa81
--- /dev/null
+++ b/.changeset/shy-olives-swim.md
@@ -0,0 +1,11 @@
+---
+'@backstage/backend-dynamic-feature-service': patch
+'@backstage/plugin-search-backend-module-techdocs': patch
+'@backstage/plugin-search-backend-module-catalog': patch
+'@backstage/plugin-search-backend-module-explore': patch
+'@backstage/plugin-events-backend-module-github': patch
+'@backstage/plugin-events-backend-module-gitlab': patch
+'@backstage/plugin-events-node': patch
+---
+
+Updated backend installation instructions.
diff --git a/.changeset/six-rats-kick.md b/.changeset/six-rats-kick.md
deleted file mode 100644
index 23958a2502..0000000000
--- a/.changeset/six-rats-kick.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-gitlab': patch
----
-
-Added test cases for gitlab:projectAccessToken:create example
diff --git a/.changeset/slow-gorillas-thank.md b/.changeset/slow-gorillas-thank.md
new file mode 100644
index 0000000000..2c52964a47
--- /dev/null
+++ b/.changeset/slow-gorillas-thank.md
@@ -0,0 +1,9 @@
+---
+'@backstage/plugin-events-backend': patch
+---
+
+The events backend now has its own built-in event bus for distributing events across multiple backend instances. It exposes a new HTTP API under `/bus/v1/` for publishing and reading events from the bus, as well as its own storage and notification mechanism for events.
+
+The backing event store for the bus only supports scaled deployment if PostgreSQL is used as the DBMS. If SQLite or MySQL is used, the event bus will fall back to an in-memory store that does not support multiple backend instances.
+
+The default `EventsService` implementation from `@backstage/plugin-events-node` has also been updated to use the new events bus.
diff --git a/.changeset/slow-toes-jog.md b/.changeset/slow-toes-jog.md
deleted file mode 100644
index 245feab544..0000000000
--- a/.changeset/slow-toes-jog.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-home': patch
----
-
-Fixed a bug on the WelcomeTitle component where the welcome message wasn't correct when the language was set to Spanish
diff --git a/.changeset/slow-trees-compare.md b/.changeset/slow-trees-compare.md
new file mode 100644
index 0000000000..18e1a82ff9
--- /dev/null
+++ b/.changeset/slow-trees-compare.md
@@ -0,0 +1,8 @@
+---
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/plugin-scaffolder-react': patch
+'@backstage/plugin-scaffolder-node': patch
+'@backstage/plugin-scaffolder': patch
+---
+
+Make it possible to manually retry the scaffolder template from the step it failed
diff --git a/.changeset/small-spoons-shout.md b/.changeset/small-spoons-shout.md
deleted file mode 100644
index 76c209edc6..0000000000
--- a/.changeset/small-spoons-shout.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-'@backstage/cli': minor
----
-
-**BREAKING**: The lockfile (`yarn.lock`) dependency analysis and mutations have been removed from several commands.
-
-The `versions:bump` command will no longer attempt to bump and deduplicate dependencies by modifying the lockfile, it will only update `package.json` files.
-
-The `versions:check` command has been removed, since its only purpose was verification and mutation of the lockfile. We recommend using the `yarn dedupe` command instead, or the `yarn-deduplicate` package if you're using Yarn classic.
-
-The check that was built into the `package start` command has been removed, it will no longer warn about lockfile mismatches.
-
-The packages in the Backstage ecosystem handle package duplications much better now than when these CLI features were first introduced, so the need for these features has diminished. By removing them, we drastically reduce the integration between the Backstage CLI and Yarn, making it much easier to add support for other package managers in the future.
diff --git a/.changeset/soft-gorillas-refuse.md b/.changeset/soft-gorillas-refuse.md
deleted file mode 100644
index 323c4d20d2..0000000000
--- a/.changeset/soft-gorillas-refuse.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/backend-test-utils': patch
----
-
-The default services for `startTestBackend` and `ServiceFactoryTester` now includes the Root Health Service.
diff --git a/.changeset/sour-grapes-trade.md b/.changeset/sour-grapes-trade.md
new file mode 100644
index 0000000000..acbb6cdbe7
--- /dev/null
+++ b/.changeset/sour-grapes-trade.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+The Jest configuration will now search for a `src/setupTests.*` file with any valid script extension, not only `.ts`.
diff --git a/.changeset/sour-phones-fix.md b/.changeset/sour-phones-fix.md
new file mode 100644
index 0000000000..d2519f2ef5
--- /dev/null
+++ b/.changeset/sour-phones-fix.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-backend-module-gitlab': patch
+---
+
+Updated `gitlab:group:ensureExists` action to instead use oauth client.
diff --git a/.changeset/spicy-planets-provide.md b/.changeset/spicy-planets-provide.md
deleted file mode 100644
index f2929df850..0000000000
--- a/.changeset/spicy-planets-provide.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-'@backstage/plugin-notifications-backend-module-email': minor
----
-
-**BREAKING** Following `NotificationTemplateRenderer` methods now return a Promise and **must** be awaited: `getSubject`, `getText` and `getHtml`.
-
-Required changes and example usage:
-
-```diff
-import { notificationsEmailTemplateExtensionPoint } from '@backstage/plugin-notifications-backend-module-email';
-import { Notification } from '@backstage/plugin-notifications-common';
-+import { getNotificationSubject, getNotificationTextContent, getNotificationHtmlContent } from 'my-notification-processing-library`
-export const notificationsModuleEmailDecorator = createBackendModule({
- pluginId: 'notifications',
- moduleId: 'email.templates',
- register(reg) {
- reg.registerInit({
- deps: {
- emailTemplates: notificationsEmailTemplateExtensionPoint,
- },
- async init({ emailTemplates }) {
- emailTemplates.setTemplateRenderer({
-- getSubject(notification) {
-+ async getSubject(notification) {
-- return `New notification from ${notification.source}`;
-+ const subject = await getNotificationSubject(notification);
-+ return `New notification from ${subject}`;
- },
-- getText(notification) {
-+ async getText(notification) {
-- return notification.content;
-+ const text = await getNotificationTextContent(notification);
-+ return text;
- },
-- getHtml(notification) {
-+ async getHtml(notification) {
-- return `${notification.content}
`;
-+ const html = await getNotificationHtmlContent(notification);
-+ return html;
- },
- });
- },
- });
- },
-});
-```
diff --git a/.changeset/spotty-planets-accept.md b/.changeset/spotty-planets-accept.md
deleted file mode 100644
index 7342f89bd1..0000000000
--- a/.changeset/spotty-planets-accept.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder': patch
----
-
-Cleaned up codebase of RepoUrlPicker
diff --git a/.changeset/stale-roses-serve.md b/.changeset/stale-roses-serve.md
new file mode 100644
index 0000000000..29dee56e22
--- /dev/null
+++ b/.changeset/stale-roses-serve.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-events-node': patch
+---
+
+The default implementation of the `EventsService` now uses the new event bus for distributing events across multiple backend instances if the events backend plugin is installed.
diff --git a/.changeset/strange-bees-attack.md b/.changeset/strange-bees-attack.md
new file mode 100644
index 0000000000..c4e95097f8
--- /dev/null
+++ b/.changeset/strange-bees-attack.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+`Link` component now accepts `externalLinkIcon` prop
diff --git a/.changeset/strange-papayas-beg.md b/.changeset/strange-papayas-beg.md
deleted file mode 100644
index 6ce33fb029..0000000000
--- a/.changeset/strange-papayas-beg.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-gitlab': patch
----
-
-Added test cases for gitlab:pipeline:trigger examples
diff --git a/.changeset/strong-monkeys-melt.md b/.changeset/strong-monkeys-melt.md
new file mode 100644
index 0000000000..ef33b0cddd
--- /dev/null
+++ b/.changeset/strong-monkeys-melt.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+The `LEGACY_BACKEND_START` flag is now deprecated.
diff --git a/.changeset/strong-otters-compete.md b/.changeset/strong-otters-compete.md
deleted file mode 100644
index fdcb982b88..0000000000
--- a/.changeset/strong-otters-compete.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/cli': patch
----
-
-Add support for dynamic plugins via the EXPERIMENTAL_MODULE_FEDERATION environment variable when running `yarn start`.
diff --git a/.changeset/stupid-dots-relate.md b/.changeset/stupid-dots-relate.md
deleted file mode 100644
index a83777bff9..0000000000
--- a/.changeset/stupid-dots-relate.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
----
-
-Add examples for `fetch:cookiecutter` scaffolder action & improve related tests
diff --git a/.changeset/sweet-chicken-smash.md b/.changeset/sweet-chicken-smash.md
new file mode 100644
index 0000000000..9aa4c60803
--- /dev/null
+++ b/.changeset/sweet-chicken-smash.md
@@ -0,0 +1,14 @@
+---
+'@backstage/cli': minor
+---
+
+**BREAKING**: Removed the following deprecated commands:
+
+- `create`: Use `backstage-cli new` instead
+- `create-plugin`: Use `backstage-cli new` instead
+- `plugin:diff`: Use `backstage-cli fix` instead
+- `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead
+- `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead
+- `clean`: Use `backstage-cli package clean` instead
+
+In addition, the experimental `install` and `onboard` commands have been removed since they have not received any updates since their introduction and we're expecting usage to be low. If you where relying on these commands, please let us know by opening an issue towards the main Backstage repository.
diff --git a/.changeset/sweet-oranges-buy.md b/.changeset/sweet-oranges-buy.md
deleted file mode 100644
index d9f3343e3d..0000000000
--- a/.changeset/sweet-oranges-buy.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/frontend-plugin-api': patch
----
-
-Added support to be able to define `zod` config schema in Blueprints, with built in schema merging from the Blueprint and the extension instances.
diff --git a/.changeset/swift-kings-sparkle.md b/.changeset/swift-kings-sparkle.md
deleted file mode 100644
index 84ceae962b..0000000000
--- a/.changeset/swift-kings-sparkle.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-backend-module-aws': patch
----
-
-`AwsOrganizationCloudAccountProcessor` configuration field `roleArn` is deprecated in favor of new field `accountId`
diff --git a/.changeset/tall-snakes-fix.md b/.changeset/tall-snakes-fix.md
deleted file mode 100644
index 351c781375..0000000000
--- a/.changeset/tall-snakes-fix.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/backend-plugin-api': patch
----
-
-fix typo in `getPluginRequestToken` comments
diff --git a/.changeset/thick-hotels-know.md b/.changeset/thick-hotels-know.md
deleted file mode 100644
index f0c7129256..0000000000
--- a/.changeset/thick-hotels-know.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend': patch
----
-
-Fix scaffolder action `catalog:write` to write to directories that don't already exist
diff --git a/.changeset/thirty-paws-hope.md b/.changeset/thirty-paws-hope.md
deleted file mode 100644
index 0de607f331..0000000000
--- a/.changeset/thirty-paws-hope.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/core-app-api': patch
----
-
-The request to delete the session cookie when running the app in protected mode is now done with a plain `fetch` rather than `FetchApi`. This fixes a bug where the app would immediately try to sign-in again when removing the cookie during logout.
diff --git a/.changeset/thirty-pets-fry.md b/.changeset/thirty-pets-fry.md
new file mode 100644
index 0000000000..2a588bb161
--- /dev/null
+++ b/.changeset/thirty-pets-fry.md
@@ -0,0 +1,8 @@
+---
+'@backstage/frontend-plugin-api': minor
+'@backstage/core-plugin-api': minor
+---
+
+**BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time.
+
+This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons).
diff --git a/.changeset/tiny-oranges-pretend.md b/.changeset/tiny-oranges-pretend.md
deleted file mode 100644
index 87227fb962..0000000000
--- a/.changeset/tiny-oranges-pretend.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-'@backstage/frontend-plugin-api': patch
----
-
-Extension data references can now be defined in a way that encapsulates the ID string in the type, in addition to the data type itself. The old way of creating extension data references is deprecated and will be removed in a future release.
-
-For example, the following code:
-
-```ts
-export const myExtension = createExtensionDataRef('my-plugin.my-data');
-```
-
-Should be updated to the following:
-
-```ts
-export const myExtension = createExtensionDataRef().with({
- id: 'my-plugin.my-data',
-});
-```
diff --git a/.changeset/tiny-pugs-kick.md b/.changeset/tiny-pugs-kick.md
new file mode 100644
index 0000000000..2d6f83b325
--- /dev/null
+++ b/.changeset/tiny-pugs-kick.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Update the Scaffolder template editor to quickly access installed custom fields and actions when editing a template.
diff --git a/.changeset/tough-fireants-itch.md b/.changeset/tough-fireants-itch.md
new file mode 100644
index 0000000000..3567ac82d0
--- /dev/null
+++ b/.changeset/tough-fireants-itch.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-techdocs-backend': patch
+'@backstage/plugin-techdocs-node': patch
+---
+
+Allow to pass StorageOptions to GCS Publisher
diff --git a/.changeset/tough-lies-repair.md b/.changeset/tough-lies-repair.md
deleted file mode 100644
index b2f848e292..0000000000
--- a/.changeset/tough-lies-repair.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder': patch
----
-
-Fix issue with `RepoUrlPicker` not refreshing the credentials for a different host
diff --git a/.changeset/tough-pillows-sip.md b/.changeset/tough-pillows-sip.md
new file mode 100644
index 0000000000..aea3e2d5a0
--- /dev/null
+++ b/.changeset/tough-pillows-sip.md
@@ -0,0 +1,5 @@
+---
+'@backstage/integration': patch
+---
+
+Updated functions parseHarnessUrl, getHarnessLatestCommitUrl, getHarnessFileContentsUrl and getHarnessArchiveUrl to fix parsing of urls
diff --git a/.changeset/two-plums-fail.md b/.changeset/two-plums-fail.md
new file mode 100644
index 0000000000..9d976ab4b5
--- /dev/null
+++ b/.changeset/two-plums-fail.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch
+---
+
+Use protocol from Bitbucket Server apiBaseUrl config parameter instead of hard-coded https
diff --git a/.changeset/violet-jokes-wave.md b/.changeset/violet-jokes-wave.md
deleted file mode 100644
index 623cff2583..0000000000
--- a/.changeset/violet-jokes-wave.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/cli': patch
----
-
-Fix for `repo build --all` not properly detecting the experimental public entry point.
diff --git a/.changeset/weak-bottles-cross.md b/.changeset/weak-bottles-cross.md
new file mode 100644
index 0000000000..c12d32d7db
--- /dev/null
+++ b/.changeset/weak-bottles-cross.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Fix a bug where etags were expiring too soon in the URL reader
diff --git a/.changeset/wicked-bobcats-teach.md b/.changeset/wicked-bobcats-teach.md
deleted file mode 100644
index 041e336f7d..0000000000
--- a/.changeset/wicked-bobcats-teach.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-auth-react': patch
----
-
-feat: Hide visibility of CookieAuthRedirect
diff --git a/.changeset/wild-eggs-exist.md b/.changeset/wild-eggs-exist.md
deleted file mode 100644
index 68c49e343b..0000000000
--- a/.changeset/wild-eggs-exist.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend-module-gitlab': patch
----
-
-Add custom action for merge request: **auto**
-
-The **Auto** action selects the committed action between _create_ and _update_.
-
-The **Auto** action fetches files using the **/projects/repository/tree endpoint**.
-After fetching, it checks if the file exists locally and in the repository. If it does, it chooses **update**; otherwise, it chooses **create**.
diff --git a/.changeset/witty-bears-behave.md b/.changeset/witty-bears-behave.md
deleted file mode 100644
index 174467b9eb..0000000000
--- a/.changeset/witty-bears-behave.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/integration': patch
----
-
-Updated functions for `getHarnessEditContentsUrl`, `getHarnessFileContentsUrl`, `getHarnessArchiveUrl`, `getHarnessLatestCommitUrl` and `parseHarnessUrl` to handle account and org level urls
diff --git a/.changeset/young-games-visit.md b/.changeset/young-games-visit.md
deleted file mode 100644
index 467abcec86..0000000000
--- a/.changeset/young-games-visit.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-'@backstage/frontend-plugin-api': patch
-'@backstage/frontend-test-utils': patch
-'@backstage/frontend-app-api': patch
-'@backstage/core-compat-api': patch
-'@backstage/plugin-catalog-react': patch
-'@backstage/plugin-user-settings': patch
-'@backstage/plugin-search-react': patch
-'@backstage/plugin-techdocs': patch
-'@backstage/plugin-catalog': patch
-'@backstage/plugin-search': patch
----
-
-Added config input type to the extensions
diff --git a/.eslintrc.js b/.eslintrc.js
index 01cad187be..eb2a07b3b0 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -263,4 +263,7 @@ module.exports = {
},
},
],
+ settings: {
+ 'testing-library/custom-queries': 'off',
+ },
};
diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 5a70a25512..37f54997c6 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -1,22 +1,17 @@
{
$schema: 'https://docs.renovatebot.com/renovate-schema.json',
-
labels: ['dependencies'],
-
extends: ['config:best-practices', ':gitSignOff'],
// do not pin dev dependencies, which are part of the best-practices preset
ignorePresets: [':pinDevDependencies', ':pinDigest', 'docker:pinDigests'],
-
constraints: {
// TODO(freben): Remove this later; it addresses a temporary issue in corepack
// https://github.com/nodejs/corepack/issues/379
// https://github.com/renovatebot/renovate/discussions/27465
corepack: '0.24.1',
},
-
- // the default limit are 10 PRs
+ // the default limit is 10 PRs
prConcurrentLimit: 20,
-
postUpdateOptions: ['yarnDedupeHighest'],
rangeStrategy: 'update-lockfile',
ignoreDeps: [
@@ -26,19 +21,19 @@
],
packageRules: [
{
- matchSourceUrlPrefixes: ['https://github.com/spotify/web-scripts'],
groupName: 'Spotify web-scripts monorepo packages',
rangeStrategy: 'replace',
+ matchSourceUrls: ['https://github.com/spotify/web-scripts{/,}**'],
},
{
- matchSourceUrlPrefixes: ['https://github.com/microsoft/rushstack'],
groupName: 'API Extractor / Rush Stack monorepo packages',
rangeStrategy: 'replace',
+ matchSourceUrls: ['https://github.com/microsoft/rushstack{/,}**'],
},
{
- matchSourceUrlPrefixes: ['https://github.com/gregberge/svgr'],
groupName: 'SVGR monorepo packages',
rangeStrategy: 'replace',
+ matchSourceUrls: ['https://github.com/gregberge/svgr{/,}**'],
},
// We update yarn packages manually as it's gzip'd and we don't want to pollute the repository too much.
{
diff --git a/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt
index 42b0e4895c..2cbcc484f7 100644
--- a/.github/vale/config/vocabularies/Backstage/accept.txt
+++ b/.github/vale/config/vocabularies/Backstage/accept.txt
@@ -39,6 +39,8 @@ Brex
broadcasted
bugfixes
builtins
+bundler
+bundlers
callout
CDNs
Chai
@@ -112,6 +114,7 @@ DOMPurify
don'ts
dynatrace
Dynatrace
+dyno
ecco
elasticsearch
Entra
@@ -163,6 +166,7 @@ Heroku
hoc
horizontalpodautoscalers
Hostname
+hotspot
hotspots
howto
http
@@ -199,6 +203,7 @@ Knex
knip
Koyeb
KPIs
+kroki
Kuang
kubectl
kubernetes
@@ -243,8 +248,10 @@ Mkdocs
monorepo
Monorepo
monorepos
+morgan
msgraph
msw
+multiton
mutex
mutexes
mysql
@@ -277,6 +284,8 @@ OpenSearch
OpenShift
openssl
orgs
+Overridable
+overridable
padding
paddings
pagerduty
@@ -450,6 +459,7 @@ unmount
unregister
unregistering
unregistration
+unstarred
untracked
upsert
upstreams
diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml
index c3886e05b9..e28f147706 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
disable-sudo: true
egress-policy: block
diff --git a/.github/workflows/api-breaking-changes.yml b/.github/workflows/api-breaking-changes.yml
index c39fdf7f7c..3e27955f8a 100644
--- a/.github/workflows/api-breaking-changes.yml
+++ b/.github/workflows/api-breaking-changes.yml
@@ -14,7 +14,7 @@ jobs:
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -27,13 +27,13 @@ jobs:
run: git fetch --depth 1 origin ${{ github.base_ref }}
- name: setup-node
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 18.x
registry-url: https://registry.npmjs.org/
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: linux-v18
@@ -46,7 +46,7 @@ jobs:
cat ${{ github.event_path }} > event.json
- name: Upload Artifacts
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4
+ uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
with:
name: preview-spec
path: |
diff --git a/.github/workflows/automate_area-labels.yml b/.github/workflows/automate_area-labels.yml
index bde8f15606..89e1adc3c3 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml
index 94b4b51848..1f07a848fb 100644
--- a/.github/workflows/automate_changeset_feedback.yml
+++ b/.github/workflows/automate_changeset_feedback.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -34,7 +34,7 @@ jobs:
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@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ - uses: backstage/actions/changeset-feedback@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
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 2aac0a17f6..4ab75b816f 100644
--- a/.github/workflows/automate_merge_message.yml
+++ b/.github/workflows/automate_merge_message.yml
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml
index 6cb16937c6..b7adc5235a 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/ci-noop.yml b/.github/workflows/ci-noop.yml
index adf0feb926..321e4b57e7 100644
--- a/.github/workflows/ci-noop.yml
+++ b/.github/workflows/ci-noop.yml
@@ -40,7 +40,7 @@ jobs:
name: Test ${{ matrix.node-version }}
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 168d6205e4..886abafcd7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -28,20 +28,20 @@ jobs:
name: Install ${{ matrix.node-version }}
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -64,20 +64,20 @@ jobs:
name: Verify ${{ matrix.node-version }}
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -90,6 +90,9 @@ jobs:
- name: verify local dependency ranges
run: node scripts/verify-local-dependencies.js
+ - name: verify peer dependency ranges
+ run: yarn lint:peer-deps
+
- name: check for missing repo fixes
run: yarn fix --check
@@ -216,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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml
index bdbe22aae8..48ac1db289 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- - uses: backstage/actions/cron@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ - uses: backstage/actions/cron@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
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 9f305f9a20..a45c9c35bd 100644
--- a/.github/workflows/deploy_docker-image.yml
+++ b/.github/workflows/deploy_docker-image.yml
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -31,13 +31,13 @@ jobs:
ref: ${{ github.event.client_payload.version && env.RELEASE_VERSION || github.ref }}
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -45,23 +45,24 @@ jobs:
run: npx @backstage/create-app
env:
BACKSTAGE_APP_NAME: example-app
+ YARN_ENABLE_IMMUTABLE_INSTALLS: false
- name: yarn build
run: yarn build:backend
working-directory: ./example-app
- name: Login to GitHub Container Registry
- uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 # v3.2.0
+ uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0
+ uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1
- name: Build and push
- uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
+ uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v6.7.0
with:
context: './example-app'
file: ./example-app/packages/backend/Dockerfile
diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml
index be46bcfaa0..9ae266280f 100644
--- a/.github/workflows/deploy_microsite.yml
+++ b/.github/workflows/deploy_microsite.yml
@@ -8,14 +8,148 @@ permissions:
contents: read
jobs:
- deploy-microsite-and-storybook:
- permissions:
- contents: write # for JamesIves/github-pages-deploy-action to push changes in repo
+ stable:
runs-on: ubuntu-latest
+ concurrency:
+ group: stable-reference-${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
env:
CI: true
NODE_OPTIONS: --max-old-space-size=8192
+
+ outputs:
+ release: ${{ steps.find-release.outputs.result }}
+
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit
+
+ - name: find latest release
+ uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
+ id: find-release
+ with:
+ script: |
+ const { data } = await github.rest.repos.listTags({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ per_page: 100,
+ })
+
+ const [{tag}] = data
+ .map(i => i.name)
+ .filter(tag => tag.match(/^v\d+\.\d+\.\d+$/))
+ .map(tag => ({
+ tag,
+ val: tag
+ .slice(1)
+ .split('.')
+ .reduce((val, part) => Number(val) * 1000 + Number(part))
+ }))
+ .sort((a, b) => b.val - a.val)
+
+ return tag
+ result-encoding: string
+
+ - name: checkout latest release
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+ with:
+ ref: refs/tags/${{ steps.find-release.outputs.result }}
+
+ - name: use node.js 18.x
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
+ with:
+ node-version: 18.x
+ registry-url: https://registry.npmjs.org/ # Needed for auth
+
+ - name: yarn install
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
+ with:
+ cache-prefix: ${{ runner.os }}-v18.x
+
+ - name: build API reference
+ run: yarn build:api-docs
+
+ - name: upload API reference
+ uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
+ with:
+ name: stable-reference
+ path: docs/reference/
+ if-no-files-found: error
+ retention-days: 1
+
+ next:
+ runs-on: ubuntu-latest
+ concurrency:
+ group: next-reference-${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+ env:
+ CI: true
+ NODE_OPTIONS: --max-old-space-size=8192
+
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit
+
+ - name: checkout master
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+
+ - name: use node.js 18.x
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
+ with:
+ node-version: 18.x
+ registry-url: https://registry.npmjs.org/ # Needed for auth
+
+ - name: yarn install
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
+ with:
+ cache-prefix: ${{ runner.os }}-v18.x
+
+ - name: build API reference
+ run: yarn build:api-docs
+
+ - name: upload API reference
+ uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
+ with:
+ name: next-reference
+ path: docs/reference/
+ if-no-files-found: error
+ retention-days: 1
+
+ # Also build and upload storybook
+ - name: storybook yarn install
+ run: yarn install --immutable
+ working-directory: storybook
+
+ - name: storybook build
+ run: yarn build-storybook
+ working-directory: storybook
+
+ - name: storybook upload
+ uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
+ with:
+ name: storybook
+ path: storybook/dist/
+ if-no-files-found: error
+ retention-days: 1
+
+ deploy-microsite-and-storybook:
+ permissions:
+ contents: write # for JamesIves/github-pages-deploy-action to push changes in repo
+
+ runs-on: ubuntu-latest
+
+ needs:
+ - stable
+ - next
+
+ env:
+ CI: true
+ NODE_OPTIONS: --max-old-space-size=16384
DOCUSAURUS_SSR_CONCURRENCY: 5
concurrency:
@@ -24,49 +158,74 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-
- name: use node.js 18.x
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 18.x
registry-url: https://registry.npmjs.org/ # Needed for auth
- # We avoid caching in this workflow, as we're running an install of both the top-level
- # dependencies and the microsite. We leave it to the main master workflow to produce the
- # cache, as that results in a smaller bundle.
- - name: top-level yarn install
- run: yarn install --immutable
+ # Stable docs
+ - name: checkout latest release
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+ with:
+ ref: refs/tags/${{ needs.stable.outputs.release }}
+
- name: microsite yarn install
run: yarn install --immutable
working-directory: microsite
- - name: storybook yarn install
- run: yarn install --immutable
- working-directory: storybook
- - name: build API reference
- run: yarn build:api-docs
+ - name: download stable reference
+ uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
+ with:
+ name: stable-reference
+ path: docs/reference
+
+ - name: grab lastest releases docs
+ run: |
+ git fetch origin master --depth 1
+ git checkout FETCH_HEAD -- docs/releases
+
+ - name: generate stable docs
+ run: yarn docusaurus docs:version stable
+ working-directory: microsite
+
+ - name: clear API reference
+ run: rm -r docs/reference
+
+ # Next docs
+ - name: checkout master
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
+ with:
+ clean: false
+
+ - name: microsite yarn install
+ run: yarn install --immutable
+ working-directory: microsite
+
+ - name: download next reference
+ uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
+ with:
+ name: next-reference
+ path: docs/reference
- name: build microsite
run: yarn build
working-directory: microsite
- - name: build storybook
- run: yarn build-storybook
- working-directory: storybook
-
- - name: move storybook dist into microsite
- run: mv storybook/dist/ microsite/build/storybook
+ - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
+ with:
+ name: storybook
+ path: microsite/build/storybook
- name: Check the build output
run: ls microsite/build && ls microsite/build/storybook
- name: Deploy both microsite and storybook to gh-pages
- uses: JamesIves/github-pages-deploy-action@5c6e9e9f3672ce8fd37b9856193d2a537941e66c # v4.6.1
+ uses: JamesIves/github-pages-deploy-action@920cbb300dcd3f0568dbc42700c61e2fd9e6139c # v4.6.4
with:
branch: gh-pages
folder: microsite/build
diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml
deleted file mode 100644
index 5488b9a189..0000000000
--- a/.github/workflows/deploy_nightly.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-name: Deploy Nightly Release
-on:
- schedule:
- - cron: '0 2 * * *' # run at 2 AM UTC
-
-jobs:
- build:
- if: github.repository == 'backstage/backstage' # prevent running on forks
-
- runs-on: ubuntu-latest
-
- env:
- CI: true
- NODE_OPTIONS: --max-old-space-size=8192
-
- steps:
- - name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
- with:
- egress-policy: audit
-
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-
- - name: use node.js 18.x
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
- with:
- node-version: 18.x
- registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
- with:
- cache-prefix: ${{ runner.os }}-v18.x
-
- # No verification done here, only build & publish. If the master branch
- # is broken we will see that from those builds, but we still want to push nightly
- # builds since upgrading to them is a manual process anyway.
-
- - name: tsc
- run: yarn tsc
-
- - name: build
- run: yarn backstage-cli repo build
-
- - name: build embedded techdocs app
- working-directory: packages/techdocs-cli-embedded-app
- run: yarn build
-
- # Prepares a nightly release version of any package with pending changesets
- # Pre-mode is exited if case we're in it, otherwise it has no effect
- - name: prepare nightly release
- run: |
- yarn changeset pre exit || true
- yarn changeset version --snapshot nightly
-
- # Publishes the nightly release to npm, by using tag we make sure the release is
- # not flagged as the latest release, which means that people will not get this
- # version of the package unless requested explicitly
- - name: publish nightly release
- run: |
- yarn config set -H 'npmAuthToken' "${{secrets.NPM_TOKEN}}"
- yarn workspaces foreach -p -j 10 -v --no-private npm publish --access public --tolerate-republish --tag nightly
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
-
- - name: Discord notification
- if: ${{ failure() }}
- uses: Ilshidur/action-discord@0c4b27844ba47cb1c7bee539c8eead5284ce9fa9 # 0.3.2
- env:
- DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
- with:
- args: 'Nightly build failed https://github.com/{{GITHUB_REPOSITORY}}/actions/runs/{{GITHUB_RUN_ID}}'
diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml
index 7ae5637986..92210e90be 100644
--- a/.github/workflows/deploy_packages.yml
+++ b/.github/workflows/deploy_packages.yml
@@ -1,11 +1,5 @@
name: Deploy Packages
on:
- workflow_dispatch:
- inputs:
- force_release:
- description: Unconditionally trigger the release job
- required: false
- type: boolean
push:
branches: [master, patch/*]
@@ -77,12 +71,12 @@ jobs:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -140,7 +134,7 @@ jobs:
release:
needs: build
- if: needs.build.outputs.needs_release == 'true' || inputs.force_release == true
+ if: needs.build.outputs.needs_release == 'true'
runs-on: ubuntu-latest
@@ -148,75 +142,16 @@ jobs:
matrix:
node-version: [18.x]
- env:
- CI: 'true'
- NODE_OPTIONS: --max-old-space-size=8192
-
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-
- - name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
- with:
- node-version: ${{ matrix.node-version }}
- registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
- with:
- cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
-
- - name: build type declarations
- run: yarn tsc:full
-
- - name: build packages
- run: yarn backstage-cli repo build
-
- - name: build embedded techdocs app
- working-directory: packages/techdocs-cli-embedded-app
- run: yarn build
-
- # Publishes current version of packages that are not already present in the registry
- - name: publish
- run: |
- yarn config set -H 'npmAuthToken' "${{secrets.NPM_TOKEN}}"
- if [ -f ".changeset/pre.json" ]; then
- yarn workspaces foreach -v --no-private npm publish --access public --tolerate-republish --tag next
- else
- yarn workspaces foreach -v --no-private npm publish --access public --tolerate-republish
- fi
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
-
- # Grabs the version in the root package.json and creates a tag on GitHub
- - name: Create a release tag
- id: create_tag
- run: node scripts/create-release-tag.js
- env:
- GITHUB_TOKEN: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
-
- # Convert the newly created tag into a release with changelog information
- - name: Create release on GitHub
- run: node scripts/create-github-release.js ${{ steps.create_tag.outputs.tag_name }} 1
- env:
- GITHUB_TOKEN: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
-
- - name: Dispatch repository event
- uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3.0.0
- with:
- token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
- event-type: release-published
- client-payload: '{"version": "${{ steps.create_tag.outputs.version }}"}'
-
- # Notify everyone about this great new release :D
+ # Notify maintainers that a new release is ready to be published
- name: Discord notification
uses: Ilshidur/action-discord@0c4b27844ba47cb1c7bee539c8eead5284ce9fa9 # 0.3.2
env:
- DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
- TAG_NAME: ${{ steps.create_tag.outputs.tag_name }}
+ DISCORD_WEBHOOK: ${{ secrets.DISCORD_MAINTAINERS_WEBHOOK }}
with:
- args: 'A new release has been published! https://github.com/backstage/backstage/releases/tag/{{TAG_NAME}}'
+ args: 'A new release is ready to be [published](https://github.com/backstage/publishing/actions/workflows/publish-main.yml) from {{GITHUB_SHA}}'
diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml
index 26e394fd87..2cd355b75e 100644
--- a/.github/workflows/issue.yaml
+++ b/.github/workflows/issue.yaml
@@ -3,14 +3,20 @@ on:
issues:
types: [opened]
+permissions:
+ contents: read
+
jobs:
sync:
+ permissions:
+ contents: read # for github/issue-labeler to get repo contents
+ issues: write # for github/issue-labeler to create or remove labels
runs-on: ubuntu-latest
if: github.repository == 'backstage/backstage'
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml
index ccf02d5aee..7e3faaebc5 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -30,7 +30,7 @@ jobs:
run: |
mkdir -p ./pr
echo $PR_NUMBER > ./pr/pr_number
- - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
+ - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: pr_number-${{ github.event.pull_request.number }}
path: pr/
diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml
index 1b2b9ee5be..517a978a83 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
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@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ - uses: backstage/actions/re-review@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
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 bf7c5cfa8d..7639ac14db 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- name: PR sync
- uses: backstage/actions/pr-sync@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/pr-sync@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
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 354a76760b..53489d8c0e 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -29,7 +29,7 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -58,7 +58,7 @@ jobs:
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: 'Upload artifact'
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
+ uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: SARIF file
path: results.sarif
@@ -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@5cf07d8b700b67e235fbb65cbc84f69c0cf10464 # v3.25.14
+ uses: github/codeql-action/upload-sarif@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7
with:
sarif_file: results.sarif
diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml
index da6bd2592d..f59eb048e0 100644
--- a/.github/workflows/sync_code-formatting.yml
+++ b/.github/workflows/sync_code-formatting.yml
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -20,12 +20,12 @@ jobs:
fetch-depth: 0
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
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 ce79efb148..adf39be8df 100644
--- a/.github/workflows/sync_dependabot-changesets.yml
+++ b/.github/workflows/sync_dependabot-changesets.yml
@@ -11,7 +11,7 @@ jobs:
if: github.actor == 'dependabot[bot]' && github.repository == 'backstage/backstage'
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml
index 62dd7e0c13..87a8837c48 100644
--- a/.github/workflows/sync_release-manifest.yml
+++ b/.github/workflows/sync_release-manifest.yml
@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -19,13 +19,13 @@ jobs:
ref: v${{ github.event.client_payload.version }}
- name: use node.js 18.x
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 18.x
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@a674369920067381b450d398b27df7039b7ef635 # v0.6.5
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v18.x
diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml
index 4ba792d4e0..200bc6eaaa 100644
--- a/.github/workflows/sync_renovate-changesets.yml
+++ b/.github/workflows/sync_renovate-changesets.yml
@@ -11,7 +11,7 @@ jobs:
if: github.actor == 'renovate[bot]' && github.repository == 'backstage/backstage'
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml
index af2e4da251..9c709508b3 100644
--- a/.github/workflows/sync_snyk-github-issues.yml
+++ b/.github/workflows/sync_snyk-github-issues.yml
@@ -12,24 +12,24 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: use node.js 18.x
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 18.x
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v18.x
- name: Create Snyk report
- uses: snyk/actions/node@6312a53377a551c0258438bf25fb8f378afbc977 # master
+ uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master
continue-on-error: true # Snyk CLI exits with error when vulnerabilities are found
with:
args: >
diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml
index 1bdf0d30cf..1b48930410 100644
--- a/.github/workflows/sync_snyk-monitor.yml
+++ b/.github/workflows/sync_snyk-monitor.yml
@@ -25,13 +25,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Monitor and Synchronize Snyk Policies
- uses: snyk/actions/node@6312a53377a551c0258438bf25fb8f378afbc977 # master
+ uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master
with:
command: monitor
args: >
@@ -46,7 +46,7 @@ jobs:
# Above we run the `monitor` command, this runs the `test` command which is
# the one that generates the SARIF report that we can upload to GitHub.
- name: Create Snyk report
- uses: snyk/actions/node@6312a53377a551c0258438bf25fb8f378afbc977 # master
+ uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master
continue-on-error: true # To make sure that SARIF upload gets called
with:
args: >
@@ -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@5cf07d8b700b67e235fbb65cbc84f69c0cf10464 # v3.25.14
+ uses: github/codeql-action/upload-sarif@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7
with:
sarif_file: snyk.sarif
diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml
index 3a10083b7e..aac606ae90 100644
--- a/.github/workflows/sync_version-packages.yml
+++ b/.github/workflows/sync_version-packages.yml
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_accessibility-noop.yml b/.github/workflows/verify_accessibility-noop.yml
index 6b51713aa1..37ce3513e9 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml
index 386306dcb1..cfeb8ba51f 100644
--- a/.github/workflows/verify_accessibility.yml
+++ b/.github/workflows/verify_accessibility.yml
@@ -20,17 +20,17 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Use Node.js 18.x
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 18.x
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v18.x
- name: run Lighthouse CI
diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml
index b2fb2dc6ec..63ba85906e 100644
--- a/.github/workflows/verify_codeql.yml
+++ b/.github/workflows/verify_codeql.yml
@@ -42,7 +42,7 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -55,7 +55,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@5cf07d8b700b67e235fbb65cbc84f69c0cf10464 # v3.25.14
+ uses: github/codeql-action/init@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7
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@5cf07d8b700b67e235fbb65cbc84f69c0cf10464 # v3.25.14
+ uses: github/codeql-action/autobuild@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7
# ℹ️ 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@5cf07d8b700b67e235fbb65cbc84f69c0cf10464 # v3.25.14
+ uses: github/codeql-action/analyze@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7
diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml
index 2a0c4449a9..8e2ae20596 100644
--- a/.github/workflows/verify_docs-quality.yml
+++ b/.github/workflows/verify_docs-quality.yml
@@ -12,7 +12,7 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_e2e-kubernetes-noop.yml b/.github/workflows/verify_e2e-kubernetes-noop.yml
deleted file mode 100644
index b51c7fd201..0000000000
--- a/.github/workflows/verify_e2e-kubernetes-noop.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-# NO-OP placeholder that always passes for other paths
-# This is here so that we're able to set the status check as required
-
-name: E2E Kubernetes Void
-on:
- pull_request:
- paths-ignore:
- - 'yarn.lock'
- - '.github/workflows/verify_e2e-kubernetes.yml'
- - 'packages/backend-common/src/**'
-
-permissions:
- contents: read
-
-jobs:
- verify:
- runs-on: ubuntu-latest
-
- strategy:
- matrix:
- node-version: [18.x, 20.x]
-
- name: Kubernetes ${{ matrix.node-version }}
- steps:
- - name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
- with:
- egress-policy: audit
-
- - run: echo NOOP
diff --git a/.github/workflows/verify_e2e-kubernetes.yml b/.github/workflows/verify_e2e-kubernetes.yml
deleted file mode 100644
index 4647505cbf..0000000000
--- a/.github/workflows/verify_e2e-kubernetes.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-name: E2E Kubernetes
-on:
- # NOTE: If you change these you must update verify_kubernetes-noop.yml as well
- pull_request:
- paths:
- - 'yarn.lock'
- - '.github/workflows/verify_e2e-kubernetes.yml'
- - 'packages/backend-common/src/**'
-
-jobs:
- verify:
- runs-on: ubuntu-latest
-
- strategy:
- matrix:
- node-version: [18.x, 20.x]
-
- env:
- CI: true
- KUBERNETES_TESTS: true
-
- name: Kubernetes ${{ matrix.node-version }}
- steps:
- - name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
- with:
- egress-policy: audit
-
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-
- - name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
- with:
- node-version: ${{ matrix.node-version }}
- registry-url: https://registry.npmjs.org/ # Needed for auth
-
- - name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
- with:
- cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
-
- - name: bootstrap kind
- uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0
-
- - name: kubernetes test
- working-directory: packages/backend-common
- run: yarn test:kubernetes
diff --git a/.github/workflows/verify_e2e-linux-noop.yml b/.github/workflows/verify_e2e-linux-noop.yml
index c042bdeac7..f4f24f14f5 100644
--- a/.github/workflows/verify_e2e-linux-noop.yml
+++ b/.github/workflows/verify_e2e-linux-noop.yml
@@ -29,7 +29,7 @@ jobs:
name: E2E Linux ${{ matrix.node-version }}
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml
index fa303ce1c6..69a92abb9a 100644
--- a/.github/workflows/verify_e2e-linux.yml
+++ b/.github/workflows/verify_e2e-linux.yml
@@ -41,7 +41,7 @@ jobs:
name: E2E Linux ${{ matrix.node-version }}
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -53,12 +53,12 @@ jobs:
git config --global user.name 'GitHub e2e user'
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
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 41f76a6410..15bb9b3479 100644
--- a/.github/workflows/verify_e2e-techdocs.yml
+++ b/.github/workflows/verify_e2e-techdocs.yml
@@ -30,12 +30,12 @@ jobs:
name: Techdocs
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
+ - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.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 299489fcbe..b3998522c9 100644
--- a/.github/workflows/verify_e2e-windows-noop.yml
+++ b/.github/workflows/verify_e2e-windows-noop.yml
@@ -25,7 +25,7 @@ jobs:
name: E2E Windows ${{ matrix.node-version }}
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml
index bc782c4bd3..911698867c 100644
--- a/.github/workflows/verify_e2e-windows.yml
+++ b/.github/workflows/verify_e2e-windows.yml
@@ -31,7 +31,7 @@ jobs:
name: E2E Windows ${{ matrix.node-version }}
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -50,13 +50,13 @@ jobs:
git config --global user.name 'GitHub e2e user'
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: setup python
- uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
+ uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
with:
python-version: '3.10'
@@ -78,7 +78,7 @@ jobs:
uses: browser-actions/setup-chrome@803ef6dfb4fdf22089c9563225d95e4a515820a0 # latest
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml
index ad94f9ece5..8b3bfc9b13 100644
--- a/.github/workflows/verify_fossa.yml
+++ b/.github/workflows/verify_fossa.yml
@@ -14,7 +14,7 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_microsite-noop.yml b/.github/workflows/verify_microsite-noop.yml
index d8ccaf73e5..f4c5ea4104 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml
index 08dcddde8e..5527953767 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: use node.js 18.x
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 18.x
- - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
+ - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # 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 9f0ecc65be..49721e7f51 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_microsite_accessibility.yml b/.github/workflows/verify_microsite_accessibility.yml
index 220e2633c3..350c46309e 100644
--- a/.github/workflows/verify_microsite_accessibility.yml
+++ b/.github/workflows/verify_microsite_accessibility.yml
@@ -15,14 +15,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Use Node.js 18.x
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 18.x
diff --git a/.github/workflows/verify_storybook-noop.yml b/.github/workflows/verify_storybook-noop.yml
index a1a1c1965d..115c79c9c3 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@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml
index 2f93b67616..458ef69690 100644
--- a/.github/workflows/verify_storybook.yml
+++ b/.github/workflows/verify_storybook.yml
@@ -28,7 +28,7 @@ jobs:
name: Storybook
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
@@ -37,12 +37,12 @@ jobs:
fetch-depth: 0 # Required to retrieve git history
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@772cef06641090d0095188e15c85647acdf0c250 # v0.6.11
+ uses: backstage/actions/yarn-install@25145dd4117d50e1da9330e9ed2893bc6b75373e # v0.6.15
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@5991575112b472a4fa85429f29cc17e2fb83a2a2 # v11
+ - uses: chromaui/action@f4e60a7072abcac4203f4ca50613f28e199a52ba # 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 109e2ee96e..9846ff28d2 100644
--- a/.github/workflows/verify_windows.yml
+++ b/.github/workflows/verify_windows.yml
@@ -29,14 +29,14 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
diff --git a/.gitignore b/.gitignore
index 6db4bf549c..865918c1f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,6 +42,9 @@ coverage
# Bower dependency directory (https://bower.io/)
bower_components
+# Documentation reference, generated by build:api-docs
+docs/reference
+
# node-waf configuration
.lock-wscript
diff --git a/.prettierignore b/.prettierignore
index 3a16bd1388..c7a16065e5 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -4,8 +4,13 @@ microsite
coverage
*.hbs
templates
+# old reports
api-report.md
api-report-*.md
+# new reports
+report.api.md
+report-*.api.md
+
knip-report.md
cli-report.md
plugins/scaffolder-backend/sample-templates
diff --git a/ADOPTERS.md b/ADOPTERS.md
index 3b534052f1..3f9005ecb9 100644
--- a/ADOPTERS.md
+++ b/ADOPTERS.md
@@ -134,7 +134,6 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [SafetyCulture](https://safetyculture.com/) | [@R-cen](https://github.com/R-cen), [@lachlancooper](https://github.com/lachlancooper), [@hkf57](https://github.com/hkf57) | Internal developer portal to provide a centralized place for engineers to see an overview of their team's services and information related to the service from other systems. Initially focused on the software catalog, techdocs and search. |
| [Sana Life Science](https://sanalifescience.com) | [Joe Hillyard](mailto:joe@sanalifescience.com) | API Catalog, Tools Management & Control Hub |
| [Ndustrial](https://ndustrial.io) | [Jonathan Skubic](mailto:jonathan@ndustrial.io) | Software Project Catalog |
-| [TUI Musement](https://www.musement.com/uk/) | [Simone Fumagalli](mailto:simone.fumagalli@musement.com) | We are importing our catalog into it to keep it under control. The next step is start using templates |
| [Kambi AB](https://www.kambi.com) | [Martin Norum](mailto:martin.norum@kambi.com) | We want to kick ass at speed, so we're currently building up a catalog of our existing software, and looking into how Backstage can support us in our journey towards autonomous product teams. Both to improve speed to market and operational awareness. |
| [ANZ](https://www.anz.com.au/personal/) | [Elliot Jackson](mailto:elliot.jackson@anz.com) | Catalog, tech docs and automation |
| [Genie Solutions](https://www.geniesolutionssoftware.com.au) | [Zainab Bagasrawala](mailto:zainabbagasrawala@geniesolutions.com.au) | Developer Portal to track our projects, documentation, observability tools and more |
@@ -275,3 +274,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [DPG Media](https://www.dpgmediagroup.com) | [@benjidotsh](https://github.com/benjidotsh), [@lvstb](https://github.com/lvstb), [@ssliman](https://github.com/ssliman), [@edewel-beep](https://github.com/edewel-beep) | Access to infrastructure, documentation and internal tooling |
| [Baloise](https://www.baloise.ch) | [@dweber019](https://github.com/dweber019), [@mikevader](https://github.com/mikevader) | We are using Backstage as internal developer protal for use cases like software catalog, documentation, infrastructure. |
| [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.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f10116844b..c1a0283f09 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,7 +2,7 @@
Our vision for Backstage is for it to become the trusted standard toolbox (read: UX layer) for the open source infrastructure landscape. Think of it like Kubernetes for developer experience. We realize this is an ambitious goal. We can’t do it alone.
-Therefore we want to create a strong community of contributors -- all working together to create the kind of delightful experience that our developers deserve.
+Therefore, we want to create a strong community of contributors -- all working together to create the kind of delightful experience that our developers deserve.
Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. ❤️
@@ -41,7 +41,7 @@ We encourage you to catch any accessibility issues already in the development ph
## Get Started!
-So...feel ready to jump in? Let's do this. 👏🏻💯
+So... feel ready to jump in? Let's do this. 👏🏻💯
### Cloning the Repository
@@ -103,7 +103,7 @@ If you want to get a better understanding of the layout of the repo now that you
## Coding Guidelines
-All code is formatted with `prettier` using the configuration in the repo. If possible we recommend configuring your editor to format automatically, but you can also use the `yarn prettier --write ` command to format files.
+All code is formatted with `prettier` using the configuration in the repo. If possible, we recommend configuring your editor to format automatically, but you can also use the `yarn prettier --write ` command to format files.
A consistent coding style is included via [EditorConfig](https://editorconfig.org/) with the file [`.editorconfig`](.editorconfig) at the root of the repo. Depending on your editor of choice, it will either support it out of the box or you can [download a plugin](https://editorconfig.org/#download) for the config to be applied.
@@ -184,7 +184,7 @@ Changesets **are** needed for new packages, as that is what triggers the package
### Writing changesets
-Changesets are an important part of the development process. They are used to generate Changelog entries for all changes to the project. Ultimately they are read by the end users to learn about important changes and fixes to the project. Some of these fixes might require manual intervention from users so it's important to write changesets that users understand and can take action on.
+Changesets are an important part of the development process. They are used to generate Changelog entries for all changes to the project. Ultimately, they are read by the end users to learn about important changes and fixes to the project. Some of these fixes might require manual intervention from users so it's important to write changesets that users understand and can take action on.
Here are some important do's and don'ts when writing changesets:
@@ -274,7 +274,7 @@ These changes are **required** to `packages/backend/src/plugins/catalog.ts`
As with other CNCF projects, Backstage has adopted a [Developers Certificate of Origin (DCO)](https://developercertificate.org/). A DCO is a lightweight way for a developer to certify that they wrote or otherwise have the right to submit code or documentation to a project.
-To certify the code you submit to the repository you'll need to add a `Signed-off-by` line to your commits.
+To certify the code you submit to the repository, you'll need to add a `Signed-off-by` line to your commits.
`$ git commit -s -m 'Awesome commit message'`
@@ -330,9 +330,9 @@ There are two ways you can do this:
1. You can run `yarn build:api-reports` from the root of the project and it will go through all of the existing API Reports and update them or create new ones as needed. This may take a while but is generally the best method if you are new to this.
2. You can run `yarn build:api-reports plugins/` from the root and it will update the existing API Report or create a new one.
-> Note: the above commands assume you've run `yarn install` before hand or recently
+> Note: the above commands assume you've run `yarn install` beforehand or recently.
-Each plugin/package has its own API Report which means you might see more then one file updated or created depending on your changes. These changes will then need to be committed as well.
+Each plugin/package has its own API Report which means you might see more than one file updated or created depending on your changes. These changes will then need to be committed as well.
## Submitting a Pull Request
@@ -374,7 +374,7 @@ Once you've submitted a Pull Request (PR) the various bots will come out and do
- checking for commits for their DCO (Developer Certificate of Origin)
- kick of the various CI builds
-Once these have been completed it's just a matter of being patient as the reviewers have time they will begin to review your PR. When the review begins there may be a few layers to this but the general rule is that you need approval from one of the core maintainers and one from the specific area impacted by your PR. You may also have someone from the community review your changes, this can really help speed things up as they may catch some early items making the review for the maintainers simpler. Once you have the two (2) approvals it's ready to be merged, this task is also done by the maintainers.
+Once these steps are completed, it's just a matter of being patient. As the reviewers have time, they will begin reviewing your PR. When the review process begins, there may be a few layers to this, but the general rule is that you need approval from one of the core maintainers and one from the specific area impacted by your PR. You may also have someone from the community review your changes. This can really help speed things up as they may catch some early items making the review for the maintainers simpler. Once you have the two (2) approvals, it's ready to be merged, a task that is also performed by the maintainers.
### Review Tips
diff --git a/README-zh_Hans.md b/README-zh_Hans.md
index 2813ee0793..129c7e7aa4 100644
--- a/README-zh_Hans.md
+++ b/README-zh_Hans.md
@@ -55,7 +55,7 @@ Backstage 的文档包括:
- [Discord 聊天室](https://discord.gg/backstage-687207715902193673) - 获得支持或讨论项目
- [参与贡献 Backstage](https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md) - 如果您想做出贡献,请从这里开始
- [RFCs](https://github.com/backstage/backstage/labels/rfc) - 帮助制定技术方向
-- [FAQ](https://backstage.io/docs/FAQ) - n.: 常问问题
+- [FAQ](https://backstage.io/docs/FAQ) - 常问问题
- [行为准则](CODE_OF_CONDUCT.md) - 这是我们的行事方式
- [采纳者](ADOPTERS.md) - 已经在使用 Backstage 的公司
- [博客](https://backstage.io/blog/) - 公告和更新
diff --git a/README.md b/README.md
index 6c27d01db2..64a7b34b64 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,5 @@
[](https://backstage.io/)
-> [!NOTE]
-> 🏖 From July 1st through 16th, due to maintainers being on summer vacations, expect the project to move a little slower than normal, and support to be limited. Normal service will resume after that! 🏝
-
# [Backstage](https://backstage.io)
English \| [한국어](README-ko_kr.md) \| [中文版](README-zh_Hans.md) \| [Français](README-fr_FR.md)
@@ -66,6 +63,10 @@ To engage with our community, you can use the following resources:
- [Backstage Community Sessions](https://github.com/backstage/community) - Join monthly meetups and explore Backstage community
- Give us a star ⭐️ - If you are using Backstage or think it is an interesting project, we would love a star ❤️
+## Governance
+
+See the [GOVERNANCE.md](https://github.com/backstage/community/blob/main/GOVERNANCE.md) document in the [backstage/community](https://github.com/backstage/community) repository.
+
## License
Copyright 2020-2024 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage
diff --git a/REVIEWING.md b/REVIEWING.md
index c443c15d77..66af880f43 100644
--- a/REVIEWING.md
+++ b/REVIEWING.md
@@ -68,7 +68,7 @@ In general our changeset feedback bot will take care of informing whether a chan
Changes that do NOT need a new changeset:
-- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `api-report.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc.
+- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `report.api.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc.
- When tweaking a change that has not yet been released, you can rely on and potentially modify the existing changeset instead.
- Changes that do not belong to a published packages, either because it's not a package at all, such as `docs/`, or because the package is private, such as `packages/app`.
- Changes that do not end up having an effect on the published package, such as whitespace fixes or code formatting changes. Although it's also fine to have a short changeset for these kind of changes too.
@@ -168,7 +168,7 @@ In this section we will be talking about changed "types", but by that we mean an
#### API Reports
-We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `api-report.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request.
+We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `report.api.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request.
Each API report contains a list of all the exported types of each package. As long as the API report does not have any warnings it will contain the full publicly facing API of the package, meaning you do not need to consider any other changes to the package from the point of view of TypeScript API stability.
diff --git a/SECURITY.md b/SECURITY.md
index 8de1307356..5c6c8106d5 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -59,14 +59,14 @@ function writeTemporaryFile(tmpDir: string, name: string, content: string) {
If the `name` of the file is controlled by the user, they can for example enter `../../../../etc/hosts` as the name of the file. This can lead to a file being written outside the intended directory, which in turn can be used to inject malicious code or other form of attacks.
-The recommended solution to this is to use `resolveSafeChildPath` from `@backstage/backend-common` to resolve the file path instead. It makes sure that the resolved path does not fall outside the provided directory. If you simply want to validate whether a file path is safe, you can use `isChildPath` instead.
+The recommended solution to this is to use `resolveSafeChildPath` from `@backstage/backend-plugin-api` to resolve the file path instead. It makes sure that the resolved path does not fall outside the provided directory. If you simply want to validate whether a file path is safe, you can use `isChildPath` instead.
The insecure example above should instead be written like this:
```ts
// THIS IS GOOD, DO THIS
-import { resolveSafeChildPath } from '@backstage/backend-common';
+import { resolveSafeChildPath } from '@backstage/backend-plugin-api';
import fs from 'fs-extra';
function writeTemporaryFile(tmpDir: string, name: string, content: string) {
diff --git a/beps/0001-notifications-system/README.md b/beps/0001-notifications-system/README.md
index 541e75e555..91c1a81fe1 100644
--- a/beps/0001-notifications-system/README.md
+++ b/beps/0001-notifications-system/README.md
@@ -74,7 +74,7 @@ The `signal` plugin provides the following:
### Signals Plugin
-In the backend the signal plugin implements a general purpose message bus for sending signals from backend plugins to connected users. It relies on the `EventBroker` from the [events plugin](https://github.com/backstage/backstage/blob/master/plugins/events-backend/README.md) for the actual message passing in the backend. In order to support scaled deployments, each signal backend instance has a separate subscription to the event broker so that each instance receives all events. It is then up to each backend instance to filter out events that are not relevant to it. For this reason, signals should be kept lightweight and not contain unnecessary data.
+In the backend the signal plugin implements a general purpose message bus for sending signals from backend plugins to connected users. It relies on the `EventsService` from the [events plugin](https://github.com/backstage/backstage/blob/master/plugins/events-node/README.md) for the actual message passing in the backend. In order to support scaled deployments, each signal backend instance has a separate subscription to the events service so that each instance receives all events. It is then up to each backend instance to filter out events that are not relevant to it. For this reason, signals should be kept lightweight and not contain unnecessary data.
In the frontend the signal plugin has a persistent connection to the signal backend. This is initially implemented as a WebSocket connection, but could in the future also receive fallback mechanisms such as Server Sent Events or long polling. It is important that this connection is authenticated as we will be routing signals to specific users. The exact implementation of the authentication is not part of this proposal, but it should use whatever the outcome of the discussion in issue [#19581](https://github.com/backstage/backstage/issues/19581) is.
@@ -427,22 +427,22 @@ The notification and signal plugins are released as two new plugins in the Backs
For the notification plugin to reach a stable release we much reach the following:
-- A stable notifications payload format.
-- A stable notifications recipient filter format.
-- The event broker must have at least one implementation that supports scaled deployments.
+- [ ] A stable notifications payload format.
+- [ ] A stable notifications recipient filter format.
+- [x] The events service must have at least one implementation that supports scaled deployments. Done in #24916.
For the signal plugin to reach a stable release we much reach the following:
-- A stable signal recipient filter format.
-- A stable signal channel API in the frontend.
+- [ ] A stable signal recipient filter format.
+- [ ] A stable signal channel API in the frontend.
If any changes are required to the frontend framework to facilitate the implementation of notifications or signals, these will be released as experimental alpha features. They will stay in alpha until they are deemed stable enough, which must happen before a stable release of the notifications system.
## Dependencies
-Since the signal plugin relies on the event broker for communication, it is a dependency for the notifications system as a whole. The event broker does not currently implement any transport for scaled deployments, which is a requirement for scaled deployments of the notification system.
+~Since the signal plugin relies on the events service for communication, it is a dependency for the notifications system as a whole. The events service does not currently implement any transport for scaled deployments, which is a requirement for scaled deployments of the notification system.
-Alternatively the notifications can work without the signals, but in this case the notifications are updated only during page refresh.
+Alternatively the notifications can work without the signals, but in this case the notifications are updated only during page refresh.~
## Alternatives
diff --git a/beps/0001-notifications-system/notifications-architecture.drawio.svg b/beps/0001-notifications-system/notifications-architecture.drawio.svg
index 9f8194b499..9c6bb00119 100644
--- a/beps/0001-notifications-system/notifications-architecture.drawio.svg
+++ b/beps/0001-notifications-system/notifications-architecture.drawio.svg
@@ -1,4 +1,4 @@
-
+
@@ -133,13 +133,13 @@
- Event Broker
+ EventsService
- Event Broker
+ EventsService
diff --git a/beps/0002-dynamic-frontend-plugins/README.md b/beps/0002-dynamic-frontend-plugins/README.md
index 34c6e2d435..1007732eec 100644
--- a/beps/0002-dynamic-frontend-plugins/README.md
+++ b/beps/0002-dynamic-frontend-plugins/README.md
@@ -301,7 +301,7 @@ An example of [integration with scalprum](https://github.com/backstage/backstage
**Dynamic Feature configuration**
-The dynamic remote loading can be added directly into the [`createApp`](https://github.com/backstage/backstage/blob/master/packages/frontend-app-api/src/wiring/createApp.tsx#L234) function.
+The dynamic remote loading can be added directly into the [`createApp`](https://backstage.io/docs/reference/frontend-defaults.createapp) function.
The current `feature` type can be expanded with a `DynamicFrontendFeature` type:
@@ -351,7 +351,7 @@ const scalprum = initialize({
});
```
-Because the [`appLoader`](https://github.com/backstage/backstage/blob/master/packages/frontend-app-api/src/wiring/createApp.tsx#L193) is already async, it is a perfect place to load the plugin registry and init the dynamic plugins.
+Because the [`appLoader`](https://backstage.io/docs/reference/frontend-defaults.createapp) is already async, it is a perfect place to load the plugin registry and init the dynamic plugins.
Initializing the dynamic feature is just a case of mapping the `DynamicFrontendFeature` to `FrontendFeature` via Scalprum:
@@ -595,7 +595,7 @@ Singleton "might have to" list:
> NOTE: Can leverage [Generate module sharing map](#generate-module-sharing-map).
-Component libraries are usually large (thousands of svg icons in @mui/icons) and it is inefficient to share them as a whole. **Tree shaking is disabled for shared modules**. That means sharing large packages in multiple versions will result in a bloated JS in browsers.
+Component libraries are usually large (thousands of SVG icons in `@mui/icons`) and it is inefficient to share them as a whole. **Tree shaking is disabled for shared modules**. That means sharing large packages in multiple versions will result in a bloated JS in browsers.
Sharing components like these can be done on module level. Instead of sharing the entire package, share its individual components:
@@ -625,7 +625,7 @@ There is also a conflict with the chunk splitting currently used in the Backstag
#### Webpack chunk optimization
-Custom webpack chunk splitting configuration can be problematic, especially when modifying runtime and vendor chunks. Module federation creates its own chunks. Shared modules that are not set up to be eagerly loaded (using the `eager` configuration) **cannot be included inside the entry script**. With a custom chunk splitting setup, they can potentially be forced into the entry script, causing runtime errors. On the other hand, some critical runtime code that has to be in the entry script, cna be forced out of it. This is particularly problematic for the "shell" application.
+Custom webpack chunk splitting configuration can be problematic, especially when modifying runtime and vendor chunks. Module federation creates its own chunks. Shared modules that are not set up to be eagerly loaded (using the `eager` configuration) **cannot be included inside the entry script**. With a custom chunk splitting setup, they can potentially be forced into the entry script, causing runtime errors. On the other hand, some critical runtime code that has to be in the entry script, can be forced out of it. This is particularly problematic for the "shell" application.
Chunk optimization should be disabled for the initial implementation.
diff --git a/beps/0008-docs-personas-framework-portal/README.md b/beps/0008-docs-personas-framework-portal/README.md
index 07468b7c4a..1ef073a053 100644
--- a/beps/0008-docs-personas-framework-portal/README.md
+++ b/beps/0008-docs-personas-framework-portal/README.md
@@ -3,10 +3,11 @@ title: Improved Backstage Documentation with Personas
status: provisional
authors:
- '@waldirmontoya25'
- - '@aramissennyeyd'
+ - '@aramissennyeydd'
owners:
+ - '@backstage/documentation-maintainers'
project-areas:
- - core
+ - documentation
creation-date: 2024-03-18
---
@@ -23,22 +24,22 @@ creation-date: 2024-03-18
- [Design Details](#design-details)
- [Personas](#personas)
- [User](#user)
- - [Documentation Style](#documentation-style)
- - [Administrator](#administrator)
- - [Documentation Style](#documentation-style-1)
- - [Integrator](#integrator)
- - [Documentation Style](#documentation-style-2)
+ - [Documentation Content](#documentation-content)
+ - [Operator](#operator)
+ - [Documentation Content](#documentation-content-1)
+ - [Builder](#builder)
+ - [Documentation Content](#documentation-content-2)
- [Contributor](#contributor)
- - [Documentation Style](#documentation-style-3)
+ - [Documentation Content](#documentation-content-3)
- [Business Stakeholder](#business-stakeholder)
- - [Documentation Style](#documentation-style-4)
+ - [Documentation Content](#documentation-content-4)
- [Release Plan](#release-plan)
- [Dependencies](#dependencies)
- [Example Table of Contents](#example-table-of-contents)
## Summary
-This BEP proposes restructuring the Backstage documentation to emphasize the dual nature of Backstage as both a framework for building developer portals and a fully functional developer portal out of the box, as demonstrated by the demo site. The documentation will be divided into two main sections: One focusing on the developer portal that users get with the core plugins, and another on the framework that allows integrators and builders to create their own developer portal. The goal is to improve clarity, navigation, and adoption of Backstage by positioning it as both a ready-to-use developer portal and a framework for building custom developer portals.
+This BEP proposes restructuring the Backstage documentation to emphasize the dual nature of Backstage as both a framework for building developer portals and a fully functional developer portal out of the box, as demonstrated by the demo site. The documentation will be divided into two main sections: One focusing on the developer portal that users get with the core plugins, and another on the framework that allows operators and builders to create their own developer portal. The goal is to improve clarity, navigation, and adoption of Backstage by positioning it as both a ready-to-use developer portal and a framework for building custom developer portals.
## Motivation
@@ -48,8 +49,8 @@ The current Backstage documentation has been reported to be difficult to navigat
- Divide the documentation into two section: Framework and Developer Portal
- Define the personas Backstage is targeting
-- Structure the documentation to cater the different personas
-- Move the existing content to the appropriate section
+- Provide complete, clear and easy-to-find instructions for tasks required of personas
+- Move the existing content to the appropriate section.
### Non-Goals
@@ -63,14 +64,14 @@ The proposed restructuring of the Backstage documentation revolves around two co
1. Positioning Backstage as both a framework to build developer portals and a developer portal itself, and splitting the documentation into two main sections:
- Developer Portal: Focusing on the features, configuration, and usage of the developer portal that users get out of the box with the core plugins.
- - Framework: Covering the aspects of Backstage as a framework, including guides for integrators and builders who want to create their own developer portal using Backstage.
+ - Framework: Covering the aspects of Backstage as a framework, including guides for operators and builders who want to create their own developer portal using Backstage.
2. Defining the personas participating in Backstage adoption journeys to improve documentation navigation. The identified personas are:
- **End User**: A person who uses Backstage to find information, use plugins, and consume the developer portal.
- - **Administrator/Operator**: A person who configures, secures, and deploys the developer portal, manages plugins, and oversees the general administration of the developer portal.
- - **Integrator/Builder**: A person who builds plugins, customizes the code and design, and creates custom-built developer portals based on the Backstage framework. This includes developers and designers and anyone adding new functionality to their own Backstage instance.
- - **Product Manager/Business stakeholders**: A person who defines the strategy for adopting Backstage, identifies use cases, communicates the value proposition for adopting Backstage and connects the developer portal to the business strategy.
+ - **Operator**: A person who configures, secures, and deploys the developer portal, manages plugins, and oversees the general administration of the developer portal.
+ - **Builder**: A person who builds plugins, customizes the code and design, and creates custom-built developer portals based on the Backstage framework. This includes developers and designers and anyone adding new functionality to their own Backstage instance.
+ - **Business Stakeholder**: A person who defines the strategy for adopting Backstage, identifies use cases, communicates the value proposition for adopting Backstage and connects the developer portal to the business strategy.
- **Contributor**: A person who contributes to the Backstage upstream ecosystem.
The adoption strategy would be as follows:
@@ -90,6 +91,7 @@ The benefits of restructuring the documentation according to these ideas include
- The Docs section of the microsite will be divided into two top-level sections: Framework and Developer Portal.
- The structure of the Table of Contents will align with the outline proposed in https://github.com/backstage/backstage/issues/21946.
+- The developer portal documentation will be the primary entry point. Users should hit this site when navigating to backstage.io/docs. The framework documentation should be hosted similarly, but will be introduced organically in the developer portal documentation when referencing customization and other builder facing tasks.
### Personas
@@ -97,7 +99,7 @@ The benefits of restructuring the documentation according to these ideas include
Users navigate the developer portal to access tools, information, and plugins essential for their daily tasks. They rely on Backstage to effortlessly find resources, utilize integrations, and connect with other tools and services within their ecosystem. Their interaction is predominantly with the frontend of the portal, where ease of use, accessibility, and relevant content discovery are critical.
-##### Documentation Style
+##### Documentation Content
Documentation for this persona should be about usability of the portal once it is running. For example:
@@ -112,13 +114,13 @@ Documentation for this persona should be about usability of the portal once it i
- Using available plugins
- Step by step tutorials
-#### Administrator
+#### Operator
-Administrators are responsible for the behind-the-scenes technical setup and maintenance of the Backstage portal. This includes deploying the portal, configuring plugins, managing user access, and ensuring the security and performance of the system. They interact with both the frontend and backend, often using command-line tools, administrative dashboards, and configuration files to perform their tasks.
+Operators are responsible for the behind-the-scenes technical setup and maintenance of the Backstage portal. This includes deploying the portal, configuring plugins, managing user access, and ensuring the security and performance of the system. They interact with both the frontend and backend, often using command-line tools, administrative dashboards, and configuration files to perform their tasks.
-##### Documentation Style
+##### Documentation Content
-Documentation written for this persona should be DevOps technical, assuming a strong DevOps background. The goal with administrator documentation is to give administrators a strong understanding of how to deploy and manage a Backstage Developer Portal, best practices. For example:
+Documentation written for this persona should be DevOps technical, assuming a strong DevOps background. The goal is to give operators a strong understanding of how to deploy and manage a Backstage Developer Portal, best practices. For example:
- Installing and upgrading
- Configuring
@@ -126,17 +128,17 @@ Documentation written for this persona should be DevOps technical, assuming a st
- Plugins
- Ingesting data (users/groups/components, etc)
- Installing plugins
-- Implement Git Flows for the Developer portal
+- Implement Git Flows for the Developer Portal
- Creating Pipelines for Docs generation
- Troubleshooting
-#### Integrator
+#### Builder
-Integrators actively work on extending and customizing Backstage. This includes developing new plugins, customizing the UI/UX, and integrating external services or data sources. Their work is deeply technical, involving coding, and engaging with the Backstage community for support and collaboration. They need a deep understanding of the Backstage architecture and APIs, working closely with both the framework's backend and frontend aspects.
+Builders actively work on extending and customizing Backstage. This includes developing new plugins, customizing the UI/UX, and integrating external services or data sources. Their work is deeply technical, involving coding, and engaging with the Backstage community for support and collaboration. They need a deep understanding of the Backstage architecture and APIs, working closely with both the framework's backend and frontend aspects.
-##### Documentation Style
+##### Documentation Content
-Documentation written for this persona should be software technical, assuming a strong software background. While we can assume an overall technical knowledge, where possible we should link out to useful guides for the technologies we use, ex: Node.js, express.js, React, etc. The goal with documentation written for integrators is to give them a strong understanding of how to use the Backstage framework to build/evolve a company's Backstage Developer Portal, orient them to get support from the open source community, and prepare them for continuing to deliver value for their Backstage Developer Portal. For example:
+Documentation written for this persona should be software technical, assuming a strong software background. While we can assume an overall technical knowledge, where possible we should link out to useful guides for the technologies we use, ex: Node.js, express.js, React, etc. The goal with documentation written for this persona is to give them a strong understanding of how to use the Backstage framework to build/evolve a company's Backstage Developer Portal, orient them to get support from the open source community, and prepare them for continuing to deliver value for their Backstage Developer Portal. For example:
- API references
- Frontend and Backend systems
@@ -151,7 +153,9 @@ Documentation written for this persona should be software technical, assuming a
Contributors are involved in the development of the Backstage framework itself. They contribute to the core codebase, develop new features, fix bugs, create documentation and maintain the overall health of the project. They are deeply involved in the open-source community, collaborating with maintainers and other contributors to improve the framework and its ecosystem.
-##### Documentation Style
+Documentation for the contributor role should _not_ exist on the docs site. It should exist solely in the Github repositories (backstage/backstage, backstage/community-plugins). It can be linked to from the site, but should not have dedicated guides outside of the Github repositories.
+
+##### Documentation Content
The goal with documentation written for contributors is to give them a strong understanding of how to contribute to the Backstage framework, orient them to get support from the open source community, and prepare them for continuing to deliver value for the Backstage framework. For example:
@@ -164,7 +168,7 @@ The goal with documentation written for contributors is to give them a strong un
Business stakeholders use Backstage to align technical capabilities with business goals, monitoring how features and plugins support operational efficiency, developer satisfaction, and strategic objectives. They are involved in defining the strategy and measuring the impact of the developer portal on the organization. They need to navigate through dashboards, reports, and analytics within Backstage to gather insights and make informed decisions.
-##### Documentation Style
+##### Documentation Content
Documentation written for this persona should be strategic, assuming a strong background in business development and strategy. The goal for business documentation is to give a strong understanding of what Backstage Developer Portal can do for their company, how to deliver value quickly and continuously and guides for pitching or driving Backstage adoption. For example:
@@ -175,9 +179,10 @@ Documentation written for this persona should be strategic, assuming a strong ba
## Release Plan
-- Release the BEP by 03/24/2024.
-- Discuss the changes with the community and gather feedback by 04/24/2024.
-- Implement the changes by 04/30/2024.
+- [x] Release the BEP (04/21/2024).
+- [ ] Discuss the changes with the community and gather feedback.
+- [ ] Implement the table of contents changes.
+- [ ] Create issues to track reviewing and rewriting existing documentation into these new personas.
## Dependencies
@@ -185,20 +190,87 @@ None
## Example Table of Contents
-- Overview
- - "The overview should introduce users to the concept of Backstage, what an IDP is, how to deliver value, why you should care about DevEx, etc."
- - What is Backstage?
- - Roadmap
- - Vision
- - Release and Versioning Policy
- - Backstage Threat Model
- - Logo assets
- - Support and community
+- Developer Portal
+ - Overview
+ - What is Backstage?
+ - Roadmap
+ - Vision
+ - User personas and use cases
+ - How this documentation is organized
+ - Framework
+ - Developer portal
+ - Release and Versioning Policy
+ - Backstage Threat Model
+ - Logo assets
+ - Support and community
+ - Architecture Overview
+ - Getting Started
+ - Operator Guides
+ - Developer Portal
+ - "How do I deploy, monitor, configure and verify my Backstage Developer Portal?"
+ - Installing and Configuring
+ - Database
+ - Authentication
+ - Installing plugins
+ - Customize the design
+ - Securing
+ - Deploying in Production
+ - Integrating with other systems
+ - Managing
+ - Monitoring
+ - Troubleshooting
+ - Upgrading
+ - Keeping backstage up to date
+ - Customizing
+ - Core Plugins
+ - "How do I install and configure Backstage Developer Portal with plugins."
+ - Home Page
+ - Installing and Configuring
+ - Software Catalog
+ - Overview
+ - The life of an Entity
+ - Catalog Configuration
+ - System Model
+ - YAML file format
+ - Entity Reference
+ - Well Known annotations
+ - Well known relations
+ - Well known statuses
+ - Creating the catalog graph
+ - Software Templates
+ - Overview
+ - Configuring
+ - Adding a new template
+ - Writing a template
+ - Built in actions
+ - TechDocs
+ - Overview
+ - Getting Started
+ - Architecture
+ - Installing and configuring
+ - Using Cloud Storage for TechDocs generated files
+ - Configuring CI/CD to generate and publish TechDocs sites
+ - TechDocs CLI
+ - Troubleshooting
+ - Kubernetes
+ - Installing and Configuring
+ - Authentication
+ - Troubleshooting
+ - Search
+ - Business Stakeholder Guides
+ - "How do I present Backstage to leadership, what are the benefits, why should I care, etc."
+ - Strategies for adopting
+ - Use cases
+ - User Guides
+ - "How do I use the default OSS Backstage"
+ - Logging in
+ - Registering a component
+ - Creating a new component
+ - Reference
- Framework
- Architecture Overview
- - "The arch overview should explain how the framework is structured, where plugins and instances fit in and how to understand the current design of Backstage."
- Getting Started
- - Integrator/Builder Guides
+ - Builder Guides
- Local Development
- "Prepare users for how to develop locally, debug problems, run tests, etc."
- CLI
@@ -280,68 +352,3 @@ None
- "How to get started contributing to OSS."
- Contributing to Backstage
- Reference
-- Developer Portal
- - Architecture Overview
- - Getting Started
- - Administrator Guides
- - Developer Portal
- - "How do I deploy, monitor, configure and verify my Backstage Developer Portal?"
- - Installing and Configuring
- - Database
- - Authentication
- - Installing plugins
- - Customize the design
- - Securing
- - Deploying in Production
- - Integrating with other systems
- - Managing
- - Monitoring
- - Troubleshooting
- - Upgrading
- - Keeping backstage up to date
- - Customizing
- - Core Plugins
- - "How do I install and configure Backstage Developer Portal with plugins."
- - Home Page
- - Installing and Configuring
- - Software Catalog
- - Overview
- - The life of an Entity
- - Catalog Configuration
- - System Model
- - YAML file format
- - Entity Reference
- - Well Known annotations
- - Well known relations
- - Well known statuses
- - Creating the catalog graph
- - Software Templates
- - Overview
- - Configuring
- - Adding a new template
- - Writing a template
- - Built in actions
- - TechDocs
- - Overview
- - Getting Started
- - Architecture
- - Installing and configuring
- - Using Cloud Storage for TechDocs generated files
- - Configuring CI/CD to generate and publish TechDocs sites
- - TechDocs CLI
- - Troubleshooting
- - Kubernetes
- - Installing and Configuring
- - Authentication
- - Troubleshooting
- - Search
- - Product Manager Guides
- - "How do I present Backstage to leadership, what are the benefits, why should I care, etc."
- - Strategies for adopting
- - Use cases
- - User Guides
- - "How do I use the default OSS Backstage"
- - Logging in
- - Registering a component
- - Creating a new component
- - Reference
diff --git a/beps/0010-scaffolder-templating-in-parameters/README.md b/beps/0010-scaffolder-templating-in-parameters/README.md
new file mode 100644
index 0000000000..354dc66ea9
--- /dev/null
+++ b/beps/0010-scaffolder-templating-in-parameters/README.md
@@ -0,0 +1,223 @@
+---
+title: Supporting templating syntax in `parameters` schema
+status: provisional
+authors:
+ - '@benjdlambert'
+owners:
+ - '@benjdlambert'
+ - '@backstage/scaffolder-maintainers'
+project-areas:
+ - scaffolder
+creation-date: 2024-03-26
+---
+
+
+
+# BEP: Supporting templating syntax in `parameters` schema
+
+
+
+[**Discussion Issue**](https://github.com/backstage/backstage/issues/16275)
+
+- [Summary](#summary)
+- [Motivation](#motivation)
+ - [Goals](#goals)
+ - [Non-Goals](#non-goals)
+- [Proposal](#proposal)
+- [Design Details](#design-details)
+- [Release Plan](#release-plan)
+- [Dependencies](#dependencies)
+- [Alternatives](#alternatives)
+
+## Summary
+
+
+
+This BEP proposes to add support for templating syntax in the `parameters` schema of a scaffolder template.
+This will allow users to define properties in the JSON Schema which are templated from current values that have been collected from the user already.
+This can be useful when you want to use a value that has already been collected as a default value in another field.
+
+For example:
+
+```yaml
+apiVersion: scaffolder.backstage.io/v1beta3
+kind: Template
+metadata:
+ name: my-template
+spec:
+ parameters:
+ - title: Some input
+ description: Get some info from the user
+ properties:
+ name:
+ type: string
+ default: Test
+ description:
+ type: string
+ default: ${{ parameters.name or "unknown" }}-description
+```
+
+## Motivation
+
+
+
+Inclusive of the initial RFC there's been a swarm of issues that are requesting this feature, and we want to align on the implementation and design of this feature.
+
+See the following:
+
+- https://github.com/backstage/backstage/issues/16275
+- https://github.com/backstage/backstage/pull/23283
+- https://github.com/backstage/backstage/issues/19597
+- https://github.com/backstage/backstage/issues/20533
+- https://github.com/backstage/backstage/pull/17746
+
+There's some ideas for introducing a templating syntax for both templating into the `parameters` schema, and also being able to pass through some templating strings to underlying field extensions that can use those templating strings.
+We want to align here so that we're not going to have those conflict or compete, and create a standard for how to achieve templating in both circumstances.
+
+### Goals
+
+
+
+- This BEP will settle the implementation for the templating of fields into the JSON Schema in the `parameters` section in the scaffolder templates.
+- This BEP will settle how to pass through templating strings to underlying field extensions in a non-conflicting way.
+
+### Non-Goals
+
+
+
+## Proposal
+
+The proposal is to be able to decorate the template schema server side with a context and use that to drive the form rendering client side.
+
+We can extend the `/parameter-schema` endpoint to accept a `formData` context query parameter which will be a JSON object of the current `formData` state. This in turn allows the scaffolder frontend to repeatedly call the endpoint to get the updated rendered parameter schema. We'll need to turn the endpoint into a `POST` endpoint to accept the form data, but will retain the `GET` version for backwards compatibility.
+
+## Design Details
+
+### Example implementation of the `/parameter-schema` endpoint
+
+```diff
+export interface ScaffolderApi {
+ getTemplateParameterSchema(
+ templateRef: string,
++ formData?: JsonObject,
+ ): Promise;
+}
+```
+
+```diff
+ router
+- .get(
++ .post(
+ '/v2/templates/:namespace/:kind/:name/parameter-schema',
+ async (req, res) => {
+ const credentials = await httpAuth.credentials(req);
+ const { token } = await auth.getPluginRequestToken({
+ onBehalfOf: credentials,
+ targetPluginId: 'catalog',
+ });
+ const template = await authorizeTemplate(
+ req.params,
+ token,
+ credentials,
+ );
+
+ const parameters = [template.spec.parameters ?? []].flat();
++ const secureTemplater = await SecureTemplater.loadRenderer({
++ templateFilters: {
++ ...createDefaultFilters({ integrations }),
++ ...additionalTemplateFilters,
++ },
++ templateGlobals: additionalTemplateGlobals,
++ });
++
++ const templatedParameters = parameters.map(parameter =>
++ renderTemplateString(
++ parameter,
++ {
++ parameters: req.body.formData,
++ },
++ secureTemplater,
++ logger,
++ ),
++ );
+```
+
+You can see a quick implementation of this in this [branch](https://github.com/backstage/backstage/compare/master...blam/templating-in-parameters)
+
+### Workaround for the `default` field
+
+There's a slight issue with the implementation of the `react-jsonschema-form`, which makes things like live updating on things like the `default` field slightly more difficult.
+Currently, on first render, the default value is populated and then stored in the `formData` object or the current state, and the default value is never re-evaluated again at a later stage.
+
+This means that if end users are wanting to set default values with `${{ parameters.myOtherProperty }}`, then they would need to ensure that they are on different steps in the form
+as the form would need to be re-rendered, and for performance reasons, we don't want to re-render the form on every `formData` update.
+
+We could fix this, by implementing custom logic for when the `parameter-schema` is updated, if the updated field is in a `default: *` field, then we replace the previous value with the new value in the `formData` automatically.
+This is a pretty ugly workaround, but maybe the only option we have. Also at this point, pretty unsure if this affects any other parts of the `JSONSchema`, and we would also have to implement it for those fields if they exist.
+
+### Templated error messages
+
+Templating for `errorMessages` has been solved by using the `ajv-errors` library https://github.com/backstage/backstage/pull/25624, you can see more about [`backrefs` and pointers here](https://ajv.js.org/packages/ajv-errors.html). Any other template strings that will be passed through the underlying components and to be left untemplated should be encapsulated with options instead of passing through raw strings. The below example illustrates an `entityAndName` format, which under the hood, might do something like `${{ parameters.entity }} - ${{ parameters.name }}`, but this implementation never leaks out to the templating language.
+
+```yaml
+parameters:
+ properties:
+ ...
+ description:
+ type: string
+ default: Test-description
+ ui:field: CustomDisplayField
+ ui:options:
+ format: entityAndName
+```
+
+## Release Plan
+
+
+
+This change is backwards compatible, and can be released in a minor release. There's no breaking changes to worry about here.
+
+## Dependencies
+
+
+
+## Alternatives
+
+
+
+### Templating client side
+
+- This could lead to confusion as `filters` such as `parseRepoUrl` and `pick` and any custom filters which you define in the backend would not be available in the client side.
+
+- Also with the limitations of the `default` value being updated only on first render and never re-evaluated, there's no performance benefit of doing things client side anymore.
+
+### Accept limitation of the `default` field
+
+Rather than using a workaround to support re-evaluating the `default` field, we could instead accept it as a limitation, and document it as such.
+
+This is not desirable, as it is likely a very common use-case to want to template the `default` field, leading to a poor template creation experience.
diff --git a/beps/0011-event-auditor/README.md b/beps/0011-event-auditor/README.md
new file mode 100644
index 0000000000..44006599eb
--- /dev/null
+++ b/beps/0011-event-auditor/README.md
@@ -0,0 +1,187 @@
+---
+title: Event Auditor
+status: provisional
+authors:
+ - '@schultzp2020'
+owners:
+project-areas:
+ - core
+creation-date: 2024-06-04
+---
+
+# BEP: Event Auditor
+
+[**Discussion Issue**](https://github.com/backstage/backstage/issues/23950)
+
+- [BEP: Event Auditor](#bep-event-auditor)
+ - [Summary](#summary)
+ - [Motivation](#motivation)
+ - [Goals](#goals)
+ - [Non-Goals](#non-goals)
+ - [Proposal](#proposal)
+ - [Design Details](#design-details)
+ - [Data Model for Audit Events](#data-model-for-audit-events)
+ - [Actor Details Interface](#actor-details-interface)
+ - [Audit Request/Response Interfaces](#audit-requestresponse-interfaces)
+ - [Audit Event Status Interfaces](#audit-event-status-interfaces)
+ - [EventAuditor Interface](#eventauditor-interface)
+ - [Release Plan](#release-plan)
+ - [Dependencies](#dependencies)
+ - [Alternatives](#alternatives)
+
+## Summary
+
+This feature introduces a dedicated system for recording critical security-related actions and events within Backstage. By maintaining a distinct audit event stream, organizations benefit from enhanced security, improved regulatory compliance, efficient incident response, and ensured data integrity.
+
+## Motivation
+
+- Strengthen security by tracking user authentication, authorization, data access, and configuration changes.
+- Facilitate adherence to regulatory requirements through logging security-sensitive operations.
+- Enable efficient forensic analysis and investigation of security incidents.
+- Uphold the integrity of critical audit data by implementing robust access controls and tamper-proof measures.
+
+### Goals
+
+- Develop a backend service for the audit event stream to record security-critical events.
+- Ensure compliance with regulatory requirements through detailed audit event logging.
+ - Refer to [NIST: Audit and Accountability](https://csrc.nist.gov/projects/cprt/catalog#/cprt/framework/version/SP_800_53_5_1_1/home?element=AU)
+ - Refer to [NIST: Non-Repudiation](https://csrc.nist.gov/projects/cprt/catalog#/cprt/framework/version/SP_800_53_5_1_1/home?element=AU-10)
+- Establish a standardized data format for audit events.
+ - Refer to [NIST: Content of Audit Records](https://csrc.nist.gov/projects/cprt/catalog#/cprt/framework/version/SP_800_53_5_1_1/home?element=AU-03)
+- Provide access to the transport layer for customizable output options.
+
+### Non-Goals
+
+- Implementing mechanisms for event storage, analysis, or visualization.
+- Addressing security aspects of event storage and access control beyond initial separation from regular events.
+
+Both of these non-goals can be implemented as separate plugins.
+
+## Proposal
+
+The proposal introduces a crucial change to implement a dedicated audit event stream in Backstage. We recommend creating a new backend service using Winston to establish a distinct channel specifically for audit events. This service would act as a wrapper around Winston, providing methods with strict interfaces to ensure uniformity across audit events throughout the Backstage application. By separating the configuration, we can clearly distinguish between regular application events and critical security events. The event format would include mandatory fields relevant to regulatory compliance and security investigations, such as actor, IP address, timestamp, and event details. This standardized format would streamline the analysis and investigation of security-related events.
+
+Overall, this approach offers several benefits. Separating the configuration allows for the clear distinction of security-critical events, enhancing monitoring and analysis. The standardized data format within the service ensures consistency and facilitates compliance with regulations. Finally, the service methods simplify the process of logging audit events.
+
+## Design Details
+
+### Data Model for Audit Events
+
+To ensure consistency and facilitate regulatory compliance, the proposal suggests creating a shared package that defines a data model for audit events. This model consists of several key components.
+
+#### Actor Details Interface
+
+This interface defines the information related to the actor who triggered the logged event. It includes fields like actor ID, IP address, hostname, and user agent.
+
+```ts
+export type ActorDetails = {
+ actorId?: string;
+ ip?: string;
+ hostname?: string;
+ userAgent?: string;
+};
+```
+
+#### Audit Request/Response Interfaces
+
+These interfaces define the structure of request and response data that might be included in the audit event. It's important to note that these interfaces exclude sensitive information like tokens from headers or other irrelevant details to avoid security risks.
+
+```ts
+export type AuditRequest = {
+ url: string;
+ method: string;
+};
+
+export type AuditResponse = {
+ status: number;
+};
+```
+
+#### Audit Event Status Interfaces
+
+These interfaces define the possible statuses for an audit event entry. There are three options:
+
+```ts
+/**
+ * Indicates the event was successful.
+ */
+export type AuditEventSuccessStatus = { status: 'succeeded' };
+
+/**
+ * Indicates the event failed and includes details about the encountered errors.
+ */
+export type AuditEventFailureStatus = {
+ status: 'failed';
+ errors: E[];
+};
+
+export type AuditEventStatus =
+ | AuditEventSuccessStatus
+ | AuditEventFailureStatus
+ | undefined;
+```
+
+#### EventAuditor Interface
+
+This interface defines the functionalities of an `EventAuditor` class. This class provides methods for:
+
+- Extracting the actor ID from an Express request (if available).
+- Creating detailed audit event information based on provided options.
+- Logging an audit event with a specific level (info, debug, warn, or error).
+
+```ts
+/**
+ * Common fields of an audit event.
+ *
+ * @public
+ */
+export type AuditEventOptions = AuditEventStatus & {
+ eventName: string;
+ message: string;
+ stage: string;
+ level?: 'info' | 'debug' | 'warn' | 'error';
+ metadata?: JsonValue;
+ response?: AuditResponse;
+ request?: Request;
+} & ({ actorId: string } | { credentials: BackstageCredentials } | undefined);
+
+export type AuditEvent = {
+ actor: ActorDetails;
+ eventName: string;
+ stage: string;
+ isAuditLog: true;
+ request?: AuditRequest;
+ response?: AuditResponse;
+} & AuditLogStatus;
+
+export interface EventAuditor {
+ /**
+ * Processes an express request and obtains the actorId from it. Returns undefined if actorId is not obtainable.
+ *
+ * @public
+ */
+ getActorId(request?: Request): Promise;
+
+ /**
+ * Generates an Audit Event and logs it at the level passed by the user.
+ * Supports `info`, `debug`, `warn` or `error` level. Defaults to `info` if no level is passed.
+ *
+ * Secrets in the metadata field and request body, params and query field should be redacted by the user before passing in the request object
+ * @public
+ */
+ auditEvent(options: AuditEventOptions): Promise;
+}
+```
+
+## Release Plan
+
+The release plan involves initially creating a shared audit event package. Following this, the audit event will be implemented in core packages and other plugins. The first targets should be high-priority areas, such as the scaffolder and catalog systems. Since adding the audit event will not disrupt existing functionality, the release plan is simplified.
+
+## Dependencies
+
+- `@backstage/types`
+-
+
+## Alternatives
+
+N/A
diff --git a/contrib/docker/frontend-with-nginx/Dockerfile.dockerbuild b/contrib/docker/frontend-with-nginx/Dockerfile.dockerbuild
index 053b4fb492..fa8e42482b 100644
--- a/contrib/docker/frontend-with-nginx/Dockerfile.dockerbuild
+++ b/contrib/docker/frontend-with-nginx/Dockerfile.dockerbuild
@@ -55,4 +55,4 @@ COPY docker/default.conf.template /etc/nginx/templates/default.conf.template
COPY docker/inject-config.sh /docker-entrypoint.d/40-inject-config.sh
-ENV PORT 80
+ENV PORT=80
diff --git a/contrib/docker/frontend-with-nginx/Dockerfile.hostbuild b/contrib/docker/frontend-with-nginx/Dockerfile.hostbuild
index f0fa4a034b..b07d02c0c8 100644
--- a/contrib/docker/frontend-with-nginx/Dockerfile.hostbuild
+++ b/contrib/docker/frontend-with-nginx/Dockerfile.hostbuild
@@ -36,4 +36,4 @@ COPY docker/default.conf.template /etc/nginx/templates/default.conf.template
COPY docker/inject-config.sh /docker-entrypoint.d/40-inject-config.sh
-ENV PORT 80
+ENV PORT=80
diff --git a/contrib/docker/minimal-hardened-image/Dockerfile b/contrib/docker/minimal-hardened-image/Dockerfile
index 8ee6a3d206..b9435aa8af 100644
--- a/contrib/docker/minimal-hardened-image/Dockerfile
+++ b/contrib/docker/minimal-hardened-image/Dockerfile
@@ -9,53 +9,79 @@
#
# Once the commands have been run, you can build the image using `yarn docker-build`
-FROM cgr.dev/chainguard/wolfi-base:latest
+# syntax = docker/dockerfile:1.4
-ENV NODE_VERSION 18=~18.19
-ENV PYTHON_VERSION 3.12=~3.12
+# Build Python environment in a separate builder stage
+FROM cgr.dev/chainguard/python:latest-dev as python-builder
-RUN apk add nodejs-$NODE_VERSION yarn
+ENV PATH=/venv/bin:$PATH
-# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
-# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
-# Additionally, we install dependencies for `techdocs.generator.runIn: local`.
-# https://backstage.io/docs/features/techdocs/getting-started#disabling-docker-in-docker-situation-optional
-RUN --mount=type=cache,target=/var/cache/apk,sharing=locked \
- --mount=type=cache,target=/var/lib/apk,sharing=locked \
+RUN --mount=type=cache,target=/home/nonroot/.cache/pip,uid=65532,gid=65532 \
+ python3 -m venv /home/nonroot/venv && \
+ /home/nonroot/venv/bin/pip install mkdocs-techdocs-core==1.3.3
+
+# Build Node environment in a separate builder stage
+FROM cgr.dev/chainguard/wolfi-base:latest as node-builder
+
+ENV NODE_VERSION="20=~20.11"
+ENV NODE_ENV=production
+
+RUN --mount=type=cache,target=/var/cache/apk,sharing=locked,uid=65532,gid=65532 \
+ --mount=type=cache,target=/var/lib/apk,sharing=locked,uid=65532,gid=65532 \
apk update && \
- apk add sqlite-dev python-$PYTHON_VERSION py3-pip python-3-dev py3-setuptools build-base gcc libffi-dev glibc-dev openssl-dev brotli-dev c-ares-dev nghttp2-dev icu-dev zlib-dev gcc-12 libuv-dev && \
- yarn config set python /usr/bin/python3
+ apk add nodejs-$NODE_VERSION yarn \
+ # Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
+ openssl-dev brotli-dev c-ares-dev nghttp2-dev icu-dev zlib-dev gcc-12 libuv-dev build-base
-# Set up a virtual environment for mkdocs-techdocs-core.
-ENV VIRTUAL_ENV=/opt/venv
-RUN python3 -m venv $VIRTUAL_ENV
-ENV PATH="$VIRTUAL_ENV/bin:$PATH"
-
-RUN pip3 install mkdocs-techdocs-core==1.3.3
-
-# From here on we use the least-privileged `node` user to run the backend.
WORKDIR /app
-RUN chown nonroot:nonroot /app
+RUN chown -R nonroot:nonroot /app
+
+RUN mkdir -p /home/nonroot/.yarn/berry && chown -R 65532:65532 /home/nonroot/.yarn/berry
+
USER nonroot
-# This switches many Node.js dependencies to production mode.
-ENV NODE_ENV production
+COPY --chown=65532:65532 .yarn ./.yarn
+COPY --chown=65532:65532 .yarnrc.yml ./
-# Copy over Yarn 3 configuration, release, and plugins
-COPY --chown=nonroot:nonroot .yarn ./.yarn
-COPY --chown=nonroot:nonroot .yarnrc.yml ./
-
-# Copy repo skeleton first, to avoid unnecessary docker cache invalidation.
-# The skeleton contains the package.json of each package in the monorepo,
-# and along with yarn.lock and the root package.json, that's enough to run yarn install.
-COPY --chown=nonroot:nonroot yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
+COPY --chown=65532:65532 yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
-RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,sharing=locked,uid=1000,gid=1000 \
- yarn workspaces focus --all --production
+RUN --mount=type=cache,target=/home/nonroot/.yarn/berry/cache,sharing=locked,uid=65532,gid=65532 \
+ yarn workspaces focus --all --production && yarn cache clean --all
-# Then copy the rest of the backend bundle, along with any other files we might want.
-COPY --chown=nonroot:nonroot packages/backend/dist/bundle.tar.gz app-config*.yaml ./
-RUN tar xzf bundle.tar.gz && rm bundle.tar.gz
+# Final stage to build the application image
+FROM cgr.dev/chainguard/wolfi-base:latest
+ENV PYTHON_VERSION="3.12=~3.12"
+ENV NODE_VERSION="20=~20.14"
+ENV NODE_ENV=production
+
+RUN --mount=type=cache,target=/var/cache/apk,sharing=locked,uid=65532,gid=65532 \
+ --mount=type=cache,target=/var/lib/apk,sharing=locked,uid=65532,gid=65532 \
+ apk update && \
+ apk add \
+ # add node for backstage
+ nodejs-$NODE_VERSION \
+ # add python for backstage techdocs
+ python-$PYTHON_VERSION \
+ # add tini for init process
+ tini
+
+WORKDIR /app
+
+COPY package.json app-config.yaml ./
+ADD packages/backend/dist/skeleton.tar.gz packages/backend/dist/bundle.tar.gz ./
+
+RUN chown -R 65532:65532 /app
+RUN chown -R 65532:65532 /tmp
+USER 65532:65532
+
+COPY --from=node-builder --chown=65532:65532 /app/node_modules ./node_modules
+COPY --from=python-builder --chown=65532:65532 /home/nonroot/venv /home/nonroot/venv
+ENV PATH=/home/nonroot/venv/bin:$PATH
+
+ENV NODE_OPTIONS="--no-node-snapshot"
+ENV GIT_PYTHON_REFRESH="quiet"
+
+ENTRYPOINT ["tini", "--"]
CMD ["node", "packages/backend", "--config", "app-config.yaml"]
diff --git a/contrib/docker/minimal-hardened-image/README.md b/contrib/docker/minimal-hardened-image/README.md
index 62045a4ded..191c77986c 100644
--- a/contrib/docker/minimal-hardened-image/README.md
+++ b/contrib/docker/minimal-hardened-image/README.md
@@ -4,6 +4,19 @@ DockerHub images in general did not seem ideal for Backstage as the number of vu
The `Dockerfile` in this directory uses a [wolfi-base](https://github.com/wolfi-dev) image from Chainguard Images. This improves the security of the application and reduces false positives in scanners.
+## Steps taken
+
+When converting, I utilized the upstream Dockerfile as a starting point.
+
+- Multi-stage build - The Dockerfile has been split up into a multistage build which reduces the files, packages, executables, and directories in the final image.
+ - Size savings = ~900mb
+ - Reduced attack surface
+- Base Image - Swap to [wolfi-base](https://github.com/wolfi-dev) image from Chainguard Images
+ - Vulnerability Savings = ~239 at the time of updating this README
+- Entrypoint - Swap from `node` to `tini` as entrypoint to ensure that the default signal handlers work and zombie processes are handled properly
+- Use `ADD` instead of `COPY` in dockerfile to reduce copied compressed files
+ - When a `rm` is used to remove a compressed file it still makes its way into the final image. Using `ADD` is safe with local files.
+
## Pinning Digest
To reduce maintenance, the digest of the image has been removed from the `./Dockerfile` file. A complete example with the digest would be `cgr.dev/chainguard/wolfi-base:latest@sha256:3d6dece13cdb5546cd03b20e14f9af354bc1a56ab5a7b47dca3e6c1557211fcf` and it is suggested to update the `FROM` line in the `Dockerfile` to use a digest.
diff --git a/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md b/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md
index deef356d84..3aab9261c9 100644
--- a/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md
+++ b/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md
@@ -111,3 +111,7 @@ The `proxy-agent` package can be used as an alternative to `global-agent` (do no
```
4. Start the backend with `yarn start`
+
+## Backstage CLI
+
+The Backstage CLI [versions:bump](https://backstage.io/docs/tooling/cli/commands#versionsbump) command also supports proxies via `global-agent` environment variable configuration. See the [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated/#proxy) docs for more information.
diff --git a/contrib/docs/tutorials/prometheus-metrics.md b/contrib/docs/tutorials/prometheus-metrics.md
index fb4366c7f7..0db97c649e 100644
--- a/contrib/docs/tutorials/prometheus-metrics.md
+++ b/contrib/docs/tutorials/prometheus-metrics.md
@@ -1,5 +1,8 @@
# Prometheus
+> [!NOTE]
+> The Prometheus metrics have been marked as deprecated and will be removed at a later point. The recommendation is to use the OpenTelemetry metrics by following the [Setup OpenTelemetry](https://backstage.io/docs/tutorials/setup-opentelemetry) documentation
+
## Overview
This is a small tutorial that goes over how to setup your Backstage instance to output metrics in a format that can be pulled in by Prometheus.
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index 90b1e2c7ef..0000000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# This is generated by build:api-docs in the root
-reference
diff --git a/docs/accessibility/index.md b/docs/accessibility/index.md
index da10d60dd2..021c8309be 100644
--- a/docs/accessibility/index.md
+++ b/docs/accessibility/index.md
@@ -52,7 +52,7 @@ Running this command will use the [Lighthouse config](https://github.com/backsta
:::
-### Use Lighthouse Github Action on your own repo
+### Use Lighthouse GitHub Action on your own repo
If your Backstage plugin lives outside of the [Backstage main repository](https://github.com/backstage/backstage/), and you use GitHub Actions for continuous integration, we encourage you to add and modify the [Accessibility GitHub workflow](https://github.com/backstage/backstage/blob/master/.github/workflows/verify_accessibility.yml) to your needs.
diff --git a/docs/api/deprecations.md b/docs/api/deprecations.md
index 664d7c327d..a9127426f0 100644
--- a/docs/api/deprecations.md
+++ b/docs/api/deprecations.md
@@ -26,7 +26,7 @@ opens up for other type of themes, and removes the hardcoded usage of
To migrate an existing theme, remove the `theme` property and move it over to a
new `Provider` component, using `ThemeProvider` from Material UI to provide the new
-theme, along with ``. For example a theme that currently looks like
+theme, along with ``. For example, a theme that currently looks like
this:
```tsx
@@ -84,8 +84,8 @@ migrate to your own custom API.
First, you'll need to define a new Utility API reference. If you're only using
the API for sign-in, you can put the definition in `packages/app/src/apis.ts`.
However, if you need to access your auth API inside plugins you you'll need to
-export it from a common package. If you don't already have one we recommended
-creating `@internal/apis` and from there export the API reference.
+export it from a common package. If you don't already have one, we recommend
+creating `@internal/apis` and from there exporting the API reference.
```ts
// `ProfileInfoApi & BackstageIdentityApi & SessionApi` are required for sign-in
@@ -101,7 +101,7 @@ export const acmeAuthApiRef: ApiRef<
});
```
-Next you'll want to wire up the API inside `packages/app/src/apis.ts`, which
+Next, you'll want to wire up the API inside `packages/app/src/apis.ts`, which
varies depending on which API you're replacing. If you for example are replacing
the `oauth2ApiRef`, the factory might look like this:
diff --git a/docs/api/utility-apis.md b/docs/api/utility-apis.md
index 44c00d1ab7..06183f1fc0 100644
--- a/docs/api/utility-apis.md
+++ b/docs/api/utility-apis.md
@@ -6,10 +6,7 @@ description: Backstage Utility APIs
## Introduction
-Backstage Plugins strive to be self-contained, with as much functionality as
-possible residing within the plugin itself and its backend APIs. There will
-however always be a need for plugins to communicate outside of its boundaries,
-both with other plugins and the app itself.
+Backstage plugins strive to be self-contained, with as much functionality as possible residing within the plugin itself and its backend APIs. There will, however, always be a need for plugins to communicate outside of their boundaries, both with other plugins and with the app itself.
Backstage provides two primary methods for plugins to communicate across their
boundaries in client-side code. The first one being the
@@ -61,7 +58,7 @@ Note that there is no explicit type given for
embedded, and [`useApi`](../reference/core-plugin-api.useapi.md) is able to infer
the type.
-Also note that consuming Utility APIs is not limited to plugins, it can be done
+Also note that consuming Utility APIs is not limited to plugins; it can be done
from any component inside Backstage, including the ones in
[`@backstage/core-plugin-api`](../reference/core-plugin-api.md). The only
requirement is that they are beneath the `AppProvider` in the react tree.
@@ -93,7 +90,7 @@ createApiFactory({
});
```
-In this example the [`errorApiRef`](../reference/core-plugin-api.errorapiref.md)
+In this example, the [`errorApiRef`](../reference/core-plugin-api.errorapiref.md)
is our API, which encapsulates the
[`ErrorApi`](../reference/core-plugin-api.errorapi.md) type. The
[`alertApiRef`](../reference/core-plugin-api.alertapiref.md) is our single
@@ -135,11 +132,11 @@ there is no step that needs to be taken to include these APIs in an app.
### Plugin APIs
In addition to the core APIs, plugins can define and export their own APIs.
-While doing so they should usually also provide default implementations of their
-own APIs, for example, the `catalog` plugin exports `catalogApiRef`, and also
+While doing so, they should usually also provide default implementations of their
+own APIs; for example, the `catalog` plugin exports `catalogApiRef` and also
supplies a default [`ApiFactory`](../reference/core-plugin-api.apifactory.md) of
that API using the `CatalogClient`. There is one restriction to plugin-provided
-API Factories: plugins may not supply factories for core APIs, trying to do so
+API Factories: plugins may not supply factories for core APIs; trying to do so
will cause the app to refuse to start.
Plugins supply their APIs through the `apis` option of
@@ -165,16 +162,16 @@ export const techdocsPlugin = createPlugin({
### App APIs
Lastly, the app itself is the final point where APIs can be added, and what has
-the final say in what APIs will be loaded at runtime. The app may override the
+the final say in what APIs will be loaded at runtime? The app may override the
factories for any of the core or plugin APIs, with the exception of the config,
app theme, and identity APIs. These are static APIs that are tied into the
-[`createApp`](../reference/app-defaults.createapp.md) implementation, and
-therefore not possible to override.
+[`createApp`](../reference/app-defaults.createapp.md) implementation and
+therefore, not possible to override.
Overriding APIs is useful for apps that want to switch out behavior to tailor it
-to their environment. In some cases plugins may also export multiple
+to their environment. In some cases, plugins may also export multiple
implementations of the same API, where they each have their own different
-requirements on for example backend storage and surrounding environment.
+requirements, for example, backend storage and the surrounding environment.
Supplying APIs to the app works just like for plugins:
@@ -238,21 +235,14 @@ checked by the type embedded in the
## Defining custom Utility APIs
Plugins are free to define their own Utility APIs. Simply define the TypeScript
-interface for the API, and create an
+interface for the API and create an
[`ApiRef`](../reference/core-plugin-api.apiref.md) using
[`createApiRef`](../reference/core-plugin-api.createapiref.md) exported from
-[`@backstage/core-plugin-api`](../reference/core-plugin-api.md). Also be sure to
-provide at least one implementation of the API, and to declare a default factory
+[`@backstage/core-plugin-api`](../reference/core-plugin-api.md). Also, be sure to
+provide at least one implementation of the API and to declare a default factory
for the API in [`createPlugin`](../reference/core-plugin-api.createplugin.md).
-Custom Utility APIs can be either public or private, which is up to the plugin
-to choose. Private APIs do not expose an external API surface, and it's
-therefore possible to make breaking changes to the API without affecting other
-users of the plugin. If an API is made public however, it opens up for other
-plugins to make use of the API, and it also makes it possible for users for your
-plugin to override the API in the app. It is however important to maintain
-backwards compatibility of public APIs, as you may otherwise break apps that are
-using your plugin.
+Custom Utility APIs can be either public or private, which is up to the plugin to choose. Private APIs do not expose an external API surface, and it's therefore possible to make breaking changes to the API without affecting other users of the plugin. If an API is made public, however, it opens up for other plugins to make use of the API, and it also makes it possible for users for your plugin to override the API in the app. It is, however, important to maintain backward compatibility of public APIs, as you may otherwise break apps that are using your plugin.
To make an API public, simply export the
[`ApiRef`](../reference/core-plugin-api.apiref.md) of the API, and any associated
diff --git a/docs/architecture-decisions/index.md b/docs/architecture-decisions/index.md
index 615d737fe1..3432264453 100644
--- a/docs/architecture-decisions/index.md
+++ b/docs/architecture-decisions/index.md
@@ -27,7 +27,7 @@ Records should be stored under the `architecture-decisions` directory.
- Address and integrate feedback from the community
- Eventually, assign a number
- Add the path of the ADR to the microsite sidebar in
- [`sidebars.json`](https://github.com/backstage/backstage/blob/master/microsite/sidebars.json)
+ [`sidebars.js`](https://github.com/backstage/backstage/blob/master/microsite/sidebars.js)
- Add the path of the ADR to the
[`mkdocs.yml`](https://github.com/backstage/backstage/blob/master/mkdocs.yml)
- Merge the pull request
diff --git a/docs/assets/auth/github-provider-not-configured-to-support-sign-in.png b/docs/assets/auth/github-provider-not-configured-to-support-sign-in.png
new file mode 100644
index 0000000000..1bbd94ecc3
Binary files /dev/null and b/docs/assets/auth/github-provider-not-configured-to-support-sign-in.png differ
diff --git a/docs/assets/auth/github-unable-to-reolve-identity.png b/docs/assets/auth/github-unable-to-reolve-identity.png
new file mode 100644
index 0000000000..622fd75a4a
Binary files /dev/null and b/docs/assets/auth/github-unable-to-reolve-identity.png differ
diff --git a/docs/auth/add-auth-provider.md b/docs/auth/add-auth-provider.md
index d1dad0b183..51424f1c10 100644
--- a/docs/auth/add-auth-provider.md
+++ b/docs/auth/add-auth-provider.md
@@ -1,13 +1,12 @@
---
id: add-auth-provider
-title: Contributing New Providers
+title: Contributing New Provider Modules
description: Documentation on adding new authentication providers
---
:::note Note
-The primary audience for this documentation are contributors to the main
-Backstage project that want to add support for new authentication providers.
+The primary audience for this documentation are contributors that want to add support for new authentication providers.
While you can follow it to implement your own custom providers it is much
more advanced than using our built-in providers.
@@ -122,191 +121,137 @@ due to its comprehensive set of supported authentication
### Quick guide
-[1.](#installing-the-dependencies) Install the passport-js based provider
-package.
+[1.](#create-new-auth-provider-module) Create a new auth provider module
-[2.](#create-implementation) Create a new folder structure for the provider.
+[3.](#adding-an-oauth-based-provider) or [adding a proxy auth based provider](#creating-proxy-auth-based-provider) depending on your needs.
-[3.](#adding-an-oauth-based-provider) Implement the provider, extending the
-suitable framework if needed.
+[4.](#add-the-provider-to-the-backend) Add the provider to the backend.
-[4.](#hook-it-up-to-the-backend) Add the provider to the backend.
+### Create new auth provider module
-### Installing the dependencies:
+In this example we will create auth module for a made up service named foobar.
+
+Create a new module using `yarn new`, pick `backend-module` and provide `auth-backend` as the plugin ID and `foobar-provider` as the module ID.
+
+Make sure that the module has the appropriate passport provider as a dependency.
```bash
-cd plugins/auth-backend
+cd plugins/auth-backend-backend-module-foobar-provider
yarn add passport-provider-a
yarn add @types/passport-provider-a
```
-### Create implementation
-
-Make a new folder with the name of the provider following the below file
-structure:
-
-```bash
-plugins/auth-backend/src/providers/providerA
-├── index.ts
-└── provider.ts
-```
-
-**`plugins/auth-backend/src/providers/providerA/provider.ts`** defines the
-provider class which implements a handler for the chosen framework.
-
### Adding an OAuth based provider
-If we're adding an `OAuth` based provider we would implement the
-`OAuthHandlers` interface. By implementing this
-interface we can use the `OAuthProvider` class provided by `lib/oauth`, meaning
-we don't need to implement the full
-`AuthProviderRouteHandlers` interface that providers
-otherwise need to implement.
+We're then creating a new module that can extend the Auth backend using the `authProvidersExtensionPoint`.
-The provider class takes the provider's options as a class parameter. It also
-imports the `Strategy` from the passport package.
+```ts title="plugins/auth-backend-foobar-provider/src/module.ts"
+import { createBackendModule } from '@backstage/backend-plugin-api';
+import {
+ authProvidersExtensionPoint,
+ commonSignInResolvers,
+ createOAuthProviderFactory,
+} from '@backstage/plugin-auth-node';
+import { providerAuthenticator } from './authenticator';
-```ts
-import { Strategy as ProviderAStrategy } from 'passport-provider-a';
-
-export type ProviderAProviderOptions = OAuthProviderOptions & {
- // extra options here
-}
-
-export class ProviderAAuthProvider implements OAuthHandlers {
- private readonly _strategy: ProviderAStrategy;
-
- constructor(options: ProviderAProviderOptions) {
- this._strategy = new ProviderAStrategy(
- {
- clientID: options.clientId,
- clientSecret: options.clientSecret,
- callbackURL: options.callbackUrl,
- passReqToCallback: false,
- response_type: 'code',
- /// ... etc
- }
- verifyFunction, // See the "Verify Callback" section
- );
- }
-
- async start() {}
- async handler() {}
-}
-```
-
-### Adding an non-OAuth based provider
-
-An non-`OAuth` based provider could implement
-`AuthProviderRouteHandlers` instead.
-
-```ts
-type ProviderAOptions = {
- // ...
-};
-
-export class ProviderAAuthProvider implements AuthProviderRouteHandlers {
- private readonly _strategy: ProviderAStrategy;
-
- constructor(options: ProviderAOptions) {
- this._strategy = new ProviderAStrategy(
- {
- // ...
+/** @public */
+export const authModuleFoobarProvider = createBackendModule({
+ pluginId: 'auth',
+ moduleId: 'foobar',
+ register(reg) {
+ reg.registerInit({
+ deps: {
+ providers: authProvidersExtensionPoint,
},
- verifyFunction, // See the "Verify Callback" section
- );
- }
-
- async start() {}
- async frameHandler() {}
- async logout() {}
- async refresh() {} // If supported
-}
-```
-
-#### Integration Wrapper
-
-Each provider exports an object that provides a way to create new instances
-of the provider, along with related utilities like predefined sign-in resolvers.
-
-The object is created using `createAuthProviderIntegration`, with the most
-important part being the `create` method that acts as the factory function
-for our provider.
-
-The factory should return an implementation of `AuthProviderFactory`, which
-passes in a object with utilities for configuration, logging, token issuing,
-etc. The factory should return an implementation of
-`AuthProviderRouteHandlers`.
-
-The factory is what decides the mapping from
-[static configuration](../conf/index.md) to the creation of auth providers. For
-example, OAuth providers use `OAuthEnvironmentHandler` to allow for multiple
-different configurations, one for each environment, which looks like this;
-
-```ts
-export const okta = createAuthProviderIntegration({
- create(options?: {
- /**
- * The profile transformation function used to verify and convert the auth response
- * into the profile that will be presented to the user.
- */
- authHandler?: AuthHandler;
-
- /**
- * Configure sign-in for this provider, without it the provider can not be used to sign users in.
- */
- signIn?: {
- /**
- * Maps an auth result to a Backstage identity for the user.
- */
- resolver: SignInResolver;
- };
- }) {
- return ({ providerId, globalConfig, config, resolverContext }) =>
- OAuthEnvironmentHandler.mapConfig(config, envConfig => {
- // read options from config
- const clientId = envConfig.getString('clientId');
- const clientSecret = envConfig.getString('clientSecret');
-
- // Use provided auth handler, or create a default one
- const authHandler: AuthHandler = options?.authHandler
- ? options.authHandler
- : async ({ fullProfile, params }) => ({
- profile: makeProfileInfo(fullProfile, params.id_token),
- });
-
- // instantiate our OAuthHandlers implementation
- const provider = new OktaAuthProvider({
- audience,
- clientId,
- clientSecret,
- callbackUrl,
- authHandler,
- signInResolver: options?.signIn?.resolver,
- resolverContext,
+ async init({ providers }) {
+ providers.registerProvider({
+ providerId: 'foobar',
+ factory: createOAuthProviderFactory({
+ authenticator: providerAuthenticator,
+ signInResolverFactories: {
+ ...commonSignInResolvers,
+ },
+ }),
});
-
- // Wrap the OAuthHandlers with OAuthProvider, which implements AuthProviderRouteHandlers
- return OAuthProvider.fromConfig(globalConfig, provider, {
- providerId,
- tokenIssuer,
- });
- });
- },
- resolvers: {
- /**
- * Looks up the user by matching their email local part to the entity name.
- */
- emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver,
-
- // ... additional predefined resolvers
+ },
+ });
},
});
```
-The purpose of the different environments is to allow for a single auth-backend
-to serve as the authentication service for multiple different frontend
-environments, such as local development, staging, and production.
+Now let's implement the actual authenticator for our provider using `Strategy` from a passport package.
+The authenticator is responsible for creating the passport strategy and handling the authentication flow using secrets from the config file.
+
+```ts title="plugins/auth-backend-foobar-provider/src/authenticator.ts"
+import { Strategy as ProviderStrategy } from 'passport-provider-a';
+import {
+ createOAuthAuthenticator,
+ PassportOAuthAuthenticatorHelper,
+ PassportOAuthDoneCallback,
+ PassportProfile,
+} from '@backstage/plugin-auth-node';
+
+/** @public */
+export const providerAuthenticator = createOAuthAuthenticator({
+ defaultProfileTransform:
+ PassportOAuthAuthenticatorHelper.defaultProfileTransform,
+ scopes: {
+ // Scopes required by the provider
+ required: ['openid', 'email', 'profile', 'offline_access'],
+ },
+ initialize({ callbackUrl, config }) {
+ const clientId = config.getString('clientId');
+ const clientSecret = config.getString('clientSecret');
+
+ return PassportOAuthAuthenticatorHelper.from(
+ new ProviderStrategy(
+ {
+ clientID: clientId,
+ clientSecret: clientSecret,
+ // ... other options
+ },
+ (
+ accessToken: string,
+ refreshToken: string,
+ params: any,
+ fullProfile: PassportProfile,
+ done: PassportOAuthDoneCallback,
+ ) => {
+ done(
+ undefined,
+ { fullProfile, params, accessToken },
+ { refreshToken },
+ );
+ },
+ ),
+ );
+ },
+
+ async start(input, helper) {
+ return helper.start(input);
+ },
+
+ async authenticate(input, helper) {
+ return helper.authenticate(input);
+ },
+
+ async refresh(input, helper) {
+ return helper.refresh(input);
+ },
+});
+```
+
+Here are some examples of authenticators that are already implemented in the codebase:
+
+- [Google](https://github.com/backstage/backstage/blob/master/plugins/auth-backend-module-google-provider/src/authenticator.ts)
+- [GitHub](https://github.com/backstage/backstage/blob/master/plugins/auth-backend-module-github-provider/src/authenticator.ts)
+- [Okta](https://github.com/backstage/backstage/blob/master/plugins/auth-backend-module-okta-provider/src/authenticator.ts)
+
+### Creating proxy auth based provider
+
+A proxy auth provider is a provider that uses another provider to authenticate for example Google IAP or AWS ALB, please note that those providers are already supported by Backstage.
+
+The implementation is similar to the OAuth provider, but the `authenticator` function is different. There are already some examples on how to implement a proxy provider in the codebase, for example [auth-backend-module-gcp-iap-provider](https://github.com/backstage/backstage/tree/master/plugins/auth-backend-module-gcp-iap-provider) and [auth-backend-module-aws-alb-provider](https://github.com/backstage/backstage/tree/master/plugins/auth-backend-module-aws-alb-provider)
#### Verify Callback
@@ -323,27 +268,20 @@ environments, such as local development, staging, and production.
>
> http://www.passportjs.org/docs/configure/
-**`plugins/auth-backend/src/providers/providerA/index.ts`** is simply
-re-exporting the factory function to be used for hooking the provider up to the
-backend.
+### Add the provider to the backend
+
+The process for adding the new module is the same as for any other type of module or backend plugin.
+
+If this provider is internal to your installation the import path that you add to `packages/backend/src/index.ts` would be something like:
```ts
-export { createProviderAProvider } from './provider';
+backend.add(import('@internal/plugin-auth-backend-module-foobar-provider'));
```
-### Hook it up to the backend
-
-**`plugins/auth-backend/src/providers/factories.ts`** When the `auth-backend`
-starts it sets up routing for all the available providers by calling
-the factory function of each provider. You need to import the factory
-function from the provider and add it to the factory:
+But if this module is contributed directly to Backstage the module would be imported as
```ts
-import { createProviderAProvider } from './providerA';
-
-const factories: { [providerId: string]: AuthProviderFactory } = {
- providerA: createProviderAProvider,
-};
+backend.add(import('@backstage/plugin-auth-backend-module-foobar-provider'));
```
By doing this `auth-backend` automatically adds these endpoints:
diff --git a/docs/auth/auth0/provider--old.md b/docs/auth/auth0/provider--old.md
new file mode 100644
index 0000000000..a089236aca
--- /dev/null
+++ b/docs/auth/auth0/provider--old.md
@@ -0,0 +1,75 @@
+---
+id: provider--old
+title: Auth0 Authentication Provider
+sidebar_label: Auth0
+description: Adding Auth0 as an authentication provider in Backstage
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by
+[the new backend system](../../backend-system/index.md), being the default since
+Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new
+backend system, you may want to read [its own article](./provider.md)
+instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
+The Backstage `core-plugin-api` package comes with an Auth0 authentication
+provider that can authenticate users using OAuth.
+
+## Create an Auth0 Application
+
+1. Log in to the [Auth0 dashboard](https://manage.auth0.com/dashboard/)
+2. Navigate to **Applications**
+3. Create an Application
+ - Name: Backstage (or your custom app name)
+ - Application type: Single Page Web Application
+4. Click on the Settings tab
+5. Add under `Application URIs` > `Allowed Callback URLs`:
+ `http://localhost:7007/api/auth/auth0/handler/frame`
+6. Click `Save Changes`
+
+## Configuration
+
+The provider configuration can then be added to your `app-config.yaml` under the
+root `auth` configuration:
+
+```yaml
+auth:
+ environment: development
+ providers:
+ auth0:
+ development:
+ clientId: ${AUTH_AUTH0_CLIENT_ID}
+ clientSecret: ${AUTH_AUTH0_CLIENT_SECRET}
+ domain: ${AUTH_AUTH0_DOMAIN_ID}
+ audience: ${AUTH_AUTH0_AUDIENCE}
+ connection: ${AUTH_AUTH0_CONNECTION}
+ connectionScope: ${AUTH_AUTH0_CONNECTION_SCOPE}
+ session:
+ secret: ${AUTH_SESSION_SECRET}
+```
+
+The Auth0 provider is a structure with these configuration keys:
+
+- `clientId`: The Application client ID, found on the Auth0 Application page
+- `clientSecret`: The Application client secret, found on the Auth0 Application
+ page
+- `domain`: The Application domain, found on the Auth0 Application page
+
+It additionally relies on the following configuration to function:
+
+- `session.secret`: The session secret is a key used for signing and/or encrypting cookies set by the application to maintain session state. In this case, 'your session secret' should be replaced with a long, complex, and unique string that only your application knows.
+
+Auth0 requires a session, so you need to give the session a secret key.
+
+## Optional Configuration
+
+- `audience`: The intended recipients of the token
+- `connection`: Social identity provider name. To check the available social connections, please visit [Auth0 Social Connections](https://marketplace.auth0.com/features/social-connections).
+- `connectionScope`: Additional scopes in the interactive token request. It should always be used in combination with the `connection` parameter
+
+## Adding the provider to the Backstage frontend
+
+To add the provider to the frontend, add the `auth0AuthApi` 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/auth0/provider.md b/docs/auth/auth0/provider.md
index ae44114906..bc2a02fe1f 100644
--- a/docs/auth/auth0/provider.md
+++ b/docs/auth/auth0/provider.md
@@ -5,6 +5,13 @@ sidebar_label: Auth0
description: Adding Auth0 as an authentication provider in Backstage
---
+:::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). If you are still on the old backend
+system, you may want to read [its own article](./provider--old.md)
+instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
The Backstage `core-plugin-api` package comes with an Auth0 authentication
provider that can authenticate users using OAuth.
@@ -54,12 +61,46 @@ It additionally relies on the following configuration to function:
Auth0 requires a session, so you need to give the session a secret key.
-## Optional Configuration
+### Optional
- `audience`: The intended recipients of the token
- `connection`: Social identity provider name. To check the available social connections, please visit [Auth0 Social Connections](https://marketplace.auth0.com/features/social-connections).
- `connectionScope`: Additional scopes in the interactive token request. It should always be used in combination with the `connection` parameter
+### Resolvers
+
+This provider includes several resolvers out of the box that you can use:
+
+- `emailMatchingUserEntityProfileEmail`: Matches the email address from the auth provider with the User entity that has a matching `spec.profile.email`. If no match is found it will throw a `NotFoundError`.
+- `emailLocalPartMatchingUserEntityName`: Matches the [local part](https://en.wikipedia.org/wiki/Email_address#Local-part) of the email address from the auth provider with the User entity that has a matching `name`. If no match is found it will throw a `NotFoundError`.
+
+:::note Note
+
+The resolvers will be tried in order, but will only be skipped if they throw a `NotFoundError`.
+
+:::
+
+If these resolvers do not fit your needs you can build a custom resolver, this is covered in the [Building Custom Resolvers](../identity-resolver.md#building-custom-resolvers) section of the Sign-in Identities and Resolvers documentation.
+
+## Backend Installation
+
+To add the provider to the backend we will first need to install the package by running this command:
+
+```bash title="from your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-auth-backend-module-auth0-provider
+```
+
+Then we will need to add this line:
+
+```ts title="packages/backend/src/index.ts"
+import { createBackend } from '@backstage/backend-defaults';
+//...
+backend.add(import('@backstage/plugin-auth-backend'));
+// highlight-add-next-line
+backend.add(import('@backstage/plugin-auth-backend-module-auth0-provider'));
+//...
+```
+
## Adding the provider to the Backstage frontend
To add the provider to the frontend, add the `auth0AuthApi` reference and
diff --git a/docs/auth/aws-alb/provider.md b/docs/auth/aws-alb/provider.md
index 8f21b7dbf0..a3974c895e 100644
--- a/docs/auth/aws-alb/provider.md
+++ b/docs/auth/aws-alb/provider.md
@@ -11,14 +11,18 @@ and get the user seamlessly authenticated.
## Configuration
The provider configuration can be added to your `app-config.yaml` under the root
-`auth` configuration:
+`auth` configuration, similar to the following example:
```yaml title="app-config.yaml"
auth:
providers:
awsalb:
- issuer: 'https://example.okta.com/oauth2/default' # optional
- region: 'us-west-2' # required, use your actual region here
+ # this is the URL of the IdP you configured
+ issuer: 'https://example.okta.com/oauth2/default'
+ # this is the ARN of your ALB instance
+ signer: 'arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/my-load-balancer/1234567890123456'
+ # this is the region where your ALB instance resides
+ region: 'us-west-2'
signIn:
resolvers:
# typically you would pick one of these
@@ -26,6 +30,8 @@ auth:
- resolver: emailLocalPartMatchingUserEntityName
```
+Ensure that you have set the signer correctly. It is also recommended that you restrict your target groups' security policy to only accept connections from that ALB.
+
### Resolvers
This provider includes several resolvers out of the box that you can use:
diff --git a/docs/auth/bitbucketServer/provider--old.md b/docs/auth/bitbucketServer/provider--old.md
new file mode 100644
index 0000000000..fdd8fa35be
--- /dev/null
+++ b/docs/auth/bitbucketServer/provider--old.md
@@ -0,0 +1,60 @@
+---
+id: provider--od
+title: Bitbucket Server Authentication Provider
+sidebar_label: Bitbucket Server
+description: Adding Bitbucket Server OAuth as an authentication provider in Backstage
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by
+[the new backend system](../../backend-system/index.md), being the default since
+Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new
+backend system, you may want to read [its own article](./provider.md)
+instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
+The Backstage `core-plugin-api` package comes with a Bitbucket Server authentication provider that can authenticate
+users using Bitbucket Server. This does **NOT** work with Bitbucket Cloud.
+
+## Create an Application Link in Bitbucket Server
+
+To add Bitbucket Server authentication, you must create an incoming application link. Follow the steps described in
+the [Bitbucket Server documentation](https://confluence.atlassian.com/bitbucketserver/configure-an-incoming-link-1108483657.html)
+to create one.
+
+## Configuration
+
+The provider configuration can then be added to your `app-config.yaml` under the root `auth` configuration:
+
+```yaml
+auth:
+ environment: development
+ providers:
+ bitbucketServer:
+ development:
+ host: bitbucket.org
+ clientId: ${AUTH_BITBUCKET_SERVER_CLIENT_ID}
+ clientSecret: ${AUTH_BITBUCKET_SERVER_CLIENT_SECRET}
+```
+
+The Bitbucket Server provider is a structure with two configuration keys:
+
+- `clientId`: The client ID that was generated by Bitbucket, e.g. `b0f868455c15dcdff5c5fb5d173ae684`.
+- `clientSecret`: The client secret tied to the generated client ID.
+
+## Adding the provider to the Backstage frontend
+
+To add the provider to the frontend, add the `bitbucketServerAuthApi` reference and `SignInPage` component as shown
+in [Adding the provider to the sign-in page](../index.md#sign-in-configuration).
+
+## Using Bitbucket Server for sign-in
+
+In order to use the Bitbucket Server provider for sign-in, you must configure it with a `signIn.resolver`. See
+the [Sign-In Resolver documentation](../identity-resolver.md) for more details on how this is done. Note that for the
+Bitbucket Server provider, you'll want to use `bitbucketServer` as the provider ID,
+and `providers.bitbucketServer.create` for the provider factory.
+
+The `@backstage/plugin-auth-backend` plugin also comes with a built-in resolver that can be used if desired.
+The `emailMatchingUserEntityProfileEmail` identifies users by matching their Bitbucket Server email address to the email
+address of `User` entities in the catalog. Note that you must populate your catalog with matching entities or users will
+not be able to sign in with this resolver.
diff --git a/docs/auth/bitbucketServer/provider.md b/docs/auth/bitbucketServer/provider.md
index 82aebc20b2..c41457d09c 100644
--- a/docs/auth/bitbucketServer/provider.md
+++ b/docs/auth/bitbucketServer/provider.md
@@ -5,6 +5,13 @@ sidebar_label: Bitbucket Server
description: Adding Bitbucket Server OAuth as an authentication provider in Backstage
---
+:::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). If you are still on the old backend
+system, you may want to read [its own article](./provider--old.md)
+instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
The Backstage `core-plugin-api` package comes with a Bitbucket Server authentication provider that can authenticate
users using Bitbucket Server. This does **NOT** work with Bitbucket Cloud.
@@ -24,7 +31,7 @@ auth:
providers:
bitbucketServer:
development:
- host: bitbucket.org
+ host: bitbucket.example.org
clientId: ${AUTH_BITBUCKET_SERVER_CLIENT_ID}
clientSecret: ${AUTH_BITBUCKET_SERVER_CLIENT_SECRET}
```
@@ -34,19 +41,50 @@ The Bitbucket Server provider is a structure with two configuration keys:
- `clientId`: The client ID that was generated by Bitbucket, e.g. `b0f868455c15dcdff5c5fb5d173ae684`.
- `clientSecret`: The client secret tied to the generated client ID.
-## Adding the provider to the Backstage frontend
+### Resolvers
-To add the provider to the frontend, add the `bitbucketServerAuthApi` reference and `SignInPage` component as shown
-in [Adding the provider to the sign-in page](../index.md#sign-in-configuration).
+This provider includes several resolvers out of the box that you can use:
-## Using Bitbucket Server for sign-in
+- `emailMatchingUserEntityProfileEmail`: Matches the email address from the auth provider with the User entity that has a matching `spec.profile.email`. If no match is found it will throw a `NotFoundError`.
+- `emailLocalPartMatchingUserEntityName`: Matches the [local part](https://en.wikipedia.org/wiki/Email_address#Local-part) of the email address from the auth provider with the User entity that has a matching `name`. If no match is found it will throw a `NotFoundError`.
-In order to use the Bitbucket Server provider for sign-in, you must configure it with a `signIn.resolver`. See
-the [Sign-In Resolver documentation](../identity-resolver.md) for more details on how this is done. Note that for the
-Bitbucket Server provider, you'll want to use `bitbucketServer` as the provider ID,
-and `providers.bitbucketServer.create` for the provider factory.
+:::note Note
-The `@backstage/plugin-auth-backend` plugin also comes with a built-in resolver that can be used if desired.
-The `emailMatchingUserEntityProfileEmail` identifies users by matching their Bitbucket Server email address to the email
-address of `User` entities in the catalog. Note that you must populate your catalog with matching entities or users will
-not be able to sign in with this resolver.
+The resolvers will be tried in order, but will only be skipped if they throw a `NotFoundError`.
+
+:::
+
+If these resolvers do not fit your needs you can build a custom resolver, this is covered in the [Building Custom Resolvers](../identity-resolver.md#building-custom-resolvers) section of the Sign-in Identities and Resolvers documentation.
+
+## Backend Installation
+
+To add the provider to the backend we will first need to install the package by running this command:
+
+```bash title="from your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-auth-backend-module-bitbucket-server-provider
+```
+
+Then we will need to add this line:
+
+```ts title="packages/backend/src/index.ts"
+//...
+backend.add(import('@backstage/plugin-auth-backend'));
+// highlight-add-start
+backend.add(
+ import('@backstage/plugin-auth-backend-module-bitbucket-server-provider'),
+);
+// highlight-add-end
+//...
+```
+
+## Frontend Configuration
+
+### Sign-in
+
+To add the provider to the frontend, add the `bitbucketServerAuthApiRef` reference and
+`SignInPage` component as shown in
+[Adding the provider to the sign-in page](../index.md#sign-in-configuration).
+
+### ScmAuth
+
+For backstage to be able to use the oauth token of the logged in user to access the Bitbucket Server API, you need to add it to list of ScmAuth providers as shown in [Custom ScmAuthApi Implementation](../index.md#custom-scmauthapi-implementation) using the `ScmAuth.forBitbucketServer` method.
diff --git a/docs/auth/cloudflare/provider.md b/docs/auth/cloudflare/provider.md
index 516ea9d647..a1946580a7 100644
--- a/docs/auth/cloudflare/provider.md
+++ b/docs/auth/cloudflare/provider.md
@@ -32,6 +32,12 @@ auth:
serviceTokens:
- token: '1uh2fh19efvfh129f1f919u21f2f19jf2.access'
subject: 'bot-user@your-company.com'
+ # You can customize the header name that contains the jwt token, by default
+ # cf-access-jwt-assertion is used
+ jwtHeaderName:
+ # You can customize the authorization cookie name, by default
+ # CF_Authorization is used
+ authorizationCookieName:
# This picks what sign in resolver(s) you want to use.
signIn:
resolvers:
diff --git a/docs/auth/gitlab/provider.md b/docs/auth/gitlab/provider.md
index 73546411bf..4f5339f5b9 100644
--- a/docs/auth/gitlab/provider.md
+++ b/docs/auth/gitlab/provider.md
@@ -19,6 +19,7 @@ should point to your Backstage backend auth handler.
1. Set this to `http://localhost:7007/api/auth/gitlab/handler/frame` for local development.
2. Set this to `http://{APP_FQDN}:{APP_BACKEND_PORT}/api/auth/gitlab/handler/frame` for non-local deployments.
3. Select the following scopes from the list:
+ - [x] `api` Grants full read-write access to the api. This is only required if users need to be able to create merge requests with their own permissions.
- [x] `read_user` Grants read-only access to the authenticated user's profile through the /user API endpoint, which includes username, public email, and full name. Also grants access to read-only API endpoints under /users.
- [x] `read_repository` Grants read-only access to repositories on private projects using Git-over-HTTP (not using the API).
- [x] `write_repository` Grants read-write access to repositories on private projects using Git-over-HTTP (not using the API).
diff --git a/docs/auth/google/gcp-iap-auth.md b/docs/auth/google/gcp-iap-auth.md
index 6479ac7268..298f212399 100644
--- a/docs/auth/google/gcp-iap-auth.md
+++ b/docs/auth/google/gcp-iap-auth.md
@@ -24,7 +24,7 @@ Let's start by adding the following `auth` configuration in your
```yaml
auth:
providers:
- gcp-iap:
+ gcpIap:
audience: '/projects//global/backendServices/'
jwtHeader: x-custom-header # Optional: Only if you are using a custom header for the IAP JWT
signIn:
@@ -77,6 +77,6 @@ backend.add(import('@backstage/plugin-auth-backend-module-gcp-iap-provider'));
## Adding the provider to the Backstage frontend
-See [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) for pointers on how to set up the sign-in page, and to also make it work smoothly for local development. You'll use `gcp-iap` as the provider name.
+See [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) for pointers on how to set up the sign-in page, and to also make it work smoothly for local development. You'll use `gcpIap` as the provider name.
If you [provide a custom sign in resolver](https://backstage.io/docs/auth/identity-resolver#building-custom-resolvers), you can skip the `signIn` block entirely.
diff --git a/docs/auth/identity-resolver.md b/docs/auth/identity-resolver.md
index 5efb592270..d6b377d990 100644
--- a/docs/auth/identity-resolver.md
+++ b/docs/auth/identity-resolver.md
@@ -142,8 +142,28 @@ backend.add(import('@backstage/plugin-auth-backend-module-github-provider'));
When you want to supply a custom sign-in resolver, as a general pattern you
remove that last import and instead construct your own provider using the
-facilities from the same package. You can leave the config unchanged from
-before.
+facilities from the same package.
+
+Make sure that your `auth` config in your `app-config.yaml` does not contain
+any `resolvers` field - otherwise, they take priority.
+
+```yaml title="in e.g. app-config.yaml"
+auth:
+ environment: development
+ providers:
+ github:
+ development:
+ clientId: ${AUTH_GITHUB_CLIENT_ID}
+ clientSecret: ${AUTH_GITHUB_CLIENT_SECRET}
+ enterpriseInstanceUrl: ${AUTH_GITHUB_ENTERPRISE_INSTANCE_URL}
+/* highlight-remove-start */
+ signIn:
+ resolvers:
+ - resolver: usernameMatchingUserEntityName
+ - resolver: emailMatchingUserEntityProfileEmail
+ - resolver: emailLocalPartMatchingUserEntityName
+/* highlight-remove-end */
+```
```ts title="in packages/backend/src/index.ts"
/* highlight-add-start */
@@ -193,7 +213,7 @@ backend.add(import('@backstage/plugin-auth-backend-module-github-provider'));
backend.add(customAuth);
```
-Check out [the naming patterns article](../backend-system/architecture/07-naming-patterns.md) for what rules
+Check out [the naming patterns article](../backend-system/architecture/08-naming-patterns.md) for what rules
apply regarding how to form valid IDs. In this example we also put the module
declaration directly in `packages/backend/src/index.ts` but that's just for
simplicity. You can place it anywhere you like, including in other packages, and
@@ -403,3 +423,22 @@ const customAuth = createBackendModule({
```
Remember to `backend.add` the created module just like above.
+
+## Common Sign-In Resolver Errors
+
+There are two common Sign-In Resolver errors you might run into.
+
+First is: "The 'Auth Provider Name' provider is not configured to support sign-in". Here is what this looks like for the GitHub Auth provider:
+
+
+
+This error can be caused by the following:
+
+- The `signIn.resolvers` have not be added to your Auth Provider configuration. Adding this will resolve the error.
+- There is a syntax error in your Auth Provider configuration. Running `yarn backstage-cli config:check --strict` will help identify the syntax error.
+
+The second common error is: "Failed to sign-in, unable to resolve user identity". Here is what this looks like for the GitHub Auth provider:
+
+
+
+This error is caused by the Sign-In Resolver you configured being unable to find a matching User in the Catalog. To fix this you need to import User, and Group, data from some source of truth for this data at your Organization. To do this you can use one of the existing Org Data providers like the ones for [Entra ID (Azure AD/MS Graph)](../integrations/azure/org.md), [GitHub](../integrations/github/org.md), [GitLab](../integrations/gitlab/org.md), etc. or if none of those fit your needs you can create a [Custom Entity Provider](../features/software-catalog/external-integrations.md#custom-entity-providers).
diff --git a/docs/auth/index.md b/docs/auth/index.md
index 5188d7e2a4..2384943c52 100644
--- a/docs/auth/index.md
+++ b/docs/auth/index.md
@@ -36,8 +36,7 @@ Backstage comes with many common authentication providers in the core library:
- [OneLogin](onelogin/provider.md)
- [VMware Cloud](vmware-cloud/provider.md)
-These built-in providers handle the authentication flow for a particular service
-including required scopes, callbacks, etc. These providers are each added to a
+These built-in providers handle the authentication flow for a particular service, including required scopes, callbacks, etc. These providers are each added to a
Backstage app in a similar way.
## Configuring Authentication Providers
@@ -58,7 +57,7 @@ auth:
See the documentation for a particular provider to see what configuration is
needed.
-The `providers` key may have several authentication providers, if multiple
+The `providers` key may have several authentication providers if multiple
authentication methods are supported. Each provider may also have configuration
for different authentication environments (development, production, etc). This
allows a single auth backend to serve multiple environments, such as running a
@@ -68,15 +67,14 @@ the local `auth.environment` setting will be selected.
## Sign-In Configuration
Using an authentication provider for sign-in is something you need to configure
-both in the frontend app, as well as the `auth` backend plugin. For information
+both in the frontend app as well as the `auth` backend plugin. For information
on how to configure the backend app, see [Sign-in Identities and Resolvers](./identity-resolver.md).
The rest of this section will focus on how to configure sign-in for the frontend app.
Sign-in is configured by providing a custom `SignInPage` app component. It will be
rendered before any other routes in the app and is responsible for providing the
identity of the current user. The `SignInPage` can render any number of pages and
-components, or just blank space with logic running in the background. In the end
-however it must provide a valid Backstage user identity through the `onSignInSuccess`
+components, or just blank space with logic running in the background. In the end, however, it must provide a valid Backstage user identity through the `onSignInSuccess`
callback prop, at which point the rest of the app is rendered.
If you want to, you can use the `SignInPage` component that is provided by `@backstage/core-components`,
@@ -112,9 +110,16 @@ const app = createApp({
});
```
-You can also use the `providers` prop to enable multiple sign-in methods, for example
+:::note Note
-- allowing guest access:
+You can configure sign-in to use a redirect flow with no pop-up by adding
+`enableExperimentalRedirectFlow: true` to the root of your `app-config.yaml`
+
+:::
+
+### Using Multiple Providers
+
+You can also use the `providers` prop to enable multiple sign-in methods, for example to allow guest access:
```tsx title="packages/app/src/App.tsx"
const app = createApp({
@@ -140,12 +145,53 @@ const app = createApp({
});
```
-:::note Note
+### Conditionally Render Sign In Provider
-You can configure sign-in to use a redirect flow with no pop-up by adding
-`enableExperimentalRedirectFlow: true` to the root of your `app-config.yaml`
+In the above example, you have both Guest and GitHub sign-in options; this is helpful for non-production, but in Production you will most likely not want to offer Guest access. You can easily use information from your config to help conditionally render the provider:
-:::
+```tsx title="packages/app/src/App.tsx"
+import {
+ configApiRef,
+ githubAuthApiRef,
+ useApi,
+} from '@backstage/core-plugin-api';
+
+const app = createApp({
+ components: {
+ SignInPage: props => {
+ const configApi = useApi(configApiRef);
+ if (configApi.getString('auth.environment') === 'development') {
+ return (
+
+ );
+ }
+ return (
+
+ );
+ },
+ },
+ // ..
+});
+```
## Sign-In with Proxy Providers
@@ -159,7 +205,7 @@ and [OAuth2 Proxy](./oauth2-proxy/provider.md).
When using a proxy provider, you'll end up wanting to use a different sign-in page, as
there is no need for further user interaction once you've signed in towards the proxy.
-All the sign-in page needs to do is to call the `/refresh` endpoint of the auth providers
+All the sign-in page needs to do is call the `/refresh` endpoint of the auth providers
to get the existing session, which is exactly what the `ProxiedSignInPage` does. The only
thing you need to do to configure the `ProxiedSignInPage` is to pass the ID of the provider like this:
@@ -202,7 +248,7 @@ Headers can also be returned in an async manner:
A downside of this method is that it can be cumbersome to set up for local development.
As a workaround for this, it's possible to dynamically select the sign-in page based on
-what environment the app is running in, and then use a different sign-in method for local
+what environment the app is running in and then use a different sign-in method for local
development, if one is needed at all. Depending on the exact setup, one might choose to
select the sign-in method based on the `process.env.NODE_ENV` environment variable,
by checking the `hostname` of the current location, or by accessing the configuration API
@@ -238,7 +284,7 @@ sign-in resolvers so that they resolve to the same identity regardless of the me
## Scaffolder Configuration (Software Templates)
-If you want to use the authentication capabilities of the [Repository Picker](../features/software-templates/writing-templates.md#the-repository-picker) inside your software templates you will need to configure the [`ScmAuthApi`](https://backstage.io/docs/reference/integration-react.scmauthapi) alongside your authentication provider. It is an API used to authenticate towards different SCM systems in a generic way, based on what resource is being accessed.
+If you want to use the authentication capabilities of the [Repository Picker](../features/software-templates/writing-templates.md#the-repository-picker) inside your software templates, you will need to configure the [`ScmAuthApi`](https://backstage.io/docs/reference/integration-react.scmauthapi) alongside your authentication provider. It is an API used to authenticate towards different SCM systems in a generic way, based on what resource is being accessed.
To set it up, you'll need to add an API factory entry to `packages/app/src/apis.ts`. The example below sets up the `ScmAuthApi` for an already configured GitLab authentication provider:
@@ -257,7 +303,7 @@ In case you are using a custom authentication providers, you might need to add a
## For Plugin Developers
The Backstage frontend core APIs provide a set of Utility APIs for plugin developers
-to use, both to access the user identity, as well as third party resources.
+to use, both to access the user identity as well as third-party resources.
### Identity for Plugin Developers
@@ -275,21 +321,21 @@ to interact directly with the `IdentityApi`.
### Accessing Third Party Resources
-A common pattern for talking to third party services in Backstage is
+A common pattern for talking to third-party services in Backstage is
user-to-server requests, where short-lived OAuth Access Tokens are requested by
plugins to authenticate calls to external services. These calls can be made
either directly to the services or through a backend plugin or service.
-By relying on user-to-server calls we keep the coupling between the frontend and
-backend low, and provide a much lower barrier for plugins to make use of third
-party services. This is in comparison to for example a session-based system,
+By relying on user-to-server calls, we keep the coupling between the frontend and
+backend low and provide a much lower barrier for plugins to make use of third
+party services. This is in comparison to, for example, a session-based system
where access tokens are stored server-side. Such a solution would require a much
deeper coupling between the auth backend plugin, its session storage, and other
backend plugins or separate services. A goal of Backstage is to make it as easy
as possible to create new plugins, and an auth solution based on user-to-server
OAuth helps in that regard.
-The method with which frontend plugins request access to third party services is
+The method with which frontend plugins request access to third-party services is
through [Utility APIs](../api/utility-apis.md) for each service provider. These
are all suffixed with `*AuthApiRef`, for example `githubAuthApiRef`. For a
full list of providers, see the
diff --git a/docs/auth/microsoft/provider.md b/docs/auth/microsoft/provider.md
index 60104b99b7..eb4fc833fd 100644
--- a/docs/auth/microsoft/provider.md
+++ b/docs/auth/microsoft/provider.md
@@ -73,6 +73,7 @@ auth:
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
- resolver: emailMatchingUserEntityAnnotation
+ - resolver: userIdMatchingUserEntityAnnotation
```
The Microsoft provider is a structure with three mandatory configuration keys:
@@ -93,6 +94,7 @@ This provider includes several resolvers out of the box that you can use:
- `emailMatchingUserEntityProfileEmail`: Matches the email address from the auth provider with the User entity that has a matching `spec.profile.email`. If no match is found it will throw a `NotFoundError`.
- `emailLocalPartMatchingUserEntityName`: Matches the [local part](https://en.wikipedia.org/wiki/Email_address#Local-part) of the email address from the auth provider with the User entity that has a matching `name`. If no match is found it will throw a `NotFoundError`.
- `emailMatchingUserEntityAnnotation`: Matches the email address from the auth provider with the User entity where the value of the `microsoft.com/email` annotation matches. If no match is found it will throw a `NotFoundError`.
+- `userIdMatchingUserEntityAnnotation`: Matches the user profile ID from the auth provider with the User entity where the value of the `graph.microsoft.com/user-id` annotation matches. This resolver is recommended to resolve users without an email in their profile. If no match is found it will throw a `NotFoundError`.
:::note Note
diff --git a/docs/auth/oauth2-proxy/provider.md b/docs/auth/oauth2-proxy/provider.md
index 0901685b2f..84e2b307e6 100644
--- a/docs/auth/oauth2-proxy/provider.md
+++ b/docs/auth/oauth2-proxy/provider.md
@@ -13,6 +13,12 @@ a cluster. In general the `oauth2-proxy` supports all OpenID Connect providers,
for more details check this
[list of supported providers](https://oauth2-proxy.github.io/oauth2-proxy/docs/configuration/oauth_provider).
+:::note Note
+
+OAuth2 Proxy does not provide a way to authenticate requests, you must instead ensure that your Backstage instance is only accessible through the OAuth2 Proxy. If you need more strict validation, consider using a different provider.
+
+:::
+
## Configuration
The provider configuration can be added to your `app-config.yaml` under the root
diff --git a/docs/auth/oidc--old.md b/docs/auth/oidc--old.md
new file mode 100644
index 0000000000..904e48c9a3
--- /dev/null
+++ b/docs/auth/oidc--old.md
@@ -0,0 +1,289 @@
+---
+id: oidc--old
+title: OIDC provider from scratch
+description: This section shows how to use an OIDC provider from scratch, same steps apply for custom providers.
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by
+[the new backend system](../backend-system/index.md), being the default since
+Backstage [version 1.24](../releases/v1.24.0.md). If have migrated to the new
+backend system, you may want to read [its own article](./oidc.md)
+instead. Otherwise, [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
+This section shows how to use an OIDC provider from scratch, same steps apply for custom
+providers. Please note these steps are for using a provider, not how to implement one,
+and Backstage recommends creating custom providers specific to the IDP, so we'll use a
+`azureOIDC` provider throughout this example, feel free to change any of those refs
+to your provider name.
+
+## Summary
+
+To add providers not enabled by default like OIDC, we need to follow some steps, we
+assume you already have a sign in page to which we'll add the provider so users can
+sign in through the provider. In simple steps here's how you enable the provider:
+
+- Create an API reference to identify the provider.
+- Create the API factory that will handle the authentication.
+- Add or reuse an auth provider so you can authenticate.
+- Add or reuse a resolver to handle the result from the authentication.
+- Configure the provider to access your 3rd party auth solution.
+- Add the provider to sign in page so users can login with it.
+
+We'll explain each step more in detail next.
+
+### The API reference
+
+An API reference exist for the sake of **Dependency Injection**, check [Utility APIs][4]
+for extended explanation.
+
+In this OIDC example, we'll create the API reference directly in the
+`packages/app/src/apis.ts` file, it is not a requirement to put the reference in this
+file. Any location will do as long as it's available to be imported to where the API
+factory is, as well as easily accessible to the rest of the application so any package
+and plugin can inject the API instance when necessary.
+
+An example of such would be when you use an auth provider from a library installed with
+NPM, or any other library repository, you would import the API ref from the library.
+
+```ts
+export const azureOIDCAuthApiRef: ApiRef<
+ OpenIdConnectApi & ProfileInfoApi & BackstageIdentityApi & SessionApi
+> = createApiRef({
+ id: 'auth.my-custom-provider',
+});
+```
+
+Please note a few things, the ID can be anything you want as long as it doesn't conflict
+with other refs, backstage recommends to use a custom name that references your custom
+provider, for example we are using OIDC protocol with Azure, so we could use something
+like `auth.azure.oidc` as well.
+
+Also we're exporting this reference, as well as the `typings`, we need to
+be able to import this reference anywhere in the app, and the `typings` will tell typescript
+what instance we're getting from DI when injecting the API. In this case we are defining
+an API for authentication, so we tell TS that this instance complies with 4 API
+interfaces:
+
+- The OICD API that will handle authentication.
+- Profile API for requesting user profile info from the auth provider in question.
+- Backstage identity API to handle and associate the user profile with backstage identity.
+- Session API, to handle the session the user will have while logged in.
+
+### The API Factory
+
+A factory is a function that can take some parameters or dependencies and return an
+instance of something, in our case it will be a function that requests some backstage
+APIs and use them to create an instance of an OIDC API provider.
+
+Please note that this function only runs (creates the instance) when somewhere else in
+the app you request the DI to give you an instance of the OIDC provider using the API ref
+defined above, and the DI will only run this function the first time, from then on any
+other DI injection will just receive the same instance created the first time, basically
+the instance is cached by the DI library, a singleton.
+
+Let's add our OIDC API factory to the APIs array in the `packages/app/src/apis.ts` file:
+
+```ts title="packages/app/src/apis.ts"
+/* highlight-add-next-line */
+import { OAuth2 } from '@backstage/core-app-api';
+
+export const apis: AnyApiFactory[] = [
+ /* highlight-add-start */
+ createApiFactory({
+ api: azureOIDCAuthApiRef,
+ deps: {
+ discoveryApi: discoveryApiRef,
+ oauthRequestApi: oauthRequestApiRef,
+ configApi: configApiRef,
+ },
+ factory: ({ discoveryApi, oauthRequestApi, configApi }) =>
+ OAuth2.create({
+ configApi,
+ discoveryApi,
+ oauthRequestApi,
+ provider: {
+ id: 'my-auth-provider',
+ title: 'My custom auth provider',
+ icon: () => null,
+ },
+ environment: configApi.getOptionalString('auth.environment'),
+ defaultScopes: ['openid', 'profile', 'email'],
+ popupOptions: {
+ // optional, used to customize login in popup size
+ size: {
+ fullscreen: true,
+ },
+ /**
+ * or specify popup width and height
+ * size: {
+ width: 1000,
+ height: 1000,
+ }
+ */
+ },
+ }),
+ }),
+ /* highlight-add-end */
+ // ..
+];
+```
+
+Please note we're importing the `OAuth2` class from `@backstage/core-app-api` effectively
+delegating the authentication to it. Also we're using the `my-auth-provider` ID to tell
+`OAuth2` to use the auth provider we'll define in the next section, and added the default
+scopes to request ID, profile, email and user read permissions.
+
+## The Auth Provider
+
+The Auth Provider is responsible for authenticating with the 3rd party service, and give
+us back the credentials, here's where you pick which protocol to use, be it Auth0, OAuth2,
+OIDC, SAML or any other that your 3rd party IDP provider supports.
+
+For this example we'll use OIDC, we pass a factory to the `providerFactories` object with
+the ID you picked to represent the Auth provider, this ID has to match with the provider's
+`id` inside the API factory, the yaml config provider key under `auth.providers`, and the
+callback URI provider segment (you'll have to configure your IDP to handle the callback
+URI properly).
+
+```ts
+export default async function createPlugin(
+ env: PluginEnvironment,
+): Promise {
+ return await createRouter({
+ logger: env.logger,
+ config: env.config,
+ database: env.database,
+ discovery: env.discovery,
+ tokenManager: env.tokenManager,
+ providerFactories: {
+ ...defaultAuthProviderFactories,
+ /* highlight-add-next-line */
+ 'my-auth-provider': providers.oidc.create({}),
+ },
+ // ..
+})
+```
+
+### The Resolver
+
+Resolvers exist to map user identity from the 3rd party (in this case an azure IDP
+provider) to the backstage user identity, for a detailed explanation check the
+[Identity Resolver][1] page, it explains how to write a custom resolver as well as
+linking the built in resolvers of backstage.
+
+The default OIDC provider does not support SignIn, we need to add such support by
+adding a resolver for a SignIn request.
+
+The OIDC provider doesn't provide any build-in resolvers, so we'll need to define our own:
+
+```ts
+import {
+ DEFAULT_NAMESPACE,
+ /* highlight-add-next-line */
+ stringifyEntityRef,
+} from '@backstage/catalog-model';
+
+export default async function createPlugin(
+ env: PluginEnvironment,
+): Promise {
+ return await createRouter({
+ logger: env.logger,
+ config: env.config,
+ database: env.database,
+ discovery: env.discovery,
+ tokenManager: env.tokenManager,
+ providerFactories: {
+ ...defaultAuthProviderFactories,
+ 'my-auth-provider': providers.oidc.create({
+ /* highlight-add-start */
+ signIn: {
+ resolver(info, ctx) {
+ const userRef = stringifyEntityRef({
+ kind: 'User',
+ name: info.result.userinfo.sub,
+ namespace: DEFAULT_NAMESPACE,
+ });
+ return ctx.issueToken({
+ claims: {
+ sub: userRef, // The user's own identity
+ ent: [userRef], // A list of identities that the user claims ownership through
+ },
+ });
+ },
+ },
+ /* highlight-add-end */
+ }),
+ },
+ // ..
+ })
+```
+
+### The configuration
+
+Since we are using our custom OIDC Auth Provider, we need to add a configuration based
+on the provider used, in this case based on OIDC protocol (remember the 3rd party has to
+support the protocol).
+
+In this example we'll configure OIDC with `my-auth-provider`, to do so we need to
+[Create app registration][2] in the Azure console, the only difference is that the
+`http://localhost:7007/api/auth/microsoft/handler/frame` URL needs to change to
+`http://localhost:7007/api/auth/my-auth-provider/handler/frame`.
+
+Then we need to configure the env variables for the provider, based on the provider's code
+in `plugins/auth-backend/src/providers/oidc/provider.ts` we need the following variables
+in the `app-config.yaml`:
+
+```yaml title="app-config.yaml"
+auth:
+ environment: development
+ ### Providing an auth.session.secret will enable session support in the auth-backend
+ session:
+ secret: ${SESSION_SECRET}
+ providers:
+ my-auth-provider:
+ development:
+ metadataUrl: https://example.com/.well-known/openid-configuration
+ clientId: ${AUTH_MY_CLIENT_ID}
+ clientSecret: ${AUTH_MY_CLIENT_SECRET}
+```
+
+Anything enclosed in `${}` can be replaced directly in the yaml, or provided as
+environment variables, the way you obtain all these except `scope` and `prompt` is to
+check the App Registration you created:
+
+- `clientId`: Grab from the Overview page.
+- `clientSecret`: Can only be seen when creating the secret, if you lose it you'll need a
+ new secret.
+- `metadataUrl`: In Overview > Endpoints tab, grab OpenID Connect metadata document URL.
+- `authorizationUrl` and `tokenUrl`: Open the `metadataUrl` in a browser, that json will
+ hold these 2 urls somewhere in there.
+- `tokenEndpointAuthMethod`: Don't define it, use the default unless you know what it does.
+- `tokenSignedResponseAlg`: Don't define it, use the default unless you know what it does.
+- `scope`: Only used if we didn't specify `defaultScopes` in the provider's factory,
+ basically the same thing.
+- `prompt`: Recommended to use `auto` so the browser will request login to the IDP if the
+ user has no active session.
+
+Note that for the time being, any change in this yaml file requires a restart of the app,
+also you need to have the `session.secret` part to use OIDC (some other providers might
+need this as well) to support user sessions.
+
+### The Sign In provider
+
+The last step is to add the provider to the `SignInPage` so users can sign in with your
+new provider, please follow the [Sign In Configuration][3] docs, here's where you import
+and use the API reference we defined earlier.
+
+## Note
+
+These steps apply to most if not all the providers, including custom providers, the main
+difference between different providers will be the contents of the API factory, the code
+in the Auth Provider Factory, the resolver, and the different variables each provider
+needs in the YAML config or env variables.
+
+[1]: https://backstage.io/docs/auth/identity-resolver
+[2]: https://backstage.io/docs/auth/microsoft/provider#create-an-app-registration-on-azure
+[3]: https://backstage.io/docs/auth/#sign-in-configuration
+[4]: https://backstage.io/docs/api/utility-apis
diff --git a/docs/auth/oidc.md b/docs/auth/oidc.md
index 98d0e63255..4040a272b4 100644
--- a/docs/auth/oidc.md
+++ b/docs/auth/oidc.md
@@ -4,6 +4,13 @@ title: OIDC provider from scratch
description: This section shows how to use an OIDC provider from scratch, same steps apply for custom providers.
---
+:::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). If you are still on the old backend
+system, you may want to read [its own article](./oidc--old.md)
+instead, and [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
This section shows how to use an OIDC provider from scratch, same steps apply for custom
providers. Please note these steps are for using a provider, not how to implement one,
and Backstage recommends creating custom providers specific to the IDP, so we'll use a
@@ -13,7 +20,7 @@ to your provider name.
## Summary
To add providers not enabled by default like OIDC, we need to follow some steps, we
-assume you already have a sign in page to which we'll add the provider so users can
+assume you already have a sign-in page to which we'll add the provider so users can
sign in through the provider. In simple steps here's how you enable the provider:
- Create an API reference to identify the provider.
@@ -133,85 +140,86 @@ The Auth Provider is responsible for authenticating with the 3rd party service,
us back the credentials, here's where you pick which protocol to use, be it Auth0, OAuth2,
OIDC, SAML or any other that your 3rd party IDP provider supports.
-For this example we'll use OIDC, we pass a factory to the `providerFactories` object with
-the ID you picked to represent the Auth provider, this ID has to match with the provider's
-`id` inside the API factory, the yaml config provider key under `auth.providers`, and the
-callback URI provider segment (you'll have to configure your IDP to handle the callback
-URI properly).
-
-```ts
-export default async function createPlugin(
- env: PluginEnvironment,
-): Promise {
- return await createRouter({
- logger: env.logger,
- config: env.config,
- database: env.database,
- discovery: env.discovery,
- tokenManager: env.tokenManager,
- providerFactories: {
- ...defaultAuthProviderFactories,
- /* highlight-add-next-line */
- 'my-auth-provider': providers.oidc.create({}),
- },
- // ..
-})
-```
-
### The Resolver
Resolvers exist to map user identity from the 3rd party (in this case an azure IDP
-provider) to the backstage user identity, for a detailed explanation check the
-[Identity Resolver][1] page, it explains how to write a custom resolver as well as
-linking the built in resolvers of backstage.
+provider) to the backstage user identity.
-The default OIDC provider does not support SignIn, we need to add such support by
-adding a resolver for a SignIn request.
+The default OIDC provider has built-in resolvers, here is how you configure them:
-The OIDC provider doesn't provide any build-in resolvers, so we'll need to define our own:
-
-```ts
-import {
- DEFAULT_NAMESPACE,
- /* highlight-add-next-line */
- stringifyEntityRef,
-} from '@backstage/catalog-model';
-
-export default async function createPlugin(
- env: PluginEnvironment,
-): Promise {
- return await createRouter({
- logger: env.logger,
- config: env.config,
- database: env.database,
- discovery: env.discovery,
- tokenManager: env.tokenManager,
- providerFactories: {
- ...defaultAuthProviderFactories,
- 'my-auth-provider': providers.oidc.create({
- /* highlight-add-start */
- signIn: {
- resolver(info, ctx) {
- const userRef = stringifyEntityRef({
- kind: 'User',
- name: info.result.userinfo.sub,
- namespace: DEFAULT_NAMESPACE,
- });
- return ctx.issueToken({
- claims: {
- sub: userRef, // The user's own identity
- ent: [userRef], // A list of identities that the user claims ownership through
- },
- });
- },
- },
- /* highlight-add-end */
- }),
- },
- // ..
- })
+```yaml title="app-config.yaml"
+auth:
+ environment: development
+ providers:
+ oidc:
+ development:
+ # ...
+ signIn:
+ resolvers:
+ # typically you would pick one of these
+ - resolver: emailLocalPartMatchingUserEntityName
+ - resolver: emailMatchingUserEntityProfileEmail
```
+But you can also write a custom resolver as well, see an example below:
+
+```ts title="in packages/backend/src/index.ts"
+/* highlight-add-start */
+import { createBackendModule } from '@backstage/backend-plugin-api';
+import {
+ authProvidersExtensionPoint,
+ createOAuthProviderFactory,
+} from '@backstage/plugin-auth-node';
+import { oidcAuthenticator } from '@backstage/plugin-auth-backend-module-oidc-provider';
+
+const myAuthProviderModule = createBackendModule({
+ // This ID must be exactly "auth" because that's the plugin it targets
+ pluginId: 'auth',
+ // This ID must be unique, but can be anything
+ moduleId: 'my-auth-provider',
+ register(reg) {
+ reg.registerInit({
+ deps: { providers: authProvidersExtensionPoint },
+ async init({ providers }) {
+ providers.registerProvider({
+ // This ID must match the actual provider config, e.g. addressing
+ // auth.providers.azure means that this must be "azure".
+ providerId: 'my-auth-provider',
+ // Use createProxyAuthProviderFactory instead if it's one of the proxy
+ // based providers rather than an OAuth based one
+ factory: createOAuthProviderFactory({
+ // For more info about authenticators please see https://backstage.io/docs/auth/add-auth-provider/#adding-an-oauth-based-provider
+ authenticator: oidcAuthenticator,
+ async signInResolver(info, ctx) {
+ const userRef = stringifyEntityRef({
+ kind: 'User',
+ name: info.result.userinfo.sub,
+ namespace: DEFAULT_NAMESPACE,
+ });
+ return ctx.issueToken({
+ claims: {
+ sub: userRef, // The user's own identity
+ ent: [userRef], // A list of identities that the user claims ownership through
+ },
+ });
+ },
+ }),
+ });
+ },
+ });
+ },
+});
+/* highlight-add-end */
+//...
+backend.add(import('@backstage/plugin-auth-backend'));
+/* highlight-add-next-line */
+backend.add(myAuthProviderModule);
+//...
+```
+
+For a more a detailed explanation about resolvers check the
+[Identity Resolver][1] page.
+
### The configuration
Since we are using our custom OIDC Auth Provider, we need to add a configuration based
diff --git a/docs/backend-system/architecture/02-backends.md b/docs/backend-system/architecture/02-backends.md
index 3386cff3f7..4afdeea560 100644
--- a/docs/backend-system/architecture/02-backends.md
+++ b/docs/backend-system/architecture/02-backends.md
@@ -24,7 +24,7 @@ const backend = createBackend();
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
// Features can also be installed using an explicit reference
-backend.add(scaffolderPlugin());
+backend.add(scaffolderPlugin);
// Start up the backend
backend.start();
diff --git a/docs/backend-system/architecture/03-services.md b/docs/backend-system/architecture/03-services.md
index 95e3d5305a..ad437e471e 100644
--- a/docs/backend-system/architecture/03-services.md
+++ b/docs/backend-system/architecture/03-services.md
@@ -38,7 +38,7 @@ export const fooServiceRef = createServiceRef({
The `fooServiceRef` that we create above should be exported, and can then be used to declare a dependency on the `FooService` interface and receive an implementation of it at runtime.
-When creating a service reference you need to give it an ID. This ID needs to be globally unique, and should generally be of the format `'.'`. For more naming patterns surrounding services, see the [naming patterns](./07-naming-patterns.md#services) page.
+When creating a service reference you need to give it an ID. This ID needs to be globally unique, and should generally be of the format `'.'`. For more naming patterns surrounding services, see the [naming patterns](./08-naming-patterns.md#services) page.
A note on naming: the frontend and backend systems intentionally use the separate names "APIs" and "Services" for concepts that are quite similar. This is to avoid confusion between the two, both in documentation and discussion, but also in code. While the two systems are quite similar, they are not identical, and they can't be used interchangeably.
@@ -197,7 +197,7 @@ When declaring a service factory you may also want to make the export the buildi
```ts
export class DefaultFooService {
static create(options: { transform: (foo: string) => string }) {
- return new DefaultFooService(options.transform ?? (foo) => foo);
+ return new DefaultFooService(options.transform ?? ((foo) => foo);
}
private constructor(private readonly transform: (foo: string) => string) {}
diff --git a/docs/backend-system/architecture/04-plugins.md b/docs/backend-system/architecture/04-plugins.md
index af59c2a48a..f2a6b856b9 100644
--- a/docs/backend-system/architecture/04-plugins.md
+++ b/docs/backend-system/architecture/04-plugins.md
@@ -10,7 +10,7 @@ Plugins provide the actual base features of a Backstage backend. Each plugin ope
## Defining a Plugin
-Plugins are created using the `createBackendPlugin` function, and should typically be exported from a plugin package. All plugins must have an ID and a `register` method, where the ID matches the plugin ID in the package name, without the `-backend` suffix. See also the [dedicated section](./07-naming-patterns.md) about proper naming patterns.
+Plugins are created using the `createBackendPlugin` function, and should typically be exported from a plugin package. All plugins must have an ID and a `register` method, where the ID matches the plugin ID in the package name, without the `-backend` suffix. See also the [dedicated section](./08-naming-patterns.md) about proper naming patterns.
```ts
// plugins/example-backend/src/plugin.ts
@@ -41,7 +41,7 @@ The `createBackendPlugin` return value is exported as `examplePlugin`, which is
```ts
import { examplePlugin } from 'backstage-plugin-example-backend';
-backend.add(examplePlugin());
+backend.add(examplePlugin);
```
By convention every plugin package should export its plugin instance as the default export from the package:
diff --git a/docs/backend-system/architecture/05-extension-points.md b/docs/backend-system/architecture/05-extension-points.md
index 4b7f893f0b..12c4ec75f5 100644
--- a/docs/backend-system/architecture/05-extension-points.md
+++ b/docs/backend-system/architecture/05-extension-points.md
@@ -78,7 +78,7 @@ Another pattern that can be used is a type of singleton pattern where the extens
```ts
interface ScaffolderTaskRunnerExtensionPoint {
- setTaskRunner(taskRunner: TaskRunner): void;
+ setTaskRunner(taskRunner: SchedulerServiceTaskRunner): void;
}
```
diff --git a/docs/backend-system/architecture/06-modules.md b/docs/backend-system/architecture/06-modules.md
index eb00e737e3..010f36109c 100644
--- a/docs/backend-system/architecture/06-modules.md
+++ b/docs/backend-system/architecture/06-modules.md
@@ -52,7 +52,7 @@ This allows you to install the module in your backend instance by just referenci
```ts
backend.add(
- import('backstage-plugin-catalog-backend-module-example-processor'),
+ import('@internal/backstage-plugin-catalog-backend-module-example-processor'),
);
```
diff --git a/docs/backend-system/architecture/07-feature-loaders.md b/docs/backend-system/architecture/07-feature-loaders.md
new file mode 100644
index 0000000000..cf52a1feb3
--- /dev/null
+++ b/docs/backend-system/architecture/07-feature-loaders.md
@@ -0,0 +1,101 @@
+---
+id: feature-loaders
+title: Backend Feature Loaders
+sidebar_label: Feature Loaders
+# prettier-ignore
+description: Backend feature loaders
+---
+
+Backend feature loaders are used to programmatically select and install features in a Backstage backend. They can service a wide range of use cases, such as enabling or disabling features based on static configuration, dynamically load features at runtime, or conditionally load features based on the state of a system.
+
+Feature loaders are defined using the `createBackendFeatureLoader` function, exported by `@backstage/backend-plugin-api`. It accepts a `loader` function, as well as an optional `deps` object for declaring service dependencies. Unlike plugins and modules, feature loaders are limited to only depending on root-scoped services, but that still allows access to for example the [root config](../core-services/root-config.md) and [root logger](../core-services/root-logger.md) services.
+
+The `loader` function can be defined in many different ways, with the main requirement being that it returns a list of `BackendFeature`s in some form. A backend feature is the kind of object that you can pass to `backend.add(...)`, for example services factories, plugins, modules, or even other feature loaders. The `loader` function can be synchronous or asynchronous, and can be defined as a generator function to allow for more complex logic.
+
+## Examples
+
+The following are a few example of how feature loaders can be used:
+
+### Simple list of features
+
+A feature loader can simply return a list of features to be installed:
+
+```ts
+export default createBackendFeatureLoader({
+ loader() {
+ return [
+ import('@backstage/plugin-search-backend/alpha'),
+ import('@backstage/plugin-search-backend-module-catalog/alpha'),
+ import('@backstage/plugin-search-backend-module-explore/alpha'),
+ import('@backstage/plugin-search-backend-module-techdocs/alpha'),
+ ];
+ },
+});
+```
+
+It can also encapsulate a collection of custom features:
+
+```ts
+export default createBackendFeatureLoader({
+ // Async loader is fine too
+ async loader() {
+ return [
+ createBackendPlugin({
+ ...
+ }),
+ createBackendModule({
+ ...
+ }),
+ ]
+ },
+});
+```
+
+### Conditional loading
+
+A feature loader can access root-scoped services, such as the config service. This allows for conditional loading of features based on configuration. It is often convenient to use a generator function for this purpose:
+
+```ts
+export default createBackendFeatureLoader({
+ deps: {
+ config: coreServices.rootConfig,
+ },
+ // The `*` in front of the function name makes it a generator function
+ *loader({ config }) {
+ // Example of a custom config flag to enable search
+ if (config.getOptionalString('customFeatureToggle.search')) {
+ yield import('@backstage/plugin-search-backend/alpha');
+ yield import('@backstage/plugin-search-backend-module-catalog/alpha');
+ yield import('@backstage/plugin-search-backend-module-explore/alpha');
+ yield import('@backstage/plugin-search-backend-module-techdocs/alpha');
+ }
+ },
+});
+```
+
+### Dynamic logic
+
+A feature loader can also be asynchronous, and for example fetch data from an external source to determine which features to load:
+
+```ts
+export default createBackendFeatureLoader({
+ // The `async *` in front of the function name makes it an async generator function.
+ async *loader() {
+ const localMetadata = await readMetadataFromDisk();
+
+ if (localMetadata.enableSearch) {
+ yield import('@backstage/plugin-search-backend/alpha');
+ yield import('@backstage/plugin-search-backend-module-catalog/alpha');
+
+ const remoteMetadata = await fetchMetadata();
+
+ if (remoteMetadata.enableExplore) {
+ yield import('@backstage/plugin-search-backend-module-explore/alpha');
+ }
+ if (remoteMetadata.enableTechDocs) {
+ yield import('@backstage/plugin-search-backend-module-techdocs/alpha');
+ }
+ }
+ },
+});
+```
diff --git a/docs/backend-system/architecture/07-naming-patterns.md b/docs/backend-system/architecture/08-naming-patterns.md
similarity index 100%
rename from docs/backend-system/architecture/07-naming-patterns.md
rename to docs/backend-system/architecture/08-naming-patterns.md
diff --git a/docs/backend-system/building-backends/08-migrating.md b/docs/backend-system/building-backends/08-migrating.md
index 67104c7ba9..188cd4f26f 100644
--- a/docs/backend-system/building-backends/08-migrating.md
+++ b/docs/backend-system/building-backends/08-migrating.md
@@ -431,7 +431,7 @@ catalog:
/* highlight-add-end */
```
-#### Github
+#### GitHub
For `GithubDiscoveryProcessor`, `GithubMultiOrgReaderProcessor` and `GithubOrgReaderProcessor`, first migrate to the equivalent Entity Provider.
@@ -445,7 +445,7 @@ backend.add(import('@backstage/plugin-catalog-backend-module-github/alpha'));
```
If you were providing a `schedule` in code, this now needs to be set via configuration.
-All other Github configuration in `app-config.yaml` remains the same.
+All other GitHub configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
@@ -675,7 +675,7 @@ backend.add(
import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'),
);
/* highlight-add-next-line */
-backend.add(catalogModuleCustomExtensions());
+backend.add(catalogModuleCustomExtensions);
```
This also requires that you have a dependency on the corresponding node package,
@@ -762,9 +762,9 @@ const otherPluginModuleCustomExtensions = createBackendModule({
const backend = createBackend();
backend.add(import('@backstage/plugin-events-backend/alpha'));
/* highlight-add-next-line */
-backend.add(eventsModuleCustomExtensions());
+backend.add(eventsModuleCustomExtensions);
/* highlight-add-next-line */
-backend.add(otherPluginModuleCustomExtensions());
+backend.add(otherPluginModuleCustomExtensions);
```
Here we've placed the module directly in the backend index file just to get
@@ -841,7 +841,7 @@ const scaffolderModuleCustomExtensions = createBackendModule({
const backend = createBackend();
backend.add(import('@backstage/plugin-scaffolder-backend/alpha'));
/* highlight-add-next-line */
-backend.add(scaffolderModuleCustomExtensions());
+backend.add(scaffolderModuleCustomExtensions);
```
This also requires that you have a dependency on the corresponding node package,
diff --git a/docs/backend-system/building-plugins-and-modules/01-index.md b/docs/backend-system/building-plugins-and-modules/01-index.md
index 379ce19587..db78faaced 100644
--- a/docs/backend-system/building-plugins-and-modules/01-index.md
+++ b/docs/backend-system/building-plugins-and-modules/01-index.md
@@ -68,7 +68,7 @@ that's specific to your plugin. In the example above, the logger might tag
messages with your plugin ID, and the HTTP router might prefix API routes with
your plugin ID, depending on the implementation used.
-See [the article on naming patterns](../architecture/07-naming-patterns.md) for
+See [the article on naming patterns](../architecture/08-naming-patterns.md) for
details on how to best choose names/IDs for plugins and related backend system
items.
@@ -124,7 +124,7 @@ export const catalogModuleExampleCustomProcessor = createBackendModule({
export { catalogModuleExampleCustomProcessor as default } from './module';
```
-See [the article on naming patterns](../architecture/07-naming-patterns.md) for
+See [the article on naming patterns](../architecture/08-naming-patterns.md) for
details on how to best choose names/IDs for modules and related backend system
items.
@@ -159,8 +159,7 @@ The same applies for modules that perform their own migrations and interact with
the database. They will run on the same logical database instance as the target
plugin, so care must be taken to choose table names that do not risk colliding
with those of the plugin. A recommended naming pattern is `__`, for example the `@backstage/backend-tasks` package creates
-tables named `backstage_backend_tasks__`. If you use the default [`Knex` migration facilities](https://knexjs.org/guide/migrations.html), you will also
+name>__`, for example the scheduler core service creates tables named `backstage_backend_tasks__`, because it used to be the case that the service lived in a package named `@backstage/backend-tasks`. Things have since moved around a bit, but the effects of the rule are still visible. If you use the default [`Knex` migration facilities](https://knexjs.org/guide/migrations.html), you will also
want to make sure that it uses similarly prefixed migration state tables for its
internal bookkeeping needs, so they do not collide with the main ones used by
the plugin itself. You can do this as follows:
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 addcc72c84..38107f0242 100644
--- a/docs/backend-system/building-plugins-and-modules/02-testing.md
+++ b/docs/backend-system/building-plugins-and-modules/02-testing.md
@@ -31,17 +31,20 @@ import { myPlugin } from './plugin.ts';
describe('myPlugin', () => {
it('can serve values from config', async () => {
const fakeConfig = { myPlugin: { value: 7 } };
+ const mockLogger = mockServices.logger.mock();
const { server } = await startTestBackend({
features: [
myPlugin(),
mockServices.rootConfig.factory({ data: fakeConfig }),
+ mockLogger,
],
});
const response = await request(server).get('/api/example/get-value');
expect(response.status).toBe(200);
expect(response.body).toEqual({ value: 7 });
+ expect(mockLogger.info).toHaveBeenCalledWith('Starting myPlugin');
});
});
```
@@ -53,6 +56,76 @@ The returned server also has a `port()` method which returns the dynamically
bound listening port. You can use this to perform lower level network
interactions with the running test service.
+### mock services
+
+The [`mockServices`](https://backstage.io/docs/reference/backend-test-utils.mockservices) object from `@backstage/backend-test-utils` provides service factory functions, and mocks for all core services that you can use to verify interactions between plugin and services.
+
+All mock services provide a factory function that is sufficient for most tests. Here's an example:
+
+```ts
+const fakeConfig = { myPlugin: { value: 7 } };
+const { server } = await startTestBackend({
+ features: [
+ // Will provide access to the default urlReaders automatically.
+ mockServices.urlReader.factory(),
+ // Some factories accept options, in this example we provide some fake config.
+ mockServices.rootConfig.factory({ data: fakeConfig }),
+ ],
+});
+```
+
+There might be situations where you want to mock a service implementation to verify interactions, in those cases you can use the `mock` function to get a mock object that you can interact with. Here's an example:
+
+```ts
+import { mockServices, startTestBackend } from '@backstage/backend-test-utils';
+import { myPlugin } from './plugin.ts';
+
+describe('myPlugin', () => {
+ it('should call use UrlReader', async () => {
+ const mockReader = mockServices.urlReader.mock();
+
+ await startTestBackend({
+ features: [myPlugin(), mockReader],
+ });
+
+ expect(mockReader.readUrl).toHaveBeenCalledWith('https://backstage.io');
+ });
+
+ it('should call use UrlReader again', async () => {
+ const partialImpl = jest.fn();
+ await startTestBackend({
+ features: [
+ myPlugin(),
+ // You could also supply partial implementations to the mock function.
+ mockServices.urlReader.mock({ readUrl: partialImpl }),
+ ],
+ });
+ expect(partialImpl).toHaveBeenCalledWith('https://backstage.io');
+ });
+});
+```
+
+Available services:
+
+- [`auth`](https://backstage.io/docs/reference/backend-test-utils.mockservices.auth/)
+- [`cache`](https://backstage.io/docs/reference/backend-test-utils.mockservices.cache/)
+- [`database`](https://backstage.io/docs/reference/backend-test-utils.mockservices.database/)
+- [`discovery`](https://backstage.io/docs/reference/backend-test-utils.mockservices.discovery/)
+- [`events`](https://backstage.io/docs/reference/backend-test-utils.mockservices.events/)
+- [`httpAuth`](https://backstage.io/docs/reference/backend-test-utils.mockservices.httpAuth/)
+- [`httpRouter`](https://backstage.io/docs/reference/backend-test-utils.mockservices.httpRouter/)
+- [`lifecycle`](https://backstage.io/docs/reference/backend-test-utils.mockservices.lifecycle/)
+- [`logger`](https://backstage.io/docs/reference/backend-test-utils.mockservices.logger/)
+- [`permissions`](https://backstage.io/docs/reference/backend-test-utils.mockservices.permissions/)
+- [`rootConfig`](https://backstage.io/docs/reference/backend-test-utils.mockservices.rootConfig/)
+- [`rootHealth`](https://backstage.io/docs/reference/backend-test-utils.mockservices.rootHealth/)
+- [`rootHttpRouter`](https://backstage.io/docs/reference/backend-test-utils.mockservices.rootHttpRouter/)
+- [`rootLifecycle`](https://backstage.io/docs/reference/backend-test-utils.mockservices.rootLifecycle/)
+- [`rootLogger`](https://backstage.io/docs/reference/backend-test-utils.mockservices.rootLogger/)
+- [`scheduler`](https://backstage.io/docs/reference/backend-test-utils.mockservices.scheduler/)
+- [`urlReader`](https://backstage.io/docs/reference/backend-test-utils.mockservices.urlReader/)
+- [`userInfo`](https://backstage.io/docs/reference/backend-test-utils.mockservices.userInfo/)
+
## Testing Remote Service Interactions
If your backend plugin or service interacts with external services using HTTP
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 699852c494..8b2ea17de8 100644
--- a/docs/backend-system/building-plugins-and-modules/08-migrating.md
+++ b/docs/backend-system/building-plugins-and-modules/08-migrating.md
@@ -255,3 +255,67 @@ backend.add(
Checkout the [custom service implementations](https://backstage.io/docs/backend-system/building-backends/index#custom-service-implementations) documentation and also the [core service configurations](https://backstage.io/docs/backend-system/core-services/index) page in case you'd like to create your own custom mock factory for one or more services.
3. Now you can finally start your plugin locally by running `yarn start` from the root folder of your plugin.
+
+## Remove support for the old backend system
+
+Given that you have followed the guide above to export your new backend plugin the steps to deprecate and remove the old backend plugin are the following:
+
+### Deprecate public exports other than the default export
+
+First of all make sure that `createRouter` and `routerOptions` are marked as deprecated to give users time and an indication to migrate to the new system (we recommend deprecating in one release and remove the deprecates in the following one).
+This is done by adding a `@deprecated` annotation to the legacy exports. It's worth noting that the plugin can continue using `createRouter` internally but it should not be exported as part of public api. If you are reusing the create router and relative imports in migrated plugins, ensure that you refactor the internal code to remove deprecated imports once the `createRouter` export gets deleted. It is recommended that you avoid the use of `@backstage/backend-common` and `@backstage/backend-tasks` in migrated plugins as they will be deleted together with the ending of support for the legacy system. There are instructions in most of the deprecated imports about how to stop using them once you have migrated to the new backend system.
+
+```ts title="@backstage/plugin-kubernetes-backend/src/service/router.ts"
+import { KubernetesBuilder } from './KubernetesBuilder';
+
+/**
+* @public
+// highlight-add-next-line
+* @deprecated Please migrate to the new backend system.
+*/
+export interface RouterOptions {
+ logger: Logger;
+ config: Config;
+ catalogApi: CatalogApi;
+ clusterSupplier?: KubernetesClustersSupplier;
+ discovery: PluginEndpointDiscovery;
+}
+
+/**
+* @public
+// highlight-add-next-line
+* @deprecated Please migrate to the new backend system.
+*/
+export async function createRouter(
+ options: RouterOptions,
+): Promise {
+ const { router } = await KubernetesBuilder.createBuilder(options)
+ .setClusterSupplier(options.clusterSupplier)
+ .build();
+ return router;
+}
+```
+
+If your plugin contains an `api-report.md` file make sure to run `yarn build:api-reports` afterwards.
+It's recommended to inspect the api report and look for other exports other than the new backend plugin, they should most likely also be deprecated as plugins in the new backend system are extended using extension points and not directly by passing options. Any type of builder or helper methods that are used together with the backend plugin should be moved to a library package specifically for that plugin (e.g. a `plugin-kubernetes-backend-node` package, see the [package roles](https://backstage.io/docs/tooling/cli/build-system/#package-roles) documentation for more details).
+
+After removals of deprecations all your `index.ts` should contain is just the default export:
+
+```ts title="@backstage/plugin-kubernetes-backend/src/index.ts"
+export { kubernetesPlugin as default } from './plugin';
+```
+
+### Deprecate the `/alpha` subpath if it exists
+
+In cases where you previously supported the new backend system using an `alpha` export, please deprecate the alpha exports and re-export them from `index.ts`.
+
+```ts title="@backstage/-backend/src/alpha.ts"
+/**
+* @alpha
+// highlight-add-next-line
+* @deprecated Please import from the root path instead.
+*/
+export default createPlugin({
+ //...
+});
+```
diff --git a/docs/backend-system/core-services/auth.md b/docs/backend-system/core-services/auth.md
index f1243f11fe..8a3a63805d 100644
--- a/docs/backend-system/core-services/auth.md
+++ b/docs/backend-system/core-services/auth.md
@@ -73,7 +73,8 @@ router.get('/makes-calls', async (req, res) => {
onBehalfOf: await httpAuth.credentials(req),
targetPluginId: 'catalog',
});
- // make a call using the token
+});
+// make a call using the token
```
This ensures that the original caller and their associated permissions are
@@ -106,7 +107,7 @@ objects. For example checking what type of principal (caller type - e.g. user or
service) they represent. For example:
```ts
-if (auth.isPrincipal(credentials, 'user)) {
+if (auth.isPrincipal(credentials, 'user')) {
// In here, the TypeScript type of the credentials object has been properly
// narrowed to `BackstageCredentials` so you can
// access its specific properties such as `credentials.principal.userEntityRef`.
diff --git a/docs/backend-system/core-services/database.md b/docs/backend-system/core-services/database.md
index e083f0b44d..2a172cbe46 100644
--- a/docs/backend-system/core-services/database.md
+++ b/docs/backend-system/core-services/database.md
@@ -20,7 +20,7 @@ import {
coreServices,
createBackendPlugin,
} from '@backstage/backend-plugin-api';
-import { resolvePackagePath } from '@backstage/backend-common';
+import { resolvePackagePath } from '@backstage/backend-plugin-api';
createBackendPlugin({
pluginId: 'example',
diff --git a/docs/backend-system/core-services/http-auth.md b/docs/backend-system/core-services/http-auth.md
index 05a26fc075..13938c921d 100644
--- a/docs/backend-system/core-services/http-auth.md
+++ b/docs/backend-system/core-services/http-auth.md
@@ -47,6 +47,7 @@ can do so like this:
router.get('/some-request', async (req, res) => {
const credentials = await httpAuth.credentials(req, { allow: ['user'] });
// Do something with the credentials here
+});
```
The second argument is optional, but in this example we specified that we only
diff --git a/docs/backend-system/core-services/root-http-router.md b/docs/backend-system/core-services/root-http-router.md
index b3522e1752..88a10455f5 100644
--- a/docs/backend-system/core-services/root-http-router.md
+++ b/docs/backend-system/core-services/root-http-router.md
@@ -52,19 +52,49 @@ You can configure the root HTTP Router service by passing the options to the `cr
```ts
import { rootHttpRouterServiceFactory } from '@backstage/backend-app-api';
+import { RequestHandler } from 'express';
+import morgan from 'morgan';
const backend = createBackend();
backend.add(
rootHttpRouterServiceFactory({
configure: ({ app, middleware, routes, config, logger, lifecycle }) => {
+ // Refer to https://expressjs.com/en/guide/writing-middleware.html on how to write express middleware
+ const customMiddleware = {
+ logging(): RequestHandler {
+ const middlewareLogger = logger.child({
+ type: 'incomingRequest',
+ });
+ return (req, res, next) => {
+ // Custom Logging Implementation
+ next();
+ };
+ },
+ // Default logging middleware uses the [morgan](https://github.com/expressjs/morgan) middleware which you can configure with custom formats.
+ morganLogging(): RequestHandler {
+ const middlewareLogger = logger.child({
+ type: 'incomingRequest',
+ });
+ const customMorganFormat =
+ '[:date[clf]] ":method :url HTTP/:http-version" :status ":user-agent"';
+ return morgan(customMorganFormat, {
+ stream: {
+ write(message: string) {
+ logger.info(message.trimEnd());
+ },
+ },
+ });
+ },
+ };
+
// the built in middleware is provided through an option in the configure function
app.use(middleware.helmet());
app.use(middleware.cors());
app.use(middleware.compression());
// you can add you your own middleware in here
- app.use(custom.logging());
+ app.use(customMiddleware.logging());
// here the routes that are registered by other plugins
app.use(routes);
diff --git a/docs/backend-system/core-services/root-logger.md b/docs/backend-system/core-services/root-logger.md
index 733b7b8277..36bb276920 100644
--- a/docs/backend-system/core-services/root-logger.md
+++ b/docs/backend-system/core-services/root-logger.md
@@ -17,7 +17,8 @@ The following example is how you can override the root logger service to add add
```ts
import { coreServices } from '@backstage/backend-plugin-api';
-import { WinstonLogger } from '@backstage/backend-app-api';
+import { WinstonLogger } from '@backstage/backend-defaults/rootLogger';
+import { createConfigSecretEnumerator } from '@backstage/backend-defaults/rootConfig';
const backend = createBackend();
@@ -43,6 +44,12 @@ backend.add(
transports: [new transports.Console()],
});
+ const secretEnumerator = await createConfigSecretEnumerator({
+ logger,
+ });
+ logger.addRedactions(secretEnumerator(config));
+ config.subscribe?.(() => logger.addRedactions(secretEnumerator(config)));
+
return logger;
},
}),
diff --git a/docs/backend-system/core-services/url-reader.md b/docs/backend-system/core-services/url-reader.md
index b9616a029e..242ffd2307 100644
--- a/docs/backend-system/core-services/url-reader.md
+++ b/docs/backend-system/core-services/url-reader.md
@@ -45,3 +45,114 @@ createBackendPlugin({
},
});
```
+
+## Providing custom URL readers
+
+You can also create an internal or bespoke reader and provide it to the backend using a service factory. The following example shows how to create a custom URL reader and provide it to the backend.
+
+```ts title="packages/backend/src/index.ts"
+import { createBackend } from '@backstage/backend-defaults';
+import {
+ ReaderFactory,
+ urlReaderFactoriesServiceRef,
+} from '@backstage/backend-defaults/urlReader';
+import {
+ createServiceFactory,
+ UrlReaderService,
+} from '@backstage/backend-plugin-api';
+import { Config } from '@backstage/config';
+
+class CustomUrlReader implements UrlReaderService {
+ static factory: ReaderFactory = ({ config, treeResponseFactory }) => {
+ const reader = new CustomUrlReader(config);
+ const predicate = (url: URL) => url.host === 'myCustomDomain';
+ return [{ reader, predicate }];
+ };
+
+ constructor(private readonly config: Config) {}
+ // implementations of read, readTree and search methods skipped for this example
+}
+
+const customReader = createServiceFactory({
+ service: urlReaderFactoriesServiceRef,
+ deps: {},
+ async factory() {
+ return CustomUrlReader.factory;
+ },
+});
+
+const backend = createBackend();
+// backend.add() of other plugins and modules excluded
+backend.add(customReader);
+```
+
+## Writing URL Readers
+
+We want to make sure all URL Readers behave in the same way. Hence if possible,
+all the methods of the `UrlReaderService` interface should be implemented. However it
+is okay to start by implementing just one of them and creating issues for the
+remaining ones.
+
+You can choose to make new URL Readers open source if the use case is beneficial to other users. Either as its own package or by updating the
+[`default` factory](https://github.com/backstage/backstage/blob/ce2ca68f07ad3334401d3277b989bf145b728a64/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaders.ts#L82-L102)
+method of URL Readers. It's recommended to create an issue in the Backstage repository to discuss the use case and get feedback before starting the implementation of a new core URL Reader.
+
+Here are some general guidelines for writing URL Readers
+
+#### `readUrl`
+
+`readUrl` method expects a user-friendly URL, something which can be copied from
+the browser naturally when a person is browsing the provider in their browser.
+
+- ✅ Valid URL :
+ `https://github.com/backstage/backstage/blob/master/ADOPTERS.md`
+- ❌ Not a valid URL :
+ `https://raw.githubusercontent.com/backstage/backstage/master/ADOPTERS.md`
+- ❌ Not a valid URL : `https://github.com/backstage/backstage/ADOPTERS.md`
+
+Upon receiving the URL, `readUrl` converts the user-friendly URL into an API URL
+which can be used to request the provider's API.
+
+`readUrl` then makes an authenticated request to the provider API and returns the response containing the file's contents and `ETag` (if the provider supports it).
+
+#### `readTree`
+
+`readTree` method also expects user-friendly URLs similar to `read` but the URL
+should point to a tree (could be the root of a repository or even a
+sub-directory).
+
+- ✅ Valid URL : `https://github.com/backstage/backstage`
+- ✅ Valid URL : `https://github.com/backstage/backstage/blob/master`
+- ✅ Valid URL : `https://github.com/backstage/backstage/blob/master/docs`
+
+Using the provider's API documentation, find out an API endpoint which can be
+used to download either a zip or a tarball. You can download the entire tree
+(e.g. a repository) and filter out in case the user is expecting only a
+sub-tree. But some APIs are smart enough to accept a path and return only a
+sub-tree in the downloaded archive.
+
+#### `search`
+
+`search` method expects a glob pattern of a URL and returns a list of files
+matching the query.
+
+- ✅ Valid URL :
+ `https://github.com/backstage/backstage/blob/master/**/catalog-info.yaml`
+- ✅ Valid URL : `https://github.com/backstage/backstage/blob/master/**/*.md`
+- ✅ Valid URL :
+ `https://github.com/backstage/backstage/blob/master/*/package.json`
+- ✅ Valid URL : `https://github.com/backstage/backstage/blob/master/README`
+
+The core logic of `readTree` can be used here to extract all the files inside
+the tree and return the files matching the pattern in the `url`.
+
+### Caching
+
+All of the methods above support ETag based caching. If the method is called
+without an ETag, the response contains the ETag of the resource (should ideally
+forward the ETag returned by the provider). If the method is called with an
+ETag, it first compares the ETag and returns a `NotModifiedError` in case the
+resource has not been modified. This approach is very similar to the actual
+[`ETag`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) and
+[`If-None-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)
+HTTP headers.
diff --git a/docs/backend-system/core-services/user-info.md b/docs/backend-system/core-services/user-info.md
index e9d17f1dd7..73f461d1ec 100644
--- a/docs/backend-system/core-services/user-info.md
+++ b/docs/backend-system/core-services/user-info.md
@@ -47,6 +47,7 @@ additional information about that principal.
router.get('/some-request', async (req, res) => {
const credentials = await httpAuth.credentials(req, { allow: ['user'] });
const info = await userInfo.getUserInfo(credentials);
+});
```
The `userInfo` service only deals with credentials that contain user principals,
@@ -61,6 +62,8 @@ router.get('/some-request', async (req, res) => {
if (auth.isPrincipal(credentials, 'user')) {
const info = await userInfo.getUserInfo(credentials);
// ...
+ }
+});
```
The user info contains data that was extracted during sign-in for the given
diff --git a/docs/contribute/project-structure.md b/docs/contribute/project-structure.md
index 16f20a66ca..32a692e700 100644
--- a/docs/contribute/project-structure.md
+++ b/docs/contribute/project-structure.md
@@ -39,7 +39,7 @@ the code.
- [`docs/`](https://github.com/backstage/backstage/tree/master/docs) - This is
where we keep all of our documentation Markdown files. These end up on
https://backstage.io/docs. Just keep in mind that changes to the
- [`sidebars.json`](https://github.com/backstage/backstage/blob/master/microsite/sidebars.json)
+ [`sidebars.js`](https://github.com/backstage/backstage/blob/master/microsite/sidebars.js)
file may be needed as sections are added/removed.
- [`.editorconfig`](https://github.com/backstage/backstage/tree/master/.editorconfig) -
@@ -82,9 +82,11 @@ are separated out into their own folder, see further down.
package. The `backend` uses plugins to construct a working backend that the
frontend (`app`) can use.
-- [`backend-common/`](https://github.com/backstage/backstage/tree/master/packages/backend-common) -
- There are no "core" packages in the backend. Instead we have `backend-common`
- which contains helper middleware and other utils.
+- [`backend-app-api/`](https://github.com/backstage/backstage/tree/master/packages/backend-app-api) -
+ This package contains the central wiring for how to make Backstage backends.
+
+- [`backend-plugin-api/`](https://github.com/backstage/backstage/tree/master/packages/backend-plugin-api) -
+ This package contains the core APIs that are used to make Backstage backend features such as plugins and modules.
- [`catalog-client`](https://github.com/backstage/backstage/tree/master/packages/catalog-client) -
An isomorphic client to interact with the Software Catalog. Backend plugins
diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md
index d47cb248f8..1017684595 100644
--- a/docs/deployment/docker.md
+++ b/docs/deployment/docker.md
@@ -40,48 +40,57 @@ package with `yarn build:backend`.
In a CI workflow it might look something like this, from the root:
```bash
-yarn install --frozen-lockfile
+yarn install --immutable
# tsc outputs type definitions to dist-types/ in the repo root, which are then consumed by the build
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
+yarn build:backend --config ../../app-config.yaml --config ../../app-config.production.yaml
```
Once the host build is complete, we are ready to build our image. The following
`Dockerfile` is included when creating a new app with `@backstage/create-app`:
```dockerfile
-FROM node:18-bookworm-slim
+FROM node:20-bookworm-slim
+
+# Set Python interpreter for `node-gyp` to use
+ENV PYTHON=/usr/bin/python3
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends python3 g++ build-essential && \
- yarn config set python /usr/bin/python3
+ rm -rf /var/lib/apt/lists/*
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
- apt-get install -y --no-install-recommends libsqlite3-dev
+ apt-get install -y --no-install-recommends libsqlite3-dev && \
+ rm -rf /var/lib/apt/lists/*
# From here on we use the least-privileged `node` user to run the backend.
USER node
# This should create the app dir as `node`.
-# If it is instead created as `root` then the `tar` command below will
-# fail: `can't create directory 'packages/': Permission denied`.
-# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`)
-# so the app dir is correctly created as `node`.
+# If it is instead created as `root` then the `tar` command below will fail: `can't create directory 'packages/': Permission denied`.
+# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) so the app dir is correctly created as `node`.
WORKDIR /app
+# Copy files needed by Yarn
+COPY --chown=node:node .yarn ./.yarn
+COPY --chown=node:node .yarnrc.yml ./
+
# This switches many Node.js dependencies to production mode.
-ENV NODE_ENV production
+ENV NODE_ENV=production
+
+# This disables node snapshot for Node 20 to work with the Scaffolder
+ENV NODE_OPTIONS "--no-node-snapshot"
# Copy repo skeleton first, to avoid unnecessary docker cache invalidation.
# The skeleton contains the package.json of each package in the monorepo,
@@ -90,7 +99,7 @@ COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
- yarn install --frozen-lockfile --production --network-timeout 300000
+ yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)"
# This will include the examples, if you don't need these simply remove this line
COPY --chown=node:node examples ./examples
@@ -169,10 +178,12 @@ the repo root:
```dockerfile
# Stage 1 - Create yarn install skeleton layer
-FROM node:18-bookworm-slim AS packages
+FROM node:20-bookworm-slim AS packages
WORKDIR /app
COPY package.json yarn.lock ./
+COPY .yarn ./.yarn
+COPY .yarnrc.yml ./
COPY packages packages
@@ -182,57 +193,65 @@ COPY plugins plugins
RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -exec rm -rf {} \+
# Stage 2 - Install dependencies and build packages
-FROM node:18-bookworm-slim AS build
+FROM node:20-bookworm-slim AS build
+
+# Set Python interpreter for `node-gyp` to use
+ENV PYTHON=/usr/bin/python3
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends python3 g++ build-essential && \
- yarn config set python /usr/bin/python3
+ rm -rf /var/lib/apt/lists/*
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
- apt-get install -y --no-install-recommends libsqlite3-dev
+ apt-get install -y --no-install-recommends libsqlite3-dev && \
+ rm -rf /var/lib/apt/lists/*
USER node
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 ./
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
- yarn install --frozen-lockfile --network-timeout 600000
+ yarn install --immutable
COPY --chown=node:node . .
RUN yarn tsc
RUN yarn --cwd packages/backend build
-# If you have not yet migrated to package roles, use the following command instead:
-# RUN yarn --cwd packages/backend backstage-cli backend:bundle --build-dependencies
RUN mkdir packages/backend/dist/skeleton packages/backend/dist/bundle \
&& tar xzf packages/backend/dist/skeleton.tar.gz -C packages/backend/dist/skeleton \
&& tar xzf packages/backend/dist/bundle.tar.gz -C packages/backend/dist/bundle
# Stage 3 - Build the actual backend image and install production dependencies
-FROM node:18-bookworm-slim
+FROM node:20-bookworm-slim
+
+# Set Python interpreter for `node-gyp` to use
+ENV PYTHON=/usr/bin/python3
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends python3 g++ build-essential && \
- yarn config set python /usr/bin/python3
+ rm -rf /var/lib/apt/lists/*
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
- apt-get install -y --no-install-recommends libsqlite3-dev
+ apt-get install -y --no-install-recommends libsqlite3-dev && \
+ rm -rf /var/lib/apt/lists/*
# From here on we use the least-privileged `node` user to run the backend.
USER node
@@ -245,10 +264,15 @@ USER node
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/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.
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
- yarn install --frozen-lockfile --production --network-timeout 600000
+ yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)"
# Copy the built packages from the build stage
COPY --from=build --chown=node:node /app/packages/backend/dist/bundle/ ./
@@ -260,7 +284,10 @@ COPY --chown=node:node app-config*.yaml ./
COPY --chown=node:node examples ./examples
# This switches many Node.js dependencies to production mode.
-ENV NODE_ENV production
+ENV NODE_ENV=production
+
+# This disables node snapshot for Node 20 to work with the Scaffolder
+ENV NODE_OPTIONS "--no-node-snapshot"
CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"]
```
diff --git a/docs/deployment/flightcontrol.md b/docs/deployment/flightcontrol.md
index 5d59371b47..df0c9284fb 100644
--- a/docs/deployment/flightcontrol.md
+++ b/docs/deployment/flightcontrol.md
@@ -7,7 +7,7 @@ description: Deploying Backstage to AWS Fargate via 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.
-Before you begin, make sure you have a [Flightcontrol account](https://app.flightcontrol.dev/signup?ref=backstage) and a [Github account](https://github.com/login) to follow this guide.
+Before you begin, make sure you have a [Flightcontrol account](https://app.flightcontrol.dev/signup?ref=backstage) and a [GitHub account](https://github.com/login) to follow this guide.
# Creating a Dockerfile and .dockerignore
@@ -28,7 +28,7 @@ The following two code snippets demonstrate this method. The first block of code
# yarn build:backend
#
# Once the commands have been run, you can build the image using `yarn build-image`
-FROM node:18-bookworm-slim as build
+FROM node:20-bookworm-slim as build
USER node
WORKDIR /app
@@ -43,7 +43,7 @@ RUN yarn tsc
# The configuration files here should match the one you use inside the Dockerfile below.
RUN yarn build:backend --config ../../app-config.yaml
-FROM node:18-bookworm-slim
+FROM node:20-bookworm-slim
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
@@ -68,7 +68,7 @@ USER node
WORKDIR /app
# This switches many Node.js dependencies to production mode.
-ENV NODE_ENV production
+ENV NODE_ENV=production
# Copy repo skeleton first, to avoid unnecessary docker cache invalidation.
# The skeleton contains the package.json of each package in the monorepo,
diff --git a/docs/deployment/heroku.md b/docs/deployment/heroku.md
index 51d0b4b439..8961848894 100644
--- a/docs/deployment/heroku.md
+++ b/docs/deployment/heroku.md
@@ -126,7 +126,7 @@ heroku stack:set container -a
Locally run the [host build commands](https://backstage.io/docs/deployment/docker/#host-build), they must be run whenever you are going to publish a new image:
```shell
-yarn install --frozen-lockfile
+yarn install --immutable
yarn tsc
yarn build:backend --config ../../app-config.yaml --config ../../app-config.production.yaml
```
diff --git a/docs/features/kubernetes/installation.md b/docs/features/kubernetes/installation.md
index 279c9cbf3f..bd6a15a542 100644
--- a/docs/features/kubernetes/installation.md
+++ b/docs/features/kubernetes/installation.md
@@ -96,6 +96,7 @@ async function main() {
// ...
/* highlight-add-next-line */
apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv));
+}
```
That's it! The Kubernetes frontend and backend have now been added to your
diff --git a/docs/features/search/collators.md b/docs/features/search/collators.md
new file mode 100644
index 0000000000..27860bfd64
--- /dev/null
+++ b/docs/features/search/collators.md
@@ -0,0 +1,107 @@
+---
+id: collators
+title: Collators
+description: Indexing you Backstage content with Collators
+---
+
+Backstage includes 2 [collators](./concepts.md#collators) out of the box for the [Catalog](#catalog) and [TechDocs](#techdocs). There's also some from the [Backstage Community](#community-collators) too!
+
+## Catalog
+
+The Catalog collator will index all the Entities in your Catalog. It is installed by default but if you need to add it manually here's how.
+
+First we add the plugin into your backend app:
+
+```bash title="From your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-search-backend-module-catalog
+```
+
+Then add the following line:
+
+```ts title="packages/backend/src/index.ts"
+const backend = createBackend();
+
+// Other plugins...
+
+// search plugin
+backend.add(import('@backstage/plugin-search-backend/alpha'));
+
+/* highlight-add-start */
+backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha'));
+/* highlight-add-end */
+
+backend.start();
+```
+
+### Configuring the Catalog Collator
+
+The default schedule for the Catalog Collator is to run every 10 minutes, you can provide your own schedule by adding it to your config:
+
+```yaml title="app-config.yaml
+search:
+ collators:
+ catalog:
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
+ # supports cron, ISO duration, "human duration" as used in code
+ initialDelay: { seconds: 90 }
+ # supports cron, ISO duration, "human duration" as used in code
+ frequency: { hours: 6 }
+ # supports ISO duration, "human duration" as used in code
+ timeout: { minutes: 3 }
+```
+
+## TechDocs
+
+The TechDocs collator will index all the TechDocs in your Catalog. It is installed by default but if you need to add it manually here's how.
+
+First we add the plugin into your backend app:
+
+```bash title="From your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-search-backend-module-techdocs
+```
+
+Then add the following line:
+
+```ts title="packages/backend/src/index.ts"
+const backend = createBackend();
+
+// Other plugins...
+
+// search plugin
+backend.add(import('@backstage/plugin-search-backend/alpha'));
+
+/* highlight-add-start */
+backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha'));
+/* highlight-add-end */
+
+backend.start();
+```
+
+### Configuring the TechDocs Collator
+
+The default schedule for the TechDocs Collator is to run every 10 minutes, you can provide your own schedule by adding it to your config:
+
+```yaml title="app-config.yaml
+search:
+ collators:
+ techdocs:
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
+ # supports cron, ISO duration, "human duration" as used in code
+ initialDelay: { seconds: 90 }
+ # supports cron, ISO duration, "human duration" as used in code
+ frequency: { hours: 6 }
+ # supports ISO duration, "human duration" as used in code
+ timeout: { minutes: 3 }
+```
+
+## Community Collators
+
+Here are some of the known Search Collators available in from the Backstage Community:
+
+- [`@backstage/plugin-search-backend-module-explore`](https://github.com/backstage/backstage/tree/master/plugins/search-backend-module-explore): will index content from the [Explore plugin](https://github.com/backstage/community-plugins/tree/main/workspaces/explore/plugins/explore).
+- [`@backstage/plugin-search-backend-module-stack-overflow-collator`](https://github.com/backstage/backstage/tree/master/plugins/search-backend-module-stack-overflow-collator): will index content from Stack Overflow.
+- [`@backstage-community/search-backend-module-adr`](https://github.com/backstage/community-plugins/tree/main/workspaces/adr/plugins/search-backend-module-adr): will index content from the [ADR plugin](https://github.com/backstage/community-plugins/tree/main/workspaces/adr/plugins/adr).
+
+## Custom Collators
+
+To create your own collators/decorators modules, please use the [searchModuleCatalogCollator](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-catalog/src/alpha.ts#L49) as an example, we recommend that modules are separated by plugin packages (e.g. `search-backend-module-`). You can also find the available search engines and collator/decorator modules documentation in the Alpha API reports.
diff --git a/docs/features/search/concepts.md b/docs/features/search/concepts.md
index 69a7223085..a777c2f53c 100644
--- a/docs/features/search/concepts.md
+++ b/docs/features/search/concepts.md
@@ -86,7 +86,7 @@ Search chooses to completely rebuild indices on a schedule. Different collators
can be configured to refresh at different intervals, depending on how often the
source information is updated. When search indexing is distributed among multiple
backend nodes, coordination to prevent clashes is typically handled by a
-distributed `TaskRunner`.
+distributed `SchedulerServiceTaskRunner`.
### The Search Page
diff --git a/docs/features/search/getting-started.md b/docs/features/search/getting-started.md
index b2a074974f..362b7fc46d 100644
--- a/docs/features/search/getting-started.md
+++ b/docs/features/search/getting-started.md
@@ -133,79 +133,34 @@ For more information about using `Root.tsx`, please see
Add the following plugins into your backend app:
```bash title="From your Backstage root directory"
-yarn --cwd packages/backend add @backstage/plugin-search-backend @backstage/plugin-search-backend-node
+yarn --cwd packages/backend add @backstage/plugin-search-backend @backstage/plugin-search-backend-module-pg @backstage/plugin-search-backend-module-catalog @backstage/plugin-search-backend-module-techdocs
```
-Create a `packages/backend/src/plugins/search.ts` file containing the following
-code:
+Then add the following lines:
-```typescript
-import { useHotCleanup } from '@backstage/backend-common';
-import { createRouter } from '@backstage/plugin-search-backend';
-import {
- IndexBuilder,
- LunrSearchEngine,
-} from '@backstage/plugin-search-backend-node';
-import { PluginEnvironment } from '../types';
-import { DefaultCatalogCollator } from '@backstage/plugin-catalog-backend';
-import { Router } from 'express';
+```ts title="packages/backend/src/index.ts"
+const backend = createBackend();
-export default async function createPlugin(
- env: PluginEnvironment,
-): Promise {
- const searchEngine = new LunrSearchEngine({
- logger: env.logger,
- });
- const indexBuilder = new IndexBuilder({
- logger: env.logger,
- searchEngine,
- });
+// Other plugins...
- const every10MinutesSchedule = env.scheduler.createScheduledTaskRunner({
- frequency: { minutes: 10 },
- timeout: { minutes: 15 },
- initialDelay: { seconds: 3 },
- });
+/* highlight-add-start */
+// search plugin
+backend.add(import('@backstage/plugin-search-backend/alpha'));
- indexBuilder.addCollator({
- schedule: every10MinutesSchedule,
- factory: DefaultCatalogCollatorFactory.fromConfig(env.config, {
- discovery: env.discovery,
- tokenManager: env.tokenManager,
- }),
- });
+// search engines
+backend.add(import('@backstage/plugin-search-backend-module-pg/alpha'));
- const { scheduler } = await indexBuilder.build();
+// search collators
+backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha'));
+backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha'));
+/* highlight-add-end */
- scheduler.start();
- useHotCleanup(module, () => scheduler.stop());
-
- return await createRouter({
- engine: indexBuilder.getSearchEngine(),
- logger: env.logger,
- });
-}
+backend.start();
```
-Make the following modifications to your `packages/backend/src/index.ts` file:
+With the above setup Search will use the [Lunr](https://github.com/olivernn/lunr.js) in-memory Search Engine but if your have Postgres setup as your database then it will use Postgres as your Search Engine. Learn more in the [Search Engines](./search-engines.md) documentation.
-Import the `plugins/search` file you created above:
-
-```typescript
-import search from './plugins/search';
-```
-
-Set up an environment for search:
-
-```typescript
-const searchEnv = useHotMemoize(module, () => createEnv('search'));
-```
-
-Register the search service with the router:
-
-```typescript
-apiRouter.use('/search', await search(searchEnv));
-```
+The above also sets up two Collators for you - Catalog and TechDocs - which will index content from these two locations so that you can easily search them. Learn more in the [Collators documentation](./collators.md).
## Customizing Search
@@ -328,7 +283,7 @@ Backstage Search builds and maintains its index
[on a schedule](./concepts.md#the-scheduler). You can change how often the
indexes are rebuilt for a given type of document. You may want to do this if
your documents are updated more or less frequently. You can do so by configuring
-a scheduled `TaskRunner` to pass into the `schedule` value, like this:
+a scheduled `SchedulerServiceTaskRunner` to pass into the `schedule` value, like this:
```typescript {3}
const every10MinutesSchedule = env.scheduler.createScheduledTaskRunner({
@@ -347,16 +302,19 @@ indexBuilder.addCollator({
```
Note: if you are using the in-memory Lunr search engine, you probably want to
-implement a non-distributed `TaskRunner` like the following to ensure consistency
+implement a non-distributed `SchedulerServiceTaskRunner` like the following to ensure consistency
if you're running multiple search backend nodes (alternatively, you can configure
the search plugin to use a non-distributed database such as
[SQLite](../../tutorials/configuring-plugin-databases.md#postgresql-and-sqlite-3)):
```typescript
-import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks';
+import {
+ SchedulerServiceTaskRunner,
+ SchedulerServiceTaskInvocationDefinition,
+} from '@backstage/backend-plugin-api';
-const schedule: TaskRunner = {
- run: async (task: TaskInvocationDefinition) => {
+const schedule: SchedulerServiceTaskRunner = {
+ run: async (task: SchedulerServiceTaskInvocationDefinition) => {
const startRefresh = async () => {
while (!task.signal?.aborted) {
try {
diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md
index 9ce30da556..93c04c7af4 100644
--- a/docs/features/search/how-to-guides.md
+++ b/docs/features/search/how-to-guides.md
@@ -45,75 +45,6 @@ to do that in two steps.
});
```
-## How to index TechDocs documents
-
-The TechDocs plugin has supported integrations to Search, meaning that it
-provides a default collator factory ready to be used.
-
-The purpose of this guide is to walk you through how to register the
-[DefaultTechDocsCollatorFactory](https://github.com/backstage/backstage/blob/1adc2c7/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts)
-in your App, so that you can get TechDocs documents indexed.
-
-If you have been through the
-[Getting Started with Search guide](https://backstage.io/docs/features/search/getting-started),
-you should have the `packages/backend/src/plugins/search.ts` file available. If
-so, you can go ahead and follow this guide - if not, start by going through the
-getting started guide.
-
-1. Import the `DefaultTechDocsCollatorFactory` from
- `@backstage/plugin-search-backend-module-techdocs`.
-
- ```typescript
- import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-search-backend-module-techdocs';
- ```
-
-2. If there isn't an existing schedule you'd like to run the collator on, be
- sure to create it first. Something like...
-
- ```typescript
- import { Duration } from 'luxon';
-
- const every10MinutesSchedule = env.scheduler.createScheduledTaskRunner({
- frequency: Duration.fromObject({ seconds: 600 }),
- timeout: Duration.fromObject({ seconds: 900 }),
- initialDelay: Duration.fromObject({ seconds: 3 }),
- });
- ```
-
-3. Register the `DefaultTechDocsCollatorFactory` with the IndexBuilder.
-
- ```typescript
- indexBuilder.addCollator({
- schedule: every10MinutesSchedule,
- factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, {
- discovery: env.discovery,
- logger: env.logger,
- tokenManager: env.tokenManager,
- }),
- });
- ```
-
-You should now have your TechDocs documents indexed to your search engine of
-choice!
-
-If you want your users to be able to filter down to the techdocs type when
-searching, you can update your `SearchPage.tsx` file in
-`packages/app/src/components/search` by adding `techdocs` to the list of values
-of the `SearchType` component.
-
-```tsx title="packages/app/src/components/search/SearchPage.tsx"
-
-
- {/* ... */}
-
-```
-
-> Check out the documentation around [integrating search into plugins](../../plugins/integrating-search-into-plugins.md#create-a-collator) for how to create your own collator.
-
## How to customize fields in the Software Catalog or TechDocs index
Sometimes, you might want to have the ability to control which data passes into the search index
@@ -229,11 +160,14 @@ const highlightOverride = {
## How to render search results using extensions
-Extensions for search results let you customize components used to render search result items, It is possible to provide your own search result item extensions or use the ones provided by plugin packages:
+Extensions for search results let you customize components used to render search result items, It is possible to provide your own search result item extensions or use the ones provided by plugin packages.
### 1. Providing an extension in your plugin package
-Using the example below, you can provide an extension to be used as a default result item:
+> Note: You must use the `plugin.provide()` function to make a search item renderer available. Unlike rendering a list in a standard MUI Table or similar, you cannot simply provide
+> a rendering function to the ` ` component.
+
+Using the example below, you can provide an extension to be used as a search result item:
```tsx title="plugins/your-plugin/src/plugin.ts"
import { createPlugin } from '@backstage/core-plugin-api';
@@ -283,7 +217,7 @@ export const YourSearchResultListItemExtension = plugin.provide(
);
```
-Remember to export your new extension:
+Remember to export your new extension via your plugin's `index.ts` so that it is available from within your app:
```tsx title="plugins/your-plugin/src/index.ts"
export { YourSearchResultListItem } from './plugin.ts';
@@ -291,9 +225,12 @@ export { YourSearchResultListItem } from './plugin.ts';
For more details, see the [createSearchResultListItemExtension](https://backstage.io/docs/reference/plugin-search-react.createsearchresultlistitemextension) API reference.
-### 2. Using an extension in your Backstage app
+### 2. Custom search result extension in the SearchPage
-Now that you know how a search result item is provided, let's finally see how they can be used, for example, to compose a page in your application:
+Once you have exposed your item renderer via the `plugin.provide()` function, you can now override the default search item renderers and tell the `` component
+which renderers to use. Note that the order of the renderers matters! The first one that matches via its predicate function will be used.
+
+Here is an example of customizing your `SearchPage`:
```tsx title="packages/app/src/components/searchPage.tsx"
import React from 'react';
@@ -345,9 +282,38 @@ const SearchPage = () => (
export const searchPage = ;
```
-> **Important**: A default result item extension should be placed as the last child, so it can be used only when no other extensions match the result being rendered. If a non-default extension is specified, the `DefaultResultListItem` component will be used.
+> **Important**: A default result item extension (one that does not have a predicate) should be placed as the last child, so it can be used only when no other extensions match the result being rendered.
+> If a non-default extension is specified, the `DefaultResultListItem` component will be used.
-As another example, here's a search modal that renders results with extensions:
+### 2. Custom search result extension in the SidebarSearchModal
+
+You may be using the SidebarSearchModal component. In this case, you can customize the search items in this component as follows:
+
+```tsx title="packages/app/src/components/Root/Root.tsx"
+import { SidebarSearchModal } from '@backstage/plugin-search';
+...
+export const Root = ({ children }: PropsWithChildren<{}>) => {
+ const styles = useStyles();
+
+ return
+
+ ...
+ } />,
+ /* Provide an existing search item renderer */
+ } />
+ ]} />
+ ...
+
+ {children}
+ ;
+};
+```
+
+### 3. Custom search result extension in a custom SearchModal
+
+Assuming you have completely customized your SearchModal, here's an example that renders results with extensions:
```tsx title="packages/app/src/components/searchModal.tsx"
import React from 'react';
@@ -388,38 +354,3 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => (
```
There are other more specific search results layout components that also accept result item extensions, check their documentation: [SearchResultList](https://backstage.io/storybook/?path=/story/plugins-search-searchresultlist--with-result-item-extensions) and [SearchResultGroup](https://backstage.io/storybook/?path=/story/plugins-search-searchresultgroup--with-result-item-extensions).
-
-## How to migrate your backend installation to use Search together with the new backend system
-
-Recently, the Backstage maintainers [announced the new Backend System](https://backstage.io/blog/2023/02/15/backend-system-alpha). The search plugins are now migrated to support the new backend system. In this guide you will learn how to update your backend set up.
-
-In "packages/backend/index.ts", install the search plugin [1], the search engine [2], and the search collators/decorators modules [3]:
-
-```ts
-const backend = createBackend();
-// [1] adding the search plugin to the backend
-backend.add(import('@backstage/plugin-search-backend/alpha'));
-// [2] (optional) the default search engine is Lunr, if you want to extend the search backend with another search engine.
-backend.add(
- import('@backstage/plugin-search-backend-module-elasticsearch/alpha'),
-);
-// [3] extending search with collator modules to start index documents, take in optional schedule parameters.
-backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha'));
-backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha'));
-backend.add(import('@backstage/plugin-search-backend-module-explore/alpha'));
-
-backend.start();
-```
-
-To create your own collators/decorators modules, please use the [searchModuleCatalogCollator](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-catalog/src/alpha.ts#L49) as an example, we recommend that modules are separated by plugin packages (e.g. `search-backend-module-`). You can also find the available search engines and collator/decorator modules documentation in the Alpha API reports:
-
-**Search engine modules**
-
-- Postgres [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-pg/alpha-api-report.md);
-- Elasticsearch [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-elasticsearch/alpha-api-report.md).
-
-**Search collator/decorator modules**
-
-- Catalog [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-catalog/alpha-api-report.md);
-- Explore [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-explore/alpha-api-report.md);
-- TechDocs [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-techdocs/alpha-api-report.md).
diff --git a/docs/features/search/search-engines.md b/docs/features/search/search-engines.md
index 86b6244fb6..f768a9bde8 100644
--- a/docs/features/search/search-engines.md
+++ b/docs/features/search/search-engines.md
@@ -4,34 +4,31 @@ title: Search Engines
description: Choosing and configuring your search engine for Backstage
---
-Backstage supports 3 search engines by default, an in-memory engine called Lunr,
-Elasticsearch and Postgres. You can configure your own search engines by
-implementing the provided interface as mentioned in the
-[search backend documentation.](./getting-started.md#Backend)
-
-Provided search engine implementations have their own way of constructing
-queries, which may be something you want to modify. Alterations to the querying
-logic of a search engine can be made by providing your own implementation of a
-QueryTranslator interface. This modification can be done without touching
-provided search engines by using the exposed setter to set the modified query
-translator into the instance.
-
-```typescript
-const searchEngine = new LunrSearchEngine({ logger: env.logger });
-searchEngine.setTranslator(new MyNewAndBetterQueryTranslator());
-```
+Backstage supports 3 search engines by default, an in-memory engine called [Lunr](#lunr), [Postgres](#postgres)
+and [Elasticsearch](#elasticsearch).
## Lunr
-Lunr search engine is enabled by default for your backstage instance if you have
-not done additional changes to the scaffolded app.
+Lunr search engine is enabled by default for your Backstage instance if you have not done additional changes to the scaffolded app.
-Lunr can be instantiated like this:
+As Lunr is built into the Search backend plugin it can be added like this:
-```typescript
-// app/backend/src/plugins/search.ts
-const searchEngine = new LunrSearchEngine({ logger: env.logger });
-const indexBuilder = new IndexBuilder({ logger: env.logger, searchEngine });
+```bash title="From your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-search-backend
+```
+
+Then add the following line:
+
+```ts title="packages/backend/src/index.ts"
+const backend = createBackend();
+
+// Other plugins...
+
+/* highlight-add-start */
+backend.add(import('@backstage/plugin-search-backend/alpha'));
+/* highlight-add-end */
+
+backend.start();
```
:::note Note
@@ -45,34 +42,39 @@ other search engines instead.
## Postgres
-The Postgres based search engine only requires that postgres being configured as
+The Postgres based search engine only requires that Postgres being configured as
the database engine for Backstage. Therefore it targets setups that want to
avoid maintaining another external service like Elasticsearch. The search
provides decent results and performs well with ten thousands of indexed
-documents. The connection to postgres is established via the database manager
+documents. The connection to Postgres is established via the database manager
also used by other plugins.
> **Important**: The search plugin requires at least Postgres 12!
-To use the `PgSearchEngine`, make sure that you have a Postgres database
-configured and make the following changes to your backend:
+First we need to add the plugin:
-1. Add a dependency on `@backstage/plugin-search-backend-module-pg` to your
- backend's `package.json`.
-2. Initialize the search engine. It is recommended to initialize it with a
- fallback to the lunr search engine if you are running Backstage for
- development locally with SQLite:
-
-```typescript
-// In packages/backend/src/plugins/search.ts
-
-// Initialize a connection to a search engine.
-const searchEngine = (await PgSearchEngine.supported(env.database))
- ? await PgSearchEngine.fromConfig(env.config, { database: env.database })
- : new LunrSearchEngine({ logger: env.logger });
+```bash title="From your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-search-backend-module-pg
```
-## Optional Configuration
+Then add the following line:
+
+```ts title="packages/backend/src/index.ts"
+const backend = createBackend();
+
+// Other plugins...
+
+// search plugin
+backend.add(import('@backstage/plugin-search-backend/alpha'));
+
+/* highlight-add-start */
+backend.add(import('@backstage/plugin-search-backend-module-pg/alpha'));
+/* highlight-add-end */
+
+backend.start();
+```
+
+### Optional Configuration
The following is an example of the optional configuration that can be applied when using Postgres as the search backend. Currently this is mostly for just the highlight feature:
@@ -106,19 +108,32 @@ Backstage supports Elasticsearch (and OpenSearch) search engine connections,
indexing and querying out of the box. Available configuration options enable
usage of either AWS or Elastic.co hosted solutions, or a custom self-hosted solution.
-Similarly to Lunr above, Elasticsearch can be set up like this:
+Similarly to Postgres above, Elasticsearch can be set up as follows.
-```typescript
-// app/backend/src/plugins/search.ts
-const searchEngine = await ElasticSearchSearchEngine.fromConfig({
- logger: env.logger,
- config: env.config,
-});
-const indexBuilder = new IndexBuilder({ logger: env.logger, searchEngine });
+First we need to add the plugin:
+
+```bash title="From your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-search-backend-module-elasticsearch
```
-For the engine to be available, your backend package needs a dependency on
-package `@backstage/plugin-search-backend-module-elasticsearch`.
+Then add the following line:
+
+```ts title="packages/backend/src/index.ts"
+const backend = createBackend();
+
+// Other plugins...
+
+// search plugin
+backend.add(import('@backstage/plugin-search-backend/alpha'));
+
+/* highlight-add-start */
+backend.add(
+ import('@backstage/plugin-search-backend-module-elasticsearch/alpha'),
+);
+/* highlight-add-end */
+
+backend.start();
+```
Elasticsearch needs some additional configuration before it is ready to use
within your instance. The configuration options are documented in the
@@ -126,67 +141,12 @@ within your instance. The configuration options are documented in the
The underlying functionality uses either the official Elasticsearch client
version 7.x (meaning that Elasticsearch version 7 is the only one confirmed to
-be supported), or the OpenSearch client, when the `aws` or `opensearch `provider
+be supported), or the OpenSearch client, when the `aws` or `opensearch` provider
is configured.
-Should you need to create your own bespoke search experiences that require more
-than just a query translator (such as faceted search or Relay pagination), you
-can access the configuration of the search engine in order to create new
-Elasticsearch clients. The version of the client need not be the same as one
-used internally by the Elasticsearch engine plugin. For example:
+### Example configurations
-```typescript
-import { isOpenSearchCompatible } from '@backstage/plugin-search-backend-module-elasticsearch';
-import { Client as ElasticClient } from '@elastic/elasticsearch';
-import { Client as OpenSearchClient } from '@opensearch-project/opensearch';
-
-// Return an Elasticsearch client
-const esClient = searchEngine.newClient(options => {
- if (!isOpenSearchCompatible(options)) {
- return new ElasticClient(options);
- }
-
- throw new Error('Incompatible options');
-});
-
-// Return an OpenSearch client
-const osClient = searchEngine.newClient(options => {
- if (isOpenSearchCompatible(options)) {
- return new OpenSearchClient(options);
- }
-
- throw new Error('Incompatible options');
-});
-```
-
-#### Set custom index template
-
-The Elasticsearch engine gives you the ability to set a custom index template if needed.
-
-> Index templates define settings, mappings, and aliases that can be applied automatically to new indices.
-
-```typescript
-// app/backend/src/plugins/search.ts
-const searchEngine = await ElasticSearchSearchEngine.initialize({
- logger: env.logger,
- config: env.config,
-});
-
-searchEngine.setIndexTemplate({
- name: '',
- body: {
- index_patterns: [''],
- template: {
- mappings: {},
- settings: {},
- },
- },
-});
-```
-
-## Example configurations
-
-### AWS
+#### AWS
Using AWS hosted Elasticsearch the only configuration option needed is the URL
to the Elasticsearch service. The implementation assumes that environment
@@ -201,7 +161,7 @@ search:
node: https://my-backstage-search-asdfqwerty.eu-west-1.es.amazonaws.com
```
-### Elastic.co
+#### Elastic.co
Elastic Cloud hosted Elasticsearch uses a Cloud ID to determine the instance of
hosted Elasticsearch to connect to. Additionally, username and password needs to
@@ -218,7 +178,7 @@ search:
password: changeme
```
-### OpenSearch
+#### OpenSearch
OpenSearch can be self hosted for example with the [official docker image](https://hub.docker.com/r/opensearchproject/opensearch). The configuration requires only the node and authentication.
@@ -232,7 +192,7 @@ search:
password: changeme
```
-### Others
+#### Others
Other Elasticsearch instances can be connected to by using standard
Elasticsearch authentication methods and exposed URL, provided that the cluster
@@ -242,8 +202,6 @@ username/password or an API key. For more information how to create an API key,
see
[Elastic documentation on API keys](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html).
-#### Configuration examples
-
##### With username and password
```yaml
@@ -273,8 +231,6 @@ you may get an error caused by limited `thread_pool` configuration. ( `429 Too M
In this case you need to decrease the batch size to index the resources to prevent this kind of error. You can easily decrease
or increase the batch size in your `app-config.yaml` using the `batchSize` option provided for Elasticsearch configuration.
-#### Configuration example
-
**Set batch size to 100**
```yaml
diff --git a/docs/features/software-catalog/configuration.md b/docs/features/software-catalog/configuration.md
index 67382aa6ce..dff09a9397 100644
--- a/docs/features/software-catalog/configuration.md
+++ b/docs/features/software-catalog/configuration.md
@@ -31,7 +31,7 @@ catalog (`UrlReaderProcessor`), so no processor configuration is needed. This
processor _does however_ need an [integration](../../integrations/index.md) to
understand how to retrieve a given URL. For the example above, you would need to
configure the [GitHub integration](../../integrations/github/locations.md) to
-read files from github.com.
+read files from [github.com](https://github.com/).
The locations added through static configuration cannot be removed through the
catalog locations API. To remove these locations, you must remove them from the
diff --git a/docs/features/software-catalog/descriptor-format.md b/docs/features/software-catalog/descriptor-format.md
index 416eb27fbd..17bdac56e9 100644
--- a/docs/features/software-catalog/descriptor-format.md
+++ b/docs/features/software-catalog/descriptor-format.md
@@ -527,6 +527,8 @@ spec:
system: artist-engagement-portal
dependsOn:
- resource:default/artists-db
+ dependencyOf:
+ - component:default/artist-web-lookup
providesApis:
- artist-api
```
@@ -636,6 +638,17 @@ field is optional.
| [`Component`](#kind-component) | Same as this entity, typically `default` | [`dependsOn`, and reverse `dependencyOf`](well-known-relations.md#dependson-and-dependencyof) |
| [`Resource`](#kind-resource) | Same as this entity, typically `default` | [`dependsOn`, and reverse `dependencyOf`](well-known-relations.md#dependson-and-dependencyof) |
+### `spec.dependencyOf` [optional]
+
+An array of [entity references](references.md#string-references) to the
+components and resources that the component is a dependency of, e.g. `artist-web-lookup`.
+This field is optional.
+
+| [`kind`](#apiversion-and-kind-required) | Default [`namespace`](#namespace-optional) | Generated [relation](well-known-relations.md) type |
+| --------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------- |
+| [`Component`](#kind-component) | Same as this entity, typically `default` | [`dependencyOf`, and reverse `dependsOn`](well-known-relations.md#dependson-and-dependencyof) |
+| [`Resource`](#kind-resource) | Same as this entity, typically `default` | [`dependencyOf`, and reverse `dependsOn`](well-known-relations.md#dependson-and-dependencyof) |
+
## Kind: Template
The following describes the following entity kind:
@@ -1243,6 +1256,18 @@ system belongs to, e.g. `artists`. This field is optional.
| --------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------- |
| [`Domain`](#kind-domain) (default) | Same as this entity, typically `default` | [`partOf`, and reverse `hasPart`](well-known-relations.md#partof-and-haspart) |
+### `spec.type` [optional]
+
+The type of system. There is currently no enforced set of values for this field,
+so it is left up to the adopting organization to choose a nomenclature that
+matches their catalog hierarchy. This field is optional.
+
+Some common values for this field could be:
+
+- `product`
+- `service`
+- `feature-set`
+
## Kind: Domain
Describes the following entity kind:
@@ -1303,6 +1328,18 @@ which the domain is a part, e.g. `audio`. This field is optional.
| --------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------- |
| [`Domain`](#kind-domain) (default) | Same as this entity, typically `default` | [`partOf`, and reverse `hasPart`](well-known-relations.md#partof-and-haspart) |
+### `spec.type` [optional]
+
+The type of domain. There is currently no enforced set of values for this field,
+so it is left up to the adopting organization to choose a nomenclature that
+matches their catalog hierarchy. This field is optional.
+
+Some common values for this field could be:
+
+- `product-area`
+- `product-group`
+- `bundle`
+
## Kind: Location
Describes the following entity kind:
diff --git a/docs/features/software-catalog/extending-the-model.md b/docs/features/software-catalog/extending-the-model.md
index 51acd44c1d..f9d20d03c2 100644
--- a/docs/features/software-catalog/extending-the-model.md
+++ b/docs/features/software-catalog/extending-the-model.md
@@ -597,7 +597,7 @@ import {
coreServices,
createBackendModule,
} from '@backstage/backend-plugin-api';
-import { catalogModelExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
+import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
/* highlight-add-next-line */
import { FoobarEntitiesProcessor } from './providers';
diff --git a/docs/features/software-catalog/external-integrations.md b/docs/features/software-catalog/external-integrations.md
index 98fae5a95e..ff6853e1e7 100644
--- a/docs/features/software-catalog/external-integrations.md
+++ b/docs/features/software-catalog/external-integrations.md
@@ -77,28 +77,30 @@ yarn new --select backend-module --option id=catalog
The class will have this basic structure:
-```ts
-import { UrlReader } from '@backstage/backend-common';
+```ts title="plugins/catalog-backend-module-frobs/src/FrobsProvider.ts"
import { Entity } from '@backstage/catalog-model';
import {
EntityProvider,
EntityProviderConnection,
} from '@backstage/plugin-catalog-node';
-import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
+import {
+ SchedulerServiceTaskRunner,
+ UrlReaderService,
+} from '@backstage/backend-plugin-api';
/**
* Provides entities from fictional frobs service.
*/
export class FrobsProvider implements EntityProvider {
private readonly env: string;
- private readonly reader: UrlReader;
+ private readonly reader: UrlReaderService;
private connection?: EntityProviderConnection;
private taskRunner: SchedulerServiceTaskRunner;
/** [1] */
constructor(
env: string,
- reader: UrlReader,
+ reader: UrlReaderService,
taskRunner: SchedulerServiceTaskRunner,
) {
this.env = env;
@@ -114,7 +116,7 @@ export class FrobsProvider implements EntityProvider {
/** [3] */
async connect(connection: EntityProviderConnection): Promise {
this.connection = connection;
- this.taskRunner.run({
+ await this.taskRunner.run({
id: this.getProviderName(),
fn: async () => {
await this.run();
@@ -131,7 +133,7 @@ export class FrobsProvider implements EntityProvider {
const response = await this.reader.readUrl(
`https://frobs-${this.env}.example.com/data`,
);
- const data = JSON.parse(await response.buffer()).toString();
+ const data = JSON.parse((await response.buffer()).toString());
/** [5] */
const entities: Entity[] = frobsToEntities(data);
@@ -200,7 +202,7 @@ bucket is accessible.
There are two different types of mutation.
The first is `'full'`, which means to figuratively throw away the contents of
-the bucket and replacing it with all of the new contents specified. Under the
+the bucket and replacing it with all the new contents specified. Under the
hood, this is actually implemented through a highly efficient delta mechanism
for performance reasons, since it is common that the difference from one run to
the other is actually very small. This strategy is convenient for providers that
@@ -436,66 +438,66 @@ We create a basic entity provider as shown above. In the example below we might
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
-} from '@backstage/catalog-model'
+} from '@backstage/catalog-model';
import {
EntityProvider,
EntityProviderConnection,
-} from '@backstage/plugin-catalog-backend'
-import { WebClient } from '@slack/web-api'
-import {kebabCase} from 'lodash'
+} from '@backstage/plugin-catalog-backend';
+import { WebClient } from '@slack/web-api';
+import { kebabCase } from 'lodash';
interface Staff {
- displayName: string
- slackUserId: string
- jobTitle: string
- photoUrl: string
- address: string
- email:string
+ displayName: string;
+ slackUserId: string;
+ jobTitle: string;
+ photoUrl: string;
+ address: string;
+ email: string;
}
export class UserEntityProvider implements EntityProvider {
- private readonly getStaffUrl: string
- protected readonly slackTeam: string
- protected readonly slackToken: string
- protected connection?: EntityProviderConnection
+ private readonly getStaffUrl: string;
+ protected readonly slackTeam: string;
+ protected readonly slackToken: string;
+ protected connection?: EntityProviderConnection;
static fromConfig(config: Config, options: { logger: Logger }) {
- const getStaffUrl = config.getString('staff.url')
- const slackToken = config.getString('slack.token')
- const slackTeam = config.getString('slack.team')
+ const getStaffUrl = config.getString('staff.url');
+ const slackToken = config.getString('slack.token');
+ const slackTeam = config.getString('slack.team');
return new UserEntityProvider({
...options,
getStaffUrl,
slackToken,
slackTeam,
- })
+ });
}
private constructor(options: {
- getStaffUrl: string
- slackToken: string
- slackTeam: string
+ getStaffUrl: string;
+ slackToken: string;
+ slackTeam: string;
}) {
- this.getStaffUrl = options.getStaffUrl
- this.slackToken = options.slackToken
- this.slackTeam = options.slackTeam
+ this.getStaffUrl = options.getStaffUrl;
+ this.slackToken = options.slackToken;
+ this.slackTeam = options.slackTeam;
}
- async getAllStaff(): Promise{
- await return axios.get(this.getStaffUrl)
+ async getAllStaff(): Promise {
+ return await axios.get(this.getStaffUrl);
}
public async connect(connection: EntityProviderConnection): Promise {
- this.connection = connection
+ this.connection = connection;
}
async run(): Promise {
if (!this.connection) {
- throw new Error('User Connection Not initialized')
+ throw new Error('User Connection Not initialized');
}
- const userResources: UserEntity[] = []
- const staff = await this.getAllStaff()
+ const userResources: UserEntity[] = [];
+ const staff = await this.getAllStaff();
for (const user of staff) {
// we can add any links here in this case it would be adding a slack link to the users so you can directly slack them.
@@ -508,7 +510,7 @@ export class UserEntityProvider implements EntityProvider {
icon: 'message',
},
]
- : undefined
+ : undefined;
const userEntity: UserEntity = {
kind: 'User',
apiVersion: 'backstage.io/v1alpha1',
@@ -531,20 +533,20 @@ export class UserEntityProvider implements EntityProvider {
},
memberOf: [],
},
- }
+ };
- userResources.push(userEntity)
+ userResources.push(userEntity);
}
await this.connection.applyMutation({
type: 'full',
- entities: userResources.map((entity) => ({
+ entities: userResources.map(entity => ({
entity,
locationKey: 'hr-user-https://www.hrurl.com/',
})),
- })
+ });
+ }
}
-
```
## Custom Processors
@@ -595,7 +597,7 @@ startup. They are at the heart of all catalog logic, and have the ability to
read the contents of locations, modify in-flight entities that were read out of
a location, perform validation, and more. The catalog comes with a set of
builtin processors, that have the ability to read from a list of well known
-location types, to perform the basic processing needs, etc, but more can be
+location types, to perform the basic processing needs, etc., but more can be
added by the organization that adopts Backstage.
We will now show the process of creating a new processor and location type,
@@ -654,18 +656,18 @@ yarn new --select backend-module --option id=catalog
The class will have this basic structure:
```ts
-import { UrlReader } from '@backstage/backend-common';
import {
processingResult,
CatalogProcessor,
CatalogProcessorEmit,
} from '@backstage/plugin-catalog-node';
+import { UrlReaderService } from '@backstage/backend-plugin-api';
import { LocationSpec } from '@backstage/plugin-catalog-common';
// A processor that reads from the fictional System-X
export class SystemXReaderProcessor implements CatalogProcessor {
- constructor(private readonly reader: UrlReader) {}
+ constructor(private readonly reader: UrlReaderService) {}
getProcessorName(): string {
return 'SystemXReaderProcessor';
@@ -784,8 +786,8 @@ locations in GitHub. This example aims to demonstrate how to add the same
behavior for `system-x` that we implemented earlier.
```ts
-import { UrlReader } from '@backstage/backend-common';
import { Entity } from '@backstage/catalog-model';
+import { UrlReaderService } from '@backstage/backend-plugin-api';
import {
processingResult,
CatalogProcessor,
@@ -808,7 +810,7 @@ type CacheItem = {
};
export class SystemXReaderProcessor implements CatalogProcessor {
- constructor(private readonly reader: UrlReader) {}
+ constructor(private readonly reader: UrlReaderService) {}
getProcessorName() {
// The processor name must be unique.
@@ -851,7 +853,7 @@ export class SystemXReaderProcessor implements CatalogProcessor {
}
// For this example the JSON payload is a single entity.
- const entity: Entity = JSON.parse(response.buffer.toString());
+ const entity: Entity = JSON.parse((await response.buffer()).toString());
emit(processingResult.entity(location, entity));
// Update the cache with the new ETag and entity used for the next run.
@@ -922,13 +924,13 @@ const makeEntityFromCustomFormatJson = (
[ANNOTATION_LOCATION]: `${location.type}:${location.target}`,
[ANNOTATION_ORIGIN_LOCATION]: `${location.type}:${location.target}`,
},
- }
+ },
spec: {
type: component.type,
owner: component.author,
- lifecycle: 'experimental'
- }
- }
+ lifecycle: 'experimental',
+ },
+ };
};
export const customEntityDataParser: CatalogProcessorParser = async function* ({
@@ -960,9 +962,8 @@ export const customEntityDataParser: CatalogProcessorParser = async function* ({
// Is this a catalog-info.yaml file?
if (json.apiVersion) {
yield processingResult.entity(location, json as Entity);
-
- // let's treat this like it's our custom format instead.
} else {
+ // let's treat this like it's our custom format instead.
yield processingResult.entity(
location,
makeEntityFromCustomFormatJson(json, location),
@@ -978,7 +979,7 @@ export const customEntityDataParser: CatalogProcessorParser = async function* ({
}
}
}
-}
+};
```
This is a lot of code right now, as this is a pretty niche use-case, so we don't currently provide many helpers for you to be able to provide custom implementations easier or to compose together different parsers.
@@ -1031,3 +1032,292 @@ backend.add(catalogModuleCustomDataParser);
backend.start();
```
+
+## Incremental Entity Provider
+
+For large data sources that may not fit into memory but support pagination, the Incremental Entity Provider offers an efficient way to ingest data incrementally, handling deletions and updates seamlessly while minimizing memory usage.
+
+You can find more details about [why it was created](https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-incremental-ingestion#why-did-we-create-it) and its [requirements](https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-incremental-ingestion#requirements).
+
+### Installation
+
+1. Install `@backstage/plugin-catalog-backend-module-incremental-ingestion` with `yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-incremental-ingestion` from the Backstage root directory.
+
+2. Add the following code to the `packages/backend/src/index.ts` file:
+
+```ts title="packages/backend/src/index.ts"
+const backend = createBackend();
+
+/* highlight-add-start */
+backend.add(
+ import(
+ '@backstage/plugin-catalog-backend-module-incremental-ingestion/alpha'
+ ),
+);
+/* highlight-add-end */
+
+backend.start();
+```
+
+### Writing an Incremental Entity Provider
+
+To create an Incremental Entity Provider, you need to know how to retrieve a single page of data from an API with pagination. The `IncrementalEntityProvider` facilitates this by requiring:
+
+- **getProviderName:** A unique name to avoid conflicts with other providers.
+- **next:** Fetches a specific page of entities, moving the cursor forward.
+- **around:** Handles setup and tear-down, wrapping the process that iterates through multiple pages.
+
+For more information on compatibility, refer to the [requirements](https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-incremental-ingestion#requirements).
+
+In this tutorial, we'll implement an Incremental Entity Provider that interacts with an imaginary API to fetch a list of imaginary services.
+
+```ts
+interface MyApiClient {
+ getServices(page: number): MyPaginatedResults;
+}
+
+interface MyPaginatedResults {
+ items: T[];
+ totalPages: number;
+}
+
+interface Service {
+ name: string;
+}
+```
+
+These are the only 3 methods that you need to implement. `getProviderName()` is pretty self-explanatory and it's identical to the `getProviderName()` method on a regular Entity Provider.
+
+```ts
+import { IncrementalEntityProvider } from '@backstage/plugin-catalog-backend-module-incremental-ingestion';
+
+// This will include your pagination information, let's say our API accepts a `page` parameter.
+// In this case, the cursor will include `page`
+interface Cursor {
+ page: number;
+}
+
+// This interface describes the type of data that will be passed to your burst function.
+interface Context {
+ apiClient: MyApiClient;
+}
+
+export class MyIncrementalEntityProvider
+ implements IncrementalEntityProvider
+{
+ getProviderName() {
+ return `MyIncrementalEntityProvider`;
+ }
+}
+```
+
+`around` method is used for setup and tear-down. For example, if you need to create a client that will connect to the API, you would do that here.
+
+```ts
+export class MyIncrementalEntityProvider
+ implements IncrementalEntityProvider
+{
+ getProviderName() {
+ return `MyIncrementalEntityProvider`;
+ }
+
+ async around(burst: (context: Context) => Promise): Promise {
+ const apiClient = new MyApiClient();
+
+ await burst({ apiClient });
+
+ // If you need to do any teardown, you can do it here.
+ }
+}
+```
+
+If you need to pass a token to your API, then you can create a constructor that will receive a token and use the token to setup the client.
+
+```ts
+export class MyIncrementalEntityProvider
+ implements IncrementalEntityProvider
+{
+ private readonly token: string;
+
+ constructor(token: string) {
+ this.token = token;
+ }
+
+ getProviderName() {
+ return `MyIncrementalEntityProvider`;
+ }
+
+ async around(burst: (context: Context) => Promise): Promise {
+ const apiClient = new MyApiClient(this.token);
+
+ await burst({ apiClient });
+ }
+}
+```
+
+The last step is to implement the actual `next` method that will accept the cursor, call the API, process the result and return the result.
+
+```ts
+export class MyIncrementalEntityProvider
+ implements IncrementalEntityProvider
+{
+ private readonly token: string;
+
+ constructor(token: string) {
+ this.token = token;
+ }
+
+ getProviderName() {
+ return `MyIncrementalEntityProvider`;
+ }
+
+ async around(burst: (context: Context) => Promise): Promise {
+ const apiClient = new MyApiClient(this.token);
+
+ await burst({ apiClient });
+ }
+
+ async next(
+ context: Context,
+ cursor: Cursor = { page: 1 },
+ ): Promise> {
+ const { apiClient } = context;
+
+ // call your API with the current cursor
+ const data = await apiClient.getServices(cursor);
+
+ // calculate the next page
+ const nextPage = page + 1;
+
+ // figure out if there are any more pages to fetch
+ const done = nextPage > data.totalPages;
+
+ // convert returned items into entities
+ const entities = data.items.map(item => ({
+ entity: {
+ apiVersion: 'backstage.io/v1beta1',
+ kind: 'Component',
+ metadata: {
+ name: item.name,
+ annotations: {
+ // You need to define these, otherwise they'll fail validation
+ [ANNOTATION_LOCATION]: this.getProviderName(),
+ [ANNOTATION_ORIGIN_LOCATION]: this.getProviderName(),
+ },
+ },
+ spec: {
+ type: 'service',
+ lifecycle: 'production', // Ideally your source has this information
+ owner: 'unknown', // Ideally your source has this information
+ },
+ },
+ }));
+
+ // create the next cursor
+ const nextCursor = {
+ page: nextPage,
+ };
+
+ return {
+ done,
+ entities,
+ cursor: nextCursor,
+ };
+ }
+}
+```
+
+Now that you have your new Incremental Entity Provider, we can connect it to the catalog.
+
+### Installing the Incremental Entity Provider
+
+We'll assume you followed the [Installation](#installation) instructions. Now create a module inside `packages/backend/src/extensions/catalogCustomIncrementalIngestion.ts`.
+
+```ts title="packages/backend/src/extensions/catalogCustomIncrementalIngestion.ts"
+import {
+ coreServices,
+ createBackendModule,
+} from '@backstage/backend-plugin-api';
+import { incrementalIngestionProvidersExtensionPoint } from '@backstage/plugin-catalog-backend-module-incremental-ingestion/alpha';
+
+export const catalogModuleCustomIncrementalIngestionProvider =
+ createBackendModule({
+ pluginId: 'catalog',
+ moduleId: 'custom-incremental-ingestion-provider',
+ register(env) {
+ env.registerInit({
+ deps: {
+ incrementalBuilder: incrementalIngestionProvidersExtensionPoint,
+ config: coreServices.rootConfig,
+ },
+ async init({ incrementalBuilder, config }) {
+ // Assuming the token for the API comes from config
+ const token = config.getString('myApiClient.token');
+ const myEntityProvider = new MyIncrementalEntityProvider(token);
+
+ const options = {
+ // How long should it attempt to read pages from the API in a
+ // single burst? Keep this short. The Incremental Entity Provider
+ // will attempt to read as many pages as it can in this time
+ burstLength: { seconds: 3 },
+
+ // How long should it wait between bursts?
+ burstInterval: { seconds: 3 },
+
+ // How long should it rest before re-ingesting again?
+ restLength: { day: 1 },
+
+ // Optional back-off configuration - how long should it wait to retry
+ // in the event of an error?
+ backoff: [
+ { seconds: 5 },
+ { seconds: 30 },
+ { minutes: 10 },
+ { hours: 3 },
+ ],
+
+ // Optional. Use this to prevent removal of entities above a given
+ // percentage. This can be helpful if a data source is flaky and
+ // sometimes returns a successful status, but fewer than expected
+ // assets to add or maintain in the catalog.
+ rejectRemovalsAbovePercentage: 5,
+
+ // Optional. Similar to rejectRemovalsAbovePercentage, except it
+ // applies to complete, 100% failure of a data source. If true,
+ // a data source that returns a successful status but does not
+ // provide any assets to turn into entities will have its empty
+ // data set rejected.
+ rejectEmptySourceCollections: true,
+ };
+
+ incrementalBuilder.addProvider({
+ provider: myEntityProvider,
+ options,
+ });
+ },
+ });
+ },
+ });
+```
+
+Add the module to `packages/backend/src/index.ts`
+
+```ts title="packages/backend/src/index.ts"
+/* highlight-add-next-line */
+import { catalogModuleCustomIncrementalIngestionProvider } from './extensions/catalogCustomIncrementalIngestion';
+
+const backend = createBackend();
+
+backend.add(
+ import(
+ '@backstage/plugin-catalog-backend-module-incremental-ingestion/alpha'
+ ),
+);
+
+/* highlight-add-next-line */
+backend.add(catalogModuleCustomIncrementalIngestionProvider);
+
+backend.start();
+```
+
+For a deep dive into the technical details of the Incremental Entity Provider, see [the README](https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-incremental-ingestion).
diff --git a/docs/features/software-catalog/faq.md b/docs/features/software-catalog/faq.md
new file mode 100644
index 0000000000..d44414c1a7
--- /dev/null
+++ b/docs/features/software-catalog/faq.md
@@ -0,0 +1,26 @@
+---
+id: faq
+title: Catalog FAQ
+sidebar_label: FAQ
+description: This page answers frequently asked questions about the catalog
+---
+
+This page answers frequently asked questions about the catalog.
+
+## Is it all that important to have users and groups in the catalog at all?
+
+Yes. One of the most important concepts in the catalog is that it exposes your org structure and ownership properly, allowing your users to effectively understand and communicate around your systems. Having catalog entries for users and groups enables end users to navigate around Backstage and click on those owners and being presented with rich information pages around them, instead of getting 404 Not Found pages.
+
+## Can I create users in the catalog on-demand as they sign in?
+
+When standing up a new Backstage instance, adopters are faced with the realization that the catalog tends to have interactions with sign-in. Therefore the question often comes up, whether it's doable to have users pop up in the catalog on-demand only as they sign in.
+
+This should really be avoided. Our general guidance is to set up a proper integration upfront with your authority for organizational data ([LDAP](../../integrations/ldap/org.md), [Azure](../../integrations/azure/org.md), bespoke HR systems, etc) and batch ingest _all_ users and groups from there into the catalog, whether they sign in or not. This tends to give the superior experience for users, with the smallest amount possible of complexity and frustration.
+
+To give some background, [signing in](../../auth/index.md) technically only requires the `auth` backend which supports the flows that establish who the current user is. At the end of that process, a so called [sign-in resolver](../../auth/identity-resolver.md) is tasked with translating the third party established identity (for example the attributes returned for your AD entry) into a Backstage identity. This important step is made much simpler if the catalog is populated with users and groups from that same third party, because identities line up trivially and you can use the out-of-the-box provided sign-in resolvers for it. As a side note, you can also write your own resolver that does not interact with the catalog at all if you so desire, but let's assume that you do not chose this advanced option.
+
+Doing on-demand user creation _is_ technically possible by writing custom [entity providers](./external-integrations.md). But it comes with significant problems both for technical and end user quality of life reasons.
+
+On the technical side, this is unwanted complexity. You need to implement and maintain a custom provider, instead of what usually amounts to a very easily set-up batch ingestion schedule with providers that come out of the box. Also even if you do this, the catalog is an eventually consistent engine. The user that the provider feeds into the system is not guaranteed to appear immediately. Your experience will likely be only partially functional at bootstrapping time which may have unwanted side effects.
+
+On the user experience side, a Backstage experience without complete organizational data is a serious hindrance to getting the full power out of the tool. Your users won't be able to click on owners and seeing who they are and what teams they belong to. They won't be able to find out what the communications paths are when they need to reach you or your managers when something goes wrong or they have a feature request. They can't get an overview of what teams own and how they relate to each other. It will be a much more barren experience. Organizational data is highly valuable to have centrally available, complete and correct.
diff --git a/docs/features/software-catalog/system-model.md b/docs/features/software-catalog/system-model.md
index ee7270a960..b93dde37d2 100644
--- a/docs/features/software-catalog/system-model.md
+++ b/docs/features/software-catalog/system-model.md
@@ -50,7 +50,7 @@ components need to be in a known machine-readable format so we can build further
tooling and analysis on top.
APIs have a visibility: they are either public (making them available for any
-other component to consume), restricted (only available to an allowlisted set of
+other component to consume), restricted (only available to an allowed set of
consumers), or private (only available within their system). As public APIs are
going to be the primary way interaction between components, Backstage supports
documenting, indexing and searching all APIs so we can browse them as
diff --git a/docs/features/software-templates/builtin-actions.md b/docs/features/software-templates/builtin-actions.md
index 301fb4c457..5bfc038c1d 100644
--- a/docs/features/software-templates/builtin-actions.md
+++ b/docs/features/software-templates/builtin-actions.md
@@ -45,13 +45,8 @@ backend.add(
// scaffolder plugin
backend.add(import('@backstage/plugin-scaffolder-backend/alpha'));
-{
- /* highlight-add-start */
-}
+/* highlight-add-next-line */
backend.add(import('@backstage/plugin-scaffolder-backend-module-github'));
-{
- /* highlight-add-end */
-}
backend.start();
```
@@ -87,16 +82,16 @@ allow most templates built for `fetch:cookiecutter` to work without any changes.
```yaml title="template.yaml"
steps:
- id: fetch-base
- name: Fetch Base
- # highlight-remove-next-line
- action: fetch:cookiecutter
- # highlight-add-next-line
- action: fetch:template
- input:
- url: ./skeleton
- # highlight-add-next-line
- cookiecutterCompat: true
- values:
+ name: Fetch Base
+ # highlight-remove-next-line
+ action: fetch:cookiecutter
+ # highlight-add-next-line
+ action: fetch:template
+ input:
+ url: ./skeleton
+ # highlight-add-next-line
+ cookiecutterCompat: true
+ values:
```
### Manual migration
diff --git a/docs/features/software-templates/dry-run-testing.md b/docs/features/software-templates/dry-run-testing.md
new file mode 100644
index 0000000000..15c2684808
--- /dev/null
+++ b/docs/features/software-templates/dry-run-testing.md
@@ -0,0 +1,79 @@
+---
+id: dry-run-testing
+title: Dry Run Testing
+description: How to enable and implement dry run testing in actions
+---
+
+Scaffolder templates can be tested using the dry run feature of scaffolder actions. This allows you to simulate the effects of running a scaffolder action without making any actual changes to your environment, for example creating a webhook in GitHub. Once dry run is enabled in the scaffolder action, you can add handling to actions you use in your scaffolder templates to define how an action should operate in a dry run scenario.
+
+## Enabling dry run testing
+
+To enable dry run for your scaffolder action you need to add `supportsDryRun: true` to the configuration object of `createTemplateAction` in the function where the behavior of your action is defined:
+
+```typescript
+export function exampleAction() {
+ return createTemplateAction<{
+ example: string;
+ }>({
+ id: 'action:example',
+ description: 'Example action',
+ schema: {
+ input: {
+ type: 'object',
+ properties: {
+ example: {
+ title: 'example',
+ type: 'string',
+ },
+ },
+ },
+ },
+ supportsDryRun: true,
+ async handler(ctx) {
+ ...
+ },
+ });
+}
+```
+
+## Adding handling for dry run
+
+To add handling for dry run functionality you need to add a check for `ctx.isDryRun` inside the handler of the configuration object which is being passed into `createTemplateAction` in the function where the behavior of your action is defined. Once the check is successful, you can perform the desired actions expected in a dry run, e.g. outputting non-sensitive inputs.
+
+```typescript
+async handler(ctx) {
+ ...
+
+ // If this is a dry run, log and return
+ if (ctx.isDryRun) {
+ ctx.logger.info(`Dry run complete`);
+ return;
+ }
+
+ ...
+ },
+```
+
+## Testing dry run handling
+
+You will also need to add tests for the dry run handling, for example:
+
+```typescript
+ it('should not perform action during dry run', async () => {
+ ...
+
+ // Create the context object with the necessary properties for a dry run
+ const ctx = {
+ ...mockContext,
+ isDryRun: true,
+ input: {
+ ...
+ },
+ };
+
+ // Call the handler with the context
+ await action.handler(ctx);
+
+ expect(...);
+ });
+```
diff --git a/docs/features/software-templates/index.md b/docs/features/software-templates/index.md
index d4fa6ac971..077090743f 100644
--- a/docs/features/software-templates/index.md
+++ b/docs/features/software-templates/index.md
@@ -91,19 +91,29 @@ There could be situations where you would like to disable the

-To do so, you will un-register / remove the `catalogImportPlugin.routes.importPage`
-from `backstage/packages/app/src/App.tsx`:
+To do so, you need to explicitly disable the default route binding from the `scaffolderPlugin.registerComponent` to the Catalog Import page.
+
+This can be done in `backstage/packages/app/src/App.tsx`:
```diff
const app = createApp({
apis,
bindRoutes({ bind }) {
-- bind(scaffolderPlugin.externalRoutes, {
+ bind(scaffolderPlugin.externalRoutes, {
++ registerComponent: false,
- registerComponent: catalogImportPlugin.routes.importPage,
-- });
- bind(orgPlugin.externalRoutes, {
- catalogIndex: catalogPlugin.routes.catalogIndex,
+ viewTechDoc: techdocsPlugin.routes.docRoot,
});
+})
+```
+
+OR in `app-config.yaml`:
+
+```yaml
+app:
+ routes:
+ bindings:
+ scaffolder.registerComponent: false
```
After the change, you should no longer see the button.
diff --git a/docs/features/software-templates/input-examples.md b/docs/features/software-templates/input-examples.md
index dd1228290f..ef90013e49 100644
--- a/docs/features/software-templates/input-examples.md
+++ b/docs/features/software-templates/input-examples.md
@@ -297,7 +297,7 @@ spec:
type: string
steps:
- - $yaml: https://github.com//example/path/to/action.yaml
+ - $yaml: https://github.com/example/path/to/action.yaml
- id: fetch
name: Fetch template
diff --git a/docs/features/software-templates/migrating-to-rjsf-v5.md b/docs/features/software-templates/migrating-to-rjsf-v5.md
index 856841bdd4..8357d7567b 100644
--- a/docs/features/software-templates/migrating-to-rjsf-v5.md
+++ b/docs/features/software-templates/migrating-to-rjsf-v5.md
@@ -44,7 +44,7 @@ It's possible that if you have a hard dependency on any of the `@rjsf/*` librari
/* highlight-remove-next-line */
import { FieldValidation } from '@rjsf/core';
/* highlight-add-next-line */
-import { FieldValidation } from '@rjsf/utils;
+import { FieldValidation } from '@rjsf/utils';
```
## Escape hatch
diff --git a/docs/features/software-templates/ui-options-examples.md b/docs/features/software-templates/ui-options-examples.md
index 7f0e5b225f..1a024569a6 100644
--- a/docs/features/software-templates/ui-options-examples.md
+++ b/docs/features/software-templates/ui-options-examples.md
@@ -441,3 +441,30 @@ repoUrl:
`secretsKey` is the key used within the template secrets context to store the credential and `additionalScopes` is any additional permission scopes to request.
The supported `additionalScopes` values are `gerrit`, `github`, `gitlab`, `bitbucket`, and `azure`.
+
+## RepoBranchPicker
+
+The input props that can be specified under `ui:options` for the `RepoBranchPicker` field extension.
+
+### `requestUserCredentials`
+
+If defined will request user credentials to auth against the given SCM platform.
+
+```yaml
+repoUrl:
+ title: Repository Branch
+ type: string
+ ui:field: RepoBranchPicker
+ ui:options:
+ requestUserCredentials:
+ secretsKey: USER_OAUTH_TOKEN
+ additionalScopes:
+ github:
+ - workflow:write
+```
+
+`secretsKey` is the key used within the template secrets context to store the credential and `additionalScopes` is any additional permission scopes to request.
+
+The supported `additionalScopes` values are `gerrit`, `github`, `gitlab`, `bitbucket`, and `azure`.
+
+If you're also using the `RepoUrlPicker` field extension, you should simply duplicate this part from there.
diff --git a/docs/features/software-templates/writing-custom-actions.md b/docs/features/software-templates/writing-custom-actions.md
index 98457d2e8d..e5a82c09a9 100644
--- a/docs/features/software-templates/writing-custom-actions.md
+++ b/docs/features/software-templates/writing-custom-actions.md
@@ -43,6 +43,7 @@ After running the command, the CLI will create a new directory with your new sca
Let's create a simple action that adds a new file and some contents that are passed as `input` to the function. Within the generated directory, locate the file at `src/actions/example/example.ts`. Feel free to rename this file along with its generated unit test. We will replace the existing placeholder code with our custom action code as follows:
```ts title="With Zod"
+import { resolveSafeChildPath } from '@backstage/backend-plugin-api';
import { createTemplateAction } from '@backstage/plugin-scaffolder-node';
import fs from 'fs-extra';
import { z } from 'zod';
@@ -62,7 +63,7 @@ export const createNewFileAction = () => {
async handler(ctx) {
await fs.outputFile(
- `${ctx.workspacePath}/${ctx.input.filename}`,
+ resolveSafeChildPath(ctx.workspacePath, ctx.input.filename),
ctx.input.contents,
);
},
@@ -90,6 +91,7 @@ The `createTemplateAction` takes an object which specifies the following:
You can also choose to define your custom action using JSON schema instead of `zod`:
```ts title="With JSON Schema"
+import { resolveSafeChildPath } from '@backstage/backend-plugin-api';
import { createTemplateAction } from '@backstage/plugin-scaffolder-node';
import { writeFile } from 'fs';
@@ -118,7 +120,7 @@ export const createNewFileAction = () => {
async handler(ctx) {
const { signal } = ctx;
await writeFile(
- `${ctx.workspacePath}/${ctx.input.filename}`,
+ resolveSafeChildPath(ctx.workspacePath, ctx.input.filename),
ctx.input.contents,
{ signal },
_ => {},
diff --git a/docs/features/software-templates/writing-custom-field-extensions.md b/docs/features/software-templates/writing-custom-field-extensions.md
index d53b8bdf2f..feb0f68048 100644
--- a/docs/features/software-templates/writing-custom-field-extensions.md
+++ b/docs/features/software-templates/writing-custom-field-extensions.md
@@ -95,7 +95,7 @@ import { createScaffolderFieldExtension } from '@backstage/plugin-scaffolder-rea
import {
ValidateKebabCase,
validateKebabCaseValidation,
-} from './ValidateKebabCase/ValidateKebabCaseExtension';
+} from './ValidateKebabCaseExtension';
export const ValidateKebabCaseFieldExtension = scaffolderPlugin.provide(
createScaffolderFieldExtension({
diff --git a/docs/features/software-templates/writing-templates.md b/docs/features/software-templates/writing-templates.md
index 075fe0bb08..71ca0c56ae 100644
--- a/docs/features/software-templates/writing-templates.md
+++ b/docs/features/software-templates/writing-templates.md
@@ -477,6 +477,34 @@ template can be published to multiple providers.
Note, that you will need to configure an [authentication provider](../../auth/index.md#configuring-authentication-providers), alongside the
[`ScmAuthApi`](../../auth/index.md#scaffolder-configuration-software-templates) for your source code management (SCM) service to make this feature work.
+### The Repository Branch Picker
+
+Similar to the repository picker, there is a picker for branches to support autocompletion. A full example could look like this:
+
+```yaml
+- title: Choose a branch
+ required:
+ - repoBranch
+ properties:
+ repoBranch:
+ title: Repository Branch
+ type: string
+ ui:field: RepoBranchPicker
+ ui:options:
+ requestUserCredentials:
+ secretsKey: USER_OAUTH_TOKEN
+```
+
+Passing the `requestUserCredentials` object is required for autocompletion to work.
+If you're also using the repository picker, you should simply duplicate this part from there.
+For more information regarding the `requestUserCredentials` object, please refer to the [Using the Users `oauth` token](#using-the-users-oauth-token) section under [The Repository Picker](#the-repository-picker).
+
+For a list of all possible `ui:options` input props for `RepoBranchPicker`, please visit [here](./ui-options-examples.md#repobranchpicker).
+
+The `RepoBranchPicker` is a custom field that we provide part of the
+`plugin-scaffolder`. You can provide your own custom fields by
+[writing your own Custom Field Extensions](./writing-custom-field-extensions.md)
+
### Accessing the signed-in users details
Sometimes when authoring templates, you'll want to access the user that is running the template, and get details from the profile or the users `Entity` in the Catalog.
@@ -863,7 +891,7 @@ const scaffolderModuleCustomFilters = createBackendModule({
const backend = createBackend();
backend.add(import('@backstage/plugin-scaffolder-backend/alpha'));
/* highlight-add-next-line */
-backend.add(scaffolderModuleCustomFilters());
+backend.add(scaffolderModuleCustomFilters);
```
If you still use the legacy backend system, then you will use the `createRouter()` function of the `Scaffolder plugin`
@@ -919,3 +947,19 @@ Have in mind that changes in this form will not be saved on the template and is
### Custom Field Explorer
The custom filed explorer allows you to select any custom field loaded on the backstage instance and test different values and configurations.
+
+## Presentation
+
+You can configure the text of the "Back", "Review", and "Create" buttons using the `spec.presentation` field of your Software Template. You might want have a Template that doesn't "Create" something but rather "Updates" it. This feature will allow you to change it as needed. Here's an example of how to use this:
+
+```yaml
+---
+spec:
+ owner: scaffolder/maintainers
+ type: website
+ presentation:
+ buttonLabels:
+ backButtonText: 'Return'
+ createButtonText: 'Update'
+ reviewButtonText: 'Verify'
+```
diff --git a/docs/features/techdocs/configuration.md b/docs/features/techdocs/configuration.md
index a861a50c87..05f184e90f 100644
--- a/docs/features/techdocs/configuration.md
+++ b/docs/features/techdocs/configuration.md
@@ -20,7 +20,7 @@ techdocs:
# spin up the techdocs-container docker image or to run mkdocs locally (assuming all the dependencies are taken care of).
# You want to change this to 'local' if you are running Backstage using your own custom Docker setup and want to avoid running
# into Docker in Docker situation. Read more here
- # https://backstage.io/docs/features/techdocs/getting-started#disable-docker-in-docker-situation-optional
+ # https://backstage.io/docs/features/techdocs/getting-started/#disabling-docker-in-docker-situation-optional
runIn: 'docker'
@@ -203,7 +203,7 @@ techdocs:
# (Optional) The time (in milliseconds) that the TechDocs backend will wait
# for a cache service to respond before continuing on as though the cached
- # object was not found (e.g. when the cache sercice is unavailable). The
+ # object was not found (e.g. when the cache service is unavailable). The
# default value is 1000
readTimeout: 500
```
diff --git a/docs/features/techdocs/extensions.md b/docs/features/techdocs/extensions.md
new file mode 100644
index 0000000000..6c69d076a4
--- /dev/null
+++ b/docs/features/techdocs/extensions.md
@@ -0,0 +1,62 @@
+---
+id: extensions
+title: Using TechDocs Extensions
+sidebar_label: Using TechDocs Extensions
+description: How to use the built-in TechDocs extension points
+---
+
+# TechDocs Backend Extensions
+
+The TechDocs backend plugin provides the following extension points:
+
+- `techdocsPreparerExtensionPoint`
+ - Register a custom docs [PreparerBase extension](https://backstage.io/docs/reference/plugin-techdocs-node.preparerbase/)
+ - Ideal for when you want a custom type of docs created for a specific entity type
+- `techdocsBuildsExtensionPoint`
+ - Allows overriding the build phase Winston log transport (by default does not log to console)
+ - Allows overriding the [DocsBuildStrategy](https://backstage.io/docs/reference/plugin-techdocs-node.docsbuildstrategy/)
+- `techdocsPublisherExtensionPoint`
+ - Register a custom docs publisher
+- `techdocsGeneratorExtensionPoint`
+ - Register a custom [TechdocsGenerator](https://backstage.io/docs/reference/plugin-techdocs-node.techdocsgenerator/)
+
+Extension points are exported from `@backstage/plugin-techdocs-backend`.
+
+## Examples
+
+### Log TechDocs Build phase details to console
+
+By default, the TechDocs build phase logs to the UI, but does not log to the console. However, the
+`techdocsBuildsExtensionPoint` can be used to setup a custom Winston transport for TechDocs build logs.
+
+Here is an example of logging to console:
+
+```typescript jsx title="packages/backend/src/extensions/techDocsExtension.ts"
+import { techdocsBuildsExtensionPoint } from '@backstage/plugin-techdocs-backend';
+import { createBackendModule } from '@backstage/backend-plugin-api';
+import { transports } from 'winston';
+
+export const techDocsExtension = createBackendModule({
+ pluginId: 'techdocs',
+ moduleId: 'techdocs-build-log-transport-extension',
+ register(env) {
+ env.registerInit({
+ deps: {
+ build: techdocsBuildsExtensionPoint,
+ },
+ async init({ build }) {
+ // You can obviously use any custom transport here...
+ build.setBuildLogTransport(new transports.Console());
+ },
+ });
+ },
+});
+```
+
+And then of course register this extension with the backend:
+
+```typescript jsx title="packages/backend/src/index.ts"
+import {techDocsExtension} from "./extensions/techDocsExtension";
+...
+backend.add(techDocsExtension);
+```
diff --git a/docs/features/techdocs/how-to-guides.md b/docs/features/techdocs/how-to-guides.md
index 3a7cfd97bb..7712d675f5 100644
--- a/docs/features/techdocs/how-to-guides.md
+++ b/docs/features/techdocs/how-to-guides.md
@@ -580,6 +580,10 @@ 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/).
+
+### Using Kroki
+
To add `Mermaid` support in TechDocs, you can use [`kroki`](https://kroki.io)
that creates diagrams from Textual descriptions. It is a single rendering
gateway for all popular diagrams-as-a-code tools. It supports an enormous number
@@ -678,6 +682,30 @@ Done! Now you have a support of the following diagrams along with mermaid:
- `Vega-Lite`
- `WaveDrom`
+### Using `markdown-inline-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):
+
+ ```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:
+
+ ````md
+ ```mermaid
+ sequenceDiagram
+ Alice->>John: Hello John, how are you?
+ John-->>Alice: Great!
+ Alice-)John: See you later!
+ ```
+ ````
+
## How to implement a hybrid build strategy
One limitation of the [Recommended deployment](./architecture.md#recommended-deployment) is that
@@ -772,7 +800,7 @@ const techdocsCustomBuildStrategy = createBackendModule({
/* highlight-add-start */
backend.add(import('@backstage/plugin-techdocs-backend/alpha'));
-backend.add(techdocsCustomBuildStrategy());
+backend.add(techdocsCustomBuildStrategy);
/* highlight-add-end */
backend.start();
@@ -841,3 +869,28 @@ metadata:
annotations:
backstage.io/techdocs-entity: system:default/example
```
+
+## How to resolve broken links from moved or renamed pages in your documentation site
+
+TechDocs supports using the [mkdocs-redirects](https://github.com/mkdocs/mkdocs-redirects/tree/master) plugin to create a redirect map for any TechDocs site. This allows broken links from renamed or moved pages in your site to be redirected to their specified replacement.
+TechDocs will notify the user that the page they are trying to access is no longer maintained. Then, they will be redirected. External site redirects are not supported. If an external redirect is provided, the user will instead be redirected to the index page of the documentation site.
+
+## Create download links for static assets
+
+You may want to make files available for download by your users such as PDF
+documents, images, or code templates. Download links for files included in your
+docs directory can be made by adding `{: download }` after a markdown link.
+
+```
+[Link text](https://example.com/foo.jpg){: download }
+```
+
+The user's browser will download the file as `download.jpg` when the link is
+clicked.
+
+Specify a file name to control the name the file will be given when it is
+downloaded:
+
+```
+[Link text](https://example.com/foo.jpg){: download="foo.jpg" }
+```
diff --git a/docs/features/techdocs/using-cloud-storage.md b/docs/features/techdocs/using-cloud-storage.md
index 6ba826ea62..bdafb3532c 100644
--- a/docs/features/techdocs/using-cloud-storage.md
+++ b/docs/features/techdocs/using-cloud-storage.md
@@ -120,6 +120,36 @@ techdocs:
Your Backstage app is now ready to use Google Cloud Storage for TechDocs, to
store and read the static generated documentation files.
+### Extending default Storage configuration
+
+If you need a non-standard configuration of Google Cloud Storage client,
+`TechdocsPublisherExtensionPoint` is something you should look at.
+You can register custom `StorageOptions` that will be used to configure the client. To do so, you
+need to register publisher settings inside your module init, like in the following example:
+
+```typescript
+export const gcsPublisherCustomizer = createBackendModule({
+ pluginId: 'techdocs',
+ moduleId: 'gcs-publisher-customizer',
+ register(reg) {
+ reg.registerInit({
+ deps: {
+ techdocsExtensionPoint: techdocsPublisherExtensionPoint,
+ },
+ async init({ techdocsExtensionPoint }) {
+ const customOptions: StorageOptions = {
+ userAgent: 'my-custom-user-agent',
+ };
+ techdocsExtensionPoint.registerPublisherSettings(
+ 'googleGcs',
+ customOptions,
+ );
+ },
+ });
+ },
+});
+```
+
## Configuring AWS S3 Bucket with TechDocs
**1. Set `techdocs.publisher.type` config in your `app-config.yaml`**
diff --git a/docs/frontend-system/architecture/01-index.md b/docs/frontend-system/architecture/00-index.md
similarity index 59%
rename from docs/frontend-system/architecture/01-index.md
rename to docs/frontend-system/architecture/00-index.md
index 8585eb76fc..20a12ba1e8 100644
--- a/docs/frontend-system/architecture/01-index.md
+++ b/docs/frontend-system/architecture/00-index.md
@@ -18,7 +18,7 @@ Regardless of whether you are setting up your own backstage instance,
developing plugins, or extending plugins with new features, it is
important to understand these concepts.
-The diagram below provides an overview of the different building blocks, and the other blocks that each of them interact with.
+The diagram below provides an overview of the different building blocks and the other blocks that each of them interacts with.

@@ -28,11 +28,11 @@ This is the app instance itself that you create and use as the root of your Back
### Extensions
-Extensions are the building blocks that build out both the visual and non-visual structure of the application. There are both built-in extensions provided by the app itself, as well as extensions provided by plugins. Each extension is attached to a parent with which it shares data, and can have any number of children of its own. It is up to the app to wire together all extensions into a single tree known as the app extension tree. It is from this structure that the entire app can then be instantiated and rendered.
+Extensions are the building blocks that build out both the visual and non-visual structure of the application. There are both built-in extensions provided by the app itself as well as extensions provided by plugins. Each extension is attached to a parent with which it shares data and can have any number of children of its own. It is up to the app to wire together all extensions into a single tree known as the app extension tree. It is from this structure that the entire app can then be instantiated and rendered.
### Plugins
-Plugins provide the actual features inside an app. The size of a plugin can range from a tiny component to an entire new system in which other plugins can be composed and integrated. Plugins can be completely standalone, or build on top of each other to extend existing plugins and augment their features. Plugins can communicate with each other by composing their extensions, or by sharing Utility APIs and routes.
+Plugins provide the actual features inside an app. The size of a plugin can range from a tiny component to an entire new system in which other plugins can be composed and integrated. Plugins can be completely standalone or built on top of each other to extend existing plugins and augment their features. Plugins can communicate with each other by composing their extensions or by sharing Utility APIs and routes.
### Extension Overrides
@@ -40,11 +40,11 @@ In addition to the built-in extensions and extensions provided by plugins, it is
### Utility APIs
-Utility APIs provide functionality that makes it easier to build plugins, make it possible for plugins to share functionality with other plugins, as well as serve as a customization point for integrators to change the behavior of the app. Each Utility API is defined by a TypeScript interface as well as a reference used to access the implementations. The implementations of Utility APIs are defined by extensions that are provided and can be overridden the same as any other extension.
+Utility APIs provide functionality that makes it easier to build plugins, make it possible for plugins to share functionality with other plugins, as well as serve as a customization point for integrators to change the behaviour of the app. Each Utility API is defined by a TypeScript interface as well as a reference used to access the implementations. The implementations of Utility APIs are defined by extensions that are provided and can be overridden the same as any other extension.
### Routes
-The Backstage routing system adds a layer of indirection that makes it possible for plugins to route to each other's extensions without explicit knowledge of what URL paths the extension are rendered at or if they even exist at all. It makes it possible for plugins to share routes with each other and dynamically generate concrete links at runtime. It is the responsibility of the app to resolve these links to actual URLs, but it is also possible for integrators to define their own route bindings that decide how the links should be resolved. The routing system also lets plugins define internal routes, aiding in the linking to different content in the same plugin.
+The Backstage routing system adds a layer of indirection that makes it possible for plugins to route to each other's extensions without explicit knowledge of what URL paths the extensions are rendered at or if they even exist at all. It makes it possible for plugins to share routes with each other and dynamically generate concrete links at runtime. It is the responsibility of the app to resolve these links to actual URLs, but it is also possible for integrators to define their own route bindings that decide how the links should be resolved. The routing system also lets plugins define internal routes, aiding in the linking to different content in the same plugin.
## Package structure
diff --git a/docs/frontend-system/architecture/04-plugins.md b/docs/frontend-system/architecture/04-plugins.md
deleted file mode 100644
index 042d4fbc36..0000000000
--- a/docs/frontend-system/architecture/04-plugins.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-id: plugins
-title: Frontend Plugins
-sidebar_label: Plugins
-# prettier-ignore
-description: Frontend plugins
----
-
-> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
-
-## Introduction
-
-
-
-## Creating a Plugin
-
-
-
-```ts
-export const myPlugin = createPlugin({
- id: 'my-plugin',
-});
-```
-
-
-
-### Plugin ID
-
-
-
-### Plugin Extensions
-
-
-
-### Plugin Routes
-
-
-
-### Plugin External Routes
-
-
-
-### Plugin Feature Flags
-
-
-
-## Installing a Plugin in an App
-
-
diff --git a/docs/frontend-system/architecture/05-extension-overrides.md b/docs/frontend-system/architecture/05-extension-overrides.md
deleted file mode 100644
index 41702e6823..0000000000
--- a/docs/frontend-system/architecture/05-extension-overrides.md
+++ /dev/null
@@ -1,170 +0,0 @@
----
-id: extension-overrides
-title: Frontend Extension Overrides
-sidebar_label: Extension Overrides
-# prettier-ignore
-description: Frontend extension overrides
----
-
-> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
-
-## Introduction
-
-An extension override is a building block of the frontend system that allows you to programmatically override app or plugin extensions anywhere in your application. Since the entire application is built mostly out of extensions from the bottom up, this is a powerful feature. You can use it for example to provide your own app root layout, to replace the implementation of a Utility API with a custom one, to override how the catalog page renders itself, and much more.
-
-In general, most features should have a good level of customization built into them, so that users do not have to leverage extension overrides to achieve common goals. A well written feature often has [configuration](../../conf/) settings, or uses extension inputs for extensibility where applicable. An example of this is the search plugin, which allows you to provide result renderers as inputs rather than replacing the result page wholesale just to tweak how results are shown. Adopters should take advantage of those when possible, and only use extension overrides when it's necessary to entirely replace the extension. Check the respective extension documentation for guidance.
-
-## Override App Extensions
-
-In order to override an app extension, you must create a new extension and add it to the list of overridden features. The steps are: create your extension overrides and use them in Backstage.
-
-### Example
-
-In the example below, we create a file that exports custom extensions for the app's `light` and `dark` themes:
-
-```tsx title="packages/app/src/themes.tsx"
-import {
- createThemeExtension,
- createExtensionOverrides,
-} from '@backstage/frontend-plugin-api';
-import { apertureThemes } from './themes';
-import { ApertureLightIcon, ApertureDarkIcon } from './icons';
-
-// Creating a light theme extension
-const apertureLightTheme = createThemeExtension({
- // highlight-start
- namespace: 'app',
- name: 'light',
- // highlight-end
- title: 'Aperture Light Theme',
- variant: 'light',
- icon: ,
- Provider: ({ children }) => (
-
- ),
-});
-
-// Creating a dark theme extension
-const apertureDarkTheme = createThemeExtension({
- // highlight-start
- namespace: 'app',
- name: 'dark',
- // highlight-end
- title: 'Aperture Dark Theme',
- variant: 'dark',
- icon: ,
- Provider: ({ children }) => (
-
- ),
-});
-
-// Creating an extension overrides preset
-export default createExtensionOverrides({
- extensions: [apertureLightTheme, apertureDarkTheme],
-});
-```
-
-Note that we declare `namespace` as `'app'` while creating the themes, so the system knows we are overriding app extensions. Additionally, to specifically override the `light` and `dark` theme extensions, we set the `name` option to `light` and `dark`. Therefore, to override app theme extensions, we ensure that the extension `namespace` and `name` match those of the default app theme extension definitions.
-
-Now we are able to use the overrides in a Backstage app:
-
-```tsx title="packages/app/src/App.tsx"
-import { createApp } from '@backstage/frontend-app-api';
-import themeOverrides from './themes';
-
-const app = createApp({
- // highlight-next-line
- features: [themeOverrides],
-});
-
-export default app.createRoot().
-```
-
-If the plugin you want to change is internal to your company or you just want to replace one of the application's core extensions, you can decide to store the overrides code directly in the app package or extract them to a separate package.
-
-Note that it can still be a good idea to split your overrides out into separate packages in large projects. But it's up to you to decide how to group the extensions into extension overrides.
-
-## Override Plugin Extensions
-
-To override an extension that is provided by a plugin, you need to provide a new extension that has the same ID as the existing extension. That is, all kind, namespace, and name options must match the extension you want to replace. This means that you typically need to provide an explicit `namespace` when overriding extensions from a plugin.
-
-:::info
-We recommend that plugin developers share the extension IDs in their plugin documentation, but usually you can infer the ID by following the [naming patterns](./08-naming-patterns.md) documentation.
-:::
-
-### Example
-
-Imagine you have a plugin with the ID `'search'`, and the plugin provides a page extension that you want to fully override with your own custom component. To do so, you need to create your page extension with an explicit `namespace` option that matches that of the plugin that you want to override, in this case `'search'`. If the existing extension also has an explicit `name` you'd need to set the `name` of your override extension to the same value as well.
-
-```tsx title="packages/app/src/search.tsx"
-import {
- createPageExtension,
- createExtensionOverrides,
-} from '@backstage/frontend-plugin-api';
-
-// Creating a custom search page extension
-const customSearchPage = createPageExtension({
- // highlight-next-line
- namespace: 'search',
- // Omitting name since it is the index plugin page
- defaultPath: '/search',
- loader: () => import('./SearchPage').then(m => m. ),
-});
-
-export default createExtensionOverrides({
- extensions: [customSearchPage]
-});
-```
-
-Don't forget to configure your overrides in the `createApp` function:
-
-```tsx title="packages/app/src/App.tsx"
-import { createApp } from '@backstage/frontend-app-api';
-import searchOverrides from './search';
-
-const app = createApp({
- // highlight-next-line
- features: [searchOverrides],
-});
-
-export default app.createRoot();
-```
-
-Now let's talk about the last override case, orphan extensions.
-
-## Create Standalone Extensions
-
-Sometimes you just need to quickly create a new extension and not overwrite an app extension or plugin. You can also use overrides to create extensions, but remember that if you want to make this extension available for installation by other users, we recommend providing it via a plugin in a separate package.
-
-### Example
-
-Imagine you want to create a page that is currently only used by your application, like an Institutional page, for example. You can use overrides to extend the Backstage app to render it. To do so, simply create a page extension and pass it to the app as an override:
-
-```tsx title="packages/app/src/App.tsx"
-import { createApp } from '@backstage/frontend-app-api';
-import {
- createPageExtension,
- createExtensionOverrides,
-} from '@backstage/frontend-plugin-api';
-
-const app = createApp({
- features: [
- createExtensionOverrides({
- extensions: [
- // highlight-start
- createPageExtension({
- name: 'institutional',
- defaultPath: '/institutional',
- loader: () =>
- import('./institutional').then(m => ),
- }),
- // highlight-end
- ],
- }),
- ],
-});
-
-export default app.createRoot();
-```
-
-Note that we are omitting `namespace` when creating the page extension. When we omit `namespace`, we are telling the system the new extension is standalone and not an application or plugin extension!
diff --git a/docs/frontend-system/architecture/02-app.md b/docs/frontend-system/architecture/10-app.md
similarity index 93%
rename from docs/frontend-system/architecture/02-app.md
rename to docs/frontend-system/architecture/10-app.md
index 3b839d4232..d1c3820f09 100644
--- a/docs/frontend-system/architecture/02-app.md
+++ b/docs/frontend-system/architecture/10-app.md
@@ -16,7 +16,7 @@ Below is a simple example of how to create and render an app instance:
```ts
import ReactDOM from 'react-dom/client';
-import { createApp } from '@backstage/frontend-app-api';
+import { createApp } from '@backstage/frontend-defaults';
// Create your app instance
const app = createApp({
@@ -33,13 +33,13 @@ const rootEl = document.getElementById('root')!;
ReactDOM.createRoot(rootEl).render(app);
```
-We call `createApp` to create a new app instance, which is responsible for wiring together all of the features that we provide to the app. It also provides a set of built-in [Extensions](./03-extensions.md) that help build out the foundations of the app, as well as defaults for many other systems such as [Utility API](./06-utility-apis.md) implementations, components, icons, themes, and how to load configuration. No real work is done at the point of creating the app though, it's all deferred to the rendering of the element returned from `app.createRoot()`.
+We call `createApp` to create a new app instance, which is responsible for wiring together all of the features that we provide to the app. It also provides a set of built-in [Extensions](./20-extensions.md) that help build out the foundations of the app, as well as defaults for many other systems such as [Utility API](./33-utility-apis.md) implementations, components, icons, themes, and how to load configuration. No real work is done at the point of creating the app though, it's all deferred to the rendering of the element returned from `app.createRoot()`.
-It is possible to explicitly install features when creating the app, although typically these will instead be discovered automatically which we'll explore later on. Nevertheless these features are what build out the actual functionality of the app by providing [Extensions](./03-extensions.md). These extensions are wired together by the app into a tree structure known as the app extension tree. Each node in this tree receives data from its child nodes, and passes along data to its parent. The following diagram illustrates the shape of a small app extension tree.
+It is possible to explicitly install features when creating the app, although typically these will instead be discovered automatically which we'll explore later on. Nevertheless these features are what build out the actual functionality of the app by providing [Extensions](./20-extensions.md). These extensions are wired together by the app into a tree structure known as the app extension tree. Each node in this tree receives data from its child nodes, and passes along data to its parent. The following diagram illustrates the shape of a small app extension tree.

-Each node in this tree is an extension with a parent node and children. The colored shapes represent extension data inputs and output, where each color is one unique type of data. You can see that there are both extensions that output data that is ignored by the parent, as well as extensions that accept inputs but do not have any children. There are a couple of different tools at your disposal when creating and extension that lets you define different requirements for your inputs and output, which we will cover in greater details in the [Extensions](./03-extensions.md) section.
+Each node in this tree is an extension with a parent node and children. The colored shapes represent extension data inputs and output, where each color is one unique type of data. You can see that there are both extensions that output data that is ignored by the parent, as well as extensions that accept inputs but do not have any children. There are a couple of different tools at your disposal when creating and extension that lets you define different requirements for your inputs and output, which we will cover in greater details in the [Extensions](./20-extensions.md) section.
A common type of data that is shared between extensions is React elements and components. These can in turn be rendered by each other in their own React components, which ends up forming a parallel tree of React components that is similar in shape to that of the app extension tree. At the top of the app extension tree is a built-in root extension that among other things outputs a React element. This element also ends up being the root of the parallel React tree, and is rendered by the React element returned by `app.createRoot()`.
diff --git a/docs/frontend-system/architecture/15-plugins.md b/docs/frontend-system/architecture/15-plugins.md
new file mode 100644
index 0000000000..a54573427d
--- /dev/null
+++ b/docs/frontend-system/architecture/15-plugins.md
@@ -0,0 +1,91 @@
+---
+id: plugins
+title: Frontend Plugins
+sidebar_label: Plugins
+# prettier-ignore
+description: Frontend plugins
+---
+
+> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
+
+## Introduction
+
+Frontend plugins are a foundational building block in Backstage and the frontend system. They are used to encapsulate and provide functionality for a Backstage app, such as new pages, navigational elements, and APIs; as well as extensions and features for other plugins, such as entity page cards and content for the Software Catalog, or result list items for the search plugin.
+
+Each plugin is typically shipped in a separate NPM package, whether that's a published package, or just in the local workspace. The plugin instance should always the `default` export of the package, either via the main entry-point or the `/alpha` sub-path export. Each plugin package is limited to exporting a single plugin instance. In a local workspace you could use a different structure if preferred, but this is considered a non-standard layout and should be avoided in published packages.
+
+## Creating a Plugin
+
+Frontend plugin instances are created with the `createFrontendPlugin` function, which is provided by the `@backstage/frontend-plugin-api` package. It takes a single options object that provides all of the necessary configuration for the plugin. In particular you will want to provide [extensions](./20-extensions.md) for your plugin, as that is the way that you can provide new functionality to the app.
+
+```tsx
+// This creates a new extension, see "Extension Blueprints" documentation for more details
+const myPage = PageBlueprint.make({
+ params: {
+ defaultPath: '/my-page',
+ loader: () => import('./MyPage').then(m => ),
+ },
+});
+
+export default createFrontendPlugin({
+ id: 'my-plugin',
+ extensions: [myPage],
+});
+```
+
+### `pluginId` option
+
+Each plugin needs an ID, which is used to uniquely identify the plugin within an entire Backstage system. The ID does not have to be globally unique across all of the NPM ecosystem, although you generally want to strive for that. It is not possible to install multiple plugins with the same ID in a single Backstage app.
+
+The plugin ID should generally be part of the of the package name and use kebab-case. See both the [frontend naming patterns section](./50-naming-patterns.md), as well as the [package metadata section](../../tooling/package-metadata.md#name) for more information.
+
+### `extensions` option
+
+These are the [extensions](./20-extensions.md) that the plugin provides to the app. Note that you should not export any of these extensions separately from the plugin package, as they can already by accessed via the `getExtension` method of the plugin instance using the extension ID.
+
+The extensions that you provide to a plugin will have their `namespace` set to the plugin ID by default. For example, if you create an extension using the `PageBlueprint` without any particular naming options and install that via a plugin with the ID `my-plugin`, the final extension ID will be `page:my-plugin`. You can read more about how this works in the [extension structure documentation](./20-extensions.md#extension-structure).
+
+### `routes` and `externalRoutes` options
+
+These are the routes that the plugin exposes to the app. The `routes` option declares all of the target routes that your plugin provides, i.e. routes that other plugins link to. The `externalRoutes` option instead declares all the outgoing routes, i.e. routes that your plugins links to, which you can bind to the `routes` of other plugins. See the [routes documentation](./36-routes.md) for more information how to set up cross-plugin navigation.
+
+### `featureFlags` option
+
+This is a list of feature flag declarations that your plugin provides to the app. This makes sure that the feature flags are correctly registered and can be toggled in the app. To read a feature flag you can use the feature flags [Utility API](../architecture/33-utility-apis.md), accessible via `featureFlagsApiRef`.
+
+## Installing a Plugin in an App
+
+A plugin instance is considered a frontend feature and can be installed directly in any Backstage frontend app. See the [app documentation](./10-app.md) for more information about the different ways in which you can install new features in an app.
+
+## Overriding a Plugin
+
+A plugin might not always behave exactly the way you want. It could be that you want to remove particular extensions, decorate them a bit, replace them with your own, or simply add new ones. Regardless of your exact use-case, you can use the `plugin.withOverrides` method to create a new copy of the plugin with the desired changes. When doing so you can also access the original extensions provided by the plugin, and use the [extension override](./25-extension-overrides.md) API to make changes to individual extensions:
+
+```tsx
+import plugin from '@backstage/plugin-catalog';
+
+export default plugin.withOverrides({
+ // These overrides are merged with the original extensions
+ extensions: [
+ // Override the catalog nav item to use a custom icon
+ plugin.getExtension('nav-item:catalog').override({
+ factory: origFactory => [
+ NavItemBlueprint.dataRefs.target({
+ ...origFactory().get(NavItemBlueprint.dataRefs.target),
+ icon: CustomCatalogIcon,
+ }),
+ ],
+ }),
+ // Override the catalog index page with a completely custom implementation
+ PageBlueprint.make({
+ params: {
+ defaultPath: '/catalog',
+ routeRef: plugin.routes.catalogIndex,
+ loader: () => import('./CustomCatalogIndexPage').then(m => ),
+ },
+ }),
+ ],
+});
+```
+
+You can keep the plugin override in your app package, but it can often be a good idea to separate it out into its own package, especially if the overrides are complex or you want distinct ownership of the override. For example, if you are overriding the `@backstage/plugin-catalog` plugin, you might create a new package called `@internal/plugin-catalog` at `plugins/catalog` in your workspace, which exports the overridden plugin instance.
diff --git a/docs/frontend-system/architecture/03-extensions.md b/docs/frontend-system/architecture/20-extensions.md
similarity index 66%
rename from docs/frontend-system/architecture/03-extensions.md
rename to docs/frontend-system/architecture/20-extensions.md
index 2f3daba6f8..02f4ba9d05 100644
--- a/docs/frontend-system/architecture/03-extensions.md
+++ b/docs/frontend-system/architecture/20-extensions.md
@@ -8,7 +8,7 @@ description: Frontend extensions
> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
-As mentioned in the [previous section](./02-app.md), Backstage apps are built up from a tree of extensions. This section will go into more detail about what extensions are, how to create and use them, and how to create your own extensibility patterns.
+As mentioned in the [previous section](./10-app.md), Backstage apps are built up from a tree of extensions. This section will go into more detail about what extensions are, how to create and use them, and how to create your own extensibility patterns.
## Extension Structure
@@ -18,12 +18,12 @@ Each extensions has a number of different properties that define how it behaves
### ID
-
-
The ID of an extension is used to uniquely identity it, and it should ideally be unique across the entire Backstage ecosystem. For each frontend app instance there can only be a single extension for any given ID. Installing multiple extensions with the same ID will either result in an error or one of the extensions will override the others. The ID is also used to reference the extensions from other extensions, in configuration, and in other places such as developer tools and analytics.
+When creating an extension you do not provide the ID directly. Instead, you indirectly or directly provide the kind, namespace, and name parts that make up the ID. The kind is always provided by the [extension blueprint](./23-extension-blueprints.md), the only exception is if you use [`createExtension`](#creating-an-extensions) directly. Any extension that is provided by a plugin will by default have its namespace set to the plugin ID, so you generally only need to provide an explicit namespace if you want to override an existing extension. The name is also optional, and primarily used to distinguish between multiple extensions of the same kind and namespace. If a plugin doesn't need to distinguish between different extensions of the same kind, the name can be omitted.
+
+The extension ID will be constructed using the pattern `[:][][/][]`, where the separating `/` is only present if both a namespace and name are defined.
+
### Output
The output of an extension is the data that it provides to its parent extension, and ultimately its contribution to the app. The output itself comes in the form of a collection of arbitrary values, anything that can be represented as a TypeScript type. However, each individual output value must be associated with a shared reference known as an extension data reference. You must also use these same references to be able to access individual output values of an extension.
@@ -32,7 +32,7 @@ The output of an extension is the data that it provides to its parent extension,
The inputs of an extension define the data that it received from its children. Each extension can have multiple different inputs identified by an input name. These inputs each have their own set of data that they expect, which is defined as a collection of extension data references. An extension will only have access to the data that it has explicitly requested from each input.
-### Attachment Point
+### Attachment point
The attachment point of an extension decides where in the app extension tree it will be located. It is defined by the ID of the parent extension, as well as the name of the input to attach to. Through the attachment point the extension will share its own output as inputs to the parent extension. An extension can only be attached to an input that matches its own output, it is an error to try to attach an extension to an input the requires data that the extension does not provide in its output.
@@ -44,7 +44,7 @@ Each extension in the app can be disabled, meaning it will not be instantiated a
The ordering of extensions is sometimes very important, as it may for example affect in which order they show up in the UI. When an extension is toggled from disabled to enabled through configuration it resets the ordering of the extension, pushing it to the end of the list. It is generally recommended to leave extensions as disabled by default if their order is important, allowing for the order in which their are enabled in the configuration to determine their order in the app.
-### Configuration & Configuration Schema
+### Configuration & configuration schema
Each extension can define a configuration schema that describes the configuration that it accepts. This schema is used to validate the configuration provided by integrators, but also to fill in default configuration values. The configuration itself is provided by integrators in order to customize the extension. It is not possible to provide a default configuration of an extension, this must instead be done through defaults in the configuration schema. This allows for a simpler configuration logic where multiple configurations of the same extension completely replace each other rather than being merged.
@@ -54,7 +54,7 @@ The extension factory is the implementation of the extension itself. It is a fun
Extension factories should be lean and not do any heavy lifting or async work, as they are called during the initialization of the app. For example, if you need to do an expensive computation to generate your output, then prefer outputting a callback that does the computation instead. This allows the parent extension to defer the computation for later so that you avoid blocking the app startup.
-## Creating an Extensions
+## Creating an extension
Extensions are created using the `createExtension` function from `@backstage/frontend-plugin-api`. At minimum you need to provide an ID, attachment point, output definition, and a factory function. The following example shows the creation of a minimal extension:
@@ -64,28 +64,22 @@ const extension = createExtension({
// This is the attachment point, `id` is the ID of the parent extension,
// while `input` is the name of the input to attach to.
attachTo: { id: 'my-parent', input: 'content' },
- // The output map defines the outputs of the extension. The object keys
- // are only used internally to map the outputs of the factory and do
- // not need to match the keys of the input.
- output: {
- element: coreExtensionData.reactElement,
- },
+ // The output option defines the allowed and required outputs of the extension factory.
+ output: [coreExtensionData.reactElement],
// This factory is called to instantiate the extensions and produce its output.
factory() {
- return {
- element: Hello World
,
- };
+ return [coreExtensionData.reactElement(Hello World
)];
},
});
```
-Note that while the `createExtension` is public API and used in many places, it is not typically what you use when building plugins and features. Instead there are many extension creator functions exported by both the core APIs and plugins that make it easier to create extensions for more specific usages.
+Note that while the `createExtension` function is public API and used in many places, it is not typically what you use when building plugins and features. Instead there are many [extension blueprints](./23-extension-blueprints.md) exported by both the core APIs and plugins that make it easier to create extensions for more specific usages.
-## Extension Data
+## Extension data
Communication between extensions happens in one direction, from one child extension through the attachment point to its parent. The child extension outputs data which is then passed as inputs to the parent extension. This data is called Extension Data, where the shape of each individual piece of data is described by an Extension Data Reference. These references are created separately from the extensions themselves, and can be shared across multiple different kinds of extensions. Each reference consists of an ID and a TypeScript type that the data needs to conform to, and represents one type of data that can be shared between extensions.
-### Extension Data References
+### Extension data references
To create a new extension data reference to represent a type of shared extension data you use the `createExtensionDataRef` function. When defining a new reference you need to provide an ID and a TypeScript type, for example:
@@ -101,59 +95,53 @@ The `ExtensionDataRef` can then be used to describe an output property of the ex
```tsx
const extension = createExtension({
// ...
- output: {
- element: reactElementExtensionDataRef,
- },
+ output: [reactElementExtensionDataRef],
factory() {
- return {
- element: Hello World
,
- };
+ return [reactElementExtensionDataRef(Hello World
)];
},
});
```
-### Extension Data Uniqueness
+### Extension data uniqueness
-Note that the key used in the output map, in this case `element`, is only used internally within the definition of the extension itself. That actual identifier for the data when consumed by other extensions is the ID of the reference, in this case [`core.reactElement`](https://github.com/backstage/backstage/blob/916da47e8abdb880877daa18881eb8fdbb33e70a/packages/frontend-plugin-api/src/wiring/coreExtensionData.ts#L23). This means that you can not output multiple different values for the same extension data reference, as they would conflict with each other. That in turn makes overly generic extension data references a bad idea, for example a generic "string" type. Instead create separate references for each type of data that you want to share.
+Note that you are **not** allowed to repeat the same data reference in the outputs, or return multiple values for the same reference. Multiple outputs for the same reference will conflict with each other and cause an error. If you want to output multiple values of the same TypeScript type you should create separate references for each value. That in turn means that overly generic extension data references are a bad idea, for example a generic "string" type. Instead create separate references for each type of data that you want to share.
```tsx
const extension = createExtension({
// ...
- output: {
- // ❌ Bad example - outputting values of same type
- element1: reactElementExtensionDataRef,
- element2: reactElementExtensionDataRef,
- },
+ output: [
+ // ❌ Bad example - duplicate output declaration
+ reactElementExtensionDataRef,
+ reactElementExtensionDataRef,
+ ],
factory() {
- return {
- element1: Hello World
,
- element2: Hello World
,
- };
+ return [
+ // ❌ Bad example - duplicate output values
+ reactElementExtensionDataRef(Hello
),
+ reactElementExtensionDataRef(World
),
+ ];
},
});
```
-### Core Extension Data
+### Core extension data
We provide default `coreExtensionData`, which provides commonly used `ExtensionDataRef`s - e.g. for `React.JSX.Element` and `RouteRef`. They can be used when creating your own extension. For example, the React Element extension data that we defined above is already provided as `coreExtensionData.reactElement`.
For a full list and explanations of all types of core extension data, see the [core extension data reference](../building-plugins/04-built-in-data-refs.md).
-### Optional Extension Data
+### Optional extension data
By default all extension data is required, meaning that the extension factory must provide a value for each output. However, it is possible to make extension data optional by calling the `.optional()` method. This makes it optional for the factory function to return a value as part of its output. When calling the `.optional()` method you create a new copy of the extension data reference, it does not mutate the existing reference.
```tsx
const extension = createExtension({
// ...
- output: {
- element: coreExtensionData.reactElement.optional(),
- },
+ output: [coreExtensionData.reactElement.optional()],
factory() {
- return {
- element:
- Math.random() < 0.5 ? : undefined,
- };
+ return Math.random() > 0.5
+ ? [coreExtensionData.reactElement(Hello World
)]
+ : [];
},
});
```
@@ -167,17 +155,19 @@ const navigationExtension = createExtension({
// ...
inputs: {
// [1]: Input
- logo: createExtensionInput(
- {
- element: coreExtensionData.reactElement,
- },
- { singleton: true, optional: true },
- ),
+ logo: createExtensionInput([coreExtensionData.reactElement], {
+ singleton: true,
+ optional: true,
+ }),
},
factory({ inputs }) {
return {
element: (
- {inputs.logo.output?.element ?? Backstage }
+
+ {inputs.logo?.get(coreExtensionData.reactElement) ?? (
+ Backstage
+ )}
+
),
};
},
@@ -193,10 +183,9 @@ So how can we now attach the output to the parent extension's input? If we think
const navigationItemExtension = createExtension({
// ...
attachTo: { id: 'app/nav', input: 'items' },
+ output: [coreExtensionData.reactElement],
factory() {
- return {
- element: Home,
- };
+ return [coreExtensionData.reactElement( Home)];
},
});
@@ -205,26 +194,22 @@ const navigationExtension = createExtension({
// [2]: Extension `id` will be `app/nav` following the extension naming pattern
namespace: 'app',
name: 'nav',
- output: {
- element: coreExtensionData.reactElement,
- },
+ output: [coreExtensionData.reactElement],
inputs: {
- items: createExtensionInput({
- element: coreExtensionData.reactElement,
- }),
+ items: createExtensionInput([coreExtensionData.reactElement]),
},
factory({ inputs }) {
- return {
- element: (
+ return [
+ coreExtensionData.reactElement(
{inputs.items.map(item => {
- return {item.output.element} ;
+ return {item.get(coreExtensionData.reactElement)} ;
})}
-
+ ,
),
- };
+ ];
},
// ...
});
@@ -232,27 +217,27 @@ const navigationExtension = createExtension({
In this case the extension input `items` is an array, where each individual item is an extension that attached itself to the extension inputs of this `id`.
-With the `inputs` not only the `output` of an extensions item is passed to the extension, but also the `node`. However, it is discouraged to consume the `node` here unless needed. If we are looking at the `factory` function from the example above we could access the `node` like the following:
+In addition to being able to access data passed through the input, you also have access to the underlying app `node`. This can be useful if you for example want to get the ID of the attached extension. However, avoid using the `node` unless needed, it is generally better to stick to only consuming the provided data. If we are looking at the `factory` function from the example above we could access the `node` like the following:
```tsx
// ...
factory({ inputs }) {
- return {
- element: (
+ return [
+ coreExtensionData.reactElement(
- {inputs.items.map(({output, node}) => {
- const _node: AppNode = node;
- return {output.element} ;
+ {inputs.items.map((item) => {
+ const _node: AppNode = item.node;
+ return {item.get(coreExtensionData.reactElement)} ;
})}
),
- };
+ ];
},
```
-## Extension Configuration
+## Extension configuration
With the `app-config.yaml` there is already the option to pass configuration to plugins or the app to e.g. define the `baseURL` of your app. For extensions this concept would be limiting as an extension can be independent of the plugin & initiated several times. Therefore we created a possibility to configure each extension individually through config. The extension config schema is created using the [`zod`](https://zod.dev/) library, which in addition to TypeScript type checking also provides runtime validation and coercion. If we continue with the example of the `navigationExtension` and now want it to contain a configurable title, we could make it available like the following:
@@ -262,20 +247,20 @@ const navigationExtension = createExtension({
namespace: 'app',
name: 'nav',
// [3]: Extension `id` will be `app/nav` following the extension naming pattern
- configSchema: createSchemaFromZod(z =>
- z.object({
- title: z.string().default('Sidebar Title'),
- }),
- ),
+ config: {
+ schema: {
+ title: z => z.string().default('Sidebar Title'),
+ },
+ },
factory({ config }) {
- return {
- element: (
+ return [
+ coreExtensionData.reactElement(
{config.title}
-
+ ,
),
- };
+ ];
},
// ...
});
@@ -293,47 +278,40 @@ app:
title: 'Backstage'
```
-## Extension Creators
+## Extension factory as a generator function
-With creating an extension by using `createExtension(...)` you have the advantage that the extension can be anything in your Backstage application. We realised that this comes with the trade-off of having to repeat boilerplate code for similar building blocks. Here extension creators come into play for covering common building blocks in Backstage like pages using `createPageExtension`, themes using the `createThemeExtension` or items for the navigation using `createNavItemExtension`.
+In all examples so far we have defined the extension factory as a regular function that returns its output in an array. However, the only requirement is that the factory function returns any iterable of extension data values. This means that you can also define the factory function as a generator function, which allows you to yield values one by one. This is particularly useful if you want to conditionally output values.
-If we follow the example from above all items of the navigation have similarities, like they all want to be attached to the same extension with the same input as well as rendering the same navigation item component. Therefore `createExtension` can be abstracted for this use case to `createNavItemExtension` and if we add the extension to the app it will end up in the right place & looks like we expect a navigation item to look.
+For example, this is how we could define an extension where its output depends on the configuration:
```tsx
-export const HomeNavIcon = createNavItemExtension({
- routeRef: routeRefForTheHomePage,
- title: 'Home',
- icon: HomeIcon,
+const exampleExtension = createExtension({
+ // ...
+ config: {
+ schema: {
+ disableIcon: z.boolean().default(false),
+ },
+ },
+ output: [coreExtensionData.reactElement, iconDataRef.optional()],
+ *factory({ config }) {
+ yield coreExtensionData.reactElement(Hello World
);
+
+ if (!config.disableIcon) {
+ yield iconDataRef( );
+ }
+ },
});
```
-### Extension Kind
-
-With the example `HomeNavIcon` will end up on the extension input `items` of the extensions with the id `app/nav`. It raises the question what the `id` of the `HomeNavIcon` itself is. The extension creator for the navigation item has a defined `kind`, which by convention matches the own name. So in this example `createNavItemExtension` sets the kind to `nav-item`.
-
-The `id` of the extension is then build out of `namespace`, `name` & `kind` like the following - where `namespace` & `name` are optional properties that can be passed to the extension creator:
-
-```
-id: kind:namespace/name
-```
-
-For more information on naming of extension refer to the [naming patterns documentation](./08-naming-patterns.md).
-
-### Extension Creators in libraries
-
-Extension creators should be exported from frontend library packages (e.g. `*-react`) rather than plugin packages.
-
-If an extension is only for in-house tweaks, it's okay to put it in the plugin package. But if you want other open source plugins to use it, or you already have a `-react` package, always put extension creators in the `-react` package.
-
-## Extension Boundary
+## Extension boundary
The `ExtensionBoundary` wraps extensions with several React contexts for different purposes
### Suspense
-All React elements rendered by extension creators should be wrapped in the extension boundary. With `Suspense` the extension can than load resources asynchronously with having a loading fallback. It also allows to lazy load the whole extension similar to how plugins are currently lazy loaded in Backstage.
+Most React elements rendered by extensions should be wrapped in the extension boundary. With `Suspense` the extension can than load resources asynchronously with having a loading fallback. It also allows to lazy load the whole extension similar to how plugins are currently lazy loaded in Backstage.
-### Error Boundary
+### Error boundary
Similar to plugins the `ErrorBoundary` for extension allows to pass in a fallback component in case there is an uncaught error inside of the component. With this the error can be isolated & it would prevent the rest of the plugin to crash.
@@ -341,32 +319,21 @@ Similar to plugins the `ErrorBoundary` for extension allows to pass in a fallbac
Analytics information are provided through the `AnalyticsContext`, which will give `extensionId` & `pluginId` as context to analytics event fired inside of the extension. Additionally `RouteTracker` will capture an analytics event for routable extension to inform which extension metadata gets associated with a navigation event when the route navigated to is a gathered `mountPoint`. Whether an extension is routable is inferred from its outputs, but you can also explicitly control this behavior by passing the `routable` prop to `ExtensionBoundary`.
-The `ExtensionBoundary` can be used like the following in an extension creator:
+The `ExtensionBoundary` can be used like the following in an extension:
```tsx
-export function createSomeExtension<
- TConfig extends {},
- TInputs extends AnyExtensionInputMap,
->(options): ExtensionDefinition {
- return createExtension({
- // ...
- factory({ config, inputs, node }) {
- const ExtensionComponent = lazy(() =>
- options
- .loader({ config, inputs })
- .then(element => ({ default: () => element })),
- );
-
- return {
- path: config.path,
- routeRef: options.routeRef,
- element: (
-
-
-
- ),
- };
- },
- });
-}
+const routableExtension = createExtension({
+ // ...
+ factory({ config, inputs, node }) {
+ return [
+ coreExtensionData.path(config.path),
+ coreExtensionData.routeRef(myRouteRef),
+ coreExtensionData.reactElement(
+
+
+ ,
+ ),
+ ];
+ },
+});
```
diff --git a/docs/frontend-system/architecture/23-extension-blueprints.md b/docs/frontend-system/architecture/23-extension-blueprints.md
new file mode 100644
index 0000000000..fb10749845
--- /dev/null
+++ b/docs/frontend-system/architecture/23-extension-blueprints.md
@@ -0,0 +1,142 @@
+---
+id: extension-blueprints
+title: Frontend Extension Blueprints
+sidebar_label: Extensions Blueprints
+# prettier-ignore
+description: Frontend extensions
+---
+
+> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
+
+The `createExtension` function and related APIs is considered a low-level building and fairly advanced building block, and is not typically what you would use when building plugins and features. Instead, the core APIs and plugins provide extension blueprints that makes it easier to create extensions for specific usages. These blueprints accept a number of parameters that is up to each blueprint to define, and then creates a new extension using the provided parameters. New blueprints are created using the `createExtensionBlueprint` function, and are by convention exported with the symbol `Blueprint`. If you are curious about what blueprints are available from a plugin or package, look for `*Blueprint` exports in the package's API, for plugins these are typically found in the `*-react` package.
+
+## Creating an extension from a blueprint
+
+Every extension blueprint provides a `make` method that can be used to create new extensions. It is a simple way to create a new extension where the base blueprint provides all the necessary functionality. All you need to do is to provide the necessary blueprint parameters, but you also have the ability to provide additional options, for example a `name` for the extension.
+
+The following is a simple example of how one might use the blueprint `make` method to create a new extension:
+
+```tsx
+const myPageExtension = PageBlueprint.make({
+ params: {
+ defaultPath: '/my-page',
+ loader: () => import('./components/MyPage').then(m => ),
+ },
+});
+```
+
+The returned `myPageExtension` is an extension which is ready to be used in a plugin. It is the same type of object as is returned by the lower level `createExtension` function.
+
+## Creating an extension from a blueprint with overrides
+
+Every extension blueprint also provides a `makeWithOverrides` method. It is useful in cases where you want to provide additional integration points for an extension created with a blueprint. You might for example want to define additional inputs or configuration schema, or use the existing configuration to dynamically compute the parameters passed to the blueprint.
+
+The following is an example of how one might use the blueprint `makeWithOverrides` method to create a new extension:
+
+```tsx
+const myPageExtension = PageBlueprint.makeWithOverrides({
+ config: {
+ schema: {
+ layout: z => z.enum(['grid', 'rows']).default('grid'),
+ },
+ },
+ // The original blueprint factory is provided as the first argument
+ factory(originalFactory, { config }) {
+ // Call and forward the result from the original factory, providing
+ // the blueprint parameters as the first argument.
+ return originalFactory({
+ defaultPath: '/my-page',
+ loader: () =>
+ import('./components/MyPage').then(m => (
+ // We can now access values from the factory context when providing
+ // the blueprint parameters, such as config values.
+
+ )),
+ });
+ },
+});
+```
+
+When using `makeWithOverrides`, we no longer pass the blueprint parameters directly. Instead, we provide a `factory` function that receives the original blueprint factory as the first argument, and the extension factory context as the second. We can then call the original blueprint factory with the blueprint parameters and forward the result as the return value of out factory. Notice that when passing the blueprint parameters using this pattern we have access to a lot more information than when using the `make` method, at the cost of being more complex.
+
+Apart from the addition of the blueprint parameters of the first argument to the original factory function, the `makeWithOverrides` method works the same way as [extension overrides](./25-extension-overrides.md). All the same options and rules apply, including the ability to define additional inputs, override outputs, and so on. We therefore defer to the [extension overrides](./25-extension-overrides.md) documentation for more information on how to use the `makeWithOverrides` method.
+
+## Creating an extension blueprint
+
+To create a new extension blueprint, you use the `createExtensionBlueprint` function. At the surface it is very similar to `createExtension`, but with a few key differences. Firstly you must provide a `kind` option, which will be the kind of all extensions created with the blueprint. See the [naming patterns section](./50-naming-patterns.md) for more information about how to select a good extension kind. Secondly, the `factory` function has a new signature where the first parameter is the blueprint parameters, and the second is the factory context. And finally, rather than returning an extension, `createExtensionBlueprint` returns a blueprint object with the `make` method and friends, which is used as is described above.
+
+The following is an example of how one might create a new extension blueprint:
+
+```tsx
+export interface MyWidgetBlueprintParams {
+ defaultTitle: string;
+ element: JSX.Element;
+}
+
+export const MyWidgetBlueprint = createExtensionBlueprint({
+ kind: 'my-widget',
+ attachTo: { id: 'page:my-plugin', input: 'widgets' },
+ config: {
+ schema: {
+ title: z.string().optional(),
+ },
+ },
+ output: [coreExtensionData.reactElement],
+ factory(params: MyWidgetBlueprintParams, { config }) {
+ return [
+ // Note that while this is a valid pattern, you might often want to
+ // return separate pieces of data instead, more on that below.
+ coreExtensionData.reactElement(
+
+ {params.element}
+ ,
+ ),
+ ];
+ },
+});
+```
+
+This is of course a quite bare-bones example blueprint, but still a very real example. Blueprints can be very simple, there's already a lot of value in encapsulating the extension kind, attachment point, and output in a blueprint.
+
+Most of the options provided to `createExtensionBlueprint` can be overridden when using `makeWithOverrides` to create an extension from the blueprint. These overrides work the same way as [extension overrides](./25-extension-overrides.md), and we defer to that documentation for more information on how overrides work.
+
+### Blueprint-specific extension data references
+
+In some cases you may want to define and provide [extension data reference](./20-extensions.md#extension-data-references) that are specific to your blueprint. In the above example we might want to forward the `title` as data for example, rather than encapsulating it into the `MyWidgetContainer` component. This gives the parent extension more flexibility in the rendering for our example widget extensions.
+
+To do that, we create a new extension data reference for our widget title. This reference is provided via the `dataRefs` options when we create the blueprint, which makes it available for use via `MyWidgetBlueprint.dataRefs.widgetTitle`.
+
+```tsx
+export interface MyWidgetBlueprintParams {
+ defaultTitle: string;
+ element: JSX.Element;
+}
+
+const widgetTitleRef = createExtensionDataRef().with({
+ id: 'my-plugin.widget.title',
+});
+
+export const MyWidgetBlueprint = createExtensionBlueprint({
+ kind: 'my-widget',
+ attachTo: { id: 'page:my-plugin', input: 'widgets' },
+ config: {
+ schema: {
+ title: z.string().optional(),
+ },
+ },
+ output: [widgetTitleRef, coreExtensionData.reactElement],
+ factory(params: MyWidgetBlueprintParams, { config }) {
+ return [
+ widgetTitleRef(config.title ?? params.defaultTitle),
+ coreExtensionData.reactElement(params.element),
+ ];
+ },
+ dataRefs: {
+ widgetTitle: widgetTitleRef,
+ },
+});
+```
+
+### Extension Blueprints in libraries
+
+If you are publishing a plugin, the extension creators should always be exported from frontend library packages (e.g. `*-react`) rather than plugin packages.
diff --git a/docs/frontend-system/architecture/25-extension-overrides.md b/docs/frontend-system/architecture/25-extension-overrides.md
new file mode 100644
index 0000000000..faaf446f41
--- /dev/null
+++ b/docs/frontend-system/architecture/25-extension-overrides.md
@@ -0,0 +1,348 @@
+---
+id: extension-overrides
+title: Frontend Extension Overrides
+sidebar_label: Extension Overrides
+# prettier-ignore
+description: Frontend extension overrides
+---
+
+> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
+
+## Introduction
+
+An important customization point in the frontend system is the ability to override existing extensions. It can be used for anything from slight tweaks to the extension logic, to completely replacing an extension with a custom implementation. While extensions are encouraged to make themselves configurable, there are many situations where you need to override an extension to achieve the desired behavior. The ability to override extensions should be kept in mind when building plugins, and can be a powerful tool to allow for deeper customizations without the need to re-implement large parts of the plugin.
+
+In general, most features should have a good level of customization built into them, so that users do not have to leverage extension overrides to achieve common goals. A well written feature often has [configuration](../../conf/) settings, or uses extension inputs for extensibility where applicable. An example of this is the search plugin, which allows you to provide result renderers as inputs rather than replacing the result page wholesale just to tweak how results are shown. Adopters should take advantage of those when possible in order to reduce the need and size of extension overrides.
+
+## Overriding an extension
+
+Every extension created with `createExtension` comes with an `override` method, including those created from an [extension blueprint](./23-extension-blueprints.md). The `override` method **creates a new extension**, it does not mutate the existing extension. This new extension in created in such a way that if it is installed adjacent to the existing extension, it will take precedence and override the existing extension. While the `override` method does create new extension instances, it is not intended to be used as a way to create multiple new extensions from a base template, for that use-case you will want to use an [extension blueprint](./23-extension-blueprints.md) instead.
+
+The following is an example of calling the `.override(...)` method on an extension:
+
+```tsx
+const myOverrideExtension = myExtension.override({
+ factory(originalFactory) {
+ return originalFactory();
+ },
+});
+```
+
+This override is a no-op, it does not change the behavior of the extension, but simply forwards the outputs from the original extension factory. If you are familiar with [extension blueprints](./23-extension-blueprints.md), you will recognize this factory override pattern where we get access to the original factory function. In fact the only difference is that we do not need to pass any parameters to the original factory. The first parameter is now instead the optional factory context overrides, more on that as we dive into each override pattern in the following sections.
+
+## Overriding original factory outputs
+
+When overriding an extension you can choose to forward the existing outputs, or replace them with your own. The override factory has an exception to the rule that extension factories can only return a single value for each declared output. It will instead always use the **last** value provided for each extension data reference. This makes it possible to forward the outputs from the original factory, but also provide your own, for example:
+
+```tsx
+const myOverrideExtension = myExtension.override({
+ factory(originalFactory) {
+ return [
+ ...originalFactory(),
+ coreExtensionData.reactElement(Hello Override ),
+ ];
+ },
+});
+```
+
+You can also access individual data values from the original factory, in order to decorate the output:
+
+```tsx
+const myOverrideExtension = myExtension.override({
+ factory(originalFactory) {
+ const originalOutput = originalFactory();
+ const originalElement = originalOutput.get(coreExtensionData.reactElement);
+
+ return [
+ ...originalOutput,
+ coreExtensionData.reactElement(
+
+ Show original element
+ {originalElement}
+ ,
+ ),
+ ];
+ },
+});
+```
+
+Just as [extension factories can be declared as a generator function](./20-extensions.md#extension-factory-as-a-generator-function), so can the override factory. Using a generator function, the first example above can be written as follows:
+
+```tsx
+const myOverrideExtension = myExtension.override({
+ *factory(originalFactory) {
+ yield* originalFactory();
+ yield coreExtensionData.reactElement(Hello Override );
+ },
+});
+```
+
+Note the `yield*` expression, which forwards all values from the provided iterable to the generator, in this case the original factory output.
+
+## Overriding blueprint parameters
+
+If you are overriding an extension that was originally created from an [extension blueprint](./23-extension-blueprints.md), you are able to override the parameters that were originally provided for the blueprint. This can be done directly as an option to `.override`, or when calling the original factory in the override factory. The provided parameter overrides will be merged with the existing parameters that where provided when creating the extension from the blueprint.
+
+For example, consider the following extension created from the `PageBlueprint`:
+
+```tsx
+const exampleExtension = PageBlueprint.make({
+ params: {
+ loader: () =>
+ import('./components/ExamplePage').then(m => ),
+ defaultPath: '/example',
+ },
+});
+```
+
+You can immediately override parameters through the `params` option:
+
+```tsx
+const overrideExtension = exampleExtension.override({
+ params: {
+ loader: () =>
+ import('./components/OverridePage').then(m => ),
+ },
+});
+```
+
+It is also possible to pass parameter overrides when calling the original factory in the override factory:
+
+```tsx
+const overrideExtension = exampleExtension.override({
+ factory(originalFactory) {
+ return originalFactory({
+ params: {
+ loader: () =>
+ import('./components/OverridePage').then(m => ),
+ },
+ });
+ },
+});
+```
+
+## Overriding declared outputs
+
+When overriding an extension you can provide a new output declaration. This **replaces** any existing output declaration, which means that if you want to forward any of the original output you will need to declare it again. The following example shows how to override an extension and replace the output declaration:
+
+```tsx
+// Original extension
+const exampleExtension = createExtension({
+ name: 'example',
+ output: [coreExtensionData.reactElement],
+ factory: () => [coreExtensionData.reactElement(Example )],
+});
+
+// Override extension, with additional outputs
+const overrideExtension = exampleExtension.override({
+ output: [coreExtensionData.reactElement, coreExtensionData.routePath],
+ factory(originalFactory) {
+ return [...originalFactory(), coreExtensionData.routePath('/example')];
+ },
+});
+```
+
+When overriding the output declaration you don't need to include the original outputs. Just remember that you will no longer be able to directly forward the output from the original factory, and will still need to adhere to the contract of the input that the extension is attached to.
+
+## Overriding declared inputs
+
+When overriding an extension you can also provide new input declarations. You can define any number of new inputs, but you are **not** able to override the existing inputs declared by the original extension. The new inputs will be merged with the existing ones, giving the override factory access to both. The following example shows how to override an extension and add a new input declaration:
+
+```tsx
+const myOverrideExtension = myExtension.override({
+ inputs: {
+ myOverrideInput: createExtensionInput([coreExtensionData.reactElement]),
+ },
+ factory(originalFactory, { inputs }) {
+ const originalOutput = originalFactory();
+ const originalElement = originalOutput.get(coreExtensionData.reactElement);
+
+ return [
+ ...originalOutput,
+ coreExtensionData.reactElement(
+
+
Original element
+ {originalElement}
+
Additional inputs
+
+ {inputs.myOverrideInput.map(i => (
+
+ {i.get(coreExtensionData.reactElement)}
+
+ ))}
+
+
,
+ ),
+ ];
+ },
+});
+```
+
+## Overriding configuration schema
+
+Overriding the configuration schema works very similarly to overriding the declared inputs. You can define new configuration fields that will be merged with the existing ones, but you can not re-declare existing fields. The following example shows how to override an extension and add a new configuration field:
+
+```tsx
+const exampleExtension = createExtension({
+ config: {
+ schema: {
+ foo: z => z.string(),
+ },
+ },
+ // ...
+});
+
+const overrideExtension = exampleExtension.override({
+ config: {
+ schema: {
+ bar: z => z.string(),
+ },
+ },
+ factory(originalFactory, { config }) {
+ //
+ console.log(`foo=${config.foo} bar=${config.bar}`);
+ return originalFactory();
+ },
+});
+```
+
+## Overriding original factory config context
+
+In all examples so far we have called the `originalFactory` callback without any arguments. It is however possible to override parts of the factory context for the original factory using the first parameter of the original factory. This can be useful if you want to override the provided configuration or change the inputs in some way. Note that if you are implementing a `factory` for a blueprint, the override factory context will instead be the second parameter of the original factory function. The following is an example of how to override the configuration for the original factory:
+
+```tsx
+const exampleExtension = createExtension({
+ name: 'example',
+ config: {
+ schema: {
+ layout: z => z.enum(['grid', 'list']).optional(),
+ },
+ },
+ output: [coreExtensionData.reactElement],
+ factory: ({ config }) => [
+ coreExtensionData.reactElement(
+ ,
+ ),
+ ],
+});
+
+const overrideExtension = exampleExtension.override({
+ factory(originalFactory, { config }) {
+ return originalFactory({
+ config: {
+ // Switch default layout from 'list' to 'grid'
+ layout: config.layout ?? 'grid',
+ },
+ });
+ },
+});
+```
+
+As can be seen in the above example we can provide a new configuration object in the `originalFactory` call using the `config` property. When providing the `config` property we will completely override the original configuration object that would otherwise have been provided to the original factory. Note that this object must adhere to the output type of the configuration schema, which might not be intuitive. It's due to the configuration having already been processed and validated by Zod at this point, which means that things like defaults in the schema will not be applied again.
+
+## Overriding original factory inputs context
+
+In addition to the configuration, you are also able to override the inputs provided to the original factory. Just like when overriding configuration you will completely replace the original inputs with the new ones, but you are able to forward the inputs that you are receiving to the override factory.
+
+You can override each input in one of two ways, which can not be combined. You can forward (or not forward) the original input, optionally filtering out individual items or reordering them. Or you can provide new values for the input, which will replace the original input. When providing new values you must forward all existing inputs and the inputs can not be reordered, and when forwarding the existing inputs you can not provide new values.
+
+The following example shows how to override the values provided for each input item:
+
+```tsx
+const exampleExtension = createExtension({
+ inputs: {
+ items: createExtensionInput([coreExtensionData.reactElement]),
+ },
+ // ...
+});
+
+const overrideExtension = exampleExtension.override({
+ factory(originalFactory, { inputs }) {
+ return originalFactory({
+ inputs: {
+ items: inputs.items.map(i => [
+ coreExtensionData.reactElement(
+ {i.get(coreExtensionData.reactElement)} ,
+ ),
+ ]),
+ },
+ });
+ },
+});
+```
+
+In contrast, the following example shows how to forward the original inputs, but in a different order:
+
+```tsx
+const exampleExtension = createExtension({
+ inputs: {
+ content: createExtensionInput([coreExtensionData.reactElement], {
+ singleton: true,
+ optional: true,
+ }),
+ items: createExtensionInput([coreExtensionData.reactElement]),
+ },
+ // ...
+});
+
+const overrideExtension = exampleExtension.override({
+ factory(originalFactory, { inputs }) {
+ return originalFactory({
+ inputs: {
+ // We can also skip forwarding the original input, if we want to remove it
+ content: inputs.content,
+ // Sort items input by their extension ID
+ items: inputs.items.toSorted((a, b) =>
+ a.node.spec.id.localeCompare(b.node.spec.id),
+ ),
+ },
+ });
+ },
+});
+```
+
+## Installing override extension in an app
+
+To install extension overrides in a Backstage app you should use `plugin.withOverrides` whenever you are overriding or adding extensions for a plugin. See the section on [overriding a plugin](./15-plugins.md#overriding-a-plugin) for more information.
+
+Note that while using either of these options you don't necessarily need to use the extension `.override(...)` method to create the overrides. You can also create new extensions with `createExtension` or a blueprint that are either completely net-new extensions, or override an existing extension by using the same `kind`, `namespace` and `name` to produce the same extension ID.
+
+### Creating a frontend module
+
+The following example shows how to create a frontend module that overrides the search page from the search plugin:
+
+```tsx
+import {
+ createPageExtension,
+ createFrontendModule,
+} from '@backstage/frontend-plugin-api';
+
+const customSearchPage = PageBlueprint.make({
+ params: {
+ defaultPath: '/search',
+ loader: () =>
+ import('./CustomSearchPage').then(m => ),
+ },
+});
+
+export default createFrontendModule({
+ pluginId: 'search',
+ extensions: [customSearchPage],
+});
+```
+
+Assuming the above code resides in the `@internal/search-page` package, you can install it in your app like this:
+
+```tsx title="packages/app/src/App.tsx"
+import { createApp } from '@backstage/frontend-defaults';
+import searchPageModule from '@internal/search-page';
+
+const app = createApp({
+ // highlight-next-line
+ features: [searchPageModule],
+});
+
+export default app.createRoot();
+```
+
+You must define a `pluginId` when creating a frontend module, and the plugin must also be installed for the module to be loaded.
diff --git a/docs/frontend-system/architecture/08-references.md b/docs/frontend-system/architecture/30-references.md
similarity index 100%
rename from docs/frontend-system/architecture/08-references.md
rename to docs/frontend-system/architecture/30-references.md
diff --git a/docs/frontend-system/architecture/06-utility-apis.md b/docs/frontend-system/architecture/33-utility-apis.md
similarity index 97%
rename from docs/frontend-system/architecture/06-utility-apis.md
rename to docs/frontend-system/architecture/33-utility-apis.md
index 49e5854b65..c20936f819 100644
--- a/docs/frontend-system/architecture/06-utility-apis.md
+++ b/docs/frontend-system/architecture/33-utility-apis.md
@@ -10,7 +10,7 @@ description: Utility APIs
## Overview
-Utility APIs are pieces of standalone functionality, interfaces that can be requested by plugins to use. They are defined by a TypeScript interface as well as a reference (an "API ref") used to access its implementation. They can be provided both by plugins and the core framework, and are themselves [extensions](../architecture/03-extensions.md) that can have inputs, be replaced, and be declaratively configured in your app-config.
+Utility APIs are pieces of standalone functionality, interfaces that can be requested by plugins to use. They are defined by a TypeScript interface as well as a reference (an "API ref") used to access its implementation. They can be provided both by plugins and the core framework, and are themselves [extensions](../architecture/20-extensions.md) that can have inputs, be replaced, and be declaratively configured in your app-config.
A common example of a utility API is a client interface to interact with the backend part of a plugin, such as the catalog client. Any frontend plugin can then request an implementation of that interface to make requests through.
diff --git a/docs/frontend-system/architecture/07-routes.md b/docs/frontend-system/architecture/36-routes.md
similarity index 90%
rename from docs/frontend-system/architecture/07-routes.md
rename to docs/frontend-system/architecture/36-routes.md
index 9c6617a06f..8ed3024edd 100644
--- a/docs/frontend-system/architecture/07-routes.md
+++ b/docs/frontend-system/architecture/36-routes.md
@@ -42,7 +42,7 @@ The code snippet in the previous section does not indicate which plugin the rout
```tsx title="plugins/catalog/src/plugin.tsx"
import React from 'react';
import {
- createPlugin,
+ createFrontendPlugin,
createPageExtension,
} from '@backstage/frontend-plugin-api';
import { indexRouteRef } from './routes';
@@ -55,7 +55,7 @@ const catalogIndexPage = createPageExtension({
loader: () => import('./components').then(m => ),
});
-export default createPlugin({
+export default createFrontendPlugin({
id: 'catalog',
// highlight-start
routes: {
@@ -101,23 +101,26 @@ export const IndexPage = () => {
return (
);
};
```
-We use the `useRouteRef` hook to create a link generator function that returns the details page path. We then call the link generator, passing it an object with the kind, namespace, and name. These parameters are used to construct a concrete path to the "Foo" details page.
+We use the `useRouteRef` hook to create a link generator function that returns the details page path. First we need to check whether the route is available, the link generator function will be `undefined` if it isn't. We then call the link generator, passing it an object with the kind, namespace, and name. These parameters are used to construct a concrete path to the "Foo" details page.
Let's see how the details page can get the parameters from the URL:
@@ -176,8 +179,11 @@ export const IndexPage = () => {
return (
Index Page
- {/* highlight-next-line */}
-
Create Component
+ {/* highlight-start */}
+ {getCreateComponentPath && (
+
Create Component
+ )}
+ {/* highlight-end */}
);
};
@@ -190,7 +196,7 @@ Now the only thing left is to provide the page and external route via a plugin:
```tsx title="plugins/catalog/src/plugin.tsx"
import React from 'react';
import {
- createPlugin,
+ createFrontendPlugin,
createPageExtension,
useRouteRef,
} from '@backstage/frontend-plugin-api';
@@ -202,7 +208,7 @@ const catalogIndexPage = createPageExtension({
loader: () => import('./components').then(m => ),
});
-export default createPlugin({
+export default createFrontendPlugin({
id: 'catalog',
routes: {
index: indexRouteRef,
@@ -245,12 +251,14 @@ app:
# point to the Catalog details page when the Scaffolder component details ref is used
# highlight-next-line
scaffolder.componentDetails: catalog.details
+ # explicitly disable the default route binding from the scaffolder to the catalog import page
+ scaffolder.registerComponent: false
```
We also have the ability to express this in code as an option to `createApp`, but you of course only need to use one of these two methods:
```tsx title="packages/app/src/App.tsx"
-import { createApp } from '@backstage/frontend-app-api';
+import { createApp } from '@backstage/frontend-defaults';
import catalog from '@backstage/plugin-catalog';
import scaffolder from '@backstage/plugin-scaffolder';
@@ -262,6 +270,7 @@ const app = createApp({
});
bind(scaffolder.externalRoutes, {
componentDetails: catalog.routes.details,
+ registerComponent: false,
});
},
// highlight-end
@@ -289,42 +298,6 @@ export const createComponentExternalRouteRef = createExternalRouteRef({
});
```
-### Optional External Route References
-
-It is possible to define an `ExternalRouteRef` as optional, so it is not required to bind it in the app.
-
-```tsx title="plugins/catalog/src/routes.ts"
-import { createExternalRouteRef } from '@backstage/frontend-plugin-api';
-
-export const createComponentExternalRouteRef = createExternalRouteRef({
- // highlight-next-line
- optional: true,
-});
-```
-
-When calling `useRouteRef` with an optional external route, its return signature is changed to `RouteFunc | undefined`, and the returned value can be used to decide whether a certain link should be displayed or if an action should be taken:
-
-```tsx title="plugins/catalog/src/components/IndexPage.tsx"
-import React from 'react';
-import { useRouteRef } from '@backstage/frontend-plugin-api';
-import { createComponentExternalRouteRef } from '../routes';
-
-export const IndexPage = () => {
- const getCreateComponentPath = useRouteRef(createComponentExternalRouteRef);
- return (
-
-
Index Page
- {/* Rendering the link only if the getCreateComponentPath is defined */}
- {/* highlight-start */}
- {getCreateComponentPath && (
-
Create Component
- )}
- {/* highlight-end */}
-
- );
-};
-```
-
## Sub Route References
The last kind of route ref that can be created is a `SubRouteRef`, which can be used to create a route ref with a fixed path relative to an absolute `RouteRef`. They are useful if you have a page that internally is mounted at a sub route of a page extension component, and you want other plugins to be able to route to that page. And they can be a useful utility to handle routing within a plugin itself as well.
@@ -368,17 +341,21 @@ import { DetailsPage } from './DetailsPage';
export const IndexPage = () => {
const { pathname } = useLocation();
+
+ // highlight-start
const getIndexPath = useRouteRef(indexRouteRef);
const getDetailsPath = useRouteRef(detailsSubRouteRef);
+ // highlight-end
+
return (
Index Page
{/* Linking to the details sub route */}
- {pathname === getIndexPath() ? (
- // highlight-start
+ {/* highlight-start */}
+ {pathname === getIndexPath?.() ? (
{
>
Show details
- // highlight-end
+ {/* highlight-end */}
) : (
- // highlight-next-line
-
Hide details
+ {/* highlight-next-line */}
+
Hide details
)}
{/* Registering the details sub route */}
+ {/* highlight-next-line */}
} />
@@ -429,7 +407,7 @@ Finally, see how a plugin can provide subroutes:
```tsx title="plugins/catalog/src/plugin.tsx"
import React from 'react';
import {
- createPlugin,
+ createFrontendPlugin,
createPageExtension,
} from '@backstage/frontend-plugin-api';
import { indexRouteRef, detailsSubRouteRef } from './routes';
@@ -440,7 +418,7 @@ const catalogIndexPage = createPageExtension({
loader: () => import('./components').then(m => ),
});
-export default createPlugin({
+export default createFrontendPlugin({
id: 'catalog',
routes: {
index: indexRouteRef,
diff --git a/docs/frontend-system/architecture/08-naming-patterns.md b/docs/frontend-system/architecture/50-naming-patterns.md
similarity index 91%
rename from docs/frontend-system/architecture/08-naming-patterns.md
rename to docs/frontend-system/architecture/50-naming-patterns.md
index f031b80d84..11e0b8e733 100644
--- a/docs/frontend-system/architecture/08-naming-patterns.md
+++ b/docs/frontend-system/architecture/50-naming-patterns.md
@@ -23,7 +23,7 @@ Example:
```ts
// This declaration is only for internal usage in tests. This could also be a direct default export.
-export const userSettingsPlugin = createPlugin({
+export const userSettingsPlugin = createFrontendPlugin({
id: 'user-settings',
...
})
@@ -42,7 +42,7 @@ Note that while we use this naming pattern for the plugin instance this is only
| ID | `[:][/]` | `'core.nav'`, `'page:user-settings'`, `'entity-card:catalog/about'` |
| Symbol | `[][]` | `coreNav`, `userSettingsPage`, `catalogAboutEntityCard` |
-When you create a new extension you never provide the ID directly. Instead, you indirectly or directly provide the kind, namespace, and name parts that make up the ID. The kind is always provided by the blueprint creator, the only exception is if you use `createExtension` directly. Any extension that is provided by a plugin will by default have its namespace set to the plugin ID, so you generally only need to provide an explicit namespace if you want to override an existing extension. The name is also optional, and primarily used to distinguish between multiple extensions of the same kind and namespace. If a plugin doesn't need to distinguish between different extensions of the same kind, the name can be omitted.
+When you create a new extension you never provide the ID directly. Instead, you indirectly or directly provide the kind, namespace, and name parts that make up the ID. The kind is always provided by the extension blueprint, the only exception is if you use `createExtension` directly. Any extension that is provided by a plugin will by default have its namespace set to the plugin ID, so you generally only need to provide an explicit namespace if you want to override an existing extension. The name is also optional, and primarily used to distinguish between multiple extensions of the same kind and namespace. If a plugin doesn't need to distinguish between different extensions of the same kind, the name can be omitted.
Example:
@@ -67,7 +67,7 @@ const catalogSearchResultListItem = SearchResultListItemBlueprint.make({
});
// Note that the extensions themselves are not exported, only the plugin instance
-export const catalogPlugin = createPlugin({
+export const catalogPlugin = createFrontendPlugin({
id: 'catalog',
extensions: [catalogEntityPage, catalogSearchResultListItem /* ... */],
});
diff --git a/docs/frontend-system/architecture/60-migrations.md b/docs/frontend-system/architecture/60-migrations.md
new file mode 100644
index 0000000000..9e84899dc2
--- /dev/null
+++ b/docs/frontend-system/architecture/60-migrations.md
@@ -0,0 +1,192 @@
+---
+id: migrations
+title: Frontend System Migrations
+sidebar_label: Migrations
+# prettier-ignore
+description: Migration documentation for different versions of the frontend system core APIs.
+---
+
+> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
+
+## Introduction
+
+This section provides migration guides for different versions of the frontend system core APIs. Each guide will provide a summary of the changes that have been made for a particular Backstage release, and how to update your usage of the core APIs.
+
+This guide is intended for app and plugin authors who have already migrated their code to the new frontend system, and are looking to keep it up to date with the latest changes. These guides do not cover trivial migrations that can be explained in a deprecation message, such as a renamed export.
+
+## 1.31
+
+### `namespace` parameter should be removed
+
+The `namespace` parameter to all `createExtension`, `createExtensionBlueprint` or any `.make()` or `.makeWithOverrides()` method can be removed. This will now default to the `id` of the `plugin` which should already be the case.
+
+### `createExtensionOverrides` -> `createFrontendModule`
+
+Extensions will need to be wrapped in a module in order to be installed in the frontend. This means that the `createExtensionOverrides` function should be replaced with `createFrontendModule`, and the `pluginId` parameter should be set with the target `pluginId` that you're overriding.
+
+For example:
+
+```tsx
+import {
+ createPageExtension,
+ createExtensionOverrides,
+} from '@backstage/frontend-plugin-api';
+
+const customSearchPage = PageBlueprint.make({
+ namespace: 'search',
+ params: {
+ defaultPath: '/search',
+ loader: () =>
+ import('./CustomSearchPage').then(m => ),
+ },
+});
+
+export default createExtensionOverrides({
+ extensions: [customSearchPage],
+});
+```
+
+Should now look like this:
+
+```tsx
+import {
+ createPageExtension,
+ createFrontendModule,
+} from '@backstage/frontend-plugin-api';
+
+const customSearchPage = PageBlueprint.make({
+ params: {
+ defaultPath: '/search',
+ loader: () =>
+ import('./CustomSearchPage').then(m => ),
+ },
+});
+
+export default createFrontendModule({
+ pluginId: 'search',
+ extensions: [customSearchPage],
+});
+```
+
+### Moved `createApp`
+
+The `createApp` function has been moved to the new `@backstage/frontend-defaults` package. The old export from `@backstage/frontend-app-api` is now deprecated and should be replaced with the new one.
+
+### Removed support for "v1" extensions
+
+Extensions created with `@backstage/frontend-plugin-api` from before the 1.30 release are no longer supported by `createApp`. To be able to use extensions in a new app, they need to be created with `@backstage/frontend-plugin-api` version 0.7.0 or later.
+
+### New type parameters for `ExtensionDefinition` and `ExtensionBlueprint`
+
+The type parameters of `ExtensionDefinition` and `ExtensionBlueprint` have been updated to use a single type parameter with an object, in order to make them easier to read and evolve.
+
+Existing usage can generally be updated as follows:
+
+`ExtensionDefinition` -> `ExtensionDefinition`
+`ExtensionDefinition` -> `ExtensionDefinition`
+`ExtensionDefinition` -> `ExtensionDefinition<{ config: TConfig }>`
+`ExtensionDefinition` -> `ExtensionDefinition<{ config: TConfig, configInput: TConfigInput }>`
+
+If you need to infer the parameter you can use `ExtensionDefinitionParameters` and `ExtensionBlueprintParameters`, for example:
+
+```tsx
+import {
+ ExtensionDefinition,
+ ExtensionDefinitionParameters,
+} from '@backstage/frontend-plugin-api';
+
+function myUtility(
+ ext: ExtensionDefinition,
+): T['config'] {
+ // ...
+}
+```
+
+## 1.30
+
+### Reworked extension inputs and outputs
+
+In previous versions of the frontend system you would define extension inputs and outputs as an "data map" where each named property corresponded to a piece of data that could be accessed via the same name in the extension factory. In order to better support extension overrides and blueprints, as well as reduce the risk of confusion, these data maps have been replaced by an array of data references.
+
+For example, an extension previously declared like this:
+
+```tsx
+createExtension({
+ name: 'example',
+ attachTo: { id: 'some-extension', input: 'content' },
+ inputs: {
+ header: createExtensionInput(
+ { element: coreExtensionData.reactElement },
+ {
+ optional: true,
+ singleton: true,
+ },
+ ),
+ },
+ output: { element: coreExtensionData.reactElement },
+ factory({ inputs }) {
+ return {
+ element: ,
+ };
+ },
+});
+```
+
+Would now look like this:
+
+```tsx
+createExtension({
+ name: 'example',
+ attachTo: { id: 'some-extension', input: 'content' },
+ inputs: {
+ header: createExtensionInput([coreExtensionData.reactElement], {
+ optional: true,
+ singleton: true,
+ }),
+ },
+ output: [coreExtensionData.reactElement],
+ factory({ inputs }) {
+ return [
+ coreExtensionData.reactElement(
+ ,
+ ),
+ ];
+ },
+});
+```
+
+Note the changes to the `inputs` and `output` declarations, as well as how these are used in the factory. Both the `inputs` and `output` now declare their expected data using an array, without names tied to each piece of data. The `get` method on the input object is used to access the input data, and accept a data reference matching the data that was declared for that input.
+
+The biggest change in practice is how the extension factories output their data. Instead of returning an object with the data values, you instead use each extension data reference to encapsulate a value and return a collection of these encapsulated values from the factory.
+
+### Blueprints instead of extension creators
+
+The "extension creator" pattern where `createExtension` was wrapped up in a function for creating specific kind of extensions has been replaced by [extension blueprints](./23-extension-blueprints.md). Extension creators were hard to implement and to maintain, with blueprints providing a much more consistent and powerful API surface for both plugin builders and integrators. For example, `createPageExtension` was the extension creator equivalent of `PageBlueprint`.
+
+Replace all existing usages of extension creators in your plugin or app with the corresponding blueprint. For a given extension creator `createExtension`, the blueprint equivalent is `Blueprint`. There might be slight differences in the API between the two, but most often you just need to move the kind-specific options of the extension creator to be passed as parameters to the blueprint. Note that if your extension declared any additional inputs or config you'll need to use the [`.makeWithOverrides`](./23-extension-blueprints.md#creating-an-extension-from-a-blueprint-with-overrides) method of the blueprint.
+
+If your plugin exports and extension creators, these should be migrated to blueprints instead.
+
+### Extension tester rework
+
+The `createExtensionTester` from the `@backstage/frontend-test-utils` package has been reworked to better support testing of extensions. The new API allows access to extension output directly using the new `.get(ref)` method, and also provides access to all tested extensions through the new `.query(id/extension)` method.
+
+The `.render()` method that used to render the test subject in a test app has been deprecated. The extension tester no longer constructs a full app tree, but instead only instantiates the tree for the extensions under test. If you want to test the rendering of an extension that outputs in an app, you can instead use the `renderInTestApp` utility in combination with the new `.reactElement()` method of the extension tester: `renderInTestApp(tester.reactElement())`.
+
+### Extension data references update
+
+The way that extension data references are declared has been changed to allow for type inference of the ID. This requires the declaration to be split into two separate function calls, one to supply the type and the other to infer any options. For example, a reference that was previously declared like this:
+
+```ts
+export const myExtension = createExtensionDataRef('my-plugin.my-data');
+```
+
+Should be updated to the following:
+
+```ts
+export const myExtension = createExtensionDataRef().with({
+ id: 'my-plugin.my-data',
+});
+```
diff --git a/docs/frontend-system/building-apps/01-index.md b/docs/frontend-system/building-apps/01-index.md
index ea7fe20948..5b5298a2c5 100644
--- a/docs/frontend-system/building-apps/01-index.md
+++ b/docs/frontend-system/building-apps/01-index.md
@@ -30,13 +30,13 @@ The created-app is currently templated for legacy frontend system applications,
## The app instance
-The starting point of a frontend app is the `createApp` function, which accepts a single options object as its only parameter. It is imported from `@backstage/frontend-app-api`, which is where you will find most of the common APIs for building apps.
+The starting point of a frontend app is the `createApp` function, which accepts a single options object as its only parameter. It is imported from `@backstage/frontend-defaults`, which is where you will find most of the common APIs for building apps.
This is how to create a minimal app:
```tsx title="in src/index.ts"
import ReactDOM from 'react-dom/client';
-import { createApp } from '@backstage/frontend-app-api';
+import { createApp } from '@backstage/frontend-defaults';
import catalogPlugin from '@backstage/plugin-catalog/alpha';
// Create your app instance
@@ -66,7 +66,7 @@ Linking routes from different plugins requires this configuration. You can do th
### Enable feature discovery
-Use this setting to enable experimental feature discovery when building your app with `@backstage/cli`. With this configuration your application tries to discover and install package extensions automatically, check [here](../architecture/02-app.md#feature-discovery) for more details.
+Use this setting to enable experimental feature discovery when building your app with `@backstage/cli`. With this configuration your application tries to discover and install package extensions automatically, check [here](../architecture/10-app.md#feature-discovery) for more details.
:::warning
Remember that package extensions that are not auto-discovered must be manually added to the application when creating an app. See [features](#install-features-manually) for more details.
@@ -78,7 +78,7 @@ It is possible to enable, disable and configure extensions individually in the `
### Customize or override built-in extensions
-Previously you would customize the application route, components, apis, sidebar, etc. through the code in `App.tsx`. Now we want you to write less code and install more extensions to customize your Backstage instance. See [here](../building-plugins/03-extension-types.md) which types of extensions are available for you to customize your application.
+Previously you would customize the application routes, components, apis, sidebar, etc. through the code in `App.tsx`. Now we want to allow the same thing to be achieved while writing less code and instead installing more extensions to customize your Backstage instance. See the [extension blueprints](../building-plugins/03-common-extension-blueprints.md) section for a list of common extension kinds that are available for you to customize and extend your application.
## Use code to customize the app at a more granular level
@@ -87,7 +87,7 @@ Previously you would customize the application route, components, apis, sidebar,
A manual installation is required if your packages are not discovered automatically, either because you are not using `@backstage/cli` to build your application or because the features are defined in local modules in the app package. In order to manually install a feature, you must import it and pass it to the `createApp` function:
```tsx title="packages/app/src/App.tsx"
-import { createApp } from '@backstage/frontend-app-api';
+import { createApp } from '@backstage/frontend-defaults';
// This plugin was create as a local module in the app
import { somePlugin } from './plugins';
@@ -99,15 +99,15 @@ export default app.createRoot();
```
:::info
-You can also pass overrides to the features array, for more details, please read the [extension overrides](../architecture/05-extension-overrides.md) documentation.
+You can also pass overrides to the features array, for more details, please read the [extension overrides](../architecture/25-extension-overrides.md) documentation.
:::
### Using an async features loader
-In case you need to perform asynchronous operations before passing features to the `createApp` function, define a [feature loader](https://backstage.io/docs/reference/frontend-app-api.createappfeatureloader/) object and pass it to the `features` option:
+In case you need to perform asynchronous operations before passing features to the `createApp` function, define a [feature loader](https://backstage.io/docs/reference/frontend-defaults.createappfeatureloader/) object and pass it to the `features` option:
```tsx title="packages/app/src/App.tsx"
-import { createApp } from '@backstage/frontend-app-api';
+import { createApp } from '@backstage/frontend-defaults';
const app = createApp({
features: {
@@ -129,7 +129,7 @@ export default app.createRoot();
In some cases we want to load our configuration from a backend server and to do so, you can pass an callback to the `configLoader` option when calling the `createApp` function, the callback should return a promise of an object with the config object:
```tsx title="packages/app/src/App.tsx"
-import { createApp } from '@backstage/frontend-app-api';
+import { createApp } from '@backstage/frontend-defaults';
import { getConfigFromServer } from './utils';
// Example lazy loading the app configuration
diff --git a/docs/frontend-system/building-apps/03-built-in-extensions.md b/docs/frontend-system/building-apps/03-built-in-extensions.md
index a5e6476eb0..5f74100df0 100644
--- a/docs/frontend-system/building-apps/03-built-in-extensions.md
+++ b/docs/frontend-system/building-apps/03-built-in-extensions.md
@@ -24,7 +24,7 @@ Be careful when disabling built-in extensions, as there may be other extensions
## Override built-in extensions
-You can override any built-in extension whenever their customizations, whether through configuration or input, do not meet a use case for your Backstage instance. Check out [this](../architecture/05-extension-overrides.md) documentation on how to override application extensions.
+You can override any built-in extension whenever their customizations, whether through configuration or input, do not meet a use case for your Backstage instance. Check out [this](../architecture/25-extension-overrides.md) documentation on how to override application extensions.
:::warning
Be aware there could be some implementation requirements to properly override an built-in extension, such as using same apis and do not remove inputs or configurations otherwise you can cause a side effect in other parts of the system that expects same minimal behavior.
diff --git a/docs/frontend-system/building-apps/06-plugin-conversion.md b/docs/frontend-system/building-apps/06-plugin-conversion.md
new file mode 100644
index 0000000000..5e7d431e73
--- /dev/null
+++ b/docs/frontend-system/building-apps/06-plugin-conversion.md
@@ -0,0 +1,87 @@
+---
+id: plugin-conversion
+title: Converting 3rd-party plugins from the old system
+sidebar_label: Converting 3rd-party Plugins
+# prettier-ignore
+description: Documentation for how to convert 3rd-party plugins to support the new frontend system.
+---
+
+If you are using or want to use a 3rd-party plugin that does not yet support the new frontend system in your app, you can often use conversion utilities from `@backstage/core-compat-api` in order wrap the plugin to make it possible to install in your app.
+
+> [!CAUTION]
+> The purpose of these utilities is to wrap 3rd-party plugins. Do not use them for your own plugins where you can add support for the new frontend system directly.
+
+## Converting a legacy plugin
+
+The `@backstage/core-compat-api` package exports the `convertLegacyPlugin` function that can be used to convert a legacy plugin to the new frontend system. Simply pass in the old plugin instance and the new plugin will be returned.
+
+```ts
+import { techdocsPlugin } from '@backstage/plugin-techdocs';
+
+// TechDocs is used as an example here, it already supports
+// the new frontend system so don't use this code directly.
+const convertedTechdocsPlugin = convertLegacyPlugin(techdocsPlugin, {
+ extensions: [],
+});
+```
+
+Note that when using `convertLegacyPlugin` we also have to pass an array of extensions. This is because the `convertLegacyPlugin` function does not have access to or know about the different types of extensions in the old system. You instead need to manually convert each of the old extensions that you want to include in the plugin instance.
+
+## Converting legacy extensions
+
+As mentioned above, you need to manually convert each of the old extensions that you want to include in the plugin instance. The `@backstage/core-compat-api` package exports `convertLegacyPageExtension` for this purpose, which can be used to convert a top-level page extension to the new system. Simply pass in the old extension and the new extension will be returned.
+
+```ts
+const convertedIndexPage = convertLegacyPageExtension(TechDocsIndexPage);
+```
+
+### Overriding inferred parameters
+
+The conversion functions such as `convertLegacyPageExtension` will attempt to infer parameters from the old extension, in particular it uses the name of the old extension to determine things like the name and route paths of the new extension. In some cases you may need to supply your own parameters to the conversion function if the inferred values are not correct.
+
+```ts
+const convertedIndexPage = convertLegacyPageExtension(TechDocsIndexPage, {
+ name: 'index',
+ defaultPath: '/docs',
+});
+```
+
+### Other types of extensions
+
+The `@backstage/core-compat-api` only provides conversion functions for the built-in extension types, i.e. only page extensions. There are many plugins that define their own extension types, such as the entity content and card extensions for the catalog. For those cases it's up to the plugin libraries to provide their own conversion functions for these types of extensions. For example, `@backstage/plugin-catalog-react/alpha` provides both `convertLegacyEntityContentExtension` and `convertLegacyEntityCardExtension`.
+
+The following are the known conversion functions provided by various libraries:
+
+- `convertLegacyPageExtension` - `@backstage/core-compat-api`
+- `convertLegacyEntityContentExtension` - `@backstage/plugin-catalog-react/alpha`
+- `convertLegacyEntityCardExtension` - `@backstage/plugin-catalog-react/alpha`
+
+## 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:
+
+```ts
+import {
+ techdocsPlugin,
+ TechDocsIndexPage,
+ TechDocsReaderPage,
+ EntityTechdocsContent,
+} from '@backstage/plugin-techdocs';
+
+const convertedTechdocsPlugin = convertLegacyPlugin(techdocsPlugin, {
+ extensions: [
+ convertLegacyPageExtension(TechDocsIndexPage, {
+ name: 'index',
+ defaultPath: '/docs',
+ }),
+ convertLegacyPageExtension(TechDocsReaderPage, {
+ defaultPath: '/docs/:namespace/:kind/:name/*',
+ }),
+ convertLegacyEntityContentExtension(EntityTechdocsContent),
+ ],
+});
+
+const app = createApp({
+ features: [convertedTechdocsPlugin],
+});
+```
diff --git a/docs/frontend-system/building-apps/08-migrating.md b/docs/frontend-system/building-apps/08-migrating.md
index 716e0da772..6efd0c7841 100644
--- a/docs/frontend-system/building-apps/08-migrating.md
+++ b/docs/frontend-system/building-apps/08-migrating.md
@@ -18,12 +18,12 @@ The first step in migrating an app is to switch out the `createApp` function for
// highlight-remove-next-line
import { createApp } from '@backstage/app-defaults';
// highlight-add-next-line
-import { createApp } from '@backstage/frontend-app-api';
+import { createApp } from '@backstage/frontend-defaults';
```
This immediate switch will lead to a lot of breakages that we need to fix.
-Let's start by addressing the change to `app.createRoot(...)`, which no longer accepts any arguments. This represents a fundamental change that the new frontend system introduces. In the old system the app element tree that you passed to `app.createRoot(...)` was the primary way that you installed and configured plugins and features in your app. In the new system this is instead replaced by extensions that are wired together into an extension tree. Much more responsibility has now been shifted to plugins, for example you no longer have to manually provide the route path for each plugin page, but instead only configure it if you want to override the default. For more information on how the new system works, see the [architecture](../architecture/01-index.md) section.
+Let's start by addressing the change to `app.createRoot(...)`, which no longer accepts any arguments. This represents a fundamental change that the new frontend system introduces. In the old system the app element tree that you passed to `app.createRoot(...)` was the primary way that you installed and configured plugins and features in your app. In the new system this is instead replaced by extensions that are wired together into an extension tree. Much more responsibility has now been shifted to plugins, for example you no longer have to manually provide the route path for each plugin page, but instead only configure it if you want to override the default. For more information on how the new system works, see the [architecture](../architecture/00-index.md) section.
Given that the app element tree is most of what builds up the app, it's likely also going to be the majority of the migration effort. In order to make the migration as smooth as possible we have provided a helper that lets you convert an existing app element tree into plugins that you can install in a new app. This in turn allows for a gradual migration of individual plugins, rather than needing to migrate the entire app structure at once.
@@ -95,7 +95,7 @@ At this point the contents of your app should be past the initial migration stag
## Migrating `createApp` Options
-Many of the `createApp` options have been migrated to use extensions instead. Each will have their own [extension creator](../architecture/03-extensions.md#extension-creators) that you use to create a custom extension. To add these standalone extensions to the app they need to be passed to `createExtensionOverrides`, which bundles them into a _feature_ that you can install in the app. See the [standalone extensions](../architecture/05-extension-overrides.md#create-standalone-extensions) section for more information.
+Many of the `createApp` options have been migrated to use extensions instead. Each will have their own [extension blueprint](../architecture/23-extension-blueprints.md) that you use to create a custom extension. To add these standalone extensions to the app they need to be passed to `createFrontendModule`, which bundles them into a _feature_ that you can install in the app. See the [frontend module](../architecture/25-extension-overrides.md#creating-a-frontend-module) section for more information.
For example, assuming you have a `lightTheme` extension that you want to add to your app, you can use the following:
@@ -103,7 +103,8 @@ For example, assuming you have a `lightTheme` extension that you want to add to
const app = createApp({
features: [
// highlight-add-start
- createExtensionOverrides({
+ createFrontendModule({
+ pluginId: 'app',
extensions: [lightTheme],
}),
// highlight-add-end
@@ -115,7 +116,7 @@ You can then also add any additional extensions that you may need to create as p
### `apis`
-[Utility API](../utility-apis/01-index.md) factories are now installed as extensions instead. Pass the existing factory to `createApiExtension` and install it in the app. For more information, see the section on [configuring Utility APIs](../utility-apis/04-configuring.md).
+[Utility API](../utility-apis/01-index.md) factories are now installed as extensions instead. Pass the existing factory to `ApiBlueprint` and install it in the app. For more information, see the section on [configuring Utility APIs](../utility-apis/04-configuring.md).
For example, the following `apis` configuration:
@@ -134,12 +135,15 @@ const app = createApp({
Can be converted to the following extension:
```ts
-const scmIntegrationsApi = createApiExtension({
- factory: createApiFactory({
- api: scmIntegrationsApiRef,
- deps: { configApi: configApiRef },
- factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
- }),
+const scmIntegrationsApi = ApiBlueprint.make({
+ name: 'scm-integrations',
+ params: {
+ factory: createApiFactory({
+ api: scmIntegrationsApiRef,
+ deps: { configApi: configApiRef },
+ factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
+ }),
+ },
});
```
@@ -176,7 +180,7 @@ createApp({
});
```
-Plugins don't even have to be imported manually after installing their package if [features discovery](../architecture/02-app.md#feature-discovery) is enabled.
+Plugins don't even have to be imported manually after installing their package if [features discovery](../architecture/10-app.md#feature-discovery) is enabled.
```yaml title="in app-config.yaml"
app:
@@ -207,7 +211,7 @@ createApp({
Can be converted to the following plugin configuration:
```tsx
-createPlugin({
+createFrontendPlugin({
id: 'tech-radar',
// ...
featureFlags: [{ name: 'tech-radar' }],
@@ -219,9 +223,9 @@ createPlugin({
Many app components are now installed as extensions instead using `createComponentExtension`. See the section on [configuring app components](./01-index.md#configure-your-app) for more information.
-The `Router` component is now a built-in extension that you can [override](../architecture/05-extension-overrides.md) using `createRouterExtension`.
+The `Router` component is now a built-in extension that you can [override](../architecture/25-extension-overrides.md) using `createRouterExtension`.
-The Sign-in page is now installed as an extension using the `createSignInPageExtension` instead.
+The Sign-in page is now installed as an extension, created using the `SignInPageBlueprint` instead.
For example, the following sign-in page configuration:
@@ -246,25 +250,27 @@ const app = createApp({
Can be converted to the following extension:
```tsx
-const signInPage = createSignInPageExtension({
- loader: async () => props =>
- (
-
- ),
+const signInPage = SignInPageBlueprint.make({
+ params: {
+ loader: async () => props =>
+ (
+
+ ),
+ },
});
```
### `themes`
-Themes are now installed as extensions, using `createThemeExtension`.
+Themes are now installed as extensions, created using `ThemeBlueprint`.
For example, the following theme configuration:
@@ -282,19 +288,25 @@ const app = createApp({
),
},
],
+});
```
Can be converted to the following extension:
```tsx
-const lightTheme = createThemeExtension({
- id: 'light',
- title: 'Light Theme',
- variant: 'light',
- icon: ,
- Provider: ({ children }) => (
-
- ),
+const lightTheme = ThemeBlueprint.make({
+ name: 'light',
+ params: {
+ theme: {
+ id: 'light',
+ title: 'Light Theme',
+ variant: 'light',
+ icon: ,
+ Provider: ({ children }) => (
+
+ ),
+ },
+ },
});
```
@@ -332,7 +344,8 @@ const exampleIconBundle = IconBundleBlueprint.make({
const app = createApp({
features: [
- createExtensionOverrides({
+ createFrontendModule({
+ pluginId: 'app',
extensions: [exampleIconBundle],
}),
],
@@ -341,7 +354,7 @@ const app = createApp({
### `bindRoutes`
-Route bindings can still be done using this option, but you now also have the ability to bind routes using static configuration instead. See the section on [binding routes](../architecture/07-routes.md#binding-external-route-references) for more information.
+Route bindings can still be done using this option, but you now also have the ability to bind routes using static configuration instead. See the section on [binding routes](../architecture/36-routes.md#binding-external-route-references) for more information.
Note that if you are binding routes from a legacy plugin that was converted using `convertLegacyApp`, you will need to use the `convertLegacyRouteRefs` and/or `convertLegacyRouteRef` to convert the routes to be compatible with the new system.
@@ -360,7 +373,7 @@ const app = createApp({
### `__experimentalTranslations`
-Translations are now installed as extensions, using `createTranslationExtension`.
+Translations are now installed as extensions, created using `TranslationBlueprint`.
For example, the following translations configuration:
@@ -383,11 +396,14 @@ createApp({
Can be converted to the following extension:
```tsx
-createTranslationExtension({
- resource: createTranslationMessages({
- ref: catalogTranslationRef,
- catalog_page_create_button_title: 'Create Software',
- }),
+TranslationBlueprint.make({
+ name: 'catalog-overrides',
+ params: {
+ resource: createTranslationMessages({
+ ref: catalogTranslationRef,
+ catalog_page_create_button_title: 'Create Software',
+ }),
+ },
});
```
@@ -470,7 +486,7 @@ const routes = (
);
```
-If you are using [app feature discovery](../architecture/02-app.md#feature-discovery) the installation step is simple, it's already done! The new version of the scaffolder plugin was already discovered and present in the app, it was simply disabled because the plugin created from the legacy route had higher priority. If you do not use feature discovery, you will instead need to manually install the new scaffolder plugin in your app through the `features` option of `createApp`.
+If you are using [app feature discovery](../architecture/10-app.md#feature-discovery) the installation step is simple, it's already done! The new version of the scaffolder plugin was already discovered and present in the app, it was simply disabled because the plugin created from the legacy route had higher priority. If you do not use feature discovery, you will instead need to manually install the new scaffolder plugin in your app through the `features` option of `createApp`.
Continue this process for each of your legacy routes until you have migrated all of them. For any plugin with additional extensions installed as children of the `Route`, refer to the plugin READMEs for more detailed instructions. For the entity pages, refer to the [separate section](#entity-pages).
@@ -482,24 +498,22 @@ The entity pages are typically defined in `packages/app/src/components/catalog`
New apps feature a built-in sidebar extension (`app/nav`) that will render all nav item extensions provided by plugins. This is a placeholder implementation and not intended as a long-term solution. In the future we will aim to provide a more flexible sidebar extension that allows for more customization out of the box.
-Because the built-in sidebar is quite limited you may want to override the sidebar with your own custom implementation. To do so, use `createExtension` directly and refer to the [original sidebar implementation](https://github.com/backstage/backstage/blob/master/packages/frontend-app-api/src/extensions/AppNav.tsx). The following is an example of how to take your existing sidebar from the `Root` component that you typically find in `packages/app/src/components/Root.tsx`, and use it in an [extension override](../architecture/05-extension-overrides.md):
+Because the built-in sidebar is quite limited you may want to override the sidebar with your own custom implementation. To do so, use `createExtension` directly and refer to the [original sidebar implementation](https://github.com/backstage/backstage/blob/master/plugins/app/src/extensions/AppNav.tsx). The following is an example of how to take your existing sidebar from the `Root` component that you typically find in `packages/app/src/components/Root.tsx`, and use it in an [extension override](../architecture/25-extension-overrides.md):
```tsx
const nav = createExtension({
namespace: 'app',
name: 'nav',
attachTo: { id: 'app/layout', input: 'nav' },
- output: {
- element: coreExtensionData.reactElement,
- },
+ output: [coreExtensionData.reactElement],
factory({ inputs }) {
- return {
- element: (
+ return [
+ coreExtensionData.reactElement(
{/* Sidebar contents from packages/app/src/components/Root.tsx go here */}
-
+ ,
),
- };
+ ];
},
});
```
@@ -548,7 +562,7 @@ export default app.createRoot(
);
```
-Any app root wrapper needs to be migrated to be an extension, using `createAppRootWrapperExtension`. Note that if you have multiple wrappers they must be completely independent of each other, i.e. the order in which they the appear in the React tree should not matter. If that is not the case then you should group them into a single wrapper.
+Any app root wrapper needs to be migrated to be an extension, created using `AppRootWrapperBlueprint`. Note that if you have multiple wrappers they must be completely independent of each other, i.e. the order in which they the appear in the React tree should not matter. If that is not the case then you should group them into a single wrapper.
Here is an example converting the `CustomAppBarrier` into extension:
@@ -556,13 +570,16 @@ Here is an example converting the `CustomAppBarrier` into extension:
createApp({
// ...
features: [
- createExtensionOverrides({
+ createFrontendModule({
+ pluginId: 'app',
extensions: [
- createAppRootWrapperExtension({
- name: 'CustomAppBarrier',
- // Whenever your component uses legacy core packages, wrap it with "compatWrapper"
- // e.g. props => compatWrapper( )
- Component: CustomAppBarrier,
+ AppRootWrapperBlueprint.make({
+ name: 'custom-app-barrier',
+ params: {
+ // Whenever your component uses legacy core packages, wrap it with "compatWrapper"
+ // e.g. props => compatWrapper( )
+ Component: CustomAppBarrier,
+ },
}),
],
}),
diff --git a/docs/frontend-system/building-plugins/01-index.md b/docs/frontend-system/building-plugins/01-index.md
index f8d80f9382..633afd6ce8 100644
--- a/docs/frontend-system/building-plugins/01-index.md
+++ b/docs/frontend-system/building-plugins/01-index.md
@@ -8,9 +8,9 @@ description: Building frontend plugins using the new frontend system
> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
-This section covers how to build your own frontend [plugins](../architecture/04-plugins.md) and
-[overrides](../architecture/05-extension-overrides.md). They are sometimes collectively referred to as
-frontend _features_, and what you install to build up a Backstage frontend [app](../architecture/02-app.md).
+This section covers how to build your own frontend [plugins](../architecture/15-plugins.md) and
+[overrides](../architecture/25-extension-overrides.md). They are sometimes collectively referred to as
+frontend _features_, and what you install to build up a Backstage frontend [app](../architecture/10-app.md).
## Creating a new plugin
@@ -24,14 +24,14 @@ The created plugin will currently be templated for use in the legacy frontend sy
## The plugin instance
-The starting point of a frontend plugin is the `createPlugin` function, which accepts a single options object as its only parameter. It is imported from `@backstage/frontend-plugin-api`, which is where you will find most of the common APIs for building plugins.
+The starting point of a frontend plugin is the `createFrontendPlugin` function, which accepts a single options object as its only parameter. It is imported from `@backstage/frontend-plugin-api`, which is where you will find most of the common APIs for building plugins.
This is how to create a minimal plugin:
```tsx title="in src/plugin.ts"
-import { createPlugin } from '@backstage/frontend-plugin-api';
+import { createFrontendPlugin } from '@backstage/frontend-plugin-api';
-export const examplePlugin = createPlugin({
+export const examplePlugin = createFrontendPlugin({
id: 'example',
extensions: [],
});
@@ -43,13 +43,13 @@ export { examplePlugin as default } from './plugin';
Note that we export the plugin as the default export of our package from `src/index.ts`. This is important, as it is how users of our plugin are able to seamlessly install the plugin package in a Backstage app without having to reference the plugin instance through code.
-The plugin ID should be a lowercase dash-separated string, while the plugin instance variable should be the camel case version of the ID with a `Plugin` suffix. For more details on naming patterns within the frontend system, see [the article on naming patterns](../architecture/08-naming-patterns.md). By sticking to these naming patterns you ensure that users of your plugin more easily recognize the exports and features provided by your plugin.
+The plugin ID should be a lowercase dash-separated string, while the plugin instance variable should be the camel case version of the ID with a `Plugin` suffix. For more details on naming patterns within the frontend system, see [the article on naming patterns](../architecture/50-naming-patterns.md). By sticking to these naming patterns you ensure that users of your plugin more easily recognize the exports and features provided by your plugin.
## Adding extensions
-The plugin that we created above is empty, and doesn't provide any actual functionality. To add functionality to a plugin you need to create and provide it with one or more [extensions](../architecture/03-extensions.md). Let's continue by adding a standalone page to our plugin, as well as a navigation item that allows users to navigate to the page.
+The plugin that we created above is empty, and doesn't provide any actual functionality. To add functionality to a plugin you need to create and provide it with one or more [extensions](../architecture/20-extensions.md). Let's continue by adding a standalone page to our plugin, as well as a navigation item that allows users to navigate to the page.
-To create a new extension you typically use pre-defined [extension creators](../architecture/03-extensions.md#extension-creators), provided either by the framework itself or by other plugins. In this case we'll need to use `createPageExtension` and `createNavItemExtension`, both from `@backstage/frontend-plugin-api`. We will also need to [create a route reference](../architecture/07-routes.md#creating-a-route-reference) to use as a reference for out page, allowing us to dynamically create URLs that link to our page.
+To create a new extension you typically use pre-defined [extension blueprints](../architecture/23-extension-blueprints.md), provided either by the framework itself or by other plugins. In this case we'll use `PageBlueprint` and `NavItemBlueprint`, both from `@backstage/frontend-plugin-api`. We will also need to [create a route reference](../architecture/36-routes.md#creating-a-route-reference) to use as a reference for our page, allowing us to dynamically create URLs that link to our page.
```tsx title="in src/routes.ts"
import { createRouteRef } from '@backstage/frontend-plugin-api';
@@ -63,36 +63,41 @@ export const rootRouteRef = createRouteRef();
```tsx title="in src/plugin.ts"
import {
- createPlugin,
- createPageExtension,
- createNavItemExtension,
+ createFrontendPlugin,
+ PageBlueprint,
+ NavItemBlueprint,
} from '@backstage/frontend-plugin-api';
import { rootRouteRef } from './routes';
// Note that these extensions aren't exported, only the plugin itself is.
// You can export it locally for testing purposes, but don't export it from the plugin package.
-const examplePage = createPageExtension({
- routeRef: rootRouteRef,
+const examplePage = PageBlueprint.make({
+ params: {
+ routeRef: rootRouteRef,
- // This is the default path of this page, but integrators are free to override it
- defaultPath: '/example',
+ // This is the default path of this page, but integrators are free to override it
+ defaultPath: '/example',
- // Page extensions are always dynamically loaded using React.lazy().
- // All of the functionality of this page is implemented in the
- // ExamplePage component, which is a regular React component.
- // highlight-next-line
- loader: () => import('./components/ExamplePage').then(m => ),
+ // Page extensions are always dynamically loaded using React.lazy().
+ // All of the functionality of this page is implemented in the
+ // ExamplePage component, which is a regular React component.
+ // highlight-next-line
+ loader: () =>
+ import('./components/ExamplePage').then(m => ),
+ },
});
// This nav item is provided to the app.nav extension, and will by default be rendered as a sidebar item
-const exampleNavItem = createNavItemExtension({
- routeRef: rootRouteRef,
- title: 'Example',
- icon: ExampleIcon, // Custom SvgIcon, or one from the Material UI icon library
+const exampleNavItem = NavItemBlueprint.make({
+ params: {
+ routeRef: rootRouteRef,
+ title: 'Example',
+ icon: ExampleIcon, // Custom SvgIcon, or one from the Material UI icon library
+ },
});
// The same plugin as above, now with the extensions added
-export const examplePlugin = createPlugin({
+export const examplePlugin = createFrontendPlugin({
id: 'example',
extensions: [examplePage, exampleNavItem],
// We can also make routes available to other plugins.
@@ -106,7 +111,7 @@ export const examplePlugin = createPlugin({
What we've built here is a very common type of plugin. It's a top-level tool that provides a single page, along with a method for navigating to that page. The implementation of the page component, in this case the highlighted `ExamplePage`, can be arbitrarily complex. It can be anything from a single simple information page, to a full-blown application with multiple sub-pages.
-We have also provided external access to our route reference by passing it to the plugin `routes` option. This makes it possible for app integrators to bind an external link from a different plugin to our plugin page. You can read more about how this works in the [External Route References](../architecture/07-routes.md#external-route-references) section.
+We have also provided external access to our route reference by passing it to the plugin `routes` option. This makes it possible for app integrators to bind an external link from a different plugin to our plugin page. You can read more about how this works in the [External Route References](../architecture/36-routes.md#external-route-references) section.
## Utility APIs
@@ -150,25 +155,25 @@ export function ExamplePage() {
```
```tsx title="in src/plugin.ts - Registering a factory for our API"
-import {
- createApiFactory,
- createApiExtension,
-} from '@backstage/frontend-plugin-api';
+import { createApiFactory, ApiBlueprint } from '@backstage/frontend-plugin-api';
import { exampleApiRef, DefaultExampleApi } from './api';
// highlight-add-start
-const exampleApi = createApiExtension({
- factory: createApiFactory({
- api: exampleApiRef,
- deps: {},
- factory: () => new DefaultExampleApi(),
- }),
+const exampleApi = ApiBlueprint.make({
+ name: 'example',
+ params: {
+ factory: createApiFactory({
+ api: exampleApiRef,
+ deps: {},
+ factory: () => new DefaultExampleApi(),
+ }),
+ },
});
// highlight-add-end
/* Omitted definitions for examplePage, exampleNavItem, and rootRouteRef. */
-export const examplePlugin = createPlugin({
+export const examplePlugin = createFrontendPlugin({
id: 'example',
extensions: [
// highlight-add-next-line
@@ -187,26 +192,28 @@ export const examplePlugin = createPlugin({
There are many different plugins that you can extend with additional functionality through extensions. One such plugin is [the catalog plugin](../../features/software-catalog/), one of the core features of Backstage. It lets you catalog the software in your organization, where each item in the catalog has its own page that can be populated with tools and information relating to that catalog entity. In this example we will explore how our plugin can provide such a tool to display on an entity page.
```tsx title="in src/plugin.ts - An example entity content extension"
-import { createEntityContentExtension } from '@backstage/plugin-catalog-react';
+import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
// Entity content extensions are similar to page extensions in that they are rendered at a route,
// although they also have a title to support in-line navigation between the different content.
// Just like a page extension the content is lazy loaded, and you can also provide a
// route reference if you want to be able to generate a URL that links to the content.
-const exampleEntityContent = createEntityContentExtension({
- defaultPath: 'example',
- defaultTitle: 'Example',
- loader: () =>
- import('./components/ExampleEntityContent').then(m => (
-
- )),
+const exampleEntityContent = EntityContentBlueprint.make({
+ params: {
+ defaultPath: 'example',
+ defaultTitle: 'Example',
+ loader: () =>
+ import('./components/ExampleEntityContent').then(m => (
+
+ )),
+ },
});
-export const examplePlugin = createPlugin({
+export const examplePlugin = createFrontendPlugin({
id: 'example',
extensions: [
// highlight-add-next-line
- exampleEntityContent
+ exampleEntityContent,
exampleApi,
examplePage,
exampleNavItem,
@@ -219,4 +226,4 @@ export const examplePlugin = createPlugin({
The `ExampleEntityContent` itself is again a regular React component where you can implement any functionality you want. To access the entity that the content is being rendered for, you can use the `useEntity` hook from `@backstage/plugin-catalog-react`. You can see a full list of APIs provided by the catalog React library in [the API reference](../../reference/plugin-catalog-react.md).
-For a more complete list of the different types of extensions that you can create for your plugin, see the [extension types](./03-extension-types.md) section.
+For a more complete list of the different kinds of extensions that you can create for your plugin, see the [extension blueprints](./03-common-extension-blueprints.md) section.
diff --git a/docs/frontend-system/building-plugins/02-testing.md b/docs/frontend-system/building-plugins/02-testing.md
index 26c9503c6d..225c570fbd 100644
--- a/docs/frontend-system/building-plugins/02-testing.md
+++ b/docs/frontend-system/building-plugins/02-testing.md
@@ -41,7 +41,7 @@ describe('Entity details component', () => {
});
```
-To mock [Utility APIs](../architecture/06-utility-apis.md) that are used by your component you can use the `TestApiProvider` to override individual API implementations. In the snippet below, we wrap the component within a `TestApiProvider` in order to mock the catalog client API:
+To mock [Utility APIs](../architecture/33-utility-apis.md) that are used by your component you can use the `TestApiProvider` to override individual API implementations. In the snippet below, we wrap the component within a `TestApiProvider` in order to mock the catalog client API:
```tsx
import React from 'react';
@@ -85,6 +85,8 @@ describe('Entity details component', () => {
});
```
+This pattern also works for many other context providers. An important example is the `EntityProvider` from the `@backstage/plugin-catalog-react` package, which you can use to provide a mocked entity context to the component.
+
## Testing extensions
To facilitate testing of frontend extensions, the `@backstage/frontend-test-utils` package provides a tester class which starts up an entire frontend harness, complete with a number of default features. You can then provide overrides for extensions whose behavior you need to adjust for the test run.
@@ -93,7 +95,7 @@ A number of features (frontend extensions and overrides) are also accepted by th
### Single extension
-In order to test an extension in isolation, you simply need to pass it into the tester factory, then call the render method on the returned instance:
+In order to test an extension in isolation, you can use `createExtensionTester` to create a tester instance and access the element that the extension outputs. This element can then be rendered as usual with `renderInTestApp`:
```tsx
import { screen } from '@testing-library/react';
@@ -101,90 +103,49 @@ import { createExtensionTester } from '@backstage/frontend-test-utils';
import { indexPageExtension } from './plugin';
describe('Index page', () => {
- it('should render a the index page', () => {
- createExtensionTester(indexPageExtension).render();
+ it('should render a the index page', async () => {
+ await renderInTestApp(
+ createExtensionTester(indexPageExtension).reactElement(),
+ );
expect(screen.getByText('Index Page')).toBeInTheDocument();
});
});
```
-### Extension preset
+This pattern also allows you to wrap the extension with context providers, such as the `TestApiProvider` that was introduced [above](#testing-react-components).
-There are some extensions that rely on other extensions existence, such as a page that links to another page. In that case, you can add more than one extension to the preset of features you want to render in the test, as shown below:
+Note that the `.reactElement()` method will look for the `coreExtensionData.reactElement` data in the extension outputs. If that doesn't exist and the extension outputs something else that you want to test, you can access the output data using the `.get(dataRef)` method instead.
+
+### Multiple extensions
+
+In some cases you might need to test multiple extensions together, in particular when testing inputs. In this case, you can add more extensions to the tester instance using the `.add(...)` method. It also accepts an optional options object as the second argument, which you can use to provide configuration for the extension instance.
```tsx
import { screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { createExtensionTester } from '@backstage/frontend-test-utils';
-import { indexPageExtension, detailsPageExtension } from './plugin';
+import { indexPageExtension, indexPageHeader } from './plugin';
describe('Index page', async () => {
- it('should link to the details page', () => {
- createExtensionTester(indexPageExtension)
- // Adding more extensions to the preset being tested
- .add(detailsPageExtension)
- .render();
+ it('should link to the index page with header', async () => {
+ const tester = createExtensionTester(indexPageExtension)
+ // Adding the header to be rendered on the index page
+ .add(indexPageHeader);
- await expect(screen.findByText('Index Page')).toBeInTheDocument();
+ await renderInTestApp(tester.reactElement());
- await userEvent.click(screen.getByRole('link', { name: 'See details' }));
+ await expect(screen.findByText('Index page')).toBeInTheDocument();
+ await expect(screen.findByText('Index page header')).toBeInTheDocument();
- await expect(
- screen.findByText('Details Page'),
- ).resolves.toBeInTheDocument();
+ expect(
+ tester.query(indexPageHeader).get(headerDataRef),
+ ).toMatchObject(/* ... */);
});
});
```
-### Mocking apis
-
-If your extensions requires implementation of APIs that aren't wired up by default, you'll have to add overrides to the preset of features being tested:
-
-```tsx
-import { screen } from '@testing-library/react';
-import userEvent from '@testing-library/user-event';
-import { createApiFactory } from '@backestage/core-plugin-api';
-import {
- createExtensionOverrides,
- configApiRef,
- analyticsApiRef,
-} from '@backstage/frontend-plugin-api';
-import {
- createExtensionTester,
- MockConfigApi,
- MockAnalyticsApi,
-} from '@backstage/frontend-test-utils';
-import { indexPageExtension } from './plugin';
-
-describe('Index page', () => {
- it('should capture click events in analytics', async () => {
- // Mocking the analytics api implementation
- const analyticsApiMock = new MockAnalyticsApi();
-
- const analyticsApiOverride = createApiExtension({
- factory: createApiFactory({
- api: analyticsApiRef,
- factory: () => analyticsApiMock,
- }),
- });
-
- createExtensionTester(indexPageExtension)
- // Overriding the analytics api extension
- .add(analyticsApiOverride)
- .render();
-
- await userEvent.click(
- await screen.findByRole('link', { name: 'See details' }),
- );
-
- expect(analyticsApiMock.getEvents()[0]).toMatchObject({
- action: 'click',
- subject: 'See details',
- });
- });
-});
-```
+When testing multiple extensions you may sometimes want to access the output of other extensions than the main test subject. You can use the `.query(ext)` method to query a different extension that has been added to the tester, by passing the extension used with the `createExtensionTester(...).add(ext)`
### Setting configuration
@@ -198,36 +159,26 @@ import { indexPageExtension, detailsPageExtension } from './plugin';
describe('Index page', () => {
it('should accepts a custom title via config', async () => {
- createExtensionTester(indexPageExtension, {
- // Configuration specific of index page
- config: { title: 'Custom index' },
- })
- .add(detailsExtensionPage, {
- // Configuration specific of details page
- config: { title: 'Custom details' },
- })
- .render({
- // Configuration specific of the instance
- config: {
- app: {
- title: 'Custom app',
- },
+ const tester = createExtensionTester(indexPageExtension, {
+ // Extension configuration for the index page
+ config: { title: 'Custom page' },
+ }).add(indexPageHeader, {
+ // Extension configuration for the index page header
+ config: { title: 'Custom page header' },
+ });
+
+ await renderInTestApp(tester.reactElement(), {
+ // Global configuration for the app
+ config: {
+ app: {
+ title: 'Custom app',
},
- });
+ },
+ });
- await expect(
- screen.findByRole('heading', { name: 'Custom app' }),
- ).resolves.toBeInTheDocument();
-
- await expect(
- screen.findByRole('heading', { name: 'Custom index' }),
- ).resolves.toBeInTheDocument();
-
- await userEvent.click(screen.getByRole('link', { name: 'See details' }));
-
- await expect(
- screen.findByText('Custom details'),
- ).resolves.toBeInTheDocument();
+ await expect(screen.findByText('Custom app')).toBeInTheDocument();
+ await expect(screen.findByText('Custom page')).toBeInTheDocument();
+ await expect(screen.findByText('Custom page header')).toBeInTheDocument();
});
});
```
diff --git a/docs/frontend-system/building-plugins/03-extension-types.md b/docs/frontend-system/building-plugins/03-common-extension-blueprints.md
similarity index 59%
rename from docs/frontend-system/building-plugins/03-extension-types.md
rename to docs/frontend-system/building-plugins/03-common-extension-blueprints.md
index 1f3baaa710..d08de7012d 100644
--- a/docs/frontend-system/building-plugins/03-extension-types.md
+++ b/docs/frontend-system/building-plugins/03-common-extension-blueprints.md
@@ -1,40 +1,40 @@
---
-id: extension-types
-title: Frontend System Extension Types
-sidebar_label: Extension Types
+id: common-extension-blueprints
+title: Common Extension Blueprints
+sidebar_label: Common Extension Blueprints
# prettier-ignore
-description: Extension types provided by the frontend system and core features
+description: Extension blueprints provided by the frontend system and core features
---
> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
-This section covers many of the [extension types](../architecture/03-extensions.md#extension-creators) available at your disposal when building Backstage frontend plugins.
+This section covers many of the [extension blueprints](../architecture/23-extension-blueprints.md) available at your disposal when building Backstage frontend plugins.
-## Built-in extension types
+## Built-in extension blueprints
-These are the extension types provided by the Backstage frontend framework itself.
+These are the [extension blueprints](../architecture/23-extension-blueprints.md) provided by the Backstage frontend framework itself.
-### Api - [Reference](../../reference/frontend-plugin-api.createapiextension.md)
+### Api - [Reference](../../reference/frontend-plugin-api.apiblueprint.md)
An API extension is used to add or override [Utility API factories](../utility-apis/01-index.md) in the app. They are commonly used by plugins for both internal and shared APIs. There are also many built-in Api extensions provided by the framework that you are able to override.
### Component - [Reference](../../reference/frontend-plugin-api.createcomponentextension.md)
-Components extensions are used to override the component associated with a component reference throughout the app.
+Components extensions are used to override the component associated with a component reference throughout the app. This uses an extension creator function rather than a blueprint, but will likely be migrated to a blueprint in the future.
-### NavItem - [Reference](../../reference/frontend-plugin-api.createnavitemextension.md)
+### NavItem - [Reference](../../reference/frontend-plugin-api.navitemblueprint.md)
Navigation item extensions are used to provide menu items that link to different parts of the app. By default nav items are attached to the app nav extension, which by default is rendered as the left sidebar in the app.
-### Page - [Reference](../../reference/frontend-plugin-api.createpageextension.md)
+### Page - [Reference](../../reference/frontend-plugin-api.pageblueprint.md)
Page extensions provide content for a particular route in the app. By default pages are attached to the app routes extensions, which renders the root routes.
-### SignInPage - [Reference](../../reference/frontend-plugin-api.createsigninpageextension.md)
+### SignInPage - [Reference](../../reference/frontend-plugin-api.signinpageblueprint.md)
Sign-in page extension have a single purpose - to implement a custom sign-in page. They are always attached to the app root extension and are rendered before the rest of the app until the user is signed in.
-### Theme - [Reference](../../reference/frontend-plugin-api.createthemeextension.md)
+### Theme - [Reference](../../reference/frontend-plugin-api.themeblueprint.md)
Theme extensions provide custom themes for the app. They are always attached to the app extension and you can have any number of themes extensions installed in an app at once, letting the user choose which theme to use.
@@ -42,22 +42,22 @@ Theme extensions provide custom themes for the app. They are always attached to
Icon bundle extensions provide the ability to replace or provide new icons to the app. You can use the above blueprint to make new extension instances which can be installed into the app.
-### Translation - [Reference](../../reference/frontend-plugin-api.createtranslationextension.md)
+### Translation - [Reference](../../reference/frontend-plugin-api.translationblueprint.md)
Translation extension provide custom translation messages for the app. They can be used both to override the default english messages to custom ones, as well as provide translations for additional languages.
-## Core feature extension types
+## Core feature extension blueprints
-These are the extension types provided by the Backstage core feature plugins.
+These are the [extension blueprints](../architecture/23-extension-blueprints.md) provided by the Backstage core feature plugins.
-### EntityCard - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md)
+### EntityCard - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md)
-Creates entity cards to be displayed on the entity pages of the catalog plugin.
+Creates entity cards to be displayed on the entity pages of the catalog plugin. Exported as `EntityCardBlueprint`.
-### EntityContent - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/api-report-alpha.md)
+### EntityContent - [Reference](https://github.com/backstage/backstage/blob/master/plugins/catalog-react/report-alpha.api.md)
-Creates entity content to be displayed on the entity pages of the catalog plugin.
+Creates entity content to be displayed on the entity pages of the catalog plugin. Exported as `EntityContentBlueprint`.
-### SearchResultListItem - [Reference](https://github.com/backstage/backstage/blob/master/plugins/search-react/api-report-alpha.md)
+### SearchResultListItem - [Reference](https://github.com/backstage/backstage/blob/master/plugins/search-react/report-alpha.api.md)
-Creates search result list items for different types of search results, to be displayed in search result lists.
+Creates search result list items for different types of search results, to be displayed in search result lists. Exported as `SearchResultListItemBlueprint`.
diff --git a/docs/frontend-system/building-plugins/04-built-in-data-refs.md b/docs/frontend-system/building-plugins/04-built-in-data-refs.md
index dacbbf30f1..a26f6549b7 100644
--- a/docs/frontend-system/building-plugins/04-built-in-data-refs.md
+++ b/docs/frontend-system/building-plugins/04-built-in-data-refs.md
@@ -8,7 +8,7 @@ description: Configuring or overriding built-in extension data references
> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
-To have a better understanding of extension data references please read [the corresponding architecture section](../architecture/03-extensions.md#extension-data) first.
+To have a better understanding of extension data references please read [the corresponding architecture section](../architecture/20-extensions.md#extension-data) first.
## Built-in extension data references
@@ -24,18 +24,15 @@ The `reactElement` data reference can be used for defining the extension input/o
```tsx
import {
+ createExtension,
coreExtensionData,
- createExtensionInput,
- createPageExtension,
} from '@backstage/frontend-plugin-api';
-const homePage = createPageExtension({
- defaultPath: '/home',
- routeRef: rootRouteRef,
- inputs: {
- props: createExtensionInput({
- children: coreExtensionData.reactElement.optional(),
- }),
+const examplePage = createExtension({
+ name: 'example',
+ output: [coreExtensionData.reactElement],
+ factor() {
+ return [coreExtensionData.reactElement(Example )];
},
});
```
diff --git a/docs/frontend-system/building-plugins/05-migrating.md b/docs/frontend-system/building-plugins/05-migrating.md
index 16f465ece7..cf4d82002a 100644
--- a/docs/frontend-system/building-plugins/05-migrating.md
+++ b/docs/frontend-system/building-plugins/05-migrating.md
@@ -8,7 +8,7 @@ description: How to migrate an existing frontend plugin to the new frontend syst
This guide allows you to migrate a frontend plugin and its own components, routes, apis to the new frontend system.
-The main concept is that routes, components, apis are now extensions. You can use the appropriate extension creators to migrate all of them to extensions.
+The main concept is that routes, components, apis are now extensions. You can use the appropriate [extension blueprints](../architecture/23-extension-blueprints.md) to migrate all of them to extensions.
## Migrating the plugin
@@ -29,13 +29,13 @@ In the legacy frontend system a plugin was defined in its own `plugin.ts` file a
});
```
-In order to migrate the actual definition of the plugin you need to recreate the plugin using the new `createPlugin` utility exported by `@backstage/frontend-plugin-api`.
-The new `createPlugin` function doesn't accept apis anymore as apis are now extensions.
+In order to migrate the actual definition of the plugin you need to recreate the plugin using the new `createFrontendPlugin` utility exported by `@backstage/frontend-plugin-api`.
+The new `createFrontendPlugin` function doesn't accept apis anymore as apis are now extensions.
```ts title="my-plugin/src/alpha.ts"
- import { createPlugin } from '@backstage/frontend-plugin-api';
+ import { createFrontendPlugin } from '@backstage/frontend-plugin-api';
- export default createPlugin({
+ export default createFrontendPlugin({
id: 'my-plugin',
// bind all the extensions to the plugin
/* highlight-next-line */
@@ -77,7 +77,7 @@ The code above binds all the extensions to the plugin. _Important_: Make sure to
## Migrating Pages
-Pages that were previously created using the `createRoutableExtension` extension function can be migrated to the new Frontend System using the `createPageExtension` extension creator, exported by `@backstage/frontend-plugin-api`.
+Pages that were previously created using the `createRoutableExtension` extension function can be migrated to the new Frontend System using the `PageBlueprint` [extension blueprint](../architecture/23-extension-blueprints.md), exported by `@backstage/frontend-plugin-api`.
For example, given the following page:
@@ -94,33 +94,35 @@ export const FooPage = fooPlugin.provide(
it can be migrated as the following:
```tsx
-import { createPageExtension } from '@backstage/frontend-plugin-api';
+import { PageBlueprint } from '@backstage/frontend-plugin-api';
import {
compatWrapper,
convertLegacyRouteRef,
} from '@backstage/core-compat-api';
-const fooPage = createPageExtension({
- defaultPath: '/foo',
- // you can reuse the existing routeRef
- // by wrapping into the convertLegacyRouteRef.
- routeRef: convertLegacyRouteRef(rootRouteRef),
- // these inputs usually match the props required by the component.
- loader: ({ inputs }) =>
- import('./components/').then(m =>
- // The compatWrapper utility allows you to use the existing
- // legacy frontend utilities used internally by the components.
- compatWrapper( ),
- ),
+const fooPage = PageBlueprint.make({
+ params: {
+ defaultPath: '/foo',
+ // you can reuse the existing routeRef
+ // by wrapping into the convertLegacyRouteRef.
+ routeRef: convertLegacyRouteRef(rootRouteRef),
+ // these inputs usually match the props required by the component.
+ loader: ({ inputs }) =>
+ import('./components/').then(m =>
+ // The compatWrapper utility allows you to use the existing
+ // legacy frontend utilities used internally by the components.
+ compatWrapper( ),
+ ),
+ },
});
```
-then add the `fooPage` extension to the plugin:
+Then add the `fooPage` extension to the plugin:
```ts title="my-plugin/src/alpha.ts"
- import { createPlugin } from '@backstage/frontend-plugin-api';
+ import { createFrontendPlugin } from '@backstage/frontend-plugin-api';
- export default createPlugin({
+ export default createFrontendPlugin({
id: 'my-plugin',
// bind all the extensions to the plugin
/* highlight-remove-next-line */
@@ -133,7 +135,7 @@ then add the `fooPage` extension to the plugin:
## Migrating Components
-The equivalent utility to replace components created with `createComponentExtension` is `createExtension` from `@backstage/frontend-plugin-api`. However, we recommend searching for a more appropriate extension creator first.
+The equivalent utility to replace components created with `createComponentExtension` depends on the context within which the component is used, typically indicated by the naming pattern of the export. Many of these can be migrated to one of the [existing blueprints](03-common-extension-blueprints.md), but in rare cases it may be necessary to use [`createExtension`](../architecture/20-extensions.md#creating-an-extension) directly.
## Migrating APIs
@@ -182,7 +184,7 @@ const exampleWorkApi = createApiFactory({
The major changes we'll make are
- Change the old `@backstage/core-plugin-api` imports to the new `@backstage/frontend-plugin-api` package as per the top section of this guide
-- Wrap the existing API factory in a `createApiExtension`
+- Wrap the existing API factory in a `ApiBlueprint`
The end result, after simplifying imports and cleaning up a bit, might look like this:
@@ -190,26 +192,28 @@ The end result, after simplifying imports and cleaning up a bit, might look like
import {
storageApiRef,
createApiFactory,
- createApiExtension,
+ ApiBlueprint,
} from '@backstage/frontend-plugin-api';
import { workApiRef } from '@internal/plugin-example-react';
import { WorkImpl } from './WorkImpl';
-const exampleWorkApi = createApiExtension({
- factory: createApiFactory({
- api: workApiRef,
- deps: { storageApi: storageApiRef },
- factory: ({ storageApi }) => new WorkImpl({ storageApi }),
- }),
+const exampleWorkApi = ApiBlueprint.make({
+ params: {
+ factory: createApiFactory({
+ api: workApiRef,
+ deps: { storageApi: storageApiRef },
+ factory: ({ storageApi }) => new WorkImpl({ storageApi }),
+ }),
+ },
});
```
Finally, let's add the `exampleWorkApi` extension to the plugin:
```ts title="my-plugin/src/alpha.ts"
- import { createPlugin } from '@backstage/frontend-plugin-api';
+ import { createFrontendPlugin } from '@backstage/frontend-plugin-api';
- export default createPlugin({
+ export default createFrontendPlugin({
id: 'my-plugin',
// bind all the extensions to the plugin
/* highlight-remove-next-line */
diff --git a/docs/frontend-system/utility-apis/01-index.md b/docs/frontend-system/utility-apis/01-index.md
index 37120a5152..07f7dcc2a8 100644
--- a/docs/frontend-system/utility-apis/01-index.md
+++ b/docs/frontend-system/utility-apis/01-index.md
@@ -8,7 +8,7 @@ description: Working with Utility APIs in the New Frontend System
> **NOTE: The new frontend system is in alpha and is only supported by a small number of plugins.**
-As described [in the architecture section](../architecture/06-utility-apis.md), utility APIs are pieces of shared functionality - interfaces that can be requested by plugins to use. They are defined by a TypeScript interface as well as a reference (an "API ref") used to access its implementation. They can be provided both by plugins and the core framework, and are themselves [extensions](../architecture/03-extensions.md) that can accept inputs, be declaratively configured in your app-config, or transparently be replaced entirely with custom implementations that fulfill the same contract.
+As described [in the architecture section](../architecture/33-utility-apis.md), utility APIs are pieces of shared functionality - interfaces that can be requested by plugins to use. They are defined by a TypeScript interface as well as a reference (an "API ref") used to access its implementation. They can be provided both by plugins and the core framework, and are themselves [extensions](../architecture/20-extensions.md) that can accept inputs, be declaratively configured in your app-config, or transparently be replaced entirely with custom implementations that fulfill the same contract.
## Creating utility APIs
diff --git a/docs/frontend-system/utility-apis/02-creating.md b/docs/frontend-system/utility-apis/02-creating.md
index fcb7ff1a65..01c21fe656 100644
--- a/docs/frontend-system/utility-apis/02-creating.md
+++ b/docs/frontend-system/utility-apis/02-creating.md
@@ -45,9 +45,9 @@ The plugin itself now wants to provide this API and its default implementation,
```tsx title="in @internal/plugin-example"
import {
- createApiExtension,
+ ApiBlueprint,
createApiFactory,
- createPlugin,
+ createFrontendPlugin,
storageApiRef,
StorageApi,
} from '@backstage/frontend-plugin-api';
@@ -62,21 +62,24 @@ class WorkImpl implements WorkApi {
}
}
-const exampleWorkApi = createApiExtension({
- factory: createApiFactory({
- api: workApiRef,
- deps: { storageApi: storageApiRef },
- factory: ({ storageApi }) => {
- return new WorkImpl({ storageApi });
- },
- }),
+const workApi = ApiBlueprint.make({
+ name: 'work',
+ params: {
+ factory: createApiFactory({
+ api: workApiRef,
+ deps: { storageApi: storageApiRef },
+ factory: ({ storageApi }) => {
+ return new WorkImpl({ storageApi });
+ },
+ }),
+ },
});
/**
* The Example plugin.
* @public
*/
-export default createPlugin({
+export default createFrontendPlugin({
id: 'example',
extensions: [exampleWorkApi],
});
@@ -86,43 +89,37 @@ For illustration we make a skeleton implementation class and the API extension a
The code also illustrates how the API factory declares a dependency on another utility API - the core storage API in this case. An instance of that utility API is then provided to the factory function.
-The resulting extension ID of the work API will be the kind `api:` followed by the plugin ID as the namespace, in this case ending up as `api:plugin.example.work`. Check out [the naming patterns doc](../architecture/08-naming-patterns.md) for more information on how this works. You can now use this ID to refer to the API in app-config and elsewhere.
+The extension ID of the work API will be the kind `api:` followed by the plugin ID as the namespace, a `/` separator, and lastly the name we used of the extension. In this case we end up with `api:example/work`. Check out [the naming patterns doc](../architecture/50-naming-patterns.md) for more information on how this works. You can now use this ID to refer to the API in app-config and elsewhere. In case there is a single API that is a central to the functionality of the plugin, most typically an API client, you can choose to omit the name of the extension so that you end up with just `api:`.
## Adding configurability
-Here we will describe how to amend a utility API with the capability of having extension config, which is driven by [your app-config](../../conf/writing.md). You do this by giving an extension config schema to your API extension factory function. Let's make the required additions to our original work example API.
+Here we will describe how to amend a utility API with the capability of having extension config, which is driven by [your app-config](../../conf/writing.md). You do this by giving an extension config schema to your API extension factory function. Let's refactory the example above to also accept configuration, which will require us to use the [override method of the blueprint](../architecture/23-extension-blueprints.md#creating-an-extension-from-a-blueprint-with-overrides).
```tsx title="in @internal/plugin-example"
-/* highlight-add-next-line */
-import { createSchemaFromZod } from '@backstage/frontend-plugin-api';
-
-const exampleWorkApi = createApiExtension({
- /* highlight-add-start */
- api: workApiRef,
- configSchema: createSchemaFromZod(z =>
- z.object({
- goSlow: z.boolean().default(false),
- }),
- ),
- /* highlight-add-end */
- /* highlight-remove-next-line */
- factory: createApiFactory({
- /* highlight-add-next-line */
- factory: ({ config }) => createApiFactory({
- api: workApiRef,
- deps: { storageApi: storageApiRef },
- factory: ({ storageApi }) => {
- /* highlight-add-start */
- if (config.goSlow) {
- /* ... */
- }
- /* highlight-add-end */
+const exampleWorkApi = ApiBlueprint.makeWithOverrides({
+ config: {
+ schema: {
+ goSlow: z => z.boolean().default(false),
},
- }),
+ },
+ factory(originalFactory, { config }) {
+ return originalFactory({
+ factory: createApiFactory({
+ api: workApiRef,
+ deps: { storageApi: storageApiRef },
+ factory: ({ storageApi }) => {
+ return new WorkImpl({
+ storageApi,
+ goSlow: config.goSlow,
+ });
+ },
+ }),
+ });
+ },
});
```
-We wanted users to be able to set a `goSlow` extension config parameter for our API instances. So we passed in a `configSchema` to `createApiExtension` which matches that interface. This example builds it using [the zod library](https://zod.dev/). The actual extension config values will then be passed in a type safe manner in to the `factory` which is now a callback, wherein we can do what we wish with them. When changing to the callback form, we also had to add a top level `api: workApiRef` under `createApiExtension`.
+We wanted users to be able to set a `goSlow` extension config parameter for our API instances, which we declared in our new configuration schema. The actual extension config values will then be passed in a type safe manner in to the blueprint `factory`, wherein we can use them to create our API factory and pass as our blueprint parameters.
Note that the expression "extension config" as used here, is _not_ the same thing as the `configApi` which gives you access to the full app-config. The extension config discussed here is instead the particular configuration settings given to your utility API instance. This is discussed more [in the Configuring section](./04-configuring.md).
@@ -130,11 +127,11 @@ Note also that the extension config schema contained a default value fo the `goS
## Adding inputs
-Inputs are added to Utility APIs in the same way as other extension types:
+Inputs are added to Utility APIs in the same way as other extension blueprints:
-- Declaring a set of `inputs` on your extension
-- If needed, create custom extension data types to be used in those inputs
-- If needed, export an extension creator function for creating that particular attachment type
+- Use `.makeWithOverrides` and declare a set of `inputs` for your extension.
+- If needed, create custom extension data types to be used in those inputs.
+- If needed, create and export an [extension blueprint](../architecture/23-extension-blueprints.md#creating-an-extension-blueprint) for creating that particular attachment type.
This is a power use case and not very commonly used.
diff --git a/docs/frontend-system/utility-apis/03-consuming.md b/docs/frontend-system/utility-apis/03-consuming.md
index 5c53c8617e..bdf3b8dcdb 100644
--- a/docs/frontend-system/utility-apis/03-consuming.md
+++ b/docs/frontend-system/utility-apis/03-consuming.md
@@ -46,23 +46,25 @@ Your utility APIs can depend on other utility APIs in their factories. You do th
```tsx
import {
configApiRef,
- createApiExtension,
+ ApiBlueprint,
createApiFactory,
discoveryApiRef,
} from '@backstage/frontend-plugin-api';
import { MyApiImpl } from './MyApiImpl';
-const myApi = createApiExtension({
- factory: createApiFactory({
- api: myApiRef,
- deps: {
- configApi: configApiRef,
- discoveryApi: discoveryApiRef,
- },
- factory: ({ configApi, discoveryApi }) => {
- return new MyApiImpl({ configApi, discoveryApi });
- },
- }),
+const myApi = ApiBlueprint.make({
+ params: {
+ factory: createApiFactory({
+ api: myApiRef,
+ deps: {
+ configApi: configApiRef,
+ discoveryApi: discoveryApiRef,
+ },
+ factory: ({ configApi, discoveryApi }) => {
+ return new MyApiImpl({ configApi, discoveryApi });
+ },
+ }),
+ },
});
```
diff --git a/docs/frontend-system/utility-apis/04-configuring.md b/docs/frontend-system/utility-apis/04-configuring.md
index 7acf23decf..4847fc6eaf 100644
--- a/docs/frontend-system/utility-apis/04-configuring.md
+++ b/docs/frontend-system/utility-apis/04-configuring.md
@@ -12,7 +12,7 @@ Utility APIs are extensions and can therefore optionally be amended with configu
## Configuring
-To configure your Utility API extension, first you'll need to know its ID. That ID is formed from the API ref ID; check [the naming patterns docs](../architecture/08-naming-patterns.md) for details.
+To configure your Utility API extension, first you'll need to know its ID. That ID is formed from the API ref ID; check [the naming patterns docs](../architecture/50-naming-patterns.md) for details.
Our example work API from [the creating section](./02-creating.md) would have the ID `api:plugin.example.work`. You configure it and all other extensions under the `app.extensions` section of your app-config.
@@ -37,25 +37,26 @@ Well written input-enabled extension often have extension creator functions that
## Replacing a Utility API implementation
-Like with other extension types, you replace Utility APIs with your own custom implementation using [extension overrides](../architecture/05-extension-overrides.md).
+Like with other extension types, you replace Utility APIs with your own custom implementation using [extension overrides](../architecture/25-extension-overrides.md).
```tsx title="in your app"
/* highlight-add-start */
-import { createExtensionOverrides } from '@backstage/frontend-plugin-api';
+import { createFrontendModule } from '@backstage/frontend-plugin-api';
class CustomWorkImpl implements WorkApi {
/* ... */
}
-const myOverrides = createExtensionOverrides({
+const workModule = createFrontendModule({
+ pluginId: 'work',
extensions: [
- createApiExtension({
- api: workApiRef,
- factory: () =>
- createApiFactory({
+ ApiBlueprint.make({
+ params: {
+ factory: createApiFactory({
api: workApiRef,
factory: () => new CustomWorkImpl(),
}),
+ },
}),
],
});
@@ -66,7 +67,7 @@ export default createApp({
features: [
// ... other features
/* highlight-add-next-line */
- myOverrides,
+ workModule,
],
});
```
diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md
index 4c013440da..1bff5b1eb0 100644
--- a/docs/getting-started/app-custom-theme.md
+++ b/docs/getting-started/app-custom-theme.md
@@ -48,6 +48,8 @@ import { createApp } from '@backstage/app-defaults';
import { ThemeProvider } from '@material-ui/core/styles';
import CssBaseline from '@material-ui/core/CssBaseline';
import LightIcon from '@material-ui/icons/WbSunny';
+import { UnifiedThemeProvider} from '@backstage/theme';
+import { myTheme } from './themes/myTheme';
const app = createApp({
apis: ...,
diff --git a/docs/getting-started/config/authentication.md b/docs/getting-started/config/authentication.md
index e97ed3d89c..2442d2b767 100644
--- a/docs/getting-started/config/authentication.md
+++ b/docs/getting-started/config/authentication.md
@@ -1,50 +1,54 @@
---
id: authentication
title: Authentication
-description: How to set up authentication into your Backstage installation
+description: How to setup authentication for your Backstage app
---
Audience: Admins or Developers
-### Setting up authentication
+## Summary
-There are multiple authentication providers available for you to use with
-Backstage, feel free to follow
-[the instructions for adding authentication](../../auth/index.md).
+We'll be walking you through how to setup authentication for your Backstage app using GitHub. After finishing this guide, you'll have both working authentication and users in your Backstage app to match to the users logging in!
-For this tutorial we choose to use GitHub, a free service most of you might be
-familiar with. For other options, see
-[the auth provider documentation](../../auth/github/provider.md#create-an-oauth-app-on-github).
+There are multiple authentication providers available for you to use with Backstage, feel free to follow [their instructions for adding authentication](../../auth/index.md).
-Go to
-[https://github.com/settings/applications/new](https://github.com/settings/applications/new)
-to create your OAuth App. The `Homepage URL` should point to Backstage's
-frontend, in our tutorial it would be `http://localhost:3000`. The
-`Authorization callback URL` will point to the auth backend, which will most
-likely be `http://localhost:7007/api/auth/github/handler/frame`.
+:::note Note
+
+The default Backstage app comes with a guest Sign In Resolver. This resolver makes all users share a single "guest" identity and is only intended as a minimum requirement to quickly get up and running. You can read more about how [Sign In Resolvers](../../auth/identity-resolver.md#sign-in-resolvers) play a role in creating a [Backstage User Identity](../../auth/identity-resolver.md#backstage-user-identity) for logged in users.
+
+:::
+
+## Setting up authentication
+
+For this tutorial we choose to use GitHub, a free service most of you might be familiar with, and we'll be using an OAuth app. For detailed options, see
+[the GitHub auth provider documentation](../../auth/github/provider.md#create-an-oauth-app-on-github).
+
+Go to [https://github.com/settings/applications/new](https://github.com/settings/applications/new) to create your OAuth App. The "Homepage URL" should point to Backstage's frontend, in our tutorial it would be `http://localhost:3000`. The "Authorization callback URL" will point to the auth backend, which will most likely be `http://localhost:7007/api/auth/github/handler/frame`.

-Take note of the `Client ID` and the `Client Secret`. Open `app-config.yaml`,
-and add your `clientId` and `clientSecret` to this file. It should end up
-looking like this:
+Take note of the `Client ID` and the `Client Secret` (clicking the "Generate a new client secret" button will get this value for you). Open `app-config.yaml`, and add them as `clientId` and `clientSecret` in this file. It should end up looking like this:
```yaml title="app-config.yaml"
auth:
# see https://backstage.io/docs/auth/ to learn about auth providers
+ /* highlight-add-start */
environment: development
+ /* highlight-add-end */
providers:
+ # See https://backstage.io/docs/auth/guest/provider
+ guest: {}
+ /* highlight-add-start */
github:
development:
clientId: YOUR CLIENT ID
clientSecret: YOUR CLIENT SECRET
+ /* highlight-add-end */
```
-### Add sign-in option to the frontend
+## Add sign-in option to the frontend
-Backstage will re-read the configuration. If there's no errors, that's great! We
-can continue with the last part of the configuration. The next step is needed to
-change the sign-in page, this you actually need to add in the source code.
+The next step is to change the sign-in page. For this, you'll actually need to write some code.
Open `packages/app/src/App.tsx` and below the last `import` line, add:
@@ -71,13 +75,52 @@ components: {
},
```
-:::note Note
+## Add sign-in resolver(s)
-The default Backstage app comes with a guest Sign In Resolver. This resolver makes all users share a single "guest" identity and is only intended as a minimum requirement to quickly get up and running. You can read more about how [Sign In Resolvers](../../auth/identity-resolver.md#sign-in-resolvers) play a role in creating a [Backstage User Identity](../../auth/identity-resolver.md#backstage-user-identity) for logged in users.
+Next we need to add the sign-in resolver to our configuration. Here's how:
-:::
+```yaml title="app-config.yaml"
+auth:
+ # see https://backstage.io/docs/auth/ to learn about auth providers
+ environment: development
+ providers:
+ # See https://backstage.io/docs/auth/guest/provider
+ guest: {}
+ github:
+ development:
+ clientId: YOUR CLIENT ID
+ clientSecret: YOUR CLIENT SECRET
+ /* highlight-add-start */
+ signIn:
+ resolvers:
+ # Matches the GitHub username with the Backstage user entity name.
+ # See https://backstage.io/docs/auth/github/provider#resolvers for more resolvers.
+ - resolver: usernameMatchingUserEntityName
+ /* highlight-add-end */
+```
-Restart Backstage from the terminal, by stopping it with `Control-C`, and starting it with `yarn dev` . You should be welcomed by a login prompt!
+What this will do is take the user details provided by the auth provider and match that against a User in the Catalog. In this case - `usernameMatchingUserEntityName` - will match the GitHub user name with the `metadata.name` value of a User in the Catalog, if none is found you will get an "Failed to sign-in, unable to resolve user identity" message. We'll cover this in the next few sections.
+
+Learn more about this topic in the [Sign-in Resolvers](../../auth/identity-resolver.md#sign-in-resolvers) documentation.
+
+## Add the auth provider to the backend
+
+To add the auth provider to the backend, we will first need to install the package by running this command:
+
+```bash title="from your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-auth-backend-module-github-provider
+```
+
+Then we will need to add this line:
+
+```ts title="in packages/backend/src/index.ts"
+backend.add(import('@backstage/plugin-auth-backend'));
+/* highlight-add-start */
+backend.add(import('@backstage/plugin-auth-backend-module-github-provider'));
+/* highlight-add-end */
+```
+
+Restart Backstage from the terminal, by stopping it with `Ctrl+C`, and starting it with `yarn dev`. You should be welcomed by a login prompt! If you try to login at this point you will get a "Failed to sign-in, unable to resolve user identity" message, read on as we'll fix that next.
:::note Note
@@ -85,33 +128,46 @@ Sometimes the frontend starts before the backend resulting in errors on the sign
:::
+## Adding a User
+
+The recommended approach for adding Users, and Groups, into your Catalog is to use one of the existing Org Entity Providers - [like this one for GitHub](https://backstage.io/docs/integrations/github/org) - or if those don't work you may need to [create one](https://backstage.io/docs/features/software-catalog/external-integrations#custom-entity-providers) that fits your Organization's needs.
+
+For the sake of this guide we'll simply step you though adding a User to the `org.yaml` file that is included when you create a new Backstage instance. Let's do that:
+
+1. First open the `/examples/org.yaml` file in your text editor of choice
+2. At the bottom we'll add the following YAML:
+
+ ```yaml
+ ---
+ apiVersion: backstage.io/v1alpha1
+ kind: User
+ metadata:
+ name: YOUR GITHUB USERNAME
+ spec:
+ memberOf: [guests]
+ ```
+
+3. Now make sure to replace the text "YOUR GITHUB USERNAME" with your actual GitHub User name.
+
+Let's restart Backstage from the terminal once more, by stopping it with `Ctrl+C`, and starting it with `yarn dev`. You should now be able to log into Backstage and see items in your Catalog.
+
To learn more about Authentication in Backstage, here are some docs you
could read:
- [Authentication in Backstage](../../auth/index.md)
- [Using organizational data from GitHub](../../integrations/github/org.md)
-### Setting up a GitHub Integration
+## Setting up a GitHub Integration
-The GitHub integration supports loading catalog entities from GitHub or GitHub
-Enterprise. Entities can be added to static catalog configuration, registered
-with the catalog-import plugin, or discovered from a GitHub organization. Users
-and Groups can also be loaded from an organization. While using [GitHub Apps](../../integrations/github/github-apps.md)
-might be the best way to set up integrations, for this tutorial you'll use a
-Personal Access Token.
+The GitHub integration supports loading catalog entities from GitHub or GitHub Enterprise. Entities can be added to static catalog configuration, registered with the catalog-import plugin, or discovered from a GitHub organization. Users and Groups can also be loaded from an organization. While using [GitHub Apps](../../integrations/github/github-apps.md) might be the best way to set up integrations, for this tutorial you'll use a Personal Access Token.
-Create your Personal Access Token by opening
-[the GitHub token creation page](https://github.com/settings/tokens/new). Use a
-name to identify this token and put it in the notes field. Choose a number of
-days for expiration. If you have a hard time picking a number, we suggest to go
-for 7 days, it's a lucky number.
+Create your Personal Access Token by opening [the GitHub token creation page](https://github.com/settings/tokens/new). Use a name to identify this token and put it in the notes field. Choose a number of days for expiration. If you have a hard time picking a number, we suggest to go for 7 days, it's a lucky number.

Set the scope to your likings. For this tutorial, selecting `repo` and `workflow` is required as the scaffolding job in this guide configures a GitHub actions workflow for the newly created project.
-For this tutorial, we will be writing the token to `app-config.local.yaml`. This file might not exist for you, so if it doesn't go ahead and create it alongside the `app-config.yaml` at the root of the project.
-This file should also be excluded in `.gitignore`, to avoid accidental committing of this file.
+For this tutorial, we will be writing the token to `app-config.local.yaml`. This file might not exist for you, so if it doesn't go ahead and create it alongside the `app-config.yaml` at the root of the project. This file should also be excluded in `.gitignore`, to avoid accidental committing of this file. More details on this file can be found in the [Static Configuration documentation](../../conf/index.md).
In your `app-config.local.yaml` go ahead and add the following:
diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md
index 8bb30d1db8..0d5529f611 100644
--- a/docs/getting-started/index.md
+++ b/docs/getting-started/index.md
@@ -23,11 +23,11 @@ If you are planning to contribute a new feature or bug fix to the Backstage proj
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`.
-- Access to a Unix-based operating system, such as Linux, MacOS or
+- Access to a Unix-based operating system, such as Linux, macOS or
[Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/)
- A GNU-like build environment available at the command line.
For example, on Debian/Ubuntu you will want to have the `make` and `build-essential` packages installed.
- On MacOS, you will want to have run `xcode-select --install` to get the XCode command line build tooling in place.
+ 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
@@ -111,7 +111,7 @@ If this fails on the `yarn install` step, it's likely that you will need to inst
## 2. Run the Backstage app
-You Backstage app is fully installed and ready to be run! Now that the installation is complete, you can go to the application directory and start the app using the `yarn dev` command. The `yarn dev` command will run both the frontend and backend as separate processes (named `[0]` and `[1]`) in the same window.
+Your Backstage app is fully installed and ready to be run! Now that the installation is complete, you can go to the application directory and start the app using the `yarn dev` command. The `yarn dev` command will run both the frontend and backend as separate processes (named `[0]` and `[1]`) in the same window.
```bash
cd my-backstage-app # your app name
diff --git a/docs/getting-started/keeping-backstage-updated.md b/docs/getting-started/keeping-backstage-updated.md
index 88e4a02ef2..19062904e2 100644
--- a/docs/getting-started/keeping-backstage-updated.md
+++ b/docs/getting-started/keeping-backstage-updated.md
@@ -76,3 +76,15 @@ While package duplication might be acceptable in many cases, you might want to
deduplicate packages for the purpose of optimizing bundle size and installation
speed. We recommend using deduplication utilities such as `yarn dedupe` to trim
down the number of duplicate packages.
+
+## Proxy
+
+The Backstage CLI uses [global-agent](https://www.npmjs.com/package/global-agent) to configure HTTP/HTTPS proxy settings using environment variables. This allows you to route the CLI’s network traffic through a proxy server, which can be useful in environments with restricted internet access.
+
+### Example Configuration
+
+```bash
+export GLOBAL_AGENT_HTTP_PROXY=http://proxy.company.com:8080
+export GLOBAL_AGENT_HTTPS_PROXY=https://secure-proxy.company.com:8080
+export GLOBAL_AGENT_NO_PROXY=localhost,internal.company.com
+```
diff --git a/docs/getting-started/logging-in.md b/docs/getting-started/logging-in.md
index 7d6fb5d55b..16596865a2 100644
--- a/docs/getting-started/logging-in.md
+++ b/docs/getting-started/logging-in.md
@@ -12,7 +12,7 @@ This guide will provide a quick tutorial on how to log in to your Backstage inst
## Prerequisites
-You should have already [have a standalone app](./index.md) and completed the Github OAuth app setup defined in [the authentication tutorial](./config/authentication.md).
+You should have already [have a standalone app](./index.md) and completed the GitHub OAuth app setup defined in [the authentication tutorial](./config/authentication.md).
## 1. Login to Backstage
@@ -22,13 +22,13 @@ If you're not already logged in, you should see a login screen like this,

-To login, you should choose the "Github" provider and click the "Sign in" button. This will redirect you to a Github OAuth page. Verify that the scopes mentioned on that page match the setup you did in [the authentication tutorial](./config/authentication.md). Once you click "Confirm", you will be brought back to the Backstage interface and signed in!
+To login, you should choose the "GitHub" provider and click the "Sign in" button. This will redirect you to a GitHub OAuth page. Verify that the scopes mentioned on that page match the setup you did in [the authentication tutorial](./config/authentication.md). Once you click "Confirm", you will be brought back to the Backstage interface and signed in!
If you are already logged in, you will be automatically brought to your Backstage instance.
## 2. Verify that you're logged in
-Once you've logged in, find the "Settings" item in the navigation bar to the left. Click it and you will see your profile. If you see your profile picture and name from Github here, congratulations! You've successfully set up a Github authentication integration.
+Once you've logged in, find the "Settings" item in the navigation bar to the left. Click it and you will see your profile. If you see your profile picture and name from GitHub here, congratulations! You've successfully set up a GitHub authentication integration.
diff --git a/docs/integrations/aws-s3/discovery--old.md b/docs/integrations/aws-s3/discovery--old.md
index 09b6eb6cc0..3a9d30a370 100644
--- a/docs/integrations/aws-s3/discovery--old.md
+++ b/docs/integrations/aws-s3/discovery--old.md
@@ -36,7 +36,7 @@ catalog:
bucketName: sample-bucket
prefix: prefix/ # optional
region: us-east-2 # optional, uses the default region otherwise
- schedule: # same options as in TaskScheduleDefinition
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -56,7 +56,7 @@ catalog:
bucketName: sample-bucket
prefix: prefix/ # optional
region: us-east-2 # optional, uses the default region otherwise
- schedule: # same options as in TaskScheduleDefinition
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
diff --git a/docs/integrations/aws-s3/discovery.md b/docs/integrations/aws-s3/discovery.md
index db9119680e..4cca448cf2 100644
--- a/docs/integrations/aws-s3/discovery.md
+++ b/docs/integrations/aws-s3/discovery.md
@@ -36,7 +36,7 @@ catalog:
bucketName: sample-bucket
prefix: prefix/ # optional
region: us-east-2 # optional, uses the default region otherwise
- schedule: # same options as in TaskScheduleDefinition
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -56,7 +56,7 @@ catalog:
bucketName: sample-bucket
prefix: prefix/ # optional
region: us-east-2 # optional, uses the default region otherwise
- schedule: # same options as in TaskScheduleDefinition
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
diff --git a/docs/integrations/azure/discovery--old.md b/docs/integrations/azure/discovery--old.md
index 56a2fe559f..27532fe6ee 100644
--- a/docs/integrations/azure/discovery--old.md
+++ b/docs/integrations/azure/discovery--old.md
@@ -45,7 +45,7 @@ catalog:
project: myproject
repository: service-* # this will match all repos starting with service-*
path: /catalog-info.yaml
- schedule: # optional; same options as in TaskScheduleDefinition
+ schedule: # optional; same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md
index c8a8a3af7c..357df7d553 100644
--- a/docs/integrations/azure/discovery.md
+++ b/docs/integrations/azure/discovery.md
@@ -45,7 +45,7 @@ catalog:
project: myproject
repository: service-* # this will match all repos starting with service-*
path: /catalog-info.yaml
- schedule: # optional; same options as in TaskScheduleDefinition
+ schedule: # optional; same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
diff --git a/docs/integrations/bitbucketCloud/discovery.md b/docs/integrations/bitbucketCloud/discovery.md
index 04dc111d30..6ba9c0aa1f 100644
--- a/docs/integrations/bitbucketCloud/discovery.md
+++ b/docs/integrations/bitbucketCloud/discovery.md
@@ -146,7 +146,7 @@ catalog:
filters: # optional
projectKey: '^apis-.*$' # optional; RegExp
repoSlug: '^service-.*$' # optional; RegExp
- schedule: # same options as in TaskScheduleDefinition
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
diff --git a/docs/integrations/bitbucketServer/discovery--old.md b/docs/integrations/bitbucketServer/discovery--old.md
new file mode 100644
index 0000000000..d8ef11533b
--- /dev/null
+++ b/docs/integrations/bitbucketServer/discovery--old.md
@@ -0,0 +1,123 @@
+---
+id: discovery
+title: Bitbucket Server Discovery
+sidebar_label: Discovery
+# prettier-ignore
+description: Automatically discovering catalog entities from repositories in Bitbucket Server
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../../backend-system/index.md), being the default since Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./discovery.md) instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
+The Bitbucket Server integration has a special entity provider for discovering
+catalog files located in Bitbucket Server.
+The provider will search your Bitbucket Server account and register catalog files matching the configured path
+as Location entity and via following processing steps add all contained catalog entities.
+This can be useful as an alternative to static locations or manually adding things to the catalog.
+
+## Installation
+
+You will have to add the entity provider in the catalog initialization code of your
+backend. The provider is not installed by default, therefore you have to add a
+dependency to `@backstage/plugin-catalog-backend-module-bitbucket-server` to your backend
+package.
+
+```bash
+# From your Backstage root directory
+yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-bitbucket-server
+```
+
+And then add the entity provider to your catalog builder:
+
+```ts title="packages/backend/src/plugins/catalog.ts"
+/* highlight-add-next-line */
+import { BitbucketServerEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-server';
+
+export default async function createPlugin(
+ env: PluginEnvironment,
+): Promise {
+ const builder = await CatalogBuilder.create(env);
+ /* highlight-add-start */
+ builder.addEntityProvider(
+ BitbucketServerEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ scheduler: env.scheduler,
+ }),
+ );
+ /* highlight-add-end */
+
+ // ..
+}
+```
+
+## Configuration
+
+To use the entity provider, you'll need a [Bitbucket Server integration set up](locations.md).
+
+Additionally, you need to configure your entity provider instance(s):
+
+```yaml title="app-config.yaml"
+catalog:
+ providers:
+ bitbucketServer:
+ yourProviderId: # identifies your ingested dataset
+ host: 'bitbucket.mycompany.com'
+ catalogPath: /catalog-info.yaml # default value
+ filters: # optional
+ projectKey: '^apis-.*$' # optional; RegExp
+ repoSlug: '^service-.*$' # optional; RegExp
+ skipArchivedRepos: true # optional; boolean
+ 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 }
+```
+
+- **`host`**:
+ The host of the Bitbucket Server instance, **note**: the host needs to registered as an integration as well, see [location](locations.md).
+- **`catalogPath`** _(optional)_:
+ Default: `/catalog-info.yaml`.
+ Path where to look for `catalog-info.yaml` files.
+ When started with `/`, it is an absolute path from the repo root.
+- **`filters`** _(optional)_:
+ - **`projectKey`** _(optional)_:
+ Regular expression used to filter results based on the project key.
+ - **`repoSlug`** _(optional)_:
+ Regular expression used to filter results based on the repo slug.
+ - **`skipArchivedRepos`** _(optional)_:
+ Boolean flag to filter out archived repositories.
+- **`schedule`**:
+ - **`frequency`**:
+ How often you want the task to run. The system does its best to avoid overlapping invocations.
+ - **`timeout`**:
+ The maximum amount of time that a single task invocation can take.
+ - **`initialDelay`** _(optional)_:
+ The amount of time that should pass before the first invocation happens.
+ - **`scope`** _(optional)_:
+ `'global'` or `'local'`. Sets the scope of concurrency control.
+
+## Custom location processing
+
+The Bitbucket Server Entity Provider will by default emit a location for each
+matching repository. However, it is possible to override this functionality and take full control of how each
+matching repository is processed.
+
+`BitbucketServerEntityProvider.fromConfig` takes an optional parameter
+`options.parser` where you can set your own parser to be used for each matched
+repository.
+
+```typescript
+const provider = BitbucketServerEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ schedule: env.scheduler,
+ parser: async function* customLocationParser(options: {
+ location: LocationSpec;
+ client: BitbucketServerClient;
+ }) {
+ // Custom logic for interpreting the matching repository
+ // See defaultBitbucketServerLocationParser for an example
+ },
+});
+```
diff --git a/docs/integrations/bitbucketServer/discovery.md b/docs/integrations/bitbucketServer/discovery.md
index 99e04affa8..3bc37e4cb5 100644
--- a/docs/integrations/bitbucketServer/discovery.md
+++ b/docs/integrations/bitbucketServer/discovery.md
@@ -6,6 +6,10 @@ sidebar_label: Discovery
description: Automatically discovering catalog entities from repositories in Bitbucket Server
---
+:::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). If you are still on the old backend system, you may want to read [its own article](./discovery--old.md) instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
The Bitbucket Server integration has a special entity provider for discovering
catalog files located in Bitbucket Server.
The provider will search your Bitbucket Server account and register catalog files matching the configured path
@@ -16,34 +20,21 @@ This can be useful as an alternative to static locations or manually adding thin
You will have to add the entity provider in the catalog initialization code of your
backend. The provider is not installed by default, therefore you have to add a
-dependency to `@backstage/plugin-catalog-backend-module-bitbucket-server` to your backend
-package.
+dependency to `@backstage/plugin-catalog-backend-module-bitbucket-server` to your backend package.
```bash title="From your Backstage root directory"
yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-bitbucket-server
```
-And then add the entity provider to your catalog builder:
+And update your backend by adding the following line:
-```ts title="packages/backend/src/plugins/catalog.ts"
-/* highlight-add-next-line */
-import { BitbucketServerEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-server';
-
-export default async function createPlugin(
- env: PluginEnvironment,
-): Promise {
- const builder = await CatalogBuilder.create(env);
- /* highlight-add-start */
- builder.addEntityProvider(
- BitbucketServerEntityProvider.fromConfig(env.config, {
- logger: env.logger,
- scheduler: env.scheduler,
- }),
- );
- /* highlight-add-end */
-
- // ..
-}
+```ts title="packages/backend/src/index.ts"
+backend.add(import('@backstage/plugin-catalog-backend/alpha'));
+/* highlight-add-start */
+backend.add(
+ import('@backstage/plugin-catalog-backend-module-bitbucket-server/alpha'),
+);
+/* highlight-add-end */
```
## Configuration
@@ -63,7 +54,7 @@ catalog:
projectKey: '^apis-.*$' # optional; RegExp
repoSlug: '^service-.*$' # optional; RegExp
skipArchivedRepos: true # optional; boolean
- schedule: # same options as in TaskScheduleDefinition
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -92,27 +83,3 @@ catalog:
The amount of time that should pass before the first invocation happens.
- **`scope`** _(optional)_:
`'global'` or `'local'`. Sets the scope of concurrency control.
-
-## Custom location processing
-
-The Bitbucket Server Entity Provider will by default emit a location for each
-matching repository. However, it is possible to override this functionality and take full control of how each
-matching repository is processed.
-
-`BitbucketServerEntityProvider.fromConfig` takes an optional parameter
-`options.parser` where you can set your own parser to be used for each matched
-repository.
-
-```typescript
-const provider = BitbucketServerEntityProvider.fromConfig(env.config, {
- logger: env.logger,
- schedule: env.scheduler,
- parser: async function* customLocationParser(options: {
- location: LocationSpec;
- client: BitbucketServerClient;
- }) {
- // Custom logic for interpreting the matching repository
- // See defaultBitbucketServerLocationParser for an example
- },
-});
-```
diff --git a/docs/integrations/datadog-rum/installation.md b/docs/integrations/datadog-rum/installation.md
index 4dc6c24134..6659bec182 100644
--- a/docs/integrations/datadog-rum/installation.md
+++ b/docs/integrations/datadog-rum/installation.md
@@ -28,6 +28,51 @@ app:
If your [`app-config.yaml`](https://github.com/backstage/backstage/blob/e0506af8fc54074a160fb91c83d6cae8172d3bb3/app-config.yaml#L5) file does not have this configuration, you may have to adjust your [`packages/app/public/index.html`](https://github.com/backstage/backstage/blob/e0506af8fc54074a160fb91c83d6cae8172d3bb3/packages/app/public/index.html#L69) to include the Datadog RUM `init()` section manually.
+Please note that the env value MUST be specified at build time
+
+:::note
+In case after a proper configuration, the events still are not being captured: Copy and paste this section in to your `packages/app/public/index.html` under the `` tag.
+
+```html
+<% if (config.has('app.datadogRum')) { %>
+
+<% } %>
+```
+
The `clientToken` and `applicationId` are generated from the Datadog RUM page
following
[these instructions](https://docs.datadoghq.com/real_user_monitoring/browser/).
diff --git a/docs/integrations/gerrit/discovery--old.md b/docs/integrations/gerrit/discovery--old.md
new file mode 100644
index 0000000000..250de80bdf
--- /dev/null
+++ b/docs/integrations/gerrit/discovery--old.md
@@ -0,0 +1,73 @@
+---
+id: discovery--old
+title: Gerrit Discovery
+sidebar_label: Discovery
+# prettier-ignore
+description: Automatically discovering catalog entities from Gerrit repositories
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../../backend-system/index.md), being the default since Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./discovery.md) instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
+The Gerrit integration has a special entity provider for discovering catalog entities
+from Gerrit repositories. The provider uses the "List Projects" API in Gerrit to get
+a list of repositories and will automatically ingest all `catalog-info.yaml` files
+stored in the root of the matching projects.
+
+## Installation
+
+As this provider is not one of the default providers, you will first need to install
+the Gerrit provider plugin:
+
+```bash title="From your Backstage root directory"
+yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-gerrit
+```
+
+Then add the plugin to the plugin catalog `packages/backend/src/plugins/catalog.ts`:
+
+```ts
+/* packages/backend/src/plugins/catalog.ts */
+import { GerritEntityProvider } from '@backstage/plugin-catalog-backend-module-gerrit';
+const builder = await CatalogBuilder.create(env);
+/** ... other processors and/or providers ... */
+builder.addEntityProvider(
+ GerritEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ scheduler: env.scheduler,
+ }),
+);
+```
+
+## Configuration
+
+To use the discovery processor, you'll need a Gerrit integration
+[set up](locations.md). Then you can add any number of providers.
+
+```yaml
+# app-config.yaml
+catalog:
+ providers:
+ gerrit:
+ yourProviderId: # identifies your dataset / provider independent of config changes
+ host: gerrit-your-company.com
+ branch: master # Optional
+ query: 'state=ACTIVE&prefix=webapps'
+ schedule:
+ # 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 }
+ backend:
+ host: gerrit-your-company.com
+ branch: master # Optional
+ query: 'state=ACTIVE&prefix=backend'
+```
+
+The provider configuration is composed of three parts:
+
+- **`host`**: the host of the Gerrit integration to use.
+- **`branch`** _(optional)_: the branch where we will look for catalog entities (defaults to "master").
+- **`query`**: this string is directly used as the argument to the "List Project" API.
+ Typically, you will want to have some filter here to exclude projects that will
+ never contain any catalog files.
diff --git a/docs/integrations/gerrit/discovery.md b/docs/integrations/gerrit/discovery.md
index 96dfbd47fb..eca0417871 100644
--- a/docs/integrations/gerrit/discovery.md
+++ b/docs/integrations/gerrit/discovery.md
@@ -6,6 +6,10 @@ sidebar_label: Discovery
description: Automatically discovering catalog entities from Gerrit repositories
---
+:::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). If you are still on the old backend system, you may want to read [its own article](./discovery--old.md) instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
The Gerrit integration has a special entity provider for discovering catalog entities
from Gerrit repositories. The provider uses the "List Projects" API in Gerrit to get
a list of repositories and will automatically ingest all `catalog-info.yaml` files
@@ -20,19 +24,13 @@ the Gerrit provider plugin:
yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-gerrit
```
-Then add the plugin to the plugin catalog `packages/backend/src/plugins/catalog.ts`:
+Then update your backend by adding the following line:
-```ts
-/* packages/backend/src/plugins/catalog.ts */
-import { GerritEntityProvider } from '@backstage/plugin-catalog-backend-module-gerrit';
-const builder = await CatalogBuilder.create(env);
-/** ... other processors and/or providers ... */
-builder.addEntityProvider(
- GerritEntityProvider.fromConfig(env.config, {
- logger: env.logger,
- scheduler: env.scheduler,
- }),
-);
+```ts title="packages/backend/src/index.ts"
+backend.add(import('@backstage/plugin-catalog-backend/alpha'));
+/* highlight-add-start */
+backend.add(import('@backstage/plugin-catalog-backend-module-gerrit/alpha'));
+/* highlight-add-end */
```
## Configuration
diff --git a/docs/integrations/github/discovery--old.md b/docs/integrations/github/discovery--old.md
index 752aa51bde..901462b1cb 100644
--- a/docs/integrations/github/discovery--old.md
+++ b/docs/integrations/github/discovery--old.md
@@ -133,7 +133,7 @@ catalog:
filters:
branch: 'main' # string
repository: '.*' # Regex
- schedule: # same options as in TaskScheduleDefinition
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -249,7 +249,7 @@ schedule:
timeout: { minutes: 3 }
```
-More information about scheduling can be found on the [TaskScheduleDefinition](https://backstage.io/docs/reference/backend-tasks.taskscheduledefinition) page.
+More information about scheduling can be found on the [SchedulerServiceTaskScheduleDefinition](https://backstage.io/docs/reference/backend-plugin-api.schedulerservicetaskscheduledefinition) page.
Alternatively, or additionally, you can configure [github-apps](github-apps.md) authentication
which carries a much higher rate limit at GitHub.
diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md
index 43e63a618c..b2e998813d 100644
--- a/docs/integrations/github/discovery.md
+++ b/docs/integrations/github/discovery.md
@@ -83,7 +83,7 @@ catalog:
filters:
branch: 'main' # string
repository: '.*' # Regex
- schedule: # same options as in TaskScheduleDefinition
+ schedule: # same options as in SchedulerServiceTaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -203,7 +203,7 @@ schedule:
timeout: { minutes: 3 }
```
-More information about scheduling can be found on the [TaskScheduleDefinition](https://backstage.io/docs/reference/backend-tasks.taskscheduledefinition) page.
+More information about scheduling can be found on the [SchedulerServiceTaskScheduleDefinition](https://backstage.io/docs/reference/backend-plugin-api.schedulerservicetaskscheduledefinition) page.
Alternatively, or additionally, you can configure [github-apps](github-apps.md) authentication
which carries a much higher rate limit at GitHub.
diff --git a/docs/integrations/github/org.md b/docs/integrations/github/org.md
index 18865cd630..22b55fee98 100644
--- a/docs/integrations/github/org.md
+++ b/docs/integrations/github/org.md
@@ -94,7 +94,7 @@ Directly under the `githubOrg` is a list of configurations, each entry is a stru
- `id`: A stable id for this provider. Entities from this provider will be associated with this ID, so you should take care not to change it over time since that may lead to orphaned entities and/or conflicts.
- `githubUrl`: The target that this provider should consume
- `orgs` (optional): The list of the GitHub orgs to consume. If you only list a single org the generated group entities will use the `default` namespace, otherwise they will use the org name as the namespace. By default the provider will consume all accessible orgs on the given GitHub instance (support for GitHub App integration only).
-- `schedule`: The refresh schedule to use, matches the structure of [`TaskScheduleDefinitionConfig`](https://backstage.io/docs/reference/backend-tasks.taskscheduledefinitionconfig/)
+- `schedule`: The refresh schedule to use, matches the structure of [`SchedulerServiceTaskScheduleDefinitionConfig`](https://backstage.io/docs/reference/backend-plugin-api.schedulerservicetaskscheduledefinitionconfig/)
### Events Support
@@ -169,7 +169,7 @@ const backend = createBackend();
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
-backend.add(githubOrgModule());
+backend.add(githubOrgModule);
backend.start();
```
diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md
index 70f12f181e..10746aff88 100644
--- a/docs/integrations/gitlab/discovery.md
+++ b/docs/integrations/gitlab/discovery.md
@@ -34,9 +34,9 @@ Then add the following to your backend initialization:
// optional if you want to use AWS SQS instead of HTTP endpoints to receive external events
// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs/alpha'));
// optional - event router for gitlab. See.: https://github.com/backstage/backstage/blob/master/plugins/events-backend-module-gitlab/README.md
-// backend.add(eventsModuleGitlabEventRouter());
+// backend.add(eventsModuleGitlabEventRouter);
// optional - token validator for the gitlab topic
-// backend.add(eventsModuleGitlabWebhook());
+// backend.add(eventsModuleGitlabWebhook);
backend.add(import('@backstage/plugin-catalog-backend-module-gitlab/alpha'));
```
@@ -154,7 +154,7 @@ catalog:
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
excludeRepos: [] # Optional. A list of project paths that should be excluded from discovery, e.g. group/subgroup/repo. Should not start or end with a slash.
- schedule: # Same options as in TaskScheduleDefinition. Optional for the Legacy Backend System
+ schedule: # Same options as in SchedulerServiceTaskScheduleDefinition. Optional for the Legacy Backend System
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
diff --git a/docs/integrations/gitlab/org.md b/docs/integrations/gitlab/org.md
index 65f66aa763..c13db4401b 100644
--- a/docs/integrations/gitlab/org.md
+++ b/docs/integrations/gitlab/org.md
@@ -39,9 +39,9 @@ Then add the following to your backend initialization:
// optional if you want to use AWS SQS instead of HTTP endpoints to receive external events
// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs/alpha'));
// optional - event router for gitlab. See.: https://github.com/backstage/backstage/blob/master/plugins/events-backend-module-gitlab/README.md
-// backend.add(eventsModuleGitlabEventRouter());
+// backend.add(eventsModuleGitlabEventRouter);
// optional - token validator for the gitlab topic
-// backend.add(eventsModuleGitlabWebhook());
+// backend.add(eventsModuleGitlabWebhook);
backend.add(import('@backstage/plugin-catalog-backend-module-gitlab-org'));
```
@@ -171,9 +171,12 @@ catalog:
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)
- allowInherited: true # Allow groups to be ingested even if there are no direct members.
+ 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.
+ - SHARED_FROM_GROUPS # Optional. Members of any invited groups will also be considered members of the current group.
groupPattern: '[\s\S]*' # Optional. Filters found groups based on provided pattern. Defaults to `[\s\S]*`, which means to not filter anything
- schedule: # Same options as in TaskScheduleDefinition. Optional for the Legacy Backend System.
+ schedule: # Same options as in SchedulerServiceTaskScheduleDefinition. Optional for the Legacy Backend System.
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 30 }
# supports ISO duration, "human duration" as used in code
@@ -193,6 +196,32 @@ entities will only be ingested for the configured group, or its descendant group
but not any ancestor groups higher than the configured group path. Only groups
which contain members will be ingested.
+### Subgroup Membership
+
+GitLab groups and subgroups provide a hierarchical structure for organizing projects and users. Membership in a parent group extends automatically to its subgroups, ensuring consistent permissions at all levels. Additionally, membership can be managed using invited groups, where one group can be added to another. For Backstage users integrating with GitLab, understanding this [inheritance model](https://docs.gitlab.co.jp/ee/user/group/subgroups/#subgroup-membership) and the concept of invited groups is crucial for accurately mapping and managing group and user entities.
+
+The `GitLabOrgDiscoveryEntityProvider` mirrors GitLab's membership behavior as follows:
+
+- By default, every direct member of a GitLab group is also a member of the corresponding group in Backstage.
+- To include members of subgroups as members of the parent group, configure the `relations` array with the `DESCENDANTS` option.
+- To include members of parent groups as members of their subgroups, configure the `relations` array with the `INHERITED` option. This also has the effect that subgroups with no direct members will not be skipped in the group ingestion process and will be added as a group entity in Backstage;
+- To include members of invited groups as members of the inviting group, configure the `relations` array with the `SHARED_FROM_GROUPS` option.
+
+The previous `allowInherited` will be deprecated in future versions. Use the `relations` array with the `INHERITED` option instead.
+
+```yaml
+catalog:
+ providers:
+ gitlab:
+ development:
+ relations:
+ - INHERITED
+ - DESCENDANTS
+ - SHARED_FROM_GROUPS
+```
+
+Refer to the [GitLab Group Member Relation](https://docs.gitlab.com/ee/api/graphql/reference/#groupmemberrelation) documentation for more information.
+
### Users
For self hosted, all `User` entities are ingested from the entire instance by default.
@@ -202,6 +231,8 @@ of the top-level group for the configured group path will be ingested.
In both cases (SaaS & self hosted), you can limit the ingested users to users directly assigned to the group defined in your `app-config.yaml` by setting the configuration key `restrictUsersToGroup: true`. This is especially useful when you have a large user base that you don't want to import by default.
+On SaaS, you can choose to include users to be ingested that do not have a paid seat. This can be useful when using a free version of Gitlab, or when you use Guest Users on Gitlab Ultimate. Unfortunately, this will also lead to some technical users that might be imported into your user base. While project & group access tokens are filtered, service accounts will remain. [Learn more about Billable Users](https://docs.gitlab.com/ee/subscriptions/self_managed/index.html#billable-users).
+
```yaml
catalog:
providers:
@@ -210,7 +241,8 @@ catalog:
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)
- restrictUsersToGroup: true # Backstage will ingest only users directly assigned to org/teams.
+ 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
```
### Limiting `User` and `Group` entity ingestion in the provider
diff --git a/docs/notifications/index.md b/docs/notifications/index.md
new file mode 100644
index 0000000000..ddbb156dac
--- /dev/null
+++ b/docs/notifications/index.md
@@ -0,0 +1,378 @@
+---
+id: index
+title: Getting Started
+description: How to get started with the notifications and signals
+---
+
+The Backstage Notifications System provides a way for plugins and external services to send notifications to Backstage users.
+These notifications are displayed in the dedicated page of the Backstage frontend UI or by frontend plugins per specific scenarios.
+Additionally, notifications can be sent to external channels (like email) via "processors" implemented within plugins.
+
+Notifications can be optionally integrated with the signals (a push mechanism) to ensure users receive them immediately.
+
+### Upgrade to the latest version of Backstage
+
+To ensure your version of Backstage has all the latest notifications and signals related functionality, it’s important to upgrade to the latest version. The [Backstage upgrade helper](https://backstage.github.io/upgrade-helper/) is a great tool to help ensure that you’ve made all the necessary changes during the upgrade!
+
+## About notifications
+
+Notifications are messages sent to either individual users or groups.
+They are not intended for inter-process communication of any kind.
+
+There are two basic types of notifications:
+
+- **Broadcast**: Messages sent to all users of Backstage.
+- **Entity**: Messages delivered to specific listed entities, such as Users or Groups.
+
+Example of use-cases:
+
+- System-wide announcements or alerts
+- Notifications for component owners: e.g., build failures, successful deployments, new vulnerabilities
+- Notifications for individuals: e.g., updates you have subscribed to, new required training courses
+- Notifications pertaining to a particular entity in the catalog: A notification might apply to an entity and the owning team.
+
+## Installation in Older Environments
+
+Newer versions of instances created by the create-app have both the notifications and signals plugins included by default; this section can be skipped right to the Configuration.
+
+Following installation instructions are valid for enabling the plugins in older environments.
+
+### Add Notifications Backend
+
+```bash
+yarn workspace backend add @backstage/plugin-notifications-backend
+```
+
+Add the notifications to your `backend/src/index.ts`:
+
+```ts
+const backend = createBackend();
+// ...
+backend.add(import('@backstage/plugin-notifications-backend'));
+```
+
+### Add Notifications Frontend
+
+```bash
+yarn workspace app add @backstage/plugin-notifications
+```
+
+To add the notifications main menu, add following to your `packages/app/src/components/Root/Root.tsx`:
+
+```tsx
+import { NotificationsSidebarItem } from '@backstage/plugin-notifications';
+
+
+
+
+ // ...
+
+
+
+ ;
+```
+
+Also add the route to notifications to `packages/app/src/App.tsx`:
+
+```tsx
+import { NotificationsPage } from '@backstage/plugin-notifications';
+
+
+ // ...
+ } />
+ ;
+```
+
+### Optional: Add Signals Backend
+
+Optionally add Signals to your backend by
+
+```bash
+yarn workspace backend add @backstage/plugin-signals-backend
+```
+
+Add the signals to your `backend/src/index.ts`:
+
+```ts
+const backend = createBackend();
+// ...
+backend.add(import('@backstage/plugin-signals-backend'));
+```
+
+### Optional: Signals Frontend
+
+The use of signals is optional but improves user experience.
+
+Start with:
+
+```bash
+yarn workspace app add @backstage/plugin-signals
+```
+
+To install the plugin, add the `SignalsDisplay` to your app root in `packages/app/src/App.tsx`:
+
+```tsx
+import { SignalsDisplay } from '@backstage/plugin-signals';
+
+export default app.createRoot(
+ <>
+
+
+ {/* highlight-add-next-line */}
+
+
+
+ {routes}
+
+ >,
+);
+```
+
+If the signals plugin is properly configured, it will be automatically discovered by the notifications plugin and used.
+
+## Configuration
+
+### Notifications Backend
+
+The Notifications backend plugin provides an API to create notifications, list notifications per logged-in user, and search based on parameters.
+
+The plugin uses a relational [database](https://backstage.io/docs/getting-started/config/database) for persistence; no specifics are introduced in this context.
+
+No additional configuration in the app-config is needed, except for optional additional modules for `processors`.
+
+### Notifications Frontend
+
+The recipients of notifications have to be entities in the catalog, e.g., of the User or Group kind.
+
+Otherwise, no specific configuration is needed for the front-end notifications plugin.
+
+All parametrization is done through component properties, such as the `NotificationsSidebarItem`, which can be used as an active left-side menu item in the front-end.
+
+
+
+In the `packages/app/src/components/Root/Root.tsx`, tweak the [properties](https://backstage.io/docs/reference/plugin-notifications.notificationssidebaritem) of the ` ` per specific needs.
+
+## Use
+
+New notifications can be sent either by a backend plugin or an external service through the REST API.
+
+### Backend
+
+Regardless of technical feasibility, a backend plugin should avoid directly accessing the notifications REST API.
+Instead, it should integrate with the `@backstage/plugin-notifications-node` to `send` (create) a new notification.
+
+The reasons for this approach include the propagation of authorization in the API request and improved maintenance and backward compatibility in the future.
+
+```ts
+import { notificationService } from '@backstage/plugin-notifications-node';
+
+export const myPlugin = createBackendPlugin({
+ pluginId: 'myPlugin',
+ register(env) {
+ env.registerInit({
+ deps: {
+ // ...
+ notificationService: notificationService,
+ },
+ async init({ config, logger, httpRouter, notificationService }) {
+ httpRouter.use(
+ await createRouter({
+ // ...
+ notificationService,
+ }),
+ );
+ },
+ });
+ },
+});
+```
+
+To emit a new notification:
+
+```ts
+notificationService.send({
+ recipients /* of the broadcast or entity type */,
+ payload /* actual message */,
+});
+```
+
+Refer the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/report.api.md) for further details.
+
+### Signals
+
+The use of signals with notifications is optional but generally enhances user experience and performance.
+
+When a notification is created, a new signal is emitted to a general-purpose message bus to announce it to subscribed listeners.
+
+The frontend maintains a persistent connection (WebSocket) to receive these announcements from the notifications channel.
+The specific details of the updated or created notification should be retrieved via a request to the notifications API, except for new notifications, where the payload is included in the signal for performance reasons.
+
+In a frontend plugin, to subscribe for notifications' signals:
+
+```ts
+import { useSignal } from '@backstage/plugin-signals-react';
+
+const { lastSignal } = useSignal('notifications');
+
+React.useEffect(() => {
+ /* ... */
+}, [lastSignal, notificationsApi]);
+```
+
+#### Using signals in your own plugin
+
+It's possible to use signals in your own plugin to deliver data from the backend to the frontend in near real-time.
+
+To use signals in your own frontend plugin, you need to add the `useSignal` hook from `@backstage/plugin-signals-react` from `@backstage/plugin-notifications-common` with optional generic type of the signal.
+
+```ts
+// To use the same type of signal in the backend, this should be placed in a shared common package
+export type MySignalType = {
+ user: string;
+ data: string;
+ // ....
+};
+
+const { lastSignal } = useSignal('my-plugin');
+
+useEffect(() => {
+ if (lastSignal) {
+ // Do something with the signal
+ }
+}, [lastSignal]);
+```
+
+To send signals from the backend plugin, you must add the `signalsServiceRef` to your plugin or module as a dependency.
+
+```ts
+import { signalsServiceRef } from '@backstage/plugin-signals-node';
+export const myPlugin = createBackendPlugin({
+ pluginId: 'my',
+ register(env) {
+ env.registerInit({
+ deps: {
+ httpRouter: coreServices.httpRouter,
+ signals: signalsServiceRef,
+ },
+ async init({ httpRouter, signals }) {
+ httpRouter.use(
+ await createRouter({
+ signals,
+ }),
+ );
+ },
+ });
+ },
+});
+```
+
+To send the signal using the service, you can use the `publish` method.
+
+```ts
+signals.publish({ user: 'user', data: 'test' });
+```
+
+### Consuming Notifications
+
+In a front-end plugin, the simplest way to query a notification is by its ID:
+
+```ts
+import { useApi } from '@backstage/core-plugin-api';
+import { notificationsApiRef } from '@backstage/plugin-notifications';
+
+const notificationsApi = useApi(notificationsApiRef);
+
+notificationsApi.getNotification(yourId);
+
+// or with connection to signals:
+notificationsApi.getNotification(lastSignal.notification_id);
+```
+
+### Extending Notifications via Processors
+
+The notifications can be extended with `NotificationProcessor`. These processors allow to decorate notifications before they are sent or/and send the notifications to external services.
+
+Depending on the needs, a processor can modify the content of a notification or route it to different systems like email, Slack, or other services.
+
+A good example of how to write a processor is the [Email Processor](https://github.com/backstage/backstage/tree/master/plugins/notifications-backend-module-email).
+
+Start off by creating a notification processor:
+
+```ts
+import { Notification } from '@backstage/plugin-notifications-common';
+import { NotificationProcessor } from '@backstage/plugin-notifications-node';
+
+class MyNotificationProcessor implements NotificationProcessor {
+ // preProcess is called before the notification is saved to database.
+ // This is a good place to modify the notification before it is saved and sent to the user.
+ async preProcess(notification: Notification): Promise {
+ if (notification.origin === 'plugin-my-plugin') {
+ notification.payload.icon = 'my-icon';
+ }
+ return notification;
+ }
+
+ // postProcess is called after the notification is saved to database and the signal is emitted.
+ // This is a good place to send the notification to external services.
+ async postProcess(notification: Notification): Promise {
+ nodemailer.sendEmail({
+ from: 'backstage',
+ to: 'user',
+ subject: notification.payload.title,
+ text: notification.payload.description,
+ });
+ }
+}
+```
+
+Both of the processing functions are optional, and you can implement only one of them.
+
+Add the notification processor to the notification system by:
+
+```ts
+import { notificationsProcessingExtensionPoint } from '@backstage/plugin-notifications-node';
+import { Notification } from '@backstage/plugin-notifications-common';
+
+export const myPlugin = createBackendPlugin({
+ pluginId: 'myPlugin',
+ register(env) {
+ env.registerInit({
+ deps: {
+ notifications: notificationsProcessingExtensionPoint,
+ // ...
+ },
+ async init({ notifications }) {
+ // ...
+ notifications.addProcessor(new MyNotificationProcessor());
+ },
+ });
+ },
+});
+```
+
+### External Services
+
+When the emitter of a notification is a Backstage backend plugin, it is mandatory to use the integration via `@backstage/plugin-notifications-node` as described above.
+
+If the emitter is a service external to Backstage, an HTTP POST request can be issued directly to the API, assuming that authentication is properly configured.
+Refer to the [service-to-service auth documentation](https://backstage.io/docs/auth/service-to-service-auth) for more details, focusing on the Static Tokens section for the simplest setup option.
+
+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"}}'
+```
+
+## Additional info
+
+An example of a backend plugin sending notifications can be found in https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-notifications.
+
+Sources of the notifications and signal plugins:
+
+- https://github.com/backstage/backstage/blob/master/plugins/notifications
+
+- https://github.com/backstage/backstage/blob/master/plugins/notifications-backend
+
+- https://github.com/backstage/backstage/blob/master/plugins/notifications-node
+
+- https://github.com/backstage/backstage/blob/master/plugins/signals-react
diff --git a/docs/notifications/notificationsPage.png b/docs/notifications/notificationsPage.png
new file mode 100644
index 0000000000..7c96ab77af
Binary files /dev/null and b/docs/notifications/notificationsPage.png differ
diff --git a/docs/openapi/definitions/auth.yaml b/docs/openapi/definitions/auth.yaml
index 1ed649da9c..07b18866c6 100644
--- a/docs/openapi/definitions/auth.yaml
+++ b/docs/openapi/definitions/auth.yaml
@@ -9,7 +9,7 @@ info:
The purpose of the Auth APIs in Backstage are to identify the user, and to provide a way for plugins
to request access to 3rd party services on behalf of that user.
- The API is supplied with a list of providers - such as `Google` or `Github` - and will add the endpoints
+ The API is supplied with a list of providers - such as `Google` or `GitHub` - and will add the endpoints
described below to each of those providers.
Read more about [User Authentication and Authorization in Backstage](https://github.com/backstage/backstage/blob/master/docs/auth/overview.md).
diff --git a/docs/overview/threat-model.md b/docs/overview/threat-model.md
index c0e2d61e25..2b78d022f9 100644
--- a/docs/overview/threat-model.md
+++ b/docs/overview/threat-model.md
@@ -41,13 +41,13 @@ The built-in protection against unauthorized access does not by default include
## Common Backend Configuration
-There are many common facilities that are configured centrally and available to all Backstage backend plugins. For example there is a `DatabaseManager` that provides access to a SQL database, `TaskScheduler` for scheduling long-running tasks, `Logger` as a general logging facility, and `UrlReader` for reading content from external sources. These are all configured either directly in code, or within the `backend` block of the static configuration. The appropriate care needs to be taken to ensure that any secrets remain confidential and no malicious configuration is injected.
+There are many common facilities that are configured centrally and available to all Backstage backend plugins. For example there is a `DatabaseService` that provides access to a SQL database, `SchedulerService` for scheduling long-running tasks, `LoggerService` as a general logging facility, and `UrlReaderService` for reading content from external sources. These are all configured either directly in code, or within the `backend` block of the static configuration. The appropriate care needs to be taken to ensure that any secrets remain confidential and no malicious configuration is injected.
In a typical Backstage setup, there is no boundary between plugins that run on the same host. Likewise, there is no boundary between plugins that share the same database access. Any plugin that is running on a host that has access to the logical database of any other plugin should be considered to have full access to that other plugin. For example, even if you deploy the `auth` and `catalog` plugins on separate hosts with separate configuration and credentials, the `catalog` plugin is still considered to have full access to the `auth` plugin as long as the `catalog` plugin has access to the `auth` plugin's logical database. The only way to create a boundary between the two plugins is to deploy them in such a way that they do not have access to each others’ database. This applies to the database facility as well as any other shared resources, such as the cache.
-The `UrlReader` facility is of particular interest for a secure Backstage configuration. In particular the `backend.reading.allow` configuration lists the hosts that you trust the backend to be able to read content from on behalf of users. It is extremely important that this list does not, for example, allow access to instance metadata endpoints of cloud providers, or other endpoints that your Backstage instance may have access to which contain sensitive information. In general it is recommended to keep the list minimal and only allow reading from required endpoints. The same concerns apply to custom implementations of the `UrlReader` interface, if you need to implement these through code.
+The `UrlReaderService` facility is of particular interest for a secure Backstage configuration. In particular the `backend.reading.allow` configuration lists the hosts that you trust the backend to be able to read content from on behalf of users. It is extremely important that this list does not, for example, allow access to instance metadata endpoints of cloud providers, or other endpoints that your Backstage instance may have access to which contain sensitive information. In general it is recommended to keep the list minimal and only allow reading from required endpoints. The same concerns apply to custom implementations of the `UrlReader` interface, if you need to implement these through code.
-Note that the `UrlReader` system operates with a service context and is not integrated with the Backstage permission system or other external access control mechanisms. This means users of your Backstage instance may be able to read external content which that individual should not have access to. For example, the `$text` placeholder in a `catalog-info.yaml` can be used to read contents from a source such as a GitHub repository that the user does not have direct access too. If this is a concern it is recommended to either disable or replace the resolvers in the catalog placeholder processor and similar features in any other plugin.
+Note that the `UrlReaderService` system operates with a service context and is not integrated with the Backstage permission system or other external access control mechanisms. This means users of your Backstage instance may be able to read external content which that individual should not have access to. For example, the `$text` placeholder in a `catalog-info.yaml` can be used to read contents from a source such as a GitHub repository that the user does not have direct access too. If this is a concern it is recommended to either disable or replace the resolvers in the catalog placeholder processor and similar features in any other plugin.
## Authentication
@@ -79,7 +79,7 @@ By default all internal users are allowed to create and delete entities. If this
By default, Scaffolding jobs execute directly on the host machine, including any actions defined in the template. Because the Scaffolder templates are considered a more sensitive area it is recommended to control access to create and update templates to trusted parties. Template execution is intended to be secure regardless of input, but we still recommend this additional layer of protection. The string templating is executed in a [node VM sandbox](https://github.com/laverdet/isolated-vm) to mitigate the possibility of remote code execution attacks.
-The Scaffolder often has elevated permissions to for example create repositories in a Github organization. The operator should therefore be cautious of Scaffolder Templates that for example delete or update existing resources as the user input is typically user defined and can therefore delete or modify resources maliciously or by mistake.
+The Scaffolder often has elevated permissions to for example create repositories in a GitHub organization. The operator should therefore be cautious of Scaffolder Templates that for example delete or update existing resources as the user input is typically user defined and can therefore delete or modify resources maliciously or by mistake.
One strategy that allows you to reduce the access that the Scaffolder service has is to rely on user credentials when executing actions. For example, a GitHub App integration could be configured with read-only permissions, with a separate user OAuth token used to create repositories. This requires that your users have access to create repositories in the first place.
diff --git a/docs/permissions/custom-rules--old.md b/docs/permissions/custom-rules--old.md
new file mode 100644
index 0000000000..7661e23327
--- /dev/null
+++ b/docs/permissions/custom-rules--old.md
@@ -0,0 +1,165 @@
+---
+id: custom-rules--old
+title: Defining custom permission rules
+description: How to define custom permission rules for existing resources
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../backend-system/index.md), being the default since Backstage [version 1.24](../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./custom-rules.md) instead. Otherwise, [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
+For some use cases, you may want to define custom [rules](../references/glossary.md#rule-permission-plugin) in addition to the ones provided by a plugin. In the [previous section](./writing-a-policy.md) we used the `isEntityOwner` rule to control access for catalog entities. Let's extend this policy with a custom rule that checks what [system](https://backstage.io/docs/features/software-catalog/system-model#system) an entity is part of.
+
+## Define a custom rule
+
+Plugins should export a rule factory that provides type-safety that ensures compatibility with the plugin's backend. The catalog plugin exports `createCatalogPermissionRule` from `@backstage/plugin-catalog-backend/alpha` for this purpose. Note: the `/alpha` path segment is temporary until this API is marked as stable. For this example, we'll define the rule and create a condition in `packages/backend/src/plugins/permission.ts`.
+
+We use Zod in our example below. To install, run:
+
+```bash
+yarn workspace backend add zod
+```
+
+```typescript title="packages/backend/src/plugins/permission.ts"
+...
+
+import type { Entity } from '@backstage/catalog-model';
+import { createCatalogPermissionRule } from '@backstage/plugin-catalog-backend/alpha';
+import { createConditionFactory } from '@backstage/plugin-permission-node';
+import { z } from 'zod';
+
+export const isInSystemRule = createCatalogPermissionRule({
+ name: 'IS_IN_SYSTEM',
+ description: 'Checks if an entity is part of the system provided',
+ resourceType: 'catalog-entity',
+ paramsSchema: z.object({
+ systemRef: z
+ .string()
+ .describe('SystemRef to check the resource is part of'),
+ }),
+ apply: (resource: Entity, { systemRef }) => {
+ if (!resource.relations) {
+ return false;
+ }
+
+ return resource.relations
+ .filter(relation => relation.type === 'partOf')
+ .some(relation => relation.targetRef === systemRef);
+ },
+ toQuery: ({ systemRef }) => ({
+ key: 'relations.partOf',
+ values: [systemRef],
+ }),
+});
+
+const isInSystem = createConditionFactory(isInSystemRule);
+
+...
+```
+
+For a more detailed explanation on defining rules, refer to the [documentation for plugin authors](./plugin-authors/03-adding-a-resource-permission-check.md#adding-support-for-conditional-decisions).
+
+Still in the `packages/backend/src/plugins/permission.ts` file, let's use the condition we just created in our `TestPermissionPolicy`.
+
+```ts title="packages/backend/src/plugins/permission.ts"
+...
+/* highlight-remove-next-line */
+import { createCatalogPermissionRule } from '@backstage/plugin-catalog-backend/alpha';
+/* highlight-add-next-line */
+import { catalogConditions, createCatalogConditionalDecision, createCatalogPermissionRule } from '@backstage/plugin-catalog-backend/alpha';
+/* highlight-remove-next-line */
+import { createConditionFactory } from '@backstage/plugin-permission-node';
+/* highlight-add-next-line */
+import { PermissionPolicy, PolicyQuery, PolicyQueryUser, createConditionFactory } from '@backstage/plugin-permission-node';
+/* highlight-add-start */
+import { AuthorizeResult, PolicyDecision, isResourcePermission } from '@backstage/plugin-permission-common';
+/* highlight-add-end */
+...
+
+export const isInSystemRule = createCatalogPermissionRule({
+ name: 'IS_IN_SYSTEM',
+ description: 'Checks if an entity is part of the system provided',
+ resourceType: 'catalog-entity',
+ paramsSchema: z.object({
+ systemRef: z
+ .string()
+ .describe('SystemRef to check the resource is part of'),
+ }),
+ apply: (resource: Entity, { systemRef }) => {
+ if (!resource.relations) {
+ return false;
+ }
+
+ return resource.relations
+ .filter(relation => relation.type === 'partOf')
+ .some(relation => relation.targetRef === systemRef);
+ },
+ toQuery: ({ systemRef }) => ({
+ key: 'relations.partOf',
+ values: [systemRef],
+ }),
+});
+
+const isInSystem = createConditionFactory(isInSystemRule);
+
+class TestPermissionPolicy implements PermissionPolicy {
+ async handle(
+ request: PolicyQuery,
+ user?: PolicyQueryUser,
+ ): Promise {
+ if (isResourcePermission(request.permission, 'catalog-entity')) {
+ return createCatalogConditionalDecision(
+ request.permission,
+ /* highlight-remove-start */
+ catalogConditions.isEntityOwner({
+ claims: user?.info.ownershipEntityRefs ?? [],
+ }),
+ /* highlight-remove-end */
+ /* highlight-add-start */
+ {
+ anyOf: [
+ catalogConditions.isEntityOwner({
+ claims: user?.info.ownershipEntityRefs ?? [],
+ }),
+ isInSystem({ systemRef: 'interviewing' }),
+ ],
+ },
+ /* highlight-add-end */
+ );
+ }
+
+ return { result: AuthorizeResult.ALLOW };
+ }
+}
+
+...
+```
+
+## Provide the rule during plugin setup
+
+Now that we have a custom rule defined and added to our policy, we need provide it to the catalog plugin. This step is important because the catalog plugin will use the rule's `toQuery` and `apply` methods while evaluating conditional authorize results. There's no guarantee that the catalog and permission backends are running on the same server, so we must explicitly link the rule to ensure that it's available at runtime.
+
+The api for providing custom rules may differ between plugins, but there should typically be some integration point during the creation of the backend router. For the catalog, this integration point is exposed via `CatalogBuilder.addPermissionRules`.
+
+```typescript title="packages/backend/src/plugins/catalog.ts"
+import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
+/* highlight-add-next-line */
+import { isInSystemRule } from './permission';
+
+...
+
+export default async function createPlugin(
+ env: PluginEnvironment,
+): Promise {
+ const builder = await CatalogBuilder.create(env);
+ /* highlight-add-next-line */
+ builder.addPermissionRules(isInSystemRule);
+ ...
+ return router;
+}
+```
+
+The updated policy will allow catalog entity resource permissions if any of the following are true:
+
+- User owns the target entity
+- Target entity is part of the 'interviewing' system
diff --git a/docs/permissions/custom-rules.md b/docs/permissions/custom-rules.md
index 57565755fb..9642f80215 100644
--- a/docs/permissions/custom-rules.md
+++ b/docs/permissions/custom-rules.md
@@ -4,19 +4,23 @@ title: Defining custom permission rules
description: How to define custom permission rules for existing resources
---
+:::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). If you are still on the old backend system, you may want to read [its own article](./custom-rules--old.md) instead, and [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
For some use cases, you may want to define custom [rules](../references/glossary.md#rule-permission-plugin) in addition to the ones provided by a plugin. In the [previous section](./writing-a-policy.md) we used the `isEntityOwner` rule to control access for catalog entities. Let's extend this policy with a custom rule that checks what [system](https://backstage.io/docs/features/software-catalog/system-model#system) an entity is part of.
## Define a custom rule
-Plugins should export a rule factory that provides type-safety that ensures compatibility with the plugin's backend. The catalog plugin exports `createCatalogPermissionRule` from `@backstage/plugin-catalog-backend/alpha` for this purpose. Note: the `/alpha` path segment is temporary until this API is marked as stable. For this example, we'll define the rule and create a condition in `packages/backend/src/plugins/permission.ts`.
+Plugins should export a rule factory that provides type-safety that ensures compatibility with the plugin's backend. The catalog plugin exports `createCatalogPermissionRule` from `@backstage/plugin-catalog-backend/alpha` for this purpose. Note: the `/alpha` path segment is temporary until this API is marked as stable. For this example, we'll define the rule and create a condition in `packages/backend/src/extensions/permissionsPolicyExtension.ts`.
-We use Zod in our example below. To install, run:
+We use `zod` and `@backstage/catalog-model` in our example below. To install them run:
-```bash
-yarn workspace backend add zod
+```bash title="from your Backstage root directory"
+yarn --cwd packages/backend add zod @backstage/catalog-model
```
-```typescript title="packages/backend/src/plugins/permission.ts"
+```ts title="packages/backend/src/extensions/permissionsPolicyExtension.ts"
...
import type { Entity } from '@backstage/catalog-model';
@@ -55,9 +59,9 @@ const isInSystem = createConditionFactory(isInSystemRule);
For a more detailed explanation on defining rules, refer to the [documentation for plugin authors](./plugin-authors/03-adding-a-resource-permission-check.md#adding-support-for-conditional-decisions).
-Still in the `packages/backend/src/plugins/permission.ts` file, let's use the condition we just created in our `TestPermissionPolicy`.
+Still in the `packages/backend/src/extensions/permissionsPolicyExtension.ts` file, let's use the condition we just created in our `CustomPermissionPolicy`.
-```ts title="packages/backend/src/plugins/permission.ts"
+```ts title="packages/backend/src/extensions/permissionsPolicyExtension.ts"
...
/* highlight-remove-next-line */
import { createCatalogPermissionRule } from '@backstage/plugin-catalog-backend/alpha';
@@ -98,7 +102,7 @@ export const isInSystemRule = createCatalogPermissionRule({
const isInSystem = createConditionFactory(isInSystemRule);
-class TestPermissionPolicy implements PermissionPolicy {
+class CustomPermissionPolicy implements PermissionPolicy {
async handle(
request: PolicyQuery,
user?: PolicyQueryUser,
@@ -135,25 +139,49 @@ class TestPermissionPolicy implements PermissionPolicy {
Now that we have a custom rule defined and added to our policy, we need provide it to the catalog plugin. This step is important because the catalog plugin will use the rule's `toQuery` and `apply` methods while evaluating conditional authorize results. There's no guarantee that the catalog and permission backends are running on the same server, so we must explicitly link the rule to ensure that it's available at runtime.
-The api for providing custom rules may differ between plugins, but there should typically be some integration point during the creation of the backend router. For the catalog, this integration point is exposed via `CatalogBuilder.addPermissionRules`.
+The api for providing custom rules may differ between plugins, but there should typically be an [extension point](../backend-system/architecture/05-extension-points.md) that you can use in your created module to add your rule. For the catalog, this extension point is exposed via `catalogPermissionExtensionPoint`. Here's the steps you'll need to take to add the `isInSystemRule` we created above to the catalog:
-```typescript title="packages/backend/src/plugins/catalog.ts"
-import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
-/* highlight-add-next-line */
-import { isInSystemRule } from './permission';
+1. We will be using the `@backstage/plugin-catalog-node` package as it contains the extension point we need. Run this to add it:
-...
+ ```bash title="from your Backstage root directory"
+ yarn --cwd packages/backend add @backstage/plugin-catalog-node
+ ```
-export default async function createPlugin(
- env: PluginEnvironment,
-): Promise {
- const builder = await CatalogBuilder.create(env);
- /* highlight-add-next-line */
- builder.addPermissionRules(isInSystemRule);
- ...
- return router;
-}
-```
+2. Next create a `catalogPermissionRules.ts` file in the `packages/backend/src/extensions` folder.
+3. Then add this as the contents of the new `catalogPermissionRules.ts` file:
+
+ ```typescript title="packages/backend/src/extensions/catalogPermissionRules.ts"
+ import { createBackendModule } from '@backstage/backend-plugin-api';
+ import { catalogPermissionExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
+ import { isInSystemRule } from './permissionPolicyExtension';
+
+ export default createBackendModule({
+ pluginId: 'catalog',
+ moduleId: 'permission-rules',
+ register(reg) {
+ reg.registerInit({
+ deps: { catalog: catalogPermissionExtensionPoint },
+ async init({ catalog }) {
+ catalog.addPermissionRules(isInSystemRule);
+ },
+ });
+ },
+ });
+ ```
+
+4. Next we need to add this to the backend by adding the following line:
+
+ ```ts title="packages/backend/src/index.ts"
+ // catalog plugin
+ backend.add(import('@backstage/plugin-catalog-backend/alpha'));
+ backend.add(
+ import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'),
+ );
+ /* highlight-add-next-line */
+ backend.add(import('./extensions/catalogPermissionRules'));
+ ```
+
+5. Now when you run you Backstage instance - `yarn dev` - the rule will be added to the catalog plugin.
The updated policy will allow catalog entity resource permissions if any of the following are true:
diff --git a/docs/permissions/getting-started--new.md b/docs/permissions/getting-started--new.md
deleted file mode 100644
index b6198a222f..0000000000
--- a/docs/permissions/getting-started--new.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-id: getting-started--new
-title: Getting Started
-description: How to get started with the permission framework as an integrator
----
-
-Backstage integrators control permissions by writing a policy. In general terms, a policy is simply an async function which receives a request to authorize a specific action for a user and (optional) resource, and returns a decision on whether to authorize that permission. Integrators can implement their own policies from scratch, or adopt reusable policies written by others.
-
-## Prerequisites
-
-The permissions framework depends on a few other Backstage systems, which must be set up before we can dive into writing a policy.
-
-### Upgrade to the latest version of Backstage
-
-To ensure your version of Backstage has all the latest permission-related functionality, it’s important to upgrade to the latest version. The [Backstage upgrade helper](https://backstage.github.io/upgrade-helper/) is a great tool to help ensure that you’ve made all the necessary changes during the upgrade!
-
-### Supply an identity resolver to populate group membership on sign in
-
-**Note**: If you are working off of an existing Backstage instance, you likely already have some form of an identity resolver set up.
-
-Like many other parts of Backstage, the permissions framework relies on information about group membership. This simplifies authoring policies through the use of groups, rather than requiring each user to be listed in the configuration. Group membership is also often useful for conditional permissions, for example allowing permissions to act on an entity to be granted when a user is a member of a group that owns that entity.
-
-[The IdentityResolver docs](../auth/identity-resolver.md) describe the process for resolving group membership on sign in.
-
-## Enable and test the permissions system
-
-All you need to do now is enable the permissions system in your Backstage instance!
-
-1. Set the property `permission.enabled` to `true` in `app-config.yaml`.
-
-```yaml title="app-config.yaml"
-permission:
- enabled: true
-```
-
-Congratulations! Now that the framework is configured, you can craft a permission policy that works best for your organization by utilizing a provided authorization method or by [writing your own policy](./writing-a-policy.md)!
diff --git a/docs/permissions/getting-started--old.md b/docs/permissions/getting-started--old.md
new file mode 100644
index 0000000000..96dbfec92f
--- /dev/null
+++ b/docs/permissions/getting-started--old.md
@@ -0,0 +1,169 @@
+---
+id: getting-started--old
+title: Getting Started
+description: How to get started with the permission framework as an integrator
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../backend-system/index.md), being the default since Backstage [version 1.24](../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./getting-started.md) instead. Otherwise, [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
+If you prefer to watch a video instead, you can start with this video introduction:
+
+VIDEO
+
+:::note Note
+
+This video was recorded in the January 2022 Contributors Session using `@backstage/create-app@0.4.14`. Some aspects of the demo may have changed in later releases.
+
+:::
+
+Backstage integrators control permissions by writing a policy. In general terms, a policy is simply an async function which receives a request to authorize a specific action for a user and (optional) resource, and returns a decision on whether to authorize that permission. Integrators can implement their own policies from scratch, or adopt reusable policies written by others.
+
+## Prerequisites
+
+The permissions framework depends on a few other Backstage systems, which must be set up before we can dive into writing a policy.
+
+### Upgrade to the latest version of Backstage
+
+The permissions framework itself is new to Backstage and still evolving quickly. To ensure your version of Backstage has all the latest permission-related functionality, it’s important to upgrade to the latest version. The [Backstage upgrade helper](https://backstage.github.io/upgrade-helper/) is a great tool to help ensure that you’ve made all the necessary changes during the upgrade!
+
+### Enable service-to-service authentication
+
+Service-to-service authentication allows Backstage backend code to verify that a given request originates from elsewhere in the Backstage backend. This is useful for tasks like collation of catalog entities in the search index. This type of request shouldn’t be permissioned, so it’s important to configure this feature before trying to use the permissions framework.
+
+To set up service-to-service authentication, follow the [service-to-service authentication docs](../auth/service-to-service-auth.md).
+
+### Supply an identity resolver to populate group membership on sign in
+
+**Note**: If you are working off of an existing Backstage instance, you likely already have some form of an identity resolver set up.
+
+Like many other parts of Backstage, the permissions framework relies on information about group membership. This simplifies authoring policies through the use of groups, rather than requiring each user to be listed in the configuration. Group membership is also often useful for conditional permissions, for example allowing permissions to act on an entity to be granted when a user is a member of a group that owns that entity.
+
+[The IdentityResolver docs](../auth/identity-resolver.md) describe the process for resolving group membership on sign in.
+
+## Optionally add cookie-based authentication
+
+Asset requests initiated by the browser will not include a token in the `Authorization` header. If these requests check authorization through the permission framework, as done in plugins like TechDocs, then you'll need to set up cookie-based authentication. Refer to the ["Authenticate API requests"](https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/authenticate-api-requests.md) tutorial for a demonstration on how to implement this behavior.
+
+## Integrating the permission framework with your Backstage instance
+
+### 1. Set up the permission backend
+
+The permissions framework uses a new `permission-backend` plugin to accept authorization requests from other plugins across your Backstage instance. The Backstage backend does not include this permission backend by default, so you will need to add it:
+
+1. Add `@backstage/plugin-permission-backend` as a dependency of your Backstage backend:
+
+ ```bash title="From your Backstage root directory"
+ yarn --cwd packages/backend add @backstage/plugin-permission-backend
+ ```
+
+2. Add the following to a new file, `packages/backend/src/plugins/permission.ts`. This adds the permission-backend router, and configures it with a policy which allows everything.
+
+ ```typescript title="packages/backend/src/plugins/permission.ts"
+ import { createRouter } from '@backstage/plugin-permission-backend';
+ import {
+ AuthorizeResult,
+ PolicyDecision,
+ } from '@backstage/plugin-permission-common';
+ import { PermissionPolicy } from '@backstage/plugin-permission-node';
+ import { Router } from 'express';
+ import { PluginEnvironment } from '../types';
+
+ class TestPermissionPolicy implements PermissionPolicy {
+ async handle(): Promise {
+ return { result: AuthorizeResult.ALLOW };
+ }
+ }
+
+ export default async function createPlugin(
+ env: PluginEnvironment,
+ ): Promise {
+ return await createRouter({
+ config: env.config,
+ logger: env.logger,
+ discovery: env.discovery,
+ policy: new TestPermissionPolicy(),
+ identity: env.identity,
+ });
+ }
+ ```
+
+3. Wire up the permission policy in `packages/backend/src/index.ts`. [The index in the example backend](https://github.com/backstage/backstage/blob/master/packages/backend/src/index.ts) shows how to do this. You’ll need to import the module from the previous step, create a plugin environment, and add the router to the express app:
+
+ ```ts title="packages/backend/src/index.ts"
+ import proxy from './plugins/proxy';
+ import techdocs from './plugins/techdocs';
+ import search from './plugins/search';
+ /* highlight-add-next-line */
+ import permission from './plugins/permission';
+
+ async function main() {
+ const techdocsEnv = useHotMemoize(module, () => createEnv('techdocs'));
+ const searchEnv = useHotMemoize(module, () => createEnv('search'));
+ const appEnv = useHotMemoize(module, () => createEnv('app'));
+ /* highlight-add-next-line */
+ const permissionEnv = useHotMemoize(module, () => createEnv('permission'));
+ // ..
+
+ apiRouter.use('/techdocs', await techdocs(techdocsEnv));
+ apiRouter.use('/proxy', await proxy(proxyEnv));
+ apiRouter.use('/search', await search(searchEnv));
+ /* highlight-add-next-line */
+ apiRouter.use('/permission', await permission(permissionEnv));
+ // ..
+ }
+ ```
+
+### 2. Enable and test the permissions system
+
+Now that the permission backend is running, it’s time to enable the permissions framework and make sure it’s working properly.
+
+1. Set the property `permission.enabled` to `true` in `app-config.yaml`.
+
+ ```yaml title="app-config.yaml"
+ permission:
+ enabled: true
+ ```
+
+2. Update the PermissionPolicy in `packages/backend/src/plugins/permission.ts` to disable a permission that’s easy for us to test. This policy rejects any attempt to delete a catalog entity:
+
+ ```ts title="packages/backend/src/plugins/permission.ts"
+ import { createRouter } from '@backstage/plugin-permission-backend';
+ import {
+ AuthorizeResult,
+ PolicyDecision,
+ } from '@backstage/plugin-permission-common';
+ /* highlight-remove-next-line */
+ import { PermissionPolicy } from '@backstage/plugin-permission-node';
+ /* highlight-add-start */
+ import {
+ PermissionPolicy,
+ PolicyQuery,
+ } from '@backstage/plugin-permission-node';
+ /* highlight-add-end */
+ import { Router } from 'express';
+ import { PluginEnvironment } from '../types';
+
+ class TestPermissionPolicy implements PermissionPolicy {
+ /* highlight-remove-next-line */
+ async handle(): Promise {
+ /* highlight-add-start */
+ async handle(request: PolicyQuery): Promise {
+ if (request.permission.name === 'catalog.entity.delete') {
+ return {
+ result: AuthorizeResult.DENY,
+ };
+ }
+ /* highlight-add-end */
+
+ return { result: AuthorizeResult.ALLOW };
+ }
+ }
+ ```
+
+3. Now that you’ve made this change, you should find that the unregister entity menu option on the catalog entity page is disabled.
+
+
+
+Now that the framework is fully configured, you can craft a permission policy that works best for your organization by utilizing a provided authorization method or by [writing your own policy](./writing-a-policy.md)!
diff --git a/docs/permissions/getting-started.md b/docs/permissions/getting-started.md
index e8132e571b..118282bbd4 100644
--- a/docs/permissions/getting-started.md
+++ b/docs/permissions/getting-started.md
@@ -4,14 +4,8 @@ title: Getting Started
description: How to get started with the permission framework as an integrator
---
-If you prefer to watch a video instead, you can start with this video introduction:
-
-VIDEO
-
-:::note Note
-
-This video was recorded in the January 2022 Contributors Session using `@backstage/create-app@0.4.14`. Some aspects of the demo may have changed in later releases.
-
+:::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). If you are still on the old backend system, you may want to read [its own article](./getting-started--old.md) instead, and [consider migrating](../backend-system/building-backends/08-migrating.md)!
:::
Backstage integrators control permissions by writing a policy. In general terms, a policy is simply an async function which receives a request to authorize a specific action for a user and (optional) resource, and returns a decision on whether to authorize that permission. Integrators can implement their own policies from scratch, or adopt reusable policies written by others.
@@ -22,13 +16,7 @@ The permissions framework depends on a few other Backstage systems, which must b
### Upgrade to the latest version of Backstage
-The permissions framework itself is new to Backstage and still evolving quickly. To ensure your version of Backstage has all the latest permission-related functionality, it’s important to upgrade to the latest version. The [Backstage upgrade helper](https://backstage.github.io/upgrade-helper/) is a great tool to help ensure that you’ve made all the necessary changes during the upgrade!
-
-### Enable service-to-service authentication
-
-Service-to-service authentication allows Backstage backend code to verify that a given request originates from elsewhere in the Backstage backend. This is useful for tasks like collation of catalog entities in the search index. This type of request shouldn’t be permissioned, so it’s important to configure this feature before trying to use the permissions framework.
-
-To set up service-to-service authentication, follow the [service-to-service authentication docs](../auth/service-to-service-auth.md).
+To ensure your version of Backstage has all the latest permission-related functionality, it’s important to upgrade to the latest version. The [Backstage upgrade helper](https://backstage.github.io/upgrade-helper/) is a great tool to help ensure that you’ve made all the necessary changes during the upgrade!
### Supply an identity resolver to populate group membership on sign in
@@ -38,33 +26,40 @@ Like many other parts of Backstage, the permissions framework relies on informat
[The IdentityResolver docs](../auth/identity-resolver.md) describe the process for resolving group membership on sign in.
-## Optionally add cookie-based authentication
+## Test Permission Policy
-Asset requests initiated by the browser will not include a token in the `Authorization` header. If these requests check authorization through the permission framework, as done in plugins like TechDocs, then you'll need to set up cookie-based authentication. Refer to the ["Authenticate API requests"](https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/authenticate-api-requests.md) tutorial for a demonstration on how to implement this behavior.
+To help validate the permission framework is setup we'll create a Test Permission Policy:
-## Integrating the permission framework with your Backstage instance
+1. Backstage ships with a default Allow All Policy, we want to remove that as it would override our Test Permission Policy. To do this remove the following line:
-### 1. Set up the permission backend
-
-The permissions framework uses a new `permission-backend` plugin to accept authorization requests from other plugins across your Backstage instance. The Backstage backend does not include this permission backend by default, so you will need to add it:
-
-1. Add `@backstage/plugin-permission-backend` as a dependency of your Backstage backend:
-
- ```bash title="From your Backstage root directory"
- yarn --cwd packages/backend add @backstage/plugin-permission-backend
+ ```ts title="packages/backend/src/index.ts"
+ // permission plugin
+ backend.add(import('@backstage/plugin-permission-backend/alpha'));
+ /* highlight-remove-start */
+ backend.add(
+ import('@backstage/plugin-permission-backend-module-allow-all-policy'),
+ );
+ /* highlight-remove-end */
```
-2. Add the following to a new file, `packages/backend/src/plugins/permission.ts`. This adds the permission-backend router, and configures it with a policy which allows everything.
+2. Now we need to add the `@backstage/backend-plugin-api` package:
- ```typescript title="packages/backend/src/plugins/permission.ts"
- import { createRouter } from '@backstage/plugin-permission-backend';
+ ```bash title="from your Backstage root directory"
+ yarn --cwd packages/backend add @backstage/backend-plugin-api
+ ```
+
+3. Next we will create an `extensions` folder under `packages/backend/src`
+4. In this new `extensions` folder we will add a new file called: `permissionsPolicyExtension.ts`
+5. Copy the following into the new `permissionsPolicyExtension.ts` file:
+
+ ```ts title="packages/backend/src/extensions/permissionsPolicyExtension.ts"
+ import { createBackendModule } from '@backstage/backend-plugin-api';
import {
- AuthorizeResult,
PolicyDecision,
+ AuthorizeResult,
} from '@backstage/plugin-permission-common';
import { PermissionPolicy } from '@backstage/plugin-permission-node';
- import { Router } from 'express';
- import { PluginEnvironment } from '../types';
+ import { policyExtensionPoint } from '@backstage/plugin-permission-node/alpha';
class TestPermissionPolicy implements PermissionPolicy {
async handle(): Promise {
@@ -72,48 +67,34 @@ The permissions framework uses a new `permission-backend` plugin to accept autho
}
}
- export default async function createPlugin(
- env: PluginEnvironment,
- ): Promise {
- return await createRouter({
- config: env.config,
- logger: env.logger,
- discovery: env.discovery,
- policy: new TestPermissionPolicy(),
- identity: env.identity,
- });
- }
+ export default createBackendModule({
+ pluginId: 'permission',
+ moduleId: 'permission-policy',
+ register(reg) {
+ reg.registerInit({
+ deps: { policy: policyExtensionPoint },
+ async init({ policy }) {
+ policy.setPolicy(new TestPermissionPolicy());
+ },
+ });
+ },
+ });
```
-3. Wire up the permission policy in `packages/backend/src/index.ts`. [The index in the example backend](https://github.com/backstage/backstage/blob/master/packages/backend/src/index.ts) shows how to do this. You’ll need to import the module from the previous step, create a plugin environment, and add the router to the express app:
+6. We now need to register this in the backend. We will do this by adding the follow line:
```ts title="packages/backend/src/index.ts"
- import proxy from './plugins/proxy';
- import techdocs from './plugins/techdocs';
- import search from './plugins/search';
+ // permission plugin
+ backend.add(import('@backstage/plugin-permission-backend/alpha'));
/* highlight-add-next-line */
- import permission from './plugins/permission';
-
- async function main() {
- const techdocsEnv = useHotMemoize(module, () => createEnv('techdocs'));
- const searchEnv = useHotMemoize(module, () => createEnv('search'));
- const appEnv = useHotMemoize(module, () => createEnv('app'));
- /* highlight-add-next-line */
- const permissionEnv = useHotMemoize(module, () => createEnv('permission'));
- // ..
-
- apiRouter.use('/techdocs', await techdocs(techdocsEnv));
- apiRouter.use('/proxy', await proxy(proxyEnv));
- apiRouter.use('/search', await search(searchEnv));
- /* highlight-add-next-line */
- apiRouter.use('/permission', await permission(permissionEnv));
- // ..
- }
+ backend.add(import('./extensions/permissionsPolicyExtension'));
```
-### 2. Enable and test the permissions system
+You now have a Test Permission Policy in place, this will help us test that the permission framework is working in the next section.
-Now that the permission backend is running, it’s time to enable the permissions framework and make sure it’s working properly.
+## Enable and test the permissions system
+
+Now lets test end to end that the permissions framework is setup and configured properly we will use the Test Permission Policy we create above as is, then modify it do deny access which will confirm everything is working as expected. Here's how to do that:
1. Set the property `permission.enabled` to `true` in `app-config.yaml`.
@@ -122,44 +103,11 @@ Now that the permission backend is running, it’s time to enable the permission
enabled: true
```
-2. Update the PermissionPolicy in `packages/backend/src/plugins/permission.ts` to disable a permission that’s easy for us to test. This policy rejects any attempt to delete a catalog entity:
+2. Now run `yarn dev`, Backstage should load up in your browser
+3. You should see that you have entities in your Catalog, pretty simple
+4. Let's change this line in our Test Permission Policy `return { result: AuthorizeResult.ALLOW };` to be `return { result: AuthorizeResult.DENY };`
+5. Run `yarn dev` once again, Backstage should load up in your browser
+6. This time you should not see any entities in your Catalog, if you do then something went wrong along the way and you'll need to review the steps above
+7. Revert the change we made in step 4 so that the line looks like this: `return { result: AuthorizeResult.ALLOW };`
- ```ts title="packages/backend/src/plugins/permission.ts"
- import { createRouter } from '@backstage/plugin-permission-backend';
- import {
- AuthorizeResult,
- PolicyDecision,
- } from '@backstage/plugin-permission-common';
- /* highlight-remove-next-line */
- import { PermissionPolicy } from '@backstage/plugin-permission-node';
- /* highlight-add-start */
- import {
- PermissionPolicy,
- PolicyQuery,
- } from '@backstage/plugin-permission-node';
- /* highlight-add-end */
- import { Router } from 'express';
- import { PluginEnvironment } from '../types';
-
- class TestPermissionPolicy implements PermissionPolicy {
- /* highlight-remove-next-line */
- async handle(): Promise {
- /* highlight-add-start */
- async handle(request: PolicyQuery): Promise {
- if (request.permission.name === 'catalog.entity.delete') {
- return {
- result: AuthorizeResult.DENY,
- };
- }
- /* highlight-add-end */
-
- return { result: AuthorizeResult.ALLOW };
- }
- }
- ```
-
-3. Now that you’ve made this change, you should find that the unregister entity menu option on the catalog entity page is disabled.
-
-
-
-Now that the framework is fully configured, you can craft a permission policy that works best for your organization by utilizing a provided authorization method or by [writing your own policy](./writing-a-policy.md)!
+Congratulations! Now that the framework is fully configured, you can craft a permission policy that works best for your organization by [writing your own policy](./writing-a-policy.md)!
diff --git a/docs/permissions/plugin-authors/01-setup--old.md b/docs/permissions/plugin-authors/01-setup--old.md
new file mode 100644
index 0000000000..34802d004f
--- /dev/null
+++ b/docs/permissions/plugin-authors/01-setup--old.md
@@ -0,0 +1,134 @@
+---
+id: 01-setup--old
+title: 1. Tutorial setup
+description: How to get started with the permission framework as a plugin author
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../../backend-system/index.md), being the default since Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./01-setup.md) instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
+The following tutorial is designed to help plugin authors add support for permissions to their plugins. We'll add support for permissions to example `todo-list` and `todo-list-backend` plugins, but the process should be similar for other plugins!
+
+The rest of this page is focused on adding the `todo-list` and `todo-list-backend` plugins to your Backstage instance. If you want to add support for permissions to your own plugin instead, feel free to skip to the [next section](./02-adding-a-basic-permission-check.md).
+
+## Setup for the Tutorial
+
+We will use a "Todo list" feature, composed of the `todo-list` and `todo-list-backend` plugins, as well as their dependency, `todo-list-common`.
+
+The source code is available here:
+
+- [todo-list](https://github.com/backstage/backstage/blob/master/plugins/example-todo-list)
+- [todo-list-backend](https://github.com/backstage/backstage/blob/master/plugins/example-todo-list-backend)
+- [todo-list-common](https://github.com/backstage/backstage/blob/master/plugins/example-todo-list-common)
+
+1. Copy-paste the three folders into the plugins folder of your backstage application repository (removing the `example-` prefix from each folder) or run the following script from the root of your backstage application:
+
+ ```bash
+ $ cd $(mktemp -d)
+ git clone --depth 1 --quiet --no-checkout --filter=blob:none https://github.com/backstage/backstage.git .
+ git checkout master -- plugins/example-todo-list/
+ git checkout master -- plugins/example-todo-list-backend/
+ git checkout master -- plugins/example-todo-list-common/
+ sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list/package.json
+ sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list-backend/package.json
+ sed -i '' 's/workspace:\^/\*/g' plugins/example-todo-list-common/package.json
+ for file in plugins/*; do mv "$file" "$OLDPWD/${file/example-todo/todo}"; done
+ cd -
+ ```
+
+ The `plugins` directory of your project should now include `todo-list`, `todo-list-backend`, and `todo-list-common`.
+
+ **Important**: if you are on **Windows**, make sure you have WSL and git installed on your machine before executing the script above.
+
+2. Add these packages as dependencies for your Backstage app:
+
+ ```sh title="From your Backstage root directory"
+ yarn --cwd packages/backend add @internal/plugin-todo-list-backend @internal/plugin-todo-list-common
+ yarn --cwd packages/app add @internal/plugin-todo-list
+ ```
+
+3. Include the backend and frontend plugin in your application:
+
+ Create a new `packages/backend/src/plugins/todolist.ts` with the following content:
+
+ ```typescript title="packages/backend/src/plugins/todolist.ts"
+ import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
+ import { createRouter } from '@internal/plugin-todo-list-backend';
+ import { Router } from 'express';
+ import { PluginEnvironment } from '../types';
+
+ export default async function createPlugin({
+ logger,
+ discovery,
+ }: PluginEnvironment): Promise {
+ return await createRouter({
+ logger,
+ identity: DefaultIdentityClient.create({
+ discovery,
+ issuer: await discovery.getExternalBaseUrl('auth'),
+ }),
+ });
+ }
+ ```
+
+ Apply the following changes to `packages/backend/src/index.ts`:
+
+ ```ts title="packages/backend/src/index.ts"
+ import techdocs from './plugins/techdocs';
+ /* highlight-add-next-line */
+ import todoList from './plugins/todolist';
+ import search from './plugins/search';
+
+ async function main() {
+ const searchEnv = useHotMemoize(module, () => createEnv('search'));
+ const appEnv = useHotMemoize(module, () => createEnv('app'));
+ /* highlight-add-next-line */
+ const todoListEnv = useHotMemoize(module, () => createEnv('todolist'));
+ // ..
+
+ apiRouter.use('/proxy', await proxy(proxyEnv));
+ apiRouter.use('/search', await search(searchEnv));
+ apiRouter.use('/permission', await permission(permissionEnv));
+ /* highlight-add-next-line */
+ apiRouter.use('/todolist', await todoList(todoListEnv));
+ // Add backends ABOVE this line; this 404 handler is the catch-all fallback
+ apiRouter.use(notFoundHandler());
+ // ..
+ }
+ ```
+
+ Apply the following changes to `packages/app/src/App.tsx`:
+
+ ```tsx title="packages/app/src/App.tsx"
+ /* highlight-add-next-line */
+ import { TodoListPage } from '@internal/plugin-todo-list';
+
+ const routes = (
+
+ }>
+ {searchPage}
+
+ } />
+ {/* highlight-add-next-line */}
+ } />
+ {/* ... */}
+
+ );
+ ```
+
+Now if you start your application you should be able to reach the `/todo-list` page:
+
+
+
+---
+
+## Integrate the new plugin
+
+If you play with the UI, you will notice that it is possible to perform a few actions:
+
+- create a new todo item (`POST /todos`)
+- view todo items (`GET /todos`)
+- edit an existing todo item (`PUT /todos`)
+
+Let's try to bring authorization on top of each one of them.
diff --git a/docs/permissions/plugin-authors/01-setup.md b/docs/permissions/plugin-authors/01-setup.md
index f11bdff930..f3c361e8b5 100644
--- a/docs/permissions/plugin-authors/01-setup.md
+++ b/docs/permissions/plugin-authors/01-setup.md
@@ -4,6 +4,10 @@ title: 1. Tutorial setup
description: How to get started with the permission framework as a plugin author
---
+:::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). If you are still on the old backend system, you may want to read [its own article](./01-setup--old.md) instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
The following tutorial is designed to help plugin authors add support for permissions to their plugins. We'll add support for permissions to example `todo-list` and `todo-list-backend` plugins, but the process should be similar for other plugins!
The rest of this page is focused on adding the `todo-list` and `todo-list-backend` plugins to your Backstage instance. If you want to add support for permissions to your own plugin instead, feel free to skip to the [next section](./02-adding-a-basic-permission-check.md).
@@ -40,58 +44,31 @@ The source code is available here:
2. Add these packages as dependencies for your Backstage app:
```sh title="From your Backstage root directory"
- yarn --cwd packages/backend add @internal/plugin-todo-list-backend @internal/plugin-todo-list-common
+ yarn --cwd packages/backend add @backstage/plugin-permission-backend @backstage/plugin-permission-backend-module-allow-all-policy @internal/plugin-todo-list-backend @internal/plugin-todo-list-common
yarn --cwd packages/app add @internal/plugin-todo-list
```
3. Include the backend and frontend plugin in your application:
- Create a new `packages/backend/src/plugins/todolist.ts` with the following content:
-
- ```typescript title="packages/backend/src/plugins/todolist.ts"
- import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
- import { createRouter } from '@internal/plugin-todo-list-backend';
- import { Router } from 'express';
- import { PluginEnvironment } from '../types';
-
- export default async function createPlugin({
- logger,
- discovery,
- }: PluginEnvironment): Promise {
- return await createRouter({
- logger,
- identity: DefaultIdentityClient.create({
- discovery,
- issuer: await discovery.getExternalBaseUrl('auth'),
- }),
- });
- }
- ```
-
Apply the following changes to `packages/backend/src/index.ts`:
```ts title="packages/backend/src/index.ts"
- import techdocs from './plugins/techdocs';
- /* highlight-add-next-line */
- import todoList from './plugins/todolist';
- import search from './plugins/search';
-
- async function main() {
- const searchEnv = useHotMemoize(module, () => createEnv('search'));
- const appEnv = useHotMemoize(module, () => createEnv('app'));
- /* highlight-add-next-line */
- const todoListEnv = useHotMemoize(module, () => createEnv('todolist'));
- // ..
-
- apiRouter.use('/proxy', await proxy(proxyEnv));
- apiRouter.use('/search', await search(searchEnv));
- apiRouter.use('/permission', await permission(permissionEnv));
- /* highlight-add-next-line */
- apiRouter.use('/todolist', await todoList(todoListEnv));
- // Add backends ABOVE this line; this 404 handler is the catch-all fallback
- apiRouter.use(notFoundHandler());
- // ..
- }
+ import { createBackend } from '@backstage/backend-defaults';
+ //...
+ const backend = createBackend();
+ //...
+ /* highlight-add-start */
+ // Installing the permission plugin
+ backend.add(import('@backstage/plugin-permission-backend/alpha'));
+ // Installing the allow all permission policy module
+ backend.add(
+ import('@backstage/plugin-permission-backend-module-allow-all-policy'),
+ );
+ // Installing the todolist plugin
+ backend.add(import('@internal/plugin-todo-list-backend'));
+ /* highlight-add-end */
+ //...
+ backend.start();
```
Apply the following changes to `packages/app/src/App.tsx`:
@@ -99,13 +76,11 @@ The source code is available here:
```tsx title="packages/app/src/App.tsx"
/* highlight-add-next-line */
import { TodoListPage } from '@internal/plugin-todo-list';
+ //...
const routes = (
- }>
- {searchPage}
-
- } />
+ {/* ... */}
{/* highlight-add-next-line */}
} />
{/* ... */}
diff --git a/docs/permissions/plugin-authors/02-adding-a-basic-permission-check--old.md b/docs/permissions/plugin-authors/02-adding-a-basic-permission-check--old.md
new file mode 100644
index 0000000000..7c8dad3d87
--- /dev/null
+++ b/docs/permissions/plugin-authors/02-adding-a-basic-permission-check--old.md
@@ -0,0 +1,387 @@
+---
+id: 02-adding-a-basic-permission-check--old
+title: 2. Adding a basic permission check
+description: Explains how to add a basic permission check to a Backstage plugin
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../../backend-system/index.md), being the default since Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./02-adding-a-basic-permission-check.md) instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
+If the outcome of a permission check doesn't need to change for different [resources](../../references/glossary.md#resource-permission-plugin), you can use a _basic permission check_. For this kind of check, we simply need to define a permission, and call `authorize` with it.
+
+For this tutorial, we'll use a basic permission check to authorize the `create` endpoint in our todo-backend. This will allow Backstage integrators to control whether each of their users is authorized to create todos by adjusting their [permission policy](../../references/glossary.md#policy-permission-plugin).
+
+We'll start by creating a new permission, and then we'll use the permission api to call `authorize` with it during todo creation.
+
+## Creating a new permission
+
+Let's navigate to the file `plugins/todo-list-common/src/permissions.ts` and add our first permission:
+
+```ts title="plugins/todo-list-common/src/permissions.ts"
+import { createPermission } from '@backstage/plugin-permission-common';
+
+/* highlight-remove-start */
+export const tempExamplePermission = createPermission({
+ name: 'temp.example.noop',
+ attributes: {},
+/* highlight-remove-end */
+/* highlight-add-start */
+export const todoListCreatePermission = createPermission({
+ name: 'todo.list.create',
+ attributes: { action: 'create' },
+/* highlight-add-end */
+});
+
+/* highlight-remove-next-line */
+export const todoListPermissions = [tempExamplePermission];
+/* highlight-add-next-line */
+export const todoListPermissions = [todoListCreatePermission];
+```
+
+For this tutorial, we've automatically exported all permissions from this file (see `plugins/todo-list-common/src/index.ts`).
+
+:::note Note
+
+We use a separate `todo-list-common` package since all permissions authorized by your plugin should be exported from a ["common-library" package](https://backstage.io/docs/tooling/cli/build-system#package-roles). This allows Backstage integrators to reference them in frontend components as well as permission policies.
+
+:::
+
+## Authorizing using the new permission
+
+Install the following module:
+
+```
+$ yarn workspace @internal/plugin-todo-list-backend \
+ add @backstage/plugin-permission-common @backstage/plugin-permission-node @internal/plugin-todo-list-common
+```
+
+Edit `plugins/todo-list-backend/src/service/router.ts`:
+
+```ts title="plugins/todo-list-backend/src/service/router.ts"
+/* highlight-remove-start */
+import { InputError } from '@backstage/errors';
+import { IdentityApi } from '@backstage/plugin-auth-node';
+/* highlight-remove-end */
+/* highlight-add-start */
+import { InputError, NotAllowedError } from '@backstage/errors';
+import { getBearerTokenFromAuthorizationHeader, IdentityApi } from '@backstage/plugin-auth-node';
+import { PermissionEvaluator, AuthorizeResult } from '@backstage/plugin-permission-common';
+import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';
+import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
+/* highlight-add-end */
+
+export interface RouterOptions {
+ logger: Logger;
+ identity: IdentityApi;
+ /* highlight-add-next-line */
+ permissions: PermissionEvaluator;
+}
+
+export async function createRouter(
+ options: RouterOptions,
+): Promise {
+ /* highlight-remove-next-line */
+ const { logger, identity } = options;
+ /* highlight-add-next-line */
+ const { logger, identity, permissions } = options;
+
+ /* highlight-add-start */
+ const permissionIntegrationRouter = createPermissionIntegrationRouter({
+ permissions: [todoListCreatePermission],
+ });
+ /* highlight-add-end */
+
+ const router = Router();
+ router.use(express.json());
+
+ router.get('/health', (_, response) => {
+ logger.info('PONG!');
+ response.json({ status: 'ok' });
+ });
+
+ /* highlight-add-next-line */
+ router.use(permissionIntegrationRouter);
+
+ router.get('/todos', async (_req, res) => {
+ res.json(getAll());
+ });
+
+ router.post('/todos', async (req, res) => {
+ let author: string | undefined = undefined;
+
+ const user = await identity.getIdentity({ request: req });
+ author = user?.identity.userEntityRef;
+ /* highlight-add-start */
+ const token = getBearerTokenFromAuthorizationHeader(
+ req.header('authorization'),
+ );
+ const decision = (
+ await permissions.authorize([{ permission: todoListCreatePermission }], {
+ token,
+ })
+ )[0];
+
+ if (decision.result === AuthorizeResult.DENY) {
+ throw new NotAllowedError('Unauthorized');
+ }
+ /* highlight-add-end */
+
+ if (!isTodoCreateRequest(req.body)) {
+ throw new InputError('Invalid payload');
+ }
+
+ const todo = add({ title: req.body.title, author });
+ res.json(todo);
+ });
+
+ // ...
+```
+
+Pass the `permissions` object to the plugin in `packages/backend/src/plugins/todolist.ts`:
+
+```ts title="packages/backend/src/plugins/todolist.ts"
+import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
+import { createRouter } from '@internal/plugin-todo-list-backend';
+import { Router } from 'express';
+import { PluginEnvironment } from '../types';
+
+export default async function createPlugin({
+ logger,
+ discovery,
+ /* highlight-add-next-line */
+ permissions,
+}: PluginEnvironment): Promise {
+ return await createRouter({
+ logger,
+ identity: DefaultIdentityClient.create({
+ discovery,
+ issuer: await discovery.getExternalBaseUrl('auth'),
+ }),
+ /* highlight-add-next-line */
+ permissions,
+ });
+}
+```
+
+That's it! Now your plugin is fully configured. Let's try to test the logic by denying the permission.
+
+## Test the authorized create endpoint
+
+Before running this step, please make sure you followed the steps described in [Getting started](../getting-started.md) section.
+
+In order to test the logic above, the integrators of your backstage instance need to change their permission policy to return `DENY` for our newly-created permission:
+
+```ts title="packages/backend/src/plugins/permission.ts"
+import {
+ PermissionPolicy,
+ /* highlight-add-start */
+ PolicyQuery,
+ PolicyQueryUser,
+ /* highlight-add-end */
+} from '@backstage/plugin-permission-node';
+/* highlight-add-start */
+import { isPermission } from '@backstage/plugin-permission-common';
+import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
+/* highlight-add-end */
+
+class TestPermissionPolicy implements PermissionPolicy {
+ /* highlight-remove-next-line */
+ async handle(): Promise {
+ /* highlight-add-start */
+ async handle(
+ request: PolicyQuery,
+ _user?: PolicyQueryUser,
+ ): Promise {
+ if (isPermission(request.permission, todoListCreatePermission)) {
+ return {
+ result: AuthorizeResult.DENY,
+ };
+ }
+ /* highlight-add-end */
+
+ return {
+ result: AuthorizeResult.ALLOW,
+ };
+}
+```
+
+Now the frontend should show an error whenever you try to create a new Todo item.
+
+Let's flip the result back to `ALLOW` before moving on.
+
+```ts
+if (isPermission(request.permission, todoListCreatePermission)) {
+ return {
+ /* highlight-remove-next-line */
+ result: AuthorizeResult.DENY,
+ /* highlight-add-next-line */
+ result: AuthorizeResult.ALLOW,
+ };
+}
+```
+
+At this point everything is working but if you run `yarn tsc` you'll get some errors, let's fix those up.
+
+First we'll clean up the `plugins/todo-list-backend/src/service/router.test.ts`:
+
+```ts title="plugins/todo-list-backend/src/service/router.test.ts"
+import { getVoidLogger } from '@backstage/backend-common';
+import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
+/* highlight-add-next-line */
+import { PermissionEvaluator } from '@backstage/plugin-permission-common';
+import express from 'express';
+import request from 'supertest';
+
+import { createRouter } from './router';
+
+/* highlight-add-start */
+const mockedAuthorize: jest.MockedFunction =
+ jest.fn();
+const mockedPermissionQuery: jest.MockedFunction<
+ PermissionEvaluator['authorizeConditional']
+> = jest.fn();
+
+const permissionEvaluator: PermissionEvaluator = {
+ authorize: mockedAuthorize,
+ authorizeConditional: mockedPermissionQuery,
+};
+/* highlight-add-end */
+
+describe('createRouter', () => {
+ let app: express.Express;
+
+ beforeAll(async () => {
+ const router = await createRouter({
+ logger: getVoidLogger(),
+ identity: {} as DefaultIdentityClient,
+ /* highlight-add-next-line */
+ permissions: permissionEvaluator,
+ });
+ app = express().use(router);
+ });
+
+ beforeEach(() => {
+ jest.resetAllMocks();
+ });
+
+ describe('GET /health', () => {
+ it('returns ok', async () => {
+ const response = await request(app).get('/health');
+
+ expect(response.status).toEqual(200);
+ expect(response.body).toEqual({ status: 'ok' });
+ });
+ });
+});
+```
+
+Then we want to update the `plugins/todo-list-backend/src/service/standaloneServer.ts`:
+
+```ts title="plugins/todo-list-backend/src/service/standaloneServer.ts"
+import {
+ createServiceBuilder,
+ loadBackendConfig,
+ SingleHostDiscovery,
+ /* highlight-add-next-line */
+ ServerTokenManager,
+} from '@backstage/backend-common';
+import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
+/* highlight-add-next-line */
+import { ServerPermissionClient } from '@backstage/plugin-permission-node';
+import { Server } from 'http';
+import { Logger } from 'winston';
+import { createRouter } from './router';
+
+export interface ServerOptions {
+ port: number;
+ enableCors: boolean;
+ logger: Logger;
+}
+
+export async function startStandaloneServer(
+ options: ServerOptions,
+): Promise {
+ const logger = options.logger.child({ service: 'todo-list-backend' });
+ logger.debug('Starting application server...');
+ const config = await loadBackendConfig({ logger, argv: process.argv });
+ const discovery = SingleHostDiscovery.fromConfig(config);
+ /* highlight-add-start */
+ const tokenManager = ServerTokenManager.fromConfig(config, {
+ logger,
+ });
+ const permissions = ServerPermissionClient.fromConfig(config, {
+ discovery,
+ tokenManager,
+ });
+ /* highlight-add-end */
+ const router = await createRouter({
+ logger,
+ identity: DefaultIdentityClient.create({
+ discovery,
+ issuer: await discovery.getExternalBaseUrl('auth'),
+ }),
+ /* highlight-add-next-line */
+ permissions,
+ });
+
+ let service = createServiceBuilder(module)
+ .setPort(options.port)
+ .addRouter('/todo-list', router);
+ if (options.enableCors) {
+ service = service.enableCors({ origin: 'http://localhost:3000' });
+ }
+
+ return await service.start().catch(err => {
+ logger.error(err);
+ process.exit(1);
+ });
+}
+
+module.hot?.accept();
+```
+
+Finally, we need to update `plugins/todo-list-backend/src/plugin.ts`:
+
+```ts title="plugins/todo-list-backend/src/plugin.ts"
+import { loggerToWinstonLogger } from '@backstage/backend-common';
+import {
+ coreServices,
+ createBackendPlugin,
+} from '@backstage/backend-plugin-api';
+import { createRouter } from './service/router';
+
+/**
+* The example TODO list backend plugin.
+*
+* @public
+*/
+export const exampleTodoListPlugin = createBackendPlugin({
+ pluginId: 'exampleTodoList',
+ register(env) {
+ env.registerInit({
+ deps: {
+ identity: coreServices.identity,
+ logger: coreServices.logger,
+ httpRouter: coreServices.httpRouter,
+ /* highlight-add-next-line */
+ permissions: coreServices.permissions,
+ },
+ /* highlight-remove-next-line */
+ async init({ identity, logger, httpRouter }) {
+ /* highlight-add-next-line */
+ async init({ identity, logger, httpRouter, permissions }) {
+ httpRouter.use(
+ await createRouter({
+ identity,
+ logger: loggerToWinstonLogger(logger),
+ permissions,
+ }),
+ );
+ },
+ });
+ },
+});
+```
+
+Now when you run `yarn tsc` you should have no more errors.
diff --git a/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md b/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
index 724edb7ccb..2d39d5cef3 100644
--- a/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
+++ b/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
@@ -4,6 +4,10 @@ title: 2. Adding a basic permission check
description: Explains how to add a basic permission check to a Backstage plugin
---
+:::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). If you are still on the old backend system, you may want to read [its own article](./02-adding-a-basic-permission-check--old.md) instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
If the outcome of a permission check doesn't need to change for different [resources](../../references/glossary.md#resource-permission-plugin), you can use a _basic permission check_. For this kind of check, we simply need to define a permission, and call `authorize` with it.
For this tutorial, we'll use a basic permission check to authorize the `create` endpoint in our todo-backend. This will allow Backstage integrators to control whether each of their users is authorized to create todos by adjusting their [permission policy](../../references/glossary.md#policy-permission-plugin).
@@ -57,30 +61,30 @@ Edit `plugins/todo-list-backend/src/service/router.ts`:
```ts title="plugins/todo-list-backend/src/service/router.ts"
/* highlight-remove-start */
import { InputError } from '@backstage/errors';
-import { IdentityApi } from '@backstage/plugin-auth-node';
+import { LoggerService, HttpAuthService } from '@backstage/backend-plugin-api';
/* highlight-remove-end */
/* highlight-add-start */
import { InputError, NotAllowedError } from '@backstage/errors';
-import { getBearerTokenFromAuthorizationHeader, IdentityApi } from '@backstage/plugin-auth-node';
-import { PermissionEvaluator, AuthorizeResult } from '@backstage/plugin-permission-common';
+import { LoggerService, HttpAuthService, PermissionsService } from '@backstage/backend-plugin-api';
+import { AuthorizeResult } from '@backstage/plugin-permission-common';
import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';
import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
/* highlight-add-end */
export interface RouterOptions {
- logger: Logger;
- identity: IdentityApi;
+ logger: LoggerService;
+ httpAuth: HttpAuthService;
/* highlight-add-next-line */
- permissions: PermissionEvaluator;
+ permissions: PermissionsService;
}
export async function createRouter(
options: RouterOptions,
): Promise {
/* highlight-remove-next-line */
- const { logger, identity } = options;
+ const { logger, httpAuth } = options;
/* highlight-add-next-line */
- const { logger, identity, permissions } = options;
+ const { logger, httpAuth, permissions } = options;
/* highlight-add-start */
const permissionIntegrationRouter = createPermissionIntegrationRouter({
@@ -109,13 +113,12 @@ export async function createRouter(
const user = await identity.getIdentity({ request: req });
author = user?.identity.userEntityRef;
/* highlight-add-start */
- const token = getBearerTokenFromAuthorizationHeader(
- req.header('authorization'),
- );
+ const credentials = await httpAuth.credentials(req, { allow: ['user'] });
const decision = (
- await permissions.authorize([{ permission: todoListCreatePermission }], {
- token,
- })
+ await permissions.authorize(
+ [{ permission: todoListCreatePermission }],
+ { credentials },
+ )
)[0];
if (decision.result === AuthorizeResult.DENY) {
@@ -134,30 +137,43 @@ export async function createRouter(
// ...
```
-Pass the `permissions` object to the plugin in `packages/backend/src/plugins/todolist.ts`:
+Pass the `permissions` object to the plugin in `plugins/todo-list-backend/src/plugin.ts`:
-```ts title="packages/backend/src/plugins/todolist.ts"
-import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
-import { createRouter } from '@internal/plugin-todo-list-backend';
-import { Router } from 'express';
-import { PluginEnvironment } from '../types';
+```ts title="plugins/todo-list-backend/src/plugin.ts"
+import { coreServices, createBackendPlugin } from '@backstage/backend-plugin-api';
+import { createRouter } from './service/router';
-export default async function createPlugin({
- logger,
- discovery,
- /* highlight-add-next-line */
- permissions,
-}: PluginEnvironment): Promise {
- return await createRouter({
- logger,
- identity: DefaultIdentityClient.create({
- discovery,
- issuer: await discovery.getExternalBaseUrl('auth'),
- }),
- /* highlight-add-next-line */
- permissions,
- });
-}
+export const exampleTodoListPlugin = createBackendPlugin({
+ pluginId: 'todolist',
+ register(env) {
+ env.registerInit({
+ deps: {
+ logger: coreServices.logger,
+ httpAuth: coreServices.httpAuth,
+ httpRouter: coreServices.httpRouter,
+ /* highlight-add-next-line */
+ permissions: coreServices.permissions,
+ },
+ /* highlight-remove-next-line */
+ async init({ logger, httpAuth, httpRouter }) {
+ /* highlight-add-next-line */
+ async init({ logger, httpAuth, httpRouter, permissions }) {
+ httpRouter.use(
+ await createRouter({
+ logger,
+ httpAuth,
+ /* highlight-add-next-line */
+ permissions,
+ }),
+ );
+ httpRouter.addAuthPolicy({
+ path: '/health',
+ allow: 'unauthenticated',
+ });
+ },
+ });
+ },
+});
```
That's it! Now your plugin is fully configured. Let's try to test the logic by denying the permission.
@@ -168,7 +184,15 @@ Before running this step, please make sure you followed the steps described in [
In order to test the logic above, the integrators of your backstage instance need to change their permission policy to return `DENY` for our newly-created permission:
-```ts title="packages/backend/src/plugins/permission.ts"
+```ts title="packages/backend/src/extensions/permissionsPolicyExtension.ts"
+import { createBackendModule } from '@backstage/backend-plugin-api';
+import {
+ PolicyDecision,
+ /* highlight-add-start */
+ isPermission,
+ /* highlight-add-end */
+ AuthorizeResult,
+} from '@backstage/plugin-permission-common';
import {
PermissionPolicy,
/* highlight-add-start */
@@ -177,9 +201,9 @@ import {
/* highlight-add-end */
} from '@backstage/plugin-permission-node';
/* highlight-add-start */
-import { isPermission } from '@backstage/plugin-permission-common';
import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
/* highlight-add-end */
+import { policyExtensionPoint } from '@backstage/plugin-permission-node/alpha';
class TestPermissionPolicy implements PermissionPolicy {
/* highlight-remove-next-line */
@@ -200,6 +224,19 @@ class TestPermissionPolicy implements PermissionPolicy {
result: AuthorizeResult.ALLOW,
};
}
+
+export default createBackendModule({
+ pluginId: 'permission',
+ moduleId: 'permission-policy',
+ register(reg) {
+ reg.registerInit({
+ deps: { policy: policyExtensionPoint },
+ async init({ policy }) {
+ policy.setPolicy(new TestPermissionPolicy());
+ },
+ });
+ },
+});
```
Now the frontend should show an error whenever you try to create a new Todo item.
@@ -217,42 +254,26 @@ if (isPermission(request.permission, todoListCreatePermission)) {
}
```
-At this point everything is working but if you run `yarn tsc` you'll get some errors, let's fix those up.
+At this point everything is working but if you run `yarn tsc` you'll get an error, let's fix this up.
-First we'll clean up the `plugins/todo-list-backend/src/service/router.test.ts`:
+Clean up the `plugins/todo-list-backend/src/service/router.test.ts`:
```ts title="plugins/todo-list-backend/src/service/router.test.ts"
-import { getVoidLogger } from '@backstage/backend-common';
-import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
-/* highlight-add-next-line */
-import { PermissionEvaluator } from '@backstage/plugin-permission-common';
import express from 'express';
import request from 'supertest';
import { createRouter } from './router';
-
-/* highlight-add-start */
-const mockedAuthorize: jest.MockedFunction =
- jest.fn();
-const mockedPermissionQuery: jest.MockedFunction<
- PermissionEvaluator['authorizeConditional']
-> = jest.fn();
-
-const permissionEvaluator: PermissionEvaluator = {
- authorize: mockedAuthorize,
- authorizeConditional: mockedPermissionQuery,
-};
-/* highlight-add-end */
+import { mockServices } from '@backstage/backend-test-utils';
describe('createRouter', () => {
let app: express.Express;
beforeAll(async () => {
const router = await createRouter({
- logger: getVoidLogger(),
- identity: {} as DefaultIdentityClient,
+ logger: mockServices.logger.mock(),
+ httpAuth: mockServices.httpAuth.mock(),
/* highlight-add-next-line */
- permissions: permissionEvaluator,
+ permissions: mockServices.permissions.mock(),
});
app = express().use(router);
});
@@ -272,112 +293,4 @@ describe('createRouter', () => {
});
```
-Then we want to update the `plugins/todo-list-backend/src/service/standaloneServer.ts`:
-
-```ts title="plugins/todo-list-backend/src/service/standaloneServer.ts"
-import {
- createServiceBuilder,
- loadBackendConfig,
- SingleHostDiscovery,
- /* highlight-add-next-line */
- ServerTokenManager,
-} from '@backstage/backend-common';
-import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
-/* highlight-add-next-line */
-import { ServerPermissionClient } from '@backstage/plugin-permission-node';
-import { Server } from 'http';
-import { Logger } from 'winston';
-import { createRouter } from './router';
-
-export interface ServerOptions {
- port: number;
- enableCors: boolean;
- logger: Logger;
-}
-
-export async function startStandaloneServer(
- options: ServerOptions,
-): Promise {
- const logger = options.logger.child({ service: 'todo-list-backend' });
- logger.debug('Starting application server...');
- const config = await loadBackendConfig({ logger, argv: process.argv });
- const discovery = SingleHostDiscovery.fromConfig(config);
- /* highlight-add-start */
- const tokenManager = ServerTokenManager.fromConfig(config, {
- logger,
- });
- const permissions = ServerPermissionClient.fromConfig(config, {
- discovery,
- tokenManager,
- });
- /* highlight-add-end */
- const router = await createRouter({
- logger,
- identity: DefaultIdentityClient.create({
- discovery,
- issuer: await discovery.getExternalBaseUrl('auth'),
- }),
- /* highlight-add-next-line */
- permissions,
- });
-
- let service = createServiceBuilder(module)
- .setPort(options.port)
- .addRouter('/todo-list', router);
- if (options.enableCors) {
- service = service.enableCors({ origin: 'http://localhost:3000' });
- }
-
- return await service.start().catch(err => {
- logger.error(err);
- process.exit(1);
- });
-}
-
-module.hot?.accept();
-```
-
-Finally, we need to update `plugins/todo-list-backend/src/plugin.ts`:
-
-```ts title="plugins/todo-list-backend/src/plugin.ts"
-import { loggerToWinstonLogger } from '@backstage/backend-common';
-import {
- coreServices,
- createBackendPlugin,
-} from '@backstage/backend-plugin-api';
-import { createRouter } from './service/router';
-
-/**
-* The example TODO list backend plugin.
-*
-* @public
-*/
-export const exampleTodoListPlugin = createBackendPlugin({
- pluginId: 'exampleTodoList',
- register(env) {
- env.registerInit({
- deps: {
- identity: coreServices.identity,
- logger: coreServices.logger,
- httpRouter: coreServices.httpRouter,
- /* highlight-add-next-line */
- permissions: coreServices.permissions,
- },
- /* highlight-remove-next-line */
- async init({ identity, logger, httpRouter }) {
- /* highlight-add-next-line */
- async init({ identity, logger, httpRouter, permissions }) {
- httpRouter.use(
- await createRouter({
- identity,
- logger: loggerToWinstonLogger(logger),
- permissions,
- }),
- );
- },
- });
- },
-});
-```
-
Now when you run `yarn tsc` you should have no more errors.
diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check--old.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check--old.md
new file mode 100644
index 0000000000..ee06629e71
--- /dev/null
+++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check--old.md
@@ -0,0 +1,299 @@
+---
+id: 03-adding-a-resource-permission-check--old
+title: 3. Adding a resource permission check
+description: Explains how to add a resource permission check to a Backstage plugin
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../../backend-system/index.md), being the default since Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./03-adding-a-resource-permission-check.md) instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
+When performing updates (or other operations) on specific [resources](../../references/glossary.md#resource-permission-plugin), the permissions framework allows for the decision to be based on characteristics of the resource itself. This means that it's possible to write policies that (for example) allow the operation for users that own a resource, and deny the operation otherwise.
+
+## Creating the update permission
+
+Let's add a new permission to the file `plugins/todo-list-common/src/permissions.ts` from [the previous section](./02-adding-a-basic-permission-check.md).
+
+```ts title="plugins/todo-list-common/src/permissions.ts"
+import { createPermission } from '@backstage/plugin-permission-common';
+
+/* highlight-add-next-line */
+export const TODO_LIST_RESOURCE_TYPE = 'todo-item';
+
+export const todoListCreatePermission = createPermission({
+ name: 'todo.list.create',
+ attributes: { action: 'create' },
+});
+
+/* highlight-add-start */
+export const todoListUpdatePermission = createPermission({
+ name: 'todo.list.update',
+ attributes: { action: 'update' },
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+});
+/* highlight-add-end */
+
+/* highlight-remove-next-line */
+export const todoListPermissions = [todoListCreatePermission];
+/* highlight-add-start */
+export const todoListPermissions = [
+ todoListCreatePermission,
+ todoListUpdatePermission,
+];
+/* highlight-add-end */
+```
+
+Notice that unlike `todoListCreatePermission`, the `todoListUpdatePermission` permission contains a `resourceType` field. This field indicates to the permission framework that this permission is intended to be authorized in the context of a resource with type `'todo-item'`. You can use whatever string you like as the resource type, as long as you use the same value consistently for each type of resource.
+
+## Setting up authorization for the update permission
+
+To start, let's edit `plugins/todo-list-backend/src/service/router.ts` in the same manner as we did in the previous section:
+
+```ts title="plugins/todo-list-backend/src/service/router.ts"
+/* highlight-remove-next-line */
+import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
+/* highlight-add-start */
+import {
+ todoListCreatePermission,
+ todoListUpdatePermission,
+} from '@internal/plugin-todo-list-common';
+/* highlight-add-end */
+
+// ...
+
+const permissionIntegrationRouter = createPermissionIntegrationRouter({
+ /* highlight-remove-next-line */
+ permissions: [todoListCreatePermission],
+ /* highlight-add-next-line */
+ permissions: [todoListCreatePermission, todoListUpdatePermission],
+});
+
+// ...
+
+router.put('/todos', async (req, res) => {
+ /* highlight-add-start */
+ const token = getBearerTokenFromAuthorizationHeader(
+ req.header('authorization'),
+ );
+ /* highlight-add-end */
+
+ if (!isTodoUpdateRequest(req.body)) {
+ throw new InputError('Invalid payload');
+ }
+ /* highlight-add-start */
+ const decision = (
+ await permissions.authorize(
+ [{ permission: todoListUpdatePermission, resourceRef: req.body.id }],
+ {
+ token,
+ },
+ )
+ )[0];
+
+ if (decision.result !== AuthorizeResult.ALLOW) {
+ throw new NotAllowedError('Unauthorized');
+ }
+ /* highlight-add-end */
+
+ res.json(update(req.body));
+});
+```
+
+**Important:** Notice that we are passing an extra `resourceRef` field, with the `id` of the todo item as the value.
+
+This enables decisions based on characteristics of the resource, but it's important to note that policy authors will not have access to the resource ref inside of their permission policies. Instead, the policies will return conditional decisions, which we need to now support in our plugin.
+
+## Adding support for conditional decisions
+
+Install the missing module:
+
+```bash
+$ yarn workspace @internal/plugin-todo-list-backend add zod
+```
+
+Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append the following code:
+
+```typescript title="plugins/todo-list-backend/src/service/rules.ts"
+import { makeCreatePermissionRule } from '@backstage/plugin-permission-node';
+import { TODO_LIST_RESOURCE_TYPE } from '@internal/plugin-todo-list-common';
+import { z } from 'zod';
+import { Todo, TodoFilter } from './todos';
+
+export const createTodoListPermissionRule = makeCreatePermissionRule<
+ Todo,
+ TodoFilter,
+ typeof TODO_LIST_RESOURCE_TYPE
+>();
+
+export const isOwner = createTodoListPermissionRule({
+ name: 'IS_OWNER',
+ description: 'Should allow only if the todo belongs to the user',
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+ paramsSchema: z.object({
+ userId: z.string().describe('User ID to match on the resource'),
+ }),
+ apply: (resource: Todo, { userId }) => {
+ return resource.author === userId;
+ },
+ toQuery: ({ userId }) => {
+ return {
+ property: 'author',
+ values: [userId],
+ };
+ },
+});
+
+export const rules = { isOwner };
+```
+
+`makeCreatePermissionRule` is a helper used to ensure that rules created for this plugin use consistent types for the resource and query.
+
+:::note Note
+
+To support custom rules defined by Backstage integrators, you must export `createTodoListPermissionRule` from the backend package and provide some way for custom rules to be passed in before the backend starts, likely via `createRouter`.
+
+:::
+
+We have created a new `isOwner` rule, which is going to be automatically used by the permission framework whenever a conditional response is returned in response to an authorized request with an attached `resourceRef`.
+Specifically, the `apply` function is used to understand whether the passed resource should be authorized or not.
+
+Let's skip the `toQuery` function for now, we'll come back to that in the next section.
+
+Now, let's create the new endpoint by editing `plugins/todo-list-backend/src/service/router.ts`. This uses the `createPermissionIntegrationRouter` helper to add the APIs needed by the permission framework to your plugin. You'll need to supply:
+
+- `getResources`: a function that accepts an array of `resourceRefs` in the same format you expect to be passed to `authorize`, and returns an array of the corresponding resources.
+- `resourceType`: the same value used in the permission rule above.
+- `permissions`: the list of permissions that your plugin accepts.
+- `rules`: an array of all the permission rules you want to support in conditional decisions.
+
+```ts title="plugins/todo-list-backend/src/service/router.ts"
+// ...
+import {
+ /* highlight-add-next-line */
+ TODO_LIST_RESOURCE_TYPE,
+ todoListCreatePermission,
+ todoListUpdatePermission,
+} from '@internal/plugin-todo-list-common';
+/* highlight-remove-next-line */
+import { add, getAll, update } from './todos';
+/* highlight-add-start */
+import { add, getAll, getTodo, update } from './todos';
+import { rules } from './rules';
+/* highlight-add-end */
+
+export async function createRouter(
+ options: RouterOptions,
+): Promise {
+ const { logger, identity, permissions } = options;
+
+ const permissionIntegrationRouter = createPermissionIntegrationRouter({
+ permissions: [todoListCreatePermission, todoListUpdatePermission],
+ /* highlight-add-start */
+ getResources: async resourceRefs => {
+ return resourceRefs.map(getTodo);
+ },
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+ rules: Object.values(rules),
+ /* highlight-add-end */
+ });
+
+ const router = Router();
+ router.use(express.json());
+
+ // ...
+}
+```
+
+## Provide utilities for policy authors
+
+Now that we have a new resource type and a corresponding rule, we need to export some utilities for policy authors to reference them.
+
+Create a new `plugins/todo-list-backend/src/conditionExports.ts` file and add the following code:
+
+```typescript title="plugins/todo-list-backend/src/conditionExports.ts"
+import { TODO_LIST_RESOURCE_TYPE } from '@internal/plugin-todo-list-common';
+import { createConditionExports } from '@backstage/plugin-permission-node';
+import { rules } from './service/rules';
+
+const { conditions, createConditionalDecision } = createConditionExports({
+ pluginId: 'todolist',
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+ rules,
+});
+
+export const todoListConditions = conditions;
+
+export const createTodoListConditionalDecision = createConditionalDecision;
+```
+
+Make sure `todoListConditions` and `createTodoListConditionalDecision` are exported from the `todo-list-backend` package by editing `plugins/todo-list-backend/src/index.ts`:
+
+```ts title="plugins/todo-list-backend/src/index.ts"
+export * from './service/router';
+/* highlight-add-next-line */
+export * from './conditionExports';
+export { exampleTodoListPlugin } from './plugin';
+```
+
+## Test the authorized update endpoint
+
+Let's go back to the permission policy's handle function and try to authorize our new permission with an `isOwner` condition.
+
+```ts title="packages/backend/src/plugins/permission.ts"
+import {
+ IdentityClient
+} from '@backstage/plugin-auth-node';
+import {
+ PermissionPolicy,
+ PolicyQuery,
+ PolicyQueryUser,
+} from '@backstage/plugin-permission-node';
+import { isPermission } from '@backstage/plugin-permission-common';
+/* highlight-remove-next-line */
+import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
+/* highlight-add-start */
+import {
+ todoListCreatePermission,
+ todoListUpdatePermission,
+} from '@internal/plugin-todo-list-common';
+import {
+ todoListConditions,
+ createTodoListConditionalDecision,
+} from '@internal/plugin-todo-list-backend';
+/* highlight-add-end */
+
+
+async handle(
+ request: PolicyQuery,
+ /* highlight-remove-next-line */
+ _user?: PolicyQueryUser,
+ /* highlight-add-next-line */
+ user?: PolicyQueryUser,
+): Promise {
+ if (isPermission(request.permission, todoListCreatePermission)) {
+ return {
+ result: AuthorizeResult.ALLOW,
+ };
+ }
+ /* highlight-add-start */
+ if (isPermission(request.permission, todoListUpdatePermission)) {
+ return createTodoListConditionalDecision(
+ request.permission,
+ todoListConditions.isOwner({
+ userId: user?.info.userEntityRef ?? '',
+ }),
+ );
+ }
+ /* highlight-add-end */
+
+ return {
+ result: AuthorizeResult.ALLOW,
+ };
+}
+```
+
+For any incoming update requests, we now return a _Conditional Decision_. We are saying:
+
+> Hey permission framework, I can't make a decision alone. Please go to the plugin with id `todolist` and ask it to apply these conditions.
+
+To check that everything works as expected, you should now see an error in the UI whenever you try to edit an item that wasn’t created by you. Success!
diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
index 7ad551e926..3f5a9777b3 100644
--- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
+++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
@@ -4,6 +4,10 @@ title: 3. Adding a resource permission check
description: Explains how to add a resource permission check to a Backstage plugin
---
+:::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). If you are still on the old backend system, you may want to read [its own article](./03-adding-a-resource-permission-check--old.md) instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
When performing updates (or other operations) on specific [resources](../../references/glossary.md#resource-permission-plugin), the permissions framework allows for the decision to be based on characteristics of the resource itself. This means that it's possible to write policies that (for example) allow the operation for users that own a resource, and deny the operation otherwise.
## Creating the update permission
@@ -68,9 +72,7 @@ const permissionIntegrationRouter = createPermissionIntegrationRouter({
router.put('/todos', async (req, res) => {
/* highlight-add-start */
- const token = getBearerTokenFromAuthorizationHeader(
- req.header('authorization'),
- );
+ const credentials = await httpAuth.credentials(req, { allow: ['user'] });
/* highlight-add-end */
if (!isTodoUpdateRequest(req.body)) {
@@ -80,9 +82,7 @@ router.put('/todos', async (req, res) => {
const decision = (
await permissions.authorize(
[{ permission: todoListUpdatePermission, resourceRef: req.body.id }],
- {
- token,
- },
+ { credentials },
)
)[0];
@@ -146,7 +146,7 @@ export const rules = { isOwner };
:::note Note
-To support custom rules defined by Backstage integrators, you must export `createTodoListPermissionRule` from the backend package and provide some way for custom rules to be passed in before the backend starts, likely via `createRouter`.
+To support custom rules defined by Backstage integrators, you must export `createTodoListPermissionRule` from the backend package and provide some way for custom rules to be passed in before the backend starts, likely via `extension point`.
:::
diff --git a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data--old.md b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data--old.md
new file mode 100644
index 0000000000..cca6899ef6
--- /dev/null
+++ b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data--old.md
@@ -0,0 +1,193 @@
+---
+id: 04-authorizing-access-to-paginated-data--old
+title: 4. Authorizing access to paginated data
+description: Explains how to authorize access to paginated data in a Backstage plugin
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../../backend-system/index.md), being the default since Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./04-authorizing-access-to-paginated-data.md) instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
+
+Authorizing `GET /todos` is similar to the update endpoint, in that it should be possible to authorize access based on the characteristics of each resource. However, we'll need to authorize a list of resources for this endpoint.
+
+One possible solution may leverage the batching functionality to authorize all of the todos, and then returning only the ones for which the decision was `ALLOW`:
+
+```ts
+router.get('/todos', async (req, res) => {
+ /* highlight-add-next-line */
+ const credentials = await httpAuth.credentials(req, { allow: ['user'] });
+
+ /* highlight-remove-next-line */
+ res.json(getAll());
+ /* highlight-add-start */
+ const items = getAll();
+ const decisions = await permissions.authorize(
+ items.map(({ id }) => ({
+ permission: todoListReadPermission,
+ resourceRef: id,
+ })),
+ { credentials },
+ );
+
+ const filteredItems = decisions.filter(
+ decision => decision.result === AuthorizeResult.ALLOW,
+ );
+ res.json(filteredItems);
+ /* highlight-add-end */
+});
+```
+
+This approach will work for simple cases, but it has a downside: it forces us to retrieve all the elements upfront and authorize them one by one. This forces the plugin implementation to handle concerns like pagination, which is currently handled by the data source.
+
+To avoid this situation, the permissions framework has support for filtering items in the data source itself. In this part of the tutorial, we'll describe the steps required to use that behavior.
+
+:::note Note
+
+In order to perform authorization filtering in this way, the data source must allow filters to be logically combined with AND, OR, and NOT operators. The conditional decisions returned by the permissions framework use a [nested object](https://backstage.io/docs/reference/plugin-permission-common.permissioncriteria) to combine conditions. If you're implementing a filter API from scratch, we recommend using the same shape for ease of interoperability. If not, you'll need to implement a function which transforms the nested object into your own format.
+
+:::
+
+## Creating the read permission
+
+Let's add another permission to the plugin.
+
+```ts title="plugins/todo-list-backend/src/service/permissions.ts"
+import { createPermission } from '@backstage/plugin-permission-common';
+
+export const TODO_LIST_RESOURCE_TYPE = 'todo-item';
+
+export const todoListCreatePermission = createPermission({
+ name: 'todo.list.create',
+ attributes: { action: 'create' },
+});
+
+export const todoListUpdatePermission = createPermission({
+ name: 'todo.list.update',
+ attributes: { action: 'update' },
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+});
+
+/* highlight-add-start */
+export const todoListReadPermission = createPermission({
+ name: 'todos.list.read',
+ attributes: { action: 'read' },
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+});
+/* highlight-add-end */
+
+export const todoListPermissions = [
+ todoListCreatePermission,
+ todoListUpdatePermission,
+ /* highlight-add-start */
+ todoListReadPermission,
+ /* highlight-add-end */
+];
+```
+
+## Using conditional policy decisions
+
+So far we've only used the `PermissionsService.authorize` method, which will evaluate conditional decisions before returning a result. In this step, we want to evaluate conditional decisions within our plugin, so we'll use `PermissionsService.authorizeConditional` instead.
+
+```ts title="plugins/todo-list-backend/src/service/router.ts"
+/* highlight-remove-next-line */
+import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';
+/* highlight-add-start */
+import {
+ createPermissionIntegrationRouter,
+ createConditionTransformer,
+ ConditionTransformer,
+} from '@backstage/plugin-permission-node';
+/* highlight-add-end */
+/* highlight-remove-next-line */
+import { add, getAll, getTodo, update } from './todos';
+/* highlight-add-next-line */
+import { add, getAll, getTodo, TodoFilter, update } from './todos';
+import {
+ TODO_LIST_RESOURCE_TYPE,
+ todoListCreatePermission,
+ todoListUpdatePermission,
+ /* highlight-add-next-line */
+ todoListReadPermission,
+} from './permissions';
+
+// ...
+
+const permissionIntegrationRouter = createPermissionIntegrationRouter({
+ /* highlight-remove-next-line */
+ permissions: [todoListCreatePermission, todoListUpdatePermission],
+ /* highlight-add-next-line */
+ permissions: [todoListCreatePermission, todoListUpdatePermission, todoListReadPermission],
+ getResources: async resourceRefs => {
+ return resourceRefs.map(getTodo);
+ },
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+ rules: Object.values(rules),
+});
+
+// ...
+
+/* highlight-add-next-line */
+const transformConditions: ConditionTransformer = createConditionTransformer(Object.values(rules));
+
+/* highlight-remove-next-line */
+router.get('/todos', async (_req, res) => {
+/* highlight-add-start */
+router.get('/todos', async (req, res) => {
+ const credentials = await httpAuth.credentials(req, { allow: ['user'] });
+
+ const decision = (
+ await permissions.authorizeConditional([{ permission: todoListReadPermission }], {
+ credentials,
+ })
+ )[0];
+
+ if (decision.result === AuthorizeResult.DENY) {
+ throw new NotAllowedError('Unauthorized');
+ }
+
+ if (decision.result === AuthorizeResult.CONDITIONAL) {
+ const filter = transformConditions(decision.conditions);
+ res.json(getAll(filter));
+ } else {
+ res.json(getAll());
+ }
+/* highlight-add-end */
+ /* highlight-remove-next-line */
+ res.json(getAll());
+});
+```
+
+To make the process of handling conditional decisions easier, the permission framework provides a `createConditionTransformer` helper. This function accepts an array of permission rules, and returns a transformer function which converts the conditions to the format needed by the plugin using the `toQuery` method defined on each rule.
+
+Since `TodoFilter` used in our plugin matches the structure of the conditions object, we can directly pass the output of our condition transformer. If the filters were structured differently, we'd need to transform it further before passing it to the api.
+
+## Test the authorized read endpoint
+
+Let's update our permission policy to return a conditional result whenever a `todoListReadPermission` permission is received. In this case, we can reuse the decision returned for the `todosListCreate` permission.
+
+```ts title="packages/backend/src/plugins/permission.ts"
+import {
+ todoListCreatePermission,
+ todoListUpdatePermission,
+ /* highlight-add-next-line */
+ todoListReadPermission,
+} from '@internal/plugin-todo-list-common';
+
+/* highlight-remove-next-line */
+if (isPermission(request.permission, todoListUpdatePermission)) {
+/* highlight-add-start */
+if (
+ isPermission(request.permission, todoListUpdatePermission) ||
+ isPermission(request.permission, todoListReadPermission)
+) {
+/* highlight-add-end */
+ return createTodoListConditionalDecision(
+ request.permission,
+ todoListConditions.isOwner({
+ userId: user?.identity.userEntityRef
+ }),
+ );
+}
+```
+
+Once the changes to the permission policy are saved, the UI should show only the todo items you've created.
diff --git a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md
index 84e86140fc..883884b6e5 100644
--- a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md
+++ b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md
@@ -4,6 +4,8 @@ title: 4. Authorizing access to paginated data
description: Explains how to authorize access to paginated data in a Backstage plugin
---
+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). If you are still on the old backend system, you may want to read [its own article](./04-authorizing-access-to-paginated-data--old.md) instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+
Authorizing `GET /todos` is similar to the update endpoint, in that it should be possible to authorize access based on the characteristics of each resource. However, we'll need to authorize a list of resources for this endpoint.
One possible solution may leverage the batching functionality to authorize all of the todos, and then returning only the ones for which the decision was `ALLOW`:
@@ -11,7 +13,7 @@ One possible solution may leverage the batching functionality to authorize all o
```ts
router.get('/todos', async (req, res) => {
/* highlight-add-next-line */
- const token = IdentityClient.getBearerToken(req.header('authorization'));
+ const credentials = await httpAuth.credentials(req, { allow: ['user'] });
/* highlight-remove-next-line */
res.json(getAll());
@@ -22,6 +24,7 @@ router.get('/todos', async (req, res) => {
permission: todoListReadPermission,
resourceRef: id,
})),
+ { credentials },
);
const filteredItems = decisions.filter(
@@ -81,7 +84,7 @@ export const todoListPermissions = [
## Using conditional policy decisions
-So far we've only used the `PermissionEvaluator.authorize` method, which will evaluate conditional decisions before returning a result. In this step, we want to evaluate conditional decisions within our plugin, so we'll use `PermissionEvaluator.authorizeConditional` instead.
+So far we've only used the `PermissionsService.authorize` method, which will evaluate conditional decisions before returning a result. In this step, we want to evaluate conditional decisions within our plugin, so we'll use `PermissionsService.authorizeConditional` instead.
```ts title="plugins/todo-list-backend/src/service/router.ts"
/* highlight-remove-next-line */
@@ -128,13 +131,11 @@ const transformConditions: ConditionTransformer = createConditionTra
router.get('/todos', async (_req, res) => {
/* highlight-add-start */
router.get('/todos', async (req, res) => {
- const token = getBearerTokenFromAuthorizationHeader(
- req.header('authorization'),
- );
+ const credentials = await httpAuth.credentials(req, { allow: ['user'] });
const decision = (
await permissions.authorizeConditional([{ permission: todoListReadPermission }], {
- token,
+ credentials,
})
)[0];
diff --git a/docs/permissions/plugin-authors/05-frontend-authorization.md b/docs/permissions/plugin-authors/05-frontend-authorization.md
index 60458aaf4d..4d673e3b4f 100644
--- a/docs/permissions/plugin-authors/05-frontend-authorization.md
+++ b/docs/permissions/plugin-authors/05-frontend-authorization.md
@@ -199,7 +199,8 @@ const routes = (
- {/* highlight-add-end */}}
+ {/* highlight-add-end */}
+ }>
{/* ... */}
diff --git a/docs/permissions/writing-a-policy--old.md b/docs/permissions/writing-a-policy--old.md
new file mode 100644
index 0000000000..d95fa7ffb3
--- /dev/null
+++ b/docs/permissions/writing-a-policy--old.md
@@ -0,0 +1,148 @@
+---
+id: writing-a-policy--old
+title: Writing a permission policy
+description: How to write your own permission policy as a Backstage integrator
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../backend-system/index.md), being the default since Backstage [version 1.24](../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./writing-a-policy.md) instead. Otherwise, [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
+In the [previous section](./getting-started.md), we were able to set up the permission framework and make a simple change to our `TestPermissionPolicy` to confirm that policy is indeed wired up correctly.
+
+That policy looked like this:
+
+```typescript title="packages/backend/src/plugins/permission.ts"
+class TestPermissionPolicy implements PermissionPolicy {
+ async handle(
+ request: PolicyQuery,
+ _user?: PolicyQueryUser,
+ ): Promise {
+ if (request.permission.name === 'catalog.entity.delete') {
+ return {
+ result: AuthorizeResult.DENY,
+ };
+ }
+
+ return { result: AuthorizeResult.ALLOW };
+ }
+}
+```
+
+## What's in a policy?
+
+Let's break this down a bit further. The request object of type [PolicyQuery](https://backstage.io/docs/reference/plugin-permission-node.policyquery) is a simple wrapper around [the Permission object](https://backstage.io/docs/reference/plugin-permission-common.permission). This permission object encapsulates information about the action that the user is attempting to perform (See [the Concepts page](./concepts.md) for more details).
+
+In the policy above, we are checking to see if the provided action is a catalog entity delete action, which is the permission that the catalog plugin authors have created to represent the action of unregistering a catalog entity. If this is the case, we return a [Definitive Policy Decision](https://backstage.io/docs/reference/plugin-permission-common.definitivepolicydecision) of DENY. In all other cases, we return ALLOW (resulting in an allow-by-default behavior).
+
+As we confirmed in the previous section, we know that this now prevents us from unregistering catalog components. Hooray! But you may notice that this prevents _anyone_ from unregistering a component, which is not a very realistic policy. Let's improve this policy by disabling the unregister action _unless you are the owner of this component_.
+
+## Conditional decisions
+
+Let's change the policy to the following:
+
+```ts
+import {
+ AuthorizeResult,
+ PolicyDecision,
+ /* highlight-add-next-line */
+ isPermission,
+} from '@backstage/plugin-permission-common';
+/* highlight-add-start */
+import {
+ catalogConditions,
+ createCatalogConditionalDecision,
+} from '@backstage/plugin-catalog-backend/alpha';
+import {
+ catalogEntityDeletePermission,
+} from '@backstage/plugin-catalog-common/alpha';
+/* highlight-add-end */
+
+class TestPermissionPolicy implements PermissionPolicy {
+ /* highlight-remove-next-line */
+ async handle(request: PolicyQuery): Promise {
+ /* highlight-add-start */
+ async handle(
+ request: PolicyQuery,
+ user?: PolicyQueryUser,
+ ): Promise {
+ /* highlight-add-end */
+ /* highlight-remove-next-line */
+ if (request.permission.name === 'catalog.entity.delete') {
+ /* highlight-add-next-line */
+ if (isPermission(request.permission, catalogEntityDeletePermission)) {
+ /* highlight-remove-start */
+ return {
+ result: AuthorizeResult.DENY,
+ };
+ /* highlight-remove-end */
+ /* highlight-add-start */
+ return createCatalogConditionalDecision(
+ request.permission,
+ catalogConditions.isEntityOwner({
+ claims: user?.info.ownershipEntityRefs ?? [],
+ }),
+ );
+ /* highlight-add-end */
+ }
+ return { result: AuthorizeResult.ALLOW };
+ }
+}
+```
+
+Let's walk through the new code that we just added.
+
+Instead of returning an Definitive Policy Decision, we use factory methods to construct a [Conditional Policy Decision](https://backstage.io/docs/reference/plugin-permission-common.conditionalpolicydecision) (See the [Concepts page](./concepts.md) for more details). Since the policy doesn't have enough information to determine if `user` is the entity owner, this criteria is encapsulated within the conditional decision. However, `createCatalogConditionalDecision` will not compile unless `request.permission` is a catalog entity [`ResourcePermission`](https://backstage.io/docs/reference/plugin-permission-common.resourcepermission). This type constraint ensures that policies return conditional decisions that are compatible with the requested permission. To address this, we use [`isPermission`](https://backstage.io/docs/reference/plugin-permission-common.ispermission) to ["narrow"](https://www.typescriptlang.org/docs/handbook/2/narrowing.html) the type of `request.permission` to `ResourcePermission<'catalog-entity'>`. This matches the runtime behavior that was in place before, but you'll notice that the type of `request.permission` has changed within the scope of that `if` statement.
+
+The `catalogConditions` object contains all of the rules defined by the catalog plugin. These rules can be combined to form a [`PermissionCriteria`](https://backstage.io/docs/reference/plugin-permission-common.permissioncriteria) object, but for this case we only need to use the `isEntityOwner` rule. This rule accepts a list of entity refs that represent User identity and Group membership used to determine ownership. The second argument to `PermissionPolicy#handle` provides us with a `PolicyQueryUser` object, from which we can grab the user's `ownershipEntityRefs`. We provide an empty array as a fallback since the user may be anonymous.
+
+You should now be able to see in your Backstage app that the unregister entity button is enabled for entities that you own, but disabled for all other entities!
+
+## Resource types
+
+Now let's say we want to prevent all actions on catalog entities unless performed by the owner. One way to achieve this may be to simply update the `if` statement and check for each permission. If you choose to write your policy this way, it will certainly work! However, it may be difficult to maintain as the policy grows, and it may not be obvious if certain permissions are left out. We can author this same policy in a more scalable way by checking the resource type of the requested permission.
+
+```ts
+import {
+ AuthorizeResult,
+ PolicyDecision,
+ /* highlight-remove-next-line */
+ isPermission,
+ isResourcePermission,
+ /* highlight-add-next-line */
+} from '@backstage/plugin-permission-common';
+import {
+ catalogConditions,
+ createCatalogConditionalDecision,
+} from '@backstage/plugin-catalog-backend/alpha';
+/* highlight-remove-start */
+import {
+ catalogEntityDeletePermission,
+} from '@backstage/plugin-catalog-common/alpha';
+/* highlight-remove-end */
+
+class TestPermissionPolicy implements PermissionPolicy {
+ async handle(
+ request: PolicyQuery,
+ user?: PolicyQueryUser,
+ ): Promise {
+ /* highlight-remove-next-line */
+ if (isPermission(request.permission, catalogEntityDeletePermission)) {
+ /* highlight-add-next-line */
+ if (isResourcePermission(request.permission, 'catalog-entity')) {
+ return createCatalogConditionalDecision(
+ request.permission,
+ catalogConditions.isEntityOwner({
+ claims: user?.info.ownershipEntityRefs ?? [],
+ }),
+ );
+ }
+
+ return { result: AuthorizeResult.ALLOW };
+ }
+}
+```
+
+In this example, we use [`isResourcePermission`](https://backstage.io/docs/reference/plugin-permission-common.isresourcepermission) to match all permissions with a resource type of `catalog-entity`. Just like `isPermission`, this helper will "narrow" the type of `request.permission` and enable the use of `createCatalogConditionalDecision`. In addition to the behavior you observed before, you should also see that catalog entities are no longer visible unless you are the owner - success!
+
+_Note:_ Some catalog permissions do not have the `'catalog-entity'` resource type, such as [`catalogEntityCreatePermission`](https://github.com/backstage/backstage/blob/1e5e9fb9de9856a49e60fc70c38a4e4e94c69570/plugins/catalog-common/src/permissions.ts#L49). In those cases, a definitive decision is required because conditions can't be applied to an entity that does not exist yet.
diff --git a/docs/permissions/writing-a-policy.md b/docs/permissions/writing-a-policy.md
index 0f2d4fe091..ce662b6e1a 100644
--- a/docs/permissions/writing-a-policy.md
+++ b/docs/permissions/writing-a-policy.md
@@ -4,16 +4,40 @@ title: Writing a permission policy
description: How to write your own permission policy as a Backstage integrator
---
+:::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). If you are still on the old backend system, you may want to read [its own article](./writing-a-policy--old.md) instead, and [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
In the [previous section](./getting-started.md), we were able to set up the permission framework and make a simple change to our `TestPermissionPolicy` to confirm that policy is indeed wired up correctly.
That policy looked like this:
-```typescript title="packages/backend/src/plugins/permission.ts"
+```ts title="packages/backend/src/extensions/permissionsPolicyExtension.ts"
class TestPermissionPolicy implements PermissionPolicy {
- async handle(
- request: PolicyQuery,
- _user?: PolicyQueryUser,
- ): Promise {
+ async handle(): Promise {
+ return { result: AuthorizeResult.ALLOW };
+ }
+}
+```
+
+That is a very simple example and it's not really doing anything helpful, let's expand this a little more.
+
+First, let's rename this from `TestPermissionPolicy` to `CustomPermissionPolicy` as you'll build on adding to it as your permissions needs require. Then we'll add a check for a permission. Here's what the full `permissionsPolicyExtension.ts` will look like:
+
+```ts title="packages/backend/src/extensions/permissionsPolicyExtension.ts"
+import { createBackendModule } from '@backstage/backend-plugin-api';
+import {
+ PolicyDecision,
+ AuthorizeResult,
+} from '@backstage/plugin-permission-common';
+import {
+ PermissionPolicy,
+ PolicyQuery,
+} from '@backstage/plugin-permission-node';
+import { policyExtensionPoint } from '@backstage/plugin-permission-node/alpha';
+
+class CustomPermissionPolicy implements PermissionPolicy {
+ async handle(request: PolicyQuery): Promise {
if (request.permission.name === 'catalog.entity.delete') {
return {
result: AuthorizeResult.DENY,
@@ -23,8 +47,23 @@ class TestPermissionPolicy implements PermissionPolicy {
return { result: AuthorizeResult.ALLOW };
}
}
+
+export default createBackendModule({
+ pluginId: 'permission',
+ moduleId: 'permission-policy',
+ register(reg) {
+ reg.registerInit({
+ deps: { policy: policyExtensionPoint },
+ async init({ policy }) {
+ policy.setPolicy(new CustomPermissionPolicy());
+ },
+ });
+ },
+});
```
+Now with this policy in place the ability to delete entities in the Catalog is not allowed for anyone. The following sections will expand on the concepts used here.
+
## What's in a policy?
Let's break this down a bit further. The request object of type [PolicyQuery](https://backstage.io/docs/reference/plugin-permission-node.policyquery) is a simple wrapper around [the Permission object](https://backstage.io/docs/reference/plugin-permission-common.permission). This permission object encapsulates information about the action that the user is attempting to perform (See [the Concepts page](./concepts.md) for more details).
@@ -54,7 +93,7 @@ import {
} from '@backstage/plugin-catalog-common/alpha';
/* highlight-add-end */
-class TestPermissionPolicy implements PermissionPolicy {
+class CustomPermissionPolicy implements PermissionPolicy {
/* highlight-remove-next-line */
async handle(request: PolicyQuery): Promise {
/* highlight-add-start */
@@ -117,7 +156,7 @@ import {
} from '@backstage/plugin-catalog-common/alpha';
/* highlight-remove-end */
-class TestPermissionPolicy implements PermissionPolicy {
+class CustomPermissionPolicy implements PermissionPolicy {
async handle(
request: PolicyQuery,
user?: PolicyQueryUser,
@@ -141,4 +180,8 @@ class TestPermissionPolicy implements PermissionPolicy {
In this example, we use [`isResourcePermission`](https://backstage.io/docs/reference/plugin-permission-common.isresourcepermission) to match all permissions with a resource type of `catalog-entity`. Just like `isPermission`, this helper will "narrow" the type of `request.permission` and enable the use of `createCatalogConditionalDecision`. In addition to the behavior you observed before, you should also see that catalog entities are no longer visible unless you are the owner - success!
-_Note:_ Some catalog permissions do not have the `'catalog-entity'` resource type, such as [`catalogEntityCreatePermission`](https://github.com/backstage/backstage/blob/1e5e9fb9de9856a49e60fc70c38a4e4e94c69570/plugins/catalog-common/src/permissions.ts#L49). In those cases, a definitive decision is required because conditions can't be applied to an entity that does not exist yet.
+:::note Note
+
+Some catalog permissions do not have the `'catalog-entity'` resource type, such as [`catalogEntityCreatePermission`](https://github.com/backstage/backstage/blob/1e5e9fb9de9856a49e60fc70c38a4e4e94c69570/plugins/catalog-common/src/permissions.ts#L49). In those cases, a definitive decision is required because conditions can't be applied to an entity that does not exist yet.
+
+:::
diff --git a/docs/plugins/composability.md b/docs/plugins/composability.md
index 1a9c0babf9..a0e0e2d5e6 100644
--- a/docs/plugins/composability.md
+++ b/docs/plugins/composability.md
@@ -329,7 +329,7 @@ You can also use static configuration to bind routes, removing the need to make
changes to the app code. It does however mean that you won't get type safety
when binding routes and compile-time validation of the bindings. Static
configuration of route bindings is done under the `app.routes.bindings` key in
-`app-config.yaml`. It works the same way as [route bindings in the new frontend system](../frontend-system/architecture/07-routes.md#binding-external-route-references),
+`app-config.yaml`. It works the same way as [route bindings in the new frontend system](../frontend-system/architecture/36-routes.md#binding-external-route-references),
for example:
```yaml
@@ -342,7 +342,7 @@ app:
### Default Targets for External Route References
Following the `1.28` release of Backstage you can now define default targets for
-external route references. They work the same way as [default targets in the new frontend system](../frontend-system/architecture/07-routes.md#default-targets-for-external-route-references),
+external route references. They work the same way as [default targets in the new frontend system](../frontend-system/architecture/36-routes.md#default-targets-for-external-route-references),
for example:
```ts
diff --git a/docs/plugins/integrating-plugin-into-software-catalog.md b/docs/plugins/integrating-plugin-into-software-catalog.md
index 1ec3df69cf..d47be7f4c0 100644
--- a/docs/plugins/integrating-plugin-into-software-catalog.md
+++ b/docs/plugins/integrating-plugin-into-software-catalog.md
@@ -54,7 +54,7 @@ To begin, you will need to import your plugin in the entities page. Located at
your backstage app.
```tsx
-import { MyPluginEntityContent } from '@backstage/plugin-my-plugin;
+import { MyPluginEntityContent } from '@backstage/plugin-my-plugin';
```
To add your component to the Entity view, you will need to modify the
diff --git a/docs/plugins/integrating-search-into-plugins--old.md b/docs/plugins/integrating-search-into-plugins--old.md
new file mode 100644
index 0000000000..2729dd3d21
--- /dev/null
+++ b/docs/plugins/integrating-search-into-plugins--old.md
@@ -0,0 +1,421 @@
+---
+id: integrating-search-into-plugins--old
+title: Integrating Search into a plugin
+description: How to integrate Search into a Backstage plugin
+---
+
+:::info
+This documentation is written for the old backend which has been replaced by [the new backend system](../backend-system/index.md), being the default since Backstage [version 1.24](../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./integrating-search-into-plugins.md) instead. Otherwise, [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
+The Backstage Search Platform was designed to give plugin developers the APIs
+and interfaces needed to offer search experiences within their plugins, while
+abstracting away (and instead empowering application integrators to choose) the
+specific underlying search technologies.
+
+On this page, you'll find concepts and tutorials for leveraging the Backstage
+Search Platform in your plugin.
+
+## Providing data to the search platform
+
+### Create a collator
+
+> Knowing what a [collator](../features/search/concepts.md#collators) is will help you as you build it out.
+
+Imagine you have a plugin that is responsible for storing FAQ snippets in a database. You want other engineers to be able to easily find your questions and answers. So that means you want them to be indexed by the search platform. Lets say the FAQ snippets can be viewed at a URL like `backstage.example.biz/faq-snippets`.
+
+The search platform provides an interface (`DocumentCollatorFactory` from package `@backstage/plugin-search-common`) that allows you to do exactly that. It works by registering each of your entries as a "document" that later represents one search result each.
+
+> You can always look at a working example, e.g. [StackOverflowQuestionsCollatorFactory](https://github.com/backstage/backstage/blob/master/plugins/search-backend-module-stack-overflow-collator/src/collators/StackOverflowQuestionsCollatorFactory.ts), if you are unsure or want to follow best practices.
+
+#### 1. Install collator interface dependencies
+
+We will need the interface `DocumentCollatorFactory` from package `@backstage/plugin-search-common`, so let's add it to your plugins dependencies:
+
+```sh
+# navigate to the plugin directory
+# (for this tutorial our plugin lives in the backstage repo, if your plugin lives in a separate repo you need to clone that first)
+cd plugins/faq-snippets
+
+# Create a new branch using Git command-line
+git checkout -b tutorials/new-faq-snippets-collator
+
+# Install the package containing the interface
+yarn add @backstage/plugin-search-common
+```
+
+#### 2. Define your document type
+
+Before we can start generating documents from our FAQ entries, we first have to define a document type containing all necessary information we need to later display our entry as search result. The package `@backstage/plugin-search-common` we installed earlier contains a type `IndexableDocument` that we can extend.
+
+Create a new file `plugins/faq-snippets/src/search/collators/FaqSnippetDocument.ts` and paste the following below:
+
+```ts
+import { IndexableDocument } from '@backstage/plugin-search-common';
+
+export interface FaqSnippetDocument extends IndexableDocument {
+ answered_by: string;
+}
+```
+
+#### 3. Use Backstage App configuration
+
+Your new collator could benefit from using configuration directly from the Backstage `app-config.yaml` file which is located on the project's root folder:
+
+```yaml
+faq:
+ baseUrl: https://backstage.example.biz/faq-snippets
+```
+
+#### 4. Implement your collator
+
+Imagine your FAQs can be retrieved at the URL `https://backstage.example.biz/faq-snippets` with following JSON response format:
+
+```json
+{
+ "items": [
+ {
+ "id": 42,
+ "question": "What is The Answer to the Ultimate Question of Life, the Universe, and Everything?",
+ "answer": "Forty-two",
+ "user": "Deep Thought"
+ }
+ ]
+}
+```
+
+Below we provide an example implementation of how the FAQ collator factory could look like using our new document type, placed in the `plugins/faq-snippets/src/search/collators/FaqCollatorFactory.ts` file:
+
+```ts
+import fetch from 'cross-fetch';
+import { Logger } from 'winston';
+import { Config } from '@backstage/config';
+import { Readable } from 'stream';
+import { DocumentCollatorFactory } from '@backstage/plugin-search-common';
+
+import { FaqDocument } from './FaqDocument';
+
+export type FaqCollatorFactoryOptions = {
+ baseUrl?: string;
+ logger: Logger;
+};
+
+export class FaqCollatorFactory implements DocumentCollatorFactory {
+ private readonly baseUrl: string | undefined;
+ private readonly logger: Logger;
+ public readonly type: string = 'faq-snippets';
+
+ private constructor(options: FaqCollatorFactoryOptions) {
+ this.baseUrl = options.baseUrl;
+ this.logger = options.logger;
+ }
+
+ static fromConfig(config: Config, options: FaqCollatorFactoryOptions) {
+ const baseUrl =
+ config.getOptionalString('faq.baseUrl') ||
+ 'https://backstage.example.biz/faq-snippets';
+ return new FaqCollatorFactory({ ...options, baseUrl });
+ }
+
+ async getCollator() {
+ return Readable.from(this.execute());
+ }
+
+ async *execute(): AsyncGenerator {
+ if (!this.baseUrl) {
+ this.logger.error(`No faq.baseUrl configured in your app-config.yaml`);
+ return;
+ }
+
+ const response = await fetch(this.baseUrl);
+ const data = await response.json();
+
+ for (const faq of data.items) {
+ yield {
+ title: faq.question,
+ location: `/faq-snippets/${faq.id}`,
+ text: faq.answer,
+ answered_by: faq.user,
+ };
+ }
+ }
+}
+```
+
+#### 5. Test your collator
+
+To verify your implementation works as expected make sure to add tests for it. For your convenience, there is the [`TestPipeline`](https://backstage.io/docs/reference/plugin-search-backend-node.testpipeline) utility that emulates a pipeline into which you can integrate your custom collator.
+
+Look at [DefaultTechDocsCollatorFactory test](https://github.com/backstage/backstage/blob/de294ce5c410c9eb56da6870a1fab795268f60e3/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.test.ts), for an example.
+
+#### 6. Make your plugins collator discoverable for others
+
+If you want to make your collator discoverable for other adopters, add it to the list of [plugins integrated to search](https://backstage.io/docs/features/search/#plugins-integrated-with-backstage-search).
+
+## Building a search experience into your plugin
+
+While the core Search plugin offers components and extensions that empower app
+integrators to compose a global search experience, you may find that you want a
+narrower search experience just within your plugin. This could be as literal as
+an autocomplete-style search bar focused on documents provided by your plugin
+(for example, the [TechDocsSearch](https://github.com/backstage/backstage/blob/master/plugins/techdocs/src/search/components/TechDocsSearch.tsx)
+component), or as abstract as a widget that presents a list of links that
+are contextually related to something else on the page.
+
+### Search Experience Concepts
+
+Knowing these high-level concepts will help you as you craft your in-plugin
+search experience.
+
+- All search experiences must be wrapped in a ``, which
+ is provided by `@backstage/plugin-search-react`. This context keeps track
+ of state necessary to perform search queries and display any results. As
+ inputs to the query are updated (e.g. a `term` or `filter` values), the
+ updated query is executed and `results` are refreshed. Check out the
+ [SearchContextValue](https://backstage.io/docs/reference/plugin-search-react.searchcontextvalue)
+ for details.
+- The aforementioned state can be modified and/or consumed via the
+ `useSearch()` hook, also exported by `@backstage/plugin-search-react`.
+- For more literal search experiences, reusable components are available
+ to import and compose into a cohesive experience in your plugin (e.g.
+ ` ` or ` `). You can see all such
+ components in [Backstage's storybook](https://backstage.io/storybook/?path=/story/plugins-search-searchbar--default).
+
+### Search Experience Tutorials
+
+The following tutorials make use of packages and plugins that you may not yet
+have as dependencies for your plugin; be sure to add them before you use them!
+
+- [`@backstage/plugin-search-react`](https://www.npmjs.com/package/@backstage/plugin-search-react) - A
+ package containing components, hooks, and types that are shared across all
+ frontend plugins, including plugins like yours!
+- [`@backstage/plugin-search`](https://www.npmjs.com/package/@backstage/plugin-search) - The
+ main search plugin, used by app integrators to compose global search
+ experiences.
+- [`@backstage/core-components`](https://www.npmjs.com/package/@backstage/core-components) - A
+ package containing generic components useful for a variety of experiences
+ built in Backstage.
+
+#### Improved "404" page experience
+
+Imagine you have a plugin that allows users to manage _widgets_. Perhaps they
+can be viewed at a URL like `backstage.example.biz/widgets/{widgetName}`.
+At some point, a widget is renamed, and links to that widget's page from
+chat systems, wikis, or browser bookmarks become stale, resulting in errors or
+404s.
+
+What if instead of showing a broken page or the generic "looks like someone
+dropped the mic" 404 page, you showed a list of possibly related widgets?
+
+```javascript
+import { Link } from '@backstage/core-components';
+import { SearchResult } from '@backstage/plugin-search';
+import { SearchContextProvider } from '@backstage/plugin-search-react';
+
+export const Widget404Page = ({ widgetName }) => {
+ // Supplying this to runs a pre-filtered search with
+ // the given widgetName as the search term, focused on search result of type
+ // "widget" with no other filters.
+ const preFiltered = {
+ term: widgetName,
+ types: ['widget'],
+ filters: {},
+ };
+
+ return (
+
+ {/* The component allows us to iterate through results and
+ display them in whatever way fits best! */}
+
+ {({ results }) => (
+ {results.map(({ document }) => (
+
+ {document.title}
+
+ ))}
+ )}
+
+
+ );
+);
+```
+
+Not all search experiences require user input! As you can see, it's possible to
+leverage the Backstage Search Platform's frontend framework without necessarily
+giving users input controls.
+
+#### Simple search page
+
+Of course, it's also possible to provide a more fully featured search
+experience in your plugin. The simplest way is to leverage reusable components
+provided by the `@backstage/plugin-search` package, like this:
+
+```javascript
+import { useProfile } from '@internal/api';
+import {
+ Content,
+ ContentHeader,
+ PageWithHeader,
+} from '@backstage/core-components';
+import { SearchBar, SearchResult } from '@backstage/plugin-search';
+import { SearchContextProvider } from '@backstage/plugin-search-react';
+
+export const ManageMyWidgets = () => {
+ const { primaryTeam } = useProfile();
+ // In this example, note how we are pre-filtering results down to a specific
+ // owner field value (the currently logged-in user's team), but allowing the
+ // search term to be controlled by the user via the component.
+ const preFiltered = {
+ types: ['widget'],
+ term: '',
+ filters: {
+ owner: primaryTeam,
+ },
+ };
+
+ return (
+
+
+
+
+
+
+ {/* Render results here, just like above */}
+
+
+
+
+ );
+};
+```
+
+#### Custom search control surfaces
+
+If the reusable search components provided by `@backstage/plugin-search` aren't
+adequate, no problem! There's an API in place that you can use to author your
+own components to control the various parts of the search context.
+
+```javascript
+import { useSearch } from '@backstage/plugin-search-react';
+import ChipInput from 'material-ui-chip-input';
+
+export const CustomChipFilter = ({ name }) => {
+ const { filters, setFilters } = useSearch();
+ const chipValues = filters[name] || [];
+
+ // When a chip value is changed, update the filters value by calling the
+ // setFilters function from the search context.
+ const handleChipChange = (chip, index) => {
+ // There may be filters set for other fields. Be sure to maintain them.
+ setFilters(prevState => {
+ const { [name]: filter = [], ...others } = prevState;
+
+ if (index === undefined) {
+ filter.push(chip);
+ } else {
+ filter.splice(index, 1);
+ }
+
+ return { ...others, [name]: filter };
+ });
+ };
+
+ return (
+
+ );
+};
+```
+
+Check out the [SearchContextValue type](https://github.com/backstage/backstage/blob/master/plugins/search-react/src/context/SearchContext.tsx)
+for more details on what methods and values are available for manipulating and
+reading the search context.
+
+If you produce something generic and reusable, consider contributing your
+component upstream so that all users of the Backstage Search Platform can
+benefit. Issues and pull requests welcome.
+
+#### Custom search results
+
+Search results throughout Backstage are rendered as lists so that list items can easily be customized; although a [default result list item](https://backstage.io/storybook/?path=/story/plugins-search-defaultresultlistitem--default) is available, plugins are in the best position to provide custom result list items that surface relevant information only known to the plugin.
+
+The example below imagines `YourCustomSearchResult` as a type of search result that contains associated `tags` which could be rendered as chips below the title/text.
+
+```tsx
+import { Link } from '@backstage/core-components';
+import { useAnalytics } from '@backstage/core-plugin-api';
+import { ResultHighlight } from '@backstage/plugin-search-common';
+import { HighlightedSearchResultText } from '@backstage/plugin-search-react';
+
+type CustomSearchResultListItemProps = {
+ result: YourCustomSearchResult;
+ rank?: number;
+ highlight?: ResultHighlight;
+};
+
+export const CustomSearchResultListItem = (
+ props: CustomSearchResultListItemProps,
+) => {
+ const { title, text, location, tags } = props.result;
+
+ const analytics = useAnalytics();
+ const handleClick = () => {
+ analytics.captureEvent('discover', title, {
+ attributes: { to: location },
+ value: props.rank,
+ });
+ };
+
+ return (
+
+
+
+
+ ) : (
+ title
+ )
+ }
+ secondary={
+ highlight?.fields?.text ? (
+
+ ) : (
+ text
+ )
+ }
+ />
+ {tags &&
+ tags.map((tag: string) => (
+
+ ))}
+
+
+
+
+ );
+};
+```
+
+The optional use of the `` component makes it possible to highlight relevant parts of the result based on the user's search query.
+
+**Note on Analytics**: In order for app integrators to track and improve search experiences across Backstage, it's important for them to understand when and what users search for, as well as what they click on after searching. When providing a custom result component, it's your responsibility as a plugin developer to instrument it according to search analytics conventions. In particular:
+
+- You must use the `analytics.captureEvent` method, from the `useAnalytics()` hook (detailed [plugin analytics docs are here](./analytics.md)).
+- You must ensure that the action of the event, representing a click on a search result item, is `discover`, and the subject is the `title` of the clicked result. In addition, the `to` attribute should be set to the result's `location`, and the `value` of the event must be set to the `rank` (passed in as a prop).
+- You must ensure that the aforementioned `captureEvent` method is called when a user clicks the link; you should further ensure that the `noTrack` prop is added to the link (which disables default link click tracking, in favor of this custom instrumentation).
+
+For other examples and inspiration on custom result list items, check out the [``](https://github.com/backstage/backstage/blob/c981e83/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx) or [``](https://github.com/backstage/backstage/blob/c981e83/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx) components.
diff --git a/docs/plugins/integrating-search-into-plugins.md b/docs/plugins/integrating-search-into-plugins.md
index 28c8b410e3..62b3942537 100644
--- a/docs/plugins/integrating-search-into-plugins.md
+++ b/docs/plugins/integrating-search-into-plugins.md
@@ -4,6 +4,10 @@ title: Integrating Search into a plugin
description: How to integrate Search into a Backstage plugin
---
+:::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). If you are still on the old backend system, you may want to read [its own article](./integrating-search-into-plugins--old.md) instead, and [consider migrating](../backend-system/building-backends/08-migrating.md)!
+:::
+
The Backstage Search Platform was designed to give plugin developers the APIs
and interfaces needed to offer search experiences within their plugins, while
abstracting away (and instead empowering application integrators to choose) the
@@ -24,34 +28,25 @@ The search platform provides an interface (`DocumentCollatorFactory` from packag
> You can always look at a working example, e.g. [StackOverflowQuestionsCollatorFactory](https://github.com/backstage/backstage/blob/master/plugins/search-backend-module-stack-overflow-collator/src/collators/StackOverflowQuestionsCollatorFactory.ts), if you are unsure or want to follow best practices.
-#### 1. Install collator interface dependencies
+#### 1. Create a collator module package
-We will need the interface `DocumentCollatorFactory` from package `@backstage/plugin-search-common`, so let's add it to your plugins dependencies:
+In order to add an FAQ collator to the Backstage index registry we have to create a [plugin module](https://backstage.io/docs/backend-system/building-plugins-and-modules/index#modules), and the best way to do this is to create it in a separate package, e.g., `plugins/search-backend-module-faq-snippets-collator`, using the `yarn new` command:
+
+1. Access your Backstage project root directory and run `yarn new`;
+2. When asked about what do you want to create, please select `backend-module` and hit enter;
+3. Input `search` as the plugin ID and `faq-snippets-collator` as the module ID;
+4. A `search-backend-module-faq-snippets-collator` folder should have been created in your project's "plugins" directory.
+
+#### 2. Install the collator dependencies
+
+We will use some libraries in the module, so let's add them to your plugin module dependencies:
```sh
-# navigate to the plugin directory
-# (for this tutorial our plugin lives in the backstage repo, if your plugin lives in a separate repo you need to clone that first)
-cd plugins/faq-snippets
-
# Create a new branch using Git command-line
git checkout -b tutorials/new-faq-snippets-collator
# Install the package containing the interface
-yarn add @backstage/plugin-search-common
-```
-
-#### 2. Define your document type
-
-Before we can start generating documents from our FAQ entries, we first have to define a document type containing all necessary information we need to later display our entry as search result. The package `@backstage/plugin-search-common` we installed earlier contains a type `IndexableDocument` that we can extend.
-
-Create a new file `plugins/faq-snippets/src/search/collators/FaqSnippetDocument.ts` and paste the following below:
-
-```ts
-import { IndexableDocument } from '@backstage/plugin-search-common';
-
-export interface FaqSnippetDocument extends IndexableDocument {
- answered_by: string;
-}
+yarn workspace @internal/backstage-plugin-search-backend-module-faq-snippets-collator add node-fetch @backstage/plugin-search-common @backstage/plugin-search-backend-node
```
#### 3. Use Backstage App configuration
@@ -63,7 +58,35 @@ faq:
baseUrl: https://backstage.example.biz/faq-snippets
```
-#### 4. Implement your collator
+It is optional to define a schedule for the collator to run, or else it defaults to the value in the collator factory code (See [5. Implement the collator factory](#5-implement-the-collator-factory)):
+
+```yaml
+faq:
+ baseUrl: https://backstage.example.biz/faq-snippets
+ /* highlight-add-start */
+ schedule:
+ # 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 }
+ /* highlight-add-end */
+```
+
+#### 4. Define the collator document type
+
+Before we can start generating documents from our FAQ entries, we first have to define a document type containing all necessary information we need to later display our entry as search result. The package `@backstage/plugin-search-common` we installed earlier contains a type `IndexableDocument` that we can extend.
+
+Create a new file `plugins/search-backend-module-faq-snippets-collator/src/types.ts` and paste the following below:
+
+```ts
+import { IndexableDocument } from '@backstage/plugin-search-common';
+
+export interface FaqSnippetDocument extends IndexableDocument {
+ answered_by: string;
+}
+```
+
+#### 5. Implement the collator factory
Imagine your FAQs can be retrieved at the URL `https://backstage.example.biz/faq-snippets` with following JSON response format:
@@ -80,52 +103,50 @@ 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/faq-snippets/src/search/collators/FaqCollatorFactory.ts` file:
+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 'cross-fetch';
-import { Logger } from 'winston';
-import { Config } from '@backstage/config';
+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 { FaqDocument } from './FaqDocument';
+import { FaqSnippetDocument } from './types';
-export type FaqCollatorFactoryOptions = {
- baseUrl?: string;
- logger: Logger;
-};
+const DEFAULT_BASE_URL = 'https://backstage.example.biz/faq-snippets';
-export class FaqCollatorFactory implements DocumentCollatorFactory {
- private readonly baseUrl: string | undefined;
- private readonly logger: Logger;
+export class FaqSnippetsCollatorFactory implements DocumentCollatorFactory {
public readonly type: string = 'faq-snippets';
+ private readonly baseUrl: string;
+ private readonly logger: LoggerService;
- private constructor(options: FaqCollatorFactoryOptions) {
+ private constructor(options: { logger: LoggerService; baseUrl: string }) {
this.baseUrl = options.baseUrl;
this.logger = options.logger;
}
- static fromConfig(config: Config, options: FaqCollatorFactoryOptions) {
- const baseUrl =
- config.getOptionalString('faq.baseUrl') ||
- 'https://backstage.example.biz/faq-snippets';
- return new FaqCollatorFactory({ ...options, baseUrl });
+ static fromConfig(
+ config: RootConfigService,
+ options: {
+ logger: LoggerService;
+ },
+ ) {
+ const baseUrl = config.getOptionalString('faq.baseUrl') ?? DEFAULT_BASE_URL;
+ return new FaqSnippetsCollatorFactory({ ...options, baseUrl });
}
async getCollator() {
return Readable.from(this.execute());
}
- async *execute(): AsyncGenerator {
- if (!this.baseUrl) {
- this.logger.error(`No faq.baseUrl configured in your app-config.yaml`);
- return;
- }
-
+ async *execute(): AsyncGenerator {
+ this.logger.info(`Fetching faq snippets from ${this.baseUrl}`);
const response = await fetch(this.baseUrl);
const data = await response.json();
-
for (const faq of data.items) {
yield {
title: faq.question,
@@ -138,13 +159,109 @@ export class FaqCollatorFactory implements DocumentCollatorFactory {
}
```
-#### 5. Test your collator
+#### 6. Implement the collator plugin module
+
+Now we have to connect the search backend plugin with our FAQ Snippets collator factory, so replace the `module.ts` file with the content below:
+
+```ts title='plugins/search-backend-module-faq-snippets-collator/src/module.ts'
+import {
+ coreServices,
+ createBackendModule,
+ readSchedulerServiceTaskScheduleDefinitionFromConfig,
+} from '@backstage/backend-plugin-api';
+import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha';
+import { FaqSnippetsCollatorFactory } from './factory';
+
+export const searchFaqSnippetsCollatorModule = createBackendModule({
+ pluginId: 'search',
+ moduleId: 'faq-snippets-collator',
+ register(env) {
+ env.registerInit({
+ deps: {
+ config: coreServices.rootConfig,
+ logger: coreServices.logger,
+ scheduler: coreServices.scheduler,
+ indexRegistry: searchIndexRegistryExtensionPoint,
+ },
+ async init({ config, logger, scheduler, indexRegistry }) {
+ const defaultSchedule = {
+ frequency: { minutes: 10 },
+ timeout: { minutes: 15 },
+ initialDelay: { seconds: 3 },
+ };
+
+ const schedule = config.has('faq.schedule')
+ ? readSchedulerServiceTaskScheduleDefinitionFromConfig(
+ config.getConfig('faq.schedule'),
+ )
+ : defaultSchedule;
+
+ indexRegistry.addCollator({
+ schedule: scheduler.createScheduledTaskRunner(schedule),
+ factory: FaqSnippetsCollatorFactory.fromConfig(config, { logger }),
+ });
+ },
+ });
+ },
+});
+```
+
+In the fragment above, the module is registered, and when the Backstage backend initializes it, it adds the FAQ Snippets collator to the search index registry. Now let's export the module as default from the `index.ts` file:
+
+```ts title='plugins/search-backend-module-faq-snippets-collator/src/index.ts'
+export { searchFaqSnippetsCollatorModule as default } from './module';
+```
+
+#### 7. Install the collator module
+
+The newly created module should be added to the backend package dependencies as follows:
+
+```sh
+yarn --cwd packages/backend add @internal/backstage-plugin-search-backend-module-faq-snippets-collator
+```
+
+After that, install the module on your Backstage backend instance:
+
+```ts title='packages/backend/src/index.ts'
+import { createBackend } from '@backstage/backend-defaults';
+//...
+const backend = createBackend();
+// Installing the search backend plugin
+backend.add(import('@backstage/plugin-search-backend/alpha'));
+// Installing the newly created faq snippets collator module
+backend.add(
+ import(
+ '@internal/backstage-plugin-search-backend-module-faq-snippets-collator'
+ ),
+);
+//...
+backend.start();
+```
+
+#### 8. Testing the collator code
To verify your implementation works as expected make sure to add tests for it. For your convenience, there is the [`TestPipeline`](https://backstage.io/docs/reference/plugin-search-backend-node.testpipeline) utility that emulates a pipeline into which you can integrate your custom collator.
Look at [DefaultTechDocsCollatorFactory test](https://github.com/backstage/backstage/blob/de294ce5c410c9eb56da6870a1fab795268f60e3/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.test.ts), for an example.
-#### 6. Make your plugins collator discoverable for others
+You can also check out the documentation on [how to test Backstage plugin modules](../backend-system/building-plugins-and-modules/02-testing.md).
+
+#### 9. Running the collator locally
+
+Run `yarn dev` in the root folder of your Backstage project and look for logs like these:
+
+```sh
+[backend]: YYYY-MM-DDTHH:MM:SS.000Z search info Task worker starting: search_index_faq_snippets, {"version":2,"cadence":"PT10M","initialDelayDuration":"PT3S","timeoutAfterDuration":"PT15M"} task=search_index_faq_snippets
+[backend]: YYYY-MM-DDTHH:MM:SS.000Z search info Collating documents for faq-snippets via FaqSnippetsCollatorFactory documentType=faq-snippets
+[backend]: YYYY-MM-DDTHH:MM:SS.000Z search info Fetching faq snippets from https://backstage.example.biz/faq-snippets
+[backend]: YYYY-MM-DDTHH:MM:SS.000Z search info Collating documents for faq-snippets succeeded documentType=faq-snippets
+```
+
+It means that the collator task was started and completed successfully. Visit http://localhost:3000, log in, select the 'All' tab, and type in one of your snippets title in the search box.
+
+Results should appear for snippets.
+
+#### 10. Make your plugins collator discoverable for others
If you want to make your collator discoverable for other adopters, add it to the list of [plugins integrated to search](https://backstage.io/docs/features/search/#plugins-integrated-with-backstage-search).
diff --git a/docs/plugins/internationalization.md b/docs/plugins/internationalization.md
index 0f48e35a25..ba3f694d0c 100644
--- a/docs/plugins/internationalization.md
+++ b/docs/plugins/internationalization.md
@@ -151,32 +151,52 @@ export const myPluginTranslationRef = createTranslationRef({
Step 1: Create translation resources
+You should separate different translations to their own files and import them in the main file:
+
```ts
// packages/app/src/translations/userSettings.ts
import { createTranslationResource } from '@backstage/core-plugin-api/alpha';
import { userSettingsTranslationRef } from '@backstage/plugin-user-settings/alpha';
-export const userSettingsMessages = createTranslationResource({
+export const userSettingsTranslations = createTranslationResource({
ref: userSettingsTranslationRef,
translations: {
- zh: () =>
- Promise.resolve({
- default: {
- 'languageToggle.title': '语言',
- 'languageToggle.select': '选择{{language}}',
- 'languageToggle.description': '切换语言',
- 'themeToggle.title': '主题',
- 'themeToggle.description': '切换主题',
- 'themeToggle.select': '选择{{theme}}',
- 'themeToggle.selectAuto': '选择自动主题',
- 'themeToggle.names.auto': '自动',
- 'themeToggle.names.dark': '暗黑',
- 'themeToggle.names.light': '明亮',
- },
- }),
+ zh: () => import('./userSettings-zh'),
},
});
+
+// packages/app/src/translations/userSettings-zh.ts
+import { userSettingsTranslationRef } from '@backstage/plugin-user-settings/alpha';
+
+const zh = createTranslationMessages({
+ ref: userSettingsTranslationRef,
+ full: false, // False means that this is a partial translation
+ messages: {
+ 'languageToggle.title': '语言',
+ 'languageToggle.select': '选择{{language}}',
+ },
+});
+
+export default zh;
+```
+
+It's also possible to export the list of messages directly:
+
+```ts
+// packages/app/src/translations/userSettings-zh.ts
+export default {
+ 'languageToggle.title': '语言',
+ 'languageToggle.select': '选择{{language}}',
+ 'languageToggle.description': '切换语言',
+ 'themeToggle.title': '主题',
+ 'themeToggle.description': '切换主题',
+ 'themeToggle.select': '选择{{theme}}',
+ 'themeToggle.selectAuto': '选择自动主题',
+ 'themeToggle.names.auto': '自动',
+ 'themeToggle.names.dark': '暗黑',
+ 'themeToggle.names.light': '明亮',
+};
```
You should change `zh` under the translations object to your local language.
@@ -186,12 +206,12 @@ Step 2: Config translations in `packages/app/src/App.tsx`
In an app you can both override the default messages, as well as register translations for additional languages:
```diff
-+ import { userSettingsMessages } from './translations/userSettings';
++ import { userSettingsTranslations } from './translations/userSettings';
const app = createApp({
+ __experimentalTranslations: {
+ availableLanguages: ['en', 'zh'],
-+ resources: [userSettingsMessages],
++ resources: [userSettingsTranslations],
+ },
})
```
diff --git a/docs/plugins/new-backend-system.md b/docs/plugins/new-backend-system.md
index e8a2ca1b19..12525b9f95 100644
--- a/docs/plugins/new-backend-system.md
+++ b/docs/plugins/new-backend-system.md
@@ -101,7 +101,7 @@ export const examplePlugin = createBackendPlugin({
The plugin can then be installed in the backend using the returned plugin factory function:
```ts
-backend.add(examplePlugin());
+backend.add(examplePlugin);
```
If we wanted our plugin to accept options as well, we'd accept the options as the second parameter of the register method:
@@ -266,7 +266,7 @@ class GoogleCloudLogger implements LoggerService {
const backend = createBackend();
// supplies additional or replacement services to the backend
-backend.add(GoogleCloudLogger.factory());
+backend.add(GoogleCloudLogger.factory);
```
## Testing
diff --git a/docs/plugins/observability.md b/docs/plugins/observability.md
index e13653706f..324e6751d4 100644
--- a/docs/plugins/observability.md
+++ b/docs/plugins/observability.md
@@ -17,7 +17,12 @@ See how to install Datadog Events in your app
### New Backend
-The backend supplies a central logging service, [`rootLogger`](../backend-system/core-services/root-logger.md), as well as a plugin based logger, [`logger`](../backend-system/core-services/logger.md) from `coreServices`. To add additional granularity to your logs, you can create children from the plugin based logger, using the `.child()` method and provide is with JSON data. For example, if you wanted to log items for a specific span in your plugin, you could do
+The backend supplies a central logging service,
+[`rootLogger`](../backend-system/core-services/root-logger.md), as well as a plugin
+based logger, [`logger`](../backend-system/core-services/logger.md) from `coreServices`.
+To add additional granularity to your logs, you can create children from the plugin
+based logger, using the `.child()` method and provide is with JSON data. For example,
+if you wanted to log items for a specific span in your plugin, you could do
```ts
export function createRouter({ logger }) {
@@ -37,7 +42,9 @@ export function createRouter({ logger }) {
}
```
-You can also add additional metadata to all logs for your Backstage instance by overriding the `rootLogger` implementation, you can see an example in [the `logger` docs](../backend-system/core-services/logger.md#configuring-the-service).
+You can also add additional metadata to all logs for your Backstage instance by
+overriding the `rootLogger` implementation, you can see an example in
+[the `rootLogger` docs](../backend-system/core-services/root-logger.md#configuring-the-service).
### Old Backend
@@ -63,9 +70,19 @@ An example log line could look as follows:
## Health Checks
-### New Backend
+### New Backend (post 1.29.0)
-The new backend is moving towards health checks being plugin-based, as such there is no current plugin for providing a health check route. You can add this yourself easily though,
+The new backend provides a `RootHealthService` which implements
+`/.backstage/health/v1/readiness` and `/.backstage/health/v1/liveness` endpoints
+to provide health checks for the entire backend instance.
+
+You can read more about this new service and how to customize it in the
+[Root Health Service documentation](../backend-system/core-services/root-health.md).
+
+### New Backend (pre 1.29.0)
+
+The new backend is moving towards health checks being plugin-based, as such there is no
+current plugin for providing a health check route. You can add this yourself easily though,
```ts
import {
diff --git a/docs/plugins/url-reader.md b/docs/plugins/url-reader.md
deleted file mode 100644
index 9fab0482bb..0000000000
--- a/docs/plugins/url-reader.md
+++ /dev/null
@@ -1,265 +0,0 @@
----
-id: url-reader
-title: URL Reader
-sidebar_label: URL Reader
-# prettier-ignore
-description: URL Reader is a backend core API responsible for reading files from external locations.
----
-
-## Concept
-
-Some of the core plugins of Backstage have to read files from an external
-location. [Software Catalog](../features/software-catalog/index.md) has to read
-the [`catalog-info.yaml`](../features/software-catalog/descriptor-format.md)
-entity descriptor files to register and track an entity.
-[Software Templates](../features/software-templates/index.md) have to download
-the template skeleton files before creating a new component.
-[TechDocs](../features/techdocs/README.md) has to download the markdown source
-files before generating a documentation site.
-
-Since, the requirement for reading files is so essential for Backstage plugins,
-the
-[`coreServices.urlReader`](../reference/backend-plugin-api.coreservices.urlreader.md)
-package provides a dedicated API for reading from such URL based remote
-locations like GitHub, GitLab, Bitbucket, Google Cloud Storage, etc. This is
-commonly referred to as "URL Reader". It takes care of making authenticated
-requests to the remote host so that private files can be read securely. If users
-have [GitHub App based authentication](../integrations/github/github-apps.md) set up, URL Reader even
-refreshes the token, to avoid reaching the GitHub API rate limit.
-
-As a result, plugin authors do not have to worry about any of these problems
-when trying to read files.
-
-## Interface
-
-When the Backstage backend starts, a new instance of URL Reader is created. You
-can see this in the index file of your Backstage backend
-i.e.`packages/backend/src/index.ts`.
-[Example](https://github.com/backstage/backstage/blob/ebbe91dbe79038a61d35cf6ed2d96e0e0d5a15f3/packages/backend/src/index.ts#L57)
-
-```ts
-// File: packages/backend/src/index.ts
-
-import { UrlReaders } from '@backstage/backend-common';
-
-function makeCreateEnv(config: Config) {
- // ....
- const reader = UrlReaders.default({ logger: root, config });
- //
-}
-```
-
-This instance contains all the default URL Reader providers
-in the backend-defaults package including GitHub, GitLab, Bitbucket, Azure, Google
-GCS. As the need arises, more URL Readers are being written to support different
-providers.
-
-The generic interface of a URL Reader instance looks like this.
-
-```ts
-export type UrlReader = {
- /* Used to read a single file and return its content. */
- readUrl(url: string, options?: ReadUrlOptions): Promise;
- /* Used to read a file tree and download as a directory. */
- readTree(url: string, options?: ReadTreeOptions): Promise;
- /* Used to search a file in a tree. */
- search(url: string, options?: SearchOptions): Promise;
-};
-```
-
-## Using a URL Reader inside a plugin
-
-The `reader` instance is available in the backend plugin environment and passed
-on to all the backend plugins. You can see an
-[example](https://github.com/backstage/backstage/blob/b0be185369ebaad22255b7cdf18535d1d4ffd0e7/packages/backend/src/plugins/techdocs.ts#L31).
-When any of the methods on this instance is called with a URL, URL Reader
-extracts the host for that URL (e.g. `github.com`, `ghe.mycompany.com`, etc.).
-Using the
-[`@backstage/integration`](https://github.com/backstage/backstage/tree/master/packages/integration)
-package, it looks inside the
-[`integrations:`](https://github.com/backstage/backstage/blob/d5c83bb889b8142e343ebc4e4c0b90a02d1c1a3d/app-config.yaml#L134-L158)
-config of the `app-config.yaml` to find out how to work with the host based on
-the configs provided like authentication token, API base URL, etc.
-
-Make sure your plugin-specific backend file at
-`packages/backend/src/plugins/.ts` is forwarding the `reader` instance
-passed on as the `PluginEnvironment` to the actual plugin's `createRouter`
-function. See how this is done in
-[Catalog](https://github.com/backstage/backstage/blob/d5c83bb889b8142e343ebc4e4c0b90a02d1c1a3d/packages/backend/src/plugins/catalog.ts#L25-L27)
-and
-[TechDocs](https://github.com/backstage/backstage/blob/d5c83bb889b8142e343ebc4e4c0b90a02d1c1a3d/packages/backend/src/plugins/techdocs.ts#L31-L36)
-backend plugins.
-
-Once the reader instance is available inside the plugin, one of its methods can
-directly be used with a URL. Some example usages -
-
-- [`readUrl`](https://github.com/backstage/backstage/blob/a7607b5/plugins/catalog-backend/src/modules/codeowners/lib/read.ts#L24-L33) -
- Catalog using the `readUrl` method to read the CODEOWNERS file in a repository.
-- [`readTree`](https://github.com/backstage/backstage/blob/84a8788/plugins/techdocs-node/src/helpers.ts#L146-L167) -
- TechDocs using the `readTree` method to download markdown files in order to
- generate the documentation site.
-- [`readTree`](https://github.com/backstage/backstage/blob/cb4f0e4/plugins/techdocs-node/src/stages/prepare/url.ts#L51-L73) -
- TechDocs using `NotModifiedError` to maintain cache and speed up and limit the
- number of requests.
-- [`search`](https://github.com/backstage/backstage/blob/d5c83bb889b8142e343ebc4e4c0b90a02d1c1a3d/plugins/catalog-backend/src/ingestion/processors/UrlReaderProcessor.ts#L88-L108) -
- Catalog using the `search` method to find files for a location URL containing
- a glob pattern.
-
-Note that URL Readers which target git-based version control systems may, under
-the hood, leverage the ability to create tar archives based on a specific git
-commit-ish. A consequence of this is that files and directories configured with
-[the `export-ignore` attribute](https://git-scm.com/docs/gitattributes#_creating_an_archive)
-via `.gitattributes` will not be visible to the URL reader when using the
-`readTree` or `search` methods.
-
-Be aware of this limitation and ensure that end-users of your plugin are also
-aware via, for example, documentation.
-
-## Writing a new URL Reader
-
-If the available URL Readers are not sufficient for your use case and you want
-to add a new URL Reader for any other provider, you are most welcome to
-contribute one!
-
-Feel free to use the
-[GitHub URL Reader](https://github.com/backstage/backstage/blob/d5c83bb889b8142e343ebc4e4c0b90a02d1c1a3d/packages/backend-common/src/reading/GithubUrlReader.ts)
-as a source of inspiration.
-
-### 1. Add an integration
-
-The provider for your new URL Reader can also be called an "integration" in
-Backstage. The `integrations:` section of your Backstage `app-config.yaml`
-config file is supposed to be the place where a Backstage integrator defines the
-host URL for the integration, authentication details and other integration
-related configurations.
-
-The `@backstage/integration` package is where most of the integration specific
-code lives, so that it is shareable across Backstage. Functions like "read the
-integrations config and process it", "construct headers for authenticated
-requests to the host" or "convert a plain file URL into its API URL for
-downloading the file" would live in this package.
-
-### 2. Create the URL Reader
-
-Create a new class which implements the
-[`UrlReader` type](https://github.com/backstage/backstage/blob/d5c83bb889b8142e343ebc4e4c0b90a02d1c1a3d/packages/backend-common/src/reading/types.ts#L21-L28)
-inside `@backstage/backend-common`. Create and export a static `factory` method
-which reads the integration config and returns a map of host URLs the new reader
-should be used for. See the
-[GitHub URL Reader](https://github.com/backstage/backstage/blob/d5c83bb889b8142e343ebc4e4c0b90a02d1c1a3d/packages/backend-common/src/reading/GithubUrlReader.ts#L50-L63)
-for example.
-
-### 3. Implement the methods
-
-We want to make sure all URL Readers behave in the same way. Hence if possible,
-all the methods of the `UrlReader` interface should be implemented. However it
-is okay to start by implementing just one of them and create issues for the
-remaining.
-
-#### `readUrl`
-
-`readUrl` method expects a user-friendly URL, something which can be copied from
-the browser naturally when a person is browsing the provider in their browser.
-
-- ✅ Valid URL :
- `https://github.com/backstage/backstage/blob/master/ADOPTERS.md`
-- ❌ Not a valid URL :
- `https://raw.githubusercontent.com/backstage/backstage/master/ADOPTERS.md`
-- ❌ Not a valid URL : `https://github.com/backstage/backstage/ADOPTERS.md`
-
-Upon receiving the URL, `readUrl` converts the user-friendly URL into an API URL
-which can be used to request the provider's API.
-
-`readUrl` then makes an authenticated request to the provider API and returns the response containing the file's contents and ETag(if the provider supports it).
-
-#### `readTree`
-
-`readTree` method also expects user-friendly URLs similar to `read` but the URL
-should point to a tree (could be the root of a repository or even a
-sub-directory).
-
-- ✅ Valid URL : `https://github.com/backstage/backstage`
-- ✅ Valid URL : `https://github.com/backstage/backstage/blob/master`
-- ✅ Valid URL : `https://github.com/backstage/backstage/blob/master/docs`
-
-Using the provider's API documentation, find out an API endpoint which can be
-used to download either a zip or a tarball. You can download the entire tree
-(e.g. a repository) and filter out in case the user is expecting only a
-sub-tree. But some APIs are smart enough to accept a path and return only a
-sub-tree in the downloaded archive.
-
-#### search
-
-`search` method expects a glob pattern of a URL and returns a list of files
-matching the query.
-
-- ✅ Valid URL :
- `https://github.com/backstage/backstage/blob/master/**/catalog-info.yaml`
-- ✅ Valid URL : `https://github.com/backstage/backstage/blob/master/**/*.md`
-- ✅ Valid URL :
- `https://github.com/backstage/backstage/blob/master/*/package.json`
-- ✅ Valid URL : `https://github.com/backstage/backstage/blob/master/READM`
-
-The core logic of `readTree` can be used here to extract all the files inside
-the tree and return the files matching the pattern in the `url`.
-
-### 4. Add to available URL Readers
-
-There are two ways to make your new URL Reader available for use.
-
-You can choose to make it open source, by updating the
-[`default` factory](https://github.com/backstage/backstage/blob/d5c83bb889b8142e343ebc4e4c0b90a02d1c1a3d/packages/backend-common/src/reading/UrlReaders.ts#L62-L81)
-method of URL Readers.
-
-But for something internal which you don't want to make open source, you can
-update your `packages/backend/src/index.ts` file and update how the `reader`
-instance is created.
-
-```ts
-// File: packages/backend/src/index.ts
-const reader = UrlReaders.default({
- logger: root,
- config,
- // This is where your internal URL Readers would go.
- factories: [myCustomReader.factory],
-});
-```
-
-### 5. Caching
-
-All of the methods above support an ETag based caching. If the method is called
-without an `etag`, the response contains an ETag of the resource (should ideally
-forward the ETag returned by the provider). If the method is called with an
-`etag`, it first compares the ETag and returns a `NotModifiedError` in case the
-resource has not been modified. This approach is very similar to the actual
-[`ETag`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) and
-[`If-None-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)
-HTTP headers.
-
-### 6. Debugging
-
-When debugging one of the URL Readers, you can straightforward use the
-[`reader` instance created](https://github.com/backstage/backstage/blob/ebbe91dbe79038a61d35cf6ed2d96e0e0d5a15f3/packages/backend/src/index.ts#L57)
-when the backend starts and call one of the methods with your debugging URL.
-
-```ts
-// File: packages/backend/src/index.ts
-
-async function main() {
- // ...
- const createEnv = makeCreateEnv(config);
-
- const testReader = createEnv('test-url-reader').reader;
- const response = await testReader.readUrl(
- 'https://github.com/backstage/backstage/blob/master/catalog-info.yaml',
- );
- console.log((await response.buffer()).toString());
- // ...
-}
-```
-
-This will be run every time you restart the backend. Note that after any change
-in the URL Reader code, you need to stop the backend and restart, since the
-`reader` instance is memoized and does not update on hot module reloading. Also,
-there are a lot of unit tests written for the URL Readers, which you can make
-use of.
diff --git a/docs/publishing.md b/docs/publishing.md
index 50d78ebf09..740292949f 100644
--- a/docs/publishing.md
+++ b/docs/publishing.md
@@ -51,7 +51,7 @@ Additional steps for the main line release
- Mention any security fixes
- Create Release Notes PR
- Add the release note file as [`/docs/releases/vx.y.0.md`](./releases)
- - Add an entry to [`/microsite/sidebar.json`](https://github.com/backstage/backstage/blob/master/microsite/sidebars.json) for the release note
+ - Add an entry to [`/microsite/sidebar.js`](https://github.com/backstage/backstage/blob/master/microsite/sidebars.js) for the release note
- Update the navigation bar item in [`/microsite/docusaurus.config.ts`](https://github.com/backstage/backstage/blob/master/microsite/docusaurus.config.ts) to point to the new release note
- Finally copy the content, without the metadata header, into the description of the [`Version Packages` Pull Request](https://github.com/backstage/backstage/pulls?q=is%3Aopen+is%3Apr+in%3Atitle+%22Version+Packages)
diff --git a/docs/releases/v1.30.0-changelog.md b/docs/releases/v1.30.0-changelog.md
new file mode 100644
index 0000000000..0af531f483
--- /dev/null
+++ b/docs/releases/v1.30.0-changelog.md
@@ -0,0 +1,3093 @@
+# Release v1.30.0
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.30.0](https://backstage.github.io/upgrade-helper/?to=1.30.0)
+
+## @backstage/backend-app-api@0.9.0
+
+### Minor Changes
+
+- da4fde5: **BREAKING**: Removed several deprecated service factories. These can instead be imported from `@backstage/backend-defaults` package.
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+- 389f5a4: Remove deprecated `urlReaderServiceFactory`, please import from `@backstage/backend-defaults/urlReader` instead.
+
+### Patch Changes
+
+- 8b13183: Added support for the latest version of `BackendFeature`s from `@backstage/backend-plugin-api`, including feature loaders.
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 7c5f3b0: Update the `ServiceRegister` implementation to enable registering multiple service implementations for a given service ref.
+- 80a0737: Added configuration for the `packages` options to config schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-common@0.24.0
+
+### Minor Changes
+
+- 389f5a4: **BREAKING**: Removed the following `Url Reader` deprecated exports:
+
+ - UrlReader: Use `UrlReaderService` from `@backstage/backend-plugin-api` instead;
+ - AzureUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - BitbucketUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - BitbucketCloudUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - BitbucketServerUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - GithubUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - GitlabUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - GerritUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - GiteaUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - HarnessUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - AwsS3UrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - FetchUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
+ - UrlReaders: Import from `@backstage/backend-defaults/urlReader` instead;
+ - UrlReadersOptions: Import from `@backstage/backend-defaults/urlReader` instead;
+ - UrlReaderPredicateTuple: Import from `@backstage/backend-defaults/urlReader` instead;
+ - FromReadableArrayOptions: Import from `@backstage/backend-defaults/urlReader` instead;
+ - ReaderFactory: Import from `@backstage/backend-defaults/urlReader` instead;
+ - ReadUrlOptions:Use `UrlReaderServiceReadUrlOptions` from `@backstage/backend-plugin-api` instead;
+ - ReadUrlResponse: Use `UrlReaderServiceReadUrlResponse` from `@backstage/backend-plugin-api` instead;
+ - ReadUrlResponseFactory: Import from `@backstage/backend-defaults/urlReader` instead;
+ - ReadUrlResponseFactoryFromStreamOptions: Import from `@backstage/backend-defaults/urlReader` instead;
+ - ReadTreeOptions: Use `UrlReaderServiceReadTreeOptions` from `@backstage/backend-plugin-api` instead;
+ - ReadTreeResponse: Use `UrlReaderServiceReadTreeResponse` from `@backstage/backend-plugin-api` instead;
+ - ReadTreeResponseFile: Use `UrlReaderServiceReadTreeResponseFile` from `@backstage/backend-plugin-api` instead;
+ - ReadTreeResponseDirOptions: Use `UrlReaderServiceReadTreeResponseDirOptions` from `@backstage/backend-plugin-api` instead;
+ - ReadTreeResponseFactory: Import from `@backstage/backend-defaults/urlReader` instead;
+ - ReadTreeResponseFactoryOptions: Import from `@backstage/backend-defaults/urlReader` instead;
+ - SearchOptions: Use `UrlReaderServiceSearchOptions` from `@backstage/backend-plugin-api` instead;
+ - SearchResponse: Use `UrlReaderServiceSearchResponse` from `@backstage/backend-plugin-api` instead;
+ - SearchResponseFile: Use `UrlReaderServiceSearchResponseFile` from `@backstage/backend-plugin-api` instead.
+
+### Patch Changes
+
+- ba8571e: Setup user agent header for AWS sdk clients, this enables users to better track API calls made from Backstage to AWS APIs through things like CloudTrail.
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+
+- 6795e33: This package is marked as `deprecated` and will be removed in a near future, please follow the deprecated instructions for the exports you still use.
+
+- 7e13b7a: The remaining exports in the package have now been deprecated:
+
+ - `cacheToPluginCacheManager`
+ - `createLegacyAuthAdapters`
+ - `LegacyCreateRouter`
+ - `legacyPlugin`
+ - `loggerToWinstonLogger`
+ - `makeLegacyPlugin`
+
+ Users of these export should fully [migrate to the new backend system](https://backstage.io/docs/backend-system/building-backends/migrating).
+
+- ddde5fe: Internal type refactor.
+
+- b63d378: export `createConfigSecretEnumerator` from `@backstage/backend-common` instead of `@backstage/backend-app-api`.
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/integration@1.14.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+
+## @backstage/backend-dynamic-feature-service@0.3.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- b63d378: Update internal imports
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/backend-app-api@0.9.0
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-backend@1.25.0
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/config-loader@1.9.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.23
+ - @backstage/plugin-events-backend@0.3.10
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/backend-plugin-api@0.8.0
+
+### Minor Changes
+
+- 389f5a4: **BREAKING** Deleted the following deprecated `UrlReader` exports
+
+ - ReadUrlOptions: Use `UrlReaderServiceReadUrlOptions` instead;
+ - ReadUrlResponse: Use `UrlReaderServiceReadUrlResponse` instead;
+ - ReadTreeOptions: Use `UrlReaderServiceReadTreeOptions` instead;
+ - ReadTreeResponse: Use `UrlReaderServiceReadTreeResponse` instead;
+ - ReadTreeResponseFile: Use `UrlReaderServiceReadTreeResponseFile` instead;
+ - ReadTreeResponseDirOptions: Use `UrlReaderServiceReadTreeResponseDirOptions` instead;
+ - SearchOptions: Use `UrlReaderServiceSearchOptions` instead;
+ - SearchResponse: Use `UrlReaderServiceSearchResponse` instead;
+ - SearchResponseFile: Use `UrlReaderServiceSearchResponseFile` instead.
+
+- 7c5f3b0: The `createServiceRef` function now accepts a new boolean `multiple` option. The `multiple` option defaults to `false` and when set to `true`, it enables that multiple implementation are installed for the created service ref.
+
+ We're looking for ways to make it possible to augment services without the need to replace the entire service.
+
+ Typical example of that being the ability to install support for additional targets for the `UrlReader` service without replacing the service itself. This achieves that by allowing us to define services that can have multiple simultaneous implementation, allowing the `UrlReader` implementation to depend on such a service to collect all possible implementation of support for external targets:
+
+ ```diff
+ // @backstage/backend-defaults
+
+ + export const urlReaderFactoriesServiceRef = createServiceRef({
+ + id: 'core.urlReader.factories',
+ + scope: 'plugin',
+ + multiton: true,
+ + });
+
+ ...
+
+ export const urlReaderServiceFactory = createServiceFactory({
+ service: coreServices.urlReader,
+ deps: {
+ config: coreServices.rootConfig,
+ logger: coreServices.logger,
+ + factories: urlReaderFactoriesServiceRef,
+ },
+ - async factory({ config, logger }) {
+ + async factory({ config, logger, factories }) {
+ return UrlReaders.default({
+ config,
+ logger,
+ + factories,
+ });
+ },
+ });
+ ```
+
+ With that, you can then add more custom `UrlReader` factories by installing more implementations of the `urlReaderFactoriesServiceRef` in your backend instance. Something like:
+
+ ```ts
+ // packages/backend/index.ts
+ import { createServiceFactory } from '@backstage/backend-plugin-api';
+ import { urlReaderFactoriesServiceRef } from '@backstage/backend-defaults';
+ ...
+
+ backend.add(createServiceFactory({
+ service: urlReaderFactoriesServiceRef,
+ deps: {},
+ async factory() {
+ return CustomUrlReader.factory;
+ },
+ }));
+
+ ...
+
+ ```
+
+- c99c620: **BREAKING** Removed the following deprecated types:
+
+ - `ServiceRefConfig` use `ServiceRefOptions`
+ - `RootServiceFactoryConfig` use `RootServiceFactoryOptions`
+ - `PluginServiceFactoryConfig` use `PluginServiceFactoryOptions`
+
+### Patch Changes
+
+- 6061061: Added `createBackendFeatureLoader`, which can be used to create an installable backend feature that can in turn load in additional backend features in a dynamic way.
+
+- ba9abf4: The `SchedulerService` now allows tasks with `frequency: { trigger: 'manual' }`. This means that the task will not be scheduled, but rather run only when manually triggered with `SchedulerService.triggerTask`.
+
+- 8b13183: Added `createBackendFeatureLoader`, which can be used to programmatically select and install backend features.
+
+ A feature loader can return an list of features to be installed, for example in the form on an `Array` or other for of iterable, which allows for the loader to be defined as a generator function. Both synchronous and asynchronous loaders are supported.
+
+ Additionally, a loader can depend on services in its implementation, with the restriction that it can only depend on root-scoped services, and it may not override services that have already been instantiated.
+
+ ```ts
+ const searchLoader = createBackendFeatureLoader({
+ deps: {
+ config: coreServices.rootConfig,
+ },
+ *loader({ config }) {
+ // Example of a custom config flag to enable search
+ if (config.getOptionalString('customFeatureToggle.search')) {
+ yield import('@backstage/plugin-search-backend/alpha');
+ yield import('@backstage/plugin-search-backend-module-catalog/alpha');
+ yield import('@backstage/plugin-search-backend-module-explore/alpha');
+ yield import('@backstage/plugin-search-backend-module-techdocs/alpha');
+ }
+ },
+ });
+ ```
+
+- ddde5fe: Fixed a type issue where plugin and modules depending on multiton services would not receive the correct type.
+
+- f011d1b: fix typo in `getPluginRequestToken` comments
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-tasks@0.6.0
+
+### Minor Changes
+
+- fc24d9e: This package is deprecated and will be removed in a near future, follow the instructions below to stop using it:
+
+ - `TaskScheduler`: Please migrate to the new backend system, and depend on `coreServices.scheduler` from `@backstage/backend-plugin-api` instead, or use `DefaultSchedulerService` from \`@backstage/backend-defaults;
+ - `TaskRunner`: Please import `SchedulerServiceTaskRunner` from `@backstage/backend-plugin-api` instead;
+ - `TaskFunction`: Please import `SchedulerServiceTaskFunction` from `@backstage/backend-plugin-api` instead;
+ - `TaskDescriptor`: Please import `SchedulerServiceTaskDescriptor` from `@backstage/backend-plugin-api` instead;
+ - `TaskInvocationDefinition`: Please import `SchedulerServiceTaskInvocationDefinition` from `@backstage/backend-plugin-api` instead;
+ - `TaskScheduleDefinition`: Please import `SchedulerServiceTaskFunction` from `@backstage/backend-plugin-api` instead;
+ - `TaskScheduleDefinitionConfig`: Please import `SchedulerServiceTaskScheduleDefinitionConfig` from `@backstage/backend-plugin-api` instead;
+ - `PluginTaskScheduler`: Please use `SchedulerService` from `@backstage/backend-plugin-api` instead (most likely via `coreServices.scheduler`);
+ - `readTaskScheduleDefinitionFromConfig`: Please import `readSchedulerServiceTaskScheduleDefinitionFromConfig` from `@backstage/backend-plugin-api` instead;
+ - `HumanDuration`: Import `TypesHumanDuration` from `@backstage/types` instead.
+
+### Patch Changes
+
+- ba9abf4: The `PluginTaskScheduler` now allows tasks with `frequency: { trigger: 'manual' }`. This means that the task will not be scheduled, but rather run only when manually triggered with `PluginTaskScheduler.triggerTask`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-test-utils@0.5.0
+
+### Minor Changes
+
+- 861f162: **BREAKING**: Removed these deprecated helpers:
+
+ - `setupRequestMockHandlers` is removed; use `registerMswTestHooks` instead.
+ - `MockDirectoryOptions` is removed; use `CreateMockDirectoryOptions` instead.
+
+ Stopped exporting the deprecated and internal `isDockerDisabledForTests` helper.
+
+ Removed `get` method from `ServiceFactoryTester` which is replaced by `getSubject`
+
+### Patch Changes
+
+- 8b13183: Internal updates to support latest version of `BackendFeauture`s from `@backstage/backend-plugin-api`.
+- b63d378: Update internal imports
+- 7c5f3b0: Update the `ServiceFactoryTester` to be able to test services that enables multi implementation installation.
+- 4e79d19: The default services for `startTestBackend` and `ServiceFactoryTester` now includes the Root Health Service.
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/backend-app-api@0.9.0
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/catalog-model@1.6.0
+
+### Minor Changes
+
+- 34fa803: Introduce an optional spec.type attribute on the Domain and System entity kinds
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/cli@0.27.0
+
+### Minor Changes
+
+- 32a38e1: **BREAKING**: The lockfile (`yarn.lock`) dependency analysis and mutations have been removed from several commands.
+
+ The `versions:bump` command will no longer attempt to bump and deduplicate dependencies by modifying the lockfile, it will only update `package.json` files.
+
+ The `versions:check` command has been removed, since its only purpose was verification and mutation of the lockfile. We recommend using the `yarn dedupe` command instead, or the `yarn-deduplicate` package if you're using Yarn classic.
+
+ The check that was built into the `package start` command has been removed, it will no longer warn about lockfile mismatches.
+
+ The packages in the Backstage ecosystem handle package duplications much better now than when these CLI features were first introduced, so the need for these features has diminished. By removing them, we drastically reduce the integration between the Backstage CLI and Yarn, making it much easier to add support for other package managers in the future.
+
+### Patch Changes
+
+- 7eb08a6: Add frontend-dynamic-container role to eslint config factory
+- b2d97fd: Fixing loading of additional config files with new `ConfigSources`
+- fbc7819: Use ES2022 in CLI bundler
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 6d898d8: Switched the `process` polyfill to use `require.resolve` for greater compatability.
+- e53074f: Updated default backend plugin to use `RootConfigService` instead of `Config`. This also removes the dependency on `@backstage/config` as it's no longer used.
+- ee2b0e5: The experimental module federation build now has the ability to force the use of development versions of `react` and `react-dom` by setting the `FORCE_REACT_DEVELOPMENT` flag.
+- 239dffc: Remove usage of deprecated functionality from @backstage/config-loader
+- e6e7d86: Switched the target from `'ES2022'` to `'es2022'` for better compatibility with older versions of `swc`.
+- 2ced236: Updated dependency `@module-federation/enhanced` to `0.3.1`
+- 0eedec3: Add support for dynamic plugins via the EXPERIMENTAL_MODULE_FEDERATION environment variable when running `yarn start`.
+- adabb40: New command now supports setting package license
+- dc4fb4f: Fix for `repo build --all` not properly detecting the experimental public entry point.
+- Updated dependencies
+ - @backstage/config-loader@1.9.0
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/eslint-plugin@0.1.8
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/config-loader@1.9.0
+
+### Minor Changes
+
+- 274428f: Add configuration key to File and Remote `ConfigSource`s that enables configuration of parsing logic. Previously limited to yaml, these `ConfigSource`s now allow for a multitude of parsing options (e.g. JSON).
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 1edd6c2: The `env` option of `ConfigSources.default` now correctly allows undefined members.
+- 493feac: Add boolean `allowMissingDefaultConfig` option to `ConfigSources.default` and
+ `ConfigSources.defaultForTargets`, which results in omission of a ConfigSource
+ for the default app-config.yaml configuration file if it's not present.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-app-api@0.8.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 7777b5f: Support icon overriding with the new `IconBundleBlueprint` API.
+- 72754db: Updated usage of `useRouteRef`, which can now always return `undefined`.
+- 3be9aeb: Added support for v2 extensions, which declare their inputs and outputs without using a data map.
+- fe1fbb2: Migrating usages of the deprecated `createExtension` `v1` format to the newer `v2` format, and old `create*Extension` extension creators to blueprints.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-app-api@1.14.2
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-plugin-api@0.7.0
+
+### Minor Changes
+
+- 72754db: **BREAKING**: All types of route refs are always considered optional by `useRouteRef`, which means the caller must always handle a potential `undefined` return value. Related to this change, the `optional` option from `createExternalRouteRef` has been removed, since it is no longer necessary.
+
+ This is released as an immediate breaking change as we expect the usage of the new route refs to be extremely low or zero, since plugins that support the new system will still use route refs and `useRouteRef` from `@backstage/core-plugin-api` in combination with `convertLegacyRouteRef` from `@backstage/core-compat-api`.
+
+### Patch Changes
+
+- 6f72c2b: Fixing issue with extension blueprints `inputs` merging.
+
+- 210d066: Added support for using the `params` in other properties of the `createExtensionBlueprint` options by providing a callback.
+
+- 9b356dc: Renamed `createPlugin` to `createFrontendPlugin`. The old symbol is still exported but deprecated.
+
+- a376559: Correct the `TConfig` type of data references to only contain config
+
+- 4e53ad6: Introduce a new way to encapsulate extension kinds that replaces the extension creator pattern with `createExtensionBlueprint`
+
+ This allows the creation of extension instances with the following pattern:
+
+ ```tsx
+ // create the extension blueprint which is used to create instances
+ const EntityCardBlueprint = createExtensionBlueprint({
+ kind: 'entity-card',
+ attachTo: { id: 'test', input: 'default' },
+ output: [coreExtensionData.reactElement],
+ factory(params: { text: string }) {
+ return [coreExtensionData.reactElement({params.text} )];
+ },
+ });
+
+ // create an instance of the extension blueprint with params
+ const testExtension = EntityCardBlueprint.make({
+ name: 'foo',
+ params: {
+ text: 'Hello World',
+ },
+ });
+ ```
+
+- 9b89b82: The `ExtensionBoundary` now by default infers whether it's routable from whether it outputs a route path.
+
+- e493020: Deprecated `inputs` and `configSchema` options for `createComponentExtenion`, these will be removed in a future release
+
+- 7777b5f: Added a new `IconBundleBlueprint` that lets you create icon bundle extensions that can be installed in an App in order to override or add new app icons.
+
+ ```tsx
+ import { IconBundleBlueprint } from '@backstage/frontend-plugin-api';
+
+ const exampleIconBundle = IconBundleBlueprint.make({
+ name: 'example-bundle',
+ params: {
+ icons: {
+ user: MyOwnUserIcon,
+ },
+ },
+ });
+ ```
+
+- 99abb6b: Support overriding of plugin extensions using the new `plugin.withOverrides` method.
+
+ ```tsx
+ import homePlugin from '@backstage/plugin-home';
+
+ export default homePlugin.withOverrides({
+ extensions: [
+ homePage.getExtension('page:home').override({
+ *factory(originalFactory) {
+ yield* originalFactory();
+ yield coreExtensionData.reactElement(My custom home page );
+ },
+ }),
+ ],
+ });
+ ```
+
+- 813cac4: Add an `ExtensionBoundary.lazy` function to create properly wrapped lazy-loading enabled elements, suitable for use with `coreExtensionData.reactElement`. The page blueprint now automatically leverages this.
+
+- a65cfc8: Add support for accessing extensions definitions provided by a plugin via `plugin.getExtension(...)`. For this to work the extensions must be defined using the v2 format, typically using an extension blueprint.
+
+- 3be9aeb: Extensions have been changed to be declared with an array of inputs and outputs, rather than a map of named data refs. This change was made to reduce confusion around the role of the input and output names, as well as enable more powerful APIs for overriding extensions.
+
+ An extension that was previously declared like this:
+
+ ```tsx
+ const exampleExtension = createExtension({
+ name: 'example',
+ inputs: {
+ items: createExtensionInput({
+ element: coreExtensionData.reactElement,
+ }),
+ },
+ output: {
+ element: coreExtensionData.reactElement,
+ },
+ factory({ inputs }) {
+ return {
+ element: (
+
+ Example
+ {inputs.items.map(item => {
+ return
{item.output.element}
;
+ })}
+
+ ),
+ };
+ },
+ });
+ ```
+
+ Should be migrated to the following:
+
+ ```tsx
+ const exampleExtension = createExtension({
+ name: 'example',
+ inputs: {
+ items: createExtensionInput([coreExtensionData.reactElement]),
+ },
+ output: [coreExtensionData.reactElement],
+ factory({ inputs }) {
+ return [
+ coreExtensionData.reactElement(
+
+ Example
+ {inputs.items.map(item => {
+ return
{item.get(coreExtensionData.reactElement)}
;
+ })}
+
,
+ ),
+ ];
+ },
+ });
+ ```
+
+- 34f1b2a: Support merging of `inputs` in extension blueprints, but stop merging `output`. In addition, the original factory in extension blueprints now returns a data container that both provides access to the returned data, but can also be forwarded as output.
+
+- 3fb421d: Added support to be able to define `zod` config schema in Blueprints, with built in schema merging from the Blueprint and the extension instances.
+
+- 2d21599: Added support for being able to override extension definitions.
+
+ ```tsx
+ const TestCard = EntityCardBlueprint.make({
+ ...
+ });
+
+ TestCard.override({
+ // override attachment points
+ attachTo: { id: 'something-else', input: 'overridden' },
+ // extend the config schema
+ config: {
+ schema: {
+ newConfig: z => z.string().optional(),
+ }
+ },
+ // override factory
+ *factory(originalFactory, { inputs, config }){
+ const originalOutput = originalFactory();
+
+ yield coreExentsionData.reactElement(
+
+ {originalOutput.get(coreExentsionData.reactElement)}
+
+ );
+ }
+ });
+
+ ```
+
+- 31bfc44: Extension data references can now be defined in a way that encapsulates the ID string in the type, in addition to the data type itself. The old way of creating extension data references is deprecated and will be removed in a future release.
+
+ For example, the following code:
+
+ ```ts
+ export const myExtension =
+ createExtensionDataRef('my-plugin.my-data');
+ ```
+
+ Should be updated to the following:
+
+ ```ts
+ export const myExtension = createExtensionDataRef().with({
+ id: 'my-plugin.my-data',
+ });
+ ```
+
+- 6349099: Added config input type to the extensions
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/integration@1.14.0
+
+### Minor Changes
+
+- 78c1329: Updated `GitlabUrlReader.readUrl` and `GitlabUrlReader.readTree` to accept a user-provided token, supporting both bearer and private tokens.
+
+### Patch Changes
+
+- c591670: Updated functions for `getHarnessEditContentsUrl`, `getHarnessFileContentsUrl`, `getHarnessArchiveUrl`, `getHarnessLatestCommitUrl` and `parseHarnessUrl` to handle account and org level urls
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.2.0
+
+### Minor Changes
+
+- 75d026a: Support for Cloudflare Custom Headers and Custom Cookie Auth Name
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-node@0.5.0
+
+### Minor Changes
+
+- 579afd0: **BREAKING**: Sign-in resolvers configured via `.signIn.resolvers` now take precedence over sign-in resolvers passed to `signInResolver` option of `createOAuthProviderFactory`. This effectively makes sign-in resolvers passed via the `signInResolver` the default one, which you can then override through configuration.
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog@1.22.0
+
+### Minor Changes
+
+- 6925dcb: Introduces the HasSubdomainsCard component that displays the subdomains of a given domain
+
+### Patch Changes
+
+- 496b8a9: Export `RelatedEntitiesCard` presets to be reused.
+- 604a504: The entity relation cards available for the new frontend system via `/alpha` now have more accurate and granular default filters.
+- 7bd27e1: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead.
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- 6582799: Add `tableOptions` to all tables and additionally `title` to API tables.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-search-react@1.7.14
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-catalog-backend@1.25.0
+
+### Minor Changes
+
+- 163ba08: Deprecated `RouterOptions`, `CatalogBuilder`, and `CatalogEnvironment`. Please make sure to upgrade to the new backend system.
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 776eb56: `ProcessorOutputCollector` returns an error when receiving deferred entities that have an invalid `metadata.annotations` format.
+
+ This allows to return an error on an actual validation issue instead of reporting that the location annotations are missing afterwards, which is misleading for the users.
+
+- 389f5a4: Update deprecated url-reader-related imports.
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+
+- a629fb2: Added setAllowedLocationTypes while introducing a new extension point called CatalogLocationsExtensionPoint
+
+- 51240ee: Preserve default `allowedLocationTypes` when `setAllowedLocationTypes()` of `CatalogLocationsExtensionPoint` is not called.
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/plugin-search-backend-module-catalog@0.2.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/backend-openapi-utils@0.1.16
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- ba8571e: Setup user agent header for AWS sdk clients, this enables users to better track API calls made from Backstage to AWS APIs through things like CloudTrail.
+- 9342ac8: Removed unused dependency
+- 389f5a4: Update deprecated url-reader-related imports.
+- 90a7340: `AwsOrganizationCloudAccountProcessor` configuration field `roleArn` is deprecated in favor of new field `accountId`
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-catalog-backend-module-azure@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 9342ac8: Removed unused dependency
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.3.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/backend-openapi-utils@0.1.16
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 9342ac8: Removed unused dependency
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-gcp@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 9342ac8: Removed unused dependency
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 9342ac8: Removed unused dependency
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-github@0.7.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+
+- c1eb809: Fix GitHub `repository` event support.
+
+ - `$.repository.organization` is only provided for `push` events. Switched to `$.organization.login` instead.
+ - `$.repository.url` is not always returning the expected and required value. Use `$.repository.html_url` instead.
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-backend@1.25.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-catalog-backend-module-github-org@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 9342ac8: Removed unused dependency
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-backend-module-github@0.7.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.4.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- c7b14ed: Adds new optional `excludeRepos` configuration option to the Gitlab catalog provider.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.1.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-backend-module-gitlab@0.4.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-backend@1.25.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-catalog-backend-module-ldap@0.8.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 9342ac8: Removed unused dependency
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 58dff4d: Added option to ingest groups based on their group membership in Azure Entra ID
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 9342ac8: Removed unused dependency
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.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.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- ba8571e: Setup user agent header for AWS sdk clients, this enables users to better track API calls made from Backstage to AWS APIs through things like CloudTrail.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-notifications@0.3.0
+
+### Minor Changes
+
+- 0410fc9: By default, set notification as read when opening snackbar or web notification link
+
+### Patch Changes
+
+- 80b84f7: Fixed issue with notification reloading on page change
+- b58e452: Broadcast notifications are now decorated with an icon.
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-react@0.0.4
+
+## @backstage/plugin-notifications-backend-module-email@0.2.0
+
+### Minor Changes
+
+- def53a7: **BREAKING** Following `NotificationTemplateRenderer` methods now return a Promise and **must** be awaited: `getSubject`, `getText` and `getHtml`.
+
+ Required changes and example usage:
+
+ ```diff
+ import { notificationsEmailTemplateExtensionPoint } from '@backstage/plugin-notifications-backend-module-email';
+ import { Notification } from '@backstage/plugin-notifications-common';
+ +import { getNotificationSubject, getNotificationTextContent, getNotificationHtmlContent } from 'my-notification-processing-library`
+ export const notificationsModuleEmailDecorator = createBackendModule({
+ pluginId: 'notifications',
+ moduleId: 'email.templates',
+ register(reg) {
+ reg.registerInit({
+ deps: {
+ emailTemplates: notificationsEmailTemplateExtensionPoint,
+ },
+ async init({ emailTemplates }) {
+ emailTemplates.setTemplateRenderer({
+ - getSubject(notification) {
+ + async getSubject(notification) {
+ - return `New notification from ${notification.source}`;
+ + const subject = await getNotificationSubject(notification);
+ + return `New notification from ${subject}`;
+ },
+ - getText(notification) {
+ + async getText(notification) {
+ - return notification.content;
+ + const text = await getNotificationTextContent(notification);
+ + return text;
+ },
+ - getHtml(notification) {
+ + async getHtml(notification) {
+ - return `${notification.content}
`;
+ + const html = await getNotificationHtmlContent(notification);
+ + return html;
+ },
+ });
+ },
+ });
+ },
+ });
+ ```
+
+### Patch Changes
+
+- d55b8e3: Avoid sending broadcast emails as a fallback in case the entity-typed notification user can not be resolved.
+- cdb630d: Add support for stream transport for debugging purposes
+- 83faf24: Notification email processor supports allowing or denying specific email addresses from receiving notifications
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-notifications-node@0.2.4
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-scaffolder@1.24.0
+
+### Minor Changes
+
+- 1552c33: Changed the way to display entities in `MyGroupsPicker` to use `entityPresentationApi` and make it consistent across scaffolder pickers
+- 3fca643: Added field extension `RepoBranchPicker` that supports autocompletion for Bitbucket
+
+### Patch Changes
+
+- 47ed51b: Add an extra bit of height to the EntityPicker dropdown to make it clear there are more options to select from, and to remove the scroll bar when there is less than 10 options
+- 46e5e55: Change scaffolder widgets to use `TextField` component for more flexibility in theme overrides.
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- 2ae63cd: add i18n for scaffolder
+- d18f4eb: Fix undefined in the title of Scaffolder Runs on the page load
+- 896a22d: Fix helper text margin for scaffolder EntityNamePicker and EntityTagsPicker when using outlined text field
+- bbd9f56: Cleaned up codebase of RepoUrlPicker
+- b8600fe: Fix issue with `RepoUrlPicker` not refreshing the credentials for a different host
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-scaffolder-react@1.11.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-backend@1.24.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+- dcd6a79: Added OpenTelemetry support to Scaffolder metrics
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- c544f81: Add support for status filtering in scaffolder tasks endpoint
+- b63d378: Update internal imports
+- ef87e06: Fix scaffolder action `catalog:write` to write to directories that don't already exist
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/plugin-scaffolder-backend-module-github@0.4.1
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.1.13
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-scaffolder-backend-module-azure@0.1.15
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-react@1.11.0
+
+### Minor Changes
+
+- 8839381: Add scaffolder option to display object items in separate rows on review page
+
+### Patch Changes
+
+- 072c00c: Fixed a bug in `DefaultTableOutputs` where output elements overlapped on smaller screen sizes
+- 46e5e55: Change scaffolder widgets to use `TextField` component for more flexibility in theme overrides.
+- d0e95a7: Add ability to customise form fields in the UI by exposing `uiSchema` and `formContext` in `FormProps`
+- 4670f06: support `ajv-errors` for scaffolder validation to allow for customizing the error messages
+- 04759f2: Fix null check in `isJsonObject` utility function for scaffolder review state component
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-search-backend-module-catalog@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-search-backend-module-explore@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 93fc1a0: Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.4`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-techdocs@0.2.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-techdocs-node@1.12.9
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-search-backend-node@1.3.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- 3123c16: Fix package metadata
+- 7c5f3b0: Explicit declare if the service ref accepts `single` or `multiple` implementations.
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-techdocs-common@0.1.0
+
+### Minor Changes
+
+- 4698e1f: Initial release of the techdocs-common package.
+
+## @backstage/app-defaults@1.5.10
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/backend-defaults@0.4.2
+
+### Patch Changes
+
+- 0d16b52: Add access restrictions to the JWKS external access method config schema
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 3b429fb: Added deprecation warning to urge users to perform the auth service migration or implement their own token manager service.
+ See for more information.
+- 7681b17: update the `morgan` middleware to use a custom format to prevent PII from being logged
+- 4e79d19: The `createHealthRouter` utility that allows you to create a health check router is now exported via `@backstage/backend-defaults/rootHttpRouter`.
+- ba9abf4: The `SchedulerService` now allows tasks with `frequency: { trigger: 'manual' }`. This means that the task will not be scheduled, but rather run only when manually triggered with `SchedulerService.triggerTask`.
+- 78c1329: Updated `GitlabUrlReader.readUrl` and `GitlabUrlReader.readTree` to accept a user-provided token, supporting both bearer and private tokens.
+- 8e967da: Fixed the routing of the new health check service, the health endpoints should now properly be available at `/.backstage/health/v1/readiness` and `/.backstage/health/v1/liveness`.
+- 7c5f3b0: Update the `UrlReader` service to depends on multiple instances of `UrlReaderFactoryProvider` service.
+- 81f930a: use formatted query to prevent chance of SQL-injection
+- 1d5f298: Avoid excessive numbers of error listeners on cache clients
+- Updated dependencies
+ - @backstage/backend-app-api@0.9.0
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/integration@1.14.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/backend-dev-utils@0.1.5
+
+### Patch Changes
+
+- 3a35172: Fix `EventEmitter` memory leak in the development utilities
+
+## @backstage/backend-openapi-utils@0.1.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/errors@1.2.4
+
+## @backstage/catalog-client@1.6.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/core-app-api@1.14.2
+
+### Patch Changes
+
+- 9a46a81: The request to delete the session cookie when running the app in protected mode is now done with a plain `fetch` rather than `FetchApi`. This fixes a bug where the app would immediately try to sign-in again when removing the cookie during logout.
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/core-compat-api@0.2.8
+
+### Patch Changes
+
+- 72754db: Updated usage of `useRouteRef`, which can now always return `undefined`.
+- fe1fbb2: Migrating usages of the deprecated `createExtension` `v1` format to the newer `v2` format, and old `create*Extension` extension creators to blueprints.
+- 16cf96c: Both `compatWrapper` and `convertLegacyRouteRef` now support converting from the new system to the old.
+- 519b8e0: Added new utilities for converting legacy plugins and extensions to the new system. The `convertLegacyPlugin` option will convert an existing plugin to the new system, although you need to supply extensions for the plugin yourself. To help out with this, there is also a new `convertLegacyPageExtension` which converts an existing page extension to the new system.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/core-components@0.14.10
+
+### Patch Changes
+
+- 678971a: Move the `Link` component to the `RoutedTabs` instead of the `HeaderTabs` component
+- 13a9c63: Corrected the documentation for the GCP IAP auth module and updated the configuration to follow proxy configuration conventions by ignoring authEnv
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/create-app@0.5.18
+
+### Patch Changes
+
+- c0a705d: Added the Kubernetes plugin to `create-app`
+- d7a0aa3: Bumped create-app version.
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 6c1081c: Updated dockerfile and `app-config.production.yaml` to make it easier to get started with example data
+- bfeba46: Included permission config and enabled it out of the box
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/dev-utils@1.0.37
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/core-app-api@1.14.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+
+## @backstage/frontend-test-utils@0.1.12
+
+### Patch Changes
+
+- 8209449: Added new APIs for testing extensions
+
+- 72754db: Updated usage of `useRouteRef`, which can now always return `undefined`.
+
+- 3be9aeb: Added support for v2 extensions, which declare their inputs and outputs without using a data map.
+
+- fe1fbb2: Migrating usages of the deprecated `createExtension` `v1` format to the newer `v2` format, and old `create*Extension` extension creators to blueprints.
+
+- 2d21599: Added support for being able to override extension definitions.
+
+ ```tsx
+ const TestCard = EntityCardBlueprint.make({
+ ...
+ });
+
+ TestCard.override({
+ // override attachment points
+ attachTo: { id: 'something-else', input: 'overridden' },
+ // extend the config schema
+ config: {
+ schema: {
+ newConfig: z => z.string().optional(),
+ }
+ },
+ // override factory
+ *factory(originalFactory, { inputs, config }){
+ const originalOutput = originalFactory();
+
+ yield coreExentsionData.reactElement(
+
+ {originalOutput.get(coreExentsionData.reactElement)}
+
+ );
+ }
+ });
+
+ ```
+
+- c00e1a0: Deprecate the `.render` method of the `createExtensionTester` in favour of using `renderInTestApp` directly.
+
+ ```tsx
+ import {
+ renderInTestApp,
+ createExtensionTester,
+ } from '@backstage/frontend-test-utils';
+
+ const tester = createExtensionTester(extension);
+
+ const { getByTestId } = renderInTestApp(tester.reactElement());
+
+ // or if you're not using `coreExtensionData.reactElement` as the output ref
+ const { getByTestId } = renderInTestApp(tester.get(myComponentRef));
+ ```
+
+- 264e10f: Deprecate existing `ExtensionCreators` in favour of their new Blueprint counterparts.
+
+- 264e10f: Refactor `.make` method on Blueprints into two different methods, `.make` and `.makeWithOverrides`.
+
+ When using `createExtensionBlueprint` you can define parameters for the factory function, if you wish to take advantage of these parameters you should use `.make` when creating an extension instance of a Blueprint. If you wish to override more things other than the standard `attachTo`, `name`, `namespace` then you should use `.makeWithOverrides` instead.
+
+ `.make` is reserved for simple creation of extension instances from Blueprints using higher level parameters, whereas `.makeWithOverrides` is lower level and you have more control over the final extension.
+
+- 6349099: Added config input type to the extensions
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/frontend-app-api@0.8.0
+ - @backstage/config@1.2.0
+ - @backstage/test-utils@1.5.10
+ - @backstage/types@1.1.1
+
+## @backstage/integration-react@1.1.30
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/repo-tools@0.9.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.17
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/plugin-techdocs-node@1.12.9
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+
+## @backstage/test-utils@1.5.10
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/core-app-api@1.14.2
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-api-docs@0.11.8
+
+### Patch Changes
+
+- 770ba02: `ConsumingComponentsCard` and `ProvidingComponentsCard` will now optionally accept `columns` to override which table columns are displayed
+- fe1fbb2: Migrating usages of the deprecated `createExtension` `v1` format to the newer `v2` format, and old `create*Extension` extension creators to blueprints.
+- ebfeb40: Added `resolvers` prop to `AsyncApiDefinitionWidget`. This allows to override the default http/https resolvers, for example to add authentication to requests to internal schema registries.
+- 4b6d2cb: Updated dependency `@graphiql/react` to `^0.23.0`.
+- 6582799: Add `tableOptions` to all tables and additionally `title` to API tables.
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-app-backend@0.3.72
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 6bd6fda: Deprecate `createRouter` and its options in favour of the new backend system.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.23
+
+## @backstage/plugin-app-node@0.1.23
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/config-loader@1.9.0
+
+## @backstage/plugin-app-visualizer@0.1.9
+
+### Patch Changes
+
+- 72754db: Updated usage of `useRouteRef`, which can now always return `undefined`.
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- e493020: Fixing issue with the visualizer crashing when clicking on the detailed view because of `routeRef` parameters
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-auth-backend@0.22.10
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- cc9a7a5: Deprecated `createRouter` and its router options in favour of the new backend system.
+- Updated dependencies
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.2.0
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.1.6
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.1.18
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.1.4
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.1.15
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.18
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.20
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.20
+ - @backstage/plugin-auth-backend-module-google-provider@0.1.20
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-okta-provider@0.0.16
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.1.6
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.1.16
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.2.4
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.1.15
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+
+- 4ea354f: Added a `signer` configuration option to validate against the token claims. We strongly recommend that you set this value (typically on the format `arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/my-load-balancer/1234567890123456`) to ensure that the auth provider can safely check the authenticity of any incoming tokens.
+
+ Example:
+
+ ```diff
+ auth:
+ providers:
+ awsalb:
+ # this is the URL of the IdP you configured
+ issuer: 'https://example.okta.com/oauth2/default'
+ # this is the ARN of your ALB instance
+ + signer: 'arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/my-load-balancer/1234567890123456'
+ # this is the region where your ALB instance resides
+ region: 'us-west-2'
+ signIn:
+ resolvers:
+ # typically you would pick one of these
+ - resolver: emailMatchingUserEntityProfileEmail
+ - resolver: emailLocalPartMatchingUserEntityName
+ ```
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-auth-backend@0.22.10
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.1.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.1.6
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.18
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- 13a9c63: Corrected the documentation for the GCP IAP auth module and updated the configuration to follow proxy configuration conventions by ignoring authEnv
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.1.20
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.1.20
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-google-provider@0.1.20
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.1.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.1.18
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 39f36a9: Updated the Microsoft authenticator to accurately define required scopes, but to also omit the required and additional scopes when requesting resource scopes.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.2.4
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.1.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.2.4
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-auth-backend@0.22.10
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.0.16
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.1.4
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.1.17
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.2.4
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/catalog-model@1.6.0
+
+## @backstage/plugin-auth-react@0.1.5
+
+### Patch Changes
+
+- aeac3e9: feat: Hide visibility of CookieAuthRedirect
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.22
+
+### Patch Changes
+
+- 3fca643: Added method `listBranchesByRepository` to `BitbucketCloudClient`
+- Updated dependencies
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-catalog-backend-module-logs@0.0.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-backend@1.25.0
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-catalog-backend-module-openapi@0.1.41
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-backend@1.25.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.4.10
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4
+
+## @backstage/plugin-catalog-common@1.0.26
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/catalog-model@1.6.0
+
+## @backstage/plugin-catalog-graph@0.4.8
+
+### Patch Changes
+
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- fba7537: Memoize entity graph nodes when applying an `entityFilter` to prevent repeated redraws
+- 4a529c2: Use `entityPresentationApi` for the node title and the icon.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.2
+
+### Patch Changes
+
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-node@1.12.5
+
+### Patch Changes
+
+- a629fb2: Added setAllowedLocationTypes while introducing a new extension point called CatalogLocationsExtensionPoint
+- 7c5f3b0: Explicit declare if the service ref accepts `single` or `multiple` implementations.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-react@1.12.3
+
+### Patch Changes
+
+- 7bd27e1: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead.
+- 31bfc44: Updated alpha definitions of extension data references.
+- 7ca331c: Correct `EntityDisplayName`'s icon alignment with the text.
+- 9b89b82: Internal refactor to remove unnecessary `routable` prop in the implementation of the `createEntityContentExtension` alpha export.
+- bebd569: Fix extra divider displayed on user list picker component
+- 519b8e0: Added utilities for converting existing entity card and content extensions to the new frontend system. This is in particular useful when used in combination with the new `convertLegacyPlugin` utility from `@backstage/core-compat-api`.
+- d001a42: Fix label related accessibility issues with `FavorityEntity`
+- 012e3eb: Entity page extensions created for the new frontend system via the `/alpha` exports will now be enabled by default.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/core-components@0.14.10
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-catalog-unprocessed-entities@0.2.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-unprocessed-entities-common@0.0.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-config-schema@0.1.58
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-devtools@0.1.17
+
+### Patch Changes
+
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-devtools-common@0.1.12
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-devtools-backend@0.3.9
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 32a38e1: Removed unused code for lockfile analysis.
+- 2886ef7: Deprecated `createRouter` and its router options in favour of the new backend system.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/config-loader@1.9.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-devtools-common@0.1.12
+
+## @backstage/plugin-devtools-common@0.1.12
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-events-backend@0.3.10
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-events-backend-module-azure@0.2.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-events-backend-module-github@0.2.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-events-backend-test-utils@0.1.33
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-events-node@0.3.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+
+## @backstage/plugin-home@0.7.9
+
+### Patch Changes
+
+- 31bfc44: Updated alpha definitions of extension data references.
+- fe1fbb2: Migrating usages of the deprecated `createExtension` `v1` format to the newer `v2` format, and old `create*Extension` extension creators to blueprints.
+- fdcc059: Fixed a bug on the WelcomeTitle component where the welcome message wasn't correct when the language was set to Spanish
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/core-app-api@1.14.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-home-react@0.1.16
+
+## @backstage/plugin-home-react@0.1.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-kubernetes@0.11.13
+
+### Patch Changes
+
+- e6c15cc: Adds support for Backstage's new frontend system, available via the `/alpha` sub-path export.
+- fe1fbb2: Migrating usages of the deprecated `createExtension` `v1` format to the newer `v2` format, and old `create*Extension` extension creators to blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-kubernetes-react@0.4.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-kubernetes-backend@0.18.4
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- b63d378: Update internal imports
+- 8c1aa06: Add `kubernetes.clusterLocatorMethods[].clusters[].customResources` to the configuration schema.
+ This was already documented and supported by the plugin.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-kubernetes-node@0.1.17
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @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.2
+
+## @backstage/plugin-kubernetes-cluster@0.0.14
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-kubernetes-react@0.4.2
+ - @backstage/core-components@0.14.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-kubernetes-common@0.8.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-kubernetes-node@0.1.17
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- b63d378: Update internal imports
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-kubernetes-react@0.4.2
+
+### Patch Changes
+
+- 954a593: `Liveness Probe` added in ContainerCard Component of PodDrawer
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-notifications-backend@0.3.4
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- d55b8e3: Avoid sending broadcast emails as a fallback in case the entity-typed notification user can not be resolved.
+- 8013044: fix: consider broadcast union with user
+- 7a05f50: Allow using notifications without users in the catalog
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-notifications-node@0.2.4
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-events-node@0.3.9
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-node@0.1.9
+
+## @backstage/plugin-notifications-node@0.2.4
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-node@0.1.9
+
+## @backstage/plugin-org@0.6.28
+
+### Patch Changes
+
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-org-react@0.1.27
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-permission-backend@0.5.47
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+
+## @backstage/plugin-permission-common@0.8.1
+
+### Patch Changes
+
+- df784fe: Add the MetadataResponse type from @backstage/plugin-permission-node, since this
+ type might be used in frontend code.
+- 137fa34: Add the MetadataResponseSerializedRule type from @backstage/plugin-permission-node, since this type might be used in frontend code.
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-permission-node@0.8.1
+
+### Patch Changes
+
+- df784fe: The MetadataResponse type has been moved to @backstage/plugin-permission-common
+ to match the recent move of MetadataResponseSerializedRule, and should be
+ imported from there going forward. To avoid an immediate breaking change, this
+ type is still re-exported from this package, but is marked as deprecated and
+ will be removed in a future release.
+- 5cd9878: The MetadataResponseSerializedRule type has been moved to @backstage/plugin-permission-common, and should be imported from there going forward. To avoid an immediate breaking change, this type is still re-exported from this package, but is marked as deprecated and will be removed in a future release.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-permission-react@0.4.25
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-proxy-backend@0.5.4
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- b63d378: Update internal imports
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.1.15
+
+### Patch Changes
+
+- 187f583: Added examples for publish:azure action and updated its test cases
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 3fca643: Added autocompletion support for resource `branches`
+- d57967c: Add ability to set the initial commit message when initializing a repository using the scaffolder action.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- e3b64be: Added examples for publish:bitbucketServer action and improve its test cases
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.47
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- dae85df: Add examples for `fetch:cookiecutter` scaffolder action & improve related tests
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.1.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.1.13
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 24de005: Added test cases for publish:gitea examples
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-github@0.4.1
+
+### Patch Changes
+
+- d21d307: Added examples for github:environment:create action and improve its test cases
+- 6d4cb97: Added examples for github:repo:create action and improved test cases
+- cd203f1: Added examples for action github:pages and improved its test cases
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5
+
+### Patch Changes
+
+- da97131: Added test cases for gitlab:issues:create examples
+
+- fad1b90: Allow the `createGitlabProjectVariableAction` to use oauth tokens
+
+- aab708e: Added test cases for gitlab:issue:edit examples
+
+- ef742dc: Added test cases for gitlab:projectAccessToken:create example
+
+- 1ba4c2f: Added test cases for gitlab:pipeline:trigger examples
+
+- a6603e4: Add custom action for merge request: **auto**
+
+ The **Auto** action selects the committed action between _create_ and _update_.
+
+ The **Auto** action fetches files using the **/projects/repository/tree endpoint**.
+ After fetching, it checks if the file exists locally and in the repository. If it does, it chooses **update**; otherwise, it chooses **create**.
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.0.6
+
+### Patch Changes
+
+- 6fc03c7: Add examples for notification:send scaffolder action & improve related tests
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/plugin-notifications-node@0.2.4
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.4.40
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- 449def7: Add examples for fetch:rails scaffolder action & improve related tests
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/integration@1.14.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.1.31
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 382e868: Added test cases for sentry:project:create examples
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.3.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.10
+
+## @backstage/plugin-scaffolder-common@1.5.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-node@0.4.9
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- c544f81: Add support for status filtering in scaffolder tasks endpoint
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.10
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.24.0
+ - @backstage/backend-test-utils@0.5.0
+ - @backstage/plugin-scaffolder-node@0.4.9
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search@1.4.15
+
+### Patch Changes
+
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- 3123c16: Fix package metadata
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-search-react@1.7.14
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-search-backend@1.5.15
+
+### Patch Changes
+
+- 3123c16: Fix package metadata
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/backend-openapi-utils@0.1.16
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+
+## @backstage/plugin-search-backend-module-pg@0.5.33
+
+### Patch Changes
+
+- 7251567: Removing `@backstage/backend-app-api` dependency
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-common@1.2.14
+
+### Patch Changes
+
+- 3123c16: Fix package metadata
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search-react@1.7.14
+
+### Patch Changes
+
+- 7bd27e1: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead.
+- 31bfc44: Updated alpha definitions of extension data references.
+- 3123c16: Fix package metadata
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/core-components@0.14.10
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-signals@0.0.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.4
+
+## @backstage/plugin-signals-backend@0.1.9
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.3.9
+ - @backstage/plugin-signals-node@0.1.9
+
+## @backstage/plugin-signals-node@0.1.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.3.9
+
+## @backstage/plugin-techdocs@1.10.8
+
+### Patch Changes
+
+- 69bd940: Use annotation constants from new techdocs-common package.
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- 27794d1: Allow for more granular control of TechDocsReaderPage styling. Theme overrides can now be provided to TechDocs without affecting the theme in other areas of Backstage.
+- 4490d73: Refactor TechDocs' mkdocs-redirects support.
+- 8543e72: TechDocs redirect feature now includes a notification to the user before they are redirected.
+- 67e76f2: TechDocs now supports the `mkdocs-redirects` plugin. Redirects defined using the `mkdocs-redirect` plugin will be handled automatically in TechDocs. Redirecting to external urls is not supported. In the case that an external redirect url is provided, TechDocs will redirect to the current documentation site home.
+- bdc5471: Fixed issue where header styles were incorrectly generated when themes used CSS variables to define font size.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-search-react@1.7.14
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-techdocs-react@1.2.7
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.37
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-search-react@1.7.14
+ - @backstage/plugin-techdocs@1.10.8
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/test-utils@1.5.10
+ - @backstage/plugin-techdocs-react@1.2.7
+
+## @backstage/plugin-techdocs-backend@1.10.10
+
+### Patch Changes
+
+- 69bd940: Use annotation constants from new techdocs-common package.
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- b77fbf4: Added back `type: 'local'` to TechDocs config schema for `publisher`
+- a16632c: Update configuration schema to match actual behavior
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-techdocs-node@1.12.9
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.13
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/integration@1.14.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/plugin-techdocs-react@1.2.7
+
+## @backstage/plugin-techdocs-node@1.12.9
+
+### Patch Changes
+
+- 389f5a4: Update deprecated url-reader-related imports.
+- 69bd940: Use annotation constants from new techdocs-common package.
+- 949083d: Update `patchMkdocsYmlPrebuild` to modify `repo_url` and `edit_uri` independently.
+- 5cedd9f: Fix TechDocs Edit URL for nested docs
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+
+## @backstage/plugin-techdocs-react@1.2.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-user-settings@0.8.11
+
+### Patch Changes
+
+- c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/core-components@0.14.10
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.4
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.22
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-node@0.1.9
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.100
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0
+ - @backstage/plugin-scaffolder@1.24.0
+ - @backstage/plugin-scaffolder-react@1.11.0
+ - @backstage/cli@0.27.0
+ - @backstage/plugin-notifications@0.3.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-search-react@1.7.14
+ - @backstage/plugin-home@0.7.9
+ - @backstage/plugin-techdocs@1.10.8
+ - @backstage/core-components@0.14.10
+ - @backstage/plugin-api-docs@0.11.8
+ - @backstage/frontend-app-api@0.8.0
+ - @backstage/plugin-catalog-graph@0.4.8
+ - @backstage/plugin-catalog-import@0.12.2
+ - @backstage/plugin-devtools@0.1.17
+ - @backstage/plugin-org@0.6.28
+ - @backstage/plugin-search@1.4.15
+ - @backstage/plugin-user-settings@0.8.11
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-kubernetes@0.11.13
+ - @backstage/core-app-api@1.14.2
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7
+ - @backstage/plugin-kubernetes-cluster@0.0.14
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-signals@0.0.9
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13
+ - @backstage/plugin-techdocs-react@1.2.7
+
+## example-app-next@0.0.14
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0
+ - @backstage/plugin-scaffolder@1.24.0
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-scaffolder-react@1.11.0
+ - @backstage/cli@0.27.0
+ - @backstage/plugin-notifications@0.3.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-search-react@1.7.14
+ - @backstage/plugin-home@0.7.9
+ - @backstage/plugin-techdocs@1.10.8
+ - @backstage/core-components@0.14.10
+ - @backstage/plugin-api-docs@0.11.8
+ - @backstage/frontend-app-api@0.8.0
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/plugin-app-visualizer@0.1.9
+ - @backstage/plugin-catalog-graph@0.4.8
+ - @backstage/plugin-catalog-import@0.12.2
+ - @backstage/plugin-org@0.6.28
+ - @backstage/plugin-search@1.4.15
+ - @backstage/plugin-user-settings@0.8.11
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-kubernetes@0.11.13
+ - @backstage/core-app-api@1.14.2
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7
+ - @backstage/plugin-kubernetes-cluster@0.0.14
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-signals@0.0.9
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13
+ - @backstage/plugin-techdocs-react@1.2.7
+
+## app-next-example-plugin@0.0.14
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/core-components@0.14.10
+
+## example-backend@0.0.29
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/plugin-scaffolder-backend-module-github@0.4.1
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.20
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/plugin-catalog-backend@1.25.0
+ - @backstage/plugin-catalog-backend-module-openapi@0.1.41
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-scaffolder-backend@1.24.0
+ - @backstage/plugin-techdocs-backend@1.10.10
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.0
+ - @backstage/plugin-search-backend-module-explore@0.2.0
+ - @backstage/plugin-notifications-backend@0.3.4
+ - @backstage/plugin-kubernetes-backend@0.18.4
+ - @backstage/plugin-permission-backend@0.5.47
+ - @backstage/plugin-devtools-backend@0.3.9
+ - @backstage/plugin-signals-backend@0.1.9
+ - @backstage/plugin-proxy-backend@0.5.4
+ - @backstage/plugin-auth-backend@0.22.10
+ - @backstage/plugin-app-backend@0.3.72
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.3.0
+ - @backstage/plugin-search-backend-module-catalog@0.2.0
+ - @backstage/plugin-search-backend@1.5.15
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.1.9
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20
+
+## example-backend-legacy@0.2.101
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-backend@1.25.0
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.40
+ - @backstage/plugin-search-backend-node@1.3.0
+ - @backstage/plugin-scaffolder-backend@1.24.0
+ - @backstage/plugin-techdocs-backend@1.10.10
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.0
+ - @backstage/plugin-search-backend-module-explore@0.2.0
+ - @backstage/plugin-kubernetes-backend@0.18.4
+ - @backstage/plugin-permission-backend@0.5.47
+ - @backstage/plugin-devtools-backend@0.3.9
+ - @backstage/plugin-signals-backend@0.1.9
+ - @backstage/plugin-proxy-backend@0.5.4
+ - @backstage/plugin-auth-backend@0.22.10
+ - @backstage/plugin-app-backend@0.3.72
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5
+ - @backstage/plugin-search-backend-module-catalog@0.2.0
+ - @backstage/plugin-search-backend@1.5.15
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-search-backend-module-pg@0.5.33
+ - @backstage/catalog-model@1.6.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10
+ - @backstage/plugin-events-backend@0.3.10
+ - @backstage/plugin-events-node@0.3.9
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.4
+ - @backstage/plugin-signals-node@0.1.9
+
+## e2e-test@0.2.19
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.18
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## techdocs-cli-embedded-app@0.2.99
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0
+ - @backstage/cli@0.27.0
+ - @backstage/plugin-techdocs@1.10.8
+ - @backstage/core-components@0.14.10
+ - @backstage/core-app-api@1.14.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/test-utils@1.5.10
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-techdocs-react@1.2.7
+
+## @internal/plugin-todo-list@1.0.30
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+
+## @internal/plugin-todo-list-backend@1.0.30
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/errors@1.2.4
+
+## @internal/plugin-todo-list-common@1.0.21
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1
diff --git a/docs/releases/v1.30.0-next.1-changelog.md b/docs/releases/v1.30.0-next.1-changelog.md
new file mode 100644
index 0000000000..1d93235740
--- /dev/null
+++ b/docs/releases/v1.30.0-next.1-changelog.md
@@ -0,0 +1,2175 @@
+# Release v1.30.0-next.1
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.30.0-next.1](https://backstage.github.io/upgrade-helper/?to=1.30.0-next.1)
+
+## @backstage/core-app-api@1.14.2-next.0
+
+### Patch Changes
+
+- 9a46a81: The request to delete the session cookie when running the app in protected mode is now done with a plain `fetch` rather than `FetchApi`. This fixes a bug where the app would immediately try to sign-in again when removing the cookie during logout.
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ -
+
+## @backstage/config-loader@1.9.0-next.1
+
+### Minor Changes
+
+- 274428f: Add configuration key to File and Remote `ConfigSource`s that enables configuration of parsing logic. Previously limited to yaml, these `ConfigSource`s now allow for a multitude of parsing options (e.g. JSON).
+
+### Patch Changes
+
+- 1edd6c2: The `env` option of `ConfigSources.default` now correctly allows undefined members.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-notifications-backend-module-email@0.2.0-next.1
+
+### Minor Changes
+
+- def53a7: **BREAKING** Following `NotificationTemplateRenderer` methods now return a Promise and **must** be awaited: `getSubject`, `getText` and `getHtml`.
+
+ Required changes and example usage:
+
+ ```diff
+ import { notificationsEmailTemplateExtensionPoint } from '@backstage/plugin-notifications-backend-module-email';
+ import { Notification } from '@backstage/plugin-notifications-common';
+ +import { getNotificationSubject, getNotificationTextContent, getNotificationHtmlContent } from 'my-notification-processing-library`
+ export const notificationsModuleEmailDecorator = createBackendModule({
+ pluginId: 'notifications',
+ moduleId: 'email.templates',
+ register(reg) {
+ reg.registerInit({
+ deps: {
+ emailTemplates: notificationsEmailTemplateExtensionPoint,
+ },
+ async init({ emailTemplates }) {
+ emailTemplates.setTemplateRenderer({
+ - getSubject(notification) {
+ + async getSubject(notification) {
+ - return `New notification from ${notification.source}`;
+ + const subject = await getNotificationSubject(notification);
+ + return `New notification from ${subject}`;
+ },
+ - getText(notification) {
+ + async getText(notification) {
+ - return notification.content;
+ + const text = await getNotificationTextContent(notification);
+ + return text;
+ },
+ - getHtml(notification) {
+ + async getHtml(notification) {
+ - return `${notification.content}
`;
+ + const html = await getNotificationHtmlContent(notification);
+ + return html;
+ },
+ });
+ },
+ });
+ },
+ });
+ ```
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.4-next.1
+
+## @backstage/plugin-techdocs-common@0.1.0-next.0
+
+### Minor Changes
+
+- 4698e1f: Initial release of the techdocs-common package.
+
+## @backstage/app-defaults@1.5.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+
+## @backstage/backend-app-api@0.8.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/backend-common@0.23.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/backend-dev-utils@0.1.4
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/backend-defaults@0.4.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-app-api@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/backend-dev-utils@0.1.4
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/backend-dynamic-feature-service@0.2.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-catalog-backend@1.24.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-app-api@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-app-node@0.1.23-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-events-backend@0.3.10-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/backend-openapi-utils@0.1.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/errors@1.2.4
+
+## @backstage/backend-plugin-api@0.7.1-next.1
+
+### Patch Changes
+
+- f011d1b: fix typo in `getPluginRequestToken` comments
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-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-auth-node@0.4.18-next.1
+
+## @backstage/backend-tasks@0.5.28-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-test-utils@0.4.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-app-api@0.8.1-next.1
+ - @backstage/backend-defaults@0.4.2-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/cli@0.27.0-next.1
+
+### Patch Changes
+
+- e6e7d86: Switched the target from `'ES2022'` to `'es2022'` for better compatibility with older versions of `swc`.
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/eslint-plugin@0.1.8
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/core-compat-api@0.2.8-next.1
+
+### Patch Changes
+
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/create-app@0.5.18-next.1
+
+### Patch Changes
+
+- 6c1081c: Updated dockerfile and `app-config.production.yaml` to make it easier to get started with example data
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/dev-utils@1.0.37-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+
+## @backstage/frontend-app-api@0.7.5-next.1
+
+### Patch Changes
+
+- 3be9aeb: Added support for v2 extensions, which declare their inputs and outputs without using a data map.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-plugin-api@0.6.8-next.1
+
+### Patch Changes
+
+- 3be9aeb: Extensions have been changed to be declared with an array of inputs and outputs, rather than a map of named data refs. This change was made to reduce confusion around the role of the input and output names, as well as enable more powerful APIs for overriding extensions.
+
+ An extension that was previously declared like this:
+
+ ```tsx
+ const exampleExtension = createExtension({
+ name: 'example',
+ inputs: {
+ items: createExtensionInput({
+ element: coreExtensionData.reactElement,
+ }),
+ },
+ output: {
+ element: coreExtensionData.reactElement,
+ },
+ factory({ inputs }) {
+ return {
+ element: (
+
+ Example
+ {inputs.items.map(item => {
+ return
{item.output.element}
;
+ })}
+
+ ),
+ };
+ },
+ });
+ ```
+
+ Should be migrated to the following:
+
+ ```tsx
+ const exampleExtension = createExtension({
+ name: 'example',
+ inputs: {
+ items: createExtensionInput([coreExtensionData.reactElement]),
+ },
+ output: [coreExtensionData.reactElement],
+ factory({ inputs }) {
+ return [
+ coreExtensionData.reactElement(
+
+ Example
+ {inputs.items.map(item => {
+ return
{item.get(coreExtensionData.reactElement)}
;
+ })}
+
,
+ ),
+ ];
+ },
+ });
+ ```
+
+- 3fb421d: Added support to be able to define `zod` config schema in Blueprints, with built in schema merging from the Blueprint and the extension instances.
+
+- 6349099: Added config input type to the extensions
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-test-utils@0.1.12-next.1
+
+### Patch Changes
+
+- 3be9aeb: Added support for v2 extensions, which declare their inputs and outputs without using a data map.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/test-utils@1.5.10-next.1
+ - @backstage/types@1.1.1
+
+## @backstage/repo-tools@0.9.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.17-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-node@1.12.9-next.1
+ - @backstage/backend-defaults@0.4.2-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+
+## @backstage/test-utils@1.5.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-api-docs@0.11.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-app-backend@0.3.72-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-app-node@0.1.23-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-app-node@0.1.23-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+
+## @backstage/plugin-app-visualizer@0.1.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-auth-backend@0.22.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.1.6-next.1
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.1.6-next.1
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.1.18-next.1
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.1.4-next.1
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.1.15-next.1
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.18-next.1
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.1
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.20-next.1
+ - @backstage/plugin-auth-backend-module-google-provider@0.1.20-next.1
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-okta-provider@0.0.16-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.1.6-next.1
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.1.16-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.2.4-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.1.15-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-backend@0.22.10-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.1.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.1.6-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.1.6-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.18-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.1.20-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-google-provider@0.1.20-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.1.18-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.2.4-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.1.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.2.4-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-backend@0.22.10-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.0.16-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.1.4-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.1.17-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.2.4-next.1
+
+### Patch Changes
+
+- c8f1cae: Add `signIn` to authentication provider configuration schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-auth-node@0.4.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog@1.21.2-next.1
+
+### Patch Changes
+
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-scaffolder-common@1.5.5-next.0
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-backend@1.24.1-next.1
+
+### Patch Changes
+
+- 51240ee: Preserve default `allowedLocationTypes` when `setAllowedLocationTypes()` of `CatalogLocationsExtensionPoint` is not called.
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.1
+ - @backstage/backend-openapi-utils@0.1.16-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-catalog-backend-module-aws@0.3.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.0
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-azure@0.1.43-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-openapi-utils@0.1.16-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.2.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.0
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.37-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-gcp@0.1.24-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.0
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.1.40-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-github@0.6.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.24.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-catalog-backend-module-github-org@0.1.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-catalog-backend-module-github@0.6.6-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.3.22-next.1
+
+### Patch Changes
+
+- c7b14ed: Adds new optional `excludeRepos` configuration option to the Gitlab catalog provider.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.0.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend-module-gitlab@0.3.22-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.4.28-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-catalog-backend@1.24.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-catalog-backend-module-ldap@0.7.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-backend-module-logs@0.0.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.24.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.5.31-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.24.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.1.29-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.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.1.21-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.0
+ - @backstage/catalog-model@1.5.0
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-catalog-common@1.0.26-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/catalog-model@1.5.0
+
+## @backstage/plugin-catalog-graph@0.4.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+
+## @backstage/plugin-catalog-node@1.12.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-react@1.12.3-next.1
+
+### Patch Changes
+
+- 7ca331c: Correct `EntityDisplayName`'s icon alignment with the text.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-catalog-unprocessed-entities-common@0.0.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+
+## @backstage/plugin-devtools@0.1.17-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-devtools-common@0.1.12-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-devtools-backend@0.3.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-devtools-common@0.1.12-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-devtools-common@0.1.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-events-backend@0.3.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.3.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-events-backend-module-azure@0.2.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-events-backend-module-github@0.2.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-events-backend-test-utils@0.1.33-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-events-node@0.3.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+
+## @backstage/plugin-home@0.7.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-home-react@0.1.16-next.0
+
+## @backstage/plugin-kubernetes@0.11.13-next.1
+
+### Patch Changes
+
+- e6c15cc: Adds support for Backstage's new frontend system, available via the `/alpha` sub-path export.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-react@0.4.2-next.1
+
+## @backstage/plugin-kubernetes-backend@0.18.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-kubernetes-node@0.1.17-next.1
+
+## @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-react@0.4.2-next.1
+
+## @backstage/plugin-kubernetes-common@0.8.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-kubernetes-node@0.1.17-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-kubernetes-react@0.4.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.8.2-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-notifications-backend@0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.4-next.1
+ - @backstage/plugin-signals-node@0.1.9-next.1
+
+## @backstage/plugin-notifications-node@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-node@0.1.9-next.1
+
+## @backstage/plugin-org@0.6.28-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-org-react@0.1.27-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-permission-backend@0.5.47-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-permission-common@0.8.1-next.0
+
+### Patch Changes
+
+- 137fa34: Add the MetadataResponseSerializedRule type from @backstage/plugin-permission-node, since this type might be used in frontend code.
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-permission-node@0.8.1-next.1
+
+### Patch Changes
+
+- 5cd9878: The MetadataResponseSerializedRule type has been moved to @backstage/plugin-permission-common, and should be imported from there going forward. To avoid an immediate breaking change, this type is still re-exported from this package, but is marked as deprecated and will be removed in a future release.
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @backstage/plugin-permission-react@0.4.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-proxy-backend@0.5.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder@1.23.1-next.1
+
+### Patch Changes
+
+- 896a22d: Fix helper text margin for scaffolder EntityNamePicker and EntityTagsPicker when using outlined text field
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-scaffolder-common@1.5.5-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend@1.23.1-next.1
+
+### Patch Changes
+
+- ef87e06: Fix scaffolder action `catalog:write` to write to directories that don't already exist
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.1.13-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.1
+ - @backstage/plugin-scaffolder-backend-module-azure@0.1.15-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.1
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.1.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.1
+
+### Patch Changes
+
+- e3b64be: Added examples for publish:bitbucketServer action and improve its test cases
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.47-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.1.13-next.1
+
+### Patch Changes
+
+- 24de005: Added test cases for publish:gitea examples
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.1
+
+### Patch Changes
+
+- d21d307: Added examples for github:environment:create action and improve its test cases
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.0.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.4-next.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.1.31-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.3.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.10-next.1
+
+## @backstage/plugin-scaffolder-common@1.5.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-common@1.5.5-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/backend-test-utils@0.4.5-next.1
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.1
+
+## @backstage/plugin-scaffolder-react@1.11.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-scaffolder-common@1.5.5-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-search@1.4.15-next.1
+
+### Patch Changes
+
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-search-backend@1.5.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/backend-defaults@0.4.2-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/backend-openapi-utils@0.1.16-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search-backend-module-catalog@0.1.29-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-explore@0.1.29-next.1
+
+### Patch Changes
+
+- 93fc1a0: Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.4`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-pg@0.5.33-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-techdocs@0.1.28-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-node@1.12.9-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-node@1.2.28-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-search-common@1.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search-react@1.7.14-next.1
+
+### Patch Changes
+
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-signals-backend@0.1.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+ - @backstage/plugin-signals-node@0.1.9-next.1
+
+## @backstage/plugin-signals-node@0.1.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## @backstage/plugin-techdocs@1.10.8-next.1
+
+### Patch Changes
+
+- 69bd940: Use annotation constants from new techdocs-common package.
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.37-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/test-utils@1.5.10-next.1
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## @backstage/plugin-techdocs-backend@1.10.10-next.1
+
+### Patch Changes
+
+- 69bd940: Use annotation constants from new techdocs-common package.
+- Updated dependencies
+ - @backstage/plugin-techdocs-node@1.12.9-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-techdocs-node@1.12.9-next.1
+
+### Patch Changes
+
+- 69bd940: Use annotation constants from new techdocs-common package.
+- 949083d: Update `patchMkdocsYmlPrebuild` to modify `repo_url` and `edit_uri` independently.
+- Updated dependencies
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-user-settings@0.8.11-next.1
+
+### Patch Changes
+
+- 6349099: Added config input type to the extensions
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.4
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.22-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-signals-node@0.1.9-next.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.100-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/plugin-kubernetes@0.11.13-next.1
+ - @backstage/cli@0.27.0-next.1
+ - @backstage/plugin-scaffolder@1.23.1-next.1
+ - @backstage/plugin-user-settings@0.8.11-next.1
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-search@1.4.15-next.1
+ - @backstage/plugin-api-docs@0.11.8-next.1
+ - @backstage/plugin-catalog-graph@0.4.8-next.1
+ - @backstage/plugin-catalog-import@0.12.2-next.1
+ - @backstage/plugin-home@0.7.9-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+ - @backstage/plugin-org@0.6.28-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/plugin-devtools@0.1.17-next.1
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## example-app-next@0.0.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/plugin-kubernetes@0.11.13-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/cli@0.27.0-next.1
+ - @backstage/plugin-scaffolder@1.23.1-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-user-settings@0.8.11-next.1
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-search@1.4.15-next.1
+ - @backstage/plugin-api-docs@0.11.8-next.1
+ - @backstage/plugin-catalog-graph@0.4.8-next.1
+ - @backstage/plugin-catalog-import@0.12.2-next.1
+ - @backstage/plugin-home@0.7.9-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+ - @backstage/plugin-org@0.6.28-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/plugin-app-visualizer@0.1.9-next.1
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## app-next-example-plugin@0.0.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-components@0.14.10-next.0
+
+## example-backend@0.0.29-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.1
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.1
+ - @backstage/plugin-techdocs-backend@1.10.10-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-catalog-backend@1.24.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/plugin-search-backend-module-explore@0.1.29-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/plugin-scaffolder-backend@1.23.1-next.1
+ - @backstage/plugin-auth-backend@0.22.10-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.1
+ - @backstage/backend-defaults@0.4.2-next.1
+ - @backstage/plugin-app-backend@0.3.72-next.1
+ - @backstage/plugin-devtools-backend@0.3.9-next.1
+ - @backstage/plugin-proxy-backend@0.5.4-next.1
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.1
+ - @backstage/plugin-kubernetes-backend@0.18.4-next.1
+ - @backstage/plugin-permission-backend@0.5.47-next.1
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.1
+ - @backstage/plugin-search-backend@1.5.15-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.1
+ - @backstage/plugin-notifications-backend@0.3.4-next.1
+ - @backstage/plugin-signals-backend@0.1.9-next.1
+
+## example-backend-legacy@0.2.101-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-backend@1.10.10-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.0
+ - @backstage/plugin-catalog-backend@1.24.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/plugin-search-backend-module-explore@0.1.29-next.1
+ - @backstage/plugin-scaffolder-backend@1.23.1-next.1
+ - @backstage/plugin-auth-backend@0.22.10-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.1
+ - example-app@0.2.100-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-app-backend@0.3.72-next.1
+ - @backstage/plugin-devtools-backend@0.3.9-next.1
+ - @backstage/plugin-proxy-backend@0.5.4-next.1
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.1
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/plugin-kubernetes-backend@0.18.4-next.1
+ - @backstage/plugin-permission-backend@0.5.47-next.1
+ - @backstage/plugin-search-backend@1.5.15-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-auth-node@0.4.18-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.1
+ - @backstage/plugin-events-backend@0.3.10-next.1
+ - @backstage/plugin-events-node@0.3.9-next.1
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.1
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.1
+ - @backstage/plugin-search-backend-module-pg@0.5.33-next.1
+ - @backstage/plugin-signals-backend@0.1.9-next.1
+ - @backstage/plugin-signals-node@0.1.9-next.1
+
+## e2e-test@0.2.19-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.18-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## techdocs-cli-embedded-app@0.2.99-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/cli@0.27.0-next.1
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/test-utils@1.5.10-next.1
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## @internal/plugin-todo-list-backend@1.0.30-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
+## @internal/plugin-todo-list-common@1.0.21-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.0
diff --git a/docs/releases/v1.30.0-next.2-changelog.md b/docs/releases/v1.30.0-next.2-changelog.md
new file mode 100644
index 0000000000..cdf4164566
--- /dev/null
+++ b/docs/releases/v1.30.0-next.2-changelog.md
@@ -0,0 +1,156 @@
+# Release v1.30.0-next.2
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.30.0-next.2](https://backstage.github.io/upgrade-helper/?to=1.30.0-next.2)
+
+## @backstage/cli@0.27.0-next.2
+
+### Patch Changes
+
+- b2d97fd: Fixing loading of additional config files with new `ConfigSources`
+- adabb40: New command now supports setting package license
+- Updated dependencies
+ - @backstage/catalog-model@1.5.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/eslint-plugin@0.1.8
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/create-app@0.5.18-next.2
+
+### Patch Changes
+
+- Bumped create-app version.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/plugin-catalog-graph@0.4.8-next.2
+
+### Patch Changes
+
+- 4a529c2: Use `entityPresentationApi` for the node title and the icon.
+- Updated dependencies
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+
+## example-app@0.2.100-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.0-next.2
+ - @backstage/plugin-catalog-graph@0.4.8-next.2
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-api-docs@0.11.8-next.1
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-import@0.12.2-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-devtools@0.1.17-next.1
+ - @backstage/plugin-home@0.7.9-next.1
+ - @backstage/plugin-kubernetes@0.11.13-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-org@0.6.28-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-scaffolder@1.23.1-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/plugin-search@1.4.15-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+ - @backstage/plugin-user-settings@0.8.11-next.1
+
+## example-app-next@0.0.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.0-next.2
+ - @backstage/plugin-catalog-graph@0.4.8-next.2
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-api-docs@0.11.8-next.1
+ - @backstage/plugin-app-visualizer@0.1.9-next.1
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-import@0.12.2-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-home@0.7.9-next.1
+ - @backstage/plugin-kubernetes@0.11.13-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-org@0.6.28-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-scaffolder@1.23.1-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/plugin-search@1.4.15-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+ - @backstage/plugin-user-settings@0.8.11-next.1
+
+## e2e-test@0.2.19-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.18-next.2
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## techdocs-cli-embedded-app@0.2.99-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.0-next.2
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/test-utils@1.5.10-next.1
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
diff --git a/docs/releases/v1.30.0-next.3-changelog.md b/docs/releases/v1.30.0-next.3-changelog.md
new file mode 100644
index 0000000000..4fa86da821
--- /dev/null
+++ b/docs/releases/v1.30.0-next.3-changelog.md
@@ -0,0 +1,2199 @@
+# Release v1.30.0-next.3
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.30.0-next.3](https://backstage.github.io/upgrade-helper/?to=1.30.0-next.3)
+
+## @backstage/backend-plugin-api@0.8.0-next.2
+
+### Minor Changes
+
+- 7c5f3b0: The `createServiceRef` function now accepts a new boolean `multiple` option. The `multiple` option defaults to `false` and when set to `true`, it enables that multiple implementation are installed for the created service ref.
+
+ We're looking for ways to make it possible to augment services without the need to replace the entire service.
+
+ Typical example of that being the ability to install support for additional targets for the `UrlReader` service without replacing the service itself. This achieves that by allowing us to define services that can have multiple simultaneous implementation, allowing the `UrlReader` implementation to depend on such a service to collect all possible implementation of support for external targets:
+
+ ```diff
+ // @backstage/backend-defaults
+
+ + export const urlReaderFactoriesServiceRef = createServiceRef({
+ + id: 'core.urlReader.factories',
+ + scope: 'plugin',
+ + multiton: true,
+ + });
+
+ ...
+
+ export const urlReaderServiceFactory = createServiceFactory({
+ service: coreServices.urlReader,
+ deps: {
+ config: coreServices.rootConfig,
+ logger: coreServices.logger,
+ + factories: urlReaderFactoriesServiceRef,
+ },
+ - async factory({ config, logger }) {
+ + async factory({ config, logger, factories }) {
+ return UrlReaders.default({
+ config,
+ logger,
+ + factories,
+ });
+ },
+ });
+ ```
+
+ With that, you can then add more custom `UrlReader` factories by installing more implementations of the `urlReaderFactoriesServiceRef` in your backend instance. Something like:
+
+ ```ts
+ // packages/backend/index.ts
+ import { createServiceFactory } from '@backstage/backend-plugin-api';
+ import { urlReaderFactoriesServiceRef } from '@backstage/backend-defaults';
+ ...
+
+ backend.add(createServiceFactory({
+ service: urlReaderFactoriesServiceRef,
+ deps: {},
+ async factory() {
+ return CustomUrlReader.factory;
+ },
+ }));
+
+ ...
+
+ ```
+
+### Patch Changes
+
+- 6061061: Added `createBackendFeatureLoader`, which can be used to create an installable backend feature that can in turn load in additional backend features in a dynamic way.
+
+- ba9abf4: The `SchedulerService` now allows tasks with `frequency: { trigger: 'manual' }`. This means that the task will not be scheduled, but rather run only when manually triggered with `SchedulerService.triggerTask`.
+
+- 8b13183: Added `createBackendFeatureLoader`, which can be used to programmatically select and install backend features.
+
+ A feature loader can return an list of features to be installed, for example in the form on an `Array` or other for of iterable, which allows for the loader to be defined as a generator function. Both synchronous and asynchronous loaders are supported.
+
+ Additionally, a loader can depend on services in its implementation, with the restriction that it can only depend on root-scoped services, and it may not override services that have already been instantiated.
+
+ ```ts
+ const searchLoader = createBackendFeatureLoader({
+ deps: {
+ config: coreServices.rootConfig,
+ },
+ *loader({ config }) {
+ // Example of a custom config flag to enable search
+ if (config.getOptionalString('customFeatureToggle.search')) {
+ yield import('@backstage/plugin-search-backend/alpha');
+ yield import('@backstage/plugin-search-backend-module-catalog/alpha');
+ yield import('@backstage/plugin-search-backend-module-explore/alpha');
+ yield import('@backstage/plugin-search-backend-module-techdocs/alpha');
+ }
+ },
+ });
+ ```
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-plugin-api@0.7.0-next.2
+
+### Minor Changes
+
+- 72754db: **BREAKING**: All types of route refs are always considered optional by `useRouteRef`, which means the caller must always handle a potential `undefined` return value. Related to this change, the `optional` option from `createExternalRouteRef` has been removed, since it is no longer necessary.
+
+ This is released as an immediate breaking change as we expect the usage of the new route refs to be extremely low or zero, since plugins that support the new system will still use route refs and `useRouteRef` from `@backstage/core-plugin-api` in combination with `convertLegacyRouteRef` from `@backstage/core-compat-api`.
+
+### Patch Changes
+
+- 210d066: Added support for using the `params` in other properties of the `createExtensionBlueprint` options by providing a callback.
+- Updated dependencies
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-auth-node@0.5.0-next.2
+
+### Minor Changes
+
+- 579afd0: **BREAKING**: Sign-in resolvers configured via `.signIn.resolvers` now take precedence over sign-in resolvers passed to `signInResolver` option of `createOAuthProviderFactory`. This effectively makes sign-in resolvers passed via the `signInResolver` the default one, which you can then override through configuration.
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog@1.22.0-next.2
+
+### Minor Changes
+
+- 6925dcb: Introduces the HasSubdomainsCard component that displays the subdomains of a given domain
+
+### Patch Changes
+
+- 604a504: The entity relation cards available for the new frontend system via `/alpha` now have more accurate and granular default filters.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-search-react@1.7.14-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder@1.24.0-next.2
+
+### Minor Changes
+
+- 3fca643: Added field extension `RepoBranchPicker` that supports autocompletion for Bitbucket
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.11.0-next.2
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/app-defaults@1.5.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+
+## @backstage/backend-app-api@0.8.1-next.2
+
+### Patch Changes
+
+- 8b13183: Added support for the latest version of `BackendFeature`s from `@backstage/backend-plugin-api`, including feature loaders.
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 7c5f3b0: Update the `ServiceRegister` implementation to enable registering multiple service implementations for a given service ref.
+- 80a0737: Added configuration for the `packages` options to config schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/cli-node@0.2.7
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-common@0.23.4-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/backend-dev-utils@0.1.4
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-defaults@0.4.2-next.2
+
+### Patch Changes
+
+- 0d16b52: Add access restrictions to the JWKS external access method config schema
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- ba9abf4: The `SchedulerService` now allows tasks with `frequency: { trigger: 'manual' }`. This means that the task will not be scheduled, but rather run only when manually triggered with `SchedulerService.triggerTask`.
+- 7c5f3b0: Update the `UrlReader` service to depends on multiple instances of `UrlReaderFactoryProvider` service.
+- 1d5f298: Avoid excessive numbers of error listeners on cache clients
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-app-api@0.8.1-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/backend-dev-utils@0.1.4
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-dynamic-feature-service@0.2.16-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-app-api@0.8.1-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-catalog-backend@1.24.1-next.2
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-app-node@0.1.23-next.2
+ - @backstage/plugin-events-backend@0.3.10-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/cli-node@0.2.7
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-openapi-utils@0.1.16-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/errors@1.2.4
+
+## @backstage/backend-tasks@0.5.28-next.2
+
+### Patch Changes
+
+- ba9abf4: The `PluginTaskScheduler` now allows tasks with `frequency: { trigger: 'manual' }`. This means that the task will not be scheduled, but rather run only when manually triggered with `PluginTaskScheduler.triggerTask`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-test-utils@0.4.5-next.2
+
+### Patch Changes
+
+- 8b13183: Internal updates to support latest version of `BackendFeauture`s from `@backstage/backend-plugin-api`.
+- 7c5f3b0: Update the `ServiceFactoryTester` to be able to test services that enables multi implementation installation.
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2-next.2
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-app-api@0.8.1-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/cli@0.27.0-next.3
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/cli-node@0.2.7
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/eslint-plugin@0.1.8
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/config-loader@1.9.0-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/core-compat-api@0.2.8-next.2
+
+### Patch Changes
+
+- 72754db: Updated usage of `useRouteRef`, which can now always return `undefined`.
+- 16cf96c: Both `compatWrapper` and `convertLegacyRouteRef` now support converting from the new system to the old.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/create-app@0.5.18-next.3
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/dev-utils@1.0.37-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+
+## @backstage/frontend-app-api@0.7.5-next.2
+
+### Patch Changes
+
+- 72754db: Updated usage of `useRouteRef`, which can now always return `undefined`.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-test-utils@0.1.12-next.2
+
+### Patch Changes
+
+- 8209449: Added new APIs for testing extensions
+- 72754db: Updated usage of `useRouteRef`, which can now always return `undefined`.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/frontend-app-api@0.7.5-next.2
+ - @backstage/test-utils@1.5.10-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/repo-tools@0.9.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/cli-node@0.2.7
+ - @backstage/catalog-model@1.5.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.17-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2-next.2
+ - @backstage/plugin-techdocs-node@1.12.9-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+
+## @backstage/test-utils@1.5.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-api-docs@0.11.8-next.2
+
+### Patch Changes
+
+- 4b6d2cb: Updated dependency `@graphiql/react` to `^0.23.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0-next.2
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-app-backend@0.3.72-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-app-node@0.1.23-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-app-node@0.1.23-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/config-loader@1.9.0-next.2
+
+## @backstage/plugin-app-visualizer@0.1.9-next.2
+
+### Patch Changes
+
+- 72754db: Updated usage of `useRouteRef`, which can now always return `undefined`.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-auth-backend@0.22.10-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.1.6-next.2
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.1.18-next.2
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.1.15-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.2.4-next.2
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.1.6-next.2
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.2
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.20-next.2
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.2.4-next.2
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.2.4-next.2
+ - @backstage/plugin-auth-backend-module-okta-provider@0.0.16-next.2
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.1.4-next.2
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.1.6-next.2
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.18-next.2
+ - @backstage/plugin-auth-backend-module-google-provider@0.1.20-next.2
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.1.16-next.2
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.1.15-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-backend@0.22.10-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.1.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.1.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.1.6-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.18-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.1.20-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-google-provider@0.1.20-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.1.18-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.1.16-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-backend@0.22.10-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.0.16-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.1.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.1.17-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/catalog-model@1.5.0
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.22-next.1
+
+### Patch Changes
+
+- 3fca643: Added method `listBranchesByRepository` to `BitbucketCloudClient`
+- Updated dependencies
+ - @backstage/integration@1.14.0-next.0
+
+## @backstage/plugin-catalog-backend@1.24.1-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/backend-openapi-utils@0.1.16-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-backend-module-aws@0.3.18-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-azure@0.1.43-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/backend-openapi-utils@0.1.16-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.2.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.1
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.37-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-gcp@0.1.24-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-kubernetes-common@0.8.2-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.1.40-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-github@0.6.6-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-catalog-backend@1.24.1-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-github-org@0.1.18-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-catalog-backend-module-github@0.6.6-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.3.22-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.0.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-catalog-backend-module-gitlab@0.3.22-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.4.28-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-catalog-backend@1.24.1-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-ldap@0.7.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-backend-module-logs@0.0.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-catalog-backend@1.24.1-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.5.31-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-catalog-backend@1.24.1-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.1.29-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/catalog-model@1.5.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.1.21-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.1
+ - @backstage/catalog-model@1.5.0
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-common@1.0.26-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/catalog-model@1.5.0
+
+## @backstage/plugin-catalog-graph@0.4.8-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+
+## @backstage/plugin-catalog-node@1.12.5-next.2
+
+### Patch Changes
+
+- 7c5f3b0: Explicit declare if the service ref accepts `single` or `multiple` implementations.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-react@1.12.3-next.2
+
+### Patch Changes
+
+- 012e3eb: Entity page extensions created for the new frontend system via the `/alpha` exports will now be enabled by default.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-catalog-unprocessed-entities-common@0.0.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+
+## @backstage/plugin-devtools@0.1.17-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-devtools-common@0.1.12-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-devtools-backend@0.3.9-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/plugin-devtools-common@0.1.12-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-devtools-common@0.1.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-events-backend@0.3.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.3.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-events-backend-module-azure@0.2.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+
+## @backstage/plugin-events-backend-module-github@0.2.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-test-utils@0.1.33-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.3.9-next.2
+
+## @backstage/plugin-events-node@0.3.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+
+## @backstage/plugin-home@0.7.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-home-react@0.1.16-next.0
+
+## @backstage/plugin-kubernetes@0.11.13-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-kubernetes-common@0.8.2-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-react@0.4.2-next.2
+
+## @backstage/plugin-kubernetes-backend@0.18.4-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 8c1aa06: Add `kubernetes.clusterLocatorMethods[].clusters[].customResources` to the configuration schema.
+ This was already documented and supported by the plugin.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-kubernetes-node@0.1.17-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-kubernetes-common@0.8.2-next.1
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-kubernetes-cluster@0.0.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-kubernetes-common@0.8.2-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-react@0.4.2-next.2
+
+## @backstage/plugin-kubernetes-common@0.8.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-kubernetes-node@0.1.17-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-kubernetes-common@0.8.2-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-kubernetes-react@0.4.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.8.2-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-notifications-backend@0.3.4-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-notifications-node@0.2.4-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/plugin-signals-node@0.1.9-next.2
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-notifications-backend-module-email@0.2.0-next.2
+
+### Patch Changes
+
+- cdb630d: Add support for stream transport for debugging purposes
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-notifications-node@0.2.4-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-notifications-node@0.2.4-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-signals-node@0.1.9-next.2
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-org@0.6.28-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-org-react@0.1.27-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-permission-backend@0.5.47-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+
+## @backstage/plugin-permission-common@0.8.1-next.1
+
+### Patch Changes
+
+- df784fe: Add the MetadataResponse type from @backstage/plugin-permission-node, since this
+ type might be used in frontend code.
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-permission-node@0.8.1-next.2
+
+### Patch Changes
+
+- df784fe: The MetadataResponse type has been moved to @backstage/plugin-permission-common
+ to match the recent move of MetadataResponseSerializedRule, and should be
+ imported from there going forward. To avoid an immediate breaking change, this
+ type is still re-exported from this package, but is marked as deprecated and
+ will be removed in a future release.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-permission-react@0.4.25-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-proxy-backend@0.5.4-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend@1.23.1-next.2
+
+### Patch Changes
+
+- c544f81: Add support for status filtering in scaffolder tasks endpoint
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13-next.2
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15-next.2
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.1.13-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.2
+ - @backstage/plugin-scaffolder-backend-module-azure@0.1.15-next.2
+ - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.2
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.2
+ - @backstage/plugin-scaffolder-common@1.5.5-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.1.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 3fca643: Added autocompletion support for resource `branches`
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.47-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.1.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.1.13-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.0.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/plugin-notifications-node@0.2.4-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.1.31-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 382e868: Added test cases for sentry:project:create examples
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.3.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.10-next.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-common@1.5.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-node@0.4.9-next.2
+
+### Patch Changes
+
+- c544f81: Add support for status filtering in scaffolder tasks endpoint
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-scaffolder-common@1.5.5-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-test-utils@0.4.5-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-react@1.11.0-next.2
+
+### Patch Changes
+
+- 072c00c: Fixed a bug in `DefaultTableOutputs` where output elements overlapped on smaller screen sizes
+- 04759f2: Fix null check in `isJsonObject` utility function for scaffolder review state component
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-search@1.4.15-next.2
+
+### Patch Changes
+
+- 3123c16: Fix package metadata
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-search-react@1.7.14-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-search-backend@1.5.15-next.2
+
+### Patch Changes
+
+- 3123c16: Fix package metadata
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2-next.2
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/backend-openapi-utils@0.1.16-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search-backend-module-catalog@0.1.29-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-explore@0.1.29-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-pg@0.5.33-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.16-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-module-techdocs@0.1.28-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-techdocs-node@1.12.9-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-search-backend-node@1.2.28-next.2
+
+### Patch Changes
+
+- 3123c16: Fix package metadata
+- 7c5f3b0: Explicit declare if the service ref accepts `single` or `multiple` implementations.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-search-common@1.2.14-next.1
+
+### Patch Changes
+
+- 3123c16: Fix package metadata
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search-react@1.7.14-next.2
+
+### Patch Changes
+
+- 3123c16: Fix package metadata
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-signals-backend@0.1.9-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/plugin-signals-node@0.1.9-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-node@0.1.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-techdocs@1.10.8-next.2
+
+### Patch Changes
+
+- 67e76f2: TechDocs now supports the `mkdocs-redirects` plugin. Redirects defined using the `mkdocs-redirect` plugin will be handled automatically in TechDocs. Redirecting to external urls is not supported. In the case that an external redirect url is provided, TechDocs will redirect to the current documentation site home.
+- bdc5471: Fixed issue where header styles were incorrectly generated when themes used CSS variables to define font size.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-search-react@1.7.14-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.37-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0-next.2
+ - @backstage/plugin-search-react@1.7.14-next.2
+ - @backstage/plugin-techdocs@1.10.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/test-utils@1.5.10-next.2
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## @backstage/plugin-techdocs-backend@1.10.10-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-techdocs-node@1.12.9-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+
+## @backstage/plugin-techdocs-node@1.12.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+
+## @backstage/plugin-user-settings@0.8.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.4
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.22-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-signals-node@0.1.9-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.100-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.11.0-next.2
+ - @backstage/plugin-catalog@1.22.0-next.2
+ - @backstage/cli@0.27.0-next.3
+ - @backstage/frontend-app-api@0.7.5-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-search-react@1.7.14-next.2
+ - @backstage/plugin-search@1.4.15-next.2
+ - @backstage/plugin-api-docs@0.11.8-next.2
+ - @backstage/plugin-techdocs@1.10.8-next.2
+ - @backstage/plugin-scaffolder@1.24.0-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-graph@0.4.8-next.3
+ - @backstage/plugin-catalog-import@0.12.2-next.2
+ - @backstage/plugin-org@0.6.28-next.2
+ - @backstage/plugin-user-settings@0.8.11-next.2
+ - @backstage/plugin-devtools@0.1.17-next.2
+ - @backstage/plugin-home@0.7.9-next.2
+ - @backstage/plugin-kubernetes@0.11.13-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.2
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## example-app-next@0.0.14-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.11.0-next.2
+ - @backstage/plugin-catalog@1.22.0-next.2
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/cli@0.27.0-next.3
+ - @backstage/frontend-app-api@0.7.5-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-app-visualizer@0.1.9-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-search-react@1.7.14-next.2
+ - @backstage/plugin-search@1.4.15-next.2
+ - @backstage/plugin-api-docs@0.11.8-next.2
+ - @backstage/plugin-techdocs@1.10.8-next.2
+ - @backstage/plugin-scaffolder@1.24.0-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-graph@0.4.8-next.3
+ - @backstage/plugin-catalog-import@0.12.2-next.2
+ - @backstage/plugin-org@0.6.28-next.2
+ - @backstage/plugin-user-settings@0.8.11-next.2
+ - @backstage/plugin-home@0.7.9-next.2
+ - @backstage/plugin-kubernetes@0.11.13-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.2
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## app-next-example-plugin@0.0.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-components@0.14.10-next.0
+
+## example-backend@0.0.29-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2-next.2
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-scaffolder-backend@1.23.1-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.2
+ - @backstage/plugin-search-backend-module-explore@0.1.29-next.2
+ - @backstage/plugin-notifications-backend@0.3.4-next.2
+ - @backstage/plugin-kubernetes-backend@0.18.4-next.2
+ - @backstage/plugin-permission-backend@0.5.47-next.2
+ - @backstage/plugin-devtools-backend@0.3.9-next.2
+ - @backstage/plugin-techdocs-backend@1.10.10-next.2
+ - @backstage/plugin-catalog-backend@1.24.1-next.2
+ - @backstage/plugin-signals-backend@0.1.9-next.2
+ - @backstage/plugin-proxy-backend@0.5.4-next.2
+ - @backstage/plugin-auth-backend@0.22.10-next.2
+ - @backstage/plugin-app-backend@0.3.72-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-backend@1.5.15-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.2
+ - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.2
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.2
+ - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.2
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.2
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.2
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.2
+ - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.2
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.2
+ - @backstage/catalog-model@1.5.0
+
+## example-backend-legacy@0.2.101-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.23.1-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.2
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.2
+ - @backstage/plugin-search-backend-module-explore@0.1.29-next.2
+ - @backstage/plugin-kubernetes-backend@0.18.4-next.2
+ - @backstage/plugin-permission-backend@0.5.47-next.2
+ - @backstage/plugin-devtools-backend@0.3.9-next.2
+ - @backstage/plugin-techdocs-backend@1.10.10-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-catalog-backend@1.24.1-next.2
+ - @backstage/plugin-signals-backend@0.1.9-next.2
+ - @backstage/plugin-proxy-backend@0.5.4-next.2
+ - @backstage/plugin-auth-backend@0.22.10-next.2
+ - @backstage/plugin-app-backend@0.3.72-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/plugin-search-backend-node@1.2.28-next.2
+ - @backstage/plugin-search-backend@1.5.15-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.2
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.2
+ - @backstage/plugin-events-backend@0.3.10-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.2
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.2
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.2
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.2
+ - @backstage/plugin-search-backend-module-pg@0.5.33-next.2
+ - @backstage/plugin-signals-node@0.1.9-next.2
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-client@1.6.5
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## e2e-test@0.2.19-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.18-next.3
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## techdocs-cli-embedded-app@0.2.99-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0-next.2
+ - @backstage/cli@0.27.0-next.3
+ - @backstage/plugin-techdocs@1.10.8-next.2
+ - @backstage/test-utils@1.5.10-next.2
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## @internal/plugin-todo-list-backend@1.0.30-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/errors@1.2.4
+
+## @internal/plugin-todo-list-common@1.0.21-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.1-next.1
diff --git a/docs/releases/v1.30.0-next.4-changelog.md b/docs/releases/v1.30.0-next.4-changelog.md
new file mode 100644
index 0000000000..433b5f894c
--- /dev/null
+++ b/docs/releases/v1.30.0-next.4-changelog.md
@@ -0,0 +1,2113 @@
+# Release v1.30.0-next.4
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.30.0-next.4](https://backstage.github.io/upgrade-helper/?to=1.30.0-next.4)
+
+## @backstage/catalog-model@1.6.0-next.0
+
+### Minor Changes
+
+- 34fa803: Introduce an optional spec.type attribute on the Domain and System entity kinds
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.2.0-next.3
+
+### Minor Changes
+
+- 75d026a: Support for Cloudflare Custom Headers and Custom Cookie Auth Name
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-notifications@0.3.0-next.1
+
+### Minor Changes
+
+- 0410fc9: By default, set notification as read when opening snackbar or web notification link
+
+### Patch Changes
+
+- 80b84f7: Fixed issue with notification reloading on page change
+- Updated dependencies
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-react@0.0.4
+
+## @backstage/plugin-scaffolder@1.24.0-next.3
+
+### Minor Changes
+
+- 1552c33: Changed the way to display entities in `MyGroupsPicker` to use `entityPresentationApi` and make it consistent across scaffolder pickers
+
+### Patch Changes
+
+- 47ed51b: Add an extra bit of height to the EntityPicker dropdown to make it clear there are more options to select from, and to remove the scroll bar when there is less than 10 options
+- d18f4eb: Fix undefined in the title of Scaffolder Runs on the page load
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.2
+ - @backstage/plugin-scaffolder-react@1.11.0-next.3
+
+## @backstage/backend-app-api@0.8.1-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-permission-node@0.8.1-next.3
+
+## @backstage/backend-common@0.23.4-next.3
+
+### Patch Changes
+
+- ddde5fe: Internal type refactor.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-dev-utils@0.1.4
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/backend-defaults@0.4.2-next.3
+
+### Patch Changes
+
+- 81f930a: use formatted query to prevent chance of SQL-injection
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-app-api@0.8.1-next.3
+ - @backstage/backend-dev-utils@0.1.4
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+ - @backstage/plugin-permission-node@0.8.1-next.3
+
+## @backstage/backend-dynamic-feature-service@0.2.16-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-app-api@0.8.1-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.23-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-catalog-backend@1.24.1-next.3
+ - @backstage/plugin-events-backend@0.3.10-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/backend-openapi-utils@0.1.16-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/errors@1.2.4
+
+## @backstage/backend-plugin-api@0.8.0-next.3
+
+### Patch Changes
+
+- ddde5fe: Fixed a type issue where plugin and modules depending on multiton services would not receive the correct type.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+
+## @backstage/backend-tasks@0.5.28-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-test-utils@0.4.5-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-defaults@0.4.2-next.3
+ - @backstage/backend-app-api@0.8.1-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/catalog-client@1.6.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/cli@0.27.0-next.4
+
+### Patch Changes
+
+- 6d898d8: Switched the `process` polyfill to use `require.resolve` for greater compatability.
+- 2ced236: Updated dependency `@module-federation/enhanced` to `0.3.1`
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/eslint-plugin@0.1.8
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/core-compat-api@0.2.8-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/create-app@0.5.18-next.4
+
+### Patch Changes
+
+- bfeba46: Included permission config and enabled it out of the box
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/dev-utils@1.0.37-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+
+## @backstage/frontend-app-api@0.7.5-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-plugin-api@0.7.0-next.3
+
+### Patch Changes
+
+- 6f72c2b: Fixing issue with extension blueprints `inputs` merging.
+
+- 99abb6b: Support overriding of plugin extensions using the new `plugin.withOverrides` method.
+
+ ```tsx
+ import homePlugin from '@backstage/plugin-home';
+
+ export default homePlugin.withOverrides({
+ extensions: [
+ homePage.getExtension('page:home').override({
+ *factory(originalFactory) {
+ yield* originalFactory();
+ yield coreExtensionData.reactElement(My custom home page );
+ },
+ }),
+ ],
+ });
+ ```
+
+- a65cfc8: Add support for accessing extensions definitions provided by a plugin via `plugin.getExtension(...)`. For this to work the extensions must be defined using the v2 format, typically using an extension blueprint.
+
+- 34f1b2a: Support merging of `inputs` in extension blueprints, but stop merging `output`. In addition, the original factory in extension blueprints now returns a data container that both provides access to the returned data, but can also be forwarded as output.
+
+- 2d21599: Added support for being able to override extension definitions.
+
+ ```tsx
+ const TestCard = EntityCardBlueprint.make({
+ ...
+ });
+
+ TestCard.override({
+ // override attachment points
+ attachTo: { id: 'something-else', input: 'overridden' },
+ // extend the config schema
+ config: {
+ schema: {
+ newConfig: z => z.string().optional(),
+ }
+ },
+ // override factory
+ *factory(originalFactory, { inputs, config }){
+ const originalOutput = originalFactory();
+
+ yield coreExentsionData.reactElement(
+
+ {originalOutput.get(coreExentsionData.reactElement)}
+
+ );
+ }
+ });
+
+ ```
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-test-utils@0.1.12-next.3
+
+### Patch Changes
+
+- 2d21599: Added support for being able to override extension definitions.
+
+ ```tsx
+ const TestCard = EntityCardBlueprint.make({
+ ...
+ });
+
+ TestCard.override({
+ // override attachment points
+ attachTo: { id: 'something-else', input: 'overridden' },
+ // extend the config schema
+ config: {
+ schema: {
+ newConfig: z => z.string().optional(),
+ }
+ },
+ // override factory
+ *factory(originalFactory, { inputs, config }){
+ const originalOutput = originalFactory();
+
+ yield coreExentsionData.reactElement(
+
+ {originalOutput.get(coreExentsionData.reactElement)}
+
+ );
+ }
+ });
+
+ ```
+
+- 264e10f: Deprecate existing `ExtensionCreators` in favour of their new Blueprint counterparts.
+
+- 264e10f: Refactor `.make` method on Blueprints into two different methods, `.make` and `.makeWithOverrides`.
+
+ When using `createExtensionBlueprint` you can define parameters for the factory function, if you wish to take advantage of these parameters you should use `.make` when creating an extension instance of a Blueprint. If you wish to override more things other than the standard `attachTo`, `name`, `namespace` then you should use `.makeWithOverrides` instead.
+
+ `.make` is reserved for simple creation of extension instances from Blueprints using higher level parameters, whereas `.makeWithOverrides` is lower level and you have more control over the final extension.
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/frontend-app-api@0.7.5-next.3
+ - @backstage/config@1.2.0
+ - @backstage/test-utils@1.5.10-next.2
+ - @backstage/types@1.1.1
+
+## @backstage/repo-tools@0.9.5-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.17-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.4.2-next.3
+ - @backstage/plugin-techdocs-node@1.12.9-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-api-docs@0.11.8-next.3
+
+### Patch Changes
+
+- 6582799: Add `tableOptions` to all tables and additionally `title` to API tables.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/plugin-catalog@1.22.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-permission-react@0.4.25-next.1
+
+## @backstage/plugin-app-backend@0.3.72-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.23-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-app-node@0.1.23-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config-loader@1.9.0-next.2
+
+## @backstage/plugin-app-visualizer@0.1.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-auth-backend@0.22.10-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.2.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.2.4-next.3
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.1.15-next.3
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.1.6-next.3
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.1.6-next.3
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.18-next.3
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.3
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.20-next.3
+ - @backstage/plugin-auth-backend-module-google-provider@0.1.20-next.3
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.1.18-next.3
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.2.4-next.3
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.1.16-next.3
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.2.4-next.3
+ - @backstage/plugin-auth-backend-module-okta-provider@0.0.16-next.3
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.1.4-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.2.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.1.15-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-backend@0.22.10-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.1.6-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.1.6-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.18-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.1.20-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-google-provider@0.1.20-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.1.18-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.2.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.1.16-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.2.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/plugin-auth-backend@0.22.10-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.0.16-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.1.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.1.17-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.2.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-auth-node@0.5.0-next.3
+
+## @backstage/plugin-auth-node@0.5.0-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog@1.22.0-next.3
+
+### Patch Changes
+
+- 6582799: Add `tableOptions` to all tables and additionally `title` to API tables.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/plugin-search-react@1.7.14-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-catalog-backend@1.24.1-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-openapi-utils@0.1.16-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.3
+
+## @backstage/plugin-catalog-backend-module-aws@0.3.18-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-kubernetes-common@0.8.2-next.2
+
+## @backstage/plugin-catalog-backend-module-azure@0.1.43-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-openapi-utils@0.1.16-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.2.10-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.37-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-catalog-backend-module-gcp@0.1.24-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-kubernetes-common@0.8.2-next.2
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.1.40-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-catalog-backend-module-github@0.6.6-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-backend@1.24.1-next.3
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-catalog-backend-module-github-org@0.1.18-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-backend-module-github@0.6.6-next.3
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.3.22-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.0.6-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/plugin-catalog-backend-module-gitlab@0.3.22-next.3
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.4.28-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-backend@1.24.1-next.3
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+
+## @backstage/plugin-catalog-backend-module-ldap@0.7.1-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-catalog-backend-module-logs@0.0.2-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-catalog-backend@1.24.1-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.5.31-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-backend@1.24.1-next.3
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.1.29-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-scaffolder-common@1.5.5-next.2
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.1
+
+## @backstage/plugin-catalog-common@1.0.26-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-catalog-graph@0.4.8-next.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.2-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+
+## @backstage/plugin-catalog-node@1.12.5-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+
+## @backstage/plugin-catalog-react@1.12.3-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+
+## @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-devtools@0.1.17-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-devtools-common@0.1.12-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+
+## @backstage/plugin-devtools-backend@0.3.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-devtools-common@0.1.12-next.1
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+
+## @backstage/plugin-events-backend@0.3.10-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.3.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-events-backend-module-azure@0.2.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-events-backend-module-github@0.2.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-events-backend-test-utils@0.1.33-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-events-node@0.3.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+
+## @backstage/plugin-home@0.7.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-home-react@0.1.16-next.0
+
+## @backstage/plugin-kubernetes@0.11.13-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-common@0.8.2-next.2
+ - @backstage/plugin-kubernetes-react@0.4.2-next.3
+
+## @backstage/plugin-kubernetes-backend@0.18.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.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.0-next.3
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-kubernetes-common@0.8.2-next.2
+ - @backstage/plugin-kubernetes-node@0.1.17-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+
+## @backstage/plugin-kubernetes-cluster@0.0.14-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-common@0.8.2-next.2
+ - @backstage/plugin-kubernetes-react@0.4.2-next.3
+
+## @backstage/plugin-kubernetes-common@0.8.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1-next.1
+
+## @backstage/plugin-kubernetes-node@0.1.17-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.2
+
+## @backstage/plugin-kubernetes-react@0.4.2-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2-next.2
+
+## @backstage/plugin-notifications-backend@0.3.4-next.3
+
+### Patch Changes
+
+- 7a05f50: Allow using notifications without users in the catalog
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.4-next.3
+ - @backstage/plugin-signals-node@0.1.9-next.3
+
+## @backstage/plugin-notifications-backend-module-email@0.2.0-next.3
+
+### Patch Changes
+
+- 83faf24: Notification email processor supports allowing or denying specific email addresses from receiving notifications
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.4-next.3
+
+## @backstage/plugin-notifications-node@0.2.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-node@0.1.9-next.3
+
+## @backstage/plugin-org@0.6.28-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+
+## @backstage/plugin-org-react@0.1.27-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-permission-backend@0.5.47-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+
+## @backstage/plugin-permission-node@0.8.1-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+
+## @backstage/plugin-proxy-backend@0.5.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend@1.23.1-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.3
+ - @backstage/plugin-scaffolder-backend-module-azure@0.1.15-next.3
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.3
+ - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.3
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.3
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15-next.3
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.1.13-next.3
+ - @backstage/plugin-scaffolder-common@1.5.5-next.2
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.1.15-next.3
+
+### Patch Changes
+
+- 187f583: Added examples for publish:azure action and updated its test cases
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.3
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.3
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.3
+
+### Patch Changes
+
+- d57967c: Add ability to set the initial commit message when initializing a repository using the scaffolder action.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22-next.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.47-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.1.1-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.1.13-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.3
+
+### Patch Changes
+
+- 6d4cb97: Added examples for github:repo:create action and improved test cases
+- cd203f1: Added examples for action github:pages and improved its test cases
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.3
+
+### Patch Changes
+
+- da97131: Added test cases for gitlab:issues:create examples
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.0.6-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.4-next.3
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.1.31-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.3.7-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.10-next.3
+
+## @backstage/plugin-scaffolder-common@1.5.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1-next.1
+
+## @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.2
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.10-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-test-utils@0.4.5-next.3
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.9-next.3
+
+## @backstage/plugin-scaffolder-react@1.11.0-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5-next.2
+
+## @backstage/plugin-search@1.4.15-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/plugin-search-react@1.7.14-next.3
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-backend@1.5.15-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-defaults@0.4.2-next.3
+ - @backstage/backend-openapi-utils@0.1.16-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-backend-module-catalog@0.1.29-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-backend-module-explore@0.1.29-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-backend-module-pg@0.5.33-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.16-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/plugin-techdocs-node@1.12.9-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-backend-node@1.2.28-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-search-react@1.7.14-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-search-common@1.2.14-next.1
+
+## @backstage/plugin-signals-backend@0.1.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+ - @backstage/plugin-signals-node@0.1.9-next.3
+
+## @backstage/plugin-signals-node@0.1.9-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## @backstage/plugin-techdocs@1.10.8-next.3
+
+### Patch Changes
+
+- 27794d1: Allow for more granular control of TechDocsReaderPage styling. Theme overrides can now be provided to TechDocs without affecting the theme in other areas of Backstage.
+- 8543e72: TechDocs redirect feature now includes a notification to the user before they are redirected.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/plugin-search-react@1.7.14-next.3
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.1
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.37-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.10.8-next.3
+ - @backstage/plugin-catalog@1.22.0-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/plugin-search-react@1.7.14-next.3
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/test-utils@1.5.10-next.2
+ - @backstage/plugin-techdocs-react@1.2.7-next.1
+
+## @backstage/plugin-techdocs-backend@1.10.10-next.3
+
+### Patch Changes
+
+- a16632c: Update configuration schema to match actual behavior
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/plugin-techdocs-node@1.12.9-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.1
+
+## @backstage/plugin-techdocs-node@1.12.9-next.3
+
+### Patch Changes
+
+- 5cedd9f: Fix TechDocs Edit URL for nested docs
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-techdocs-common@0.1.0-next.0
+
+## @backstage/plugin-techdocs-react@1.2.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-user-settings@0.8.11-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.4
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.22-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-signals-node@0.1.9-next.3
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.100-next.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder@1.24.0-next.3
+ - @backstage/plugin-notifications@0.3.0-next.1
+ - @backstage/cli@0.27.0-next.4
+ - @backstage/plugin-techdocs@1.10.8-next.3
+ - @backstage/plugin-api-docs@0.11.8-next.3
+ - @backstage/plugin-catalog@1.22.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/frontend-app-api@0.7.5-next.3
+ - @backstage/plugin-catalog-graph@0.4.8-next.4
+ - @backstage/plugin-catalog-import@0.12.2-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/plugin-devtools@0.1.17-next.3
+ - @backstage/plugin-home@0.7.9-next.3
+ - @backstage/plugin-kubernetes@0.11.13-next.3
+ - @backstage/plugin-org@0.6.28-next.3
+ - @backstage/plugin-search@1.4.15-next.3
+ - @backstage/plugin-search-react@1.7.14-next.3
+ - @backstage/plugin-user-settings@0.8.11-next.3
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.3
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.1
+ - @backstage/plugin-techdocs-react@1.2.7-next.1
+
+## example-app-next@0.0.14-next.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder@1.24.0-next.3
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/plugin-notifications@0.3.0-next.1
+ - @backstage/cli@0.27.0-next.4
+ - @backstage/plugin-techdocs@1.10.8-next.3
+ - @backstage/plugin-api-docs@0.11.8-next.3
+ - @backstage/plugin-catalog@1.22.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/frontend-app-api@0.7.5-next.3
+ - @backstage/plugin-app-visualizer@0.1.9-next.3
+ - @backstage/plugin-catalog-graph@0.4.8-next.4
+ - @backstage/plugin-catalog-import@0.12.2-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/plugin-home@0.7.9-next.3
+ - @backstage/plugin-kubernetes@0.11.13-next.3
+ - @backstage/plugin-org@0.6.28-next.3
+ - @backstage/plugin-search@1.4.15-next.3
+ - @backstage/plugin-search-react@1.7.14-next.3
+ - @backstage/plugin-user-settings@0.8.11-next.3
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.3
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.1
+ - @backstage/plugin-techdocs-react@1.2.7-next.1
+
+## app-next-example-plugin@0.0.14-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/core-components@0.14.10-next.0
+
+## example-backend@0.0.29-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.3
+ - @backstage/plugin-notifications-backend@0.3.4-next.3
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/plugin-techdocs-backend@1.10.10-next.3
+ - @backstage/backend-defaults@0.4.2-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-scaffolder-backend@1.23.1-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/plugin-app-backend@0.3.72-next.3
+ - @backstage/plugin-auth-backend@0.22.10-next.3
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.3
+ - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-catalog-backend@1.24.1-next.3
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.3
+ - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.3
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.3
+ - @backstage/plugin-devtools-backend@0.3.9-next.3
+ - @backstage/plugin-kubernetes-backend@0.18.4-next.3
+ - @backstage/plugin-permission-backend@0.5.47-next.3
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+ - @backstage/plugin-proxy-backend@0.5.4-next.3
+ - @backstage/plugin-search-backend@1.5.15-next.3
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.3
+ - @backstage/plugin-search-backend-module-explore@0.1.29-next.3
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-signals-backend@0.1.9-next.3
+
+## example-backend-legacy@0.2.101-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.3
+ - @backstage/plugin-techdocs-backend@1.10.10-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/plugin-scaffolder-backend@1.23.1-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/catalog-client@1.6.6-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-app-backend@0.3.72-next.3
+ - @backstage/plugin-auth-backend@0.22.10-next.3
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-catalog-backend@1.24.1-next.3
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.3
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-devtools-backend@0.3.9-next.3
+ - @backstage/plugin-events-backend@0.3.10-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+ - @backstage/plugin-kubernetes-backend@0.18.4-next.3
+ - @backstage/plugin-permission-backend@0.5.47-next.3
+ - @backstage/plugin-permission-common@0.8.1-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.3
+ - @backstage/plugin-proxy-backend@0.5.4-next.3
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.3
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.3
+ - @backstage/plugin-search-backend@1.5.15-next.3
+ - @backstage/plugin-search-backend-module-catalog@0.1.29-next.3
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.3
+ - @backstage/plugin-search-backend-module-explore@0.1.29-next.3
+ - @backstage/plugin-search-backend-module-pg@0.5.33-next.3
+ - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3
+ - @backstage/plugin-search-backend-node@1.2.28-next.3
+ - @backstage/plugin-signals-backend@0.1.9-next.3
+ - @backstage/plugin-signals-node@0.1.9-next.3
+
+## e2e-test@0.2.19-next.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.18-next.4
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## techdocs-cli-embedded-app@0.2.99-next.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.0-next.4
+ - @backstage/plugin-techdocs@1.10.8-next.3
+ - @backstage/plugin-catalog@1.22.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/test-utils@1.5.10-next.2
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-techdocs-react@1.2.7-next.1
+
+## @internal/plugin-todo-list-backend@1.0.30-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-node@0.5.0-next.3
diff --git a/docs/releases/v1.30.0.md b/docs/releases/v1.30.0.md
new file mode 100644
index 0000000000..0d3ad1dd5b
--- /dev/null
+++ b/docs/releases/v1.30.0.md
@@ -0,0 +1,117 @@
+---
+id: v1.30.0
+title: v1.30.0
+description: Backstage Release v1.30.0
+---
+
+These are the release notes for the v1.30.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
+
+### New Frontend System - Plugin Adoption
+
+This release marks another big milestone for the New Frontend System. **We encourage all plugin owners to [add support for the new frontend system](https://backstage.io/docs/frontend-system/building-plugins/migrating) to their plugins.**
+
+At the end of last year in the [1.21 release](https://backstage.io/docs/releases/v1.21.0), we shipped the New Frontend System Alpha. It marked a more stable release of the new system, but we knew there was still much more work left to be done. Since then we have received valuable feedback and identified key areas of improvement. In particular around the creation of new extension kinds as well as overriding and testing of extensions.
+
+Over the summer months we’ve been working hard towards addressing this feedback and getting the New Frontend System in shape for us to be confident in encouraging broader adoption by plugins. For a summary of the changes you can check out the [1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130), or can see the ongoing progress in the [meta issue](https://github.com/backstage/backstage/issues/19545). With this release comes some new features, deprecations and breaking changes in the `@backstage/frontend-app-api`, `@backstage/frontend-plugin-api`, and `@backstage/core-compat-api` packages.```
+
+**Breaking**:
+
+- All types of route references in the New Frontend System are now optional. This means that all usages of `useRouteRef` in the new system might return `undefined`, and your code must be able to act accordingly. Code that uses the old system (which will be the vast majority of code at this point) is **not** affected by this.
+
+**New**:
+
+- Blueprints and `createExtensionBlueprint` as a replacement for extension creators. You will find that old extension creators are marked as deprecated, and point to the corresponding blueprints which have a superior developer experience!
+- Ability to override individual extensions using `extension.override(...)`, as well as overriding extensions in a plugin using a combination of `plugin.withOverrides([...])` and `plugin.getExtension(id)` to replace individual extensions or add new ones.
+- `createExtensionTester` supports `.get` and `.query` to directly access extension data and streamline tests decoupled from React, as well as a `.reactElement` shorthand for accessing any output React elements.
+- A new set of utilities that can patch support for the new frontend system for a plugin that otherwise only supports the old one. The new `convertLegacyPlugin` is used to convert a plugin instance, while `convertLegacyPageExtension` with friends can convert extensions from the old system.
+
+**Deprecations**:
+
+- `createPlugin` has been renamed to `createFrontendPlugin`
+- `createExtension` with object keys for `inputs` and `outputs` has been deprecated in favor of the array form.
+- `configSchema` in `createExtension` has been replaced with `config.schema` which is a better alternative to declaring config for extensions without having to use `createSchemaFromZod`.
+- Existing `dataRefs` should now embed the ID using the `.with` method.
+- The `render` method on `createExtensionTester` has been deprecated in favor of composing `.reactElement` with `renderInTestApp`.
+
+### BREAKING: Backend System deprecations and removals
+
+- Almost all service factories in `@backstage/backend-app-api` were marked deprecated some time back - those are now removed. Please import them from their new homes in `@backstage/backend-defaults/` instead.
+- In our effort to migrate to the new backend system some backend-plugins `createRouter` exports have been marked as deprecated. Please make sure to update your backends accordingly as `createRouter` will eventually be removed from all plugin exports.
+- Several deprecated methods and types have been removed from backend related packages. Most of these are either renamed and re-exported from other packages, see the CHANGELOG for the individual package for more information.
+
+Most notably the long deprecated `UrlReader` exports have been renamed:
+
+- `ReadUrlOptions`: Use `UrlReaderServiceReadUrlOptions` instead;
+- `ReadUrlResponse`: Use `UrlReaderServiceReadUrlResponse` instead;
+- `ReadTreeOptions`: Use `UrlReaderServiceReadTreeOptions` instead;
+- `ReadTreeResponse`: Use `UrlReaderServiceReadTreeResponse` instead;
+- `ReadTreeResponseFile`: Use `UrlReaderServiceReadTreeResponseFile` instead;
+- `ReadTreeResponseDirOptions`: Use `UrlReaderServiceReadTreeResponseDirOptions` instead;
+- `SearchOptions`: Use `UrlReaderServiceSearchOptions` instead;
+- `SearchResponse`: Use `UrlReaderServiceSearchResponse` instead;
+- `SearchResponseFile`: Use `UrlReaderServiceSearchResponseFile` instead.
+
+### BREAKING: Auth Sign In Resolver Priority
+
+Sign-in resolvers configured via `.signIn.resolvers` in your app-config now take precedence over sign-in resolvers passed to `signInResolver` option of `createOAuthProviderFactory`. This effectively makes sign-in resolvers passed via the `signInResolver` the default ones, which you can then override through configuration, simplifying deploying the same code in multiple environments.
+
+### BREAKING: `@backstage/cli`
+
+The lockfile (`yarn.lock`) dependency analysis and mutations have been removed from several commands. This means that `versions:bump` will no longer attempt to deduplicate after bumping and modifying the lockfile.
+
+The `versions:check` command has also been removed as its only purpose was to verify and mutate the lockfile. We recommend using the `yarn dedupe` command instead, or the `yarn-deduplicate` package if you're using Yarn classic, as a replacement. This change was made in order for us to support other Package Managers in the future and remove the coupling with `yarn`.
+
+### BREAKING: `@backstage/backend-test-utils`
+
+- `setupRequestMockHandlers` is removed; use `registerMswTestHooks` instead.
+- `MockDirectoryOptions` is removed; use `CreateMockDirectoryOptions` instead.
+- Stopped exporting the deprecated and internal `isDockerDisabledForTests` helper.
+- Removed `get` method from `ServiceFactoryTester` which is replaced by `getSubject`
+
+### Scaffolder Internationalization
+
+Thanks to [@mario-mui](https://github.com/mario-mui) we now have i18n support for another core feature! Contributed in [#25827](https://github.com/backstage/backstage/pull/25827)
+
+### Dynamic Backend Feature Loaders
+
+You can now use `createBackendFeatureLoader` to dynamically load features in the backend, for example based on runtime configuration, and many other exciting possibilities. Check out [the docs](https://backstage.io/docs/backend-system/architecture/feature-loaders)!
+
+## Security Fixes
+
+The AWS ALB auth provider now has a configuration option `signer`, which should be set to the ARN of your ALB instance. We strongly recommend that you set this configuration value, since it will help strengthen your installation.
+
+Example:
+
+```diff
+ auth:
+ providers:
+ awsalb:
+ issuer: ...
+ # put your actual ARN here
++ signer: 'arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/my-load-balancer/1234567890123456'
+ region: ...
+ signIn:
+ resolvers:
+ - resolver: ...
+```
+
+## 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.30.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.31.0-changelog.md b/docs/releases/v1.31.0-changelog.md
new file mode 100644
index 0000000000..9f0868c042
--- /dev/null
+++ b/docs/releases/v1.31.0-changelog.md
@@ -0,0 +1,3633 @@
+# Release v1.31.0
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.31.0](https://backstage.github.io/upgrade-helper/?to=1.31.0)
+
+## @backstage/backend-app-api@1.0.0
+
+### Major Changes
+
+- ec1b4be: Release 1.0 of the new backend system! :tada:
+
+ The backend system is finally getting promoted to 1.0.0. This means that the API is now stable and breaking changes should not occur until version 2.0.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information what this means.
+
+ This release also marks the end of the old backend system based on `createRouter` exports. Going forward backend plugins packages will start to deprecate and later this year remove exports supporting the old backend system. If you would like to help out with this transition, see or consult the [migration guide](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating/#remove-support-for-the-old-backend-system).
+
+### Minor Changes
+
+- 19ff127: **BREAKING**: The deprecated `identityServiceFactory` and `tokenManagerServiceFactory` have been removed.
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- cd38da8: Deprecate the `featureDiscoveryServiceFactory` in favor of using `@backstage/backend-defaults#discoveryFeatureLoader` instead.
+- 8ccf784: All created backend instances now share a the same `process` exit listeners, and on exit the process will wait for all backend instances to shut down before exiting. This fixes the `EventEmitter` leak warnings in tests.
+- 6ed9264: chore(deps): bump `path-to-regexp` from 6.2.2 to 8.0.0
+- c246372: Updated the error message for missing service dependencies to include the plugin and module IDs.
+- 7f779c7: `auth.externalAccess` should be optional in the config schema
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- 51a69b5: Fix feature loaders in CJS double-default nested builds
+- 0b2a402: Updates to the config schema to match reality
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/config-loader@1.9.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-plugin-api@1.0.0
+
+### Major Changes
+
+- ec1b4be: Release 1.0 of the new backend system! :tada:
+
+ The backend system is finally getting promoted to 1.0.0. This means that the API is now stable and breaking changes should not occur until version 2.0.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information what this means.
+
+ This release also marks the end of the old backend system based on `createRouter` exports. Going forward backend plugins packages will start to deprecate and later this year remove exports supporting the old backend system. If you would like to help out with this transition, see or consult the [migration guide](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating/#remove-support-for-the-old-backend-system).
+
+### Minor Changes
+
+- 19ff127: **BREAKING**: The deprecated identity and token manager services have been removed. This means that `coreServices.identity` and `coreServices.tokenManager` are gone, along with related types and utilities in other packages.
+
+- f687050: Removed the following deprecated exports
+
+ - `BackendPluginConfig` use `CreateBackendPluginOptions`
+ - `BackendModuleConfig` use `CreateBackendModuleOptions`
+ - `ExtensionPointConfig` use `CreateExtensionPointOptions`
+
+- 4d82481: Removed deprecated `ServiceFactoryOrFunction` type.
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- cd38da8: Deprecate the `featureDiscoveryServiceRef` in favor of using the new `discoveryFeatureLoader` instead.
+- 8052b9b: Add a `toJSON` on refs so that they can appear in expectations in jest tests
+- 66dbf0a: Allow the cache service to accept the human duration format for TTL
+- 0b2a402: Updates to the config schema to match reality
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2
+ - @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.0
+
+### Major Changes
+
+- ec1b4be: Release 1.0 of the new backend system! :tada:
+
+ The backend system is finally getting promoted to 1.0.0. This means that the API is now stable and breaking changes should not occur until version 2.0.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information what this means.
+
+ This release also marks the end of the old backend system based on `createRouter` exports. Going forward backend plugins packages will start to deprecate and later this year remove exports supporting the old backend system. If you would like to help out with this transition, see or consult the [migration guide](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating/#remove-support-for-the-old-backend-system).
+
+### Minor Changes
+
+- 19ff127: **BREAKING**: Removed service mocks for the identity and token manager services, which have been removed from `@backstage/backend-plugin-api`.
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 710f621: Added missing service mock for `mockServices.rootConfig.mock`, and fixed the definition of `mockServices.rootHttpRouter.factory` to not have a duplicate callback.
+- f421d2a: Make MySQL pool settings a bit more lax
+- 0363bf1: There is a new `mockErrorHandler` utility to help in mocking the error middleware in tests.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-app-api@1.0.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-common@0.25.0
+
+### Minor Changes
+
+- a4bac3c: **BREAKING**: You can no longer supply a `basePath` option to the host discovery implementation. In the new backend system, the ability to choose this path has been removed anyway at the plugin router level.
+
+- 988c145: **BREAKING**: Simplifications and cleanup as part of the Backend System 1.0 work.
+
+ - The deprecated `dropDatabase` function has now been removed, without replacement.
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 6ed9264: chore(deps): bump `path-to-regexp` from 6.2.2 to 8.0.0
+- 8ba77ed: The `legacyPlugin` and `makeLegacyPlugin` helpers now provide their own shim implementation of the identity and token manager services, as these services are being removed from the new backend system.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 2e9ec14: Add `pg-format` as a dependency
+- 82539fe: Updated dependency `archiver` to `^7.0.0`.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- 3606843: Internal fixes to match `testcontainers` update
+- 19ff127: Internal refactor to re-declare the token manager service which was removed from `@backstage/backend-plugin-api`, but is still supported in this package for backwards compatibility.
+- 66dbf0a: Allow the cache service to accept the human duration format for TTL
+- 0b2a402: Updates to the config schema to match reality
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/integration@1.15.0
+ - @backstage/config-loader@1.9.1
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+
+## @backstage/backend-defaults@0.5.0
+
+### Minor Changes
+
+- a4bac3c: **BREAKING**: You can no longer supply a `basePath` option to the host discovery implementation. In the new backend system, the ability to choose this path has been removed anyway at the plugin router level.
+
+- 359fcd7: **BREAKING**: The backwards compatibility with plugins using legacy auth through the token manager service has been removed. This means that instead of falling back to using the old token manager, requests towards plugins that don't support the new auth system will simply fail. Please make sure that all plugins in your deployment are hosted within a backend instance from the new backend system.
+
+- baeef13: **BREAKING** Removed `createLifecycleMiddleware` and `LifecycleMiddlewareOptions` to clean up API surface. These exports have no external usage and do not provide value in its current form. If you were using these exports, please reach out to the maintainers to discuss your use case.
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+- 19ff127: **BREAKING**: The default backend instance no longer provides implementations for the identity and token manager services, which have been removed from `@backstage/backend-plugin-api`.
+
+ If you rely on plugins that still require these services, you can add them to your own backend by re-creating the service reference and factory.
+
+ The following can be used to implement the identity service:
+
+ ```ts
+ import {
+ coreServices,
+ createServiceFactory,
+ createServiceRef,
+ } from '@backstage/backend-plugin-api';
+ import {
+ DefaultIdentityClient,
+ IdentityApi,
+ } from '@backstage/plugin-auth-node';
+
+ backend.add(
+ createServiceFactory({
+ service: createServiceRef({ id: 'core.identity' }),
+ deps: {
+ discovery: coreServices.discovery,
+ },
+ async factory({ discovery }) {
+ return DefaultIdentityClient.create({ discovery });
+ },
+ }),
+ );
+ ```
+
+ The following can be used to implement the token manager service:
+
+ ```ts
+ import { ServerTokenManager, TokenManager } from '@backstage/backend-common';
+ import { createBackend } from '@backstage/backend-defaults';
+ import {
+ coreServices,
+ createServiceFactory,
+ createServiceRef,
+ } from '@backstage/backend-plugin-api';
+
+ backend.add(
+ createServiceFactory({
+ service: createServiceRef({ id: 'core.tokenManager' }),
+ deps: {
+ config: coreServices.rootConfig,
+ logger: coreServices.rootLogger,
+ },
+ createRootContext({ config, logger }) {
+ return ServerTokenManager.fromConfig(config, {
+ logger,
+ allowDisabledTokenManager: true,
+ });
+ },
+ async factory(_deps, tokenManager) {
+ return tokenManager;
+ },
+ }),
+ );
+ ```
+
+- 055b75b: **BREAKING**: Simplifications and cleanup as part of the Backend System 1.0 work.
+
+ For the `/database` subpath exports:
+
+ - The deprecated `dropDatabase` function has now been removed, without replacement.
+ - The deprecated `LegacyRootDatabaseService` type has now been removed.
+ - The return type from `DatabaseManager.forPlugin` is now directly a `DatabaseService`, as arguably expected.
+ - `DatabaseManager.forPlugin` now requires the `deps` argument, with the logger and lifecycle services.
+
+ For the `/cache` subpath exports:
+
+ - The `PluginCacheManager` type has been removed. You can still import it from `@backstage/backend-common`, but it's deprecated there, and you should move off of that package by migrating fully to the new backend system.
+ - Accordingly, `CacheManager.forPlugin` immediately returns a `CacheService` instead of a `PluginCacheManager`. The outcome of this is that you no longer need to make the extra `.getClient()` call. The old `CacheManager` with the old behavior still exists on `@backstage/backend-common`, but the above recommendations apply.
+
+### Patch Changes
+
+- 213664e: Fixed an issue where the `useRedisSets` configuration for the cache service would have no effect.
+
+- 6ed9264: chore(deps): bump `path-to-regexp` from 6.2.2 to 8.0.0
+
+- 622360e: Move down the discovery config to be in the root
+
+- 7f779c7: `auth.externalAccess` should be optional in the config schema
+
+- fe6fd8c: Accept `ConfigService` instead of `Config` in constructors/factories
+
+- 82539fe: Updated dependency `archiver` to `^7.0.0`.
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+
+- 5705424: Wrap scheduled tasks from the scheduler core service now in OpenTelemetry spans
+
+- 7a72ec8: Exports the `discoveryFeatureLoader` as a replacement for the deprecated `featureDiscoveryService`.
+ The `discoveryFeatureLoader` is a new backend system [feature loader](https://backstage.io/docs/backend-system/architecture/feature-loaders/) that discovers backend features from the current `package.json` and its dependencies.
+ Here is an example using the `discoveryFeatureLoader` loader in a new backend instance:
+
+ ```ts
+ import { createBackend } from '@backstage/backend-defaults';
+ import { discoveryFeatureLoader } from '@backstage/backend-defaults';
+ //...
+
+ const backend = createBackend();
+ //...
+ backend.add(discoveryFeatureLoader);
+ //...
+ backend.start();
+ ```
+
+- b2a329d: Properly indent the config schema
+
+- 66dbf0a: Allow the cache service to accept the human duration format for TTL
+
+- 5a8fcb4: Added the option to skip database migrations by setting `skipMigrations: true` in config. This can be done globally in the database config or by plugin id.
+
+- 0b2a402: Updates to the config schema to match reality
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-app-api@1.0.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/cli-node@0.2.8
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/integration@1.15.0
+ - @backstage/config-loader@1.9.1
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+
+## @backstage/backend-dynamic-feature-service@0.4.0
+
+### Minor Changes
+
+- 9080f57: **BREAKING**: `dynamicPluginsServiceFactory` is no longer callable as a function. If you need to provide options to make a custom factory, use `dynamicPluginsSchemasServiceFactoryWithOptions` instead.
+
+### Patch Changes
+
+- cd38da8: Deprecate the `dynamicPluginsServiceRef`, `dynamicPluginsServiceFactory` and `dynamicPluginsServiceFactoryWithOptions` in favor of using the `dynamicPluginsFeatureDiscoveryLoader` to discover dynamic features in a new backend system.
+
+ See usage examples below:
+
+ Example using the `dynamicPluginsFeatureDiscoveryLoader` loader in a backend instance:
+
+ ```ts
+ import { createBackend } from '@backstage/backend-defaults';
+ import { dynamicPluginsFeatureDiscoveryLoader } from '@backstage/backend-dynamic-feature-service';
+ //...
+
+ const backend = createBackend();
+ backend.add(dynamicPluginsFeatureDiscoveryLoader);
+ //...
+ backend.start();
+ ```
+
+ Passing options to the `dynamicPluginsFeatureDiscoveryLoader` loader in a backend instance:
+
+ ```ts
+ import { createBackend } from '@backstage/backend-defaults';
+ import { dynamicPluginsFeatureDiscoveryLoader } from '@backstage/backend-dynamic-feature-service';
+ import { myCustomModuleLoader } from './myCustomModuleLoader';
+ //...
+
+ const backend = createBackend();
+ backend.add(
+ dynamicPluginsFeatureDiscoveryLoader({
+ moduleLoader: myCustomModuleLoader,
+ }),
+ );
+ //...
+ backend.start();
+ ```
+
+- e27f889: Relax type check for a plugin's default export to also accept a BackendFeature defined as a function instead of an object
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-app-api@1.0.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-catalog-backend@1.26.0
+ - @backstage/plugin-app-node@0.1.25
+ - @backstage/cli-node@0.2.8
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/plugin-events-backend@0.3.12
+ - @backstage/config-loader@1.9.1
+ - @backstage/plugin-events-node@0.4.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/plugin-scaffolder-node@0.4.11
+ - @backstage/plugin-search-backend-node@1.3.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/catalog-client@1.7.0
+
+### Minor Changes
+
+- 78475c3: Allow offset mode paging in entity list provider
+- 29e57c7: Add catalog service mocks under the `/testUtils` subpath export.
+
+### Patch Changes
+
+- 1882cfe: Moved `getEntities` ordering to utilize database instead of having it inside catalog client
+
+ Please note that the latest version of `@backstage/catalog-client` will not order the entities in the same way as before. This is because the ordering is now done in the database query instead of in the client. If you rely on the ordering of the entities, you may need to update your backend plugin or code to handle this change.
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+
+## @backstage/catalog-model@1.7.0
+
+### Minor Changes
+
+- 74acf06: Add `dependencyOf` prop to catalog model for Component kind to enable building relationship graphs with both directions using `dependsOn` and `dependencyOf`.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/core-app-api@1.15.0
+
+### Minor Changes
+
+- ddbeace: Added the ability to explicitly disable routes through the `bindRoutes` option by passing `false` as the route target. This also fixes a bug where route bindings in config were incorrectly prioritized above the ones in code in certain situations.
+
+### Patch Changes
+
+- ea69e46: The `defaultConfigLoader` now also reads configuration from scripts tags with `type="backstage.io/config"`. The tag is expected to contain a JSON-serialized array of `AppConfig` objects. If any of these script tags are present, the injected runtime configuration in the static assets will no longer be used.
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/version-bridge@1.0.9
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/core-compat-api@0.3.0
+
+### Minor Changes
+
+- 6db849e: **BREAKING**: The `namespace` parameter for API's is now defaulted to the `pluginId` which was discovered. This means that if you're overriding API's by using ID's directly, they might have changed to include the plugin ID too.
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- c816e2d: Added support for new `FrontendPlugin` and `FrontendModule` types.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/core-components@0.15.0
+
+### Minor Changes
+
+- 9adc552: Added missing items to `overridableComponents`
+
+ **BREAKING** Overridable component name for styling `OAuthRequestDialog` changed to `BackstageOAuthRequestDialog`. Overridable component name `BackstageMissingAnnotationEmptyState` that was previously deprecated has been removed.
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- 0944334: Removed default title set to Unknown page on `ContentHeaderTitle` component to support usage of component without title prop.
+- f325258: Use getOptionalString for optional app.support.items\[].links\[].title
+- af4c146: Support menu items should not be buttons in favour of links
+- 107a147: Fixed `Table` width being overridden by custom `style` prop.
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 06b8206: Added `titleComponent` prop to `SignInPage` component to allow further customization of the title using `ReactNode`
+- dbbd93e: Internal update to match recent React types
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/version-bridge@1.0.9
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/dev-utils@1.1.0
+
+### Minor Changes
+
+- 10b1452: Allow using translations in `createDevApp`
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/core-app-api@1.15.0
+ - @backstage/integration-react@1.1.31
+ - @backstage/catalog-model@1.7.0
+ - @backstage/app-defaults@1.5.11
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+
+## @backstage/frontend-app-api@0.9.0
+
+### Minor Changes
+
+- 7c80650: **BREAKING**: The `createSpecializedApp` function now creates a bare-bones app without any of the default app structure or APIs. To re-introduce this functionality if you need to use `createSpecializedApp` you can install the `app` plugin from `@backstage/plugin-app`.
+
+ In addition, the `createApp` and `CreateAppFeatureLoader` exports are now deprecated as they are being moved to `@backstage/frontend-defaults`, which should be used instead.
+
+- 62cce6c: Removed deprecated `icons` property passing to `createApp` and `createSpecializedApp`. Use `IconBundleBlueprint.make` to create extensions instead and include them in the app.
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+
+- 2bb9517: Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding.
+
+- c816e2d: Added support for new `FrontendPlugin` and `FrontendModule` types.
+
+- f3a2b91: Moved several implementations of built-in APIs from being hardcoded in the app to instead be provided as API extensions. This moves all API-related inputs from the `app` extension to the respective API extensions. For example, extensions created with `ThemeBlueprint` are now attached to the `themes` input of `api:app-theme` rather than the `app` extension.
+
+- 0c70949: Reverse the order of API factory initialization in order to make sure that overrides from modules take priority
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+- 5446061: Internal refactor following removal of v1 extension support. The app implementation itself still supports v1 extensions at runtime.
+
+- 948d431: Removing deprecated `namespace` parameter in favour of `pluginId` instead
+
+- ddbeace: Added the ability to explicitly disable routes through the `bindRoutes` option by passing `false` as the route target. This also fixes a bug where route bindings in config were incorrectly prioritized above the ones in code in certain situations.
+
+- 98850de: Added support for defining `replaces` in `createExtensionInput` which will allow extensions to redirect missing `attachTo` points to an input of the created extension.
+
+ ```ts
+ export const AppThemeApi = ApiBlueprint.makeWithOverrides({
+ name: 'app-theme',
+ inputs: {
+ themes: createExtensionInput([ThemeBlueprint.dataRefs.theme], {
+ // attachTo: { id: 'app', input: 'themes'} will be redirected to this input instead
+ replaces: [{ id: 'app', input: 'themes' }],
+ }),
+ },
+ factory: () {
+ ...
+ }
+ });
+ ```
+
+- 4a66456: Added the `root` extension the replace the `app` extension as the root of the app.
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-app-api@1.15.0
+ - @backstage/frontend-defaults@0.1.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/version-bridge@1.0.9
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-defaults@0.1.0
+
+### Minor Changes
+
+- 7c80650: Initial release of this package, which provides a default app setup through the `createApp` function. This replaces the existing `createApp` method from `@backstage/frontend-app-api`.
+
+### Patch Changes
+
+- 7d19cd5: Added a new `CreateAppOptions` type for the `createApp` options.
+- 7d19cd5: Added `createPublicSignInApp`, used to creating apps for the public entry point.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/frontend-app-api@0.9.0
+ - @backstage/plugin-app@0.1.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/frontend-plugin-api@0.8.0
+
+### Minor Changes
+
+- 5446061: **BREAKING**: Removed support for "v1" extensions. This means that it is no longer possible to declare inputs and outputs as objects when using `createExtension`. In addition, all extension creators except for `createComponentExtension` have been removed, use the equivalent blueprint instead. See the [1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations/#130) for more information on this change.
+- fec8b57: **BREAKING**: Updated the type parameters for `ExtensionDefinition` and `ExtensionBlueprint` to only have a single object parameter. The base type parameter is exported as `ExtensionDefinitionParameters` and `ExtensionBlueprintParameters` respectively. This is shipped as an immediate breaking change as we expect usage of these types to be rare, and it does not affect the runtime behavior of the API.
+
+ This is a breaking change as it changes the type parameters. Existing usage can generally be updated as follows:
+
+ - `ExtensionDefinition` -> `ExtensionDefinition`
+ - `ExtensionDefinition` -> `ExtensionDefinition`
+ - `ExtensionDefinition` -> `ExtensionDefinition<{ config: TConfig }>`
+ - `ExtensionDefinition` -> `ExtensionDefinition<{ config: TConfig, configInput: TConfigInput }>`
+
+ If you need to infer the parameter you can use `ExtensionDefinitionParameters`, for example:
+
+ ```ts
+ import {
+ ExtensionDefinition,
+ ExtensionDefinitionParameters,
+ } from '@backstage/frontend-plugin-api';
+
+ function myUtility(
+ ext: ExtensionDefinition,
+ ): T['config'] {
+ // ...
+ }
+ ```
+
+ The same patterns apply to `ExtensionBlueprint`.
+
+ This change is made to improve the readability of API references and ability to evolve the type parameters in the future.
+
+### Patch Changes
+
+- 2bb9517: Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding.
+
+- c816e2d: Added `createFrontendModule` as a replacement for `createExtensionOverrides`, which is now deprecated.
+
+ Deprecated the `BackstagePlugin` and `FrontendFeature` type in favor of `FrontendPlugin` and `FrontendFeature` from `@backstage/frontend-app-api` respectively.
+
+- 52f9c5a: Deprecated the `namespace` option for `createExtensionBlueprint` and `createExtension`, these are no longer required and will default to the `pluginId` instead.
+
+ You can migrate some of your extensions that use `createExtensionOverrides` to using `createFrontendModule` instead and providing a `pluginId` there.
+
+ ```ts
+ // Before
+ createExtensionOverrides({
+ extensions: [
+ createExtension({
+ name: 'my-extension',
+ namespace: 'my-namespace',
+ kind: 'test',
+ ...
+ })
+ ],
+ });
+
+ // After
+ createFrontendModule({
+ pluginId: 'my-namespace',
+ extensions: [
+ createExtension({
+ name: 'my-extension',
+ kind: 'test',
+ ...
+ })
+ ],
+ });
+ ```
+
+- f3a2b91: Moved several implementations of built-in APIs from being hardcoded in the app to instead be provided as API extensions. This moves all API-related inputs from the `app` extension to the respective API extensions. For example, extensions created with `ThemeBlueprint` are now attached to the `themes` input of `api:app-theme` rather than the `app` extension.
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+- 948d431: Removing deprecated `namespace` parameter in favour of `pluginId` instead
+
+- 043d7cd: Internal refactor
+
+- 220f4f7: Remove unnecessary config object on IconBundleBlueprint
+
+- 2a61422: The `factory` option is no longer required when overriding an extension.
+
+- 98850de: Added support for defining `replaces` in `createExtensionInput` which will allow extensions to redirect missing `attachTo` points to an input of the created extension.
+
+ ```ts
+ export const AppThemeApi = ApiBlueprint.makeWithOverrides({
+ name: 'app-theme',
+ inputs: {
+ themes: createExtensionInput([ThemeBlueprint.dataRefs.theme], {
+ // attachTo: { id: 'app', input: 'themes'} will be redirected to this input instead
+ replaces: [{ id: 'app', input: 'themes' }],
+ }),
+ },
+ factory: () {
+ ...
+ }
+ });
+ ```
+
+- 4a66456: A new `apis` parameter has been added to `factory` for extensions. This is a way to access utility APIs without being coupled to the React context.
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/version-bridge@1.0.9
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-test-utils@0.2.0
+
+### Minor Changes
+
+- 5446061: Removed support for testing "v1" extensions, where outputs are defined as an object rather than an array.
+- e6e488c: **BREAKING**: The deprecated `.render()` method has been removed from the extension tester.
+
+### Patch Changes
+
+- 2a61422: The extension tester will no longer unconditionally enable any additional extensions that have been added.
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 4a66456: Internal update to add support for passing an `ApiRegistry` when creating the node tree
+- 2bb9517: Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 948d431: Removing deprecated `namespace` parameter in favour of `pluginId` instead
+- 043d7cd: Internal refactor
+- f6d1874: Added the ability to provide additional `extensions` and `features` to `renderInTestApp`
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/frontend-app-api@0.9.0
+ - @backstage/plugin-app@0.1.0
+ - @backstage/test-utils@1.6.0
+ - @backstage/version-bridge@1.0.9
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/integration@1.15.0
+
+### Minor Changes
+
+- 1573014: The Gerrit integration can now resolve Gitiles urls that point to the following
+ refs:
+
+ - HEAD
+ - A SHA
+ - Tag
+ - Branch
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/test-utils@1.6.0
+
+### Minor Changes
+
+- d47be30: Added the icons option to the renderInTestApp function's TestAppOptions to be forwarded to the icons option of `createApp`.
+
+### Patch Changes
+
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-app-api@1.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-app@0.1.0
+
+### Minor Changes
+
+- 2bb9517: Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding.
+
+### Patch Changes
+
+- 52f9c5a: Deprecated the `namespace` option for `createExtensionBlueprint` and `createExtension`, these are no longer required and will default to the `pluginId` instead.
+
+ You can migrate some of your extensions that use `createExtensionOverrides` to using `createFrontendModule` instead and providing a `pluginId` there.
+
+ ```ts
+ // Before
+ createExtensionOverrides({
+ extensions: [
+ createExtension({
+ name: 'my-extension',
+ namespace: 'my-namespace',
+ kind: 'test',
+ ...
+ })
+ ],
+ });
+
+ // After
+ createFrontendModule({
+ pluginId: 'my-namespace',
+ extensions: [
+ createExtension({
+ name: 'my-extension',
+ kind: 'test',
+ ...
+ })
+ ],
+ });
+ ```
+
+- 57bf6ae: Fix issue with `AlertDisplay` and other components defined with `AppRootElementBlueprint` not being rendered when at the `SignInWrapper`
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-permission-react@0.4.26
+
+## @backstage/plugin-auth-backend@0.23.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 527d973: Migrated the `Bitbucket Server` auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-bitbucket-server-provider` module.
+- d908d8c: Migrated the `Auth0` auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-auth0-provider` module.
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+- 3c2d690: Allow users without defined email to be ingested by the `msgraph` catalog plugin and add `userIdMatchingUserEntityAnnotation` sign-in resolver for the Microsoft auth provider to support sign-in for users without defined email.
+- 92118cd: Updated dependency `@node-saml/passport-saml` to `^5.0.0`.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-auth-backend-module-auth0-provider@0.1.0
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.0
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.0
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.0
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.0
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.0
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.0
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.0
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.0
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.0
+ - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.0
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.0
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.0
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.0
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.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.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-auth0-provider@0.1.0
+
+### Minor Changes
+
+- d908d8c: New module for `@backstage/plugin-auth-backend` that adds a Auth0 auth provider.
+
+### Patch Changes
+
+- 0a3a13e: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- ecbc47e: Fix a bug where the signer was checked from the payload instead of the header
+- 8d1fb8d: Throw correct error when email is missing from the claims
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-auth-backend@0.23.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.0
+
+### Minor Changes
+
+- 527d973: New module for `@backstage/plugin-auth-backend` that adds a `Bitbucket Server` auth provider.
+
+### Patch Changes
+
+- 0a3a13e: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-google-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 339c67d: This provider will now reject authentication attempts rather than halt backend startup when `dangerouslyAllowOutsideDevelopment` is not set in production.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 3c2d690: Allow users without defined email to be ingested by the `msgraph` catalog plugin and add `userIdMatchingUserEntityAnnotation` sign-in resolver for the Microsoft auth provider to support sign-in for users without defined email.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-auth-backend@0.23.0
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.1.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/catalog-model@1.7.0
+
+## @backstage/plugin-catalog@1.23.0
+
+### Minor Changes
+
+- 78475c3: Allow offset mode paging in entity list provider
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 5446061: The `/alpha` export no longer export extension creators for the new frontend system, existing usage should be switched to use the equivalent extension blueprint instead. For more information see the [new frontend system 1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130).
+- 0ff53c8: Enable loading state for paginated catalog tables by passing `isLoading` prop
+- 180a45f: Entity presentation api now only fetches fields that are required to display entity title
+- a159180: Added missing items to `overridableComponents`
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/plugin-search-react@1.8.0
+ - @backstage/integration-react@1.1.31
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-catalog-backend@1.26.0
+
+### Minor Changes
+
+- 74acf06: Add `dependencyOf` prop to catalog model for Component kind to enable building relationship graphs with both directions using `dependsOn` and `dependencyOf`.
+- 78475c3: Allow offset mode paging in entity list provider
+- bd35cdb: The `analyze-location` endpoint is now protected by the `catalog.location.analyze` permission.
+ The `validate-entity` endpoint is now protected by the `catalog.entity.validate` permission.
+
+### Patch Changes
+
+- 1882cfe: Moved `getEntities` ordering to utilize database instead of having it inside catalog client
+
+ Please note that the latest version of `@backstage/catalog-client` will not order the entities in the same way as before. This is because the ordering is now done in the database query instead of in the client. If you rely on the ordering of the entities, you may need to update your backend plugin or code to handle this change.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+
+- 53cce86: Fixed an issue with the by-query call, where ordering by a field that does not exist on all entities led to not all results being returned
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-search-backend-module-catalog@0.2.2
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/backend-openapi-utils@0.1.18
+ - @backstage/plugin-events-node@0.4.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-backstage-openapi@0.4.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/backend-openapi-utils@0.1.18
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-gcp@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-catalog-backend-module-github@0.7.3
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-catalog-backend-module-gitlab@0.4.2
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-events-node@0.4.0
+
+## @backstage/plugin-catalog-backend-module-ldap@0.9.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- b50e4a8: Add support for optional configuration of `dnAttributeName` and `uuidAttributeName` in LDAP vendor
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-catalog-backend@1.26.0
+ - @backstage/plugin-events-node@0.4.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-backend@1.26.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.5.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-node@1.13.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-common@1.1.0
+
+### Minor Changes
+
+- bd35cdb: The `analyze-location` endpoint is now protected by the `catalog.location.analyze` permission.
+ The `validate-entity` endpoint is now protected by the `catalog.entity.validate` permission.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-catalog-node@1.13.0
+
+### Minor Changes
+
+- bd35cdb: The `analyze-location` endpoint is now protected by the `catalog.location.analyze` permission.
+ The `validate-entity` endpoint is now protected by the `catalog.entity.validate` permission.
+- 29e57c7: Add catalog service mocks under the `/testUtils` subpath export.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-react@1.13.0
+
+### Minor Changes
+
+- 78475c3: Allow offset mode paging in entity list provider
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 5446061: The `/alpha` export no longer export extension creators for the new frontend system, existing usage should be switched to use the equivalent extension blueprint instead. For more information see the [new frontend system 1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130).
+- a159180: Added missing items to `overridableComponents`
+- ae9b6cb: Small internal fix to better work with recent `lodash` versions
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/integration-react@1.1.31
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/version-bridge@1.0.9
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-devtools-backend@0.4.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/config-loader@1.9.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.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-events-node@0.4.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+
+## @backstage/plugin-notifications-backend@0.4.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 1c6f142: Internal refactor to avoid use of insecure coding patterns.
+- 4a53dd0: Implement icon in backend and show icon in table if available.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- f195972: Validate notification link when new notification is created
+- 5edd344: Refactor to use injected catalog client in the new backend system
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/plugin-signals-node@0.1.11
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6
+
+## @backstage/plugin-notifications-backend-module-email@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 5edd344: Refactor to use injected catalog client in the new backend system
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-scaffolder@1.25.0
+
+### Minor Changes
+
+- 860ad3a: Expose styles for TemplateEditor, TemplateFormPreviewer and CustomFieldExplorer
+- 4baad34: Added support for `omitExtraData` and `liveOmit` for rjsf in the scaffolder
+- 5143616: Added EntityOwnerPicker component to the TemplateListPage to allow filtering on owner
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+
+- b0a5c9f: The `ui:options` for `OwnedEntityPicker` field are now passed to `EntityPicker`. This allows you to use any `ui:options` which `EntityPicker` accepts in the `OwnedEntityPicker` field including `allowArbitraryValues` and `defaultNamespace`.
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+- 0a50d44: Updated dependency `@rjsf/utils` to `5.21.1`.
+ Updated dependency `@rjsf/core` to `5.21.1`.
+ Updated dependency `@rjsf/material-ui` to `5.21.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.21.1`.
+
+- fa9d8da: Updated dependency `@rjsf/utils` to `5.20.1`.
+ Updated dependency `@rjsf/core` to `5.20.1`.
+ Updated dependency `@rjsf/material-ui` to `5.20.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.20.1`.
+
+- 0944334: Removed duplicated titles on Scaffolder `TemplateListPage` component
+
+- 7976081: Added support for all request parameters in the Github create/update environment API in the Github environment create scaffolder action.
+
+ Disable MultiEntityPicker when `maxItems` limit is reached defined in `JSONSchema`
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/integration-react@1.1.31
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-scaffolder-react@1.12.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/integration@1.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-scaffolder-backend@1.25.0
+
+### Minor Changes
+
+- df9ae9e: Added scaffolder action publish:bitbucketCloud:pull-request
+- 62898bd: `createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system.
+
+### Patch Changes
+
+- f0c6b25: Allow listing file contents with `debug:log` scaffolder action
+
+- c160951: Found the issue during testing the clean up of the workspace for the database implementation.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- f865103: Updated dependency `esbuild` to `^0.23.0`.
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+
+- 7976081: Added support for all request parameters in the Github create/update environment API in the Github environment create scaffolder action.
+
+ Disable MultiEntityPicker when `maxItems` limit is reached defined in `JSONSchema`
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.0
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.0
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 59d8da4: Publish Azure action now uses basic authentication to authenticate to Git when Azure integration is configured to use App Registration/Service Account or Managed Identity.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- df9ae9e: Added scaffolder action publish:bitbucketCloud:pull-request
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 9e5923d: Added test cases for publish:gerrit action examples
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 22a19e6: Added the ability for the actions `publish:github` and `github:repo:create` to take inputs for 'custom properties' for organization repositories.
+
+- 162cdf4: Update dependency @octokit/webhooks to 10.9.2 due to SNYK-JS-OCTOKITWEBHOOKS-6129527
+
+- 7976081: Added support for all request parameters in the Github create/update environment API in the Github environment create scaffolder action.
+
+ Disable MultiEntityPicker when `maxItems` limit is reached defined in `JSONSchema`
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.12
+
+## @backstage/plugin-scaffolder-react@1.12.0
+
+### Minor Changes
+
+- 4512f71: Add `ui:backstage.review.name` option for custom item names on scaffolder review page, and also add support for rendering the `title` property instead of the key name.
+- 4baad34: Added support for `omitExtraData` and `liveOmit` for rjsf in the scaffolder
+
+### Patch Changes
+
+- 1f3c5aa: Fix scaffolder review step issue where schema options are not handled for fields on multi-step templates.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 0a50d44: Updated dependency `@rjsf/utils` to `5.21.1`.
+ Updated dependency `@rjsf/core` to `5.21.1`.
+ Updated dependency `@rjsf/material-ui` to `5.21.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.21.1`.
+- fa9d8da: Updated dependency `@rjsf/utils` to `5.20.1`.
+ Updated dependency `@rjsf/core` to `5.20.1`.
+ Updated dependency `@rjsf/material-ui` to `5.20.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.20.1`.
+- c2cbe1e: Updated dependency `use-immer` to `^0.10.0`.
+- b0f0118: Remove unnecessary singleton wrapping of `scaffolderApiRef`.
+- 3ebb64f: - Fix secret widget field not displaying as required.
+ - Fix secret widget not able to be required inside nested objects.
+ - Fix secret widget not able to be disabled.
+ - Support `minLength` and `maxLength` properties for secret widget.
+- 8dd6ef6: Fix an issue where keys with duplicate final key parts are not all displayed in the `ReviewState`. Change the way the keys are formatted to include the full schema path, separated by `>`.
+- 9a0672a: Scaffolder review page shows static amount of asterisks for secret fields.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/version-bridge@1.0.9
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.0
+
+### Minor Changes
+
+- 479808f: Always set default request parameters for requests to stackoverflow while allow to overwrite them. Remove site parameter as causing the request to fail.
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-react@1.8.0
+
+### Minor Changes
+
+- 9d66d8c: Make use of the `useApp` hook to retrieve the specified search icon in the SearchBar
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- f26ff99: Slight type tweak to match newer React versions better
+- dbbd93e: Internal update to match recent React types
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 5446061: The `/alpha` export no longer export extension creators for the new frontend system, existing usage should be switched to use the equivalent extension blueprint instead. For more information see the [new frontend system 1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130).
+- a159180: Added missing items to `overridableComponents`
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/version-bridge@1.0.9
+ - @backstage/types@1.1.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-signals-backend@0.2.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- a0f1f0d: Bump the `ws` library
+- 3ec5ccb: The `createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system.
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/plugin-signals-node@0.1.11
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/app-defaults@1.5.11
+
+### Patch Changes
+
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-app-api@1.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-permission-react@0.4.26
+
+## @backstage/backend-openapi-utils@0.1.18
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/errors@1.2.4
+
+## @backstage/cli@0.27.1
+
+### Patch Changes
+
+- d2d2313: Add `config.d.ts` files to the list of included file in `tsconfig.json`.
+
+ This allows ESLint to detect issues or deprecations in those files.
+
+- 16ffdd6: Remove direct `vite` dependency
+
+- 8069f4a: Update Scaffolder module template to add itself to the backend
+
+- 97422b0: Update templates to not refer to backend-common
+
+- 0e1a817: The app build process now outputs an additional `index.html.tmpl` file. This is an non-templated version of the `index.html` file, which can be used to delay templating until runtime.
+
+ The new `index.html.tmpl` file also sets a `backstage-public-path` meta tag to be templated at runtime. The meta tag is in turn picked up by the new `@backstage/cli/config/webpack-public-path.js` entry point script, which uses it to set the runtime public path of the Webpack bundle.
+
+- 1b5c264: Add `checks: 'read'` for default GitHub app permissions
+
+- b4685e7: Added `watchOptions` to frontend webpack config for compatibility with Yarn PnP
+
+- d29fc1b: Updated dependency `@module-federation/enhanced` to `^0.6.0`.
+
+- f865103: Updated dependency `esbuild` to `^0.23.0`.
+
+- ab7713a: Updated dependency `eslint-plugin-jest` to `^28.0.0`.
+
+- c78ff91: Updated dependency `@rollup/plugin-commonjs` to `^26.0.0`.
+
+- 4ebf36f: Upgrade to `vite@v5`
+
+- 2d3caaf: The build commands now support the new `backstage.inline` flag in `package.json`, which causes the contents of private packages to be inlined into the consuming package, rather than be treated as an external dependency.
+
+- 569c3f0: Fixed an issue where published frontend packages would end up with an invalid import structure if a single module imported both `.css` and `.svg` files.
+
+- 3d88455: Add support for `backstage:^` version ranges to versions:bump when using the experimental yarn plugin
+
+- d10f6b6: Allow overriding minify flag with build repo command
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.0
+ - @backstage/cli-node@0.2.8
+ - @backstage/integration@1.15.0
+ - @backstage/config-loader@1.9.1
+ - @backstage/eslint-plugin@0.1.9
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/cli-node@0.2.8
+
+### Patch Changes
+
+- 0c70f43: Add definition for the new `backstage.inline` field in `package.json`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/codemods@0.1.50
+
+### Patch Changes
+
+- 0894166: Updated dependency `jscodeshift` to `^0.16.0`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/config-loader@1.9.1
+
+### Patch Changes
+
+- ef3c507: Updated dependency `typescript-json-schema` to `^0.65.0`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/core-plugin-api@1.9.4
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/version-bridge@1.0.9
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/create-app@0.5.19
+
+### Patch Changes
+
+- d2d2313: Add `config.d.ts` files to the list of included file in `tsconfig.json`.
+
+ This allows ESLint to detect issues or deprecations in those files.
+
+- 4975e63: Yarn 4 is now the default for `create-app`. Also updated `yarn dev` script to use `yarn workspaces foreach` and removed unused Lerna and Concurrently dependencies.
+
+- 4735881: Bumped create-app version.
+
+- 97422b0: Update templates to not refer to backend-common
+
+- 019d9ad: Minor dockerfile syntax update
+
+- e03acd8: Updated Dockerfile base image to `node:20-bookworm-slim` from `node:18-bookworm-slim`
+
+- bf370c2: Remove references to the `@backstage/backend-tasks` in versions of the `create-app` package, as it has been deprecated.
+
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/eslint-plugin@0.1.9
+
+### Patch Changes
+
+- 08895e3: Added support for linting dependencies on workspace packages with the `backstage.inline` flag.
+
+## @backstage/integration-react@1.1.31
+
+### Patch Changes
+
+- 8a9d797: Remove unnecessary broad permissions from Gitlab `SCMAuth`
+
+ Newer versions of Gitlab (after 2019) do not require the broad api permissions to write to repos.
+
+- Updated dependencies
+ - @backstage/integration@1.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/config@1.2.0
+
+## @backstage/repo-tools@0.9.7
+
+### Patch Changes
+
+- 5c4aa2f: Updated dependency `@useoptic/openapi-utilities` to `^0.55.0`.
+- 1a8837e: Avoid generating API reports for packages with `backstage.inline` set.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/cli-node@0.2.8
+ - @backstage/config-loader@1.9.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.19
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/plugin-techdocs-node@1.12.11
+ - @backstage/catalog-model@1.7.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+
+## @backstage/theme@0.5.7
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+## @backstage/version-bridge@1.0.9
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+## @backstage/plugin-api-docs@0.11.9
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 8a474f2: Updating docs to use `createFrontendModule` instead
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/plugin-catalog@1.23.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/plugin-permission-react@0.4.26
+
+## @backstage/plugin-app-backend@0.3.74
+
+### Patch Changes
+
+- 72a8c7b: Return HTTP status 400 rather than 500 when receiving an unknown POST request.
+
+- d3f79d1: Fixing dependency metadata with the new `@backstage/plugin-app` package
+
+- 590fb2d: **BREAKING**: The app backend now supports the new `index.html.tmpl` output from `@backstage/cli`. If available, the `index.html` will be templated at runtime with the current configuration of the app backend.
+
+ This is marked as a breaking change because you must now supply the app build-time configuration to the backend. This change also affects the public path behavior, where it is no longer necessary to build the app with the correct public path upfront. You now only need to supply a correct `app.baseUrl` to the app backend plugin at runtime.
+
+ An effect that this change has is that the `index.html` will now contain and present the frontend configuration in an easily readable way, which can aid in debugging. This data was always available in the frontend, but it was injected and hidden in the static bundle.
+
+ This templating behavior is enabled by default, but it can be disabled by setting the `app.disableConfigInjection` configuration option to `true`.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-app-node@0.1.25
+ - @backstage/config-loader@1.9.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-app-node@0.1.25
+
+### Patch Changes
+
+- d3f79d1: Fixing dependency metadata with the new `@backstage/plugin-app` package
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/config-loader@1.9.1
+
+## @backstage/plugin-app-visualizer@0.1.10
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-plugin-api@1.9.4
+
+## @backstage/plugin-auth-node@0.5.2
+
+### Patch Changes
+
+- c46eb0f: Extend the "unable to resolve user identity" message
+- d908d8c: Accepts an optional options object in the `PassportOAuthAuthenticatorHelper.authenticate` method.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- 6f409b7: The `emailMatchingUserEntityProfileEmail` sign-in resolver will now also try matching emails with plus addressing removed.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-react@0.1.6
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.23
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.2
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-catalog-backend-module-azure@0.2.2
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.2
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.2
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.2
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-github@0.7.3
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 5edd344: Refactor to use injected catalog client in the new backend system
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-backend@1.26.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.4.2
+
+### Patch Changes
+
+- 53b24d9: Internal update to use the new cache manager
+
+- 0476be3: Add the `relations` array to allow Backstage to mirror GitLab's membership behavior, including descendant, inherited, and shared-from-group memberships.
+
+ The previous `allowInherited` config option will be deprecated in future versions. Use the `relations` array with the `INHERITED` option instead.
+
+ ```yaml
+ catalog:
+ providers:
+ gitlab:
+ development:
+ relations:
+ - INHERITED
+ ```
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- b446954: Remove dependency on backend-common
+
+- 06cc084: Added a `includeUsersWithoutSeat` config option that allow import of users without a paid seat, e.g. for Gitlab Free on SaaS. Defaults to false
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.3
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 4b28e39: Updated the README to include documentation for the new backend support
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-backend@1.26.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.2
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 3c2d690: Allow users without defined email to be ingested by the `msgraph` catalog plugin and add `userIdMatchingUserEntityAnnotation` sign-in resolver for the Microsoft auth provider to support sign-in for users without defined email.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.2
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-graph@0.4.9
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- da91078: Fixed a bug in the `CatalogGraphPage` component where, after clicking on some nodes, clicking the back button would break the navigation. This issue caused the entire navigation to fail and behaved differently across various browsers.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 8a474f2: Updating docs to use `createFrontendModule` instead
+- a159180: Added missing items to `overridableComponents`
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.3
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- f3c90da: Support button title should be contained in a single menu item
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/integration-react@1.1.31
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/integration@1.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-unprocessed-entities@0.2.8
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+- 4f08c85: Show additional info on DevTools unprocessed entities table
+
+ - Location path (so that it's easier to search the failed entity from the YAML URL)
+ - Time info of last discovery and next refresh time so that users can be aware of it and can sort the errors based on the time.
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-config-schema@0.1.59
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-devtools@0.1.18
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 019d9ad: Minor dockerfile syntax update
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-devtools-common@0.1.12
+
+## @backstage/plugin-events-backend@0.3.12
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.4.2
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-events-backend-module-azure@0.2.11
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-events-node@0.4.0
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.11
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-events-node@0.4.0
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.11
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-events-node@0.4.0
+
+## @backstage/plugin-events-backend-module-github@0.2.11
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.11
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-test-utils@0.1.35
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.0
+
+## @backstage/plugin-home@0.7.10
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 0a50d44: Updated dependency `@rjsf/utils` to `5.21.1`.
+ Updated dependency `@rjsf/core` to `5.21.1`.
+ Updated dependency `@rjsf/material-ui` to `5.21.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.21.1`.
+- fa9d8da: Updated dependency `@rjsf/utils` to `5.20.1`.
+ Updated dependency `@rjsf/core` to `5.20.1`.
+ Updated dependency `@rjsf/material-ui` to `5.20.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.20.1`.
+- a159180: Added missing items to `overridableComponents`
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-app-api@1.15.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-home-react@0.1.17
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-home-react@0.1.17
+
+### Patch Changes
+
+- 0a50d44: Updated dependency `@rjsf/utils` to `5.21.1`.
+ Updated dependency `@rjsf/core` to `5.21.1`.
+ Updated dependency `@rjsf/material-ui` to `5.21.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.21.1`.
+- fa9d8da: Updated dependency `@rjsf/utils` to `5.20.1`.
+ Updated dependency `@rjsf/core` to `5.20.1`.
+ Updated dependency `@rjsf/material-ui` to `5.20.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.20.1`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-plugin-api@1.9.4
+
+## @backstage/plugin-kubernetes@0.11.14
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- bfc0f42: Make k8s entity content appear on components & resources only by default in new FE system
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/plugin-kubernetes-react@0.4.3
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-kubernetes-backend@0.18.6
+
+### Patch Changes
+
+- a0f1f0d: Bump the `ws` library
+- f55f8bf: The `KubernetesBuilder` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- ca96b66: Skip start without proper config
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-kubernetes-node@0.1.19
+ - @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-permission-common@0.8.1
+
+## @backstage/plugin-kubernetes-cluster@0.0.15
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/plugin-kubernetes-react@0.4.3
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-kubernetes-common@0.8.3
+
+### 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.1.19
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.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.3
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-notifications@0.3.1
+
+### Patch Changes
+
+- 653f60b: Severity filter label newly contains "Min severity" to better describe range instead of exact value.
+- 4a53dd0: Implement icon in backend and show icon in table if available.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-signals-react@0.0.5
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-notifications-node@0.2.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/plugin-signals-node@0.1.11
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-org@0.6.29
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 8a474f2: Updating docs to use `createFrontendModule` instead
+- a159180: Added missing items to `overridableComponents`
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/core-plugin-api@1.9.4
+
+## @backstage/plugin-org-react@0.1.28
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+
+## @backstage/plugin-permission-backend@0.5.49
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- fcb9356: Deprecated `createRouter` and its router options in favour of the new backend system.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-permission-node@0.8.3
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-permission-react@0.4.26
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/config@1.2.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-proxy-backend@0.5.6
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- d298e6e: Deprecated `createRouter` and its router options in favour of the new backend system.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-common@1.5.6
+
+### Patch Changes
+
+- 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.4.11
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/integration@1.15.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.12
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-test-utils@1.0.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11
+
+## @backstage/plugin-search@1.4.16
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- eca03bd: Added ability to customize the search items within the SidebarSearchModal
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/plugin-search-react@1.8.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/version-bridge@1.0.9
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend@1.5.17
+
+### Patch Changes
+
+- 5726390: Deprecate create router as the legacy backend system will no longer be supported.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/backend-openapi-utils@0.1.18
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-catalog@0.2.2
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- 5726390: The following collator factories are deprecated, please [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) to the new backend system and follow the instructions below to install collators via module:
+
+ - `DefaultCatalogCollatorFactory`: ;
+ - `ToolDocumentCollatorFactory`: ;
+ - `DefaultTechDocsCollatorFactory`: .
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.6
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 5726390: Internal refactor to use `LoggerService` and `DatabaseService` instead of the legacy `Logger` and `PluginDatabaseManager` types.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-backend-node@1.3.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-explore@0.2.2
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- 5726390: The following collator factories are deprecated, please [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) to the new backend system and follow the instructions below to install collators via module:
+
+ - `DefaultCatalogCollatorFactory`: ;
+ - `ToolDocumentCollatorFactory`: ;
+ - `DefaultTechDocsCollatorFactory`: .
+
+- 276f433: Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.5`.
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-pg@0.5.35
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 5726390: Internal refactor to use `LoggerService` and `DatabaseService` instead of the legacy `Logger` and `PluginDatabaseManager` types.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-techdocs@0.2.2
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- 5726390: The following collator factories are deprecated, please [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) to the new backend system and follow the instructions below to install collators via module:
+
+ - `DefaultCatalogCollatorFactory`: ;
+ - `ToolDocumentCollatorFactory`: ;
+ - `DefaultTechDocsCollatorFactory`: .
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/plugin-techdocs-node@1.12.11
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-node@1.3.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-plugin-api@1.0.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-signals@0.0.10
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+- 5add8e1: Added a `SignalsDisplay` extension to allows the signals plugin to be installed in an app as follows:
+
+ ```tsx
+ export default app.createRoot(
+ <>
+
+
+
+
+
+ {routes}
+
+ >,
+ );
+ ```
+
+ With this in place you can remove the explicit installation via the `plugins` option for `createApp`.
+
+- 3e9b1a4: Put a name on the `SignalsDisplay` component extension
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-signals-react@0.0.5
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-node@0.1.11
+
+### Patch Changes
+
+- a0f1f0d: Bump the `ws` library
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-react@0.0.5
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 0389801: Fix for `useSignal` returning the inverse value for `isSignalsAvailable`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-techdocs@1.10.9
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+
+- fe94ad8: Fixes left navigation positioning when using mkdocs blog plugin
+
+- b0206dc: Added support for setting page status with 'new' and 'deprecated' values, allowing visual indication of page status in TechDocs. To use include the following at the top of your markdown file:
+
+ ```markdown
+ ---
+ status: new
+ ---
+ ```
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+- c7cb4c0: Add `empty-state:techdocs/entity-content` extension to allow overriding the empty state for the entity page techdocs tab.
+
+- 97db53e: Enhanced the table hover effect with a lighter color and updated the border radius to align with Backstage's theme styling
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/plugin-techdocs-react@1.2.8
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/plugin-search-react@1.8.0
+ - @backstage/integration-react@1.1.31
+ - @backstage/catalog-model@1.7.0
+ - @backstage/integration@1.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.6
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.38
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/plugin-techdocs@1.10.9
+ - @backstage/plugin-catalog@1.23.0
+ - @backstage/plugin-techdocs-react@1.2.8
+ - @backstage/core-app-api@1.15.0
+ - @backstage/plugin-search-react@1.8.0
+ - @backstage/integration-react@1.1.31
+ - @backstage/test-utils@1.6.0
+ - @backstage/core-plugin-api@1.9.4
+
+## @backstage/plugin-techdocs-backend@1.10.13
+
+### Patch Changes
+
+- 086c32d: Dedicated token for techdocs cache sync
+- 5b679ac: The `createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- 5edd344: Refactor to use injected catalog client in the new backend system
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/plugin-techdocs-node@1.12.11
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.14
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-techdocs-react@1.2.8
+ - @backstage/integration-react@1.1.31
+ - @backstage/integration@1.15.0
+ - @backstage/core-plugin-api@1.9.4
+
+## @backstage/plugin-techdocs-node@1.12.11
+
+### Patch Changes
+
+- f715f5c: Move `TechdocsContainerRunner` from `publish` to `generate`.
+- 4417dd4: Fix typo and unify TechDocs casing in doc strings
+- 57da51f: Add support for mapping custom tags in the techdocs yaml parser that validates the mkdocs.yaml file
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- 3606843: Internal fixes to match `testcontainers` update
+- 33ebb28: As the `@backstage/backend-common` package is deprecated, we have updated the `techdocs-node` package to stop depending on it.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/integration@1.15.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @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.8
+
+### Patch Changes
+
+- 5ee3d27: Fixed issue in useShadowRootElements which could lead to unlimited render loops
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/version-bridge@1.0.9
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-user-settings@0.8.12
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- da86ac2: Update README to clarify location of additional tabs example
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/core-app-api@1.15.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-signals-react@0.0.5
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.24
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- 164ce3e: In preparation to stop supporting to the legacy backend system, the `createRouter` function is now deprecated and we strongly recommend you [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) your backend to the new system.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 1b98099: Replaced usage of the deprecated identity service with the new HTTP auth service for the new backend system.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/plugin-signals-node@0.1.11
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.101
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/plugin-techdocs@1.10.9
+ - @backstage/plugin-catalog@1.23.0
+ - @backstage/plugin-home@0.7.10
+ - @backstage/cli@0.27.1
+ - @backstage/plugin-techdocs-react@1.2.8
+ - @backstage/core-app-api@1.15.0
+ - @backstage/frontend-app-api@0.9.0
+ - @backstage/plugin-catalog-import@0.12.3
+ - @backstage/plugin-catalog-graph@0.4.9
+ - @backstage/plugin-user-settings@0.8.12
+ - @backstage/plugin-search-react@1.8.0
+ - @backstage/plugin-kubernetes@0.11.14
+ - @backstage/plugin-scaffolder@1.25.0
+ - @backstage/plugin-api-docs@0.11.9
+ - @backstage/plugin-devtools@0.1.18
+ - @backstage/plugin-search@1.4.16
+ - @backstage/plugin-org@0.6.29
+ - @backstage/integration-react@1.1.31
+ - @backstage/plugin-notifications@0.3.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-scaffolder-react@1.12.0
+ - @backstage/app-defaults@1.5.11
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.6
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8
+ - @backstage/plugin-kubernetes-cluster@0.0.15
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/plugin-signals@0.0.10
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## example-app-next@0.0.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/plugin-techdocs@1.10.9
+ - @backstage/plugin-catalog@1.23.0
+ - @backstage/plugin-home@0.7.10
+ - @backstage/cli@0.27.1
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/plugin-techdocs-react@1.2.8
+ - @backstage/core-app-api@1.15.0
+ - @backstage/frontend-app-api@0.9.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/plugin-catalog-import@0.12.3
+ - @backstage/plugin-catalog-graph@0.4.9
+ - @backstage/plugin-user-settings@0.8.12
+ - @backstage/plugin-search-react@1.8.0
+ - @backstage/plugin-kubernetes@0.11.14
+ - @backstage/plugin-scaffolder@1.25.0
+ - @backstage/plugin-api-docs@0.11.9
+ - @backstage/plugin-search@1.4.16
+ - @backstage/plugin-org@0.6.29
+ - @backstage/integration-react@1.1.31
+ - @backstage/frontend-defaults@0.1.0
+ - @backstage/plugin-notifications@0.3.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-scaffolder-react@1.12.0
+ - @backstage/plugin-app@0.1.0
+ - @backstage/app-defaults@1.5.11
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.6
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8
+ - @backstage/plugin-kubernetes-cluster@0.0.15
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/plugin-signals@0.0.10
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14
+ - @backstage/plugin-app-visualizer@0.1.10
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## app-next-example-plugin@0.0.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/frontend-plugin-api@0.8.0
+
+## example-backend@0.0.30
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/plugin-kubernetes-backend@0.18.6
+ - @backstage/plugin-signals-backend@0.2.0
+ - @backstage/plugin-techdocs-backend@1.10.13
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-search-backend@1.5.17
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-devtools-backend@0.4.0
+ - @backstage/plugin-app-backend@0.3.74
+ - @backstage/plugin-notifications-backend@0.4.0
+ - @backstage/plugin-scaffolder-backend@1.25.0
+ - @backstage/plugin-auth-backend@0.23.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-backend@1.26.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.0
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2
+ - @backstage/plugin-search-backend-module-catalog@0.2.2
+ - @backstage/plugin-search-backend-module-explore@0.2.2
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/plugin-permission-backend@0.5.49
+ - @backstage/plugin-proxy-backend@0.5.6
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.0
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2
+
+## example-backend-legacy@0.2.102
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-common@0.25.0
+ - @backstage/plugin-kubernetes-backend@0.18.6
+ - @backstage/plugin-signals-backend@0.2.0
+ - @backstage/plugin-signals-node@0.1.11
+ - @backstage/plugin-techdocs-backend@1.10.13
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-search-backend@1.5.17
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.0
+ - @backstage/plugin-devtools-backend@0.4.0
+ - @backstage/plugin-app-backend@0.3.74
+ - @backstage/plugin-scaffolder-backend@1.25.0
+ - @backstage/plugin-auth-backend@0.23.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-backend@1.26.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2
+ - @backstage/plugin-search-backend-module-catalog@0.2.2
+ - @backstage/plugin-search-backend-module-explore@0.2.2
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/plugin-events-backend@0.3.12
+ - @backstage/plugin-permission-backend@0.5.49
+ - @backstage/plugin-proxy-backend@0.5.6
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.6
+ - @backstage/plugin-search-backend-module-pg@0.5.35
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2
+
+## e2e-test@0.2.20
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.19
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## @internal/frontend@0.0.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/version-bridge@1.0.9
+ - @backstage/types@1.1.1
+
+## techdocs-cli-embedded-app@0.2.100
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-techdocs@1.10.9
+ - @backstage/plugin-catalog@1.23.0
+ - @backstage/cli@0.27.1
+ - @backstage/plugin-techdocs-react@1.2.8
+ - @backstage/core-app-api@1.15.0
+ - @backstage/integration-react@1.1.31
+ - @backstage/catalog-model@1.7.0
+ - @backstage/app-defaults@1.5.11
+ - @backstage/test-utils@1.6.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/config@1.2.0
+
+## yarn-plugin-backstage@0.0.2
+
+### Patch Changes
+
+- bd32d5a: Add additional check before packing workspace to verify that all backstage:^ versions have been removed.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/release-manifests@0.0.11
+
+## @internal/plugin-todo-list@1.0.31
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-plugin-api@1.9.4
+
+## @internal/plugin-todo-list-backend@1.0.31
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/errors@1.2.4
diff --git a/docs/releases/v1.31.0-next.0-changelog.md b/docs/releases/v1.31.0-next.0-changelog.md
new file mode 100644
index 0000000000..7e8b118fff
--- /dev/null
+++ b/docs/releases/v1.31.0-next.0-changelog.md
@@ -0,0 +1,2787 @@
+# Release v1.31.0-next.0
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.31.0-next.0](https://backstage.github.io/upgrade-helper/?to=1.31.0-next.0)
+
+## @backstage/backend-app-api@0.10.0-next.0
+
+### Minor Changes
+
+- 19ff127: **BREAKING**: The deprecated `identityServiceFactory` and `tokenManagerServiceFactory` have been removed.
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- cd38da8: Deprecate the `featureDiscoveryServiceFactory` in favor of using `@backstage/backend-defaults#discoveryFeatureLoader` instead.
+- 7f779c7: `auth.externalAccess` should be optional in the config schema
+- 51a69b5: Fix feature loaders in CJS double-default nested builds
+- 0b2a402: Updates to the config schema to match reality
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-common@0.25.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 8ba77ed: The `legacyPlugin` and `makeLegacyPlugin` helpers now provide their own shim implementation of the identity and token manager services, as these services are being removed from the new backend system.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 2e9ec14: Add `pg-format` as a dependency
+- 19ff127: Internal refactor to re-declare the token manager service which was removed from `@backstage/backend-plugin-api`, but is still supported in this package for backwards compatibility.
+- 66dbf0a: Allow the cache service to accept the human duration format for TTL
+- 0b2a402: Updates to the config schema to match reality
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+
+## @backstage/backend-defaults@0.5.0-next.0
+
+### Minor Changes
+
+- 359fcd7: **BREAKING**: The backwards compatibility with plugins using legacy auth through the token manager service has been removed. This means that instead of falling back to using the old token manager, requests towards plugins that don't support the new auth system will simply fail. Please make sure that all plugins in your deployment are hosted within a backend instance from the new backend system.
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+- 19ff127: **BREAKING**: The default backend instance no longer provides implementations for the identity and token manager services, which have been removed from `@backstage/backend-plugin-api`.
+
+ If you rely on plugins that still require these services, you can add them to your own backend by re-creating the service reference and factory.
+
+ The following can be used to implement the identity service:
+
+ ```ts
+ import {
+ coreServices,
+ createServiceFactory,
+ createServiceRef,
+ } from '@backstage/backend-plugin-api';
+ import {
+ DefaultIdentityClient,
+ IdentityApi,
+ } from '@backstage/plugin-auth-node';
+
+ backend.add(
+ createServiceFactory({
+ service: createServiceRef({ id: 'core.identity' }),
+ deps: {
+ discovery: coreServices.discovery,
+ },
+ async factory({ discovery }) {
+ return DefaultIdentityClient.create({ discovery });
+ },
+ }),
+ );
+ ```
+
+ The following can be used to implement the token manager service:
+
+ ```ts
+ import { ServerTokenManager, TokenManager } from '@backstage/backend-common';
+ import { createBackend } from '@backstage/backend-defaults';
+ import {
+ coreServices,
+ createServiceFactory,
+ createServiceRef,
+ } from '@backstage/backend-plugin-api';
+
+ backend.add(
+ createServiceFactory({
+ service: createServiceRef({ id: 'core.tokenManager' }),
+ deps: {
+ config: coreServices.rootConfig,
+ logger: coreServices.rootLogger,
+ },
+ createRootContext({ config, logger }) {
+ return ServerTokenManager.fromConfig(config, {
+ logger,
+ allowDisabledTokenManager: true,
+ });
+ },
+ async factory(_deps, tokenManager) {
+ return tokenManager;
+ },
+ }),
+ );
+ ```
+
+### Patch Changes
+
+- 7f779c7: `auth.externalAccess` should be optional in the config schema
+
+- 7a72ec8: Exports the `discoveryFeatureLoader` as a replacement for the deprecated `featureDiscoveryService`.
+ The `discoveryFeatureLoader` is a new backend system [feature loader](https://backstage.io/docs/backend-system/architecture/feature-loaders/) that discovers backend features from the current `package.json` and its dependencies.
+ Here is an example using the `discoveryFeatureLoader` loader in a new backend instance:
+
+ ```ts
+ import { createBackend } from '@backstage/backend-defaults';
+ import { discoveryFeatureLoader } from '@backstage/backend-defaults';
+ //...
+
+ const backend = createBackend();
+ //...
+ backend.add(discoveryFeatureLoader);
+ //...
+ backend.start();
+ ```
+
+- 66dbf0a: Allow the cache service to accept the human duration format for TTL
+
+- 5a8fcb4: Added the option to skip database migrations by setting `skipMigrations: true` in config. This can be done globally in the database config or by plugin id.
+
+- 0b2a402: Updates to the config schema to match reality
+
+- Updated dependencies
+ - @backstage/backend-app-api@0.10.0-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+
+## @backstage/backend-dynamic-feature-service@0.4.0-next.0
+
+### Minor Changes
+
+- 9080f57: **BREAKING**: `dynamicPluginsServiceFactory` is no longer callable as a function. If you need to provide options to make a custom factory, use `dynamicPluginsSchemasServiceFactoryWithOptions` instead.
+
+### Patch Changes
+
+- cd38da8: Deprecate the `dynamicPluginsServiceRef`, `dynamicPluginsServiceFactory` and `dynamicPluginsServiceFactoryWithOptions` in favor of using the `dynamicPluginsFeatureDiscoveryLoader` to discover dynamic features in a new backend system.
+
+ See usage examples below:
+
+ Example using the `dynamicPluginsFeatureDiscoveryLoader` loader in a backend instance:
+
+ ```ts
+ import { createBackend } from '@backstage/backend-defaults';
+ import { dynamicPluginsFeatureDiscoveryLoader } from '@backstage/backend-dynamic-feature-service';
+ //...
+
+ const backend = createBackend();
+ backend.add(dynamicPluginsFeatureDiscoveryLoader);
+ //...
+ backend.start();
+ ```
+
+ Passing options to the `dynamicPluginsFeatureDiscoveryLoader` loader in a backend instance:
+
+ ```ts
+ import { createBackend } from '@backstage/backend-defaults';
+ import { dynamicPluginsFeatureDiscoveryLoader } from '@backstage/backend-dynamic-feature-service';
+ import { myCustomModuleLoader } from './myCustomModuleLoader';
+ //...
+
+ const backend = createBackend();
+ backend.add(
+ dynamicPluginsFeatureDiscoveryLoader({
+ moduleLoader: myCustomModuleLoader,
+ }),
+ );
+ //...
+ backend.start();
+ ```
+
+- e27f889: Relax type check for a plugin's default export to also accept a BackendFeature defined as a function instead of an object
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- Updated dependencies
+ - @backstage/backend-app-api@0.10.0-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-app-node@0.1.25-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.0
+ - @backstage/plugin-events-backend@0.3.12-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/backend-plugin-api@0.9.0-next.0
+
+### Minor Changes
+
+- 19ff127: **BREAKING**: The deprecated identity and token manager services have been removed. This means that `coreServices.identity` and `coreServices.tokenManager` are gone, along with related types and utilities in other packages.
+
+- f687050: Removed the following deprecated exports
+
+ - `BackendPluginConfig` use `CreateBackendPluginOptions`
+ - `BackendModuleConfig` use `CreateBackendModuleOptions`
+ - `ExtensionPointConfig` use `CreateExtensionPointOptions`
+
+- 4d82481: Removed deprecated `ServiceFactoryOrFunction` type.
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- cd38da8: Deprecate the `featureDiscoveryServiceRef` in favor of using the new `discoveryFeatureLoader` instead.
+- 66dbf0a: Allow the cache service to accept the human duration format for TTL
+- 0b2a402: Updates to the config schema to match reality
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-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@0.6.0-next.0
+
+### Minor Changes
+
+- 19ff127: **BREAKING**: Removed service mocks for the identity and token manager services, which have been removed from `@backstage/backend-plugin-api`.
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 0363bf1: There is a new `mockErrorHandler` utility to help in mocking the error middleware in tests.
+- Updated dependencies
+ - @backstage/backend-app-api@0.10.0-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-app-api@0.9.0-next.0
+
+### Minor Changes
+
+- 62cce6c: Removed deprecated `icons` property passing to `createApp` and `createSpecializedApp`. Use `IconBundleBlueprint.make` to create extensions instead and include them in the app.
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+
+- 2bb9517: Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding.
+
+- f3a2b91: Moved several implementations of built-in APIs from being hardcoded in the app to instead be provided as API extensions. This moves all API-related inputs from the `app` extension to the respective API extensions. For example, extensions created with `ThemeBlueprint` are now attached to the `themes` input of `api:app-theme` rather than the `app` extension.
+
+- 5446061: Internal refactor following removal of v1 extension support. The app implementation itself still supports v1 extensions at runtime.
+
+- 98850de: Added support for defining `replaces` in `createExtensionInput` which will allow extensions to redirect missing `attachTo` points to an input of the created extension.
+
+ ```ts
+ export const AppThemeApi = ApiBlueprint.makeWithOverrides({
+ name: 'app-theme',
+ inputs: {
+ themes: createExtensionInput([ThemeBlueprint.dataRefs.theme], {
+ // attachTo: { id: 'app', input: 'themes'} will be redirected to this input instead
+ replaces: [{ id: 'app', input: 'themes' }],
+ }),
+ },
+ factory: () {
+ ...
+ }
+ });
+ ```
+
+- 4a66456: Added the `root` extension the replace the `app` extension as the root of the app.
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/plugin-app@0.1.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-plugin-api@0.8.0-next.0
+
+### Minor Changes
+
+- 5446061: **BREAKING**: Removed support for "v1" extensions. This means that it is no longer possible to declare inputs and outputs as objects when using `createExtension`. In addition, all extension creators except for `createComponentExtension` have been removed, use the equivalent blueprint instead. See the [1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations/#130) for more information on this change.
+- fec8b57: **BREAKING**: Updated the type parameters for `ExtensionDefinition` and `ExtensionBlueprint` to only have a single object parameter. The base type parameter is exported as `ExtensionDefinitionParameters` and `ExtensionBlueprintParameters` respectively. This is shipped as an immediate breaking change as we expect usage of these types to be rare, and it does not affect the runtime behavior of the API.
+
+ This is a breaking change as it changes the type parameters. Existing usage can generally be updated as follows:
+
+ - `ExtensionDefinition` -> `ExtensionDefinition`
+ - `ExtensionDefinition` -> `ExtensionDefinition`
+ - `ExtensionDefinition` -> `ExtensionDefinition<{ config: TConfig }>`
+ - `ExtensionDefinition` -> `ExtensionDefinition<{ config: TConfig, configInput: TConfigInput }>`
+
+ If you need to infer the parameter you can use `ExtensionDefinitionParameters`, for example:
+
+ ```ts
+ import {
+ ExtensionDefinition,
+ ExtensionDefinitionParameters,
+ } from '@backstage/frontend-plugin-api';
+
+ function myUtility(
+ ext: ExtensionDefinition,
+ ): T['config'] {
+ // ...
+ }
+ ```
+
+ The same patterns apply to `ExtensionBlueprint`.
+
+ This change is made to improve the readability of API references and ability to evolve the type parameters in the future.
+
+### Patch Changes
+
+- 2bb9517: Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding.
+
+- f3a2b91: Moved several implementations of built-in APIs from being hardcoded in the app to instead be provided as API extensions. This moves all API-related inputs from the `app` extension to the respective API extensions. For example, extensions created with `ThemeBlueprint` are now attached to the `themes` input of `api:app-theme` rather than the `app` extension.
+
+- 98850de: Added support for defining `replaces` in `createExtensionInput` which will allow extensions to redirect missing `attachTo` points to an input of the created extension.
+
+ ```ts
+ export const AppThemeApi = ApiBlueprint.makeWithOverrides({
+ name: 'app-theme',
+ inputs: {
+ themes: createExtensionInput([ThemeBlueprint.dataRefs.theme], {
+ // attachTo: { id: 'app', input: 'themes'} will be redirected to this input instead
+ replaces: [{ id: 'app', input: 'themes' }],
+ }),
+ },
+ factory: () {
+ ...
+ }
+ });
+ ```
+
+- 4a66456: A new `apis` parameter has been added to `factory` for extensions. This is a way to access utility APIs without being coupled to the React context.
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-test-utils@0.2.0-next.0
+
+### Minor Changes
+
+- 5446061: Removed support for testing "v1" extensions, where outputs are defined as an object rather than an array.
+- e6e488c: **BREAKING**: The deprecated `.render()` method has been removed from the extension tester.
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 4a66456: Internal update to add support for passing an `ApiRegistry` when creating the node tree
+- 2bb9517: Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding.
+- f6d1874: Added the ability to provide additional `extensions` and `features` to `renderInTestApp`
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/frontend-app-api@0.9.0-next.0
+ - @backstage/plugin-app@0.1.0-next.0
+ - @backstage/test-utils@1.6.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/test-utils@1.6.0-next.0
+
+### Minor Changes
+
+- d47be30: Added the icons option to the renderInTestApp function's TestAppOptions to be forwarded to the icons option of `createApp`.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-app@0.1.0-next.0
+
+### Minor Changes
+
+- 2bb9517: Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-auth-backend@0.23.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+- 3c2d690: Allow users without defined email to be ingested by the `msgraph` catalog plugin and add `userIdMatchingUserEntityAnnotation` sign-in resolver for the Microsoft auth provider to support sign-in for users without defined email.
+- Updated dependencies
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.0-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.0-next.0
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.0-next.0
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.0-next.0
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.0-next.0
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.0-next.0
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.0-next.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.0
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.0-next.0
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.0-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.0-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.0-next.0
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.0-next.0
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.0-next.0
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.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.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- ecbc47e: Fix a bug where the signer was checked from the payload instead of the header
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-backend@0.23.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-google-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 3c2d690: Allow users without defined email to be ingested by the `msgraph` catalog plugin and add `userIdMatchingUserEntityAnnotation` sign-in resolver for the Microsoft auth provider to support sign-in for users without defined email.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-backend@0.23.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.1.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/catalog-model@1.6.0
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-openapi-utils@0.1.18-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend-module-gcp@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-backend-module-github@0.7.3-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-backend-module-gitlab@0.4.2-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+
+## @backstage/plugin-catalog-backend-module-ldap@0.9.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-devtools-backend@0.4.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.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-events-node@0.4.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+
+## @backstage/plugin-notifications-backend@0.4.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-notifications-node@0.2.6-next.0
+ - @backstage/plugin-signals-node@0.1.11-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-notifications-backend-module-email@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-notifications-node@0.2.6-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-scaffolder@1.25.0-next.0
+
+### Minor Changes
+
+- 5143616: Added EntityOwnerPicker component to the TemplateListPage to allow filtering on owner
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-scaffolder-react@1.12.0-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-backend@1.25.0-next.0
+
+### Minor Changes
+
+- 62898bd: `createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system.
+
+### Patch Changes
+
+- c160951: Found the issue during testing the clean up of the workspace for the database implementation.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 9e5923d: Added test cases for publish:gerrit action examples
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-notifications-node@0.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.12-next.0
+
+## @backstage/plugin-scaffolder-react@1.12.0-next.0
+
+### Minor Changes
+
+- 4512f71: Add `ui:backstage.review.name` option for custom item names on scaffolder review page, and also add support for rendering the `title` property instead of the key name.
+
+### Patch Changes
+
+- 3ebb64f: - Fix secret widget field not displaying as required.
+ - Fix secret widget not able to be required inside nested objects.
+ - Fix secret widget not able to be disabled.
+ - Support `minLength` and `maxLength` properties for secret widget.
+- 8dd6ef6: Fix an issue where keys with duplicate final key parts are not all displayed in the `ReviewState`. Change the way the keys are formatted to include the full schema path, separated by `>`.
+- 9a0672a: Scaffolder review page shows static amount of asterisks for secret fields.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-react@1.8.0-next.0
+
+### Minor Changes
+
+- 9d66d8c: Make use of the `useApp` hook to retrieve the specified search icon in the SearchBar
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- f26ff99: Slight type tweak to match newer React versions better
+- 5446061: The `/alpha` export no longer export extension creators for the new frontend system, existing usage should be switched to use the equivalent extension blueprint instead. For more information see the [new frontend system 1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130).
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-signals-backend@0.2.0-next.0
+
+### Minor Changes
+
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- 3ec5ccb: The `createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system.
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-signals-node@0.1.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/backend-openapi-utils@0.1.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/backend-tasks@0.6.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/cli@0.27.1-next.0
+
+### Patch Changes
+
+- 1b5c264: Add `checks: 'read'` for default GitHub app permissions
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/eslint-plugin@0.1.8
+ - @backstage/integration@1.14.0
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/core-compat-api@0.2.9-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/create-app@0.5.19-next.0
+
+### Patch Changes
+
+- 019d9ad: Minor dockerfile syntax update
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/dev-utils@1.0.38-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+
+## @backstage/repo-tools@0.9.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-node@1.12.11-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-api-docs@0.11.9-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-catalog@1.22.1-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-app-backend@0.3.74-next.0
+
+### Patch Changes
+
+- d3f79d1: Fixing dependency metadata with the new `@backstage/plugin-app` package
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-app-node@0.1.25-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-app-node@0.1.25-next.0
+
+### Patch Changes
+
+- d3f79d1: Fixing dependency metadata with the new `@backstage/plugin-app` package
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/config-loader@1.9.0
+
+## @backstage/plugin-app-visualizer@0.1.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-auth-node@0.5.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog@1.22.1-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 5446061: The `/alpha` export no longer export extension creators for the new frontend system, existing usage should be switched to use the equivalent extension blueprint instead. For more information see the [new frontend system 1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130).
+- 180a45f: Entity presentation api now only fetches fields that are required to display entity title
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-search-react@1.8.0-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-catalog-backend@1.25.3-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 53cce86: Fixed an issue with the by-query call, where ordering by a field that does not exist on all entities led to not all results being returned
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/backend-openapi-utils@0.1.18-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-catalog-backend-module-azure@0.2.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.2-next.0
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+
+## @backstage/plugin-catalog-backend-module-github@0.7.3-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.4.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- b446954: Remove dependency on backend-common
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.3-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 4b28e39: Updated the README to include documentation for the new backend support
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 3c2d690: Allow users without defined email to be ingested by the `msgraph` catalog plugin and add `userIdMatchingUserEntityAnnotation` sign-in resolver for the Microsoft auth provider to support sign-in for users without defined email.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-graph@0.4.9-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.3-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-react@1.1.30
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-node@1.12.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-react@1.12.4-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 5446061: The `/alpha` export no longer export extension creators for the new frontend system, existing usage should be switched to use the equivalent extension blueprint instead. For more information see the [new frontend system 1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130).
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-devtools@0.1.18-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- 019d9ad: Minor dockerfile syntax update
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-devtools-common@0.1.12
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-events-backend@0.3.12-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.4.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-events-backend-module-azure@0.2.11-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.11-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.11-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+
+## @backstage/plugin-events-backend-module-github@0.2.11-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.11-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-test-utils@0.1.35-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.0-next.0
+
+## @backstage/plugin-home@0.7.10-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-home-react@0.1.16
+
+## @backstage/plugin-kubernetes@0.11.14-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- bfc0f42: Make k8s entity content appear on components & resources only by default in new FE system
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-common@0.8.2
+ - @backstage/plugin-kubernetes-react@0.4.2
+
+## @backstage/plugin-kubernetes-backend@0.18.6-next.0
+
+### Patch Changes
+
+- f55f8bf: The `KubernetesBuilder` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-kubernetes-node@0.1.19-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.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.2
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-kubernetes-cluster@0.0.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-common@0.8.2
+ - @backstage/plugin-kubernetes-react@0.4.2
+
+## @backstage/plugin-kubernetes-node@0.1.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-notifications@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-signals-react@0.0.5-next.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-notifications-node@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-signals-node@0.1.11-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-org@0.6.29-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-org-react@0.1.28-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-permission-backend@0.5.49-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- fcb9356: Deprecated `createRouter` and its router options in favour of the new backend system.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.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.3-next.0
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.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.6-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- d298e6e: Deprecated `createRouter` and its router options in favour of the new backend system.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-node@0.4.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/backend-test-utils@0.6.0-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search@1.4.16-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-search-react@1.8.0-next.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend@1.5.17-next.0
+
+### Patch Changes
+
+- 5726390: Deprecate create router as the legacy backend system will no longer be supported.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/backend-openapi-utils@0.1.18-next.0
+ - @backstage/plugin-search-backend-node@1.3.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-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-catalog@0.2.2-next.0
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- 5726390: The following collator factories are deprecated, please [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) to the new backend system and follow the instructions below to install collators via module:
+
+ - `DefaultCatalogCollatorFactory`: ;
+ - `ToolDocumentCollatorFactory`: ;
+ - `DefaultTechDocsCollatorFactory`: .
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 5726390: Internal refactor to use `LoggerService` and `DatabaseService` instead of the legacy `Logger` and `PluginDatabaseManager` types.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-explore@0.2.2-next.0
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- 5726390: The following collator factories are deprecated, please [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) to the new backend system and follow the instructions below to install collators via module:
+
+ - `DefaultCatalogCollatorFactory`: ;
+ - `ToolDocumentCollatorFactory`: ;
+ - `DefaultTechDocsCollatorFactory`: .
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-pg@0.5.35-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 5726390: Internal refactor to use `LoggerService` and `DatabaseService` instead of the legacy `Logger` and `PluginDatabaseManager` types.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-techdocs@0.2.2-next.0
+
+### Patch Changes
+
+- 19ff127: Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided.
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- 5726390: The following collator factories are deprecated, please [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) to the new backend system and follow the instructions below to install collators via module:
+
+ - `DefaultCatalogCollatorFactory`: ;
+ - `ToolDocumentCollatorFactory`: ;
+ - `DefaultTechDocsCollatorFactory`: .
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-techdocs-node@1.12.11-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-node@1.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-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-signals@0.0.10-next.0
+
+### Patch Changes
+
+- 5add8e1: Added a `SignalsDisplay` extension to allows the signals plugin to be installed in an app as follows:
+
+ ```tsx
+ export default app.createRoot(
+ <>
+
+
+
+
+
+ {routes}
+
+ >,
+ );
+ ```
+
+ With this in place you can remove the explicit installation via the `plugins` option for `createApp`.
+
+- Updated dependencies
+ - @backstage/plugin-signals-react@0.0.5-next.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-node@0.1.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-react@0.0.5-next.0
+
+### Patch Changes
+
+- 0389801: Fix for `useSignal` returning the inverse value for `isSignalsAvailable`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-techdocs@1.10.9-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/plugin-techdocs-react@1.2.8-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-search-react@1.8.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.38-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.2.8-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-search-react@1.8.0-next.0
+ - @backstage/plugin-techdocs@1.10.9-next.0
+ - @backstage/plugin-catalog@1.22.1-next.0
+ - @backstage/test-utils@1.6.0-next.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+
+## @backstage/plugin-techdocs-backend@1.10.13-next.0
+
+### Patch Changes
+
+- 086c32d: Dedicated token for techdocs cache sync
+- 5b679ac: The `createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-techdocs-node@1.12.11-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.2.8-next.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration@1.14.0
+ - @backstage/integration-react@1.1.30
+
+## @backstage/plugin-techdocs-node@1.12.11-next.0
+
+### Patch Changes
+
+- 4417dd4: Fix typo and unify TechDocs casing in doc strings
+- 33ebb28: As the `@backstage/backend-common` package is deprecated, we have updated the `techdocs-node` package to stop depending on it.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @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.8-next.0
+
+### Patch Changes
+
+- 5ee3d27: Fixed issue in useShadowRootElements which could lead to unlimited render loops
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-user-settings@0.8.12-next.0
+
+### Patch Changes
+
+- fec8b57: Updated exports to use the new type parameters for extensions and extension blueprints.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-signals-react@0.0.5-next.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.24-next.0
+
+### Patch Changes
+
+- 164ce3e: In preparation to stop supporting to the legacy backend system, the `createRouter` function is now deprecated and we strongly recommend you [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) your backend to the new system.
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- 1b98099: Replaced usage of the deprecated identity service with the new HTTP auth service for the new backend system.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-signals-node@0.1.11-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.101-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.2.8-next.0
+ - @backstage/frontend-app-api@0.9.0-next.0
+ - @backstage/plugin-catalog-import@0.12.3-next.0
+ - @backstage/plugin-catalog-graph@0.4.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-user-settings@0.8.12-next.0
+ - @backstage/plugin-search-react@1.8.0-next.0
+ - @backstage/plugin-kubernetes@0.11.14-next.0
+ - @backstage/plugin-scaffolder@1.25.0-next.0
+ - @backstage/plugin-api-docs@0.11.9-next.0
+ - @backstage/plugin-devtools@0.1.18-next.0
+ - @backstage/plugin-techdocs@1.10.9-next.0
+ - @backstage/plugin-catalog@1.22.1-next.0
+ - @backstage/plugin-search@1.4.16-next.0
+ - @backstage/plugin-home@0.7.10-next.0
+ - @backstage/plugin-org@0.6.29-next.0
+ - @backstage/plugin-scaffolder-react@1.12.0-next.0
+ - @backstage/cli@0.27.1-next.0
+ - @backstage/plugin-signals@0.0.10-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7
+ - @backstage/plugin-notifications@0.3.1-next.0
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-search-common@1.2.14
+
+## example-app-next@0.0.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/plugin-techdocs-react@1.2.8-next.0
+ - @backstage/frontend-app-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-import@0.12.3-next.0
+ - @backstage/plugin-catalog-graph@0.4.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-user-settings@0.8.12-next.0
+ - @backstage/plugin-search-react@1.8.0-next.0
+ - @backstage/plugin-kubernetes@0.11.14-next.0
+ - @backstage/plugin-scaffolder@1.25.0-next.0
+ - @backstage/plugin-api-docs@0.11.9-next.0
+ - @backstage/plugin-techdocs@1.10.9-next.0
+ - @backstage/plugin-catalog@1.22.1-next.0
+ - @backstage/plugin-search@1.4.16-next.0
+ - @backstage/plugin-home@0.7.10-next.0
+ - @backstage/plugin-org@0.6.29-next.0
+ - @backstage/plugin-scaffolder-react@1.12.0-next.0
+ - @backstage/plugin-app@0.1.0-next.0
+ - @backstage/cli@0.27.1-next.0
+ - @backstage/plugin-signals@0.0.10-next.0
+ - @backstage/plugin-app-visualizer@0.1.10-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7
+ - @backstage/plugin-notifications@0.3.1-next.0
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-search-common@1.2.14
+
+## app-next-example-plugin@0.0.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-components@0.14.10
+
+## example-backend@0.0.30-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-backend@1.10.13-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-search-backend@1.5.17-next.0
+ - @backstage/plugin-kubernetes-backend@0.18.6-next.0
+ - @backstage/plugin-scaffolder-backend@1.25.0-next.0
+ - @backstage/plugin-app-backend@0.3.74-next.0
+ - @backstage/plugin-signals-backend@0.2.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.0
+ - @backstage/plugin-search-backend-module-explore@0.2.2-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/plugin-auth-backend@0.23.0-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.0
+ - @backstage/plugin-permission-backend@0.5.49-next.0
+ - @backstage/plugin-proxy-backend@0.5.6-next.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.0
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.0
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.0
+ - @backstage/plugin-devtools-backend@0.4.0-next.0
+ - @backstage/plugin-notifications-backend@0.4.0-next.0
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## example-backend-legacy@0.2.102-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-backend@1.10.13-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-search-backend@1.5.17-next.0
+ - @backstage/plugin-kubernetes-backend@0.18.6-next.0
+ - @backstage/plugin-scaffolder-backend@1.25.0-next.0
+ - @backstage/plugin-app-backend@0.3.74-next.0
+ - @backstage/plugin-signals-backend@0.2.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.0
+ - @backstage/plugin-search-backend-module-explore@0.2.2-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/plugin-auth-backend@0.23.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.0
+ - @backstage/plugin-events-backend@0.3.12-next.0
+ - @backstage/plugin-permission-backend@0.5.49-next.0
+ - @backstage/plugin-proxy-backend@0.5.6-next.0
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.0
+ - @backstage/plugin-search-backend-module-pg@0.5.35-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.0
+ - @backstage/plugin-devtools-backend@0.4.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.0
+ - @backstage/plugin-signals-node@0.1.11-next.0
+ - @backstage/catalog-client@1.6.6
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## e2e-test@0.2.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.19-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## techdocs-cli-embedded-app@0.2.100-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.2.8-next.0
+ - @backstage/plugin-techdocs@1.10.9-next.0
+ - @backstage/plugin-catalog@1.22.1-next.0
+ - @backstage/cli@0.27.1-next.0
+ - @backstage/test-utils@1.6.0-next.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+
+## @internal/plugin-todo-list-backend@1.0.31-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/errors@1.2.4
diff --git a/docs/releases/v1.31.0-next.1-changelog.md b/docs/releases/v1.31.0-next.1-changelog.md
new file mode 100644
index 0000000000..eb9b11125e
--- /dev/null
+++ b/docs/releases/v1.31.0-next.1-changelog.md
@@ -0,0 +1,2176 @@
+# Release v1.31.0-next.1
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.31.0-next.1](https://backstage.github.io/upgrade-helper/?to=1.31.0-next.1)
+
+## @backstage/backend-common@0.25.0-next.1
+
+### Minor Changes
+
+- a4bac3c: **BREAKING**: You can no longer supply a `basePath` option to the host discovery implementation. In the new backend system, the ability to choose this path has been removed anyway at the plugin router level.
+- 988c145: **BREAKING**: Simplifications and cleanup as part of the Backend System 1.0 work.
+
+ - The deprecated `dropDatabase` function has now been removed, without replacement.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+
+## @backstage/backend-defaults@0.5.0-next.1
+
+### Minor Changes
+
+- a4bac3c: **BREAKING**: You can no longer supply a `basePath` option to the host discovery implementation. In the new backend system, the ability to choose this path has been removed anyway at the plugin router level.
+- 055b75b: **BREAKING**: Simplifications and cleanup as part of the Backend System 1.0 work.
+
+ For the `/database` subpath exports:
+
+ - The deprecated `dropDatabase` function has now been removed, without replacement.
+ - The deprecated `LegacyRootDatabaseService` type has now been removed.
+ - The return type from `DatabaseManager.forPlugin` is now directly a `DatabaseService`, as arguably expected.
+ - `DatabaseManager.forPlugin` now requires the `deps` argument, with the logger and lifecycle services.
+
+ For the `/cache` subpath exports:
+
+ - The `PluginCacheManager` type has been removed. You can still import it from `@backstage/backend-common`, but it's deprecated there, and you should move off of that package by migrating fully to the new backend system.
+ - Accordingly, `CacheManager.forPlugin` immediately returns a `CacheService` instead of a `PluginCacheManager`. The outcome of this is that you no longer need to make the extra `.getClient()` call. The old `CacheManager` with the old behavior still exists on `@backstage/backend-common`, but the above recommendations apply.
+
+### Patch Changes
+
+- 622360e: Move down the discovery config to be in the root
+- fe6fd8c: Accept `ConfigService` instead of `Config` in constructors/factories
+- 5705424: Wrap scheduled tasks from the scheduler core service now in OpenTelemetry spans
+- b2a329d: Properly indent the config schema
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-app-api@0.10.0-next.1
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+
+## @backstage/core-compat-api@0.3.0-next.1
+
+### Minor Changes
+
+- 6db849e: **BREAKING**: The `namespace` parameter for API's is now defaulted to the `pluginId` which was discovered. This means that if you're overriding API's by using ID's directly, they might have changed to include the plugin ID too.
+
+### Patch Changes
+
+- c816e2d: Added support for new `FrontendPlugin` and `FrontendModule` types.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-app-api@0.9.0-next.1
+
+### Minor Changes
+
+- 7c80650: **BREAKING**: The `createSpecializedApp` function now creates a bare-bones app without any of the default app structure or APIs. To re-introduce this functionality if you need to use `createSpecializedApp` you can install the `app` plugin from `@backstage/plugin-app`.
+
+ In addition, the `createApp` and `CreateAppFeatureLoader` exports are now deprecated as they are being moved to `@backstage/frontend-defaults`, which should be used instead.
+
+### Patch Changes
+
+- c816e2d: Added support for new `FrontendPlugin` and `FrontendModule` types.
+- 948d431: Removing deprecated `namespace` parameter in favour of `pluginId` instead
+- Updated dependencies
+ - @backstage/frontend-defaults@0.1.0-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-defaults@0.1.0-next.0
+
+### Minor Changes
+
+- 7c80650: Initial release of this package, which provides a default app setup through the `createApp` function. This replaces the existing `createApp` method from `@backstage/frontend-app-api`.
+
+### Patch Changes
+
+- 7d19cd5: Added a new `CreateAppOptions` type for the `createApp` options.
+- 7d19cd5: Added `createPublicSignInApp`, used to creating apps for the public entry point.
+- Updated dependencies
+ - @backstage/frontend-app-api@0.9.0-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/plugin-app@0.1.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/app-defaults@1.5.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/backend-app-api@0.10.0-next.1
+
+### Patch Changes
+
+- c246372: Updated the error message for missing service dependencies to include the plugin and module IDs.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+
+## @backstage/backend-dynamic-feature-service@0.4.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-app-api@0.10.0-next.1
+ - @backstage/plugin-catalog-backend@1.25.3-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.25-next.1
+ - @backstage/plugin-events-backend@0.3.12-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/backend-openapi-utils@0.1.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/errors@1.2.4
+
+## @backstage/backend-plugin-api@0.9.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @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@0.6.0-next.1
+
+### Patch Changes
+
+- 710f621: Added missing service mock for `mockServices.rootConfig.mock`, and fixed the definition of `mockServices.rootHttpRouter.factory` to not have a duplicate callback.
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-app-api@0.10.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/catalog-client@1.6.7-next.0
+
+### Patch Changes
+
+- 1882cfe: Moved `getEntities` ordering to utilize database instead of having it inside catalog client
+
+ Please note that the latest version of `@backstage/catalog-client` will not order the entities in the same way as before. This is because the ordering is now done in the database query instead of in the client. If you rely on the ordering of the entities, you may need to update your backend plugin or code to handle this change.
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/cli@0.27.1-next.1
+
+### Patch Changes
+
+- d2d2313: Add `config.d.ts` files to the list of included file in `tsconfig.json`.
+
+ This allows ESLint to detect issues or deprecations in those files.
+
+- 97422b0: Update templates to not refer to backend-common
+
+- f865103: Updated dependency `esbuild` to `^0.23.0`.
+
+- 569c3f0: Fixed an issue where published frontend packages would end up with an invalid import structure if a single module imported both `.css` and `.svg` files.
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/eslint-plugin@0.1.8
+ - @backstage/integration@1.14.0
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/codemods@0.1.50-next.0
+
+### Patch Changes
+
+- 0894166: Updated dependency `jscodeshift` to `^0.16.0`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/core-components@0.14.11-next.0
+
+### Patch Changes
+
+- 06b8206: Added `titleComponent` prop to `SignInPage` component to allow further customization of the title using `ReactNode`
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/create-app@0.5.19-next.1
+
+### Patch Changes
+
+- d2d2313: Add `config.d.ts` files to the list of included file in `tsconfig.json`.
+
+ This allows ESLint to detect issues or deprecations in those files.
+
+- 97422b0: Update templates to not refer to backend-common
+
+- bf370c2: Remove references to the `@backstage/backend-tasks` in versions of the `create-app` package, as it has been deprecated.
+
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/dev-utils@1.0.38-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/app-defaults@1.5.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+
+## @backstage/frontend-plugin-api@0.8.0-next.1
+
+### Patch Changes
+
+- c816e2d: Added `createFrontendModule` as a replacement for `createExtensionOverrides`, which is now deprecated.
+
+ Deprecated the `BackstagePlugin` and `FrontendFeature` type in favor of `FrontendPlugin` and `FrontendFeature` from `@backstage/frontend-app-api` respectively.
+
+- 52f9c5a: Deprecated the `namespace` option for `createExtensionBlueprint` and `createExtension`, these are no longer required and will default to the `pluginId` instead.
+
+ You can migrate some of your extensions that use `createExtensionOverrides` to using `createFrontendModule` instead and providing a `pluginId` there.
+
+ ```ts
+ // Before
+ createExtensionOverrides({
+ extensions: [
+ createExtension({
+ name: 'my-extension',
+ namespace: 'my-namespace',
+ kind: 'test',
+ ...
+ })
+ ],
+ });
+
+ // After
+ createFrontendModule({
+ pluginId: 'my-namespace',
+ extensions: [
+ createExtension({
+ name: 'my-extension',
+ kind: 'test',
+ ...
+ })
+ ],
+ });
+ ```
+
+- 948d431: Removing deprecated `namespace` parameter in favour of `pluginId` instead
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/frontend-test-utils@0.2.0-next.1
+
+### Patch Changes
+
+- 948d431: Removing deprecated `namespace` parameter in favour of `pluginId` instead
+- Updated dependencies
+ - @backstage/frontend-app-api@0.9.0-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/plugin-app@0.1.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/test-utils@1.6.0-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/repo-tools@0.9.7-next.1
+
+### Patch Changes
+
+- 5c4aa2f: Updated dependency `@useoptic/openapi-utilities` to `^0.55.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.19-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/plugin-techdocs-node@1.12.11-next.1
+
+## @backstage/plugin-api-docs@0.11.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-catalog@1.22.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-app@0.1.0-next.1
+
+### Patch Changes
+
+- 52f9c5a: Deprecated the `namespace` option for `createExtensionBlueprint` and `createExtension`, these are no longer required and will default to the `pluginId` instead.
+
+ You can migrate some of your extensions that use `createExtensionOverrides` to using `createFrontendModule` instead and providing a `pluginId` there.
+
+ ```ts
+ // Before
+ createExtensionOverrides({
+ extensions: [
+ createExtension({
+ name: 'my-extension',
+ namespace: 'my-namespace',
+ kind: 'test',
+ ...
+ })
+ ],
+ });
+
+ // After
+ createFrontendModule({
+ pluginId: 'my-namespace',
+ extensions: [
+ createExtension({
+ name: 'my-extension',
+ kind: 'test',
+ ...
+ })
+ ],
+ });
+ ```
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-app-backend@0.3.74-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.25-next.1
+
+## @backstage/plugin-app-node@0.1.25-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config-loader@1.9.0
+
+## @backstage/plugin-app-visualizer@0.1.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-auth-backend@0.23.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.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.0-next.1
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.0-next.1
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.0-next.1
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.0-next.1
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.0-next.1
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.1
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.0-next.1
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.0-next.1
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.0-next.1
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.0-next.1
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.0-next.1
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.0-next.1
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.0-next.1
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.0-next.1
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.0-next.1
+
+### Patch Changes
+
+- 8d1fb8d: Throw correct error when email is missing from the claims
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-auth-backend@0.23.0-next.1
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-google-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/plugin-auth-backend@0.23.0-next.1
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.1.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+
+## @backstage/plugin-auth-node@0.5.2-next.1
+
+### Patch Changes
+
+- c46eb0f: Extend the "unable to resolve user identity" message
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-react@0.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog@1.22.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-search-react@1.8.0-next.1
+
+## @backstage/plugin-catalog-backend@1.25.3-next.1
+
+### Patch Changes
+
+- 1882cfe: Moved `getEntities` ordering to utilize database instead of having it inside catalog client
+
+ Please note that the latest version of `@backstage/catalog-client` will not order the entities in the same way as before. This is because the ordering is now done in the database query instead of in the client. If you rely on the ordering of the entities, you may need to update your backend plugin or code to handle this change.
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-openapi-utils@0.1.18-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.1
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-catalog-backend-module-azure@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-openapi-utils@0.1.18-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-catalog-backend-module-gcp@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-catalog-backend-module-github@0.7.3-next.1
+
+### Patch Changes
+
+- 5edd344: Refactor to use injected catalog client in the new backend system
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend-module-github@0.7.3-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.4.2-next.1
+
+### Patch Changes
+
+- 53b24d9: Internal update to use the new cache manager
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-catalog-backend-module-gitlab@0.4.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-catalog-backend@1.25.3-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-backend-module-ldap@0.9.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.25.3-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-catalog-backend@1.25.3-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-graph@0.4.9-next.1
+
+### Patch Changes
+
+- da91078: Fixed a bug in the `CatalogGraphPage` component where, after clicking on some nodes, clicking the back button would break the navigation. This issue caused the entire navigation to fail and behaved differently across various browsers.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-react@1.1.30
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-node@1.12.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+
+## @backstage/plugin-catalog-react@1.12.4-next.1
+
+### Patch Changes
+
+- ae9b6cb: Small internal fix to better work with recent `lodash` versions
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.0
+
+### Patch Changes
+
+- 4f08c85: Show additional info on DevTools unprocessed entities table
+
+ - Location path (so that it's easier to search the failed entity from the YAML URL)
+ - Time info of last discovery and next refresh time so that users can be aware of it and can sort the errors based on the time.
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-config-schema@0.1.59-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-devtools@0.1.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-devtools-common@0.1.12
+ - @backstage/plugin-permission-react@0.4.25
+
+## @backstage/plugin-devtools-backend@0.4.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.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.3-next.1
+
+## @backstage/plugin-events-backend@0.3.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.4.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-events-backend-module-azure@0.2.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-events-backend-module-github@0.2.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-events-backend-test-utils@0.1.35-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-events-node@0.4.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+
+## @backstage/plugin-home@0.7.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-home-react@0.1.17-next.0
+
+## @backstage/plugin-home-react@0.1.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-kubernetes@0.11.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-common@0.8.2
+ - @backstage/plugin-kubernetes-react@0.4.3-next.0
+
+## @backstage/plugin-kubernetes-backend@0.18.6-next.1
+
+### Patch Changes
+
+- ca96b66: Skip start without proper config
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.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-catalog-node@1.12.7-next.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+ - @backstage/plugin-kubernetes-node@0.1.19-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+
+## @backstage/plugin-kubernetes-cluster@0.0.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-kubernetes-common@0.8.2
+ - @backstage/plugin-kubernetes-react@0.4.3-next.0
+
+## @backstage/plugin-kubernetes-node@0.1.19-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-kubernetes-react@0.4.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-notifications@0.3.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-react@0.0.5-next.0
+
+## @backstage/plugin-notifications-backend@0.4.0-next.1
+
+### Patch Changes
+
+- f195972: Validate notification link when new notification is created
+- 5edd344: Refactor to use injected catalog client in the new backend system
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6-next.1
+ - @backstage/plugin-signals-node@0.1.11-next.1
+
+## @backstage/plugin-notifications-backend-module-email@0.3.0-next.1
+
+### Patch Changes
+
+- 5edd344: Refactor to use injected catalog client in the new backend system
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6-next.1
+
+## @backstage/plugin-notifications-node@0.2.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-node@0.1.11-next.1
+
+## @backstage/plugin-org@0.6.29-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-org-react@0.1.28-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @backstage/plugin-permission-backend@0.5.49-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+
+## @backstage/plugin-permission-node@0.8.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-proxy-backend@0.5.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder@1.25.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-scaffolder-react@1.12.0-next.1
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-react@1.1.30
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-backend@1.25.0-next.1
+
+### Patch Changes
+
+- f865103: Updated dependency `esbuild` to `^0.23.0`.
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.1
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.1
+ - @backstage/plugin-scaffolder-common@1.5.5
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.22
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6-next.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.12-next.1
+
+## @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-test-utils@0.6.0-next.1
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.1
+
+## @backstage/plugin-scaffolder-react@1.12.0-next.1
+
+### Patch Changes
+
+- c2cbe1e: Updated dependency `use-immer` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-search@1.4.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-search-react@1.8.0-next.1
+
+## @backstage/plugin-search-backend@1.5.17-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-openapi-utils@0.1.18-next.1
+ - @backstage/backend-plugin-api@0.9.0-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.3-next.1
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-catalog@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-explore@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-pg@0.5.35-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-techdocs@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-node@1.12.11-next.1
+
+## @backstage/plugin-search-backend-node@1.3.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-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.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.8
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-signals@0.0.10-next.1
+
+### Patch Changes
+
+- 3e9b1a4: Put a name on the `SignalsDisplay` component extension
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.5-next.0
+
+## @backstage/plugin-signals-backend@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+ - @backstage/plugin-signals-node@0.1.11-next.1
+
+## @backstage/plugin-signals-node@0.1.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## @backstage/plugin-techdocs@1.10.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.6-next.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-search-react@1.8.0-next.1
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-react@1.2.8-next.1
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.38-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/test-utils@1.6.0-next.0
+ - @backstage/plugin-catalog@1.22.1-next.1
+ - @backstage/plugin-search-react@1.8.0-next.1
+ - @backstage/plugin-techdocs@1.10.9-next.1
+ - @backstage/plugin-techdocs-react@1.2.8-next.1
+
+## @backstage/plugin-techdocs-backend@1.10.13-next.1
+
+### Patch Changes
+
+- 5edd344: Refactor to use injected catalog client in the new backend system
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.1
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-node@1.12.11-next.1
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration@1.14.0
+ - @backstage/integration-react@1.1.30
+ - @backstage/plugin-techdocs-react@1.2.8-next.1
+
+## @backstage/plugin-techdocs-node@1.12.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.14.0
+ - @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.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/version-bridge@1.0.8
+
+## @backstage/plugin-user-settings@0.8.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.6
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.5-next.0
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.24-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-node@0.1.11-next.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.101-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.1-next.1
+ - @backstage/frontend-app-api@0.9.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-graph@0.4.9-next.1
+ - @backstage/plugin-scaffolder-react@1.12.0-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.0
+ - @backstage/plugin-signals@0.0.10-next.1
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/app-defaults@1.5.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-api-docs@0.11.9-next.1
+ - @backstage/plugin-auth-react@0.1.6-next.0
+ - @backstage/plugin-catalog@1.22.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-import@0.12.3-next.1
+ - @backstage/plugin-devtools@0.1.18-next.1
+ - @backstage/plugin-home@0.7.10-next.1
+ - @backstage/plugin-kubernetes@0.11.14-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.1
+ - @backstage/plugin-notifications@0.3.1-next.1
+ - @backstage/plugin-org@0.6.29-next.1
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder@1.25.0-next.1
+ - @backstage/plugin-search@1.4.16-next.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-search-react@1.8.0-next.1
+ - @backstage/plugin-techdocs@1.10.9-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.1
+ - @backstage/plugin-techdocs-react@1.2.8-next.1
+ - @backstage/plugin-user-settings@0.8.12-next.1
+
+## example-app-next@0.0.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.1-next.1
+ - @backstage/frontend-defaults@0.1.0-next.0
+ - @backstage/frontend-app-api@0.9.0-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/plugin-app@0.1.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-graph@0.4.9-next.1
+ - @backstage/plugin-scaffolder-react@1.12.0-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.0
+ - @backstage/plugin-signals@0.0.10-next.1
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/app-defaults@1.5.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-api-docs@0.11.9-next.1
+ - @backstage/plugin-app-visualizer@0.1.10-next.1
+ - @backstage/plugin-auth-react@0.1.6-next.0
+ - @backstage/plugin-catalog@1.22.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-import@0.12.3-next.1
+ - @backstage/plugin-home@0.7.10-next.1
+ - @backstage/plugin-kubernetes@0.11.14-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.1
+ - @backstage/plugin-notifications@0.3.1-next.1
+ - @backstage/plugin-org@0.6.29-next.1
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder@1.25.0-next.1
+ - @backstage/plugin-search@1.4.16-next.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-search-react@1.8.0-next.1
+ - @backstage/plugin-techdocs@1.10.9-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.1
+ - @backstage/plugin-techdocs-react@1.2.8-next.1
+ - @backstage/plugin-user-settings@0.8.12-next.1
+
+## app-next-example-plugin@0.0.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+
+## example-backend@0.0.30-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/plugin-catalog-backend@1.25.3-next.1
+ - @backstage/plugin-scaffolder-backend@1.25.0-next.1
+ - @backstage/plugin-notifications-backend@0.4.0-next.1
+ - @backstage/plugin-kubernetes-backend@0.18.6-next.1
+ - @backstage/plugin-techdocs-backend@1.10.13-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-app-backend@0.3.74-next.1
+ - @backstage/plugin-auth-backend@0.23.0-next.1
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.1
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.1
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.1
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.1
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.1
+ - @backstage/plugin-devtools-backend@0.4.0-next.1
+ - @backstage/plugin-permission-backend@0.5.49-next.1
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+ - @backstage/plugin-proxy-backend@0.5.6-next.1
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.1
+ - @backstage/plugin-search-backend@1.5.17-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.1
+ - @backstage/plugin-search-backend-module-explore@0.2.2-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.1
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-signals-backend@0.2.0-next.1
+
+## example-backend-legacy@0.2.102-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/catalog-client@1.6.7-next.0
+ - @backstage/plugin-catalog-backend@1.25.3-next.1
+ - @backstage/plugin-scaffolder-backend@1.25.0-next.1
+ - @backstage/plugin-kubernetes-backend@0.18.6-next.1
+ - @backstage/plugin-techdocs-backend@1.10.13-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-app-backend@0.3.74-next.1
+ - @backstage/plugin-auth-backend@0.23.0-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.1
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.1
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-devtools-backend@0.4.0-next.1
+ - @backstage/plugin-events-backend@0.3.12-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+ - @backstage/plugin-permission-backend@0.5.49-next.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+ - @backstage/plugin-proxy-backend@0.5.6-next.1
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.1
+ - @backstage/plugin-search-backend@1.5.17-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.1
+ - @backstage/plugin-search-backend-module-explore@0.2.2-next.1
+ - @backstage/plugin-search-backend-module-pg@0.5.35-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.1
+ - @backstage/plugin-search-backend-node@1.3.2-next.1
+ - @backstage/plugin-signals-backend@0.2.0-next.1
+ - @backstage/plugin-signals-node@0.1.11-next.1
+
+## e2e-test@0.2.20-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.19-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## techdocs-cli-embedded-app@0.2.100-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.1-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/app-defaults@1.5.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/test-utils@1.6.0-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-catalog@1.22.1-next.1
+ - @backstage/plugin-techdocs@1.10.9-next.1
+ - @backstage/plugin-techdocs-react@1.2.8-next.1
+
+## @internal/plugin-todo-list@1.0.31-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-plugin-api@1.9.3
+
+## @internal/plugin-todo-list-backend@1.0.31-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/errors@1.2.4
diff --git a/docs/releases/v1.31.0-next.2-changelog.md b/docs/releases/v1.31.0-next.2-changelog.md
new file mode 100644
index 0000000000..1547a48332
--- /dev/null
+++ b/docs/releases/v1.31.0-next.2-changelog.md
@@ -0,0 +1,2415 @@
+# Release v1.31.0-next.2
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.31.0-next.2](https://backstage.github.io/upgrade-helper/?to=1.31.0-next.2)
+
+## @backstage/backend-app-api@1.0.0-next.2
+
+### Major Changes
+
+- ec1b4be: Release 1.0 of the new backend system! :tada:
+
+ The backend system is finally getting promoted to 1.0.0. This means that the API is now stable and breaking changes should not occur until version 2.0.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information what this means.
+
+ This release also marks the end of the old backend system based on `createRouter` exports. Going forward backend plugins packages will start to deprecate and later this year remove exports supporting the old backend system. If you would like to help out with this transition, see or consult the [migration guide](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating/#remove-support-for-the-old-backend-system).
+
+### Patch Changes
+
+- 6ed9264: chore(deps): bump `path-to-regexp` from 6.2.2 to 8.0.0
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/backend-plugin-api@1.0.0-next.2
+
+### Major Changes
+
+- ec1b4be: Release 1.0 of the new backend system! :tada:
+
+ The backend system is finally getting promoted to 1.0.0. This means that the API is now stable and breaking changes should not occur until version 2.0.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information what this means.
+
+ This release also marks the end of the old backend system based on `createRouter` exports. Going forward backend plugins packages will start to deprecate and later this year remove exports supporting the old backend system. If you would like to help out with this transition, see or consult the [migration guide](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating/#remove-support-for-the-old-backend-system).
+
+### Patch Changes
+
+- 8052b9b: Add a `toJSON` on refs so that they can appear in expectations in jest tests
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @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.0-next.2
+
+### Major Changes
+
+- ec1b4be: Release 1.0 of the new backend system! :tada:
+
+ The backend system is finally getting promoted to 1.0.0. This means that the API is now stable and breaking changes should not occur until version 2.0.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information what this means.
+
+ This release also marks the end of the old backend system based on `createRouter` exports. Going forward backend plugins packages will start to deprecate and later this year remove exports supporting the old backend system. If you would like to help out with this transition, see or consult the [migration guide](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating/#remove-support-for-the-old-backend-system).
+
+### Patch Changes
+
+- f421d2a: Make MySQL pool settings a bit more lax
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-app-api@1.0.0-next.2
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/backend-defaults@0.5.0-next.2
+
+### Minor Changes
+
+- baeef13: **BREAKING** Removed `createLifecycleMiddleware` and `LifecycleMiddlewareOptions` to clean up API surface. These exports have no external usage and do not provide value in its current form. If you were using these exports, please reach out to the maintainers to discuss your use case.
+
+### Patch Changes
+
+- 6ed9264: chore(deps): bump `path-to-regexp` from 6.2.2 to 8.0.0
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-app-api@1.0.0-next.2
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/cli-node@0.2.8-next.0
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/catalog-client@1.7.0-next.1
+
+### Minor Changes
+
+- 78475c3: Allow offset mode paging in entity list provider
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/dev-utils@1.1.0-next.2
+
+### Minor Changes
+
+- 10b1452: Allow using translations in `createDevApp`
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/app-defaults@1.5.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/catalog-model@1.6.0
+
+## @backstage/integration@1.15.0-next.0
+
+### Minor Changes
+
+- 1573014: The Gerrit integration can now resolve Gitiles urls that point to the following
+ refs:
+
+ - HEAD
+ - A SHA
+ - Tag
+ - Branch
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-auth0-provider@0.1.0-next.0
+
+### Minor Changes
+
+- d908d8c: New module for `@backstage/plugin-auth-backend` that adds a Auth0 auth provider.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.0-next.0
+
+### Minor Changes
+
+- 527d973: New module for `@backstage/plugin-auth-backend` that adds a `Bitbucket Server` auth provider.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-catalog@1.23.0-next.2
+
+### Minor Changes
+
+- 78475c3: Allow offset mode paging in entity list provider
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-search-react@1.8.0-next.2
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-scaffolder-common@1.5.5
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-catalog-backend@1.26.0-next.2
+
+### Minor Changes
+
+- 78475c3: Allow offset mode paging in entity list provider
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/backend-openapi-utils@0.1.18-next.2
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.2
+
+## @backstage/plugin-catalog-react@1.13.0-next.2
+
+### Minor Changes
+
+- 78475c3: Allow offset mode paging in entity list provider
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-scaffolder@1.25.0-next.2
+
+### Minor Changes
+
+- 860ad3a: Expose styles for TemplateEditor, TemplateFormPreviewer and CustomFieldExplorer
+- 4baad34: Added support for `omitExtraData` and `liveOmit` for rjsf in the scaffolder
+
+### Patch Changes
+
+- b0a5c9f: The `ui:options` for `OwnedEntityPicker` field are now passed to `EntityPicker`. This allows you to use any `ui:options` which `EntityPicker` accepts in the `OwnedEntityPicker` field including `allowArbitraryValues` and `defaultNamespace`.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- fa9d8da: Updated dependency `@rjsf/utils` to `5.20.1`.
+ Updated dependency `@rjsf/core` to `5.20.1`.
+ Updated dependency `@rjsf/material-ui` to `5.20.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.20.1`.
+- 0944334: Removed duplicated titles on Scaffolder `TemplateListPage` component
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/plugin-scaffolder-react@1.12.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-backend@1.25.0-next.2
+
+### Minor Changes
+
+- df9ae9e: Added scaffolder action publish:bitbucketCloud:pull-request
+
+### Patch Changes
+
+- f0c6b25: Allow listing file contents with `debug:log` scaffolder action
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.2
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.0-next.2
+ - @backstage/plugin-scaffolder-common@1.5.5
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-react@1.12.0-next.2
+
+### Minor Changes
+
+- 4baad34: Added support for `omitExtraData` and `liveOmit` for rjsf in the scaffolder
+
+### Patch Changes
+
+- 1f3c5aa: Fix scaffolder review step issue where schema options are not handled for fields on multi-step templates.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- fa9d8da: Updated dependency `@rjsf/utils` to `5.20.1`.
+ Updated dependency `@rjsf/core` to `5.20.1`.
+ Updated dependency `@rjsf/material-ui` to `5.20.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.20.1`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/app-defaults@1.5.11-next.1
+
+### Patch Changes
+
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-permission-react@0.4.26-next.0
+
+## @backstage/backend-common@0.25.0-next.2
+
+### Patch Changes
+
+- 6ed9264: chore(deps): bump `path-to-regexp` from 6.2.2 to 8.0.0
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- 3606843: Internal fixes to match `testcontainers` update
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+
+## @backstage/backend-dynamic-feature-service@0.4.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-app-api@1.0.0-next.2
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/cli-node@0.2.8-next.0
+ - @backstage/plugin-catalog-backend@1.26.0-next.2
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/plugin-events-backend@0.3.12-next.2
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.25-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/backend-openapi-utils@0.1.18-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/errors@1.2.4
+
+## @backstage/cli@0.27.1-next.2
+
+### Patch Changes
+
+- 16ffdd6: Remove direct `vite` dependency
+
+- 8069f4a: Update Scaffolder module template to add itself to the backend
+
+- 0e1a817: The app build process now outputs an additional `index.html.tmpl` file. This is an non-templated version of the `index.html` file, which can be used to delay templating until runtime.
+
+ The new `index.html.tmpl` file also sets a `backstage-public-path` meta tag to be templated at runtime. The meta tag is in turn picked up by the new `@backstage/cli/config/webpack-public-path.js` entry point script, which uses it to set the runtime public path of the Webpack bundle.
+
+- d29fc1b: Updated dependency `@module-federation/enhanced` to `^0.6.0`.
+
+- 4ebf36f: Upgrade to `vite@v5`
+
+- 2d3caaf: The build commands now support the new `backstage.inline` flag in `package.json`, which causes the contents of private packages to be inlined into the consuming package, rather than be treated as an external dependency.
+
+- 3d88455: Add support for `backstage:^` version ranges to versions:bump when using the experimental yarn plugin
+
+- Updated dependencies
+ - @backstage/cli-node@0.2.8-next.0
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/eslint-plugin@0.1.9-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/cli-node@0.2.8-next.0
+
+### Patch Changes
+
+- 0c70f43: Add definition for the new `backstage.inline` field in `package.json`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/config-loader@1.9.1-next.0
+
+### Patch Changes
+
+- ef3c507: Updated dependency `typescript-json-schema` to `^0.65.0`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/core-app-api@1.14.3-next.0
+
+### Patch Changes
+
+- ea69e46: The `defaultConfigLoader` now also reads configuration from scripts tags with `type="backstage.io/config"`. The tag is expected to contain a JSON-serialized array of `AppConfig` objects. If any of these script tags are present, the injected runtime configuration in the static assets will no longer be used.
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/core-compat-api@0.3.0-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/version-bridge@1.0.9-next.0
+
+## @backstage/core-components@0.14.11-next.1
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- 0944334: Removed default title set to Unknown page on `ContentHeaderTitle` component to support usage of component without title prop.
+- f325258: Use getOptionalString for optional app.support.items\[].links\[].title
+- af4c146: Support menu items should not be buttons in favour of links
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- dbbd93e: Internal update to match recent React types
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/core-plugin-api@1.9.4-next.0
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/create-app@0.5.19-next.2
+
+### Patch Changes
+
+- Bumped create-app version.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/eslint-plugin@0.1.9-next.0
+
+### Patch Changes
+
+- 08895e3: Added support for linting dependencies on workspace packages with the `backstage.inline` flag.
+
+## @backstage/frontend-app-api@0.9.0-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-defaults@0.1.0-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-defaults@0.1.0-next.1
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/plugin-app@0.1.0-next.2
+ - @backstage/frontend-app-api@0.9.0-next.2
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/frontend-plugin-api@0.8.0-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 043d7cd: Internal refactor
+- 2a61422: The `factory` option is no longer required when overriding an extension.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-test-utils@0.2.0-next.2
+
+### Patch Changes
+
+- 2a61422: The extension tester will no longer unconditionally enable any additional extensions that have been added.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 043d7cd: Internal refactor
+- Updated dependencies
+ - @backstage/test-utils@1.6.0-next.1
+ - @backstage/plugin-app@0.1.0-next.2
+ - @backstage/frontend-app-api@0.9.0-next.2
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/integration-react@1.1.31-next.0
+
+### Patch Changes
+
+- 8a9d797: Remove unnecessary broad permissions from Gitlab `SCMAuth`
+
+ Newer versions of Gitlab (after 2019) do not require the broad api permissions to write to repos.
+
+- Updated dependencies
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/repo-tools@0.9.7-next.2
+
+### Patch Changes
+
+- 1a8837e: Avoid generating API reports for packages with `backstage.inline` set.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/cli-node@0.2.8-next.0
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.19-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/plugin-techdocs-node@1.12.11-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+
+## @backstage/test-utils@1.6.0-next.1
+
+### Patch Changes
+
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/theme@0.5.7-next.0
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+## @backstage/version-bridge@1.0.9-next.0
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+
+## @backstage/plugin-api-docs@0.11.9-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 8a474f2: Updating docs to use `createFrontendModule` instead
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/plugin-catalog@1.23.0-next.2
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-app@0.1.0-next.2
+
+### Patch Changes
+
+- 57bf6ae: Fix issue with `AlertDisplay` and other components defined with `AppRootElementBlueprint` not being rendered when at the `SignInWrapper`
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-permission-react@0.4.26-next.0
+
+## @backstage/plugin-app-backend@0.3.74-next.2
+
+### Patch Changes
+
+- 590fb2d: **BREAKING**: The app backend now supports the new `index.html.tmpl` output from `@backstage/cli`. If available, the `index.html` will be templated at runtime with the current configuration of the app backend.
+
+ This is marked as a breaking change because you must now supply the app build-time configuration to the backend. This change also affects the public path behavior, where it is no longer necessary to build the app with the correct public path upfront. You now only need to supply a correct `app.baseUrl` to the app backend plugin at runtime.
+
+ An effect that this change has is that the `index.html` will now contain and present the frontend configuration in an easily readable way, which can aid in debugging. This data was always available in the frontend, but it was injected and hidden in the static bundle.
+
+ This templating behavior is enabled by default, but it can be disabled by setting the `app.disableConfigInjection` configuration option to `true`.
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.25-next.2
+
+## @backstage/plugin-app-node@0.1.25-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config-loader@1.9.1-next.0
+
+## @backstage/plugin-app-visualizer@0.1.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+
+## @backstage/plugin-auth-backend@0.23.0-next.2
+
+### Patch Changes
+
+- 527d973: Migrated the `Bitbucket Server` auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-bitbucket-server-provider` module.
+- d908d8c: Migrated the `Auth0` auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-auth0-provider` module.
+- 92118cd: Updated dependency `@node-saml/passport-saml` to `^5.0.0`.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-auth-backend-module-auth0-provider@0.1.0-next.0
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.0-next.2
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.0-next.2
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.2
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.0-next.2
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.0-next.2
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.0-next.2
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.0-next.2
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.0-next.2
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.0-next.2
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.0-next.2
+ - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.0-next.2
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.0-next.2
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.0-next.2
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.0-next.2
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.0-next.2
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/plugin-auth-backend@0.23.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-google-provider@0.2.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.3.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/plugin-auth-backend@0.23.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.1.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.3.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+
+## @backstage/plugin-auth-node@0.5.2-next.2
+
+### Patch Changes
+
+- d908d8c: Accepts an optional options object in the `PassportOAuthAuthenticatorHelper.authenticate` method.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-react@0.1.6-next.1
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.23-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.0-next.0
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-catalog-backend-module-azure@0.2.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/backend-openapi-utils@0.1.18-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23-next.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-catalog-backend-module-gcp@0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-catalog-backend-module-github@0.7.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-catalog-backend@1.26.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-backend-module-github@0.7.3-next.2
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.4.2-next.2
+
+### Patch Changes
+
+- 0476be3: Add the `relations` array to allow Backstage to mirror GitLab's membership behavior, including descendant, inherited, and shared-from-group memberships.
+
+ The previous `allowInherited` config option will be deprecated in future versions. Use the `relations` array with the `INHERITED` option instead.
+
+ ```yaml
+ catalog:
+ providers:
+ gitlab:
+ development:
+ relations:
+ - INHERITED
+ ```
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-catalog-backend-module-gitlab@0.4.2-next.2
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-catalog-backend@1.26.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-backend-module-ldap@0.9.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-catalog-backend@1.26.0-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-catalog-backend@1.26.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-graph@0.4.9-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 8a474f2: Updating docs to use `createFrontendModule` instead
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.3-next.2
+
+### Patch Changes
+
+- f3c90da: Support button title should be contained in a single menu item
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-catalog-node@1.12.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.1
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-config-schema@0.1.59-next.1
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-devtools@0.1.18-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-devtools-common@0.1.12
+
+## @backstage/plugin-devtools-backend@0.4.0-next.2
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.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-events-backend@0.3.12-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.4.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-events-backend-module-azure@0.2.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-events-backend-module-github@0.2.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-events-backend-test-utils@0.1.35-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-events-node@0.4.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+
+## @backstage/plugin-home@0.7.10-next.2
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- fa9d8da: Updated dependency `@rjsf/utils` to `5.20.1`.
+ Updated dependency `@rjsf/core` to `5.20.1`.
+ Updated dependency `@rjsf/material-ui` to `5.20.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.20.1`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-home-react@0.1.17-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-home-react@0.1.17-next.1
+
+### Patch Changes
+
+- fa9d8da: Updated dependency `@rjsf/utils` to `5.20.1`.
+ Updated dependency `@rjsf/core` to `5.20.1`.
+ Updated dependency `@rjsf/material-ui` to `5.20.1`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.20.1`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+
+## @backstage/plugin-kubernetes@0.11.14-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/plugin-kubernetes-react@0.4.3-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-kubernetes-backend@0.18.6-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-kubernetes-node@0.1.19-next.2
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/catalog-model@1.6.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-catalog-node@1.12.7-next.2
+ - @backstage/plugin-kubernetes-common@0.8.2
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-kubernetes-cluster@0.0.15-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/plugin-kubernetes-react@0.4.3-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-kubernetes-node@0.1.19-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-kubernetes-react@0.4.3-next.1
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.2
+
+## @backstage/plugin-notifications@0.3.1-next.2
+
+### Patch Changes
+
+- 653f60b: Severity filter label newly contains "Min severity" to better describe range instead of exact value.
+- 4a53dd0: Implement icon in backend and show icon in table if available.
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-signals-react@0.0.5-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-notifications-backend@0.4.0-next.2
+
+### Patch Changes
+
+- 4a53dd0: Implement icon in backend and show icon in table if available.
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6-next.2
+ - @backstage/plugin-signals-node@0.1.11-next.2
+
+## @backstage/plugin-notifications-backend-module-email@0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6-next.2
+
+## @backstage/plugin-notifications-node@0.2.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-node@0.1.11-next.2
+
+## @backstage/plugin-org@0.6.29-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 8a474f2: Updating docs to use `createFrontendModule` instead
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## @backstage/plugin-org-react@0.1.28-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/catalog-model@1.6.0
+
+## @backstage/plugin-permission-backend@0.5.49-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-permission-node@0.8.3-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-permission-react@0.4.26-next.0
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-proxy-backend@0.5.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.2
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.0-next.2
+
+### Patch Changes
+
+- df9ae9e: Added scaffolder action publish:bitbucketCloud:pull-request
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23-next.0
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.2
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.0-next.2
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.2
+
+### Patch Changes
+
+- 22a19e6: Added the ability for the actions `publish:github` and `github:repo:create` to take inputs for 'custom properties' for organization repositories.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.2
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.6-next.2
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.2
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.0-next.2
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.0-next.2
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.12-next.2
+
+## @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.5
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.12-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-test-utils@1.0.0-next.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.4.11-next.2
+
+## @backstage/plugin-search@1.4.16-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/plugin-search-react@1.8.0-next.2
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend@1.5.17-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/backend-openapi-utils@0.1.18-next.2
+ - @backstage/plugin-permission-node@0.8.3-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-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-catalog@0.2.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-explore@0.2.2-next.2
+
+### Patch Changes
+
+- 276f433: Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.5`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-pg@0.5.35-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-techdocs@0.2.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-techdocs-node@1.12.11-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-node@1.3.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-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.0-next.2
+
+### Patch Changes
+
+- dbbd93e: Internal update to match recent React types
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-signals@0.0.10-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-signals-react@0.0.5-next.1
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-backend@0.2.0-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.2
+ - @backstage/plugin-signals-node@0.1.11-next.2
+
+## @backstage/plugin-signals-node@0.1.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## @backstage/plugin-signals-react@0.0.5-next.1
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-techdocs@1.10.9-next.2
+
+### Patch Changes
+
+- c891b69: Add `FavoriteToggle` in `core-components` to standardise favorite marking
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- 97db53e: Enhanced the table hover effect with a lighter color and updated the border radius to align with Backstage's theme styling
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/plugin-search-react@1.8.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-auth-react@0.1.6-next.1
+ - @backstage/plugin-techdocs-react@1.2.8-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.38-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/plugin-techdocs@1.10.9-next.2
+ - @backstage/plugin-catalog@1.23.0-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/test-utils@1.6.0-next.1
+ - @backstage/plugin-search-react@1.8.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/plugin-techdocs-react@1.2.8-next.2
+
+## @backstage/plugin-techdocs-backend@1.10.13-next.2
+
+### Patch Changes
+
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-techdocs-node@1.12.11-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.2
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/plugin-techdocs-react@1.2.8-next.2
+
+## @backstage/plugin-techdocs-node@1.12.11-next.2
+
+### Patch Changes
+
+- 57da51f: Add support for mapping custom tags in the techdocs yaml parser that validates the mkdocs.yaml file
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- 3606843: Internal fixes to match `testcontainers` update
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @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.8-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-user-settings@0.8.12-next.2
+
+### Patch Changes
+
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- da86ac2: Update README to clarify location of additional tabs example
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-signals-react@0.0.5-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.24-next.2
+
+### Patch Changes
+
+- 5d1670f: Update README installation instructions
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-node@0.1.11-next.2
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.101-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/plugin-techdocs@1.10.9-next.2
+ - @backstage/plugin-catalog@1.23.0-next.2
+ - @backstage/plugin-home@0.7.10-next.2
+ - @backstage/cli@0.27.1-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/plugin-scaffolder@1.25.0-next.2
+ - @backstage/plugin-notifications@0.3.1-next.2
+ - @backstage/plugin-scaffolder-react@1.12.0-next.2
+ - @backstage/app-defaults@1.5.11-next.1
+ - @backstage/plugin-catalog-import@0.12.3-next.2
+ - @backstage/plugin-search-react@1.8.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-app-api@0.9.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-api-docs@0.11.9-next.2
+ - @backstage/plugin-auth-react@0.1.6-next.1
+ - @backstage/plugin-catalog-graph@0.4.9-next.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.2
+ - @backstage/plugin-kubernetes@0.11.14-next.2
+ - @backstage/plugin-org@0.6.29-next.2
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/plugin-search@1.4.16-next.2
+ - @backstage/plugin-signals@0.0.10-next.2
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.2
+ - @backstage/plugin-techdocs-react@1.2.8-next.2
+ - @backstage/plugin-user-settings@0.8.12-next.2
+ - @backstage/plugin-devtools@0.1.18-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-search-common@1.2.14
+
+## example-app-next@0.0.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/plugin-techdocs@1.10.9-next.2
+ - @backstage/plugin-catalog@1.23.0-next.2
+ - @backstage/plugin-home@0.7.10-next.2
+ - @backstage/cli@0.27.1-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/plugin-scaffolder@1.25.0-next.2
+ - @backstage/plugin-notifications@0.3.1-next.2
+ - @backstage/plugin-scaffolder-react@1.12.0-next.2
+ - @backstage/app-defaults@1.5.11-next.1
+ - @backstage/plugin-catalog-import@0.12.3-next.2
+ - @backstage/plugin-app@0.1.0-next.2
+ - @backstage/plugin-search-react@1.8.0-next.2
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-app-api@0.9.0-next.2
+ - @backstage/frontend-defaults@0.1.0-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-api-docs@0.11.9-next.2
+ - @backstage/plugin-auth-react@0.1.6-next.1
+ - @backstage/plugin-catalog-graph@0.4.9-next.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.2
+ - @backstage/plugin-kubernetes@0.11.14-next.2
+ - @backstage/plugin-org@0.6.29-next.2
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/plugin-search@1.4.16-next.2
+ - @backstage/plugin-signals@0.0.10-next.2
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.2
+ - @backstage/plugin-techdocs-react@1.2.8-next.2
+ - @backstage/plugin-user-settings@0.8.12-next.2
+ - @backstage/plugin-app-visualizer@0.1.10-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-search-common@1.2.14
+
+## app-next-example-plugin@0.0.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+
+## example-backend@0.0.30-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/plugin-devtools-backend@0.4.0-next.2
+ - @backstage/plugin-scaffolder-backend@1.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/plugin-auth-backend@0.23.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/plugin-catalog-backend@1.26.0-next.2
+ - @backstage/plugin-app-backend@0.3.74-next.2
+ - @backstage/plugin-notifications-backend@0.4.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.2
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.2
+ - @backstage/plugin-kubernetes-backend@0.18.6-next.2
+ - @backstage/plugin-permission-backend@0.5.49-next.2
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/plugin-search-backend@1.5.17-next.2
+ - @backstage/plugin-signals-backend@0.2.0-next.2
+ - @backstage/plugin-techdocs-backend@1.10.13-next.2
+ - @backstage/plugin-search-backend-module-explore@0.2.2-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.2
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.2
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.2
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.2
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.2
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.2
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-proxy-backend@0.5.6-next.2
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.2
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.2
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+
+## example-backend-legacy@0.2.102-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.2
+ - @backstage/plugin-devtools-backend@0.4.0-next.2
+ - @backstage/plugin-scaffolder-backend@1.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/plugin-auth-backend@0.23.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/catalog-client@1.7.0-next.1
+ - @backstage/plugin-catalog-backend@1.26.0-next.2
+ - @backstage/plugin-app-backend@0.3.74-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/plugin-events-backend@0.3.12-next.2
+ - @backstage/plugin-kubernetes-backend@0.18.6-next.2
+ - @backstage/plugin-permission-backend@0.5.49-next.2
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/plugin-search-backend@1.5.17-next.2
+ - @backstage/plugin-signals-backend@0.2.0-next.2
+ - @backstage/plugin-techdocs-backend@1.10.13-next.2
+ - @backstage/plugin-search-backend-module-explore@0.2.2-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.2
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.2
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-proxy-backend@0.5.6-next.2
+ - @backstage/plugin-search-backend-module-catalog@0.2.2-next.2
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.2
+ - @backstage/plugin-search-backend-module-pg@0.5.35-next.2
+ - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.2
+ - @backstage/plugin-search-backend-node@1.3.2-next.2
+ - @backstage/plugin-signals-node@0.1.11-next.2
+
+## e2e-test@0.2.20-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.19-next.2
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## @internal/frontend@0.0.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/version-bridge@1.0.9-next.0
+ - @backstage/types@1.1.1
+
+## techdocs-cli-embedded-app@0.2.100-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-techdocs@1.10.9-next.2
+ - @backstage/plugin-catalog@1.23.0-next.2
+ - @backstage/cli@0.27.1-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/app-defaults@1.5.11-next.1
+ - @backstage/test-utils@1.6.0-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-techdocs-react@1.2.8-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+
+## @internal/plugin-todo-list@1.0.31-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-plugin-api@1.9.4-next.0
+
+## @internal/plugin-todo-list-backend@1.0.31-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/errors@1.2.4
diff --git a/docs/releases/v1.31.0.md b/docs/releases/v1.31.0.md
new file mode 100644
index 0000000000..37b11c2b56
--- /dev/null
+++ b/docs/releases/v1.31.0.md
@@ -0,0 +1,144 @@
+---
+id: v1.31.0
+title: v1.31.0
+description: Backstage Release v1.31.0
+---
+
+These are the release notes for the v1.31.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
+
+### Backend System 1.0 🎉
+
+The time has come for releasing [the new Backend System](https://backstage.io/docs/backend-system/) as stable version 1.0! This means that the API is now stable and breaking changes should not occur until version 2.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information about this.
+
+There is documentation in place both for [migrating backends](https://backstage.io/docs/backend-system/building-backends/migrating) and [migrating plugins](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating), and we encourage you to start doing so as soon as possible. Going forward, we will increasingly refer to this as "The backend system", and the previous one as "The old backend system". The main Backstage and [community-plugins](https://github.com/backstage/community-plugins) repositories have already been more or less fully migrated over.
+
+The backend system brings a host of improvements to the way that backends and their features are constructed. Instead of the old convention-based structure that could lead to migration pains, features now fit together with dependency injection like a jigsaw puzzle while leveraging powerful core services and extending each other dynamically with additional behaviors. And this is just scratching the surface of it - do check out [the docs](https://backstage.io/docs/backend-system/)!
+
+We are very excited about this important milestone after a long period of development and refinement together with our passionate community, and hope that you will find it as refreshing and simple yet powerful as it was envisioned to be. This also lays the foundation for us being able to continue iterating at a high pace without incurring undue end user breakages during upgrades.
+
+Keep the feedback coming! Either on the [Community Discord](https://discord.gg/backstage-687207715902193673), or [through issues](https://github.com/backstage/backstage/issues/new/choose) on GitHub. Also if you’re looking for a way to help, please take a look at these [backstage](https://github.com/backstage/backstage/issues/26353) and [community plugins](https://github.com/backstage/community-plugins/issues/1176) issues about deprecating old-backend capabilities of already migrated plugins.
+
+#### Technical details
+
+At a technical level, the following packages are now on major version 1, and their major version 0 will stop receiving feature updates:
+
+- `@backstage/backend-app-api`
+- `@backstage/backend-plugin-api`
+- `@backstage/backend-test-utils`
+
+The following packages are deprecated and frozen (have stopped receiving updates). Please use the above three packages and `@backstage/backend-defaults` to replace them. You may still use the compatibility adapters in `@backstage/backend-common` short term while performing a gradual migration.
+
+- `@backstage/backend-common`
+- `@backstage/backend-tasks`
+
+The following core services have been entirely removed. Please migrate to the [new auth system](https://backstage.io/docs/tutorials/auth-service-migration/).
+
+- `coreServices.identity`
+- `coreServices.tokenManager`
+
+The backwards compatibility with plugins using legacy auth through the token manager service has also been removed. This means that instead of falling back to using the old token manager, requests towards plugins that don't support the new auth system will simply fail. Please make sure that all plugins in your deployment are hosted within a backend instance from the new backend system; a mixture of new and old will lead to auth problems.
+
+For a lot more detail about what changed and what migration steps might be needed, check the release notes for versions [1.27](https://backstage.io/docs/next/releases/v1.27.0#backend-system-deprecations), [1.28](https://backstage.io/docs/next/releases/v1.28.0#new-backend-system-api-movement-towards-10-release), [1.29](https://backstage.io/docs/next/releases/v1.29.0#breaking-backend-system-deprecations-and-removals) and [1.30](https://backstage.io/docs/releases/v1.30.0#breaking-backend-system-deprecations-and-removals).
+
+### New Frontend System Updates
+
+Some new things have landed in this version for the continued work on the New Frontend System. We’ve introduced the `@backstage/plugin-app` package, which is now responsible for housing the built in extensions and providing an entry point to override them using `appPlugin.override()`.
+
+There’s a new round of deprecations as we move forward with the New Frontend System. Namespace is no longer required to be provided to all extensions, or Blueprints and their respective `.make` or `.makeWithOverrides` methods. This will now default to the ID of the plugin that they are installed alongside.
+
+We’ve deprecated `createExtensionOverrides` and introduced a new `createFrontendModule` method which replaces it and takes a required `pluginId` for which to associate the extensions that you’re providing to override or compliment the corresponding plugin.
+
+We’ve also deprecated the `createApp` import from `@backstage/frontend-app-api` and you should now use the same import from `@backstage/frontend-defaults` instead which aligns nicely to the New Backend System patterns.
+
+There’s more information on the above deprecations and migrations in the [1.31 migration docs](https://backstage.io/docs/frontend-system/architecture/migrations#131)
+
+We’ve removed V1 extension support, so all extensions should now be defined with the array form of outputs, instead of the previously deprecated object form.
+
+All previous extension creators that have the Blueprint equivalent have also been removed as they were previously deprecated. Instead of `createExtension` you should migrate to using `Blueprint.make` instead.
+
+Also the deprecated `.render` method has been removed from `createExtensionTester`, you should be able to use `renderInTestApp` directly with the `tester.reactElement()` instead.
+
+There’s also [migration docs](https://backstage.io/docs/frontend-system/architecture/migrations#130) for the above removals from the last deprecation ICYMI!
+
+### Yarn v4 by Default
+
+When creating a new Backstage repository with `@backstage/create-app`, it will now be powered by Yarn version 4. There have been several improvements in later versions of Yarn, so this should improve the experience when getting started.
+
+If you are still on version 1 in your pre-existing repository, there’s [a guide](https://backstage.io/docs/tutorials/yarn-migration/) for getting onto newer releases. At this point we recommend moving ahead with moving off of version 1 of Yarn.
+
+Contributed by [@awanlin](https://github.com/awanlin) in [#26610](https://github.com/backstage/backstage/pull/26610)
+
+### App Runtime Templating
+
+The `@backstage/plugin-app-backend` now supports injection of all parts of the frontend configuration at runtime, including the public path and configuration values that are templated into `index.html`.
+
+The build process for frontend apps in the `@backstage/cli` now outputs an additional `index.html.tmpl` file. If this file is present in the build, the `app` backend will use this file to template a new `index.html` using the configuration that’s present in the `app` backend. This change also switches the full frontend configuration to be injected directly into the `index.html` file inside a `script` tag, rather than deep in the static resources.
+
+### Guest auth no longer halting production startup
+
+The `@backstage/plugin-auth-backend-module-guest-provider` module will no longer cause the backend to fail to start up in production, it now instead refuses authentication attempts. The halting of the startup could lead to knock-on effects such as migration tables staying locked.
+
+### New Catalog Permissions
+
+The `analyze-location` endpoint of the catalog is now protected by the `catalog.location.analyze` permission, and the `validate-entity` endpoint is now protected by the `catalog.entity.validate` permission. If you have enabled the [permissions system](https://backstage.io/docs/permissions/overview), you may want to adjust your policy accordingly.
+
+Contributed by [@04kash](https://github.com/04kash) in [#25924](https://github.com/backstage/backstage/pull/25924)
+
+### GitLab Provider
+
+The GitLab org entity provider now has a new `relations` configuration option that controls how GitLab memberships are modeled in Backstage. As part of this change the existing `allowInherited` option has been deprecated as it can now be expressed as `relations: [INHERITED]`.
+
+Contributed by [@elaine-mattos](https://github.com/elaine-mattos) in [#25363](https://github.com/backstage/backstage/pull/25363)
+
+### Star Icon Overrides
+
+Allow custom star icons to be provided via the star and unstarred icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+
+### Migrated Auth Providers
+
+The last two backend auth providers - Auth0 and BitBucket Server - were migrated to new backend modules, closing the big community effort in getting the [auth providers migration](https://github.com/backstage/backstage/issues/19476) done.
+
+Thanks again to everyone who helped out, it is greatly appreciated!
+
+### Catalog Client Performance Improvements
+
+A hotspot was found in the code, where calls to the catalog backend to fetch entities performed work on the client side that were better done on the server side. After this update, you may see significant reduction in CPU usage on callers that fetch large amounts of data from the catalog.
+
+Contributed by [@drodil](https://github.com/drodil) in [#26240](https://github.com/backstage/backstage/pull/26240)
+
+### New Catalog Service Mocks
+
+When testing features that interact with the catalog, it’s common to want to inject a mocked or faked catalog client. To make life simpler, we’ve added a `catalogServiceMock` to `@backstage/plugin-catalog-node/testUtils`. Just like many of the `mockServices` from the test backend utilities, it lets you create partial mocks to make assertions on, as well as entire fake catalogs pre-populated with a static set of entities. Check it out!
+
+### Scaffolder Fixes
+
+Added support for `liveOmit` and `omitExtraData` options to the form which will allow for trimming superfluous data from the resulting data collected from the user. We will be testing this one for this release and promote this as the default if all goes to plan for the next mainline release. Thanks [@jboeijenga](https://github.com/jboeijenga)!
+
+[@stepghenglass](https://github.com/stephenglass) has been on a roll, and contributed a bunch of fixes for the Scaffolder and the `SecretField`. It now supports being `disabled`, `required` and `maxLength` and `minLength` being set from the schema. They’ve also contributed some fixes for the `ReviewState` component, to correctly parse the `ui:backstage` options for nested fields in the parameters schema. Thanks to [@richcooper95](https://github.com/richcooper95) for some other improvements to that component too and making it look much better when you have nested properties in the summary 💅.
+
+## Security Fixes
+
+- Fix in the Catalog backend where a vulnerability could be exploited to disrupt the backend instance availability.
+- A fix for a vulnerability in the TechDocs backend that could allow unauthorized access to TechDocs content when hosting the content externally.
+- A fix for a vulnerability in the TechDocs backend that could allow authenticated users to bypass script injection protections.
+
+## 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.31.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.32.0-next.0-changelog.md b/docs/releases/v1.32.0-next.0-changelog.md
new file mode 100644
index 0000000000..8168a5659a
--- /dev/null
+++ b/docs/releases/v1.32.0-next.0-changelog.md
@@ -0,0 +1,2238 @@
+# Release v1.32.0-next.0
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.32.0-next.0](https://backstage.github.io/upgrade-helper/?to=1.32.0-next.0)
+
+## @backstage/cli@0.28.0-next.0
+
+### Minor Changes
+
+- 6129076: **BREAKING**: Removed the following deprecated commands:
+
+ - `create`: Use `backstage-cli new` instead
+ - `create-plugin`: Use `backstage-cli new` instead
+ - `plugin:diff`: Use `backstage-cli fix` instead
+ - `test`: Use `backstage-cli repo test` or `backstage-cli package test` instead
+ - `versions:check`: Use `yarn dedupe` or `yarn-deduplicate` instead
+ - `clean`: Use `backstage-cli package clean` instead
+
+ In addition, the experimental `install` and `onboard` commands have been removed since they have not received any updates since their introduction and we're expecting usage to be low. If you where relying on these commands, please let us know by opening an issue towards the main Backstage repository.
+
+### Patch Changes
+
+- 520a383: Added functionality to the prepack script that will append the default export type for entry points to the `exports` object before publishing. This is to help with identifying the declarative integration points for plugins without needing to fetch or run the plugins first.
+- 094eaa3: Remove references to in-repo backend-common
+- 79ba5a8: The `LEGACY_BACKEND_START` flag is now deprecated.
+- Updated dependencies
+ - @backstage/catalog-model@1.7.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.8
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.1
+ - @backstage/errors@1.2.4
+ - @backstage/eslint-plugin@0.1.9
+ - @backstage/integration@1.15.0
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/core-plugin-api@1.10.0-next.0
+
+### Minor Changes
+
+- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time.
+
+ This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons).
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/frontend-app-api@0.10.0-next.0
+
+### Minor Changes
+
+- 4a5ba19: Removed deprecated `createApp` and `CreateAppFeatureLoader` from `@backstage/frontend-app-api`, use the same `createApp` and `CreateAppFeatureLoader` import from `@backstage/frontend-defaults` instead.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/frontend-defaults@0.1.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/frontend-plugin-api@0.9.0-next.0
+
+### Minor Changes
+
+- 4a5ba19: Removed deprecated `namespace` option from `createExtension` and `createExtensionBlueprint`, including `.make` and `.makeWithOverides`, it's no longer necessary and will use the `pluginId` instead.
+
+ Removed deprecated `createExtensionOverrides` this should be replaced with `createFrontendModule` instead.
+
+ Removed deprecated `BackstagePlugin` type, use `FrontendPlugin` type instead from this same package.
+
+- bfd4bec: **BREAKING PRODUCERS**: The `IconComponent` no longer accepts `fontSize="default"`. This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time.
+
+ This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective `SvgIcon` types into interfaces where relevant (e.g. as app icons).
+
+### Patch Changes
+
+- 873e424: Internal refactor of usage of opaque types.
+
+- 323aae8: It is now possible to override the blueprint parameters when overriding an extension created from a blueprint:
+
+ ```ts
+ const myExtension = MyBlueprint.make({
+ params: {
+ myParam: 'myDefault',
+ },
+ });
+
+ const myOverride = myExtension.override({
+ params: {
+ myParam: 'myOverride',
+ },
+ });
+ const myFactoryOverride = myExtension.override({
+ factory(origFactory) {
+ return origFactory({
+ params: {
+ myParam: 'myOverride',
+ },
+ });
+ },
+ });
+ ```
+
+ The provided parameters will be merged with the original parameters of the extension.
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/repo-tools@0.10.0-next.0
+
+### Minor Changes
+
+- 30c2be9: Update @microsoft/api-extractor and use their api report resolution.
+ Change api report format from `api-report.md` to `report.api.md`
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.8
+ - @backstage/config-loader@1.9.1
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog@1.24.0-next.0
+
+### Minor Changes
+
+- 71f9f0c: Updated default columns for location entities to remove description and tags from the catalog table view.
+
+### Patch Changes
+
+- 46b5a20: Empty states updated with external link icon for learn more links
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/plugin-search-react@1.8.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-permission-react@0.4.27-next.0
+ - @backstage/plugin-scaffolder-common@1.5.6
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-scaffolder@1.26.0-next.0
+
+### Minor Changes
+
+- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin
+- cc3f80c: Added ability to create a new local scaffolder template to ease onboarding when creating new templates.
+- 5492eb6: Added ability to link to a specific action on the actions page
+
+### Patch Changes
+
+- b2b2aa8: Fix extra divider displayed in owner list picker on list tasks page
+- 7f1f483: Create a separate route for the Scaffolder template editor and add the ability to refresh the page without closing the directory. Also, when the directory is closed, the user will stay on the editor page and can load a template folder from there.
+- 7a3d622: Create a separate route for the template form editor so we refresh it without being redirected to scaffolder edit page.
+- 4698646: Change task list created at column to show timestamp
+- 4130291: Create a separate route for the custom fields explorer so we refresh it without being redirected to scaffolder edit page.
+- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed
+- 09fcd95: Update the Scaffolder template editor to quickly access installed custom fields and actions when editing a template.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-scaffolder-react@1.13.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-permission-react@0.4.27-next.0
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-scaffolder-backend@1.26.0-next.0
+
+### Minor Changes
+
+- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses.
+
+### Patch Changes
+
+- 734c2d4: Add `fetch:template:file` scaffolder action to download a single file and template the contents. Example usage:
+
+ ```yaml
+ - id: fetch-file
+ name: Fetch File
+ action: fetch:template:file
+ input:
+ url: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/skeleton/catalog-info.yaml
+ targetPath: './target/catalog-info.yaml'
+ values:
+ component_id: My Component
+ owner: Test
+ ```
+
+- 094eaa3: Remove references to in-repo backend-common
+
+- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.0
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-scaffolder-node@0.5.0-next.0
+
+### Minor Changes
+
+- 3ec4e6d: Added pagination support for listing of tasks and the ability to filter on several users and task statuses.
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-scaffolder-react@1.13.0-next.0
+
+### Minor Changes
+
+- bf6eaf3: Added support for `FormFieldBlueprint` to create field extensions in the Scaffolder plugin
+
+### Patch Changes
+
+- 11e0752: Make it possible to manually retry the scaffolder template from the step it failed
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/theme@0.5.7
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+ - @backstage/plugin-permission-react@0.4.27-next.0
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/app-defaults@1.5.12-next.0
+
+### Patch Changes
+
+- 46b5a20: Added `externalLink` to icon defaults
+- 8c40e55: Updated the `bitbucket-server-auth` default API to set its environment based on the `auth.environment` config option instead of being hardcoded to `development`.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-permission-react@0.4.27-next.0
+
+## @backstage/backend-app-api@1.0.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+
+- 04af116: The backend will no longer exit immediately if any plugin or modules fails to initialize. Instead, the backend will wait for all plugins and modules to either start up successfully or throw, and then shut down the backend if there were any initialization errors.
+
+ This fixes an issue where backend initialization errors in adjacent plugins during database schema migration could cause the database migrations to be stuck in a locked state.
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-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/backend-defaults@0.5.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/backend-app-api@1.0.1-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.8
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.1
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+
+## @backstage/backend-dynamic-feature-service@0.4.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- 2f88f88: Updated backend installation instructions.
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/backend-app-api@1.0.1-next.0
+ - @backstage/plugin-catalog-backend@1.26.1-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-events-backend@0.3.13-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.8
+ - @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.26-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/backend-openapi-utils@0.1.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/backend-plugin-api@1.0.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-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.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/backend-app-api@1.0.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/core-app-api@1.15.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/core-compat-api@0.3.1-next.0
+
+### Patch Changes
+
+- 4a5ba19: Internal update to remove deprecated `BackstagePlugin` type and move to `FrontendPlugin`
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/core-components@0.15.1-next.0
+
+### Patch Changes
+
+- 46b5a20: `Link` component now accepts `externalLinkIcon` prop
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.7
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/create-app@0.5.21-next.0
+
+### Patch Changes
+
+- a7674d6: Fixed lack of `.yarnrc.yml` in the template.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/dev-utils@1.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/app-defaults@1.5.12-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/theme@0.5.7
+
+## @backstage/frontend-defaults@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/frontend-app-api@0.10.0-next.0
+ - @backstage/plugin-app@0.1.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/frontend-test-utils@0.2.1-next.0
+
+### Patch Changes
+
+- 873e424: Internal refactor of usage of opaque types.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/frontend-app-api@0.10.0-next.0
+ - @backstage/plugin-app@0.1.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/test-utils@1.6.1-next.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/integration-react@1.1.32-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.0
+
+## @techdocs/cli@1.8.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-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.12-next.0
+
+## @backstage/test-utils@1.6.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-react@0.4.27-next.0
+
+## @backstage/plugin-api-docs@0.11.10-next.0
+
+### Patch Changes
+
+- 46b5a20: Empty states updated with external link icon for learn more links
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog@1.24.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-permission-react@0.4.27-next.0
+
+## @backstage/plugin-app@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-permission-react@0.4.27-next.0
+
+## @backstage/plugin-app-backend@0.3.75-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-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.26-next.0
+
+## @backstage/plugin-app-node@0.1.26-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config-loader@1.9.1
+
+## @backstage/plugin-app-visualizer@0.1.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+
+## @backstage/plugin-auth-backend@0.23.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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.1-next.0
+ - @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.0
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.0
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.0
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.0
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-auth-backend@0.23.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-auth-backend@0.23.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+
+## @backstage/plugin-auth-node@0.5.3-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-backend@1.26.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-openapi-utils@0.1.19-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-catalog-backend-module-azure@0.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-openapi-utils@0.1.19-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.3-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-gcp@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-github@0.7.4-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend-module-github@0.7.4-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.4-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-backend-module-ldap@0.9.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-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-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-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.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-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-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-graph@0.4.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/plugin-catalog-common@1.1.0
+
+## @backstage/plugin-catalog-node@1.13.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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-catalog-react@1.13.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-react@0.4.27-next.0
+
+## @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-config-schema@0.1.60-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-devtools@0.1.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-devtools-common@0.1.12
+ - @backstage/plugin-permission-react@0.4.27-next.0
+
+## @backstage/plugin-devtools-backend@0.4.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/backend-plugin-api@1.0.1-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-events-backend@0.3.13-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+
+- 5c728ee: The events backend now has its own built-in event bus for distributing events across multiple backend instances. It exposes a new HTTP API under `/bus/v1/` for publishing and reading events from the bus, as well as its own storage and notification mechanism for events.
+
+ The backing event store for the bus only supports scaled deployment if PostgreSQL is used as the DBMS. If SQLite or MySQL is used, the event bus will fall back to an in-memory store that does not support multiple backend instances.
+
+ The default `EventsService` implementation from `@backstage/plugin-events-node` has also been updated to use the new events bus.
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-openapi-utils@0.1.19-next.0
+ - @backstage/backend-plugin-api@1.0.1-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.3-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-events-backend-module-azure@0.2.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+
+## @backstage/plugin-events-backend-module-github@0.2.12-next.0
+
+### Patch Changes
+
+- 2f88f88: Updated backend installation instructions.
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.12-next.0
+
+### Patch Changes
+
+- 2f88f88: Updated backend installation instructions.
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-events-backend-test-utils@0.1.36-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## @backstage/plugin-events-node@0.4.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- 2f88f88: Updated backend installation instructions.
+- a90ce4a: The default implementation of the `EventsService` now uses the new event bus for distributing events across multiple backend instances if the events backend plugin is installed.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-home@0.7.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-home-react@0.1.18-next.0
+
+## @backstage/plugin-home-react@0.1.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+
+## @backstage/plugin-kubernetes@0.11.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+ - @backstage/plugin-kubernetes-react@0.4.4-next.0
+
+## @backstage/plugin-kubernetes-backend@0.18.7-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-kubernetes-node@0.1.20-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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-catalog-node@1.13.1-next.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-kubernetes-cluster@0.0.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+ - @backstage/plugin-kubernetes-react@0.4.4-next.0
+
+## @backstage/plugin-kubernetes-node@0.1.20-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-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.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-notifications@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.7
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-signals-react@0.0.6-next.0
+
+## @backstage/plugin-notifications-backend@0.4.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-notifications-node@0.2.7-next.0
+ - @backstage/plugin-signals-node@0.1.12-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-notifications-backend-module-email@0.3.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-notifications-node@0.2.7-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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.13.1-next.0
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-notifications-node@0.2.7-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-signals-node@0.1.12-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-org@0.6.30-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+
+## @backstage/plugin-org-react@0.1.29-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+
+## @backstage/plugin-permission-backend@0.5.50-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-permission-node@0.8.4-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-permission-react@0.4.27-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-proxy-backend@0.5.7-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.23
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- f2f68cf: Updated `gitlab:group:ensureExists` action to instead use oauth client.
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/plugin-notifications-node@0.2.7-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.5.0-next.0
+ - @backstage/backend-test-utils@1.0.1-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-search@1.4.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/plugin-search-react@1.8.1-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend@1.5.18-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/backend-openapi-utils@0.1.19-next.0
+ - @backstage/backend-plugin-api@1.0.1-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-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-catalog@0.2.3-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- 2f88f88: Updated backend installation instructions.
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0
+
+### Patch Changes
+
+- d78b07c: Align the configuration schema with the docs and actual behavior of the code
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-explore@0.2.3-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- 2f88f88: Updated backend installation instructions.
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-pg@0.5.36-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- 2f88f88: Updated backend installation instructions.
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-node@1.12.12-next.0
+
+## @backstage/plugin-search-backend-node@1.3.3-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-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.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-signals@0.0.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.6-next.0
+
+## @backstage/plugin-signals-backend@0.2.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-signals-node@0.1.12-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-node@0.1.12-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-react@0.0.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-techdocs@1.10.10-next.0
+
+### Patch Changes
+
+- a77cb40: Make `emptyState` input optional on `entity-content:techdocs` extension so that
+ the default empty state extension works correctly.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/plugin-search-react@1.8.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.7-next.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-react@1.2.9-next.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.39-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.24.0-next.0
+ - @backstage/plugin-techdocs@1.10.10-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/plugin-search-react@1.8.1-next.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/test-utils@1.6.1-next.0
+ - @backstage/plugin-techdocs-react@1.2.9-next.0
+
+## @backstage/plugin-techdocs-backend@1.10.14-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- Updated dependencies
+ - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-node@1.12.12-next.0
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/integration@1.15.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/plugin-techdocs-react@1.2.9-next.0
+
+## @backstage/plugin-techdocs-node@1.12.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/integration@1.15.0
+ - @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.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/version-bridge@1.0.9
+
+## @backstage/plugin-user-settings@0.8.13-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/theme@0.5.7
+ - @backstage/types@1.1.1
+ - @backstage/plugin-signals-react@0.0.6-next.0
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/plugin-signals-node@0.1.12-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.102-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder@1.26.0-next.0
+ - @backstage/plugin-catalog@1.24.0-next.0
+ - @backstage/cli@0.28.0-next.0
+ - @backstage/plugin-scaffolder-react@1.13.0-next.0
+ - @backstage/plugin-api-docs@0.11.10-next.0
+ - @backstage/frontend-app-api@0.10.0-next.0
+ - @backstage/plugin-techdocs@1.10.10-next.0
+ - @backstage/app-defaults@1.5.12-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-graph@0.4.10-next.0
+ - @backstage/plugin-catalog-import@0.12.4-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/plugin-devtools@0.1.19-next.0
+ - @backstage/plugin-home@0.7.11-next.0
+ - @backstage/plugin-kubernetes@0.11.15-next.0
+ - @backstage/plugin-org@0.6.30-next.0
+ - @backstage/plugin-search@1.4.17-next.0
+ - @backstage/plugin-search-react@1.8.1-next.0
+ - @backstage/plugin-user-settings@0.8.13-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.7-next.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.16-next.0
+ - @backstage/plugin-notifications@0.3.2-next.0
+ - @backstage/plugin-permission-react@0.4.27-next.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-signals@0.0.11-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0
+ - @backstage/plugin-techdocs-react@1.2.9-next.0
+
+## example-app-next@0.0.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder@1.26.0-next.0
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog@1.24.0-next.0
+ - @backstage/cli@0.28.0-next.0
+ - @backstage/plugin-scaffolder-react@1.13.0-next.0
+ - @backstage/plugin-api-docs@0.11.10-next.0
+ - @backstage/frontend-app-api@0.10.0-next.0
+ - @backstage/plugin-techdocs@1.10.10-next.0
+ - @backstage/app-defaults@1.5.12-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/frontend-defaults@0.1.1-next.0
+ - @backstage/plugin-app@0.1.1-next.0
+ - @backstage/plugin-app-visualizer@0.1.11-next.0
+ - @backstage/plugin-catalog-graph@0.4.10-next.0
+ - @backstage/plugin-catalog-import@0.12.4-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/plugin-home@0.7.11-next.0
+ - @backstage/plugin-kubernetes@0.11.15-next.0
+ - @backstage/plugin-org@0.6.30-next.0
+ - @backstage/plugin-search@1.4.17-next.0
+ - @backstage/plugin-search-react@1.8.1-next.0
+ - @backstage/plugin-user-settings@0.8.13-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.7-next.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.16-next.0
+ - @backstage/plugin-notifications@0.3.2-next.0
+ - @backstage/plugin-permission-react@0.4.27-next.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-signals@0.0.11-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0
+ - @backstage/plugin-techdocs-react@1.2.9-next.0
+
+## app-next-example-plugin@0.0.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-components@0.15.1-next.0
+
+## example-backend@0.0.31-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.26.0-next.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0
+ - @backstage/plugin-search-backend-module-explore@0.2.3-next.0
+ - @backstage/plugin-notifications-backend@0.4.1-next.0
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/plugin-kubernetes-backend@0.18.7-next.0
+ - @backstage/plugin-permission-backend@0.5.50-next.0
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/plugin-devtools-backend@0.4.1-next.0
+ - @backstage/plugin-techdocs-backend@1.10.14-next.0
+ - @backstage/plugin-catalog-backend@1.26.1-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-signals-backend@0.2.1-next.0
+ - @backstage/plugin-events-backend@0.3.13-next.0
+ - @backstage/plugin-search-backend@1.5.18-next.0
+ - @backstage/plugin-proxy-backend@0.5.7-next.0
+ - @backstage/plugin-auth-backend@0.23.1-next.0
+ - @backstage/plugin-app-backend@0.3.75-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## example-backend-legacy@0.2.103-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0
+ - @backstage/plugin-scaffolder-backend@1.26.0-next.0
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0
+ - @backstage/plugin-search-backend-module-explore@0.2.3-next.0
+ - @backstage/plugin-search-backend-module-pg@0.5.36-next.0
+ - @backstage/plugin-search-backend-node@1.3.3-next.0
+ - @backstage/plugin-kubernetes-backend@0.18.7-next.0
+ - @backstage/plugin-permission-backend@0.5.50-next.0
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/plugin-devtools-backend@0.4.1-next.0
+ - @backstage/plugin-techdocs-backend@1.10.14-next.0
+ - @backstage/plugin-catalog-backend@1.26.1-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-signals-backend@0.2.1-next.0
+ - @backstage/plugin-events-backend@0.3.13-next.0
+ - @backstage/plugin-search-backend@1.5.18-next.0
+ - @backstage/plugin-proxy-backend@0.5.7-next.0
+ - @backstage/plugin-auth-backend@0.23.1-next.0
+ - @backstage/plugin-signals-node@0.1.12-next.0
+ - @backstage/plugin-app-backend@0.3.75-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## e2e-test@0.2.21-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.21-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## @internal/frontend@0.0.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.9
+
+## @internal/scaffolder@0.0.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.13.0-next.0
+
+## techdocs-cli-embedded-app@0.2.101-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.24.0-next.0
+ - @backstage/cli@0.28.0-next.0
+ - @backstage/plugin-techdocs@1.10.10-next.0
+ - @backstage/app-defaults@1.5.12-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/test-utils@1.6.1-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-techdocs-react@1.2.9-next.0
+
+## @internal/plugin-todo-list@1.0.32-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+
+## @internal/plugin-todo-list-backend@1.0.32-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/errors@1.2.4
diff --git a/docs/releases/v1.32.0-next.1-changelog.md b/docs/releases/v1.32.0-next.1-changelog.md
new file mode 100644
index 0000000000..d62c0e753f
--- /dev/null
+++ b/docs/releases/v1.32.0-next.1-changelog.md
@@ -0,0 +1,1556 @@
+# Release v1.32.0-next.1
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.32.0-next.1](https://backstage.github.io/upgrade-helper/?to=1.32.0-next.1)
+
+## @backstage/cli@0.28.0-next.1
+
+### Minor Changes
+
+- 55b8b84: **BREAKING**: The Jest configuration defined at `@backstage/cli/config/jest` no longer collects configuration defined in the `"jest"` field from all parent `package.json` files. Instead, it will only read and merge configuration from the `package.json` in the monorepo root if it exists, as well as the target package. In addition, configuration defined in the root `package.json` will now only be merged into each package configuration if it is a valid project-level configuration key.
+
+### Patch Changes
+
+- 03810d2: Remove unknown dependency `diff`
+- cebee4f: Added support for a new experimental `EXPERIMENTAL_TRIM_NEXT_ENTRY` flag which removes any `./next` entry points present in packages when building and publishing.
+- 55b8b84: The Jest configuration will now search for a `src/setupTests.*` file with any valid script extension, not only `.ts`.
+- Updated dependencies
+ - @backstage/eslint-plugin@0.1.10-next.0
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.8
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.1
+ - @backstage/errors@1.2.4
+ - @backstage/release-manifests@0.0.11
+ - @backstage/types@1.1.1
+
+## @backstage/integration-react@1.2.0-next.1
+
+### Minor Changes
+
+- a11495a: Added new ScmAuth method `forBitbucketServer` that uses correct OAuth scopes by default. Also updated `forBitbucket` method to allow overriding the default OAuth scopes.
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- 3dbac17: Revert of change #26430
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/config@1.2.0
+
+## @backstage/repo-tools@0.10.0-next.1
+
+### Minor Changes
+
+- 8eb3033: Adds a new command `backstage-repo-tools peer-deps` for validating your usage of peer dependencies in your plugins. It currently supports react related peer dependencies. It also has a `--fix` mode for quickly fixing any issues that it finds.
+
+### Patch Changes
+
+- 1f6706f: Properly log instructions when APIs do not match
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.8
+ - @backstage/config-loader@1.9.1
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-catalog-react@1.14.0-next.1
+
+### Minor Changes
+
+- 6812980: Added a new prop, `disableTooltip` to the `EntityRefLink` component
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/catalog-client@1.7.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-scaffolder@1.26.0-next.1
+
+### Minor Changes
+
+- c433ae9: Improved the layout of the manage templates page (`/edit`) by adding icons and descriptions that better describe what each page is for. Updated the header menu to link back to the scaffolder create page.
+- 7bfaf23: Text field content of the `EntityPicker` is now more readable as it uses entity title instead of entity reference.
+
+### Patch Changes
+
+- f6c15d8: Apply `defaultValue` props in `MultiEntityPicker`
+- e969dc7: Move `@types/react` to a peer dependency.
+- 785d68f: Add support for pagination in scaffolder tasks list
+- 94a7bcd: Change "Register Existing Component" CTA to outlined as it's not a primary action on the scaffolder pages
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/plugin-scaffolder-react@1.13.0-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/catalog-client@1.7.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-scaffolder-common@1.5.6
+
+## @backstage/plugin-scaffolder-react@1.13.0-next.1
+
+### Minor Changes
+
+- d851b5b: Renamed Template Editor to Manage Templates.
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- 785d68f: Add support for pagination in scaffolder tasks list
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/app-defaults@1.5.12-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/theme@0.5.8-next.0
+
+## @backstage/backend-defaults@0.5.1-next.1
+
+### Patch Changes
+
+- 920004b: Updating error message for getProjectId when fetching Gitlab project from its url to be more accurate
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-app-api@1.0.1-next.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.8
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.1
+ - @backstage/errors@1.2.4
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-permission-node@0.8.4-next.0
+
+## @backstage/backend-dynamic-feature-service@0.4.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.2-next.1
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/backend-app-api@1.0.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.8
+ - @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.26-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/plugin-events-backend@0.3.13-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/backend-test-utils@1.0.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/backend-app-api@1.0.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## @backstage/core-app-api@1.15.1-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/core-compat-api@0.3.1-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+
+## @backstage/core-components@0.15.1-next.1
+
+### Patch Changes
+
+- 3f76d0e: Correct size of FavoriteToggle and inherit non-starred color from parent
+- e969dc7: Move `@types/react` to a peer dependency.
+- 83e2887: Fixed a bug in the `SidebarSubmenu` core component that caused the nested menu to overlap with the sidebar when the user hovers over the pinned sidebar.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/core-plugin-api@1.10.0-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/create-app@0.5.21-next.1
+
+### Patch Changes
+
+- Bumped create-app version.
+- Updated dependencies
+ - @backstage/cli-common@0.1.14
+
+## @backstage/dev-utils@1.1.2-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/app-defaults@1.5.12-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/catalog-model@1.7.0
+
+## @backstage/eslint-plugin@0.1.10-next.0
+
+### Patch Changes
+
+- 63963f6: Internal refactor to deal with `estree` upgrade
+
+## @backstage/frontend-app-api@0.10.0-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/frontend-defaults@0.1.1-next.1
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-defaults@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/frontend-app-api@0.10.0-next.1
+ - @backstage/plugin-app@0.1.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @backstage/frontend-plugin-api@0.9.0-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/frontend-test-utils@0.2.1-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/frontend-app-api@0.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/test-utils@1.6.1-next.1
+ - @backstage/plugin-app@0.1.1-next.1
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+
+## @backstage/integration@1.15.1-next.0
+
+### Patch Changes
+
+- 920004b: Updating error message for getProjectId when fetching Gitlab project from its url to be more accurate
+- 090e49a: Updated functions parseHarnessUrl, getHarnessLatestCommitUrl, getHarnessFileContentsUrl and getHarnessArchiveUrl to fix parsing of urls
+- Updated dependencies
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+
+## @techdocs/cli@1.8.20-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/plugin-techdocs-node@1.12.12-next.1
+
+## @backstage/test-utils@1.6.1-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/theme@0.5.8-next.0
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+
+## @backstage/version-bridge@1.0.10-next.0
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+
+## @backstage/plugin-api-docs@0.11.11-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-catalog@1.24.0-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+
+## @backstage/plugin-api-docs-module-protoc-gen-doc@0.1.8-next.0
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+
+## @backstage/plugin-app@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/theme@0.5.8-next.0
+
+## @backstage/plugin-app-visualizer@0.1.11-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+
+## @backstage/plugin-auth-react@0.1.7-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.24-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+
+## @backstage/plugin-catalog@1.24.0-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-search-react@1.8.1-next.1
+ - @backstage/catalog-client@1.7.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-scaffolder-common@1.5.6
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-catalog-backend@1.26.2-next.1
+
+### Patch Changes
+
+- 62747f8: Fixed a bug where the concurrency limiter for URL reading was not honored
+- 8206f49: Fix a bug where etags were expiring too soon in the URL reader
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-openapi-utils@0.1.19-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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-node@1.13.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.2.3-next.1
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-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/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-catalog-backend-module-azure@0.2.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.3.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.24-next.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.3-next.1
+
+### Patch Changes
+
+- 5b6edf1: Fixed an issue preventing the provider's `schedule` config from being applied."
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-backend-module-github@0.7.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.2-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-backend-module-github@0.7.5-next.1
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-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.13.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.1
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.2-next.1
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.2-next.1
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.26.2-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## @backstage/plugin-catalog-graph@0.4.11-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.12.5-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/catalog-client@1.7.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-unprocessed-entities@0.2.9-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+
+## @backstage/plugin-config-schema@0.1.60-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-devtools@0.1.19-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-devtools-common@0.1.12
+
+## @backstage/plugin-home@0.7.12-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-home-react@0.1.18-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-home-react@0.1.18-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+
+## @backstage/plugin-kubernetes@0.11.16-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- 605e0bb: Updated dependency `@kubernetes-models/base` to `^5.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-kubernetes-react@0.4.4-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-kubernetes-cluster@0.0.17-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- 605e0bb: Updated dependency `@kubernetes-models/base` to `^5.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-kubernetes-react@0.4.4-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-kubernetes-react@0.4.4-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- 605e0bb: Updated dependency `@kubernetes-models/base` to `^5.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.8.3
+
+## @backstage/plugin-notifications@0.3.2-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/plugin-signals-react@0.0.6-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-notifications-common@0.0.5
+
+## @backstage/plugin-org@0.6.31-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+
+## @backstage/plugin-org-react@0.1.30-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+
+## @backstage/plugin-permission-react@0.4.27-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/config@1.2.0
+ - @backstage/plugin-permission-common@0.8.1
+
+## @backstage/plugin-scaffolder-backend@1.26.0-next.1
+
+### Patch Changes
+
+- 2f90932: Include step name and step id to checkpoint key
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.1
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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-node@0.5.3-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.24-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.1
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.1
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-bitbucket-cloud-common@0.2.24-next.0
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.1-next.1
+
+### Patch Changes
+
+- 66a6b45: Use protocol from Bitbucket Server apiBaseUrl config parameter instead of hard-coded https
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/plugin-notifications-common@0.0.5
+ - @backstage/plugin-notifications-node@0.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.1
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.5.6
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.13-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/backend-test-utils@1.0.1-next.1
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-node@0.5.0-next.1
+
+## @backstage/plugin-search@1.4.18-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-search-react@1.8.1-next.1
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend@1.5.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/backend-openapi-utils@0.1.19-next.0
+ - @backstage/backend-plugin-api@1.0.1-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.4-next.0
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-catalog@0.2.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration-aws-node@0.1.12
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-explore@0.2.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-pg@0.5.36-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-search-backend-module-techdocs@0.2.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-node@1.12.12-next.1
+
+## @backstage/plugin-search-backend-node@1.3.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/backend-plugin-api@1.0.1-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.1-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-search-common@1.2.14
+
+## @backstage/plugin-signals@0.0.11-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/plugin-signals-react@0.0.6-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-signals-react@0.0.6-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-techdocs@1.10.11-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-techdocs-react@1.2.9-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-search-react@1.8.1-next.1
+ - @backstage/plugin-auth-react@0.1.7-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.40-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-techdocs-react@1.2.9-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-search-react@1.8.1-next.1
+ - @backstage/test-utils@1.6.1-next.1
+ - @backstage/plugin-techdocs@1.10.11-next.1
+ - @backstage/plugin-catalog@1.24.0-next.1
+
+## @backstage/plugin-techdocs-backend@1.10.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.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.13.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.1
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-node@1.12.12-next.1
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.16-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-techdocs-react@1.2.9-next.1
+ - @backstage/integration@1.15.1-next.0
+
+## @backstage/plugin-techdocs-node@1.12.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-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/plugin-search-common@1.2.14
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-react@1.2.9-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+
+## @backstage/plugin-user-settings@0.8.14-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/plugin-signals-react@0.0.6-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.25-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/plugin-signals-node@0.1.12-next.0
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.102-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/cli@0.28.0-next.1
+ - @backstage/plugin-scaffolder@1.26.0-next.1
+ - @backstage/plugin-signals@0.0.11-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.16-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.17-next.1
+ - @backstage/frontend-app-api@0.10.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/plugin-scaffolder-react@1.13.0-next.1
+ - @backstage/plugin-catalog-import@0.12.5-next.1
+ - @backstage/plugin-techdocs-react@1.2.9-next.1
+ - @backstage/app-defaults@1.5.12-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/plugin-catalog-graph@0.4.11-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-notifications@0.3.2-next.1
+ - @backstage/plugin-user-settings@0.8.14-next.1
+ - @backstage/plugin-search-react@1.8.1-next.1
+ - @backstage/plugin-auth-react@0.1.7-next.1
+ - @backstage/plugin-kubernetes@0.11.16-next.1
+ - @backstage/plugin-api-docs@0.11.11-next.1
+ - @backstage/plugin-devtools@0.1.19-next.1
+ - @backstage/plugin-techdocs@1.10.11-next.1
+ - @backstage/plugin-catalog@1.24.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/plugin-search@1.4.18-next.1
+ - @backstage/plugin-home@0.7.12-next.1
+ - @backstage/plugin-org@0.6.31-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-search-common@1.2.14
+
+## example-app-next@0.0.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/cli@0.28.0-next.1
+ - @backstage/plugin-scaffolder@1.26.0-next.1
+ - @backstage/plugin-signals@0.0.11-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.16-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.17-next.1
+ - @backstage/frontend-app-api@0.10.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/plugin-scaffolder-react@1.13.0-next.1
+ - @backstage/plugin-app-visualizer@0.1.11-next.1
+ - @backstage/plugin-catalog-import@0.12.5-next.1
+ - @backstage/plugin-techdocs-react@1.2.9-next.1
+ - @backstage/app-defaults@1.5.12-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/plugin-catalog-graph@0.4.11-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-notifications@0.3.2-next.1
+ - @backstage/plugin-user-settings@0.8.14-next.1
+ - @backstage/plugin-search-react@1.8.1-next.1
+ - @backstage/plugin-auth-react@0.1.7-next.1
+ - @backstage/plugin-kubernetes@0.11.16-next.1
+ - @backstage/plugin-api-docs@0.11.11-next.1
+ - @backstage/plugin-techdocs@1.10.11-next.1
+ - @backstage/plugin-catalog@1.24.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/plugin-search@1.4.18-next.1
+ - @backstage/plugin-home@0.7.12-next.1
+ - @backstage/plugin-org@0.6.31-next.1
+ - @backstage/plugin-app@0.1.1-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/frontend-defaults@0.1.1-next.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-search-common@1.2.14
+
+## app-next-example-plugin@0.0.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+
+## example-backend@0.0.31-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.26.0-next.1
+ - @backstage/plugin-catalog-backend@1.26.2-next.1
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-app-backend@0.3.75-next.0
+ - @backstage/plugin-auth-backend@0.23.1-next.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.2-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0
+ - @backstage/plugin-devtools-backend@0.4.1-next.0
+ - @backstage/plugin-events-backend@0.3.13-next.0
+ - @backstage/plugin-kubernetes-backend@0.18.7-next.0
+ - @backstage/plugin-notifications-backend@0.4.1-next.0
+ - @backstage/plugin-permission-backend@0.5.50-next.0
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-proxy-backend@0.5.7-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.1
+ - @backstage/plugin-search-backend@1.5.18-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.2.3-next.1
+ - @backstage/plugin-search-backend-module-explore@0.2.3-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.1
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-signals-backend@0.2.1-next.0
+ - @backstage/plugin-techdocs-backend@1.10.14-next.1
+
+## example-backend-legacy@0.2.103-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.26.0-next.1
+ - @backstage/plugin-catalog-backend@1.26.2-next.1
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-client@1.7.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-app-backend@0.3.75-next.0
+ - @backstage/plugin-auth-backend@0.23.1-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-devtools-backend@0.4.1-next.0
+ - @backstage/plugin-events-backend@0.3.13-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/plugin-kubernetes-backend@0.18.7-next.0
+ - @backstage/plugin-permission-backend@0.5.50-next.0
+ - @backstage/plugin-permission-common@0.8.1
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-proxy-backend@0.5.7-next.0
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.1
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.1
+ - @backstage/plugin-search-backend@1.5.18-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.2.3-next.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.1
+ - @backstage/plugin-search-backend-module-explore@0.2.3-next.1
+ - @backstage/plugin-search-backend-module-pg@0.5.36-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.1
+ - @backstage/plugin-search-backend-node@1.3.3-next.1
+ - @backstage/plugin-signals-backend@0.2.1-next.0
+ - @backstage/plugin-signals-node@0.1.12-next.0
+ - @backstage/plugin-techdocs-backend@1.10.14-next.1
+
+## e2e-test@0.2.21-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.21-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/errors@1.2.4
+
+## @internal/frontend@0.0.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/version-bridge@1.0.10-next.0
+ - @backstage/types@1.1.1
+
+## @internal/scaffolder@0.0.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.13.0-next.1
+
+## techdocs-cli-embedded-app@0.2.101-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/cli@0.28.0-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-techdocs-react@1.2.9-next.1
+ - @backstage/app-defaults@1.5.12-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/test-utils@1.6.1-next.1
+ - @backstage/plugin-techdocs@1.10.11-next.1
+ - @backstage/plugin-catalog@1.24.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+
+## @internal/plugin-todo-list@1.0.32-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
diff --git a/docs/tooling/cli/02-build-system.md b/docs/tooling/cli/02-build-system.md
index 1bcf7ad30c..ab7dc07802 100644
--- a/docs/tooling/cli/02-build-system.md
+++ b/docs/tooling/cli/02-build-system.md
@@ -420,7 +420,7 @@ The following is an example of a `Dockerfile` that can be used to package the
output of building a package with role `'backend'` into an image:
```Dockerfile
-FROM node:18-bookworm-slim
+FROM node:20-bookworm-slim
WORKDIR /app
COPY yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
diff --git a/docs/tooling/cli/03-commands.md b/docs/tooling/cli/03-commands.md
index a6652bd036..913a71f514 100644
--- a/docs/tooling/cli/03-commands.md
+++ b/docs/tooling/cli/03-commands.md
@@ -326,7 +326,7 @@ Options:
## versions\:bump
Bump all `@backstage` packages to the latest versions. This checks for updates
-in the package registry, and will update entries `package.json` files when necessary.
+in the package registry, and will update entries `package.json` files when necessary. See more how this command can be configured and used [for keeping Backstage updated](../../getting-started/keeping-backstage-updated.md).
```text
Usage: backstage-cli versions:bump [options]
diff --git a/docs/tooling/local-dev/profiling.md b/docs/tooling/local-dev/profiling.md
new file mode 100644
index 0000000000..bbc263c3d5
--- /dev/null
+++ b/docs/tooling/local-dev/profiling.md
@@ -0,0 +1,65 @@
+---
+id: profiling
+title: Profiling Backstage
+description: Finding performance bottlenecks in your Backstage application
+---
+
+Profiling can help you find performance bottlenecks in your code. This guide will show you how to profile
+both the backend and frontend of your Backstage application.
+
+# Backend
+
+To profile the backend, start the backend with the `--inspect` flag:
+
+```shell
+yarn workspace backend start --inspect
+# or `yarn workspace example-backend start --inspect` in this repository
+```
+
+Next you can use the Chrome DevTools to profile the backend by navigating to `chrome://inspect` and
+clicking the `Open dedicated DevTools for Node` link.
+
+In the `Performance` tab, you can start a new recording by clicking the `Start` button. After you
+have recorded some data, you can stop the recording by clicking the `Stop` button. The recording
+will show you a flame graph of the backend's execution, which can help you identify performance issues.
+
+You can also use the `Memory` tab to profile the backend's memory usage and find potential memory leaks.
+
+It's recommended to start profiling with short periods of time to avoid too much data being collected.
+
+## Stress testing
+
+To get more out of profiling, you might want to introduce additional load to your application with some tooling.
+One such tool is called [AutoCannon](https://www.npmjs.com/package/autocannon) which can be used to stress test the
+API endpoints of your application. You can install it globally with `npm install -g autocannon`.
+
+To be able to access the API endpoints, you must configure a static token for the backend. In your
+`app-config.yaml` file, add the following configuration:
+
+```yaml
+backend:
+ auth:
+ externalAccess:
+ - type: static
+ options:
+ token: autocannon12345
+ subject: autocannon
+```
+
+See more information in the [Service to Service Auth](../../auth/service-to-service-auth.md) documentation.
+To run the stress test, you can use the following command:
+
+```shell
+autocannon -H "Authorization=Bearer autocannon12345" http://localhost:7007/api/catalog/entities
+```
+
+See more command options in the AutoCannon documentation.
+
+# Frontend
+
+Profiling the frontend can be done by using the `React DevTools` extension for Chrome or Firefox.
+The extension is available for download from the Chrome Web Store or the Firefox Add-ons website.
+
+To start profiling, start the application with `yarn dev` and open inspector in the browser. In the
+`Profiler` tab (far to the right), click the `Start profiling` button to start recording. After
+you have recorded some data by navigating through the page, click the `Stop profiling` button to stop the recording.
diff --git a/docs/tooling/package-metadata.md b/docs/tooling/package-metadata.md
index 63ce6d1085..ad9d5ec5a0 100644
--- a/docs/tooling/package-metadata.md
+++ b/docs/tooling/package-metadata.md
@@ -156,6 +156,26 @@ This field indicates that a package has been renamed and moved to a new location
}
```
+### `backstage.inline`
+
+If set to `true` this field indicates that monorepo package is private and should be inlined into dependent packages rather than being treated as a dependency. This effectively means that all imported code from the inlined package will be copied into the consuming package, once for each package.
+
+This flag affects various parts of the Backstage tooling, for example the way the Backstage CLI builds work, the way that `@backstage/eslint-plugin` lints dependencies on the package, and how it's treated by `@backstage/repo-tools`.
+
+The `backstage.inline` field is primarily intended to aid in the implementation of the Backstage core framework in the main Backstage repository, but it can be used in other projects as well.
+
+Setting this flag also requires the top-level `private` field to be set as well, since inline packages should not be published.
+
+```js title="Example usage of the backstage.moved field"
+{
+ "name": "@internal/utils",
+ "backstage": {
+ "inline": true
+ }
+ ...
+}
+```
+
## Metadata for Published Packages
When publishing a package with the help of the Backstage CLI, there are a number of metadata checks that are performed to ensure that the package is correctly set up for the Backstage ecosystem. These checks are performed by the `backstage-cli package prepack` command, which is used to prepare a package for publishing. These checks can all also be verified separately using the `backstage-cli repo fix --publish` command, and in many cases the required metadata can be generated automatically. It is therefore important to make running the `fix` command part of your workflow in any project that is publishing Backstage packages.
diff --git a/docs/tutorials/auth-service-migration.md b/docs/tutorials/auth-service-migration.md
index 9e2633a12a..d12b0d5906 100644
--- a/docs/tutorials/auth-service-migration.md
+++ b/docs/tutorials/auth-service-migration.md
@@ -24,6 +24,8 @@ backend:
dangerouslyDisableDefaultAuthPolicy: true
```
+Please note that this functionality will be removed in a future release, and you should migrate to using the new auth services as soon as possible or you would have to support your own service for issuing tokens.
+
In short, this will allow requests through to plugins in your backend, even if they do not include any credentials. The requests will still be treated as unauthenticated however, which not all plugin endpoints may accept. For more information on the impact of this configuration, see the [auth service documentation](../backend-system/core-services/auth.md).
### Migrating the backend
diff --git a/docs/tutorials/enable-public-entry.md b/docs/tutorials/enable-public-entry.md
index 25d7382f13..1ba4983618 100644
--- a/docs/tutorials/enable-public-entry.md
+++ b/docs/tutorials/enable-public-entry.md
@@ -106,40 +106,12 @@ That's it!
If your app uses the new frontend system, you can still use the public entry point feature. The `index-public-experimental.tsx` file does end up looking a bit different in this case:
```tsx title="in packages/app/src/index-public-experimental.tsx"
-import React from 'react';
import ReactDOM from 'react-dom/client';
-import { CookieAuthRedirect } from '@backstage/plugin-auth-react';
-import { createApp } from '@backstage/frontend-app-api';
-import {
- coreExtensionData,
- createExtension,
- createExtensionOverrides,
- createSignInPageExtension,
-} from '@backstage/frontend-plugin-api';
+import { signInPageModule } from './overrides/SignInPage';
+import { createPublicSignInApp } from '@backstage/frontend-defaults';
-const signInPage = createSignInPageExtension({
- name: 'guest',
- loader: async () => props => ,
-});
-
-const authRedirectExtension = createExtension({
- namespace: 'app',
- name: 'layout',
- attachTo: { id: 'app/root', input: 'children' },
- output: {
- element: coreExtensionData.reactElement,
- },
- factory: () => ({
- element: ,
- }),
-});
-
-const app = createApp({
- features: [
- createExtensionOverrides({
- extensions: [signInPage, authRedirectExtension],
- }),
- ],
+const app = createPublicSignInApp({
+ features: [signInPageModule],
});
ReactDOM.createRoot(document.getElementById('root')!).render(app.createRoot());
diff --git a/docs/tutorials/setup-opentelemetry.md b/docs/tutorials/setup-opentelemetry.md
index faaeab49f4..cba8ba7049 100644
--- a/docs/tutorials/setup-opentelemetry.md
+++ b/docs/tutorials/setup-opentelemetry.md
@@ -83,6 +83,28 @@ CMD ["node", "--require", "./instrumentation.js", "packages/backend", "--config"
If you need to disable/configure some OpenTelemetry feature there are lots of [environment variables](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/) which you can tweak.
+### Available Metrics
+
+The following metrics are available:
+
+- `catalog_entities_count`: Total amount of entities in the catalog
+- `catalog_registered_locations_count`: Total amount of registered locations in the catalog
+- `catalog_relations_count`: Total amount of relations between entities
+- `catalog.processed.entities.count`: Amount of entities processed
+- `catalog.processing.duration`: Time spent executing the full processing flow
+- `catalog.processors.duration`: Time spent executing catalog processors
+- `catalog.processing.queue.delay`: The amount of delay between being scheduled for processing, and the start of actually being processed
+- `catalog.stitched.entities.count`: Amount of entities stitched
+- `catalog.stitching.duration`: Time spent executing the full stitching flow
+- `catalog.stitching.queue.length`: Number of entities currently in the stitching queue
+- `catalog.stitching.queue.delay`: The amount of delay between being scheduled for stitching, and the start of actually being stitched
+- `scaffolder.task.count`: Count of task runs
+- `scaffolder.task.duration`: Duration of a task run
+- `scaffolder.step.count`: Count of step runs
+- `scaffolder.step.duration`: Duration of a step runs
+- `backend_tasks.task.runs.count`: Total number of times a task has been run
+- `backend_tasks.task.runs.duration`: Histogram of task run durations
+
## References
- [Getting started with OpenTelemetry Node.js](https://opentelemetry.io/docs/instrumentation/js/getting-started/nodejs/)
diff --git a/docs/tutorials/yarn-migration.md b/docs/tutorials/yarn-migration.md
index bc5980b2f5..fc525ed23b 100644
--- a/docs/tutorials/yarn-migration.md
+++ b/docs/tutorials/yarn-migration.md
@@ -1,12 +1,10 @@
---
id: yarn-migration
-title: Migration to Yarn 3
-description: Guide for how to migrate a Backstage project to use Yarn 3
+title: Migration to Yarn 4
+description: Guide for how to migrate a Backstage project to use Yarn 4
---
-While Backstage projects created with `@backstage/create-app` use [Yarn 1](https://classic.yarnpkg.com/) by default, it
-is possible to switch them to instead use [Yarn 3](https://yarnpkg.com/). Tools like `yarn backstage-cli versions:bump` will
-still work, as they recognize both lockfile formats.
+Backstage projects created with `@backstage/create-app` now use [Yarn 4](https://yarnpkg.com/), you may have a previous version of Backstage that is still using [Yarn 1](https://classic.yarnpkg.com/) that you'll want to migrate, this tutorial will help you with this task.
## Migration
@@ -19,7 +17,7 @@ First off, be sure to have the updated ignore entries in your app. These are inc
Add the following to `.gitignore`:
```gitignore
-# Yarn 3 files
+# Yarn files
.pnp.*
.yarn/*
!.yarn/patches
@@ -38,12 +36,18 @@ And this to `.dockerignore`:
### Installation
-Let's move on to the actual installation. We'd recommend making separate Git commits of most of these steps, in case you need to go back and debug anything. To install Yarn 3, run the following command in the project root:
+Let's move on to the actual installation. We'd recommend making separate Git commits of most of these steps, in case you need to go back and debug anything. To install Yarn 4, run the following command in the project root:
```bash
-yarn set version 3.x
+yarn set version 4.x
```
+:::note
+
+If the above command doesn't work then you may need to run `yarn set version latest` but use this with caution as it may take you to a version beyond Yarn 4
+
+:::
+
We'll need the Yarn workspace tools plugin later on, so let's install that too:
```bash
@@ -56,23 +60,23 @@ In case you had a `.yarnrc` you can delete it now, but be sure to migrate over a
### Migrate Usage
-At this point you'll be all set up with Yarn 3! What remains is to migrate any usage of Yarn according to their [migration guide](https://yarnpkg.com/getting-started/migration). For example, any `yarn install --frozen-lockfile` commands should be replaced with `yarn install --immutable`.
+At this point you'll be all set up with Yarn 4! What remains is to migrate any usage of Yarn according to their [migration guide](https://yarnpkg.com/getting-started/migration). For example, any `yarn install --frozen-lockfile` commands should be replaced with `yarn install --immutable`.
-You'll also need to update any `Dockerfile`s to add instructions to copy in your Yarn 3 installation into the image:
+You'll also need to update any `Dockerfile`s to add instructions to copy in your Yarn 4 installation into the image:
```Dockerfile
COPY .yarn ./.yarn
COPY .yarnrc.yml ./
```
-In a multi-stage `Dockerfile`, each stage that runs a `yarn` command will also need the Yarn 3 installation. For example, in the final stage you may need to add the following:
+In a multi-stage `Dockerfile`, each stage that runs a `yarn` command will also need the Yarn 4 installation. For example, in the final stage you may need to add the following:
```Dockerfile
COPY --from=build --chown=node:node /app/.yarn ./.yarn
COPY --from=build --chown=node:node /app/.yarnrc.yml ./
```
-The `--production` flag to `yarn install` has been removed in Yarn 3, instead you need to use `yarn workspaces focus --all --production` to avoid installing development dependencies in your production deployment. A tradeoff of this is that `yarn workspaces focus` does not support the `--immutable` flag.
+The `--production` flag to `yarn install` has been removed in Yarn 4, instead you need to use `yarn workspaces focus --all --production` to avoid installing development dependencies in your production deployment. A tradeoff of this is that `yarn workspaces focus` does not support the `--immutable` flag.
```Dockerfile
RUN yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)"
@@ -81,11 +85,9 @@ RUN yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)"
Additionally, `yarn config` has been reworked from being able to store any arbitrary key-value pairs to only supporting a handful of predefined pairs. Previously, we would set our preferred `python3` interpreter to work around [any issues related to node-gyp](https://github.com/backstage/backstage/issues/11583) so we need to provide an appropriate substitute.
```Dockerfile
-FROM node:16-bullseye-slim
-
# highlight-add-start
# Set Python interpreter for `node-gyp` to use
-ENV PYTHON /usr/bin/python3
+ENV PYTHON=/usr/bin/python3
# highlight-add-end
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
diff --git a/microsite/README.md b/microsite/README.md
index 5bd20254b6..62a28fb6a3 100644
--- a/microsite/README.md
+++ b/microsite/README.md
@@ -61,7 +61,7 @@ my-docusaurus/
css/
img/
package.json
- sidebars.json
+ sidebars.js
siteConfig.js
```
@@ -116,19 +116,20 @@ For more information about blog posts, click [here](https://docusaurus.io/docs/e
My new content here..
```
-2. Refer to that doc's ID in an existing sidebar in `website/sidebars.json`:
+2. Refer to that doc's ID in an existing sidebar in `website/sidebars.js`:
- ```javascript
+ ```js
// Add newly-created-doc to the Getting Started category of docs
- {
- "docs": {
- "Getting Started": [
- "quick-start",
- "newly-created-doc" // new doc here
- ],
- ...
- },
- ...
+ module.exports = {
+ ...
+ docs: {
+ "Getting Started": [
+ "quick-start",
+ "newly-created-doc" // new doc here
+ ],
+ ...
+ },
+ ...
}
```
diff --git a/microsite/data/plugins/ai-assistant.yaml b/microsite/data/plugins/ai-assistant.yaml
index 997846c14b..6ac4b6cd9e 100644
--- a/microsite/data/plugins/ai-assistant.yaml
+++ b/microsite/data/plugins/ai-assistant.yaml
@@ -1,6 +1,6 @@
---
title: AI Assistant - RAG AI
-author: RoadieHQ
+author: roadie.io
authorUrl: https://roadie.io
category: Search
description: Query LLMs with contextual information from your catalog.
diff --git a/microsite/data/plugins/analytics-module-generic.yaml b/microsite/data/plugins/analytics-module-generic.yaml
new file mode 100644
index 0000000000..260319aca6
--- /dev/null
+++ b/microsite/data/plugins/analytics-module-generic.yaml
@@ -0,0 +1,9 @@
+---
+title: 'Analytics Module: Generic HTTP'
+author: Josephine Pfeiffer
+authorUrl: https://josie.lol
+category: Monitoring
+description: Track usage of your Backstage instance using generic POST endpoints.
+documentation: https://github.com/pfeifferj/backstage-plugin-analytics-generic/blob/main/README.md
+npmPackageName: '@pfeifferj/backstage-plugin-analytics-generic'
+addedDate: '2024-08-23'
diff --git a/microsite/data/plugins/aws-app-development.yaml b/microsite/data/plugins/aws-app-development.yaml
index 47b40b8b3b..5df0598c5e 100644
--- a/microsite/data/plugins/aws-app-development.yaml
+++ b/microsite/data/plugins/aws-app-development.yaml
@@ -1,10 +1,10 @@
---
-title: OPA on AWS
+title: Harmonix on AWS
author: Amazon Web Services
authorUrl: https://aws.amazon.com/
category: Infrastructure
-description: Orchestrate Platforms and Applications (OPA) allows customers to build and manage AWS Apps & Environments within Backstage
-documentation: https://opaonaws.io
-iconUrl: https://github.com/awslabs/app-development-for-backstage-io-on-aws/blob/main/website/static/img/white_OPA_text02.png?raw=true
+description: Harmonix allows customers to build and manage AWS Apps & Environments within Backstage
+documentation: https://harmonixonaws.io
+iconUrl: https://github.com/awslabs/harmonix/blob/main/docs/images/harmonix-white.png?raw=true
npmPackageName: '@aws/plugin-aws-apps-for-backstage'
addedDate: '2023-05-10'
diff --git a/microsite/data/plugins/azure-storage.yaml b/microsite/data/plugins/azure-storage.yaml
index 655a6421ed..6e723c0eeb 100644
--- a/microsite/data/plugins/azure-storage.yaml
+++ b/microsite/data/plugins/azure-storage.yaml
@@ -4,9 +4,9 @@ author: Deepankumar
authorUrl: https://github.com/deepan10
category: Infrastructure
description: Explore Azure Storage Blobs in Backstage.
-documentation: https://github.com/deepan10/backstage-plugins/tree/main/plugins/azure-storage
+documentation: https://github.com/backstage/community-plugins/tree/main/workspaces/azure-storage-explorer/plugins/azure-storage
iconUrl: /img/azure-storage-folder.png
-npmPackageName: 'backstage-plugin-azure-storage'
+npmPackageName: '@backstage-community/plugin-azure-storage-explorer'
tags:
- Azure
- Azure Storage
diff --git a/microsite/data/plugins/blackduck.yaml b/microsite/data/plugins/blackduck.yaml
index 4ef192d2fc..7a7858fff2 100644
--- a/microsite/data/plugins/blackduck.yaml
+++ b/microsite/data/plugins/blackduck.yaml
@@ -4,9 +4,9 @@ author: Deepankumar
authorUrl: https://github.com/deepan10
category: Security
description: BlackDuck scanned vulnerabilities in Backstage.
-documentation: https://github.com/deepan10/backstage-plugin-blackduck
+documentation: https://github.com/backstage/community-plugins/tree/main/workspaces/blackduck/plugins/blackduck
iconUrl: https://avatars.githubusercontent.com/u/431461?s=200&v=4
-npmPackageName: '@deepan10/backstage-plugin-blackduck'
+npmPackageName: '@backstage-community/plugin-blackduck'
tags:
- security
addedDate: '2022-12-03'
diff --git a/microsite/data/plugins/catalog-backend-module-gcp.yaml b/microsite/data/plugins/catalog-backend-module-gcp.yaml
new file mode 100644
index 0000000000..b5df858862
--- /dev/null
+++ b/microsite/data/plugins/catalog-backend-module-gcp.yaml
@@ -0,0 +1,16 @@
+---
+title: GCP Entity Providers
+author: BackToStage
+authorUrl: https://backtostage.app/?utm_source=backstage.io&utm_medium=marketplace&utm_campaign=catalog-backend-module-gcp
+category: Catalog
+description: Import your Infrastructure from GCP into Backstage as Resource Entities
+documentation: https://github.com/backtostage/backstage-plugins/blob/main/plugins/catalog-backend-module-gcp/README.md
+iconUrl: https://avatars1.githubusercontent.com/u/2810941?s=280&v=4
+npmPackageName: '@backtostage/plugin-catalog-backend-module-gcp'
+tags:
+ - cloud
+ - project
+ - resources
+ - gcp
+ - cloudsql
+addedDate: '2024-08-01'
diff --git a/microsite/data/plugins/github-copilot.yaml b/microsite/data/plugins/github-copilot.yaml
new file mode 100644
index 0000000000..5228d66ec5
--- /dev/null
+++ b/microsite/data/plugins/github-copilot.yaml
@@ -0,0 +1,10 @@
+---
+title: GitHub Copilot Adoption Metrics
+author: ESW
+authorUrl: https://esw.com
+category: Reporting
+description: Github Copilot plugin integrates with the Copilot API to provide metrics on Copilot adoption within your organization.
+documentation: https://github.com/backstage/community-plugins/tree/main/workspaces/copilot/plugins/copilot
+iconUrl: https://platformnewsletter.blob.core.windows.net/$web/copilot.png
+npmPackageName: '@backstage-community/plugin-copilot'
+addedDate: '2024-10-21'
diff --git a/microsite/data/plugins/github-workflows.yaml b/microsite/data/plugins/github-workflows.yaml
index 743e7a5b1b..f80e6f3f29 100644
--- a/microsite/data/plugins/github-workflows.yaml
+++ b/microsite/data/plugins/github-workflows.yaml
@@ -4,7 +4,7 @@ author: VeeCode Platform
authorUrl: https://platform.vee.codes/
category: CI/CD
description: The Github Workflows plugin provides an alternative for manually triggering GitHub workflows from within your Backstage component.
-documentation: https://platform.vee.codes/plugin/Github%20workflows/
+documentation: https://platform.vee.codes/plugin/github-workflows/
iconUrl: https://veecode-platform.github.io/support/imgs/logo_2.svg
npmPackageName: '@veecode-platform/backstage-plugin-github-workflows'
tags:
diff --git a/microsite/data/plugins/gitlab-pipelines.yaml b/microsite/data/plugins/gitlab-pipelines.yaml
index d40419e464..4b77d67e07 100644
--- a/microsite/data/plugins/gitlab-pipelines.yaml
+++ b/microsite/data/plugins/gitlab-pipelines.yaml
@@ -4,7 +4,7 @@ author: VeeCode Platform
authorUrl: https://platform.vee.codes
category: CI/CD
description: The Gitlab pipelines plugin integrates GitlabCi with its backstage component in a simple way.
-documentation: https://platform.vee.codes/plugin/Gitlab%20Pipelines/
+documentation: https://platform.vee.codes/plugin/gitlab-pipelines/
iconUrl: https://veecode-platform.github.io/support/imgs/logo_1.svg
npmPackageName: '@veecode-platform/backstage-plugin-gitlab-pipelines'
tags:
diff --git a/microsite/data/plugins/grafana.yaml b/microsite/data/plugins/grafana.yaml
index c26d10b751..0637717466 100644
--- a/microsite/data/plugins/grafana.yaml
+++ b/microsite/data/plugins/grafana.yaml
@@ -4,9 +4,9 @@ author: K-Phoen
authorUrl: https://github.com/K-Phoen
category: Monitoring
description: Associate alerts and dashboards to components.
-documentation: https://github.com/K-Phoen/backstage-plugin-grafana/
+documentation: https://github.com/backstage/community-plugins/blob/main/workspaces/grafana/plugins/grafana/docs/index.md
iconUrl: https://avatars.githubusercontent.com/u/7195757?s=200&v=4
-npmPackageName: '@k-phoen/backstage-plugin-grafana'
+npmPackageName: '@backstage-community/plugin-grafana'
tags:
- dashboards
- monitoring
diff --git a/microsite/data/plugins/gravatar.yaml b/microsite/data/plugins/gravatar.yaml
new file mode 100644
index 0000000000..d31c16a155
--- /dev/null
+++ b/microsite/data/plugins/gravatar.yaml
@@ -0,0 +1,14 @@
+---
+title: Gravatar catalog processor
+author: roadie.io
+authorUrl: https://roadie.io
+category: Catalog
+description: The processor generates a Gravatar URL for each user based on their email address and the generated Gravatar URL is added to the spec.profile.picture field of User entities.
+documentation: https://github.com/RoadieHQ/roadie-backstage-plugins/blob/main/plugins/backend/catalog-backend-module-gravatar/README.md
+iconUrl: https://gravatar.com/avatar/gravatar
+npmPackageName: '@roadiehq/catalog-backend-module-gravatar'
+tags:
+ - gravatar
+ - catalog
+ - processor
+addedDate: '2024-08-26'
diff --git a/microsite/data/plugins/harness-ccm.yaml b/microsite/data/plugins/harness-ccm.yaml
new file mode 100644
index 0000000000..e696fdca4b
--- /dev/null
+++ b/microsite/data/plugins/harness-ccm.yaml
@@ -0,0 +1,11 @@
+title: Harness Cloud Cost Management
+author: harness.io
+authorUrl: https://github.com/harness/backstage-plugins
+category: FinOps
+description: This plugin helps you to manage and optimize cloud costs using Harness Cloud Cost Management module directly inside Backstage.
+documentation: https://github.com/harness/backstage-plugins/tree/main/plugins/harness-ccm
+iconUrl: https://static.harness.io/ng-static/images/favicon.png
+npmPackageName: '@harnessio/backstage-plugin-harness-ccm'
+tags:
+ - finops
+addedDate: '2024-09-27'
diff --git a/microsite/data/plugins/hashicorp-terraform.yaml b/microsite/data/plugins/hashicorp-terraform.yaml
new file mode 100644
index 0000000000..c254667015
--- /dev/null
+++ b/microsite/data/plugins/hashicorp-terraform.yaml
@@ -0,0 +1,10 @@
+---
+title: Hashicorp Terraform
+author: GlobalLogic UK&I
+authorUrl: https://www.globallogic.com
+category: Infrastructure
+description: Easily view Hashicorp Terraform runs for a specific workspace.
+documentation: https://github.com/globallogicuki/globallogic-backstage-plugins/tree/main/plugins/terraform
+iconUrl: /img/terraform-logo.svg
+npmPackageName: '@globallogicuki/backstage-plugin-terraform'
+addedDate: '2024-07-17'
diff --git a/microsite/data/plugins/infracost.yaml b/microsite/data/plugins/infracost.yaml
new file mode 100644
index 0000000000..b6ead655d5
--- /dev/null
+++ b/microsite/data/plugins/infracost.yaml
@@ -0,0 +1,15 @@
+---
+title: VeeCode Infracost
+author: VeeCode Platform
+authorUrl: https://platform.vee.codes/
+category: FinOps
+description: The Infracost plug-in works in conjunction with terraform and provides a graphical representation and cost estimate data for your entity at your respective provider.
+documentation: https://platform.vee.codes/plugin/Infracost
+iconUrl: https://veecode-platform.github.io/support/imgs/logo_5.svg
+npmPackageName: '@veecode-platform/backstage-plugin-infracost'
+tags:
+ - finops
+ - infracost
+ - estimate
+ - terraform
+addedDate: '2024-07-25'
diff --git a/microsite/data/plugins/kong-service-manager.yaml b/microsite/data/plugins/kong-service-manager.yaml
index 78ff37e36e..2b5f444479 100644
--- a/microsite/data/plugins/kong-service-manager.yaml
+++ b/microsite/data/plugins/kong-service-manager.yaml
@@ -4,7 +4,7 @@ author: VeeCode Platform
authorUrl: https://platform.vee.codes/
category: api-manager
description: The Kong Service Manager plugin provides information about the kong service, a list of the routes it has and also offers the possibility of manipulating plugins without leaving the backstage.
-documentation: https://platform.vee.codes/plugin/Kong%20Service%20Manager/
+documentation: https://platform.vee.codes/plugin/kong-service-manager/
iconUrl: https://veecode-platform.github.io/support/imgs/logo_3.svg
npmPackageName: '@veecode-platform/plugin-kong-service-manager'
tags:
diff --git a/microsite/data/plugins/kubelog.yaml b/microsite/data/plugins/kubelog.yaml
new file mode 100644
index 0000000000..fcadba2978
--- /dev/null
+++ b/microsite/data/plugins/kubelog.yaml
@@ -0,0 +1,10 @@
+---
+title: Kubelog
+author: Julio Fernandez
+authorUrl: https://github.com/jfvilas
+category: Observability
+description: Kubelog provides your Backstage users the ability to view logs of your Kubernetes objects linked to Backstage entities. Security controls can be applied.
+documentation: https://github.com/jfvilas/kubelog
+iconUrl: https://raw.githubusercontent.com/jfvilas/kubelog/master/src/assets/kubelog-logo.png
+npmPackageName: '@jfvilas/plugin-kubelog'
+addedDate: 2024-08-25
diff --git a/microsite/data/plugins/kubernetes-gpt-analyzer.yaml b/microsite/data/plugins/kubernetes-gpt-analyzer.yaml
new file mode 100644
index 0000000000..e5de961869
--- /dev/null
+++ b/microsite/data/plugins/kubernetes-gpt-analyzer.yaml
@@ -0,0 +1,16 @@
+---
+title: VeeCode Kubernetes GPT Analyzer
+author: VeeCode Platform
+authorUrl: https://platform.vee.codes/
+category: Monitoring
+description: The Kubernetes GPT Analyzer plug-in uses artificial intelligence with the help of k8s-operator to analyze and optimize your Kubernetes entities, improving the management and performance of your cluster. It makes it easier to detect anomalies and suggest best practices.
+documentation: https://platform.vee.codes/plugin/kubernetes-gpt-analyzer/
+iconUrl: https://veecode-platform.github.io/support/imgs/logo_4.svg
+npmPackageName: '@veecode-platform/backstage-plugin-kubernetes-gpt-analyzer'
+tags:
+ - monitor
+ - ai
+ - kubernetes
+ - k8soperator
+ - gpt
+addedDate: '2024-07-31'
diff --git a/microsite/data/plugins/launchdarkly.yaml b/microsite/data/plugins/launchdarkly.yaml
new file mode 100644
index 0000000000..30e4cab685
--- /dev/null
+++ b/microsite/data/plugins/launchdarkly.yaml
@@ -0,0 +1,9 @@
+---
+title: LaunchDarkly
+author: roadie.io
+authorUrl: https://roadie.io
+category: CI/CD
+description: View LaunchDarkly feature flags for your entities in Backstage.
+documentation: https://github.com/RoadieHQ/roadie-backstage-plugins/blob/launchdarkly/plugins/frontend/backstage-plugin-launchdarkly/README.md
+npmPackageName: '@roadiehq/backstage-plugin-launchdarkly'
+addedDate: '2024-07-27'
diff --git a/microsite/data/plugins/scaffolder-backend-module-webex.yaml b/microsite/data/plugins/scaffolder-backend-module-webex.yaml
new file mode 100644
index 0000000000..f2113b2a8d
--- /dev/null
+++ b/microsite/data/plugins/scaffolder-backend-module-webex.yaml
@@ -0,0 +1,11 @@
+---
+title: Cisco Webex Scaffolder Actions
+author: Robert Lindley
+authorUrl: https://github.com/Coderrob
+category: Scaffolder
+description: >-
+ A Backstage.io plugin that enables sending Webex messages via
+ Incoming Webhooks within scaffolder templates.
+documentation: https://github.com/Coderrob/backstage-plugin-scaffolder-backend-module-webex
+npmPackageName: '@coderrob/backstage-plugin-scaffolder-backend-module-webex'
+addedDate: '2024-09-04'
diff --git a/microsite/data/plugins/simple-icons.yaml b/microsite/data/plugins/simple-icons.yaml
new file mode 100644
index 0000000000..45722ab421
--- /dev/null
+++ b/microsite/data/plugins/simple-icons.yaml
@@ -0,0 +1,10 @@
+---
+title: Simple Icons
+author: dweber019
+authorUrl: https://github.com/dweber019
+category: Visualization
+description: The Simple Icons plugin will add additional icons to be used as link icons.
+documentation: https://github.com/dweber019/backstage-plugins/tree/main/plugins/simple-icons
+iconUrl: https://raw.githubusercontent.com/dweber019/backstage-plugins/main/plugins/simple-icons/docs/pluginIcon.png
+npmPackageName: '@dweber019/backstage-plugin-simple-icons'
+addedDate: '2024-07-30'
diff --git a/microsite/data/plugins/tech-insights.yaml b/microsite/data/plugins/tech-insights.yaml
index fbf96df3e6..3bd40d576a 100644
--- a/microsite/data/plugins/tech-insights.yaml
+++ b/microsite/data/plugins/tech-insights.yaml
@@ -6,7 +6,7 @@ category: Discovery
description: Visualize, understand and optimize your team's tech health.
documentation: https://roadie.io/backstage/plugins/tech-insights/
iconUrl: https://roadie.io/images/logos/tech-insights.png
-npmPackageName: '@backstage/plugin-tech-insights'
+npmPackageName: '@backstage-community/plugin-tech-insights'
tags:
- tech-insights
- reporting
diff --git a/microsite/docusaurus.config.ts b/microsite/docusaurus.config.ts
index 67f6de4962..af96ef4c42 100644
--- a/microsite/docusaurus.config.ts
+++ b/microsite/docusaurus.config.ts
@@ -21,9 +21,39 @@
import { themes } from 'prism-react-renderer';
import type * as Preset from '@docusaurus/preset-classic';
import { Config } from '@docusaurus/types';
+import RedirectPlugin from '@docusaurus/plugin-client-redirects';
+import { releases } from './releases';
+
const backstageTheme = themes.vsDark;
backstageTheme.plain.backgroundColor = '#232323';
+const useVersionedDocs = require('fs').existsSync('versions.json');
+
+// This patches the redirect plugin to ignore the error when it tries to override existing fields.
+// This lets us add redirects that only apply to the next docs, while the stable docs still contain the source path.
+const PatchedRedirectPlugin: typeof RedirectPlugin = (ctx, opts) => {
+ const plugin = RedirectPlugin(ctx, opts);
+
+ return {
+ ...plugin,
+ async postBuild(...args) {
+ try {
+ await plugin.postBuild(...args);
+ } catch (error) {
+ if (
+ error.message ===
+ 'The redirect plugin is not supposed to override existing files.'
+ ) {
+ // Bit of a hack to make sure all remaining redirects are written, since the write uses Promise.all
+ await new Promise(resolve => setTimeout(resolve, 1000));
+ } else {
+ throw error;
+ }
+ }
+ },
+ };
+};
+
const config: Config = {
title: 'Backstage Software Catalog and Developer Platform',
tagline: 'An open source framework for building developer portals',
@@ -56,7 +86,27 @@ const config: Config = {
docs: {
editUrl: 'https://github.com/backstage/backstage/edit/master/docs/',
path: '../docs',
- sidebarPath: 'sidebars.json',
+ sidebarPath: 'sidebars.js',
+ ...(useVersionedDocs
+ ? {
+ includeCurrentVersion: true,
+ lastVersion: 'stable',
+ versions: {
+ stable: {
+ label: 'Stable',
+ path: '/',
+ banner: 'none',
+ badge: false,
+ },
+ current: {
+ label: 'Next',
+ path: '/next',
+ banner: 'unreleased',
+ badge: true,
+ },
+ },
+ }
+ : undefined),
},
blog: {
path: 'blog',
@@ -119,9 +169,11 @@ const config: Config = {
};
},
}),
- [
- '@docusaurus/plugin-client-redirects',
- {
+ ctx =>
+ PatchedRedirectPlugin(ctx, {
+ id: '@docusaurus/plugin-client-redirects',
+ toExtensions: [],
+ fromExtensions: [],
redirects: [
{
from: '/docs',
@@ -195,9 +247,12 @@ const config: Config = {
from: '/docs/local-dev/debugging/',
to: '/docs/tooling/local-dev/debugging',
},
+ {
+ from: '/docs/plugins/url-reader/',
+ to: '/docs/backend-system/core-services/url-reader',
+ },
],
- },
- ],
+ }),
[
'docusaurus-pushfeedback',
{
@@ -241,7 +296,7 @@ const config: Config = {
position: 'left',
},
{
- to: 'docs/releases/v1.29.0',
+ to: `docs/releases/${releases[0]}`,
label: 'Releases',
position: 'left',
},
@@ -255,6 +310,14 @@ const config: Config = {
label: 'Community',
position: 'left',
},
+ ...(useVersionedDocs
+ ? [
+ {
+ type: 'docsVersionDropdown',
+ position: 'right' as const,
+ },
+ ]
+ : []),
],
},
image: 'img/sharing-opengraph.png',
diff --git a/microsite/lighthouserc.js b/microsite/lighthouserc.js
index f0024ee0b3..c75138d4c3 100644
--- a/microsite/lighthouserc.js
+++ b/microsite/lighthouserc.js
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-var sidebars = require('./sidebars.json');
+const sidebars = require('./sidebars');
module.exports = {
ci: {
diff --git a/microsite/releases.js b/microsite/releases.js
new file mode 100644
index 0000000000..4136b0edad
--- /dev/null
+++ b/microsite/releases.js
@@ -0,0 +1,21 @@
+const fs = require('fs');
+const path = require('path');
+
+const docsDir = path.resolve(__dirname, '../docs');
+
+exports.releases = fs
+ .readdirSync(path.resolve(docsDir, 'releases'))
+ .filter(doc => doc.match(/^v\d+\.\d+\.\d+\.md$/))
+ .map(doc => doc.replace(/\.md$/, ''))
+ .sort((a, b) => {
+ // Semver sort
+ const aVal = a
+ .slice(1)
+ .split('.')
+ .reduce((acc, val) => acc * 1000 + parseInt(val), 0);
+ const bVal = b
+ .slice(1)
+ .split('.')
+ .reduce((acc, val) => acc * 1000 + parseInt(val), 0);
+ return bVal - aVal;
+ });
diff --git a/microsite/sidebars.js b/microsite/sidebars.js
new file mode 100644
index 0000000000..871cec0a0f
--- /dev/null
+++ b/microsite/sidebars.js
@@ -0,0 +1,532 @@
+const { releases } = require('./releases');
+
+module.exports = {
+ docs: {
+ Overview: [
+ 'overview/what-is-backstage',
+ 'overview/architecture-overview',
+ 'overview/roadmap',
+ 'overview/vision',
+ 'overview/background',
+ 'overview/adopting',
+ 'overview/versioning-policy',
+ 'overview/threat-model',
+ 'overview/support',
+ 'overview/logos',
+ ],
+ 'Getting Started': [
+ 'getting-started/index',
+ {
+ type: 'category',
+ label: 'Configuring Backstage',
+ items: [
+ 'getting-started/config/database',
+ 'getting-started/config/authentication',
+ 'getting-started/configure-app-with-plugins',
+ 'getting-started/app-custom-theme',
+ 'getting-started/homepage',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Using Backstage',
+ items: [
+ 'getting-started/logging-in',
+ 'getting-started/register-a-component',
+ 'getting-started/create-a-component',
+ ],
+ },
+ 'getting-started/keeping-backstage-updated',
+ 'getting-started/concepts',
+ ],
+ 'Core Features': [
+ {
+ type: 'category',
+ label: 'Software Catalog',
+ items: [
+ 'features/software-catalog/software-catalog-overview',
+ 'features/software-catalog/life-of-an-entity',
+ 'features/software-catalog/configuration',
+ 'features/software-catalog/system-model',
+ 'features/software-catalog/descriptor-format',
+ 'features/software-catalog/references',
+ 'features/software-catalog/well-known-annotations',
+ 'features/software-catalog/well-known-relations',
+ 'features/software-catalog/well-known-statuses',
+ 'features/software-catalog/extending-the-model',
+ 'features/software-catalog/external-integrations',
+ 'features/software-catalog/catalog-customization',
+ 'features/software-catalog/software-catalog-api',
+ 'features/software-catalog/creating-the-catalog-graph',
+ 'features/software-catalog/faq',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Kubernetes',
+ items: [
+ 'features/kubernetes/overview',
+ 'features/kubernetes/installation',
+ 'features/kubernetes/configuration',
+ 'features/kubernetes/authentication',
+ 'features/kubernetes/authentication-strategies',
+ 'features/kubernetes/troubleshooting',
+ 'features/kubernetes/proxy',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Software Templates',
+ items: [
+ 'features/software-templates/software-templates-index',
+ 'features/software-templates/configuration',
+ 'features/software-templates/adding-templates',
+ 'features/software-templates/writing-templates',
+ 'features/software-templates/input-examples',
+ 'features/software-templates/builtin-actions',
+ 'features/software-templates/writing-custom-actions',
+ 'features/software-templates/writing-tests-for-actions',
+ 'features/software-templates/writing-custom-field-extensions',
+ 'features/software-templates/writing-custom-step-layouts',
+ 'features/software-templates/authorizing-scaffolder-template-details',
+ 'features/software-templates/migrating-to-rjsf-v5',
+ 'features/software-templates/migrating-from-v1beta2-to-v1beta3',
+ 'features/software-templates/dry-run-testing',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Backstage Search',
+ items: [
+ 'features/search/search-overview',
+ 'features/search/getting-started',
+ 'features/search/concepts',
+ 'features/search/architecture',
+ 'features/search/search-engines',
+ 'features/search/collators',
+ 'features/search/how-to-guides',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'TechDocs',
+ items: [
+ 'features/techdocs/techdocs-overview',
+ 'features/techdocs/getting-started',
+ 'features/techdocs/concepts',
+ 'features/techdocs/addons',
+ 'features/techdocs/architecture',
+ 'features/techdocs/extensions',
+ 'features/techdocs/creating-and-publishing',
+ 'features/techdocs/configuration',
+ 'features/techdocs/using-cloud-storage',
+ 'features/techdocs/configuring-ci-cd',
+ 'features/techdocs/cli',
+ 'features/techdocs/how-to-guides',
+ 'features/techdocs/troubleshooting',
+ 'features/techdocs/faqs',
+ ],
+ },
+ ],
+ Integrations: [
+ 'integrations/index',
+ {
+ type: 'category',
+ label: 'AWS S3',
+ items: [
+ 'integrations/aws-s3/locations',
+ 'integrations/aws-s3/discovery',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Azure',
+ items: [
+ 'integrations/azure/locations',
+ 'integrations/azure/discovery',
+ 'integrations/azure/org',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Bitbucket Cloud',
+ items: [
+ 'integrations/bitbucketCloud/locations',
+ 'integrations/bitbucketCloud/discovery',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Bitbucket Server',
+ items: [
+ 'integrations/bitbucketServer/locations',
+ 'integrations/bitbucketServer/discovery',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Datadog',
+ items: ['integrations/datadog-rum/installation'],
+ },
+ {
+ type: 'category',
+ label: 'Gerrit',
+ items: [
+ 'integrations/gerrit/locations',
+ 'integrations/gerrit/discovery',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'GitHub',
+ items: [
+ 'integrations/github/locations',
+ 'integrations/github/discovery',
+ 'integrations/github/org',
+ 'integrations/github/github-apps',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'GitLab',
+ items: [
+ 'integrations/gitlab/locations',
+ 'integrations/gitlab/discovery',
+ 'integrations/gitlab/org',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Gitea',
+ items: ['integrations/gitea/locations'],
+ },
+ {
+ type: 'category',
+ label: 'Harness',
+ items: ['integrations/harness/locations'],
+ },
+ {
+ type: 'category',
+ label: 'Google GCS',
+ items: ['integrations/google-cloud-storage/locations'],
+ },
+ {
+ type: 'category',
+ label: 'LDAP',
+ items: ['integrations/ldap/org'],
+ },
+ ],
+ Plugins: [
+ 'plugins/index',
+ 'plugins/existing-plugins',
+ 'plugins/create-a-plugin',
+ 'plugins/plugin-development',
+ 'plugins/structure-of-a-plugin',
+ 'plugins/integrating-plugin-into-software-catalog',
+ 'plugins/integrating-search-into-plugins',
+ 'plugins/composability',
+ 'plugins/internationalization',
+ 'plugins/analytics',
+ 'plugins/feature-flags',
+ {
+ type: 'category',
+ label: 'OpenAPI',
+ items: [
+ 'openapi/01-getting-started',
+ 'openapi/generate-client',
+ 'openapi/test-case-validation',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Backends and APIs',
+ items: [
+ 'plugins/proxying',
+ 'plugins/backend-plugin',
+ 'plugins/call-existing-api',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Testing',
+ items: ['plugins/testing'],
+ },
+ {
+ type: 'category',
+ label: 'Publishing',
+ items: [
+ 'plugins/publish-private',
+ 'plugins/add-to-directory',
+ 'plugins/observability',
+ ],
+ },
+ ],
+ Configuration: [
+ 'conf/index',
+ 'conf/reading',
+ 'conf/writing',
+ 'conf/defining',
+ ],
+ Notifications: ['notifications/index'],
+ 'Auth and identity': [
+ 'auth/index',
+ {
+ type: 'category',
+ label: 'Included providers',
+ items: [
+ 'auth/auth0/provider',
+ 'auth/atlassian/provider',
+ 'auth/aws-alb/provider',
+ 'auth/microsoft/provider',
+ 'auth/microsoft/easy-auth',
+ 'auth/bitbucket/provider',
+ 'auth/bitbucketServer/provider',
+ 'auth/cloudflare/provider',
+ 'auth/github/provider',
+ 'auth/gitlab/provider',
+ 'auth/google/provider',
+ 'auth/google/gcp-iap-auth',
+ 'auth/guest/provider',
+ 'auth/okta/provider',
+ 'auth/oauth2-proxy/provider',
+ 'auth/onelogin/provider',
+ 'auth/vmware-cloud/provider',
+ ],
+ },
+ 'auth/identity-resolver',
+ 'auth/oauth',
+ 'auth/oidc',
+ 'auth/add-auth-provider',
+ 'auth/service-to-service-auth',
+ 'auth/autologout',
+ 'auth/troubleshooting',
+ ],
+ Permissions: [
+ 'permissions/overview',
+ 'permissions/concepts',
+ 'permissions/getting-started',
+ 'permissions/writing-a-policy',
+ 'permissions/frontend-integration',
+ 'permissions/custom-rules',
+ {
+ type: 'category',
+ label: 'Tutorial: using Permissions in your plugin',
+ items: [
+ 'permissions/plugin-authors/01-setup',
+ 'permissions/plugin-authors/02-adding-a-basic-permission-check',
+ 'permissions/plugin-authors/03-adding-a-resource-permission-check',
+ 'permissions/plugin-authors/04-authorizing-access-to-paginated-data',
+ 'permissions/plugin-authors/05-frontend-authorization',
+ ],
+ },
+ ],
+ Tooling: [
+ {
+ type: 'category',
+ label: 'Backstage CLI',
+ items: [
+ 'tooling/cli/overview',
+ 'tooling/cli/build-system',
+ 'tooling/cli/commands',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Local Development',
+ items: [
+ 'tooling/local-dev/linking-local-packages',
+ 'tooling/local-dev/debugging',
+ 'tooling/local-dev/profiling',
+ ],
+ },
+ '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',
+ {
+ type: 'category',
+ label: 'Architecture',
+ items: [
+ 'backend-system/architecture/index',
+ 'backend-system/architecture/services',
+ 'backend-system/architecture/plugins',
+ 'backend-system/architecture/extension-points',
+ 'backend-system/architecture/modules',
+ 'backend-system/architecture/feature-loaders',
+ 'backend-system/architecture/naming-patterns',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Building Backends',
+ items: [
+ 'backend-system/building-backends/index',
+ 'backend-system/building-backends/migrating',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Building Plugins & Modules',
+ items: [
+ 'backend-system/building-plugins-and-modules/index',
+ 'backend-system/building-plugins-and-modules/testing',
+ 'backend-system/building-plugins-and-modules/migrating',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Core Services',
+ items: [
+ 'backend-system/core-services/index',
+ 'backend-system/core-services/auth',
+ 'backend-system/core-services/cache',
+ 'backend-system/core-services/database',
+ 'backend-system/core-services/discovery',
+ 'backend-system/core-services/http-auth',
+ 'backend-system/core-services/http-router',
+ 'backend-system/core-services/identity',
+ 'backend-system/core-services/lifecycle',
+ 'backend-system/core-services/logger',
+ 'backend-system/core-services/permissions',
+ 'backend-system/core-services/plugin-metadata',
+ 'backend-system/core-services/root-config',
+ 'backend-system/core-services/root-health',
+ 'backend-system/core-services/root-http-router',
+ 'backend-system/core-services/root-lifecycle',
+ 'backend-system/core-services/root-logger',
+ 'backend-system/core-services/scheduler',
+ 'backend-system/core-services/token-manager',
+ 'backend-system/core-services/url-reader',
+ 'backend-system/core-services/user-info',
+ ],
+ },
+ ],
+ 'New Frontend System': [
+ 'frontend-system/index',
+ {
+ type: 'category',
+ label: 'Architecture',
+ items: [
+ 'frontend-system/architecture/index',
+ 'frontend-system/architecture/app',
+ 'frontend-system/architecture/plugins',
+ 'frontend-system/architecture/extensions',
+ 'frontend-system/architecture/extension-blueprints',
+ 'frontend-system/architecture/extension-overrides',
+ 'frontend-system/architecture/references',
+ 'frontend-system/architecture/utility-apis',
+ 'frontend-system/architecture/routes',
+ 'frontend-system/architecture/naming-patterns',
+ 'frontend-system/architecture/migrations',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Building Plugins',
+ items: [
+ 'frontend-system/building-plugins/index',
+ 'frontend-system/building-plugins/testing',
+ 'frontend-system/building-plugins/common-extension-blueprints',
+ 'frontend-system/building-plugins/built-in-data-refs',
+ 'frontend-system/building-plugins/migrating',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Building Apps',
+ items: [
+ 'frontend-system/building-apps/index',
+ 'frontend-system/building-apps/configuring-extensions',
+ 'frontend-system/building-apps/built-in-extensions',
+ 'frontend-system/building-apps/plugin-conversion',
+ 'frontend-system/building-apps/migrating',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Utility APIs',
+ items: [
+ 'frontend-system/utility-apis/index',
+ 'frontend-system/utility-apis/creating',
+ 'frontend-system/utility-apis/consuming',
+ 'frontend-system/utility-apis/configuring',
+ ],
+ },
+ ],
+ 'Designing for Backstage': [
+ 'dls/design',
+ 'dls/component-design-guidelines',
+ 'dls/contributing-to-storybook',
+ 'dls/figma',
+ ],
+ 'API Reference': [
+ {
+ type: 'category',
+ label: 'Guides',
+ items: ['api/utility-apis'],
+ },
+ {
+ type: 'category',
+ label: 'API Reference',
+ items: ['reference/index'],
+ },
+ 'api/deprecations',
+ ],
+ Tutorials: [
+ 'tutorials/quickstart-app-plugin',
+ 'tutorials/react-router-stable-migration',
+ 'tutorials/react18-migration',
+ 'tutorials/package-role-migration',
+ 'tutorials/migrating-away-from-core',
+ 'tutorials/configuring-plugin-databases',
+ 'tutorials/switching-sqlite-postgres',
+ 'tutorials/using-backstage-proxy-within-plugin',
+ 'tutorials/yarn-migration',
+ 'tutorials/migrate-to-mui5',
+ 'tutorials/auth-service-migration',
+ 'tutorials/enable-public-entry',
+ 'tutorials/setup-opentelemetry',
+ ],
+ 'Architecture Decision Records (ADRs)': [
+ 'architecture-decisions/adrs-overview',
+ 'architecture-decisions/adrs-adr001',
+ 'architecture-decisions/adrs-adr002',
+ 'architecture-decisions/adrs-adr003',
+ 'architecture-decisions/adrs-adr004',
+ 'architecture-decisions/adrs-adr005',
+ 'architecture-decisions/adrs-adr006',
+ 'architecture-decisions/adrs-adr007',
+ 'architecture-decisions/adrs-adr008',
+ 'architecture-decisions/adrs-adr009',
+ 'architecture-decisions/adrs-adr010',
+ 'architecture-decisions/adrs-adr011',
+ 'architecture-decisions/adrs-adr012',
+ 'architecture-decisions/adrs-adr013',
+ ],
+ FAQ: ['faq/index', 'faq/product', 'faq/technical'],
+ Accessibility: ['accessibility/index'],
+ Contribute: [
+ 'contribute/index',
+ 'contribute/getting-involved',
+ 'contribute/project-structure',
+ ],
+ References: ['references/glossary'],
+ },
+ releases: {
+ 'Release Notes': releases.map(release => `releases/${release}`),
+ },
+};
diff --git a/microsite/sidebars.json b/microsite/sidebars.json
deleted file mode 100644
index d13ebc71c6..0000000000
--- a/microsite/sidebars.json
+++ /dev/null
@@ -1,552 +0,0 @@
-{
- "releases": {
- "Release Notes": [
- "releases/v1.29.0",
- "releases/v1.28.0",
- "releases/v1.27.0",
- "releases/v1.26.0",
- "releases/v1.25.0",
- "releases/v1.24.0",
- "releases/v1.23.0",
- "releases/v1.22.0",
- "releases/v1.21.0",
- "releases/v1.20.0",
- "releases/v1.19.0",
- "releases/v1.18.0",
- "releases/v1.17.0",
- "releases/v1.16.0",
- "releases/v1.15.0",
- "releases/v1.14.0",
- "releases/v1.13.0",
- "releases/v1.12.0",
- "releases/v1.11.0",
- "releases/v1.10.0",
- "releases/v1.9.0",
- "releases/v1.8.0",
- "releases/v1.7.0",
- "releases/v1.6.0",
- "releases/v1.5.0",
- "releases/v1.4.0",
- "releases/v1.3.0",
- "releases/v1.2.0",
- "releases/v1.1.0",
- "releases/v1.0.0"
- ]
- },
- "docs": {
- "Overview": [
- "overview/what-is-backstage",
- "overview/architecture-overview",
- "overview/roadmap",
- "overview/vision",
- "overview/background",
- "overview/adopting",
- "overview/versioning-policy",
- "overview/threat-model",
- "overview/support",
- "overview/logos"
- ],
- "Getting Started": [
- "getting-started/index",
- {
- "type": "category",
- "label": "Configuring Backstage",
- "items": [
- "getting-started/config/database",
- "getting-started/config/authentication",
- "getting-started/configure-app-with-plugins",
- "getting-started/app-custom-theme",
- "getting-started/homepage"
- ]
- },
- {
- "type": "category",
- "label": "Using Backstage",
- "items": [
- "getting-started/logging-in",
- "getting-started/register-a-component",
- "getting-started/create-a-component"
- ]
- },
- "getting-started/keeping-backstage-updated",
- "getting-started/concepts"
- ],
- "Core Features": [
- {
- "type": "category",
- "label": "Software Catalog",
- "items": [
- "features/software-catalog/software-catalog-overview",
- "features/software-catalog/life-of-an-entity",
- "features/software-catalog/configuration",
- "features/software-catalog/system-model",
- "features/software-catalog/descriptor-format",
- "features/software-catalog/references",
- "features/software-catalog/well-known-annotations",
- "features/software-catalog/well-known-relations",
- "features/software-catalog/well-known-statuses",
- "features/software-catalog/extending-the-model",
- "features/software-catalog/external-integrations",
- "features/software-catalog/catalog-customization",
- "features/software-catalog/software-catalog-api",
- "features/software-catalog/creating-the-catalog-graph"
- ]
- },
- {
- "type": "category",
- "label": "Kubernetes",
- "items": [
- "features/kubernetes/overview",
- "features/kubernetes/installation",
- "features/kubernetes/configuration",
- "features/kubernetes/authentication",
- "features/kubernetes/authentication-strategies",
- "features/kubernetes/troubleshooting",
- "features/kubernetes/proxy"
- ]
- },
- {
- "type": "category",
- "label": "Software Templates",
- "items": [
- "features/software-templates/software-templates-index",
- "features/software-templates/configuration",
- "features/software-templates/adding-templates",
- "features/software-templates/writing-templates",
- "features/software-templates/input-examples",
- "features/software-templates/builtin-actions",
- "features/software-templates/writing-custom-actions",
- "features/software-templates/writing-tests-for-actions",
- "features/software-templates/writing-custom-field-extensions",
- "features/software-templates/writing-custom-step-layouts",
- "features/software-templates/authorizing-scaffolder-template-details",
- "features/software-templates/migrating-to-rjsf-v5",
- "features/software-templates/migrating-from-v1beta2-to-v1beta3"
- ]
- },
- {
- "type": "category",
- "label": "Backstage Search",
- "items": [
- "features/search/search-overview",
- "features/search/getting-started",
- "features/search/concepts",
- "features/search/architecture",
- "features/search/search-engines",
- "features/search/how-to-guides"
- ]
- },
- {
- "type": "category",
- "label": "TechDocs",
- "items": [
- "features/techdocs/techdocs-overview",
- "features/techdocs/getting-started",
- "features/techdocs/concepts",
- "features/techdocs/addons",
- "features/techdocs/architecture",
- "features/techdocs/creating-and-publishing",
- "features/techdocs/configuration",
- "features/techdocs/using-cloud-storage",
- "features/techdocs/configuring-ci-cd",
- "features/techdocs/cli",
- "features/techdocs/how-to-guides",
- "features/techdocs/troubleshooting",
- "features/techdocs/faqs"
- ]
- }
- ],
- "Integrations": [
- "integrations/index",
- {
- "type": "category",
- "label": "AWS S3",
- "items": [
- "integrations/aws-s3/locations",
- "integrations/aws-s3/discovery"
- ]
- },
- {
- "type": "category",
- "label": "Azure",
- "items": [
- "integrations/azure/locations",
- "integrations/azure/discovery",
- "integrations/azure/org"
- ]
- },
- {
- "type": "category",
- "label": "Bitbucket Cloud",
- "items": [
- "integrations/bitbucketCloud/locations",
- "integrations/bitbucketCloud/discovery"
- ]
- },
- {
- "type": "category",
- "label": "Bitbucket Server",
- "items": [
- "integrations/bitbucketServer/locations",
- "integrations/bitbucketServer/discovery"
- ]
- },
- {
- "type": "category",
- "label": "Datadog",
- "items": ["integrations/datadog-rum/installation"]
- },
- {
- "type": "category",
- "label": "Gerrit",
- "items": [
- "integrations/gerrit/locations",
- "integrations/gerrit/discovery"
- ]
- },
- {
- "type": "category",
- "label": "GitHub",
- "items": [
- "integrations/github/locations",
- "integrations/github/discovery",
- "integrations/github/org",
- "integrations/github/github-apps"
- ]
- },
- {
- "type": "category",
- "label": "GitLab",
- "items": [
- "integrations/gitlab/locations",
- "integrations/gitlab/discovery",
- "integrations/gitlab/org"
- ]
- },
- {
- "type": "category",
- "label": "Gitea",
- "items": ["integrations/gitea/locations"]
- },
- {
- "type": "category",
- "label": "Harness",
- "items": ["integrations/harness/locations"]
- },
- {
- "type": "category",
- "label": "Google GCS",
- "items": ["integrations/google-cloud-storage/locations"]
- },
- {
- "type": "category",
- "label": "LDAP",
- "items": ["integrations/ldap/org"]
- }
- ],
- "Plugins": [
- "plugins/index",
- "plugins/existing-plugins",
- "plugins/create-a-plugin",
- "plugins/plugin-development",
- "plugins/structure-of-a-plugin",
- "plugins/integrating-plugin-into-software-catalog",
- "plugins/integrating-search-into-plugins",
- "plugins/composability",
- "plugins/internationalization",
- "plugins/analytics",
- "plugins/feature-flags",
- {
- "type": "category",
- "label": "OpenAPI",
- "items": [
- "openapi/01-getting-started",
- "openapi/generate-client",
- "openapi/test-case-validation"
- ]
- },
- {
- "type": "category",
- "label": "Backends and APIs",
- "items": [
- "plugins/proxying",
- "plugins/backend-plugin",
- "plugins/call-existing-api",
- "plugins/url-reader"
- ]
- },
- {
- "type": "category",
- "label": "Testing",
- "items": ["plugins/testing"]
- },
- {
- "type": "category",
- "label": "Publishing",
- "items": [
- "plugins/publish-private",
- "plugins/add-to-directory",
- "plugins/observability"
- ]
- }
- ],
- "Configuration": [
- "conf/index",
- "conf/reading",
- "conf/writing",
- "conf/defining"
- ],
- "Auth and identity": [
- "auth/index",
- {
- "type": "category",
- "label": "Included providers",
- "items": [
- "auth/auth0/provider",
- "auth/atlassian/provider",
- "auth/aws-alb/provider",
- "auth/microsoft/provider",
- "auth/microsoft/easy-auth",
- "auth/bitbucket/provider",
- "auth/bitbucketServer/provider",
- "auth/cloudflare/provider",
- "auth/github/provider",
- "auth/gitlab/provider",
- "auth/google/provider",
- "auth/google/gcp-iap-auth",
- "auth/guest/provider",
- "auth/okta/provider",
- "auth/oauth2-proxy/provider",
- "auth/onelogin/provider",
- "auth/vmware-cloud/provider"
- ]
- },
- "auth/identity-resolver",
- "auth/oauth",
- "auth/oidc",
- "auth/add-auth-provider",
- "auth/service-to-service-auth",
- "auth/autologout",
- "auth/troubleshooting"
- ],
- "Permissions": [
- "permissions/overview",
- "permissions/concepts",
- "permissions/getting-started",
- "permissions/writing-a-policy",
- "permissions/frontend-integration",
- "permissions/custom-rules",
- {
- "type": "category",
- "label": "Tutorial: using Permissions in your plugin",
- "items": [
- "permissions/plugin-authors/01-setup",
- "permissions/plugin-authors/02-adding-a-basic-permission-check",
- "permissions/plugin-authors/03-adding-a-resource-permission-check",
- "permissions/plugin-authors/04-authorizing-access-to-paginated-data",
- "permissions/plugin-authors/05-frontend-authorization"
- ]
- }
- ],
- "Tooling": [
- {
- "type": "category",
- "label": "Backstage CLI",
- "items": [
- "tooling/cli/overview",
- "tooling/cli/build-system",
- "tooling/cli/commands"
- ]
- },
- {
- "type": "category",
- "label": "Local Development",
- "items": [
- "tooling/local-dev/linking-local-packages",
- "tooling/local-dev/debugging"
- ]
- },
- "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",
- {
- "type": "category",
- "label": "Architecture",
- "items": [
- "backend-system/architecture/index",
- "backend-system/architecture/services",
- "backend-system/architecture/plugins",
- "backend-system/architecture/extension-points",
- "backend-system/architecture/modules",
- "backend-system/architecture/naming-patterns"
- ]
- },
- {
- "type": "category",
- "label": "Building Backends",
- "items": [
- "backend-system/building-backends/index",
- "backend-system/building-backends/migrating"
- ]
- },
- {
- "type": "category",
- "label": "Building Plugins & Modules",
- "items": [
- "backend-system/building-plugins-and-modules/index",
- "backend-system/building-plugins-and-modules/testing",
- "backend-system/building-plugins-and-modules/migrating"
- ]
- },
- {
- "type": "category",
- "label": "Core Services",
- "items": [
- "backend-system/core-services/index",
- "backend-system/core-services/auth",
- "backend-system/core-services/cache",
- "backend-system/core-services/database",
- "backend-system/core-services/discovery",
- "backend-system/core-services/http-auth",
- "backend-system/core-services/http-router",
- "backend-system/core-services/identity",
- "backend-system/core-services/lifecycle",
- "backend-system/core-services/logger",
- "backend-system/core-services/permissions",
- "backend-system/core-services/plugin-metadata",
- "backend-system/core-services/root-config",
- "backend-system/core-services/root-health",
- "backend-system/core-services/root-http-router",
- "backend-system/core-services/root-lifecycle",
- "backend-system/core-services/root-logger",
- "backend-system/core-services/scheduler",
- "backend-system/core-services/token-manager",
- "backend-system/core-services/url-reader",
- "backend-system/core-services/user-info"
- ]
- }
- ],
- "New Frontend System": [
- "frontend-system/index",
- {
- "type": "category",
- "label": "Architecture",
- "items": [
- "frontend-system/architecture/index",
- "frontend-system/architecture/app",
- "frontend-system/architecture/extensions",
- "frontend-system/architecture/plugins",
- "frontend-system/architecture/extension-overrides",
- "frontend-system/architecture/utility-apis",
- "frontend-system/architecture/routes",
- "frontend-system/architecture/naming-patterns",
- "frontend-system/architecture/references"
- ]
- },
- {
- "type": "category",
- "label": "Building Plugins",
- "items": [
- "frontend-system/building-plugins/index",
- "frontend-system/building-plugins/testing",
- "frontend-system/building-plugins/extension-types",
- "frontend-system/building-plugins/built-in-data-refs",
- "frontend-system/building-plugins/migrating"
- ]
- },
- {
- "type": "category",
- "label": "Building Apps",
- "items": [
- "frontend-system/building-apps/index",
- "frontend-system/building-apps/configuring-extensions",
- "frontend-system/building-apps/built-in-extensions",
- "frontend-system/building-apps/migrating"
- ]
- },
- {
- "type": "category",
- "label": "Utility APIs",
- "items": [
- "frontend-system/utility-apis/index",
- "frontend-system/utility-apis/creating",
- "frontend-system/utility-apis/consuming",
- "frontend-system/utility-apis/configuring"
- ]
- }
- ],
- "Designing for Backstage": [
- "dls/design",
- "dls/component-design-guidelines",
- "dls/contributing-to-storybook",
- "dls/figma"
- ],
- "API Reference": [
- {
- "type": "category",
- "label": "Guides",
- "items": ["api/utility-apis"]
- },
- {
- "type": "category",
- "label": "API Reference",
- "items": ["reference/index"]
- },
- "api/deprecations"
- ],
- "Tutorials": [
- "tutorials/quickstart-app-plugin",
- "tutorials/react-router-stable-migration",
- "tutorials/react18-migration",
- "tutorials/package-role-migration",
- "tutorials/migrating-away-from-core",
- "tutorials/configuring-plugin-databases",
- "tutorials/switching-sqlite-postgres",
- "tutorials/using-backstage-proxy-within-plugin",
- "tutorials/yarn-migration",
- "tutorials/migrate-to-mui5",
- "tutorials/auth-service-migration",
- "tutorials/enable-public-entry",
- "tutorials/setup-opentelemetry"
- ],
- "Architecture Decision Records (ADRs)": [
- "architecture-decisions/adrs-overview",
- "architecture-decisions/adrs-adr001",
- "architecture-decisions/adrs-adr002",
- "architecture-decisions/adrs-adr003",
- "architecture-decisions/adrs-adr004",
- "architecture-decisions/adrs-adr005",
- "architecture-decisions/adrs-adr006",
- "architecture-decisions/adrs-adr007",
- "architecture-decisions/adrs-adr008",
- "architecture-decisions/adrs-adr009",
- "architecture-decisions/adrs-adr010",
- "architecture-decisions/adrs-adr011",
- "architecture-decisions/adrs-adr012",
- "architecture-decisions/adrs-adr013"
- ],
- "FAQ": ["faq/index", "faq/product", "faq/technical"],
- "Accessibility": ["accessibility/index"],
- "Contribute": [
- "contribute/index",
- "contribute/getting-involved",
- "contribute/project-structure"
- ],
- "References": ["references/glossary"]
- }
-}
diff --git a/microsite/static/img/terraform-logo.svg b/microsite/static/img/terraform-logo.svg
new file mode 100644
index 0000000000..9ec37bdab4
--- /dev/null
+++ b/microsite/static/img/terraform-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/microsite/tsconfig.json b/microsite/tsconfig.json
index 71bc403643..9a5106747e 100644
--- a/microsite/tsconfig.json
+++ b/microsite/tsconfig.json
@@ -2,6 +2,7 @@
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": ".",
+ "allowJs": true,
"types": [
"node",
"@docusaurus/module-type-aliases",
diff --git a/microsite/yarn.lock b/microsite/yarn.lock
index 00732d79f2..13c7575934 100644
--- a/microsite/yarn.lock
+++ b/microsite/yarn.lock
@@ -197,118 +197,117 @@ __metadata:
languageName: node
linkType: hard
-"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.8.3":
- version: 7.23.5
- resolution: "@babel/code-frame@npm:7.23.5"
+"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.8.3":
+ version: 7.24.7
+ resolution: "@babel/code-frame@npm:7.24.7"
dependencies:
- "@babel/highlight": ^7.23.4
- chalk: ^2.4.2
- checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a
+ "@babel/highlight": ^7.24.7
+ picocolors: ^1.0.0
+ checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9, @babel/compat-data@npm:^7.23.5":
- version: 7.23.5
- resolution: "@babel/compat-data@npm:7.23.5"
- checksum: 06ce244cda5763295a0ea924728c09bae57d35713b675175227278896946f922a63edf803c322f855a3878323d48d0255a2a3023409d2a123483c8a69ebb4744
+"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/compat-data@npm:7.25.4"
+ checksum: b12a91d27c3731a4b0bdc9312a50b1911f41f7f728aaf0d4b32486e2257fd2cb2d3ea1a295e98449600c48f2c7883a3196ca77cda1cef7d97a10c2e83d037974
languageName: node
linkType: hard
-"@babel/core@npm:^7.19.6, @babel/core@npm:^7.23.3":
- version: 7.23.9
- resolution: "@babel/core@npm:7.23.9"
+"@babel/core@npm:^7.21.3, @babel/core@npm:^7.23.3":
+ version: 7.25.2
+ resolution: "@babel/core@npm:7.25.2"
dependencies:
"@ampproject/remapping": ^2.2.0
- "@babel/code-frame": ^7.23.5
- "@babel/generator": ^7.23.6
- "@babel/helper-compilation-targets": ^7.23.6
- "@babel/helper-module-transforms": ^7.23.3
- "@babel/helpers": ^7.23.9
- "@babel/parser": ^7.23.9
- "@babel/template": ^7.23.9
- "@babel/traverse": ^7.23.9
- "@babel/types": ^7.23.9
+ "@babel/code-frame": ^7.24.7
+ "@babel/generator": ^7.25.0
+ "@babel/helper-compilation-targets": ^7.25.2
+ "@babel/helper-module-transforms": ^7.25.2
+ "@babel/helpers": ^7.25.0
+ "@babel/parser": ^7.25.0
+ "@babel/template": ^7.25.0
+ "@babel/traverse": ^7.25.2
+ "@babel/types": ^7.25.2
convert-source-map: ^2.0.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.2.3
semver: ^6.3.1
- checksum: 634a511f74db52a5f5a283c1121f25e2227b006c095b84a02a40a9213842489cd82dc7d61cdc74e10b5bcd9bb0a4e28bab47635b54c7e2256d47ab57356e2a76
+ checksum: 9a1ef604a7eb62195f70f9370cec45472a08114e3934e3eaaedee8fd754edf0730e62347c7b4b5e67d743ce57b5bb8cf3b92459482ca94d06e06246ef021390a
languageName: node
linkType: hard
-"@babel/generator@npm:^7.23.3, @babel/generator@npm:^7.23.6":
- version: 7.23.6
- resolution: "@babel/generator@npm:7.23.6"
+"@babel/generator@npm:^7.23.3, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.4":
+ version: 7.25.5
+ resolution: "@babel/generator@npm:7.25.5"
dependencies:
- "@babel/types": ^7.23.6
- "@jridgewell/gen-mapping": ^0.3.2
- "@jridgewell/trace-mapping": ^0.3.17
+ "@babel/types": ^7.25.4
+ "@jridgewell/gen-mapping": ^0.3.5
+ "@jridgewell/trace-mapping": ^0.3.25
jsesc: ^2.5.1
- checksum: 1a1a1c4eac210f174cd108d479464d053930a812798e09fee069377de39a893422df5b5b146199ead7239ae6d3a04697b45fc9ac6e38e0f6b76374390f91fc6c
+ checksum: d7713f02536a8144eca810e9b13ae854b05fec462348eaf52e7b50df2c0a312bc43bfff0e8e10d6dd982e8986d61175ac8e67d7358a8b4dad9db4d6733bf0c9c
languageName: node
linkType: hard
-"@babel/helper-annotate-as-pure@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-annotate-as-pure@npm:7.22.5"
+"@babel/helper-annotate-as-pure@npm:^7.22.5, @babel/helper-annotate-as-pure@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-annotate-as-pure@npm:7.24.7"
dependencies:
- "@babel/types": ^7.22.5
- checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d
+ "@babel/types": ^7.24.7
+ checksum: 6178566099a6a0657db7a7fa601a54fb4731ca0b8614fbdccfd8e523c210c13963649bc8fdfd53ce7dd14d05e3dda2fb22dea5b30113c488b9eb1a906d60212e
languageName: node
linkType: hard
-"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5":
- version: 7.22.15
- resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15"
+"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7"
dependencies:
- "@babel/types": ^7.22.15
- checksum: 639c697a1c729f9fafa2dd4c9af2e18568190299b5907bd4c2d0bc818fcbd1e83ffeecc2af24327a7faa7ac4c34edd9d7940510a5e66296c19bad17001cf5c7a
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 71a6158a9fdebffb82fdc400d5555ba8f2e370cea81a0d578155877bdc4db7d5252b75c43b2fdf3f72b3f68348891f99bd35ae315542daad1b7ace8322b1abcb
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6":
- version: 7.23.6
- resolution: "@babel/helper-compilation-targets@npm:7.23.6"
+"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7, @babel/helper-compilation-targets@npm:^7.24.8, @babel/helper-compilation-targets@npm:^7.25.2":
+ version: 7.25.2
+ resolution: "@babel/helper-compilation-targets@npm:7.25.2"
dependencies:
- "@babel/compat-data": ^7.23.5
- "@babel/helper-validator-option": ^7.23.5
- browserslist: ^4.22.2
+ "@babel/compat-data": ^7.25.2
+ "@babel/helper-validator-option": ^7.24.8
+ browserslist: ^4.23.1
lru-cache: ^5.1.1
semver: ^6.3.1
- checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590
+ checksum: aed33c5496cb9db4b5e2d44e26bf8bc474074cc7f7bb5ebe1d4a20fdeb362cb3ba9e1596ca18c7484bcd6e5c3a155ab975e420d520c0ae60df81f9de04d0fd16
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.22.11, @babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.22.5":
- version: 7.22.15
- resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15"
+"@babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0, @babel/helper-create-class-features-plugin@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.22.5
- "@babel/helper-environment-visitor": ^7.22.5
- "@babel/helper-function-name": ^7.22.5
- "@babel/helper-member-expression-to-functions": ^7.22.15
- "@babel/helper-optimise-call-expression": ^7.22.5
- "@babel/helper-replace-supers": ^7.22.9
- "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
- "@babel/helper-split-export-declaration": ^7.22.6
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-member-expression-to-functions": ^7.24.8
+ "@babel/helper-optimise-call-expression": ^7.24.7
+ "@babel/helper-replace-supers": ^7.25.0
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
+ "@babel/traverse": ^7.25.4
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 52c500d8d164abb3a360b1b7c4b8fff77bc4a5920d3a2b41ae6e1d30617b0dc0b972c1f5db35b1752007e04a748908b4a99bc872b73549ae837e87dcdde005a3
+ checksum: 4544ebda4516eb25efdebd47ca024bd7bdb1eb6e7cc3ad89688c8ef8e889734c2f4411ed78981899c641394f013f246f2af63d92a0e9270f6c453309b4cb89ba
languageName: node
linkType: hard
-"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5":
- version: 7.22.15
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15"
+"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0, @babel/helper-create-regexp-features-plugin@npm:^7.25.2":
+ version: 7.25.2
+ resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-annotate-as-pure": ^7.24.7
regexpu-core: ^5.3.1
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 0243b8d4854f1dc8861b1029a46d3f6393ad72f366a5a08e36a4648aa682044f06da4c6e87a456260e1e1b33c999f898ba591a0760842c1387bcc93fbf2151a6
+ checksum: df55fdc6a1f3090dd37d91347df52d9322d52affa239543808dc142f8fe35e6787e67d8612337668198fac85826fafa9e6772e6c28b7d249ec94e6fafae5da6e
languageName: node
linkType: hard
@@ -327,218 +326,238 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5":
- version: 7.22.20
- resolution: "@babel/helper-environment-visitor@npm:7.22.20"
- checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69
+"@babel/helper-define-polyfill-provider@npm:^0.6.2":
+ version: 0.6.2
+ resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2"
+ dependencies:
+ "@babel/helper-compilation-targets": ^7.22.6
+ "@babel/helper-plugin-utils": ^7.22.5
+ debug: ^4.1.1
+ lodash.debounce: ^4.0.8
+ resolve: ^1.14.2
+ peerDependencies:
+ "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
+ checksum: 2bba965ea9a4887ddf9c11d51d740ab473bd7597b787d042c325f6a45912dfe908c2d6bb1d837bf82f7e9fa51e6ad5150563c58131d2bb85515e63d971414a9c
languageName: node
linkType: hard
-"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0":
- version: 7.23.0
- resolution: "@babel/helper-function-name@npm:7.23.0"
+"@babel/helper-member-expression-to-functions@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8"
dependencies:
- "@babel/template": ^7.22.15
- "@babel/types": ^7.23.0
- checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10
+ "@babel/traverse": ^7.24.8
+ "@babel/types": ^7.24.8
+ checksum: bf923d05d81b06857f4ca4fe9c528c9c447a58db5ea39595bb559eae2fce01a8266173db0fd6a2ec129d7bbbb9bb22f4e90008252f7c66b422c76630a878a4bc
languageName: node
linkType: hard
-"@babel/helper-hoist-variables@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-hoist-variables@npm:7.22.5"
+"@babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-module-imports@npm:7.24.7"
dependencies:
- "@babel/types": ^7.22.5
- checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054
languageName: node
linkType: hard
-"@babel/helper-member-expression-to-functions@npm:^7.22.15":
- version: 7.23.0
- resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0"
+"@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2":
+ version: 7.25.2
+ resolution: "@babel/helper-module-transforms@npm:7.25.2"
dependencies:
- "@babel/types": ^7.23.0
- checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75
- languageName: node
- linkType: hard
-
-"@babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5":
- version: 7.22.15
- resolution: "@babel/helper-module-imports@npm:7.22.15"
- dependencies:
- "@babel/types": ^7.22.15
- checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702
- languageName: node
- linkType: hard
-
-"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0, @babel/helper-module-transforms@npm:^7.23.3":
- version: 7.23.3
- resolution: "@babel/helper-module-transforms@npm:7.23.3"
- dependencies:
- "@babel/helper-environment-visitor": ^7.22.20
- "@babel/helper-module-imports": ^7.22.15
- "@babel/helper-simple-access": ^7.22.5
- "@babel/helper-split-export-declaration": ^7.22.6
- "@babel/helper-validator-identifier": ^7.22.20
+ "@babel/helper-module-imports": ^7.24.7
+ "@babel/helper-simple-access": ^7.24.7
+ "@babel/helper-validator-identifier": ^7.24.7
+ "@babel/traverse": ^7.25.2
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71
+ checksum: 282d4e3308df6746289e46e9c39a0870819630af5f84d632559171e4fae6045684d771a65f62df3d569e88ccf81dc2def78b8338a449ae3a94bb421aa14fc367
languageName: node
linkType: hard
-"@babel/helper-optimise-call-expression@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-optimise-call-expression@npm:7.22.5"
+"@babel/helper-optimise-call-expression@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-optimise-call-expression@npm:7.24.7"
dependencies:
- "@babel/types": ^7.22.5
- checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c
+ "@babel/types": ^7.24.7
+ checksum: 280654eaf90e92bf383d7eed49019573fb35a98c9e992668f701ad099957246721044be2068cf6840cb2299e0ad393705a1981c88c23a1048096a8d59e5f79a3
languageName: node
linkType: hard
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
- version: 7.22.5
- resolution: "@babel/helper-plugin-utils@npm:7.22.5"
- checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
+ version: 7.24.8
+ resolution: "@babel/helper-plugin-utils@npm:7.24.8"
+ checksum: 73b1a83ba8bcee21dc94de2eb7323207391715e4369fd55844bb15cf13e3df6f3d13a40786d990e6370bf0f571d94fc31f70dec96c1d1002058258c35ca3767a
languageName: node
linkType: hard
-"@babel/helper-remap-async-to-generator@npm:^7.22.5, @babel/helper-remap-async-to-generator@npm:^7.22.9":
- version: 7.22.20
- resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20"
+"@babel/helper-remap-async-to-generator@npm:^7.24.7, @babel/helper-remap-async-to-generator@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/helper-remap-async-to-generator@npm:7.25.0"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.22.5
- "@babel/helper-environment-visitor": ^7.22.20
- "@babel/helper-wrap-function": ^7.22.20
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-wrap-function": ^7.25.0
+ "@babel/traverse": ^7.25.0
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7
+ checksum: 47f3065e43fe9d6128ddb4291ffb9cf031935379265fd13de972b5f241943121f7583efb69cd2e1ecf39e3d0f76f047547d56c3fcc2c853b326fad5465da0bd7
languageName: node
linkType: hard
-"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9":
- version: 7.22.20
- resolution: "@babel/helper-replace-supers@npm:7.22.20"
+"@babel/helper-replace-supers@npm:^7.24.7, @babel/helper-replace-supers@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/helper-replace-supers@npm:7.25.0"
dependencies:
- "@babel/helper-environment-visitor": ^7.22.20
- "@babel/helper-member-expression-to-functions": ^7.22.15
- "@babel/helper-optimise-call-expression": ^7.22.5
+ "@babel/helper-member-expression-to-functions": ^7.24.8
+ "@babel/helper-optimise-call-expression": ^7.24.7
+ "@babel/traverse": ^7.25.0
peerDependencies:
"@babel/core": ^7.0.0
- checksum: a0008332e24daedea2e9498733e3c39b389d6d4512637e000f96f62b797e702ee24a407ccbcd7a236a551590a38f31282829a8ef35c50a3c0457d88218cae639
+ checksum: f669fc2487c22d40b808f94b9c3ee41129484d5ef0ba689bdd70f216ff91e10b6b021d2f8cd37e7bdd700235a2a6ae6622526344f064528190383bf661ac65f8
languageName: node
linkType: hard
-"@babel/helper-simple-access@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-simple-access@npm:7.22.5"
+"@babel/helper-simple-access@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-simple-access@npm:7.24.7"
dependencies:
- "@babel/types": ^7.22.5
- checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: ddbf55f9dea1900213f2a1a8500fabfd21c5a20f44dcfa957e4b0d8638c730f88751c77f678644f754f1a1dc73f4eb8b766c300deb45a9daad000e4247957819
languageName: node
linkType: hard
-"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5"
+"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7"
dependencies:
- "@babel/types": ^7.22.5
- checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 11b28fe534ce2b1a67c4d8e51a7b5711a2a0a0cae802f74614eee54cca58c744d9a62f6f60103c41759e81c537d270bfd665bf368a6bea214c6052f2094f8407
languageName: node
linkType: hard
-"@babel/helper-split-export-declaration@npm:^7.22.6":
- version: 7.22.6
- resolution: "@babel/helper-split-export-declaration@npm:7.22.6"
+"@babel/helper-string-parser@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/helper-string-parser@npm:7.24.8"
+ checksum: 39b03c5119216883878655b149148dc4d2e284791e969b19467a9411fccaa33f7a713add98f4db5ed519535f70ad273cdadfd2eb54d47ebbdeac5083351328ce
+ languageName: node
+ linkType: hard
+
+"@babel/helper-validator-identifier@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-validator-identifier@npm:7.24.7"
+ checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257
+ languageName: node
+ linkType: hard
+
+"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/helper-validator-option@npm:7.24.8"
+ checksum: a52442dfa74be6719c0608fee3225bd0493c4057459f3014681ea1a4643cd38b68ff477fe867c4b356da7330d085f247f0724d300582fa4ab9a02efaf34d107c
+ languageName: node
+ linkType: hard
+
+"@babel/helper-wrap-function@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/helper-wrap-function@npm:7.25.0"
dependencies:
- "@babel/types": ^7.22.5
- checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921
+ "@babel/template": ^7.25.0
+ "@babel/traverse": ^7.25.0
+ "@babel/types": ^7.25.0
+ checksum: 0095b4741704066d1687f9bbd5370bb88c733919e4275e49615f70c180208148ff5f24ab58d186ce92f8f5d28eab034ec6617e9264590cc4744c75302857629c
languageName: node
linkType: hard
-"@babel/helper-string-parser@npm:^7.23.4":
- version: 7.23.4
- resolution: "@babel/helper-string-parser@npm:7.23.4"
- checksum: c0641144cf1a7e7dc93f3d5f16d5327465b6cf5d036b48be61ecba41e1eece161b48f46b7f960951b67f8c3533ce506b16dece576baef4d8b3b49f8c65410f90
- languageName: node
- linkType: hard
-
-"@babel/helper-validator-identifier@npm:^7.22.20":
- version: 7.22.20
- resolution: "@babel/helper-validator-identifier@npm:7.22.20"
- checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc
- languageName: node
- linkType: hard
-
-"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5":
- version: 7.23.5
- resolution: "@babel/helper-validator-option@npm:7.23.5"
- checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e
- languageName: node
- linkType: hard
-
-"@babel/helper-wrap-function@npm:^7.22.20":
- version: 7.22.20
- resolution: "@babel/helper-wrap-function@npm:7.22.20"
+"@babel/helpers@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/helpers@npm:7.25.0"
dependencies:
- "@babel/helper-function-name": ^7.22.5
- "@babel/template": ^7.22.15
- "@babel/types": ^7.22.19
- checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca
+ "@babel/template": ^7.25.0
+ "@babel/types": ^7.25.0
+ checksum: 739e3704ff41a30f5eaac469b553f4d3ab02be6ced083f5925851532dfbd9efc5c347728e77b754ed0b262a4e5e384e60932a62c192d338db7e4b7f3adf9f4a7
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/helpers@npm:7.23.9"
+"@babel/highlight@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/highlight@npm:7.24.7"
dependencies:
- "@babel/template": ^7.23.9
- "@babel/traverse": ^7.23.9
- "@babel/types": ^7.23.9
- checksum: 2678231192c0471dbc2fc403fb19456cc46b1afefcfebf6bc0f48b2e938fdb0fef2e0fe90c8c8ae1f021dae5012b700372e4b5d15867f1d7764616532e4a6324
- languageName: node
- linkType: hard
-
-"@babel/highlight@npm:^7.23.4":
- version: 7.23.4
- resolution: "@babel/highlight@npm:7.23.4"
- dependencies:
- "@babel/helper-validator-identifier": ^7.22.20
+ "@babel/helper-validator-identifier": ^7.24.7
chalk: ^2.4.2
js-tokens: ^4.0.0
- checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89
+ picocolors: ^1.0.0
+ checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1
languageName: node
linkType: hard
-"@babel/parser@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/parser@npm:7.23.9"
+"@babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/parser@npm:7.25.4"
+ dependencies:
+ "@babel/types": ^7.25.4
bin:
parser: ./bin/babel-parser.js
- checksum: e7cd4960ac8671774e13803349da88d512f9292d7baa952173260d3e8f15620a28a3701f14f709d769209022f9e7b79965256b8be204fc550cfe783cdcabe7c7
+ checksum: fe4f083d4ad34f019dd7fad672cd007003004fb0a3df9b7315a5da9a5e8e56c1fed95acab6862e7d76cfccb2e8e364bcc307e9117718e6bb6dfb2e87ad065abf
languageName: node
linkType: hard
-"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15":
- version: 7.22.15
- resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.15"
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3":
+ version: 7.25.3
+ resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/traverse": ^7.25.3
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 8910ca21a7ec7c06f7b247d4b86c97c5aa15ef321518f44f6f490c5912fdf82c605aaa02b90892e375d82ccbedeadfdeadd922c1b836c9dd4c596871bf654753
+ checksum: d3dba60f360defe70eb43e35a1b17ea9dd4a99e734249e15be3d5c288019644f96f88d7ff51990118fda0845b4ad50f6d869e0382232b1d8b054d113d4eea7e2
languageName: node
linkType: hard
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.15":
- version: 7.22.15
- resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.15"
+"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.0"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
- "@babel/plugin-transform-optional-chaining": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.24.8
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: fd56d1e6435f2c008ca9050ea906ff7eedcbec43f532f2bf2e7e905d8bf75bf5e4295ea9593f060394e2c8e45737266ccbf718050bad2dd7be4e7613c60d1b5b
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.0"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.8
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 13ed301b108d85867d64226bbc4032b07dd1a23aab68e9e32452c4fe3930f2198bb65bdae9c262c4104bd5e45647bc1830d25d43d356ee9a137edd8d5fab8350
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
+ "@babel/plugin-transform-optional-chaining": ^7.24.7
peerDependencies:
"@babel/core": ^7.13.0
- checksum: fbefedc0da014c37f1a50a8094ce7dbbf2181ae93243f23d6ecba2499b5b20196c2124d6a4dfe3e9e0125798e80593103e456352a4beb4e5c6f7c75efb80fdac
+ checksum: 07b92878ac58a98ea1fdf6a8b4ec3413ba4fa66924e28b694d63ec5b84463123fbf4d7153b56cf3cedfef4a3482c082fe3243c04f8fb2c041b32b0e29b4a9e21
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.0"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/traverse": ^7.25.0
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: c8d08b8d6cc71451ad2a50cf7db72ab5b41c1e5e2e4d56cf6837a25a61270abd682c6b8881ab025f11a552d2024b3780519bb051459ebb71c27aed13d9917663
languageName: node
linkType: hard
@@ -606,25 +625,25 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-import-assertions@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5"
+"@babel/plugin-syntax-import-assertions@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2b8b5572db04a7bef1e6cd20debf447e4eef7cb012616f5eceb8fa3e23ce469b8f76ee74fd6d1e158ba17a8f58b0aec579d092fb67c5a30e83ccfbc5754916c1
+ checksum: c4d67be4eb1d4637e361477dbe01f5b392b037d17c1f861cfa0faa120030e137aab90a9237931b8040fd31d1e5d159e11866fa1165f78beef7a3be876a391a17
languageName: node
linkType: hard
-"@babel/plugin-syntax-import-attributes@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5"
+"@babel/plugin-syntax-import-attributes@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 197b3c5ea2a9649347f033342cb222ab47f4645633695205c0250c6bf2af29e643753b8bb24a2db39948bef08e7c540babfd365591eb57fc110cb30b425ffc47
+ checksum: 590dbb5d1a15264f74670b427b8d18527672c3d6c91d7bae7e65f80fd810edbc83d90e68065088644cbad3f2457ed265a54a9956fb789fcb9a5b521822b3a275
languageName: node
linkType: hard
@@ -650,14 +669,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-jsx@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-syntax-jsx@npm:7.22.5"
+"@babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-syntax-jsx@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce
+ checksum: 7a5ca629d8ca1e1ee78705a78e58c12920d07ed8006d7e7232b31296a384ff5e41d7b649bde5561196041037bbb9f9715be1d1c20975df87ca204f34ad15b965
languageName: node
linkType: hard
@@ -749,14 +768,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-typescript@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-syntax-typescript@npm:7.22.5"
+"@babel/plugin-syntax-typescript@npm:^7.24.7":
+ version: 7.25.4
+ resolution: "@babel/plugin-syntax-typescript@npm:7.25.4"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a
+ checksum: 9b89b8930cd5983f64251d75c9fcdc17a8dc73837d6de12220ff972888ecff4054a6467cf0c423cad242aa96c0f0564a39a0823073728cc02239b80d13f02230
languageName: node
linkType: hard
@@ -772,468 +791,477 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-arrow-functions@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5"
+"@babel/plugin-transform-arrow-functions@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 35abb6c57062802c7ce8bd96b2ef2883e3124370c688bbd67609f7d2453802fb73944df8808f893b6c67de978eb2bcf87bbfe325e46d6f39b5fcb09ece11d01a
+ checksum: 707c209b5331c7dc79bd326128c6a6640dbd62a78da1653c844db20c4f36bf7b68454f1bc4d2d051b3fde9136fa291f276ec03a071bb00ee653069ff82f91010
languageName: node
linkType: hard
-"@babel/plugin-transform-async-generator-functions@npm:^7.22.15":
- version: 7.22.15
- resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.15"
+"@babel/plugin-transform-async-generator-functions@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.4"
dependencies:
- "@babel/helper-environment-visitor": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-remap-async-to-generator": ^7.22.9
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/helper-remap-async-to-generator": ^7.25.0
"@babel/plugin-syntax-async-generators": ^7.8.4
+ "@babel/traverse": ^7.25.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: fad98786b446ce63bde0d14a221e2617eef5a7bbca62b49d96f16ab5e1694521234cfba6145b830fbf9af16d60a8a3dbf148e8694830bd91796fe333b0599e73
+ checksum: 4235444735a1946f8766fe56564a8134c2c36c73e6cf83b3f2ed5624ebc84ff5979506a6a5b39acdb23aa09d442a6af471710ed408ccce533a2c4d2990b9df6a
languageName: node
linkType: hard
-"@babel/plugin-transform-async-to-generator@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5"
+"@babel/plugin-transform-async-to-generator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7"
dependencies:
- "@babel/helper-module-imports": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-remap-async-to-generator": ^7.22.5
+ "@babel/helper-module-imports": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-remap-async-to-generator": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b95f23f99dcb379a9f0a1c2a3bbea3f8dc0e1b16dc1ac8b484fe378370169290a7a63d520959a9ba1232837cf74a80e23f6facbe14fd42a3cda6d3c2d7168e62
+ checksum: 13704fb3b83effc868db2b71bfb2c77b895c56cb891954fc362e95e200afd523313b0e7cf04ce02f45b05e76017c5b5fa8070c92613727a35131bb542c253a36
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5"
+"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 416b1341858e8ca4e524dee66044735956ced5f478b2c3b9bc11ec2285b0c25d7dbb96d79887169eb938084c95d0a89338c8b2fe70d473bd9dc92e5d9db1732c
+ checksum: 249cdcbff4e778b177245f9652b014ea4f3cd245d83297f10a7bf6d97790074089aa62bcde8c08eb299c5e68f2faed346b587d3ebac44d625ba9a83a4ee27028
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoping@npm:^7.22.15":
- version: 7.23.0
- resolution: "@babel/plugin-transform-block-scoping@npm:7.23.0"
+"@babel/plugin-transform-block-scoping@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 0cfe925cc3b5a3ad407e2253fab3ceeaa117a4b291c9cb245578880872999bca91bd83ffa0128ae9ca356330702e1ef1dcb26804f28d2cef678239caf629f73e
+ checksum: b1a8f932f69ad2a47ae3e02b4cedd2a876bfc2ac9cf72a503fd706cdc87272646fe9eed81e068c0fc639647033de29f7fa0c21cddd1da0026f83dbaac97316a8
languageName: node
linkType: hard
-"@babel/plugin-transform-class-properties@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-class-properties@npm:7.22.5"
+"@babel/plugin-transform-class-properties@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/plugin-transform-class-properties@npm:7.25.4"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.25.4
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b830152dfc2ff2f647f0abe76e6251babdfbef54d18c4b2c73a6bf76b1a00050a5d998dac80dc901a48514e95604324943a9dd39317073fe0928b559e0e0c579
+ checksum: b73f7d968639c6c2dfc13f4c5a8fe45cefd260f0faa7890ae12e65d41211072544ff5e128c8b61a86887b29ffd3df8422dbdfbf61648488e71d4bb599c41f4a5
languageName: node
linkType: hard
-"@babel/plugin-transform-class-static-block@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-class-static-block@npm:7.22.11"
+"@babel/plugin-transform-class-static-block@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.22.11
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-class-static-block": ^7.14.5
peerDependencies:
"@babel/core": ^7.12.0
- checksum: 69f040506fad66f1c6918d288d0e0edbc5c8a07c8b4462c1184ad2f9f08995d68b057126c213871c0853ae0c72afc60ec87492049dfacb20902e32346a448bcb
+ checksum: 324049263504f18416f1c3e24033baebfafd05480fdd885c8ebe6f2b415b0fc8e0b98d719360f9e30743cc78ac387fabc0b3c6606d2b54135756ffb92963b382
languageName: node
linkType: hard
-"@babel/plugin-transform-classes@npm:^7.22.15":
- version: 7.22.15
- resolution: "@babel/plugin-transform-classes@npm:7.22.15"
+"@babel/plugin-transform-classes@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/plugin-transform-classes@npm:7.25.4"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.22.5
- "@babel/helper-compilation-targets": ^7.22.15
- "@babel/helper-environment-visitor": ^7.22.5
- "@babel/helper-function-name": ^7.22.5
- "@babel/helper-optimise-call-expression": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-replace-supers": ^7.22.9
- "@babel/helper-split-export-declaration": ^7.22.6
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-compilation-targets": ^7.25.2
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/helper-replace-supers": ^7.25.0
+ "@babel/traverse": ^7.25.4
globals: ^11.1.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: d3f4d0c107dd8a3557ea3575cc777fab27efa92958b41e4a9822f7499725c1f554beae58855de16ddec0a7b694e45f59a26cea8fbde4275563f72f09c6e039a0
+ checksum: 0bf20e46eeb691bd60cee5d1b01950fc37accec88018ecace25099f7c8d8509c1ac54d11b8caf9f2157c6945969520642a3bc421159c1a14e80224dc9a7611de
languageName: node
linkType: hard
-"@babel/plugin-transform-computed-properties@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5"
+"@babel/plugin-transform-computed-properties@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/template": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/template": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: c2a77a0f94ec71efbc569109ec14ea2aa925b333289272ced8b33c6108bdbb02caf01830ffc7e49486b62dec51911924d13f3a76f1149f40daace1898009e131
+ checksum: 0cf8c1b1e4ea57dec8d4612460d84fd4cdbf71a7499bb61ee34632cf89018a59eee818ffca88a8d99ee7057c20a4257044d7d463fda6daef9bf1db9fa81563cb
languageName: node
linkType: hard
-"@babel/plugin-transform-destructuring@npm:^7.22.15":
- version: 7.23.0
- resolution: "@babel/plugin-transform-destructuring@npm:7.23.0"
+"@babel/plugin-transform-destructuring@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-destructuring@npm:7.24.8"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: cd6dd454ccc2766be551e4f8a04b1acc2aa539fa19e5c7501c56cc2f8cc921dd41a7ffb78455b4c4b2f954fcab8ca4561ba7c9c7bd5af9f19465243603d18cc3
+ checksum: 0b4bd3d608979a1e5bd97d9d42acd5ad405c7fffa61efac4c7afd8e86ea6c2d91ab2d94b6a98d63919571363fe76e0b03c4ff161f0f60241b895842596e4a999
languageName: node
linkType: hard
-"@babel/plugin-transform-dotall-regex@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5"
+"@babel/plugin-transform-dotall-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 409b658d11e3082c8f69e9cdef2d96e4d6d11256f005772425fb230cc48fd05945edbfbcb709dab293a1a2f01f9c8a5bb7b4131e632b23264039d9f95864b453
+ checksum: 67b10fc6abb1f61f0e765288eb4c6d63d1d0f9fc0660e69f6f2170c56fa16bc74e49857afc644beda112b41771cd90cf52df0940d11e97e52617c77c7dcff171
languageName: node
linkType: hard
-"@babel/plugin-transform-duplicate-keys@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5"
+"@babel/plugin-transform-duplicate-keys@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: bb1280fbabaab6fab2ede585df34900712698210a3bd413f4df5bae6d8c24be36b496c92722ae676a7a67d060a4624f4d6c23b923485f906bfba8773c69f55b4
+ checksum: d1da2ff85ecb56a63f4ccfd9dc9ae69400d85f0dadf44ecddd9e71c6e5c7a9178e74e3a9637555f415a2bb14551e563f09f98534ab54f53d25e8439fdde6ba2d
languageName: node
linkType: hard
-"@babel/plugin-transform-dynamic-import@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.11"
+"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.0"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-regexp-features-plugin": ^7.25.0
+ "@babel/helper-plugin-utils": ^7.24.8
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 608d6b0e77341189508880fd1a9f605a38d0803dd6f678ea3920ab181b17b377f6d5221ae8cf0104c7a044d30d4ddb0366bd064447695671d78457a656bb264f
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-dynamic-import@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-dynamic-import": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 78fc9c532210bf9e8f231747f542318568ac360ee6c27e80853962c984283c73da3f8f8aebe83c2096090a435b356b092ed85de617a156cbe0729d847632be45
+ checksum: 776509ff62ab40c12be814a342fc56a5cc09b91fb63032b2633414b635875fd7da03734657be0f6db2891fe6e3033b75d5ddb6f2baabd1a02e4443754a785002
languageName: node
linkType: hard
-"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5"
+"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7"
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-builder-binary-assignment-operator-visitor": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: f2d660c1b1d51ad5fec1cd5ad426a52187204068c4158f8c4aa977b31535c61b66898d532603eef21c15756827be8277f724c869b888d560f26d7fe848bb5eae
+ checksum: 23c84a23eb56589fdd35a3540f9a1190615be069110a2270865223c03aee3ba4e0fc68fe14850800cf36f0712b26e4964d3026235261f58f0405a29fe8dac9b1
languageName: node
linkType: hard
-"@babel/plugin-transform-export-namespace-from@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.11"
+"@babel/plugin-transform-export-namespace-from@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-export-namespace-from": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 73af5883a321ed56a4bfd43c8a7de0164faebe619287706896fc6ee2f7a4e69042adaa1338c0b8b4bdb9f7e5fdceb016fb1d40694cb43ca3b8827429e8aac4bf
+ checksum: 3bd3a10038f10ae0dea1ee42137f3edcf7036b5e9e570a0d1cbd0865f03658990c6c2d84fa2475f87a754e7dc5b46766c16f7ce5c9b32c3040150b6a21233a80
languageName: node
linkType: hard
-"@babel/plugin-transform-for-of@npm:^7.22.15":
- version: 7.22.15
- resolution: "@babel/plugin-transform-for-of@npm:7.22.15"
+"@babel/plugin-transform-for-of@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-for-of@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: f395ae7bce31e14961460f56cf751b5d6e37dd27d7df5b1f4e49fec1c11b6f9cf71991c7ffbe6549878591e87df0d66af798cf26edfa4bfa6b4c3dba1fb2f73a
+ checksum: a53b42dc93ab4b7d1ebd3c695b52be22b3d592f6a3dbdb3dc2fea2c8e0a7e1508fe919864c455cde552aec44ce7518625fccbb70c7063373ca228d884f4f49ea
languageName: node
linkType: hard
-"@babel/plugin-transform-function-name@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-function-name@npm:7.22.5"
+"@babel/plugin-transform-function-name@npm:^7.25.1":
+ version: 7.25.1
+ resolution: "@babel/plugin-transform-function-name@npm:7.25.1"
dependencies:
- "@babel/helper-compilation-targets": ^7.22.5
- "@babel/helper-function-name": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-compilation-targets": ^7.24.8
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/traverse": ^7.25.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: cff3b876357999cb8ae30e439c3ec6b0491a53b0aa6f722920a4675a6dd5b53af97a833051df4b34791fe5b3dd326ccf769d5c8e45b322aa50ee11a660b17845
+ checksum: 743f3ea03bbc5a90944849d5a880b6bd9243dddbde581a46952da76e53a0b74c1e2424133fe8129d7a152c1f8c872bcd27e0b6728d7caadabd1afa7bb892e1e0
languageName: node
linkType: hard
-"@babel/plugin-transform-json-strings@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-json-strings@npm:7.22.11"
+"@babel/plugin-transform-json-strings@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-json-strings@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-json-strings": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 50665e5979e66358c50e90a26db53c55917f78175127ac2fa05c7888d156d418ffb930ec0a109353db0a7c5f57c756ce01bfc9825d24cbfd2b3ec453f2ed8cba
+ checksum: 88874d0b7a1ddea66c097fc0abb68801ffae194468aa44b828dde9a0e20ac5d8647943793de86092eabaa2911c96f67a6b373793d4bb9c932ef81b2711c06c2e
languageName: node
linkType: hard
-"@babel/plugin-transform-literals@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-literals@npm:7.22.5"
+"@babel/plugin-transform-literals@npm:^7.25.2":
+ version: 7.25.2
+ resolution: "@babel/plugin-transform-literals@npm:7.25.2"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ec37cc2ffb32667af935ab32fe28f00920ec8a1eb999aa6dc6602f2bebd8ba205a558aeedcdccdebf334381d5c57106c61f52332045730393e73410892a9735b
+ checksum: 70c9bb40e377a306bd8f500899fb72127e527517914466e95dc6bb53fa7a0f51479db244a54a771b5780fc1eab488fedd706669bf11097b81a23c81ab7423eb1
languageName: node
linkType: hard
-"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.11"
+"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: c664e9798e85afa7f92f07b867682dee7392046181d82f5d21bae6f2ca26dfe9c8375cdc52b7483c3fc09a983c1989f60eff9fbc4f373b0c0a74090553d05739
+ checksum: 3367ce0be243704dc6fce23e86a592c4380f01998ee5dd9f94c54b1ef7b971ac6f8a002901eb51599ac6cbdc0d067af8d1a720224fca1c40fde8bb8aab804aac
languageName: node
linkType: hard
-"@babel/plugin-transform-member-expression-literals@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5"
+"@babel/plugin-transform-member-expression-literals@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ec4b0e07915ddd4fda0142fd104ee61015c208608a84cfa13643a95d18760b1dc1ceb6c6e0548898b8c49e5959a994e46367260176dbabc4467f729b21868504
+ checksum: 2720c57aa3bf70576146ba7d6ea03227f4611852122d76d237924f7b008dafc952e6ae61a19e5024f26c665f44384bbd378466f01b6bd1305b3564a3b7fb1a5d
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-amd@npm:^7.22.5":
- version: 7.23.0
- resolution: "@babel/plugin-transform-modules-amd@npm:7.23.0"
+"@babel/plugin-transform-modules-amd@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7"
dependencies:
- "@babel/helper-module-transforms": ^7.23.0
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-module-transforms": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 5d92875170a37b8282d4bcd805f55829b8fab0f9c8d08b53d32a7a0bfdc62b868e489b52d329ae768ecafc0c993eed0ad7a387baa673ac33211390a9f833ab5d
+ checksum: f1dd0fb2f46c0f8f21076b8c7ccd5b33a85ce6dcb31518ea4c648d9a5bb2474cd4bd87c9b1b752e68591e24b022e334ba0d07631fef2b6b4d8a4b85cf3d581f5
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.22.15, @babel/plugin-transform-modules-commonjs@npm:^7.23.0":
- version: 7.23.0
- resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.0"
+"@babel/plugin-transform-modules-commonjs@npm:^7.24.7, @babel/plugin-transform-modules-commonjs@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8"
dependencies:
- "@babel/helper-module-transforms": ^7.23.0
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-simple-access": ^7.22.5
+ "@babel/helper-module-transforms": ^7.24.8
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/helper-simple-access": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7fb25997194053e167c4207c319ff05362392da841bd9f42ddb3caf9c8798a5d203bd926d23ddf5830fdf05eddc82c2810f40d1287e3a4f80b07eff13d1024b5
+ checksum: a4cf95b1639c33382064b44558f73ee5fac023f2a94d16e549d2bb55ceebd5cbc10fcddd505d08cd5bc97f5a64af9fd155512358b7dcf7b1a0082e8945cf21c5
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-systemjs@npm:^7.22.11":
- version: 7.23.0
- resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.0"
+"@babel/plugin-transform-modules-systemjs@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.0"
dependencies:
- "@babel/helper-hoist-variables": ^7.22.5
- "@babel/helper-module-transforms": ^7.23.0
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-validator-identifier": ^7.22.20
+ "@babel/helper-module-transforms": ^7.25.0
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/helper-validator-identifier": ^7.24.7
+ "@babel/traverse": ^7.25.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2d481458b22605046badea2317d5cc5c94ac3031c2293e34c96f02063f5b02af0979c4da6a8fbc67cc249541575dc9c6d710db6b919ede70b7337a22d9fd57a7
+ checksum: fe673bec08564e491847324bb80a1e6edfb229f5c37e58a094d51e95306e7b098e1d130fc43e992d22debd93b9beac74441ffc3f6ea5d78f6b2535896efa0728
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-umd@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5"
+"@babel/plugin-transform-modules-umd@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7"
dependencies:
- "@babel/helper-module-transforms": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-module-transforms": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 46622834c54c551b231963b867adbc80854881b3e516ff29984a8da989bd81665bd70e8cba6710345248e97166689310f544aee1a5773e262845a8f1b3e5b8b4
+ checksum: 9ff1c464892efe042952ba778468bda6131b196a2729615bdcc3f24cdc94014f016a4616ee5643c5845bade6ba698f386833e61056d7201314b13a7fd69fac88
languageName: node
linkType: hard
-"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5"
+"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623
+ checksum: f1c6c7b5d60a86b6d7e4dd098798e1d393d55e993a0b57a73b53640c7a94985b601a96bdacee063f809a9a700bcea3a2ff18e98fa561554484ac56b761d774bd
languageName: node
linkType: hard
-"@babel/plugin-transform-new-target@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-new-target@npm:7.22.5"
+"@babel/plugin-transform-new-target@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-new-target@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 6b72112773487a881a1d6ffa680afde08bad699252020e86122180ee7a88854d5da3f15d9bca3331cf2e025df045604494a8208a2e63b486266b07c14e2ffbf3
+ checksum: 3cb94cd1076b270f768f91fdcf9dd2f6d487f8dbfff3df7ca8d07b915900b86d02769a35ba1407d16fe49499012c8f055e1741299e2c880798b953d942a8fa1b
languageName: node
linkType: hard
-"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.11"
+"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 167babecc8b8fe70796a7b7d34af667ebbf43da166c21689502e5e8cc93180b7a85979c77c9f64b7cce431b36718bd0a6df9e5e0ffea4ae22afb22cfef886372
+ checksum: 4a9221356401d87762afbc37a9e8e764afc2daf09c421117537820f8cfbed6876888372ad3a7bcfae2d45c95f026651f050ab4020b777be31d3ffb00908dbdd3
languageName: node
linkType: hard
-"@babel/plugin-transform-numeric-separator@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.11"
+"@babel/plugin-transform-numeric-separator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-numeric-separator": ^7.10.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: af064d06a4a041767ec396a5f258103f64785df290e038bba9f0ef454e6c914f2ac45d862bbdad8fac2c7ad47fa4e95356f29053c60c100a0160b02a995fe2a3
+ checksum: 561b5f1d08b2c3f92ce849f092751558b5e6cfeb7eb55c79e7375c34dd9c3066dce5e630bb439affef6adcf202b6cbcaaa23870070276fa5bb429c8f5b8c7514
languageName: node
linkType: hard
-"@babel/plugin-transform-object-rest-spread@npm:^7.22.15":
- version: 7.22.15
- resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.15"
+"@babel/plugin-transform-object-rest-spread@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7"
dependencies:
- "@babel/compat-data": ^7.22.9
- "@babel/helper-compilation-targets": ^7.22.15
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-compilation-targets": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-object-rest-spread": ^7.8.3
- "@babel/plugin-transform-parameters": ^7.22.15
+ "@babel/plugin-transform-parameters": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 62197a6f12289c1c1bd57f3bed9f0f765ca32390bfe91e0b5561dd94dd9770f4480c4162dec98da094bc0ba99d2c2ebba68de47c019454041b0b7a68ba2ec66d
+ checksum: 169d257b9800c13e1feb4c37fb05dae84f702e58b342bb76e19e82e6692b7b5337c9923ee89e3916a97c0dd04a3375bdeca14f5e126f110bbacbeb46d1886ca2
languageName: node
linkType: hard
-"@babel/plugin-transform-object-super@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-object-super@npm:7.22.5"
+"@babel/plugin-transform-object-super@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-object-super@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-replace-supers": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-replace-supers": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b71887877d74cb64dbccb5c0324fa67e31171e6a5311991f626650e44a4083e5436a1eaa89da78c0474fb095d4ec322d63ee778b202d33aa2e4194e1ed8e62d7
+ checksum: f71e607a830ee50a22fa1a2686524d3339440cf9dea63032f6efbd865cfe4e35000e1e3f3492459e5c986f7c0c07dc36938bf3ce61fc9ba5f8ab732d0b64ab37
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-catch-binding@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.11"
+"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-optional-catch-binding": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: f17abd90e1de67c84d63afea29c8021c74abb2794d3a6eeafb0bbe7372d3db32aefca386e392116ec63884537a4a2815d090d26264d259bacc08f6e3ed05294c
+ checksum: 7229f3a5a4facaab40f4fdfc7faabc157dc38a67d66bed7936599f4bc509e0bff636f847ac2aa45294881fce9cf8a0a460b85d2a465b7b977de9739fce9b18f6
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.22.15":
- version: 7.23.0
- resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.0"
+"@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
"@babel/plugin-syntax-optional-chaining": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: f702634f2b97e5260dbec0d4bde05ccb6f4d96d7bfa946481aeacfa205ca846cb6e096a38312f9d51fdbdac1f258f211138c5f7075952e46a5bf8574de6a1329
+ checksum: 45e55e3a2fffb89002d3f89aef59c141610f23b60eee41e047380bffc40290b59f64fc649aa7ec5281f73d41b2065410d788acc6afaad2a9f44cad6e8af04442
languageName: node
linkType: hard
-"@babel/plugin-transform-parameters@npm:^7.22.15":
- version: 7.22.15
- resolution: "@babel/plugin-transform-parameters@npm:7.22.15"
+"@babel/plugin-transform-parameters@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-parameters@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 541188bb7d1876cad87687b5c7daf90f63d8208ae83df24acb1e2b05020ad1c78786b2723ca4054a83fcb74fb6509f30c4cacc5b538ee684224261ad5fb047c1
+ checksum: ab534b03ac2eff94bc79342b8f39a4584666f5305a6c63c1964afda0b1b004e6b861e49d1683548030defe248e3590d3ff6338ee0552cb90c064f7e1479968c3
languageName: node
linkType: hard
-"@babel/plugin-transform-private-methods@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-private-methods@npm:7.22.5"
+"@babel/plugin-transform-private-methods@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/plugin-transform-private-methods@npm:7.25.4"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.25.4
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 321479b4fcb6d3b3ef622ab22fd24001e43d46e680e8e41324c033d5810c84646e470f81b44cbcbef5c22e99030784f7cac92f1829974da7a47a60a7139082c3
+ checksum: cb1dabfc03e2977990263d65bc8f43a9037dffbb5d9a5f825c00d05447ff68015099408c1531d9dd88f18a41a90f5062dc48f3a1d52b415d2d2ee4827dedff09
languageName: node
linkType: hard
-"@babel/plugin-transform-private-property-in-object@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.11"
+"@babel/plugin-transform-private-property-in-object@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.22.5
- "@babel/helper-create-class-features-plugin": ^7.22.11
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-create-class-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
"@babel/plugin-syntax-private-property-in-object": ^7.14.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 4d029d84901e53c46dead7a46e2990a7bc62470f4e4ca58a0d063394f86652fd58fe4eea1eb941da3669cd536b559b9d058b342b59300026346b7a2a51badac8
+ checksum: 8cee9473095305cc787bb653fd681719b49363281feabf677db8a552e8e41c94441408055d7e5fd5c7d41b315e634fa70b145ad0c7c54456216049df4ed57350
languageName: node
linkType: hard
-"@babel/plugin-transform-property-literals@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-property-literals@npm:7.22.5"
+"@babel/plugin-transform-property-literals@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-property-literals@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 796176a3176106f77fcb8cd04eb34a8475ce82d6d03a88db089531b8f0453a2fb8b0c6ec9a52c27948bc0ea478becec449893741fc546dfc3930ab927e3f9f2e
+ checksum: 9aeefc3aab6c6bf9d1fae1cf3a2d38c7d886fd3c6c81b7c608c477f5758aee2e7abf52f32724310fe861da61af934ee2508b78a5b5f234b9740c9134e1c14437
languageName: node
linkType: hard
-"@babel/plugin-transform-react-constant-elements@npm:^7.18.12":
- version: 7.20.2
- resolution: "@babel/plugin-transform-react-constant-elements@npm:7.20.2"
+"@babel/plugin-transform-react-constant-elements@npm:^7.21.3":
+ version: 7.25.1
+ resolution: "@babel/plugin-transform-react-constant-elements@npm:7.25.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.20.2
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7b041b726e7c14b8c26a0dd240defac5f93a1f449371c6bdc5e6b46d581211300cc1a79da4140bdf20347f49e175dcb4f469812399206864024d1fdc81171193
+ checksum: 6126abf8bc3980c1e27fd217f8b2f226b20cce9be300eaf9d30548556dd1e906b7daa4580d9ae1dae35eb5ed5c98e7222e0cb91efb0a232d05aae5875dcfe55c
languageName: node
linkType: hard
@@ -1286,26 +1314,26 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-regenerator@npm:^7.22.10":
- version: 7.22.10
- resolution: "@babel/plugin-transform-regenerator@npm:7.22.10"
+"@babel/plugin-transform-regenerator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-regenerator@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
regenerator-transform: ^0.15.2
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: e13678d62d6fa96f11cb8b863f00e8693491e7adc88bfca3f2820f80cbac8336e7dec3a596eee6a1c4663b7ececc3564f2cd7fb44ed6d4ce84ac2bb7f39ecc6e
+ checksum: 20c6c3fb6fc9f407829087316653388d311e8c1816b007609bb09aeef254092a7157adace8b3aaa8f34be752503717cb85c88a5fe482180a9b11bcbd676063be
languageName: node
linkType: hard
-"@babel/plugin-transform-reserved-words@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5"
+"@babel/plugin-transform-reserved-words@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 3ffd7dbc425fe8132bfec118b9817572799cab1473113a635d25ab606c1f5a2341a636c04cf6b22df3813320365ed5a965b5eeb3192320a10e4cc2c137bd8bfc
+ checksum: 3d5876954d5914d7270819479504f30c4bf5452a65c677f44e2dab2db50b3c9d4b47793c45dfad7abf4f377035dd79e4b3f554ae350df9f422201d370ce9f8dd
languageName: node
linkType: hard
@@ -1325,141 +1353,145 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-shorthand-properties@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5"
+"@babel/plugin-transform-shorthand-properties@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: a5ac902c56ea8effa99f681340ee61bac21094588f7aef0bc01dff98246651702e677552fa6d10e548c4ac22a3ffad047dd2f8c8f0540b68316c2c203e56818b
+ checksum: 7b524245814607188212b8eb86d8c850e5974203328455a30881b4a92c364b93353fae14bc2af5b614ef16300b75b8c1d3b8f3a08355985b4794a7feb240adc3
languageName: node
linkType: hard
-"@babel/plugin-transform-spread@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-spread@npm:7.22.5"
+"@babel/plugin-transform-spread@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-spread@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 5587f0deb60b3dfc9b274e269031cc45ec75facccf1933ea2ea71ced9fd3ce98ed91bb36d6cd26817c14474b90ed998c5078415f0eab531caf301496ce24c95c
+ checksum: 4c4254c8b9cceb1a8f975fa9b92257ddb08380a35c0a3721b8f4b9e13a3d82e403af2e0fba577b9f2452dd8f06bc3dea71cc53b1e2c6af595af5db52a13429d6
languageName: node
linkType: hard
-"@babel/plugin-transform-sticky-regex@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5"
+"@babel/plugin-transform-sticky-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 63b2c575e3e7f96c32d52ed45ee098fb7d354b35c2223b8c8e76840b32cc529ee0c0ceb5742fd082e56e91e3d82842a367ce177e82b05039af3d602c9627a729
+ checksum: 118fc7a7ebf7c20411b670c8a030535fdfe4a88bc5643bb625a584dbc4c8a468da46430a20e6bf78914246962b0f18f1b9d6a62561a7762c4f34a038a5a77179
languageName: node
linkType: hard
-"@babel/plugin-transform-template-literals@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-template-literals@npm:7.22.5"
+"@babel/plugin-transform-template-literals@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-template-literals@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 27e9bb030654cb425381c69754be4abe6a7c75b45cd7f962cd8d604b841b2f0fb7b024f2efc1c25cc53f5b16d79d5e8cfc47cacbdaa983895b3aeefa3e7e24ff
+ checksum: ad44e5826f5a98c1575832dbdbd033adfe683cdff195e178528ead62507564bf02f479b282976cfd3caebad8b06d5fd7349c1cdb880dec3c56daea4f1f179619
languageName: node
linkType: hard
-"@babel/plugin-transform-typeof-symbol@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5"
+"@babel/plugin-transform-typeof-symbol@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 82a53a63ffc3010b689ca9a54e5f53b2718b9f4b4a9818f36f9b7dba234f38a01876680553d2716a645a61920b5e6e4aaf8d4a0064add379b27ca0b403049512
+ checksum: 8663a8e7347cedf181001d99c88cf794b6598c3d82f324098510fe8fb8bd22113995526a77aa35a3cc5d70ffd0617a59dd0d10311a9bf0e1a3a7d3e59b900c00
languageName: node
linkType: hard
-"@babel/plugin-transform-typescript@npm:^7.22.15":
- version: 7.22.15
- resolution: "@babel/plugin-transform-typescript@npm:7.22.15"
+"@babel/plugin-transform-typescript@npm:^7.24.7":
+ version: 7.25.2
+ resolution: "@babel/plugin-transform-typescript@npm:7.25.2"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.22.5
- "@babel/helper-create-class-features-plugin": ^7.22.15
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/plugin-syntax-typescript": ^7.22.5
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-create-class-features-plugin": ^7.25.0
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
+ "@babel/plugin-syntax-typescript": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: c5d96cdbf0e1512707aa1c1e3ac6b370a25fd9c545d26008ce44eb13a47bd7fd67a1eb799c98b5ccc82e33a345fda55c0055e1fe3ed97646ed405dd13020b226
+ checksum: b0267128d93560a4350919f7230a3b497e20fb8611d9f04bb3560d6b38877305ccad4c40903160263361c6930a84dbcb5b21b8ea923531bda51f67bffdc2dd0b
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-escapes@npm:^7.22.10":
- version: 7.22.10
- resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.10"
+"@babel/plugin-transform-unicode-escapes@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 807f40ed1324c8cb107c45358f1903384ca3f0ef1d01c5a3c5c9b271c8d8eec66936a3dcc8d75ddfceea9421420368c2e77ae3adef0a50557e778dfe296bf382
+ checksum: 4af0a193e1ddea6ff82b2b15cc2501b872728050bd625740b813c8062fec917d32d530ff6b41de56c15e7296becdf3336a58db81f5ca8e7c445c1306c52f3e01
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5"
+"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2495e5f663cb388e3d888b4ba3df419ac436a5012144ac170b622ddfc221f9ea9bdba839fa2bc0185cb776b578030666406452ec7791cbf0e7a3d4c88ae9574c
+ checksum: aae13350c50973f5802ca7906d022a6a0cc0e3aebac9122d0450bbd51e78252d4c2032ad69385e2759fcbdd3aac5d571bd7e26258907f51f8e1a51b53be626c2
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-regex@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5"
+"@babel/plugin-transform-unicode-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 6b5d1404c8c623b0ec9bd436c00d885a17d6a34f3f2597996343ddb9d94f6379705b21582dfd4cec2c47fd34068872e74ab6b9580116c0566b3f9447e2a7fa06
+ checksum: 1cb4e70678906e431da0a05ac3f8350025fee290304ad7482d9cfaa1ca67b2e898654de537c9268efbdad5b80d3ebadf42b4a88ea84609bd8a4cce7b11b48afd
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5"
+"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.4"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.22.5
- "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-create-regexp-features-plugin": ^7.25.2
+ "@babel/helper-plugin-utils": ^7.24.8
peerDependencies:
"@babel/core": ^7.0.0
- checksum: c042070f980b139547f8b0179efbc049ac5930abec7fc26ed7a41d89a048d8ab17d362200e204b6f71c3c20d6991a0e74415e1a412a49adc8131c2a40c04822e
+ checksum: 6d1a7e9fdde4ffc9a81c0e3f261b96a9a0dfe65da282ec96fe63b36c597a7389feac638f1df2a8a4f8c9128337bba8e984f934e9f19077930f33abf1926759ea
languageName: node
linkType: hard
-"@babel/preset-env@npm:^7.19.4, @babel/preset-env@npm:^7.22.9":
- version: 7.22.20
- resolution: "@babel/preset-env@npm:7.22.20"
+"@babel/preset-env@npm:^7.20.2, @babel/preset-env@npm:^7.22.9":
+ version: 7.25.4
+ resolution: "@babel/preset-env@npm:7.25.4"
dependencies:
- "@babel/compat-data": ^7.22.20
- "@babel/helper-compilation-targets": ^7.22.15
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-validator-option": ^7.22.15
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.22.15
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.22.15
+ "@babel/compat-data": ^7.25.4
+ "@babel/helper-compilation-targets": ^7.25.2
+ "@babel/helper-plugin-utils": ^7.24.8
+ "@babel/helper-validator-option": ^7.24.8
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.25.3
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.25.0
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.25.0
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.7
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.25.0
"@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2
"@babel/plugin-syntax-async-generators": ^7.8.4
"@babel/plugin-syntax-class-properties": ^7.12.13
"@babel/plugin-syntax-class-static-block": ^7.14.5
"@babel/plugin-syntax-dynamic-import": ^7.8.3
"@babel/plugin-syntax-export-namespace-from": ^7.8.3
- "@babel/plugin-syntax-import-assertions": ^7.22.5
- "@babel/plugin-syntax-import-attributes": ^7.22.5
+ "@babel/plugin-syntax-import-assertions": ^7.24.7
+ "@babel/plugin-syntax-import-attributes": ^7.24.7
"@babel/plugin-syntax-import-meta": ^7.10.4
"@babel/plugin-syntax-json-strings": ^7.8.3
"@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
@@ -1471,64 +1503,64 @@ __metadata:
"@babel/plugin-syntax-private-property-in-object": ^7.14.5
"@babel/plugin-syntax-top-level-await": ^7.14.5
"@babel/plugin-syntax-unicode-sets-regex": ^7.18.6
- "@babel/plugin-transform-arrow-functions": ^7.22.5
- "@babel/plugin-transform-async-generator-functions": ^7.22.15
- "@babel/plugin-transform-async-to-generator": ^7.22.5
- "@babel/plugin-transform-block-scoped-functions": ^7.22.5
- "@babel/plugin-transform-block-scoping": ^7.22.15
- "@babel/plugin-transform-class-properties": ^7.22.5
- "@babel/plugin-transform-class-static-block": ^7.22.11
- "@babel/plugin-transform-classes": ^7.22.15
- "@babel/plugin-transform-computed-properties": ^7.22.5
- "@babel/plugin-transform-destructuring": ^7.22.15
- "@babel/plugin-transform-dotall-regex": ^7.22.5
- "@babel/plugin-transform-duplicate-keys": ^7.22.5
- "@babel/plugin-transform-dynamic-import": ^7.22.11
- "@babel/plugin-transform-exponentiation-operator": ^7.22.5
- "@babel/plugin-transform-export-namespace-from": ^7.22.11
- "@babel/plugin-transform-for-of": ^7.22.15
- "@babel/plugin-transform-function-name": ^7.22.5
- "@babel/plugin-transform-json-strings": ^7.22.11
- "@babel/plugin-transform-literals": ^7.22.5
- "@babel/plugin-transform-logical-assignment-operators": ^7.22.11
- "@babel/plugin-transform-member-expression-literals": ^7.22.5
- "@babel/plugin-transform-modules-amd": ^7.22.5
- "@babel/plugin-transform-modules-commonjs": ^7.22.15
- "@babel/plugin-transform-modules-systemjs": ^7.22.11
- "@babel/plugin-transform-modules-umd": ^7.22.5
- "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5
- "@babel/plugin-transform-new-target": ^7.22.5
- "@babel/plugin-transform-nullish-coalescing-operator": ^7.22.11
- "@babel/plugin-transform-numeric-separator": ^7.22.11
- "@babel/plugin-transform-object-rest-spread": ^7.22.15
- "@babel/plugin-transform-object-super": ^7.22.5
- "@babel/plugin-transform-optional-catch-binding": ^7.22.11
- "@babel/plugin-transform-optional-chaining": ^7.22.15
- "@babel/plugin-transform-parameters": ^7.22.15
- "@babel/plugin-transform-private-methods": ^7.22.5
- "@babel/plugin-transform-private-property-in-object": ^7.22.11
- "@babel/plugin-transform-property-literals": ^7.22.5
- "@babel/plugin-transform-regenerator": ^7.22.10
- "@babel/plugin-transform-reserved-words": ^7.22.5
- "@babel/plugin-transform-shorthand-properties": ^7.22.5
- "@babel/plugin-transform-spread": ^7.22.5
- "@babel/plugin-transform-sticky-regex": ^7.22.5
- "@babel/plugin-transform-template-literals": ^7.22.5
- "@babel/plugin-transform-typeof-symbol": ^7.22.5
- "@babel/plugin-transform-unicode-escapes": ^7.22.10
- "@babel/plugin-transform-unicode-property-regex": ^7.22.5
- "@babel/plugin-transform-unicode-regex": ^7.22.5
- "@babel/plugin-transform-unicode-sets-regex": ^7.22.5
+ "@babel/plugin-transform-arrow-functions": ^7.24.7
+ "@babel/plugin-transform-async-generator-functions": ^7.25.4
+ "@babel/plugin-transform-async-to-generator": ^7.24.7
+ "@babel/plugin-transform-block-scoped-functions": ^7.24.7
+ "@babel/plugin-transform-block-scoping": ^7.25.0
+ "@babel/plugin-transform-class-properties": ^7.25.4
+ "@babel/plugin-transform-class-static-block": ^7.24.7
+ "@babel/plugin-transform-classes": ^7.25.4
+ "@babel/plugin-transform-computed-properties": ^7.24.7
+ "@babel/plugin-transform-destructuring": ^7.24.8
+ "@babel/plugin-transform-dotall-regex": ^7.24.7
+ "@babel/plugin-transform-duplicate-keys": ^7.24.7
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.25.0
+ "@babel/plugin-transform-dynamic-import": ^7.24.7
+ "@babel/plugin-transform-exponentiation-operator": ^7.24.7
+ "@babel/plugin-transform-export-namespace-from": ^7.24.7
+ "@babel/plugin-transform-for-of": ^7.24.7
+ "@babel/plugin-transform-function-name": ^7.25.1
+ "@babel/plugin-transform-json-strings": ^7.24.7
+ "@babel/plugin-transform-literals": ^7.25.2
+ "@babel/plugin-transform-logical-assignment-operators": ^7.24.7
+ "@babel/plugin-transform-member-expression-literals": ^7.24.7
+ "@babel/plugin-transform-modules-amd": ^7.24.7
+ "@babel/plugin-transform-modules-commonjs": ^7.24.8
+ "@babel/plugin-transform-modules-systemjs": ^7.25.0
+ "@babel/plugin-transform-modules-umd": ^7.24.7
+ "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7
+ "@babel/plugin-transform-new-target": ^7.24.7
+ "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7
+ "@babel/plugin-transform-numeric-separator": ^7.24.7
+ "@babel/plugin-transform-object-rest-spread": ^7.24.7
+ "@babel/plugin-transform-object-super": ^7.24.7
+ "@babel/plugin-transform-optional-catch-binding": ^7.24.7
+ "@babel/plugin-transform-optional-chaining": ^7.24.8
+ "@babel/plugin-transform-parameters": ^7.24.7
+ "@babel/plugin-transform-private-methods": ^7.25.4
+ "@babel/plugin-transform-private-property-in-object": ^7.24.7
+ "@babel/plugin-transform-property-literals": ^7.24.7
+ "@babel/plugin-transform-regenerator": ^7.24.7
+ "@babel/plugin-transform-reserved-words": ^7.24.7
+ "@babel/plugin-transform-shorthand-properties": ^7.24.7
+ "@babel/plugin-transform-spread": ^7.24.7
+ "@babel/plugin-transform-sticky-regex": ^7.24.7
+ "@babel/plugin-transform-template-literals": ^7.24.7
+ "@babel/plugin-transform-typeof-symbol": ^7.24.8
+ "@babel/plugin-transform-unicode-escapes": ^7.24.7
+ "@babel/plugin-transform-unicode-property-regex": ^7.24.7
+ "@babel/plugin-transform-unicode-regex": ^7.24.7
+ "@babel/plugin-transform-unicode-sets-regex": ^7.25.4
"@babel/preset-modules": 0.1.6-no-external-plugins
- "@babel/types": ^7.22.19
- babel-plugin-polyfill-corejs2: ^0.4.5
- babel-plugin-polyfill-corejs3: ^0.8.3
- babel-plugin-polyfill-regenerator: ^0.5.2
- core-js-compat: ^3.31.0
+ babel-plugin-polyfill-corejs2: ^0.4.10
+ babel-plugin-polyfill-corejs3: ^0.10.6
+ babel-plugin-polyfill-regenerator: ^0.6.1
+ core-js-compat: ^3.37.1
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 99357a5cb30f53bacdc0d1cd6dff0f052ea6c2d1ba874d969bba69897ef716e87283e84a59dc52fb49aa31fd1b6f55ed756c64c04f5678380700239f6030b881
+ checksum: 752be43f0b78a2eefe5007076aed3d21b505e1c09d134b61e7de8838f1bbb1e7af81023d39adb14b6eae23727fb5a9fd23f8115a44df043319be22319be17913
languageName: node
linkType: hard
@@ -1561,18 +1593,18 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-typescript@npm:^7.18.6, @babel/preset-typescript@npm:^7.22.5":
- version: 7.23.0
- resolution: "@babel/preset-typescript@npm:7.23.0"
+"@babel/preset-typescript@npm:^7.21.0, @babel/preset-typescript@npm:^7.22.5":
+ version: 7.24.7
+ resolution: "@babel/preset-typescript@npm:7.24.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-validator-option": ^7.22.15
- "@babel/plugin-syntax-jsx": ^7.22.5
- "@babel/plugin-transform-modules-commonjs": ^7.23.0
- "@babel/plugin-transform-typescript": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-validator-option": ^7.24.7
+ "@babel/plugin-syntax-jsx": ^7.24.7
+ "@babel/plugin-transform-modules-commonjs": ^7.24.7
+ "@babel/plugin-transform-typescript": ^7.24.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 3d5fce83e83f11c07e0ea13542bca181abb3b482b8981ec9c64e6add9d7beed3c54d063dc4bc9fd383165c71114a245abef89a289680833c5a8552fe3e7c4407
+ checksum: 12929b24757f3bd6548103475f86478eda4c872bc7cefd920b29591eee8f4a4f350561d888e133d632d0c9402b8615fdcec9138e5127a6567dcb22f804ff207f
languageName: node
linkType: hard
@@ -1602,43 +1634,40 @@ __metadata:
languageName: node
linkType: hard
-"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/template@npm:7.23.9"
+"@babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0":
+ version: 7.25.0
+ resolution: "@babel/template@npm:7.25.0"
dependencies:
- "@babel/code-frame": ^7.23.5
- "@babel/parser": ^7.23.9
- "@babel/types": ^7.23.9
- checksum: 6e67414c0f7125d7ecaf20c11fab88085fa98a96c3ef10da0a61e962e04fdf3a18a496a66047005ddd1bb682a7cc7842d556d1db2f3f3f6ccfca97d5e445d342
+ "@babel/code-frame": ^7.24.7
+ "@babel/parser": ^7.25.0
+ "@babel/types": ^7.25.0
+ checksum: 3f2db568718756d0daf2a16927b78f00c425046b654cd30b450006f2e84bdccaf0cbe6dc04994aa1f5f6a4398da2f11f3640a4d3ee31722e43539c4c919c817b
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/traverse@npm:7.23.9"
+"@babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4":
+ version: 7.25.4
+ resolution: "@babel/traverse@npm:7.25.4"
dependencies:
- "@babel/code-frame": ^7.23.5
- "@babel/generator": ^7.23.6
- "@babel/helper-environment-visitor": ^7.22.20
- "@babel/helper-function-name": ^7.23.0
- "@babel/helper-hoist-variables": ^7.22.5
- "@babel/helper-split-export-declaration": ^7.22.6
- "@babel/parser": ^7.23.9
- "@babel/types": ^7.23.9
+ "@babel/code-frame": ^7.24.7
+ "@babel/generator": ^7.25.4
+ "@babel/parser": ^7.25.4
+ "@babel/template": ^7.25.0
+ "@babel/types": ^7.25.4
debug: ^4.3.1
globals: ^11.1.0
- checksum: a932f7aa850e158c00c97aad22f639d48c72805c687290f6a73e30c5c4957c07f5d28310c9bf59648e2980fe6c9d16adeb2ff92a9ca0f97fa75739c1328fc6c3
+ checksum: 3b6d879b9d843b119501585269b3599f047011ae21eb7820d00aef62fc3a2bcdaf6f4cdf2679795a2d7c0b6b5d218974916e422f08dea08613dc42188ef21e4b
languageName: node
linkType: hard
-"@babel/types@npm:^7.20.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
- version: 7.23.9
- resolution: "@babel/types@npm:7.23.9"
+"@babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.4, @babel/types@npm:^7.4.4":
+ version: 7.25.4
+ resolution: "@babel/types@npm:7.25.4"
dependencies:
- "@babel/helper-string-parser": ^7.23.4
- "@babel/helper-validator-identifier": ^7.22.20
+ "@babel/helper-string-parser": ^7.24.8
+ "@babel/helper-validator-identifier": ^7.24.7
to-fast-properties: ^2.0.0
- checksum: 0a9b008e9bfc89beb8c185e620fa0f8ed6c771f1e1b2e01e1596870969096fec7793898a1d64a035176abf1dd13e2668ee30bf699f2d92c210a8128f4b151e65
+ checksum: 497f8b583c54a92a59c3ec542144695064cd5c384fcca46ba1aa301d5e5dd6c1d011f312ca024cb0f9c956da07ae82fb4c348c31a30afa31a074c027720d2aa8
languageName: node
linkType: hard
@@ -1689,9 +1718,9 @@ __metadata:
languageName: node
linkType: hard
-"@docusaurus/core@npm:3.2.1, @docusaurus/core@npm:^3.1.1":
- version: 3.2.1
- resolution: "@docusaurus/core@npm:3.2.1"
+"@docusaurus/core@npm:3.5.2, @docusaurus/core@npm:^3.1.1":
+ version: 3.5.2
+ resolution: "@docusaurus/core@npm:3.5.2"
dependencies:
"@babel/core": ^7.23.3
"@babel/generator": ^7.23.3
@@ -1703,14 +1732,12 @@ __metadata:
"@babel/runtime": ^7.22.6
"@babel/runtime-corejs3": ^7.22.6
"@babel/traverse": ^7.22.8
- "@docusaurus/cssnano-preset": 3.2.1
- "@docusaurus/logger": 3.2.1
- "@docusaurus/mdx-loader": 3.2.1
- "@docusaurus/react-loadable": 5.5.2
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-common": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
- "@svgr/webpack": ^6.5.1
+ "@docusaurus/cssnano-preset": 3.5.2
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/mdx-loader": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
autoprefixer: ^10.4.14
babel-loader: ^9.1.3
babel-plugin-dynamic-import-node: ^2.3.3
@@ -1724,8 +1751,8 @@ __metadata:
copy-webpack-plugin: ^11.0.0
core-js: ^3.31.1
css-loader: ^6.8.1
- css-minimizer-webpack-plugin: ^4.2.2
- cssnano: ^5.1.15
+ css-minimizer-webpack-plugin: ^5.0.1
+ cssnano: ^6.1.2
del: ^6.1.1
detect-port: ^1.5.1
escape-html: ^1.0.3
@@ -1745,7 +1772,7 @@ __metadata:
prompts: ^2.4.2
react-dev-utils: ^12.0.1
react-helmet-async: ^1.3.0
- react-loadable: "npm:@docusaurus/react-loadable@5.5.2"
+ react-loadable: "npm:@docusaurus/react-loadable@6.0.0"
react-loadable-ssr-addon-v5-slorber: ^1.0.1
react-router: ^5.3.4
react-router-config: ^5.1.1
@@ -1764,43 +1791,44 @@ __metadata:
webpack-merge: ^5.9.0
webpackbar: ^5.0.2
peerDependencies:
+ "@mdx-js/react": ^3.0.0
react: ^18.0.0
react-dom: ^18.0.0
bin:
docusaurus: bin/docusaurus.mjs
- checksum: 9267f08b41240cb9d399abbd8a41ff66e0082551284325db3f17fcce9643bef81d06564797a7cc4c528fe8bde2858c20666e74a0308f3ecc80f3be1dbee14bb5
+ checksum: 6c6282a75931f0f8f8f8768232b4436ff8679ae12b619f7bd01e0d83aa346e24ab0d9cecac034f9dc95c55059997efdd963d052d3e429583bfb8d3b54ab750d3
languageName: node
linkType: hard
-"@docusaurus/cssnano-preset@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/cssnano-preset@npm:3.2.1"
+"@docusaurus/cssnano-preset@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/cssnano-preset@npm:3.5.2"
dependencies:
- cssnano-preset-advanced: ^5.3.10
- postcss: ^8.4.26
- postcss-sort-media-queries: ^4.4.1
+ cssnano-preset-advanced: ^6.1.2
+ postcss: ^8.4.38
+ postcss-sort-media-queries: ^5.2.0
tslib: ^2.6.0
- checksum: ee23a1229d23732d936fe1d68732d1305abf0132b43a398336fee500504a3e7566d3b0c6222f89f565e24e68e00e353765e0cbbab5611a3b35ecf88305558b6d
+ checksum: 4bb1fae3741e14cbbdb64c1b0707435970838bf219831234a70cf382e6811ffac1cadf733d5e1fe7c278e7b2a9e533bfa802a5212b22ec46edd703208cf49f92
languageName: node
linkType: hard
-"@docusaurus/logger@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/logger@npm:3.2.1"
+"@docusaurus/logger@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/logger@npm:3.5.2"
dependencies:
chalk: ^4.1.2
tslib: ^2.6.0
- checksum: 9d5db5253eda98871563faddb5318bcb6b17ddf5882ababad4803d526917844819751e84ee8028e794fd5507646db6409f9041fd7f41b7f7971015df11cc6376
+ checksum: 7cbdcf54acd6e7787ca5a10b9c884be4b9e8fdae837862c66550a0bf3d02737f72c3188b2bddd61da6d8530eb2eb2b646ea599a79416e33c4998f1a87d2f6a8c
languageName: node
linkType: hard
-"@docusaurus/mdx-loader@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/mdx-loader@npm:3.2.1"
+"@docusaurus/mdx-loader@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/mdx-loader@npm:3.5.2"
dependencies:
- "@docusaurus/logger": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
"@mdx-js/mdx": ^3.0.0
"@slorber/remark-comment": ^1.0.0
escape-html: ^1.0.3
@@ -1825,38 +1853,37 @@ __metadata:
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 4609faf2d8b76085a3aa86ac5ca4ac3b3420e3cfd796f1b39c46f368c82b3db0db5b1308646cf35fdad0a1f6f088d367116eb0e2a8c3fa728ed886ee37516476
+ checksum: 36186c2f3487631757b24ba3a21575d2253ca1e6ada82d556bf323da7ae7637c0880eb388bf375e207bc5f26dcd8b58cc76d763e6c2caf6ed80f88748444ce8d
languageName: node
linkType: hard
-"@docusaurus/module-type-aliases@npm:3.2.1, @docusaurus/module-type-aliases@npm:^3.1.1":
- version: 3.2.1
- resolution: "@docusaurus/module-type-aliases@npm:3.2.1"
+"@docusaurus/module-type-aliases@npm:3.5.2, @docusaurus/module-type-aliases@npm:^3.1.1":
+ version: 3.5.2
+ resolution: "@docusaurus/module-type-aliases@npm:3.5.2"
dependencies:
- "@docusaurus/react-loadable": 5.5.2
- "@docusaurus/types": 3.2.1
+ "@docusaurus/types": 3.5.2
"@types/history": ^4.7.11
"@types/react": "*"
"@types/react-router-config": "*"
"@types/react-router-dom": "*"
react-helmet-async: "*"
- react-loadable: "npm:@docusaurus/react-loadable@5.5.2"
+ react-loadable: "npm:@docusaurus/react-loadable@6.0.0"
peerDependencies:
react: "*"
react-dom: "*"
- checksum: 37b4a40f9afebbe76e350c10c857737b544c141a988462436904ae16993a52e4429018d406e2f55ad57a533e5a108dd7cdb903434abb84721deeec0d5f195d80
+ checksum: 0161db859d459bb25ac162f0c509fb1316dfb403a9e89f325a9bc7d9f35ae1825b9703a435777903ba93de827d4413b189bbd0c03018ac13d66b50633302ea80
languageName: node
linkType: hard
"@docusaurus/plugin-client-redirects@npm:^3.1.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-client-redirects@npm:3.2.1"
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-client-redirects@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/logger": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-common": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
eta: ^2.2.0
fs-extra: ^11.1.1
lodash: ^4.17.21
@@ -1864,22 +1891,23 @@ __metadata:
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 84f031a9f660028cf745ad4f3b8ea8820e34fdabed75321b06a8145078b3b8c496369c902dc3f46a2bb973cfaaa433474a9891bd836494ff72c65258fa67b64c
+ checksum: 040aa829e819a43cb8d30f6c776c27a303080a4cb2fc2c398266fe9ecbd006dc53c6dd862ebcf4f74d0547042c4df6c4bbf080b3702be6df18c95b95c3e38f1d
languageName: node
linkType: hard
-"@docusaurus/plugin-content-blog@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-content-blog@npm:3.2.1"
+"@docusaurus/plugin-content-blog@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-content-blog@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/logger": 3.2.1
- "@docusaurus/mdx-loader": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-common": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
- cheerio: ^1.0.0-rc.12
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/mdx-loader": 3.5.2
+ "@docusaurus/theme-common": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
+ cheerio: 1.0.0-rc.12
feed: ^4.2.2
fs-extra: ^11.1.1
lodash: ^4.17.21
@@ -1890,24 +1918,26 @@ __metadata:
utility-types: ^3.10.0
webpack: ^5.88.1
peerDependencies:
+ "@docusaurus/plugin-content-docs": "*"
react: ^18.0.0
react-dom: ^18.0.0
- checksum: d95147a28aad832cd2dc39af634e1902a8a36f958dd2ff5fa6eaa47b574b58df42609a64da823951826f647337ad35c1f1c8be8a0a085913e192936f38839413
+ checksum: c5997b9d86ccf939998f9d56e65491ecf9e677d8425e95a79b3b428041d4dfc4ecb03a18ef595777c3ad5bd65f4a2dd30d99cb6f1b411161bf7cd32027ecc6d5
languageName: node
linkType: hard
-"@docusaurus/plugin-content-docs@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-content-docs@npm:3.2.1"
+"@docusaurus/plugin-content-docs@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-content-docs@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/logger": 3.2.1
- "@docusaurus/mdx-loader": 3.2.1
- "@docusaurus/module-type-aliases": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-common": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/mdx-loader": 3.5.2
+ "@docusaurus/module-type-aliases": 3.5.2
+ "@docusaurus/theme-common": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
"@types/react-router-config": ^5.0.7
combine-promises: ^1.1.0
fs-extra: ^11.1.1
@@ -1919,168 +1949,156 @@ __metadata:
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: c182466c3ff513b36a8975a3899b07ffc4b227ab45ef69eacc0a77119d6f0cd6a0727a3e886cfcf4a56e4f522f64e1e6a2647ddc57eb8493b93c03240b1d9b39
+ checksum: fb7ba7f8a6741b14bbe8db0bf1b12ff7a24d12c40d8276f32b9b393881d74bfed3bed4f1e5b0756cac0e43c4bd8106094d5cf6a3c527400e9713283fc3832dab
languageName: node
linkType: hard
-"@docusaurus/plugin-content-pages@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-content-pages@npm:3.2.1"
+"@docusaurus/plugin-content-pages@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-content-pages@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/mdx-loader": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/mdx-loader": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
fs-extra: ^11.1.1
tslib: ^2.6.0
webpack: ^5.88.1
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 3cce99f8aa863b97cbb54a50b448073222a0678528b09f5bec2196e73ec4740f412f8675ed05d283ff672756a5d3005f7a1e4d8c8f882cd0d6d5691cbccb604c
+ checksum: 8b3f1040e8ec006c9431508e73ef3f61cd5759bece3770189f7d52609f91bd156c9b18d0608f9cb14c456a1d1823be6633c573d5eee7cf9bd142b0f978c7a745
languageName: node
linkType: hard
-"@docusaurus/plugin-debug@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-debug@npm:3.2.1"
+"@docusaurus/plugin-debug@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-debug@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils": 3.5.2
fs-extra: ^11.1.1
react-json-view-lite: ^1.2.0
tslib: ^2.6.0
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: b3fb1c8935463afb97f233042692c247d4147c03e18ef9fb37fbf0c46d4adaefa4af0d5c357025992dadfe7b83a9fd3754946b8947bfb8b9535dca390a3668d0
+ checksum: a839e6c3a595ea202fdd7fbce638ab8df26ba73a8c7ead8c04d1bbb509ebe34e9633e7fe9eb54a7a733e93a03d74a60df4d9f6597b9621ff464280d4dd71db34
languageName: node
linkType: hard
-"@docusaurus/plugin-google-analytics@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-google-analytics@npm:3.2.1"
+"@docusaurus/plugin-google-analytics@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-google-analytics@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
tslib: ^2.6.0
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: e1e881fd6adbe408029257d526759b9217f7d70e5e068c7e9241a5f0c3050b0fa46acfeb4f8a23c3f36e1739d0a3d810642d69c6648ff6801ce13b646e44e6c1
+ checksum: 0b8c4d21333d40c2509d6ef807caaf69f085010c5deac514ab34f53b5486fd76766c90213dc98976a6c4d66fdfa14bf6b05594e51e8a53ec60c2a3fa08fd9a83
languageName: node
linkType: hard
-"@docusaurus/plugin-google-gtag@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-google-gtag@npm:3.2.1"
+"@docusaurus/plugin-google-gtag@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-google-gtag@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
"@types/gtag.js": ^0.0.12
tslib: ^2.6.0
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: b7758289d8453e98baf95d41e754c1e4c8fd5b1c000ba444c4bdf13fc97674a3cddf3215b6406266729e23898641b5bae297c5422c5bd079ef04773fa5a15c1b
+ checksum: 5d53c2483c8c7e3a8e842bd091a774d4041f0e165d216b3c02f031a224a77258c9456e8b2acd0500b4a0eff474a83c1b82803628db9d4b132514409936c68ac4
languageName: node
linkType: hard
-"@docusaurus/plugin-google-tag-manager@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-google-tag-manager@npm:3.2.1"
+"@docusaurus/plugin-google-tag-manager@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-google-tag-manager@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
tslib: ^2.6.0
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 82355aed046b12ce0fead68339e24a3c6f2f517bc2b80c9c26c502cc49d86c1b6d0f797d5269d1d5e73ac78fd748c8a2f4528f7f3feee1137ae8e73876426426
+ checksum: 9a6fc2ca54ea677c6edfd78f4f392d7d9ae86afd085fcda96d5ac41efa441352c25a2519595d9d15fb9b838e2ae39837f0daf02e2406c5cd56199ae237bd7b7a
languageName: node
linkType: hard
-"@docusaurus/plugin-sitemap@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/plugin-sitemap@npm:3.2.1"
+"@docusaurus/plugin-sitemap@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/plugin-sitemap@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/logger": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-common": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
fs-extra: ^11.1.1
sitemap: ^7.1.1
tslib: ^2.6.0
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: b2e4c4fddd0fbdd4a6a4c93a0f9c16b1294162146eb9911ce378f33d70396f08dfa98d92aed133bba2a8df2b1710c257bf00c0657933ee6cd9c5edb36c8054dc
+ checksum: 26b6bceb7ab87fe7f6f666742d1e81de32cdacc5aaa3d45d91002c7d64e3258f3d0aac87c6b0d442eaf34ede2af4b7521b50737f2e8e2718daff6fce10230213
languageName: node
linkType: hard
"@docusaurus/preset-classic@npm:^3.1.1":
- version: 3.2.1
- resolution: "@docusaurus/preset-classic@npm:3.2.1"
+ version: 3.5.2
+ resolution: "@docusaurus/preset-classic@npm:3.5.2"
dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/plugin-content-blog": 3.2.1
- "@docusaurus/plugin-content-docs": 3.2.1
- "@docusaurus/plugin-content-pages": 3.2.1
- "@docusaurus/plugin-debug": 3.2.1
- "@docusaurus/plugin-google-analytics": 3.2.1
- "@docusaurus/plugin-google-gtag": 3.2.1
- "@docusaurus/plugin-google-tag-manager": 3.2.1
- "@docusaurus/plugin-sitemap": 3.2.1
- "@docusaurus/theme-classic": 3.2.1
- "@docusaurus/theme-common": 3.2.1
- "@docusaurus/theme-search-algolia": 3.2.1
- "@docusaurus/types": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/plugin-content-blog": 3.5.2
+ "@docusaurus/plugin-content-docs": 3.5.2
+ "@docusaurus/plugin-content-pages": 3.5.2
+ "@docusaurus/plugin-debug": 3.5.2
+ "@docusaurus/plugin-google-analytics": 3.5.2
+ "@docusaurus/plugin-google-gtag": 3.5.2
+ "@docusaurus/plugin-google-tag-manager": 3.5.2
+ "@docusaurus/plugin-sitemap": 3.5.2
+ "@docusaurus/theme-classic": 3.5.2
+ "@docusaurus/theme-common": 3.5.2
+ "@docusaurus/theme-search-algolia": 3.5.2
+ "@docusaurus/types": 3.5.2
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 343c896f22bffbda9db4af7d652588f353c5f60336e545eb07be0dfe9bc29ca04a3978d88d5a8b3fa7caafc56a48b341349ffd08006885fa0d4de216cfdc5401
+ checksum: ec578e62b3b13b1874b14235a448a913c2d2358ea9b9d9c60bb250be468ab62387c88ec44e1ee82ad5b3d7243306e31919888a80eae62e5e8eab0ae12194bf69
languageName: node
linkType: hard
-"@docusaurus/react-loadable@npm:5.5.2, react-loadable@npm:@docusaurus/react-loadable@5.5.2":
- version: 5.5.2
- resolution: "@docusaurus/react-loadable@npm:5.5.2"
+"@docusaurus/theme-classic@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/theme-classic@npm:3.5.2"
dependencies:
- "@types/react": "*"
- prop-types: ^15.6.2
- peerDependencies:
- react: "*"
- checksum: 930fb9e2936412a12461f210acdc154a433283921ca43ac3fc3b84cb6c12eb738b3a3719373022bf68004efeb1a928dbe36c467d7a1f86454ed6241576d936e7
- languageName: node
- linkType: hard
-
-"@docusaurus/theme-classic@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/theme-classic@npm:3.2.1"
- dependencies:
- "@docusaurus/core": 3.2.1
- "@docusaurus/mdx-loader": 3.2.1
- "@docusaurus/module-type-aliases": 3.2.1
- "@docusaurus/plugin-content-blog": 3.2.1
- "@docusaurus/plugin-content-docs": 3.2.1
- "@docusaurus/plugin-content-pages": 3.2.1
- "@docusaurus/theme-common": 3.2.1
- "@docusaurus/theme-translations": 3.2.1
- "@docusaurus/types": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-common": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/mdx-loader": 3.5.2
+ "@docusaurus/module-type-aliases": 3.5.2
+ "@docusaurus/plugin-content-blog": 3.5.2
+ "@docusaurus/plugin-content-docs": 3.5.2
+ "@docusaurus/plugin-content-pages": 3.5.2
+ "@docusaurus/theme-common": 3.5.2
+ "@docusaurus/theme-translations": 3.5.2
+ "@docusaurus/types": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
"@mdx-js/react": ^3.0.0
clsx: ^2.0.0
copy-text-to-clipboard: ^3.2.0
- infima: 0.2.0-alpha.43
+ infima: 0.2.0-alpha.44
lodash: ^4.17.21
nprogress: ^0.2.0
postcss: ^8.4.26
@@ -2093,21 +2111,18 @@ __metadata:
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 7b38e47e9334ba6ad84f6432ec9ae81caad7f6c630b2a332617b0f32f1559b0e56f3d8857c732da62d1d7213ad0f493853bf18b1707a2f8d8bcccef32f1d81a1
+ checksum: 6c415b01ad24bb43eb166e2b780a84356ff14a627627f6a541c2803832d56c4f9409a5636048693d2d24804f59c2cc7bda925d9ef999a8276fe125477d2b2e1e
languageName: node
linkType: hard
-"@docusaurus/theme-common@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/theme-common@npm:3.2.1"
+"@docusaurus/theme-common@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/theme-common@npm:3.5.2"
dependencies:
- "@docusaurus/mdx-loader": 3.2.1
- "@docusaurus/module-type-aliases": 3.2.1
- "@docusaurus/plugin-content-blog": 3.2.1
- "@docusaurus/plugin-content-docs": 3.2.1
- "@docusaurus/plugin-content-pages": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-common": 3.2.1
+ "@docusaurus/mdx-loader": 3.5.2
+ "@docusaurus/module-type-aliases": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
"@types/history": ^4.7.11
"@types/react": "*"
"@types/react-router-config": "*"
@@ -2117,24 +2132,25 @@ __metadata:
tslib: ^2.6.0
utility-types: ^3.10.0
peerDependencies:
+ "@docusaurus/plugin-content-docs": "*"
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 13de70293476e05f1b52c2d99a1b26c73bf99ac92aba3c8ddc413b5336725d2b54c56c167d12244fdb0b518ee9cdecbbfb3258fb8cc91272e9b795361b131fbb
+ checksum: c78ec7f6035abc920a2a0bc1ad78920178a5452538a3a70794eca8d4b976725f6ccc464ee3092afd31ca59b4e061ad4c21cdce7f5e10b06567075814b2fc2002
languageName: node
linkType: hard
-"@docusaurus/theme-search-algolia@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/theme-search-algolia@npm:3.2.1"
+"@docusaurus/theme-search-algolia@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/theme-search-algolia@npm:3.5.2"
dependencies:
"@docsearch/react": ^3.5.2
- "@docusaurus/core": 3.2.1
- "@docusaurus/logger": 3.2.1
- "@docusaurus/plugin-content-docs": 3.2.1
- "@docusaurus/theme-common": 3.2.1
- "@docusaurus/theme-translations": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-validation": 3.2.1
+ "@docusaurus/core": 3.5.2
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/plugin-content-docs": 3.5.2
+ "@docusaurus/theme-common": 3.5.2
+ "@docusaurus/theme-translations": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-validation": 3.5.2
algoliasearch: ^4.18.0
algoliasearch-helper: ^3.13.3
clsx: ^2.0.0
@@ -2146,30 +2162,30 @@ __metadata:
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: befbb86bf309f2b770ae21bc1d5c91eb6e840a5a72858cdfd3b21dbabadd1738d6d427ada7745f9d3424bb1a6e01839e20bf35c15a4c13d59b63d259e52de5df
+ checksum: e945e3001996477597bfad074eaef074cf4c5365ed3076c3109130a2252b266e4e2fac46904a0626eedeff23b9ac11e7b985cc71f5485ede52d3ddf379b7959b
languageName: node
linkType: hard
-"@docusaurus/theme-translations@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/theme-translations@npm:3.2.1"
+"@docusaurus/theme-translations@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/theme-translations@npm:3.5.2"
dependencies:
fs-extra: ^11.1.1
tslib: ^2.6.0
- checksum: 43bdb90d143576d2e8eb56bfe2c9daa0e4250cdb2dcfd10096b86466e6ee253548ac5ef2f9a4986a5bc9a573d118fe4695ee5004f0ef00b57b720dac7f124337
+ checksum: dc523c74a13fb8552c03e547c6de1c21881d899cc74bf088a2bed716e0ef1a4ceba2726c43656d87fff60413ca191f5ea946b182e4ae4129c14da832b5194d82
languageName: node
linkType: hard
"@docusaurus/tsconfig@npm:^3.1.1":
- version: 3.2.1
- resolution: "@docusaurus/tsconfig@npm:3.2.1"
- checksum: ea3c28b79b0de069c50f7b3a67d3ff682b6ded2ef02d2c7a4c2eaeddc8fcf79c9d9f5e60fbd2966cf3d247fbb8f63897b80a61fdd8b485c745a12eb684ae241a
+ version: 3.5.2
+ resolution: "@docusaurus/tsconfig@npm:3.5.2"
+ checksum: 808a17eaf422ae9a948c6558dd1e92d4700b067ead3a63a84049c6845bf94f84e311cd0e4d517047fe9ea057efe393bb22c2d5c92d727d06c9f895e971f2c3ea
languageName: node
linkType: hard
-"@docusaurus/types@npm:3.2.1, @docusaurus/types@npm:^3.1.1":
- version: 3.2.1
- resolution: "@docusaurus/types@npm:3.2.1"
+"@docusaurus/types@npm:3.5.2, @docusaurus/types@npm:^3.1.1":
+ version: 3.5.2
+ resolution: "@docusaurus/types@npm:3.5.2"
dependencies:
"@mdx-js/mdx": ^3.0.0
"@types/history": ^4.7.11
@@ -2183,13 +2199,13 @@ __metadata:
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 4f19e162bff627675df160ae5c33c6063646050c4de5c9698018fbd9d198300b9ce7a7333e4d1b369b42cfa42296dc9fb36547e4e37664d594deb08639e6b620
+ checksum: e39451b7b08673ad5e1551ee6e4286f90f2554cf9ba245abfa56670550f48afca9c57b01c10ffa21dacb734c0fcd067150eeb2b1c1ebb1692f1f538b1eed0029
languageName: node
linkType: hard
-"@docusaurus/utils-common@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/utils-common@npm:3.2.1"
+"@docusaurus/utils-common@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/utils-common@npm:3.5.2"
dependencies:
tslib: ^2.6.0
peerDependencies:
@@ -2197,31 +2213,33 @@ __metadata:
peerDependenciesMeta:
"@docusaurus/types":
optional: true
- checksum: bc0b7e74bc29134dbdb7fbc2e8f9f39f0f460923a07d0ccd7f0542088e92c47faf06bdbd253b7ba2b9250b0869118a3b7bf3faa3a075a2a35f5f8545eb3345f2
+ checksum: 9d550c89663d4271456ae0832c82a1691207ccc95e21df3a05a4bd6bbd2624bb9e3ab7327d939c04b2023378987bcf99321b2c37be1af214852832f65d6db14a
languageName: node
linkType: hard
-"@docusaurus/utils-validation@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/utils-validation@npm:3.2.1"
+"@docusaurus/utils-validation@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/utils-validation@npm:3.5.2"
dependencies:
- "@docusaurus/logger": 3.2.1
- "@docusaurus/utils": 3.2.1
- "@docusaurus/utils-common": 3.2.1
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/utils": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
+ fs-extra: ^11.2.0
joi: ^17.9.2
js-yaml: ^4.1.0
+ lodash: ^4.17.21
tslib: ^2.6.0
- checksum: c7b5142083c8e4798c7f6aa1f7a06bc2e93e8e08a8a7a2c5eaf24aa6939e12e401f180f02164764805c40ec0f7179479e0ee98a935c2cb77037ca73ab33d80fd
+ checksum: 5966e6d0e8f26292c629899f13b545501b53b345b0e2291bb47aaa80d7c9c5cf155e15a4ecd073a4095ee7c83c6db3612e0a34f81a8187fd20410b1aeb92d731
languageName: node
linkType: hard
-"@docusaurus/utils@npm:3.2.1":
- version: 3.2.1
- resolution: "@docusaurus/utils@npm:3.2.1"
+"@docusaurus/utils@npm:3.5.2":
+ version: 3.5.2
+ resolution: "@docusaurus/utils@npm:3.5.2"
dependencies:
- "@docusaurus/logger": 3.2.1
- "@docusaurus/utils-common": 3.2.1
- "@svgr/webpack": ^6.5.1
+ "@docusaurus/logger": 3.5.2
+ "@docusaurus/utils-common": 3.5.2
+ "@svgr/webpack": ^8.1.0
escape-string-regexp: ^4.0.0
file-loader: ^6.2.0
fs-extra: ^11.1.1
@@ -2237,13 +2255,14 @@ __metadata:
shelljs: ^0.8.5
tslib: ^2.6.0
url-loader: ^4.1.1
+ utility-types: ^3.10.0
webpack: ^5.88.1
peerDependencies:
"@docusaurus/types": "*"
peerDependenciesMeta:
"@docusaurus/types":
optional: true
- checksum: ea862b178e303b49e644e77a663df6e42909632022918b77dc1ee69c4de46dde3f210052b1063e96a820e1443141f70e44aa51372f2bf9cfde65e080ea639889
+ checksum: 0e0f4fc65ed076d4e4b551ecb61447b7c2468060d1655afff314515844ae34dc0546f467f53bff535f3144afc109e974da27fadb7c678a5d19966bed9e7a27c4
languageName: node
linkType: hard
@@ -2270,51 +2289,51 @@ __metadata:
languageName: node
linkType: hard
-"@jest/schemas@npm:^29.0.0":
- version: 29.0.0
- resolution: "@jest/schemas@npm:29.0.0"
+"@jest/schemas@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "@jest/schemas@npm:29.6.3"
dependencies:
- "@sinclair/typebox": ^0.24.1
- checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb
+ "@sinclair/typebox": ^0.27.8
+ checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93
languageName: node
linkType: hard
-"@jest/types@npm:^29.3.1":
- version: 29.3.1
- resolution: "@jest/types@npm:29.3.1"
+"@jest/types@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "@jest/types@npm:29.6.3"
dependencies:
- "@jest/schemas": ^29.0.0
+ "@jest/schemas": ^29.6.3
"@types/istanbul-lib-coverage": ^2.0.0
"@types/istanbul-reports": ^3.0.0
"@types/node": "*"
"@types/yargs": ^17.0.8
chalk: ^4.0.0
- checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8
+ checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc
languageName: node
linkType: hard
-"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2":
- version: 0.3.2
- resolution: "@jridgewell/gen-mapping@npm:0.3.2"
+"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "@jridgewell/gen-mapping@npm:0.3.5"
dependencies:
- "@jridgewell/set-array": ^1.0.1
+ "@jridgewell/set-array": ^1.2.1
"@jridgewell/sourcemap-codec": ^1.4.10
- "@jridgewell/trace-mapping": ^0.3.9
- checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882
+ "@jridgewell/trace-mapping": ^0.3.24
+ checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52
languageName: node
linkType: hard
-"@jridgewell/resolve-uri@npm:3.1.0":
- version: 3.1.0
- resolution: "@jridgewell/resolve-uri@npm:3.1.0"
- checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267
+"@jridgewell/resolve-uri@npm:^3.1.0":
+ version: 3.1.2
+ resolution: "@jridgewell/resolve-uri@npm:3.1.2"
+ checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870
languageName: node
linkType: hard
-"@jridgewell/set-array@npm:^1.0.1":
- version: 1.1.2
- resolution: "@jridgewell/set-array@npm:1.1.2"
- checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e
+"@jridgewell/set-array@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@jridgewell/set-array@npm:1.2.1"
+ checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10
languageName: node
linkType: hard
@@ -2328,20 +2347,20 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10":
- version: 1.4.14
- resolution: "@jridgewell/sourcemap-codec@npm:1.4.14"
- checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97
+"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14":
+ version: 1.5.0
+ resolution: "@jridgewell/sourcemap-codec@npm:1.5.0"
+ checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec
languageName: node
linkType: hard
-"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9":
- version: 0.3.18
- resolution: "@jridgewell/trace-mapping@npm:0.3.18"
+"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9":
+ version: 0.3.25
+ resolution: "@jridgewell/trace-mapping@npm:0.3.25"
dependencies:
- "@jridgewell/resolve-uri": 3.1.0
- "@jridgewell/sourcemap-codec": 1.4.14
- checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02
+ "@jridgewell/resolve-uri": ^3.1.0
+ "@jridgewell/sourcemap-codec": ^1.4.14
+ checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34
languageName: node
linkType: hard
@@ -2499,10 +2518,10 @@ __metadata:
languageName: node
linkType: hard
-"@sinclair/typebox@npm:^0.24.1":
- version: 0.24.51
- resolution: "@sinclair/typebox@npm:0.24.51"
- checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0
+"@sinclair/typebox@npm:^0.27.8":
+ version: 0.27.8
+ resolution: "@sinclair/typebox@npm:0.27.8"
+ checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1
languageName: node
linkType: hard
@@ -2540,248 +2559,248 @@ __metadata:
languageName: node
linkType: hard
-"@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.1"
+"@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"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: cab83832830a57735329ed68f67c03b57ca21fa037b0134847b0c5c0ef4beca89956d7dacfbf7b2a10fd901e7009e877512086db2ee918b8c69aee7742ae32c0
+ checksum: 3fc8e35d16f5abe0af5efe5851f27581225ac405d6a1ca44cda0df064cddfcc29a428c48c2e4bef6cebf627c9ac2f652a096030edb02cf5a120ce28d3c234710
languageName: node
linkType: hard
-"@svgr/babel-plugin-remove-jsx-attribute@npm:*":
- version: 6.5.0
- resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:6.5.0"
+"@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0":
+ version: 8.0.0
+ resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7a4dfc1345f5855b010684e9c5301731842bf91d72b82ce5cc4c82c80b94de1036e447a8a00fb306a6dd575cb4c640d8ce3cfee6607ddbb804796a77284c7f22
+ checksum: ff992893c6c4ac802713ba3a97c13be34e62e6d981c813af40daabcd676df68a72a61bd1e692bb1eda3587f1b1d700ea462222ae2153bb0f46886632d4f88d08
languageName: node
linkType: hard
-"@svgr/babel-plugin-remove-jsx-empty-expression@npm:*":
- version: 6.5.0
- resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:6.5.0"
+"@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0":
+ version: 8.0.0
+ resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 3e173f720d530f9f71f8506f3eb78583eec3d87d66e385efe1ef3b3ebfc4e3680ec30f36414726de6a163e99ca69f54886022967e49476dea522267e1986936e
+ checksum: 0fb691b63a21bac00da3aa2dccec50d0d5a5b347ff408d60803b84410d8af168f2656e4ba1ee1f24dab0ae4e4af77901f2928752bb0434c1f6788133ec599ec8
languageName: node
linkType: hard
-"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:6.5.1"
+"@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0":
+ version: 8.0.0
+ resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b7d2125758e766e1ebd14b92216b800bdc976959bc696dbfa1e28682919147c1df4bb8b1b5fd037d7a83026e27e681fea3b8d3741af8d3cf4c9dfa3d412125df
+ checksum: 1edda65ef4f4dd8f021143c8ec276a08f6baa6f733b8e8ee2e7775597bf6b97afb47fdeefd579d6ae6c959fe2e634f55cd61d99377631212228c8cfb351b8921
languageName: node
linkType: hard
-"@svgr/babel-plugin-svg-dynamic-title@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:6.5.1"
+"@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0":
+ version: 8.0.0
+ resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 0fd42ebf127ae9163ef341e84972daa99bdcb9e6ed3f83aabd95ee173fddc43e40e02fa847fbc0a1058cf5549f72b7960a2c5e22c3e4ac18f7e3ac81277852ae
+ checksum: 876cec891488992e6a9aebb8155e2bea4ec461b4718c51de36e988e00e271c6d9d01ef6be17b9effd44b2b3d7db0b41c161a5904a46ae6f38b26b387ad7f3709
languageName: node
linkType: hard
-"@svgr/babel-plugin-svg-em-dimensions@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:6.5.1"
+"@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0":
+ version: 8.0.0
+ resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: c1550ee9f548526fa66fd171e3ffb5696bfc4e4cd108a631d39db492c7410dc10bba4eb5a190e9df824bf806130ccc586ae7d2e43c547e6a4f93bbb29a18f344
+ checksum: be0e2d391164428327d9ec469a52cea7d93189c6b0e2c290999e048f597d777852f701c64dca44cd45b31ed14a7f859520326e2e4ad7c3a4545d0aa235bc7e9a
languageName: node
linkType: hard
-"@svgr/babel-plugin-transform-react-native-svg@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:6.5.1"
+"@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0":
+ version: 8.1.0
+ resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 4c924af22b948b812629e80efb90ad1ec8faae26a232d8ca8a06b46b53e966a2c415a57806a3ff0ea806a622612e546422719b69ec6839717a7755dac19171d9
+ checksum: 85b434a57572f53bd2b9f0606f253e1fcf57b4a8c554ec3f2d43ed17f50d8cae200cb3aaf1ec9d626e1456e8b135dce530ae047eb0bed6d4bf98a752d6640459
languageName: node
linkType: hard
-"@svgr/babel-plugin-transform-svg-component@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/babel-plugin-transform-svg-component@npm:6.5.1"
+"@svgr/babel-plugin-transform-svg-component@npm:8.0.0":
+ version: 8.0.0
+ resolution: "@svgr/babel-plugin-transform-svg-component@npm:8.0.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: e496bb5ee871feb6bcab250b6e067322da7dd5c9c2b530b41e5586fe090f86611339b49d0a909c334d9b24cbca0fa755c949a2526c6ad03c6b5885666874cf5f
+ checksum: 04e2023d75693eeb0890341c40e449881184663056c249be7e5c80168e4aabb0fadd255e8d5d2dbf54b8c2a6e700efba994377135bfa4060dc4a2e860116ef8c
languageName: node
linkType: hard
-"@svgr/babel-preset@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/babel-preset@npm:6.5.1"
+"@svgr/babel-preset@npm:8.1.0":
+ version: 8.1.0
+ resolution: "@svgr/babel-preset@npm:8.1.0"
dependencies:
- "@svgr/babel-plugin-add-jsx-attribute": ^6.5.1
- "@svgr/babel-plugin-remove-jsx-attribute": "*"
- "@svgr/babel-plugin-remove-jsx-empty-expression": "*"
- "@svgr/babel-plugin-replace-jsx-attribute-value": ^6.5.1
- "@svgr/babel-plugin-svg-dynamic-title": ^6.5.1
- "@svgr/babel-plugin-svg-em-dimensions": ^6.5.1
- "@svgr/babel-plugin-transform-react-native-svg": ^6.5.1
- "@svgr/babel-plugin-transform-svg-component": ^6.5.1
+ "@svgr/babel-plugin-add-jsx-attribute": 8.0.0
+ "@svgr/babel-plugin-remove-jsx-attribute": 8.0.0
+ "@svgr/babel-plugin-remove-jsx-empty-expression": 8.0.0
+ "@svgr/babel-plugin-replace-jsx-attribute-value": 8.0.0
+ "@svgr/babel-plugin-svg-dynamic-title": 8.0.0
+ "@svgr/babel-plugin-svg-em-dimensions": 8.0.0
+ "@svgr/babel-plugin-transform-react-native-svg": 8.1.0
+ "@svgr/babel-plugin-transform-svg-component": 8.0.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 9f124be39a8e64f909162f925b3a63ddaa5a342a5e24fc0b7f7d9d4d7f7e3b916596c754fb557dc259928399cad5366a27cb231627a0d2dcc4b13ac521cf05af
+ checksum: 3a67930f080b8891e1e8e2595716b879c944d253112bae763dce59807ba23454d162216c8d66a0a0e3d4f38a649ecd6c387e545d1e1261dd69a68e9a3392ee08
languageName: node
linkType: hard
-"@svgr/core@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/core@npm:6.5.1"
+"@svgr/core@npm:8.1.0":
+ version: 8.1.0
+ resolution: "@svgr/core@npm:8.1.0"
dependencies:
- "@babel/core": ^7.19.6
- "@svgr/babel-preset": ^6.5.1
- "@svgr/plugin-jsx": ^6.5.1
+ "@babel/core": ^7.21.3
+ "@svgr/babel-preset": 8.1.0
camelcase: ^6.2.0
- cosmiconfig: ^7.0.1
- checksum: fd6d6d5da5aeb956703310480b626c1fb3e3973ad9fe8025efc1dcf3d895f857b70d100c63cf32cebb20eb83c9607bafa464c9436e18fe6fe4fafdc73ed6b1a5
+ cosmiconfig: ^8.1.3
+ snake-case: ^3.0.4
+ checksum: da4a12865c7dc59829d58df8bd232d6c85b7115fda40da0d2f844a1a51886e2e945560596ecfc0345d37837ac457de86a931e8b8d8550e729e0c688c02250d8a
languageName: node
linkType: hard
-"@svgr/hast-util-to-babel-ast@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/hast-util-to-babel-ast@npm:6.5.1"
+"@svgr/hast-util-to-babel-ast@npm:8.0.0":
+ version: 8.0.0
+ resolution: "@svgr/hast-util-to-babel-ast@npm:8.0.0"
dependencies:
- "@babel/types": ^7.20.0
+ "@babel/types": ^7.21.3
entities: ^4.4.0
- checksum: 37923cce1b3f4e2039077b0c570b6edbabe37d1cf1a6ee35e71e0fe00f9cffac450eec45e9720b1010418131a999cb0047331ba1b6d1d2c69af1b92ac785aacf
+ checksum: 88401281a38bbc7527e65ff5437970414391a86158ef4b4046c89764c156d2d39ecd7cce77be8a51994c9fb3249170cb1eb8b9128b62faaa81743ef6ed3534ab
languageName: node
linkType: hard
-"@svgr/plugin-jsx@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/plugin-jsx@npm:6.5.1"
+"@svgr/plugin-jsx@npm:8.1.0":
+ version: 8.1.0
+ resolution: "@svgr/plugin-jsx@npm:8.1.0"
dependencies:
- "@babel/core": ^7.19.6
- "@svgr/babel-preset": ^6.5.1
- "@svgr/hast-util-to-babel-ast": ^6.5.1
+ "@babel/core": ^7.21.3
+ "@svgr/babel-preset": 8.1.0
+ "@svgr/hast-util-to-babel-ast": 8.0.0
svg-parser: ^2.0.4
peerDependencies:
- "@svgr/core": ^6.0.0
- checksum: 42f22847a6bdf930514d7bedd3c5e1fd8d53eb3594779f9db16cb94c762425907c375cd8ec789114e100a4d38068aca6c7ab5efea4c612fba63f0630c44cc859
+ "@svgr/core": "*"
+ checksum: 0418a9780753d3544912ee2dad5d2cf8d12e1ba74df8053651b3886aeda54d5f0f7d2dece0af5e0d838332c4f139a57f0dabaa3ca1afa4d1a765efce6a7656f2
languageName: node
linkType: hard
-"@svgr/plugin-svgo@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/plugin-svgo@npm:6.5.1"
+"@svgr/plugin-svgo@npm:8.1.0":
+ version: 8.1.0
+ resolution: "@svgr/plugin-svgo@npm:8.1.0"
dependencies:
- cosmiconfig: ^7.0.1
- deepmerge: ^4.2.2
- svgo: ^2.8.0
+ cosmiconfig: ^8.1.3
+ deepmerge: ^4.3.1
+ svgo: ^3.0.2
peerDependencies:
"@svgr/core": "*"
- checksum: cd2833530ac0485221adc2146fd992ab20d79f4b12eebcd45fa859721dd779483158e11dfd9a534858fe468416b9412416e25cbe07ac7932c44ed5fa2021c72e
+ checksum: 59d9d214cebaacca9ca71a561f463d8b7e5a68ca9443e4792a42d903acd52259b1790c0680bc6afecc3f00a255a6cbd7ea278a9f625bac443620ea58a590c2d0
languageName: node
linkType: hard
-"@svgr/webpack@npm:^6.5.1":
- version: 6.5.1
- resolution: "@svgr/webpack@npm:6.5.1"
+"@svgr/webpack@npm:^8.1.0":
+ version: 8.1.0
+ resolution: "@svgr/webpack@npm:8.1.0"
dependencies:
- "@babel/core": ^7.19.6
- "@babel/plugin-transform-react-constant-elements": ^7.18.12
- "@babel/preset-env": ^7.19.4
+ "@babel/core": ^7.21.3
+ "@babel/plugin-transform-react-constant-elements": ^7.21.3
+ "@babel/preset-env": ^7.20.2
"@babel/preset-react": ^7.18.6
- "@babel/preset-typescript": ^7.18.6
- "@svgr/core": ^6.5.1
- "@svgr/plugin-jsx": ^6.5.1
- "@svgr/plugin-svgo": ^6.5.1
- checksum: d10582eb4fa82a5b6d314cb49f2c640af4fd3a60f5b76095d2b14e383ef6a43a6f4674b68774a21787dbde69dec0a251cfcfc3f9a96c82754ba5d5c6daf785f0
+ "@babel/preset-typescript": ^7.21.0
+ "@svgr/core": 8.1.0
+ "@svgr/plugin-jsx": 8.1.0
+ "@svgr/plugin-svgo": 8.1.0
+ checksum: c6eec5b0cf2fb2ecd3a7a362d272eda35330b17c76802a3481f499b5d07ff8f87b31d2571043bff399b051a1767b1e2e499dbf186104d1c06d76f9f1535fac01
languageName: node
linkType: hard
-"@swc/core-darwin-arm64@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-darwin-arm64@npm:1.5.29"
+"@swc/core-darwin-arm64@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-darwin-arm64@npm:1.7.26"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@swc/core-darwin-x64@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-darwin-x64@npm:1.5.29"
+"@swc/core-darwin-x64@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-darwin-x64@npm:1.7.26"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@swc/core-linux-arm-gnueabihf@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-linux-arm-gnueabihf@npm:1.5.29"
+"@swc/core-linux-arm-gnueabihf@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-linux-arm-gnueabihf@npm:1.7.26"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
-"@swc/core-linux-arm64-gnu@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-linux-arm64-gnu@npm:1.5.29"
+"@swc/core-linux-arm64-gnu@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-linux-arm64-gnu@npm:1.7.26"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"@swc/core-linux-arm64-musl@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-linux-arm64-musl@npm:1.5.29"
+"@swc/core-linux-arm64-musl@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-linux-arm64-musl@npm:1.7.26"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"@swc/core-linux-x64-gnu@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-linux-x64-gnu@npm:1.5.29"
+"@swc/core-linux-x64-gnu@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-linux-x64-gnu@npm:1.7.26"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"@swc/core-linux-x64-musl@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-linux-x64-musl@npm:1.5.29"
+"@swc/core-linux-x64-musl@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-linux-x64-musl@npm:1.7.26"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"@swc/core-win32-arm64-msvc@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-win32-arm64-msvc@npm:1.5.29"
+"@swc/core-win32-arm64-msvc@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-win32-arm64-msvc@npm:1.7.26"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@swc/core-win32-ia32-msvc@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-win32-ia32-msvc@npm:1.5.29"
+"@swc/core-win32-ia32-msvc@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-win32-ia32-msvc@npm:1.7.26"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@swc/core-win32-x64-msvc@npm:1.5.29":
- version: 1.5.29
- resolution: "@swc/core-win32-x64-msvc@npm:1.5.29"
+"@swc/core-win32-x64-msvc@npm:1.7.26":
+ version: 1.7.26
+ resolution: "@swc/core-win32-x64-msvc@npm:1.7.26"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.3.46":
- version: 1.5.29
- resolution: "@swc/core@npm:1.5.29"
+ version: 1.7.26
+ resolution: "@swc/core@npm:1.7.26"
dependencies:
- "@swc/core-darwin-arm64": 1.5.29
- "@swc/core-darwin-x64": 1.5.29
- "@swc/core-linux-arm-gnueabihf": 1.5.29
- "@swc/core-linux-arm64-gnu": 1.5.29
- "@swc/core-linux-arm64-musl": 1.5.29
- "@swc/core-linux-x64-gnu": 1.5.29
- "@swc/core-linux-x64-musl": 1.5.29
- "@swc/core-win32-arm64-msvc": 1.5.29
- "@swc/core-win32-ia32-msvc": 1.5.29
- "@swc/core-win32-x64-msvc": 1.5.29
+ "@swc/core-darwin-arm64": 1.7.26
+ "@swc/core-darwin-x64": 1.7.26
+ "@swc/core-linux-arm-gnueabihf": 1.7.26
+ "@swc/core-linux-arm64-gnu": 1.7.26
+ "@swc/core-linux-arm64-musl": 1.7.26
+ "@swc/core-linux-x64-gnu": 1.7.26
+ "@swc/core-linux-x64-musl": 1.7.26
+ "@swc/core-win32-arm64-msvc": 1.7.26
+ "@swc/core-win32-ia32-msvc": 1.7.26
+ "@swc/core-win32-x64-msvc": 1.7.26
"@swc/counter": ^0.1.3
- "@swc/types": ^0.1.8
+ "@swc/types": ^0.1.12
peerDependencies:
"@swc/helpers": "*"
dependenciesMeta:
@@ -2808,7 +2827,7 @@ __metadata:
peerDependenciesMeta:
"@swc/helpers":
optional: true
- checksum: 19e3f8525ce4f4d9f6f3f62825b1f13e1e76146390930b6d5e663c0bb2c5e95ef3bf30268110d1444ea92b99dd95bfe5a3c6e2a3c0dd79291505dc7da1ed3dab
+ checksum: 8249f2af001f2b5b312ccace4e3a8575bf286bb0f67f029eb58ef8b144f73e37f766800859161ef87c0993e586055238c000ab17dddf9d3760edcfa63ffd22e6
languageName: node
linkType: hard
@@ -2819,12 +2838,12 @@ __metadata:
languageName: node
linkType: hard
-"@swc/types@npm:^0.1.8":
- version: 0.1.8
- resolution: "@swc/types@npm:0.1.8"
+"@swc/types@npm:^0.1.12":
+ version: 0.1.12
+ resolution: "@swc/types@npm:0.1.12"
dependencies:
"@swc/counter": ^0.1.3
- checksum: e564d0e37b0e28546973c6d50c7a179395912a97168d695cfe9cf1051199c8b828680cdafcb8d43948f76d3703873bafb88dfb5bc2dfe0596b4ad18fcaf90c80
+ checksum: cf7f89e46f859864075d7965582baea9c5f98830f45b1046251568c9bdf1ca484b1bf37f6d3c32b7c82ecf8cd5df89d22f05268c391819c44e49911bb1a8e71a
languageName: node
linkType: hard
@@ -3045,9 +3064,9 @@ __metadata:
linkType: hard
"@types/luxon@npm:^3.0.0":
- version: 3.3.8
- resolution: "@types/luxon@npm:3.3.8"
- checksum: 026711b4aefc01c6e233e359c693b6d4c0873acc3f52a08661ea3751b2cf3e34d1ce1d5b0b99b0e40a059a2a3755acc20498d37db5f9a5a4f0f330cdf72db3db
+ version: 3.4.2
+ resolution: "@types/luxon@npm:3.4.2"
+ checksum: 6f92d5bd02e89f310395753506bcd9cef3a56f5940f7a50db2a2b9822bce753553ac767d143cb5b4f9ed5ddd4a84e64f89ff538082ceb4d18739af7781b56925
languageName: node
linkType: hard
@@ -3553,7 +3572,7 @@ __metadata:
languageName: node
linkType: hard
-"ajv-keywords@npm:^5.0.0":
+"ajv-keywords@npm:^5.1.0":
version: 5.1.0
resolution: "ajv-keywords@npm:5.1.0"
dependencies:
@@ -3576,15 +3595,15 @@ __metadata:
languageName: node
linkType: hard
-"ajv@npm:^8.0.0, ajv@npm:^8.8.0":
- version: 8.11.2
- resolution: "ajv@npm:8.11.2"
+"ajv@npm:^8.0.0, ajv@npm:^8.9.0":
+ version: 8.17.1
+ resolution: "ajv@npm:8.17.1"
dependencies:
- fast-deep-equal: ^3.1.1
+ fast-deep-equal: ^3.1.3
+ fast-uri: ^3.0.1
json-schema-traverse: ^1.0.0
require-from-string: ^2.0.2
- uri-js: ^4.2.2
- checksum: 53435bf79ee7d1eabba8085962dba4c08d08593334b304db7772887f0b7beebc1b3d957432f7437ed4b60e53b5d966a57b439869890209c50fed610459999e3e
+ checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9
languageName: node
linkType: hard
@@ -3765,21 +3784,21 @@ __metadata:
languageName: node
linkType: hard
-"autoprefixer@npm:^10.4.12, autoprefixer@npm:^10.4.14":
- version: 10.4.16
- resolution: "autoprefixer@npm:10.4.16"
+"autoprefixer@npm:^10.4.14, autoprefixer@npm:^10.4.19":
+ version: 10.4.20
+ resolution: "autoprefixer@npm:10.4.20"
dependencies:
- browserslist: ^4.21.10
- caniuse-lite: ^1.0.30001538
- fraction.js: ^4.3.6
+ browserslist: ^4.23.3
+ caniuse-lite: ^1.0.30001646
+ fraction.js: ^4.3.7
normalize-range: ^0.1.2
- picocolors: ^1.0.0
+ picocolors: ^1.0.1
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.1.0
bin:
autoprefixer: bin/autoprefixer
- checksum: 45fad7086495048dacb14bb7b00313e70e135b5d8e8751dcc60548889400763705ab16fc2d99ea628b44c3472698fb0e39598f595ba28409c965ab159035afde
+ checksum: 187cec2ec356631932b212f76dc64f4419c117fdb2fb9eeeb40867d38ba5ca5ba734e6ceefc9e3af4eec8258e60accdf5cbf2b7708798598fde35cdc3de562d6
languageName: node
linkType: hard
@@ -3805,16 +3824,28 @@ __metadata:
languageName: node
linkType: hard
-"babel-plugin-polyfill-corejs2@npm:^0.4.5":
- version: 0.4.5
- resolution: "babel-plugin-polyfill-corejs2@npm:0.4.5"
+"babel-plugin-polyfill-corejs2@npm:^0.4.10, babel-plugin-polyfill-corejs2@npm:^0.4.5":
+ version: 0.4.11
+ resolution: "babel-plugin-polyfill-corejs2@npm:0.4.11"
dependencies:
"@babel/compat-data": ^7.22.6
- "@babel/helper-define-polyfill-provider": ^0.4.2
+ "@babel/helper-define-polyfill-provider": ^0.6.2
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
- checksum: 33a8e06aa54e2858d211c743d179f0487b03222f9ca1bfd7c4865bca243fca942a3358cb75f6bb894ed476cbddede834811fbd6903ff589f055821146f053e1a
+ checksum: f098353ce7c7dde1a1d2710858e01b471e85689110c9e37813e009072347eb8c55d5f84d20d3bf1cab31755f20078ba90f8855fdc4686a9daa826a95ff280bd7
+ languageName: node
+ linkType: hard
+
+"babel-plugin-polyfill-corejs3@npm:^0.10.6":
+ version: 0.10.6
+ resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6"
+ dependencies:
+ "@babel/helper-define-polyfill-provider": ^0.6.2
+ core-js-compat: ^3.38.0
+ peerDependencies:
+ "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
+ checksum: f762f29f7acca576897c63149c850f0a72babd3fb9ea436a2e36f0c339161c4b912a77828541d8188ce8a91e50965c6687120cf36071eabb1b7aa92f279e2164
languageName: node
linkType: hard
@@ -3841,6 +3872,17 @@ __metadata:
languageName: node
linkType: hard
+"babel-plugin-polyfill-regenerator@npm:^0.6.1":
+ version: 0.6.2
+ resolution: "babel-plugin-polyfill-regenerator@npm:0.6.2"
+ dependencies:
+ "@babel/helper-define-polyfill-provider": ^0.6.2
+ peerDependencies:
+ "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
+ checksum: 150233571072b6b3dfe946242da39cba8587b7f908d1c006f7545fc88b0e3c3018d445739beb61e7a75835f0c2751dbe884a94ff9b245ec42369d9267e0e1b3f
+ languageName: node
+ linkType: hard
+
"backstage-microsite@workspace:.":
version: 0.0.0-use.local
resolution: "backstage-microsite@workspace:."
@@ -3907,9 +3949,9 @@ __metadata:
languageName: node
linkType: hard
-"body-parser@npm:1.20.2":
- version: 1.20.2
- resolution: "body-parser@npm:1.20.2"
+"body-parser@npm:1.20.3":
+ version: 1.20.3
+ resolution: "body-parser@npm:1.20.3"
dependencies:
bytes: 3.1.2
content-type: ~1.0.5
@@ -3919,11 +3961,11 @@ __metadata:
http-errors: 2.0.0
iconv-lite: 0.4.24
on-finished: 2.4.1
- qs: 6.11.0
+ qs: 6.13.0
raw-body: 2.5.2
type-is: ~1.6.18
unpipe: 1.0.0
- checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737
+ checksum: 1a35c59a6be8d852b00946330141c4f142c6af0f970faa87f10ad74f1ee7118078056706a05ae3093c54dabca9cd3770fa62a170a85801da1a4324f04381167d
languageName: node
linkType: hard
@@ -3997,7 +4039,7 @@ __metadata:
languageName: node
linkType: hard
-"braces@npm:^3.0.2, braces@npm:~3.0.2":
+"braces@npm:^3.0.3, braces@npm:~3.0.2":
version: 3.0.3
resolution: "braces@npm:3.0.3"
dependencies:
@@ -4006,17 +4048,17 @@ __metadata:
languageName: node
linkType: hard
-"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.22.1, browserslist@npm:^4.22.2":
- version: 4.22.3
- resolution: "browserslist@npm:4.22.3"
+"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3":
+ version: 4.23.3
+ resolution: "browserslist@npm:4.23.3"
dependencies:
- caniuse-lite: ^1.0.30001580
- electron-to-chromium: ^1.4.648
- node-releases: ^2.0.14
- update-browserslist-db: ^1.0.13
+ caniuse-lite: ^1.0.30001646
+ electron-to-chromium: ^1.5.4
+ node-releases: ^2.0.18
+ update-browserslist-db: ^1.1.0
bin:
browserslist: cli.js
- checksum: e62b17348e92143fe58181b02a6a97c4a98bd812d1dc9274673a54f73eec53dbed1c855ebf73e318ee00ee039f23c9a6d0e7629d24f3baef08c7a5b469742d57
+ checksum: 7906064f9970aeb941310b2fcb8b4ace4a1b50aa657c986677c6f1553a8cabcc94ee9c5922f715baffbedaa0e6cf0831b6fed7b059dde6873a4bfadcbe069c7e
languageName: node
linkType: hard
@@ -4089,13 +4131,16 @@ __metadata:
languageName: node
linkType: hard
-"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2":
- version: 1.0.2
- resolution: "call-bind@npm:1.0.2"
+"call-bind@npm:^1.0.2, call-bind@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "call-bind@npm:1.0.7"
dependencies:
- function-bind: ^1.1.1
- get-intrinsic: ^1.0.2
- checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0
+ es-define-property: ^1.0.0
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.4
+ set-function-length: ^1.2.1
+ checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029
languageName: node
linkType: hard
@@ -4142,10 +4187,10 @@ __metadata:
languageName: node
linkType: hard
-"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001580":
- version: 1.0.30001587
- resolution: "caniuse-lite@npm:1.0.30001587"
- checksum: fb50aa9beaaae42f9feae92ce038f6ff71e97510f024ef1bef2666f3adcfd36d6c59e5675442e5fe795575193f71bc826cb7721d4b0f6d763e82d193bea57863
+"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001646":
+ version: 1.0.30001653
+ resolution: "caniuse-lite@npm:1.0.30001653"
+ checksum: 289cf06c26a46f3e6460ccd5feffa788ab0ab35d306898c48120c65cfb11959bfa560e9f739393769b4fd01150c69b0747ad3ad5ec3abf3dfafd66df3c59254e
languageName: node
linkType: hard
@@ -4233,7 +4278,7 @@ __metadata:
languageName: node
linkType: hard
-"cheerio@npm:^1.0.0-rc.12":
+"cheerio@npm:1.0.0-rc.12":
version: 1.0.0-rc.12
resolution: "cheerio@npm:1.0.0-rc.12"
dependencies:
@@ -4248,7 +4293,7 @@ __metadata:
languageName: node
linkType: hard
-"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.2, chokidar@npm:^3.5.3":
+"chokidar@npm:^3.4.2, chokidar@npm:^3.5.3":
version: 3.5.3
resolution: "chokidar@npm:3.5.3"
dependencies:
@@ -4267,6 +4312,15 @@ __metadata:
languageName: node
linkType: hard
+"chokidar@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "chokidar@npm:4.0.0"
+ dependencies:
+ readdirp: ^4.0.1
+ checksum: f528f5cf22135fcdbe2ee44a89de3ebff4f94db7e101c55e5d92169bd4b52ce5b97d3ee0b74fe4fb57a065d2f2efce82f8bc687751e56b0a1870e9fe201b1c99
+ languageName: node
+ linkType: hard
+
"chownr@npm:^2.0.0":
version: 2.0.0
resolution: "chownr@npm:2.0.0"
@@ -4390,7 +4444,7 @@ __metadata:
languageName: node
linkType: hard
-"colord@npm:^2.9.1":
+"colord@npm:^2.9.3":
version: 2.9.3
resolution: "colord@npm:2.9.3"
checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650
@@ -4602,12 +4656,12 @@ __metadata:
languageName: node
linkType: hard
-"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.32.2":
- version: 3.33.0
- resolution: "core-js-compat@npm:3.33.0"
+"core-js-compat@npm:^3.32.2, core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0":
+ version: 3.38.1
+ resolution: "core-js-compat@npm:3.38.1"
dependencies:
- browserslist: ^4.22.1
- checksum: 83ae54008c09b8e0ae3c59457039866c342c7e28b0d30eebb638a5b51c01432e63fe97695c90645cbc6a8b073a4f9a8b0e75f0818bbf8b4b054e01f4c17d3181
+ browserslist: ^4.23.3
+ checksum: a0a5673bcd59f588f0cd0b59cdacd4712b82909738a87406d334dd412eb3d273ae72b275bdd8e8fef63fca9ef12b42ed651be139c7c44c8a1acb423c8906992e
languageName: node
linkType: hard
@@ -4645,20 +4699,7 @@ __metadata:
languageName: node
linkType: hard
-"cosmiconfig@npm:^7.0.1":
- version: 7.1.0
- resolution: "cosmiconfig@npm:7.1.0"
- dependencies:
- "@types/parse-json": ^4.0.0
- import-fresh: ^3.2.1
- parse-json: ^5.0.0
- path-type: ^4.0.0
- yaml: ^1.10.0
- checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f
- languageName: node
- linkType: hard
-
-"cosmiconfig@npm:^8.2.0":
+"cosmiconfig@npm:^8.1.3, cosmiconfig@npm:^8.2.0":
version: 8.3.6
resolution: "cosmiconfig@npm:8.3.6"
dependencies:
@@ -4695,12 +4736,12 @@ __metadata:
languageName: node
linkType: hard
-"css-declaration-sorter@npm:^6.3.1":
- version: 6.3.1
- resolution: "css-declaration-sorter@npm:6.3.1"
+"css-declaration-sorter@npm:^7.2.0":
+ version: 7.2.0
+ resolution: "css-declaration-sorter@npm:7.2.0"
peerDependencies:
postcss: ^8.0.9
- checksum: ff0d9989ee21ec4c42430b9bb86c43f973ed5024d68f30edc1e3fb07a22828ce3c3e5b922019f2ccbff606722e43c407c5c76e3cddac523ac4afcb31e4b2601c
+ checksum: 69b2f63a1c7c593123fabcbb353618ed01eb75f6404da9321328fbb30d603d89c47195129fadf1dc316e1406a0881400b324c2bded9438c47196e1c96ec726dd
languageName: node
linkType: hard
@@ -4722,16 +4763,16 @@ __metadata:
languageName: node
linkType: hard
-"css-minimizer-webpack-plugin@npm:^4.2.2":
- version: 4.2.2
- resolution: "css-minimizer-webpack-plugin@npm:4.2.2"
+"css-minimizer-webpack-plugin@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "css-minimizer-webpack-plugin@npm:5.0.1"
dependencies:
- cssnano: ^5.1.8
- jest-worker: ^29.1.2
- postcss: ^8.4.17
- schema-utils: ^4.0.0
- serialize-javascript: ^6.0.0
- source-map: ^0.6.1
+ "@jridgewell/trace-mapping": ^0.3.18
+ cssnano: ^6.0.1
+ jest-worker: ^29.4.3
+ postcss: ^8.4.24
+ schema-utils: ^4.0.1
+ serialize-javascript: ^6.0.1
peerDependencies:
webpack: ^5.0.0
peerDependenciesMeta:
@@ -4747,7 +4788,7 @@ __metadata:
optional: true
lightningcss:
optional: true
- checksum: 5417e76a445f35832aa96807c835b8e92834a6cd285b1b788dfe3ca0fa90fec7eb2dd6efa9d3649f9d8244b99b7da2d065951603b94918e8f6a366a5049cacdd
+ checksum: 10055802c61d1ae72584eac03b6bd221ecbefde11d337be44a5459d8de075b38f91b80949f95cd0c3a10295615ee013f82130bfac5fe9b5b3e8e75531f232680
languageName: node
linkType: hard
@@ -4777,13 +4818,23 @@ __metadata:
languageName: node
linkType: hard
-"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3":
- version: 1.1.3
- resolution: "css-tree@npm:1.1.3"
+"css-tree@npm:^2.3.1":
+ version: 2.3.1
+ resolution: "css-tree@npm:2.3.1"
dependencies:
- mdn-data: 2.0.14
- source-map: ^0.6.1
- checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f
+ mdn-data: 2.0.30
+ source-map-js: ^1.0.1
+ checksum: 493cc24b5c22b05ee5314b8a0d72d8a5869491c1458017ae5ed75aeb6c3596637dbe1b11dac2548974624adec9f7a1f3a6cf40593dc1f9185eb0e8279543fbc0
+ languageName: node
+ linkType: hard
+
+"css-tree@npm:~2.2.0":
+ version: 2.2.1
+ resolution: "css-tree@npm:2.2.1"
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: ^1.0.1
+ checksum: b94aa8cc2f09e6f66c91548411fcf74badcbad3e150345074715012d16333ce573596ff5dfca03c2a87edf1924716db765120f94247e919d72753628ba3aba27
languageName: node
linkType: hard
@@ -4803,89 +4854,90 @@ __metadata:
languageName: node
linkType: hard
-"cssnano-preset-advanced@npm:^5.3.10":
- version: 5.3.10
- resolution: "cssnano-preset-advanced@npm:5.3.10"
+"cssnano-preset-advanced@npm:^6.1.2":
+ version: 6.1.2
+ resolution: "cssnano-preset-advanced@npm:6.1.2"
dependencies:
- autoprefixer: ^10.4.12
- cssnano-preset-default: ^5.2.14
- postcss-discard-unused: ^5.1.0
- postcss-merge-idents: ^5.1.1
- postcss-reduce-idents: ^5.2.0
- postcss-zindex: ^5.1.0
+ autoprefixer: ^10.4.19
+ browserslist: ^4.23.0
+ cssnano-preset-default: ^6.1.2
+ postcss-discard-unused: ^6.0.5
+ postcss-merge-idents: ^6.0.3
+ postcss-reduce-idents: ^6.0.3
+ postcss-zindex: ^6.0.2
peerDependencies:
- postcss: ^8.2.15
- checksum: d21cb382aea2f35c9eaa50686280bbd5158260edf73020731364b03bae0d887292da51ed0b20b369f51d2573ee8c02c695f604647b839a9ca746be8a44c3bb5b
+ postcss: ^8.4.31
+ checksum: cf70e27915947412730abb3075587efb66bcea58d7f1b906a7225bb4a40c9ca40150251a2ac33363d4f55bbdeb9ba000c242fa6244ee36cba2477ac07fbbe791
languageName: node
linkType: hard
-"cssnano-preset-default@npm:^5.2.14":
- version: 5.2.14
- resolution: "cssnano-preset-default@npm:5.2.14"
+"cssnano-preset-default@npm:^6.1.2":
+ version: 6.1.2
+ resolution: "cssnano-preset-default@npm:6.1.2"
dependencies:
- css-declaration-sorter: ^6.3.1
- cssnano-utils: ^3.1.0
- postcss-calc: ^8.2.3
- postcss-colormin: ^5.3.1
- postcss-convert-values: ^5.1.3
- postcss-discard-comments: ^5.1.2
- postcss-discard-duplicates: ^5.1.0
- postcss-discard-empty: ^5.1.1
- postcss-discard-overridden: ^5.1.0
- postcss-merge-longhand: ^5.1.7
- postcss-merge-rules: ^5.1.4
- postcss-minify-font-values: ^5.1.0
- postcss-minify-gradients: ^5.1.1
- postcss-minify-params: ^5.1.4
- postcss-minify-selectors: ^5.2.1
- postcss-normalize-charset: ^5.1.0
- postcss-normalize-display-values: ^5.1.0
- postcss-normalize-positions: ^5.1.1
- postcss-normalize-repeat-style: ^5.1.1
- postcss-normalize-string: ^5.1.0
- postcss-normalize-timing-functions: ^5.1.0
- postcss-normalize-unicode: ^5.1.1
- postcss-normalize-url: ^5.1.0
- postcss-normalize-whitespace: ^5.1.1
- postcss-ordered-values: ^5.1.3
- postcss-reduce-initial: ^5.1.2
- postcss-reduce-transforms: ^5.1.0
- postcss-svgo: ^5.1.0
- postcss-unique-selectors: ^5.1.1
+ browserslist: ^4.23.0
+ css-declaration-sorter: ^7.2.0
+ cssnano-utils: ^4.0.2
+ postcss-calc: ^9.0.1
+ postcss-colormin: ^6.1.0
+ postcss-convert-values: ^6.1.0
+ postcss-discard-comments: ^6.0.2
+ postcss-discard-duplicates: ^6.0.3
+ postcss-discard-empty: ^6.0.3
+ postcss-discard-overridden: ^6.0.2
+ postcss-merge-longhand: ^6.0.5
+ postcss-merge-rules: ^6.1.1
+ postcss-minify-font-values: ^6.1.0
+ postcss-minify-gradients: ^6.0.3
+ postcss-minify-params: ^6.1.0
+ postcss-minify-selectors: ^6.0.4
+ postcss-normalize-charset: ^6.0.2
+ postcss-normalize-display-values: ^6.0.2
+ postcss-normalize-positions: ^6.0.2
+ postcss-normalize-repeat-style: ^6.0.2
+ postcss-normalize-string: ^6.0.2
+ postcss-normalize-timing-functions: ^6.0.2
+ postcss-normalize-unicode: ^6.1.0
+ postcss-normalize-url: ^6.0.2
+ postcss-normalize-whitespace: ^6.0.2
+ postcss-ordered-values: ^6.0.2
+ postcss-reduce-initial: ^6.1.0
+ postcss-reduce-transforms: ^6.0.2
+ postcss-svgo: ^6.0.3
+ postcss-unique-selectors: ^6.0.4
peerDependencies:
- postcss: ^8.2.15
- checksum: d3bbbe3d50c6174afb28d0bdb65b511fdab33952ec84810aef58b87189f3891c34aaa8b6a6101acd5314f8acded839b43513e39a75f91a698ddc985a1b1d9e95
+ postcss: ^8.4.31
+ checksum: 51d93e52df7141143947dc4695b5087c04b41ea153e4f4c0282ac012b62c7457c6aca244f604ae94fa3b4840903a30a1e7df38f8610e0b304d05e3065375ee56
languageName: node
linkType: hard
-"cssnano-utils@npm:^3.1.0":
- version: 3.1.0
- resolution: "cssnano-utils@npm:3.1.0"
+"cssnano-utils@npm:^4.0.2":
+ version: 4.0.2
+ resolution: "cssnano-utils@npm:4.0.2"
peerDependencies:
- postcss: ^8.2.15
- checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2
+ postcss: ^8.4.31
+ checksum: f04c6854e75d847c7a43aff835e003d5bc7387ddfc476f0ad3a2d63663d0cec41047d46604c1717bf6b5a8e24e54bb519e465ff78d62c7e073c7cbe2279bebaf
languageName: node
linkType: hard
-"cssnano@npm:^5.1.15, cssnano@npm:^5.1.8":
- version: 5.1.15
- resolution: "cssnano@npm:5.1.15"
+"cssnano@npm:^6.0.1, cssnano@npm:^6.1.2":
+ version: 6.1.2
+ resolution: "cssnano@npm:6.1.2"
dependencies:
- cssnano-preset-default: ^5.2.14
- lilconfig: ^2.0.3
- yaml: ^1.10.2
+ cssnano-preset-default: ^6.1.2
+ lilconfig: ^3.1.1
peerDependencies:
- postcss: ^8.2.15
- checksum: ca9e1922178617c66c2f1548824b2c7af2ecf69cc3a187fc96bf8d29251c2e84d9e4966c69cf64a2a6a057a37dff7d6d057bc8a2a0957e6ea382e452ae9d0bbb
+ postcss: ^8.4.31
+ checksum: 65aad92c5ee0089ffd4cd933c18c65edbf7634f7c3cd833a499dc948aa7e4168be22130dfe83bde07fcdc87f7c45a02d09040b7f439498208bc90b8d5a9abcc8
languageName: node
linkType: hard
-"csso@npm:^4.2.0":
- version: 4.2.0
- resolution: "csso@npm:4.2.0"
+"csso@npm:^5.0.5":
+ version: 5.0.5
+ resolution: "csso@npm:5.0.5"
dependencies:
- css-tree: ^1.1.2
- checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998
+ css-tree: ~2.2.0
+ checksum: 0ad858d36bf5012ed243e9ec69962a867509061986d2ee07cc040a4b26e4d062c00d4c07e5ba8d430706ceb02dd87edd30a52b5937fd45b1b6f2119c4993d59a
languageName: node
linkType: hard
@@ -4942,10 +4994,10 @@ __metadata:
languageName: node
linkType: hard
-"deepmerge@npm:^4.2.2":
- version: 4.2.2
- resolution: "deepmerge@npm:4.2.2"
- checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b
+"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1":
+ version: 4.3.1
+ resolution: "deepmerge@npm:4.3.1"
+ checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052
languageName: node
linkType: hard
@@ -4965,6 +5017,17 @@ __metadata:
languageName: node
linkType: hard
+"define-data-property@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "define-data-property@npm:1.1.4"
+ dependencies:
+ es-define-property: ^1.0.0
+ es-errors: ^1.3.0
+ gopd: ^1.0.1
+ checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b
+ languageName: node
+ linkType: hard
+
"define-lazy-prop@npm:^2.0.0":
version: 2.0.0
resolution: "define-lazy-prop@npm:2.0.0"
@@ -5239,10 +5302,10 @@ __metadata:
languageName: node
linkType: hard
-"electron-to-chromium@npm:^1.4.648":
- version: 1.4.665
- resolution: "electron-to-chromium@npm:1.4.665"
- checksum: 6c863300909a2712a79bd8a00ff2d3747fb72edf3dfda892449aabd42a12448e8e215e318d628421bbdfc7e4e3bc1fb38a81bbd530a71036bb86a75868e9eb8a
+"electron-to-chromium@npm:^1.5.4":
+ version: 1.5.13
+ resolution: "electron-to-chromium@npm:1.5.13"
+ checksum: f18ac84dd3bf9a200654a6a9292b9ec4bced0cf9bd26cec9941b775f4470c581c9d043e70b37a124d9752dcc0f47fc96613d52b2defd8e59632852730cb418b9
languageName: node
linkType: hard
@@ -5288,6 +5351,13 @@ __metadata:
languageName: node
linkType: hard
+"encodeurl@npm:~2.0.0":
+ version: 2.0.0
+ resolution: "encodeurl@npm:2.0.0"
+ checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe
+ languageName: node
+ linkType: hard
+
"encoding@npm:^0.1.13":
version: 0.1.13
resolution: "encoding@npm:0.1.13"
@@ -5344,6 +5414,22 @@ __metadata:
languageName: node
linkType: hard
+"es-define-property@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "es-define-property@npm:1.0.0"
+ dependencies:
+ get-intrinsic: ^1.2.4
+ checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6
+ languageName: node
+ linkType: hard
+
+"es-errors@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "es-errors@npm:1.3.0"
+ checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5
+ languageName: node
+ linkType: hard
+
"es-module-lexer@npm:^1.2.1":
version: 1.2.1
resolution: "es-module-lexer@npm:1.2.1"
@@ -5351,10 +5437,10 @@ __metadata:
languageName: node
linkType: hard
-"escalade@npm:^3.1.1":
- version: 3.1.1
- resolution: "escalade@npm:3.1.1"
- checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133
+"escalade@npm:^3.1.1, escalade@npm:^3.1.2":
+ version: 3.1.2
+ resolution: "escalade@npm:3.1.2"
+ checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02
languageName: node
linkType: hard
@@ -5567,41 +5653,41 @@ __metadata:
linkType: hard
"express@npm:^4.17.3":
- version: 4.19.2
- resolution: "express@npm:4.19.2"
+ version: 4.21.0
+ resolution: "express@npm:4.21.0"
dependencies:
accepts: ~1.3.8
array-flatten: 1.1.1
- body-parser: 1.20.2
+ body-parser: 1.20.3
content-disposition: 0.5.4
content-type: ~1.0.4
cookie: 0.6.0
cookie-signature: 1.0.6
debug: 2.6.9
depd: 2.0.0
- encodeurl: ~1.0.2
+ encodeurl: ~2.0.0
escape-html: ~1.0.3
etag: ~1.8.1
- finalhandler: 1.2.0
+ finalhandler: 1.3.1
fresh: 0.5.2
http-errors: 2.0.0
- merge-descriptors: 1.0.1
+ merge-descriptors: 1.0.3
methods: ~1.1.2
on-finished: 2.4.1
parseurl: ~1.3.3
- path-to-regexp: 0.1.7
+ path-to-regexp: 0.1.10
proxy-addr: ~2.0.7
- qs: 6.11.0
+ qs: 6.13.0
range-parser: ~1.2.1
safe-buffer: 5.2.1
- send: 0.18.0
- serve-static: 1.15.0
+ send: 0.19.0
+ serve-static: 1.16.2
setprototypeof: 1.2.0
statuses: 2.0.1
type-is: ~1.6.18
utils-merge: 1.0.1
vary: ~1.1.2
- checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5
+ checksum: 1c5212993f665809c249bf00ab550b989d1365a5b9171cdfaa26d93ee2ef10cd8add520861ec8d5da74b3194d8374e1d9d53e85ef69b89fd9c4196b87045a5d4
languageName: node
linkType: hard
@@ -5648,6 +5734,13 @@ __metadata:
languageName: node
linkType: hard
+"fast-uri@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "fast-uri@npm:3.0.1"
+ checksum: 106143ff83705995225dcc559411288f3337e732bb2e264e79788f1914b6bd8f8bc3683102de60b15ba00e6ebb443633cabac77d4ebc5cb228c47cf955e199ff
+ languageName: node
+ linkType: hard
+
"fast-url-parser@npm:1.1.3":
version: 1.1.3
resolution: "fast-url-parser@npm:1.1.3"
@@ -5721,18 +5814,18 @@ __metadata:
languageName: node
linkType: hard
-"finalhandler@npm:1.2.0":
- version: 1.2.0
- resolution: "finalhandler@npm:1.2.0"
+"finalhandler@npm:1.3.1":
+ version: 1.3.1
+ resolution: "finalhandler@npm:1.3.1"
dependencies:
debug: 2.6.9
- encodeurl: ~1.0.2
+ encodeurl: ~2.0.0
escape-html: ~1.0.3
on-finished: 2.4.1
parseurl: ~1.3.3
statuses: 2.0.1
unpipe: ~1.0.0
- checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716
+ checksum: a8c58cd97c9cd47679a870f6833a7b417043f5a288cd6af6d0f49b476c874a506100303a128b6d3b654c3d74fa4ff2ffed68a48a27e8630cda5c918f2977dcf4
languageName: node
linkType: hard
@@ -5837,10 +5930,10 @@ __metadata:
languageName: node
linkType: hard
-"fraction.js@npm:^4.3.6":
- version: 4.3.6
- resolution: "fraction.js@npm:4.3.6"
- checksum: e96ae77e64ebfd442d3a5a01a3f0637b0663fc2440bcf2841b3ad9341ba24c81fb2e3e7142e43ef7d088558c6b3f8609df135b201adc7a1c674aea6a71384162
+"fraction.js@npm:^4.3.7":
+ version: 4.3.7
+ resolution: "fraction.js@npm:4.3.7"
+ checksum: e1553ae3f08e3ba0e8c06e43a3ab20b319966dfb7ddb96fd9b5d0ee11a66571af7f993229c88ebbb0d4a816eb813a24ed48207b140d442a8f76f33763b8d1f3f
languageName: node
linkType: hard
@@ -5851,14 +5944,14 @@ __metadata:
languageName: node
linkType: hard
-"fs-extra@npm:^11.1.1":
- version: 11.1.1
- resolution: "fs-extra@npm:11.1.1"
+"fs-extra@npm:^11.1.1, fs-extra@npm:^11.2.0":
+ version: 11.2.0
+ resolution: "fs-extra@npm:11.2.0"
dependencies:
graceful-fs: ^4.2.0
jsonfile: ^6.0.1
universalify: ^2.0.0
- checksum: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd
+ checksum: b12e42fa40ba47104202f57b8480dd098aa931c2724565e5e70779ab87605665594e76ee5fb00545f772ab9ace167fe06d2ab009c416dc8c842c5ae6df7aa7e8
languageName: node
linkType: hard
@@ -5916,10 +6009,10 @@ __metadata:
languageName: node
linkType: hard
-"function-bind@npm:^1.1.1":
- version: 1.1.1
- resolution: "function-bind@npm:1.1.1"
- checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a
+"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "function-bind@npm:1.1.2"
+ checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1
languageName: node
linkType: hard
@@ -5946,14 +6039,16 @@ __metadata:
languageName: node
linkType: hard
-"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1":
- version: 1.1.3
- resolution: "get-intrinsic@npm:1.1.3"
+"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4":
+ version: 1.2.4
+ resolution: "get-intrinsic@npm:1.2.4"
dependencies:
- function-bind: ^1.1.1
- has: ^1.0.3
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ has-proto: ^1.0.1
has-symbols: ^1.0.3
- checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a
+ hasown: ^2.0.0
+ checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951
languageName: node
linkType: hard
@@ -6093,6 +6188,15 @@ __metadata:
languageName: node
linkType: hard
+"gopd@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "gopd@npm:1.0.1"
+ dependencies:
+ get-intrinsic: ^1.1.3
+ checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6
+ languageName: node
+ linkType: hard
+
"got@npm:^12.1.0":
version: 12.6.0
resolution: "got@npm:12.6.0"
@@ -6161,12 +6265,19 @@ __metadata:
languageName: node
linkType: hard
-"has-property-descriptors@npm:^1.0.0":
- version: 1.0.0
- resolution: "has-property-descriptors@npm:1.0.0"
+"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "has-property-descriptors@npm:1.0.2"
dependencies:
- get-intrinsic: ^1.1.1
- checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb
+ es-define-property: ^1.0.0
+ checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3
+ languageName: node
+ linkType: hard
+
+"has-proto@npm:^1.0.1":
+ version: 1.0.3
+ resolution: "has-proto@npm:1.0.3"
+ checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4
languageName: node
linkType: hard
@@ -6200,6 +6311,15 @@ __metadata:
languageName: node
linkType: hard
+"hasown@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "hasown@npm:2.0.2"
+ dependencies:
+ function-bind: ^1.1.2
+ checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db
+ languageName: node
+ linkType: hard
+
"hast-util-from-parse5@npm:^8.0.0":
version: 8.0.1
resolution: "hast-util-from-parse5@npm:8.0.1"
@@ -6649,7 +6769,7 @@ __metadata:
languageName: node
linkType: hard
-"import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0":
+"import-fresh@npm:^3.1.0, import-fresh@npm:^3.3.0":
version: 3.3.0
resolution: "import-fresh@npm:3.3.0"
dependencies:
@@ -6687,10 +6807,10 @@ __metadata:
languageName: node
linkType: hard
-"infima@npm:0.2.0-alpha.43":
- version: 0.2.0-alpha.43
- resolution: "infima@npm:0.2.0-alpha.43"
- checksum: fc5f79240e940eddd750439511767092ccb4051e5e91d253ec7630a9e7ce691812da3aa0f05e46b4c0a95dbfadeae5714fd0073f8d2df12e5aaff0697a1d6aa2
+"infima@npm:0.2.0-alpha.44":
+ version: 0.2.0-alpha.44
+ resolution: "infima@npm:0.2.0-alpha.44"
+ checksum: e9871f4056c0c8b311fcd32e2864d23a8f6807af5ff32d3c4d8271ad9971b5a7ea5016787a6b215893bb3e9f5f14326816bc05151d576dd375b0d79279cdfa8b
languageName: node
linkType: hard
@@ -7066,17 +7186,17 @@ __metadata:
languageName: node
linkType: hard
-"jest-util@npm:^29.3.1":
- version: 29.3.1
- resolution: "jest-util@npm:29.3.1"
+"jest-util@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "jest-util@npm:29.7.0"
dependencies:
- "@jest/types": ^29.3.1
+ "@jest/types": ^29.6.3
"@types/node": "*"
chalk: ^4.0.0
ci-info: ^3.2.0
graceful-fs: ^4.2.9
picomatch: ^2.2.3
- checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413
+ checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca
languageName: node
linkType: hard
@@ -7091,15 +7211,15 @@ __metadata:
languageName: node
linkType: hard
-"jest-worker@npm:^29.1.2":
- version: 29.3.1
- resolution: "jest-worker@npm:29.3.1"
+"jest-worker@npm:^29.4.3":
+ version: 29.7.0
+ resolution: "jest-worker@npm:29.7.0"
dependencies:
"@types/node": "*"
- jest-util: ^29.3.1
+ jest-util: ^29.7.0
merge-stream: ^2.0.0
supports-color: ^8.0.0
- checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3
+ checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13
languageName: node
linkType: hard
@@ -7279,10 +7399,10 @@ __metadata:
languageName: node
linkType: hard
-"lilconfig@npm:^2.0.3":
- version: 2.0.6
- resolution: "lilconfig@npm:2.0.6"
- checksum: 40a3cd72f103b1be5975f2ac1850810b61d4053e20ab09be8d3aeddfe042187e1ba70b4651a7e70f95efa1642e7dc8b2ae395b317b7d7753b241b43cef7c0f7d
+"lilconfig@npm:^3.1.1":
+ version: 3.1.2
+ resolution: "lilconfig@npm:3.1.2"
+ checksum: 4e8b83ddd1d0ad722600994e6ba5d858ddca14f0587aa6b9c8185e17548149b5e13d4d583d811e9e9323157fa8c6a527e827739794c7502b59243c58e210b8c3
languageName: node
linkType: hard
@@ -7469,9 +7589,9 @@ __metadata:
linkType: hard
"luxon@npm:^3.0.0":
- version: 3.4.4
- resolution: "luxon@npm:3.4.4"
- checksum: 36c1f99c4796ee4bfddf7dc94fa87815add43ebc44c8934c924946260a58512f0fd2743a629302885df7f35ccbd2d13f178c15df046d0e3b6eb71db178f1c60c
+ version: 3.5.0
+ resolution: "luxon@npm:3.5.0"
+ checksum: f290fe5788c8e51e748744f05092160d4be12150dca70f9fadc0d233e53d60ce86acd82e7d909a114730a136a77e56f0d3ebac6141bbb82fd310969a4704825b
languageName: node
linkType: hard
@@ -7766,10 +7886,17 @@ __metadata:
languageName: node
linkType: hard
-"mdn-data@npm:2.0.14":
- version: 2.0.14
- resolution: "mdn-data@npm:2.0.14"
- checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16
+"mdn-data@npm:2.0.28":
+ version: 2.0.28
+ resolution: "mdn-data@npm:2.0.28"
+ checksum: f51d587a6ebe8e426c3376c74ea6df3e19ec8241ed8e2466c9c8a3904d5d04397199ea4f15b8d34d14524b5de926d8724ae85207984be47e165817c26e49e0aa
+ languageName: node
+ linkType: hard
+
+"mdn-data@npm:2.0.30":
+ version: 2.0.30
+ resolution: "mdn-data@npm:2.0.30"
+ checksum: d6ac5ac7439a1607df44b22738ecf83f48e66a0874e4482d6424a61c52da5cde5750f1d1229b6f5fa1b80a492be89465390da685b11f97d62b8adcc6e88189aa
languageName: node
linkType: hard
@@ -7789,10 +7916,10 @@ __metadata:
languageName: node
linkType: hard
-"merge-descriptors@npm:1.0.1":
- version: 1.0.1
- resolution: "merge-descriptors@npm:1.0.1"
- checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26
+"merge-descriptors@npm:1.0.3":
+ version: 1.0.3
+ resolution: "merge-descriptors@npm:1.0.3"
+ checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1
languageName: node
linkType: hard
@@ -8316,12 +8443,12 @@ __metadata:
linkType: hard
"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5":
- version: 4.0.5
- resolution: "micromatch@npm:4.0.5"
+ version: 4.0.8
+ resolution: "micromatch@npm:4.0.8"
dependencies:
- braces: ^3.0.2
+ braces: ^3.0.3
picomatch: ^2.3.1
- checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc
+ checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966
languageName: node
linkType: hard
@@ -8556,12 +8683,12 @@ __metadata:
languageName: node
linkType: hard
-"nanoid@npm:^3.3.6":
- version: 3.3.6
- resolution: "nanoid@npm:3.3.6"
+"nanoid@npm:^3.3.7":
+ version: 3.3.7
+ resolution: "nanoid@npm:3.3.7"
bin:
nanoid: bin/nanoid.cjs
- checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3
+ checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2
languageName: node
linkType: hard
@@ -8628,10 +8755,10 @@ __metadata:
languageName: node
linkType: hard
-"node-releases@npm:^2.0.14":
- version: 2.0.14
- resolution: "node-releases@npm:2.0.14"
- checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41
+"node-releases@npm:^2.0.18":
+ version: 2.0.18
+ resolution: "node-releases@npm:2.0.18"
+ checksum: ef55a3d853e1269a6d6279b7692cd6ff3e40bc74947945101138745bfdc9a5edabfe72cb19a31a8e45752e1910c4c65c77d931866af6357f242b172b7283f5b3
languageName: node
linkType: hard
@@ -8660,13 +8787,6 @@ __metadata:
languageName: node
linkType: hard
-"normalize-url@npm:^6.0.1":
- version: 6.1.0
- resolution: "normalize-url@npm:6.1.0"
- checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50
- languageName: node
- linkType: hard
-
"normalize-url@npm:^8.0.0":
version: 8.0.0
resolution: "normalize-url@npm:8.0.0"
@@ -8718,10 +8838,10 @@ __metadata:
languageName: node
linkType: hard
-"object-inspect@npm:^1.9.0":
- version: 1.12.2
- resolution: "object-inspect@npm:1.12.2"
- checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2
+"object-inspect@npm:^1.13.1":
+ version: 1.13.2
+ resolution: "object-inspect@npm:1.13.2"
+ checksum: 9f850b3c045db60e0e97746e809ee4090d6ce62195af17dd1e9438ac761394a7d8ec4f7906559aea5424eaf61e35d3e53feded2ccd5f62fcc7d9670d3c8eb353
languageName: node
linkType: hard
@@ -9043,10 +9163,10 @@ __metadata:
languageName: node
linkType: hard
-"path-to-regexp@npm:0.1.7":
- version: 0.1.7
- resolution: "path-to-regexp@npm:0.1.7"
- checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce
+"path-to-regexp@npm:0.1.10":
+ version: 0.1.10
+ resolution: "path-to-regexp@npm:0.1.10"
+ checksum: ab7a3b7a0b914476d44030340b0a65d69851af2a0f33427df1476100ccb87d409c39e2182837a96b98fb38c4ef2ba6b87bdad62bb70a2c153876b8061760583c
languageName: node
linkType: hard
@@ -9084,10 +9204,10 @@ __metadata:
languageName: node
linkType: hard
-"picocolors@npm:^1.0.0":
- version: 1.0.0
- resolution: "picocolors@npm:1.0.0"
- checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981
+"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "picocolors@npm:1.0.1"
+ checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5
languageName: node
linkType: hard
@@ -9116,88 +9236,88 @@ __metadata:
languageName: node
linkType: hard
-"postcss-calc@npm:^8.2.3":
- version: 8.2.4
- resolution: "postcss-calc@npm:8.2.4"
+"postcss-calc@npm:^9.0.1":
+ version: 9.0.1
+ resolution: "postcss-calc@npm:9.0.1"
dependencies:
- postcss-selector-parser: ^6.0.9
+ postcss-selector-parser: ^6.0.11
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.2
- checksum: 314b4cebb0c4ed0cf8356b4bce71eca78f5a7842e6a3942a3bba49db168d5296b2bd93c3f735ae1c616f2651d94719ade33becc03c73d2d79c7394fb7f73eabb
+ checksum: 7327ed83bfec544ab8b3e38353baa72ff6d04378b856db4ad82dbd68ce0b73668867ef182b5d4025f9dd9aa9c64aacc50cd1bd9db8d8b51ccc4cb97866b9d72b
languageName: node
linkType: hard
-"postcss-colormin@npm:^5.3.1":
- version: 5.3.1
- resolution: "postcss-colormin@npm:5.3.1"
+"postcss-colormin@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "postcss-colormin@npm:6.1.0"
dependencies:
- browserslist: ^4.21.4
+ browserslist: ^4.23.0
caniuse-api: ^3.0.0
- colord: ^2.9.1
+ colord: ^2.9.3
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: e5778baab30877cd1f51e7dc9d2242a162aeca6360a52956acd7f668c5bc235c2ccb7e4df0370a804d65ebe00c5642366f061db53aa823f9ed99972cebd16024
+ postcss: ^8.4.31
+ checksum: 55a1525de345d953bc7f32ecaa5ee6275ef0277c27d1f97ff06a1bd1a2fedf7f254e36dc1500621f1df20c25a6d2485a74a0b527d8ff74eb90726c76efe2ac8e
languageName: node
linkType: hard
-"postcss-convert-values@npm:^5.1.3":
- version: 5.1.3
- resolution: "postcss-convert-values@npm:5.1.3"
+"postcss-convert-values@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "postcss-convert-values@npm:6.1.0"
dependencies:
- browserslist: ^4.21.4
+ browserslist: ^4.23.0
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: df48cdaffabf9737f9cfdc58a3dc2841cf282506a7a944f6c70236cff295d3a69f63de6e0935eeb8a9d3f504324e5b4e240abc29e21df9e35a02585d3060aeb5
+ postcss: ^8.4.31
+ checksum: 43e9f66af9bdec3c76695f9dde36885abc01f662c370c490b45d895459caab2c5792f906f3ddad107129133e41485a65634da7f699eef916a636e47f6a37a299
languageName: node
linkType: hard
-"postcss-discard-comments@npm:^5.1.2":
- version: 5.1.2
- resolution: "postcss-discard-comments@npm:5.1.2"
+"postcss-discard-comments@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-discard-comments@npm:6.0.2"
peerDependencies:
- postcss: ^8.2.15
- checksum: abfd064ebc27aeaf5037643dd51ffaff74d1fa4db56b0523d073ace4248cbb64ffd9787bd6924b0983a9d0bd0e9bf9f10d73b120e50391dc236e0d26c812fa2a
+ postcss: ^8.4.31
+ checksum: c1731ccc8d1e3d910412a61395988d3033365e6532d9e5432ad7c74add8c9dcb0af0c03d4e901bf0d2b59ea4e7297a0c77a547ff2ed1b1cc065559cc0de43b4e
languageName: node
linkType: hard
-"postcss-discard-duplicates@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-discard-duplicates@npm:5.1.0"
+"postcss-discard-duplicates@npm:^6.0.3":
+ version: 6.0.3
+ resolution: "postcss-discard-duplicates@npm:6.0.3"
peerDependencies:
- postcss: ^8.2.15
- checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35
+ postcss: ^8.4.31
+ checksum: 308e3fb84c35e4703532de1efa5d6e8444cc5f167d0e40f42d7ea3fa3a37d9d636fd10729847d078e0c303eee16f8548d14b6f88a3fce4e38a2b452648465175
languageName: node
linkType: hard
-"postcss-discard-empty@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-discard-empty@npm:5.1.1"
+"postcss-discard-empty@npm:^6.0.3":
+ version: 6.0.3
+ resolution: "postcss-discard-empty@npm:6.0.3"
peerDependencies:
- postcss: ^8.2.15
- checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4
+ postcss: ^8.4.31
+ checksum: bad305572faa066026a295faab37e718cee096589ab827b19c990c55620b2b2a1ce9f0145212651737a66086db01b2676c1927bbb8408c5f9cb42686d5959f00
languageName: node
linkType: hard
-"postcss-discard-overridden@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-discard-overridden@npm:5.1.0"
+"postcss-discard-overridden@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-discard-overridden@npm:6.0.2"
peerDependencies:
- postcss: ^8.2.15
- checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41
+ postcss: ^8.4.31
+ checksum: a38e0fe7a36f83cb9b73c1ba9ee2a48cf93c69ec0ea5753935824ffb71e958e58ae0393171c0f3d0014a397469d09bbb0d56bb5ab80f0280722967e2e273aebb
languageName: node
linkType: hard
-"postcss-discard-unused@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-discard-unused@npm:5.1.0"
+"postcss-discard-unused@npm:^6.0.5":
+ version: 6.0.5
+ resolution: "postcss-discard-unused@npm:6.0.5"
dependencies:
- postcss-selector-parser: ^6.0.5
+ postcss-selector-parser: ^6.0.16
peerDependencies:
- postcss: ^8.2.15
- checksum: 5c09403a342a065033f5f22cefe6b402c76c2dc0aac31a736a2062d82c2a09f0ff2525b3df3a0c6f4e0ffc7a0392efd44bfe7f9d018e4cae30d15b818b216622
+ postcss: ^8.4.31
+ checksum: 7962640773240186de38125f142a6555b7f9b2493c4968e0f0b11c6629b2bf43ac70b9fc4ee78aa732d82670ad8bf802b2febc9a9864b022eb68530eded26836
languageName: node
linkType: hard
@@ -9215,89 +9335,89 @@ __metadata:
languageName: node
linkType: hard
-"postcss-merge-idents@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-merge-idents@npm:5.1.1"
+"postcss-merge-idents@npm:^6.0.3":
+ version: 6.0.3
+ resolution: "postcss-merge-idents@npm:6.0.3"
dependencies:
- cssnano-utils: ^3.1.0
+ cssnano-utils: ^4.0.2
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: ed8a673617ea6ae3e15d69558063cb1a5eeee01732f78cdc0196ab910324abc30828724ab8dfc4cda27e8c0077542e25688470f829819a2604625a673387ec72
+ postcss: ^8.4.31
+ checksum: b45780d6d103b8e45a580032747ee6e1842f81863672341a6b4961397e243ca896217bf1f3ee732376a766207d5f610ba8924cf08cf6d5bbd4b093133fd05d70
languageName: node
linkType: hard
-"postcss-merge-longhand@npm:^5.1.7":
- version: 5.1.7
- resolution: "postcss-merge-longhand@npm:5.1.7"
+"postcss-merge-longhand@npm:^6.0.5":
+ version: 6.0.5
+ resolution: "postcss-merge-longhand@npm:6.0.5"
dependencies:
postcss-value-parser: ^4.2.0
- stylehacks: ^5.1.1
+ stylehacks: ^6.1.1
peerDependencies:
- postcss: ^8.2.15
- checksum: 81c3fc809f001b9b71a940148e242bdd6e2d77713d1bfffa15eb25c1f06f6648d5e57cb21645746d020a2a55ff31e1740d2b27900442913a9d53d8a01fb37e1b
+ postcss: ^8.4.31
+ checksum: 9ae5acf47dc0c1f494684ae55672d55bba7f5ee11c9c0f266aabd7c798e9f7394c6096363cd95685fd21ef088740389121a317772cf523ca22c915009bca2617
languageName: node
linkType: hard
-"postcss-merge-rules@npm:^5.1.4":
- version: 5.1.4
- resolution: "postcss-merge-rules@npm:5.1.4"
+"postcss-merge-rules@npm:^6.1.1":
+ version: 6.1.1
+ resolution: "postcss-merge-rules@npm:6.1.1"
dependencies:
- browserslist: ^4.21.4
+ browserslist: ^4.23.0
caniuse-api: ^3.0.0
- cssnano-utils: ^3.1.0
- postcss-selector-parser: ^6.0.5
+ cssnano-utils: ^4.0.2
+ postcss-selector-parser: ^6.0.16
peerDependencies:
- postcss: ^8.2.15
- checksum: 8ab6a569babe6cb412d6612adee74f053cea7edb91fa013398515ab36754b1fec830d68782ed8cdfb44cffdc6b78c79eab157bff650f428aa4460d3f3857447e
+ postcss: ^8.4.31
+ checksum: 43f60a1c88806491cf752ae7871676de0e7a2a9d6d2fc6bc894068cc35a910a63d30f7c7d79545e0926c8b3a9ec583e5e8357203c40b5bad5ff58133b0c900f6
languageName: node
linkType: hard
-"postcss-minify-font-values@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-minify-font-values@npm:5.1.0"
+"postcss-minify-font-values@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "postcss-minify-font-values@npm:6.1.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece
+ postcss: ^8.4.31
+ checksum: 985e4dd2f89220a4442a822aad7dff016ab58a9dbb7bbca9d01c2d07d5a1e7d8c02e1c6e836abb4c9b4e825b4b80d99ee1f5899e74bf0d969095037738e6e452
languageName: node
linkType: hard
-"postcss-minify-gradients@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-minify-gradients@npm:5.1.1"
+"postcss-minify-gradients@npm:^6.0.3":
+ version: 6.0.3
+ resolution: "postcss-minify-gradients@npm:6.0.3"
dependencies:
- colord: ^2.9.1
- cssnano-utils: ^3.1.0
+ colord: ^2.9.3
+ cssnano-utils: ^4.0.2
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67
+ postcss: ^8.4.31
+ checksum: 89b95088c3830f829f6d4636d1be4d4f13300bf9f1577c48c25169c81e11ec0026760b9abb32112b95d2c622f09d3b737f4d2975a7842927ccb567e1002ef7b3
languageName: node
linkType: hard
-"postcss-minify-params@npm:^5.1.4":
- version: 5.1.4
- resolution: "postcss-minify-params@npm:5.1.4"
+"postcss-minify-params@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "postcss-minify-params@npm:6.1.0"
dependencies:
- browserslist: ^4.21.4
- cssnano-utils: ^3.1.0
+ browserslist: ^4.23.0
+ cssnano-utils: ^4.0.2
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: bd63e2cc89edcf357bb5c2a16035f6d02ef676b8cede4213b2bddd42626b3d428403849188f95576fc9f03e43ebd73a29bf61d33a581be9a510b13b7f7f100d5
+ postcss: ^8.4.31
+ checksum: 1e1cc3057d9bcc532c70e40628e96e3aea0081d8072dffe983a270a8cd59c03ac585e57d036b70e43d4ee725f274a05a6a8efac5a715f448284e115c13f82a46
languageName: node
linkType: hard
-"postcss-minify-selectors@npm:^5.2.1":
- version: 5.2.1
- resolution: "postcss-minify-selectors@npm:5.2.1"
+"postcss-minify-selectors@npm:^6.0.4":
+ version: 6.0.4
+ resolution: "postcss-minify-selectors@npm:6.0.4"
dependencies:
- postcss-selector-parser: ^6.0.5
+ postcss-selector-parser: ^6.0.16
peerDependencies:
- postcss: ^8.2.15
- checksum: 6fdbc84f99a60d56b43df8930707da397775e4c36062a106aea2fd2ac81b5e24e584a1892f4baa4469fa495cb87d1422560eaa8f6c9d500f9f0b691a5f95bab5
+ postcss: ^8.4.31
+ checksum: 150221a84422ca7627c67ee691ee51e0fe2c3583c8108801e9fc93d3be8b538c2eb04fcfdc908270d7eeaeaf01594a20b81311690a873efccb8a23aeafe1c354
languageName: node
linkType: hard
@@ -9345,192 +9465,191 @@ __metadata:
languageName: node
linkType: hard
-"postcss-normalize-charset@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-charset@npm:5.1.0"
+"postcss-normalize-charset@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-normalize-charset@npm:6.0.2"
peerDependencies:
- postcss: ^8.2.15
- checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4
+ postcss: ^8.4.31
+ checksum: 5b8aeb17d61578a8656571cd5d5eefa8d4ee7126a99a41fdd322078002a06f2ae96f649197b9c01067a5f3e38a2e4b03e0e3fda5a0ec9e3d7ad056211ce86156
languageName: node
linkType: hard
-"postcss-normalize-display-values@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-display-values@npm:5.1.0"
+"postcss-normalize-display-values@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-normalize-display-values@npm:6.0.2"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86
+ postcss: ^8.4.31
+ checksum: da30a9394b0e4a269ccad8d240693a6cd564bcc60e24db67caee00f70ddfbc070ad76faed64c32e6eec9ed02e92565488b7879d4fd6c40d877c290eadbb0bb28
languageName: node
linkType: hard
-"postcss-normalize-positions@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-normalize-positions@npm:5.1.1"
+"postcss-normalize-positions@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-normalize-positions@npm:6.0.2"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: d9afc233729c496463c7b1cdd06732469f401deb387484c3a2422125b46ec10b4af794c101f8c023af56f01970b72b535e88373b9058ecccbbf88db81662b3c4
+ postcss: ^8.4.31
+ checksum: 44fb77583fae4d71b76e38226cf770570876bcf5af6940dc9aeac7a7e2252896b361e0249044766cff8dad445f925378f06a005d6541597573c20e599a62b516
languageName: node
linkType: hard
-"postcss-normalize-repeat-style@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-normalize-repeat-style@npm:5.1.1"
+"postcss-normalize-repeat-style@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-normalize-repeat-style@npm:6.0.2"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: 2c6ad2b0ae10a1fda156b948c34f78c8f1e185513593de4d7e2480973586675520edfec427645fa168c337b0a6b3ceca26f92b96149741ca98a9806dad30d534
+ postcss: ^8.4.31
+ checksum: bebdac63bec6777ead3e265fc12527b261cf8d0da1b7f0abb12bda86fd53b7058e4afe392210ac74dac012e413bb1c2a46a1138c89f82b8bf70b81711f620f8c
languageName: node
linkType: hard
-"postcss-normalize-string@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-string@npm:5.1.0"
+"postcss-normalize-string@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-normalize-string@npm:6.0.2"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada
+ postcss: ^8.4.31
+ checksum: 5e8e253c528b542accafc142846fb33643c342a787c86e5b68c6287c7d8f63c5ae7d4d3fc28e3daf80821cc26a91add135e58bdd62ff9c735fca65d994898c7d
languageName: node
linkType: hard
-"postcss-normalize-timing-functions@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-timing-functions@npm:5.1.0"
+"postcss-normalize-timing-functions@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-normalize-timing-functions@npm:6.0.2"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa
+ postcss: ^8.4.31
+ checksum: 1970f5aad04be11f99d51c59e27debb6fd7b49d0fa4a8879062b42c82113f8e520a284448727add3b54de85deefb8bd5fe554f618406586e9ad8fc9d060609f1
languageName: node
linkType: hard
-"postcss-normalize-unicode@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-normalize-unicode@npm:5.1.1"
+"postcss-normalize-unicode@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "postcss-normalize-unicode@npm:6.1.0"
dependencies:
- browserslist: ^4.21.4
+ browserslist: ^4.23.0
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: 4c24d26cc9f4b19a9397db4e71dd600dab690f1de8e14a3809e2aa1452dbc3791c208c38a6316bbc142f29e934fdf02858e68c94038c06174d78a4937e0f273c
+ postcss: ^8.4.31
+ checksum: 69ef35d06242061f0c504c128b83752e0f8daa30ebb26734de7d090460910be0b2efd8b17b1d64c3c85b95831a041faad9ad0aaba80e239406a79cfad3d63568
languageName: node
linkType: hard
-"postcss-normalize-url@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-url@npm:5.1.0"
- dependencies:
- normalize-url: ^6.0.1
- postcss-value-parser: ^4.2.0
- peerDependencies:
- postcss: ^8.2.15
- checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0
- languageName: node
- linkType: hard
-
-"postcss-normalize-whitespace@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-normalize-whitespace@npm:5.1.1"
+"postcss-normalize-url@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-normalize-url@npm:6.0.2"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19
+ postcss: ^8.4.31
+ checksum: bef51a18bbfee4fbf0381fec3c91e6c0dace36fca053bbd5f228e653d2732b6df3985525d79c4f7fc89f840ed07eb6d226e9d7503ecdc6f16d6d80cacae9df33
languageName: node
linkType: hard
-"postcss-ordered-values@npm:^5.1.3":
- version: 5.1.3
- resolution: "postcss-ordered-values@npm:5.1.3"
- dependencies:
- cssnano-utils: ^3.1.0
- postcss-value-parser: ^4.2.0
- peerDependencies:
- postcss: ^8.2.15
- checksum: 6f3ca85b6ceffc68aadaf319d9ee4c5ac16d93195bf8cba2d1559b631555ad61941461cda6d3909faab86e52389846b2b36345cff8f0c3f4eb345b1b8efadcf9
- languageName: node
- linkType: hard
-
-"postcss-reduce-idents@npm:^5.2.0":
- version: 5.2.0
- resolution: "postcss-reduce-idents@npm:5.2.0"
+"postcss-normalize-whitespace@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-normalize-whitespace@npm:6.0.2"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: f0d644c86e160dd36ee4dd924ab7d6feacac867c87702e2f98f96b409430a62de4fec2dfc3c8731bda4e14196e29a752b4558942f0af2a3e6cd7f1f4b173db8e
+ postcss: ^8.4.31
+ checksum: 6081eb3a4b305749eec02c00a95c2d236336a77ee636bb1d939f18d5dfa5ba82b7cf7fa072e83f9133d0bc984276596af3fe468bdd67c742ce69e9c63dbc218d
languageName: node
linkType: hard
-"postcss-reduce-initial@npm:^5.1.2":
- version: 5.1.2
- resolution: "postcss-reduce-initial@npm:5.1.2"
+"postcss-ordered-values@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-ordered-values@npm:6.0.2"
dependencies:
- browserslist: ^4.21.4
+ cssnano-utils: ^4.0.2
+ postcss-value-parser: ^4.2.0
+ peerDependencies:
+ postcss: ^8.4.31
+ checksum: c3d96177b4ffa43754e835e30c40043cc75ab1e95eb6c55ac8723eb48c13a12e986250e63d96619bbbd1a098876a1c0c1b3b7a8e1de1108a009cf7aa0beac834
+ languageName: node
+ linkType: hard
+
+"postcss-reduce-idents@npm:^6.0.3":
+ version: 6.0.3
+ resolution: "postcss-reduce-idents@npm:6.0.3"
+ dependencies:
+ postcss-value-parser: ^4.2.0
+ peerDependencies:
+ postcss: ^8.4.31
+ checksum: 1feff316838f947386c908f50807cf1b9589fd09b8e8df633a01f2640af5492833cc892448938ceba10ab96826c44767b8f2e1569d587579423f2db81202f7c7
+ languageName: node
+ linkType: hard
+
+"postcss-reduce-initial@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "postcss-reduce-initial@npm:6.1.0"
+ dependencies:
+ browserslist: ^4.23.0
caniuse-api: ^3.0.0
peerDependencies:
- postcss: ^8.2.15
- checksum: 55db697f85231a81f1969d54c894e4773912d9ddb914f9b03d2e73abc4030f2e3bef4d7465756d0c1acfcc2c2d69974bfb50a972ab27546a7d68b5a4fc90282b
+ postcss: ^8.4.31
+ checksum: 39e4034ffbf62a041b66944c5cebc4b17f656e76b97568f7f6230b0b886479e5c75b02ae4ba48c472cb0bde47489f9ed1fe6110ae8cff0d7b7165f53c2d64a12
languageName: node
linkType: hard
-"postcss-reduce-transforms@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-reduce-transforms@npm:5.1.0"
+"postcss-reduce-transforms@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-reduce-transforms@npm:6.0.2"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f
+ postcss: ^8.4.31
+ checksum: c424cc554eb5d253b7687b64925a13fc16759f058795d223854f5a20d9bca641b5f25d0559d03287e63f07a4629c24ac78156adcf604483fcad3c51721da0a08
languageName: node
linkType: hard
-"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9":
- version: 6.0.11
- resolution: "postcss-selector-parser@npm:6.0.11"
+"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.16, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4":
+ version: 6.1.2
+ resolution: "postcss-selector-parser@npm:6.1.2"
dependencies:
cssesc: ^3.0.0
util-deprecate: ^1.0.2
- checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde
+ checksum: ce9440fc42a5419d103f4c7c1847cb75488f3ac9cbe81093b408ee9701193a509f664b4d10a2b4d82c694ee7495e022f8f482d254f92b7ffd9ed9dea696c6f84
languageName: node
linkType: hard
-"postcss-sort-media-queries@npm:^4.4.1":
- version: 4.4.1
- resolution: "postcss-sort-media-queries@npm:4.4.1"
+"postcss-sort-media-queries@npm:^5.2.0":
+ version: 5.2.0
+ resolution: "postcss-sort-media-queries@npm:5.2.0"
dependencies:
- sort-css-media-queries: 2.1.0
+ sort-css-media-queries: 2.2.0
peerDependencies:
- postcss: ^8.4.16
- checksum: 70b42e479bb1d15d8628678eefefd547d309e33e64262fe437630fe62d8e4b3adcae7f2b48ef8da9d3173576d4af109a9ffa9514573db1281deef324f5ea166f
+ postcss: ^8.4.23
+ checksum: d4a976a64b53234762cc35c06ce97c1684bd7a64ead17e84c2047676c7307945be7c005235e6aac7c4620e1f835d6ba1a7dcf018ab7fe0a47657c62c96ad9f35
languageName: node
linkType: hard
-"postcss-svgo@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-svgo@npm:5.1.0"
+"postcss-svgo@npm:^6.0.3":
+ version: 6.0.3
+ resolution: "postcss-svgo@npm:6.0.3"
dependencies:
postcss-value-parser: ^4.2.0
- svgo: ^2.7.0
+ svgo: ^3.2.0
peerDependencies:
- postcss: ^8.2.15
- checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd
+ postcss: ^8.4.31
+ checksum: 1a7d1c8dea555884a7791e28ec2c22ea92331731067584ff5a23042a0e615f88fefde04e1140f11c262a728ef9fab6851423b40b9c47f9ae05353bd3c0ff051a
languageName: node
linkType: hard
-"postcss-unique-selectors@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-unique-selectors@npm:5.1.1"
+"postcss-unique-selectors@npm:^6.0.4":
+ version: 6.0.4
+ resolution: "postcss-unique-selectors@npm:6.0.4"
dependencies:
- postcss-selector-parser: ^6.0.5
+ postcss-selector-parser: ^6.0.16
peerDependencies:
- postcss: ^8.2.15
- checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278
+ postcss: ^8.4.31
+ checksum: b09df9943b4e858e88b30f3d279ce867a0490df806f1f947d286b0a4e95ba923f1229c385e5bf365f4f124f1edccda41ec18ccad4ba8798d829279d6dc971203
languageName: node
linkType: hard
@@ -9541,23 +9660,23 @@ __metadata:
languageName: node
linkType: hard
-"postcss-zindex@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-zindex@npm:5.1.0"
+"postcss-zindex@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "postcss-zindex@npm:6.0.2"
peerDependencies:
- postcss: ^8.2.15
- checksum: 8581e0ee552622489dcb9fb9609a3ccc261a67a229ba91a70bd138fe102a2d04cedb14642b82b673d4cac7b559ef32574f2dafde2ff7816eecac024d231c5ead
+ postcss: ^8.4.31
+ checksum: 394119e47b0fb098dc53d1bcf71b5500ab29605fe106526b2e81290bff179174ee00a82a4d4be5a42d4ef4138e8a3d6aabeef3b06cf7cb15b851848c8585d53b
languageName: node
linkType: hard
-"postcss@npm:^8.4.17, postcss@npm:^8.4.21, postcss@npm:^8.4.26":
- version: 8.4.31
- resolution: "postcss@npm:8.4.31"
+"postcss@npm:^8.4.21, postcss@npm:^8.4.24, postcss@npm:^8.4.26, postcss@npm:^8.4.38":
+ version: 8.4.41
+ resolution: "postcss@npm:8.4.41"
dependencies:
- nanoid: ^3.3.6
- picocolors: ^1.0.0
- source-map-js: ^1.0.2
- checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea
+ nanoid: ^3.3.7
+ picocolors: ^1.0.1
+ source-map-js: ^1.2.0
+ checksum: f865894929eb0f7fc2263811cc853c13b1c75103028b3f4f26df777e27b201f1abe21cb4aa4c2e901c80a04f6fb325ee22979688fe55a70e2ea82b0a517d3b6f
languageName: node
linkType: hard
@@ -9588,14 +9707,14 @@ __metadata:
linkType: hard
"prism-react-renderer@npm:^2.1.0, prism-react-renderer@npm:^2.3.0":
- version: 2.3.1
- resolution: "prism-react-renderer@npm:2.3.1"
+ version: 2.4.0
+ resolution: "prism-react-renderer@npm:2.4.0"
dependencies:
"@types/prismjs": ^1.26.0
clsx: ^2.0.0
peerDependencies:
react: ">=16.0.0"
- checksum: b12a7d502c1e764d94f7d3c84aee9cd6fccc676bb7e21dee94d37eb2e7e62e097a343999e1979887cb83a57cbdea48d2046aa74d07bce05caa25f4c296df30b6
+ checksum: d15d944a8cbf05f7b04deecd2cf4ffb08229a6027918641b6f046cd8ab24b65ca4ebe4ac8e95a53a7d7cefb1bba8df3ce394fe4f1d75418e34fa92553dc63ef7
languageName: node
linkType: hard
@@ -9698,12 +9817,12 @@ __metadata:
languageName: node
linkType: hard
-"qs@npm:6.11.0":
- version: 6.11.0
- resolution: "qs@npm:6.11.0"
+"qs@npm:6.13.0":
+ version: 6.13.0
+ resolution: "qs@npm:6.13.0"
dependencies:
- side-channel: ^1.0.4
- checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297
+ side-channel: ^1.0.6
+ checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8
languageName: node
linkType: hard
@@ -9812,14 +9931,14 @@ __metadata:
linkType: hard
"react-dom@npm:^18.0.0":
- version: 18.2.0
- resolution: "react-dom@npm:18.2.0"
+ version: 18.3.1
+ resolution: "react-dom@npm:18.3.1"
dependencies:
loose-envify: ^1.1.0
- scheduler: ^0.23.0
+ scheduler: ^0.23.2
peerDependencies:
- react: ^18.2.0
- checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc
+ react: ^18.3.1
+ checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9
languageName: node
linkType: hard
@@ -9881,6 +10000,17 @@ __metadata:
languageName: node
linkType: hard
+"react-loadable@npm:@docusaurus/react-loadable@6.0.0":
+ version: 6.0.0
+ resolution: "@docusaurus/react-loadable@npm:6.0.0"
+ dependencies:
+ "@types/react": "*"
+ peerDependencies:
+ react: "*"
+ checksum: 4c32061b2fc10689d5d8ba11ead71b69e4c8a55fcfeafb551a6747b1a7b496c4f2d8dbb5d023f5cafc2a9aea9d14582bdb324d11e6f9b8c3049d45b74439203f
+ languageName: node
+ linkType: hard
+
"react-router-config@npm:^5.1.1":
version: 5.1.1
resolution: "react-router-config@npm:5.1.1"
@@ -9930,11 +10060,11 @@ __metadata:
linkType: hard
"react@npm:^18.0.0":
- version: 18.2.0
- resolution: "react@npm:18.2.0"
+ version: 18.3.1
+ resolution: "react@npm:18.3.1"
dependencies:
loose-envify: ^1.1.0
- checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b
+ checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376
languageName: node
linkType: hard
@@ -9964,6 +10094,13 @@ __metadata:
languageName: node
linkType: hard
+"readdirp@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "readdirp@npm:4.0.1"
+ checksum: b39747defe52922c2478874ffbb1fd0bececa7b3170466a5bc770795dd5296a309598990cbd809732079b2363e989d0008b8e91cfbac7b726f68c1947db2d31c
+ languageName: node
+ linkType: hard
+
"readdirp@npm:~3.6.0":
version: 3.6.0
resolution: "readdirp@npm:3.6.0"
@@ -10387,15 +10524,15 @@ __metadata:
linkType: hard
"sass@npm:^1.57.1":
- version: 1.75.0
- resolution: "sass@npm:1.75.0"
+ version: 1.79.1
+ resolution: "sass@npm:1.79.1"
dependencies:
- chokidar: ">=3.0.0 <4.0.0"
+ chokidar: ^4.0.0
immutable: ^4.0.0
source-map-js: ">=0.6.2 <2.0.0"
bin:
sass: sass.js
- checksum: bfb9f5ddb6a2e1fe0c1ba6191cdb17afa7b40c1eb892c7152f6a29ff2b06dc7a510bdb648f8cca0179dcb3965920ebeb8894f0710b0b450a99db563831345033
+ checksum: df014f287055c750349b7461ed8477662c7f9c8999cc1b10eb9096ccd4a67f850511e8828ba8780515513741a932d01b1948bd33d40cdac1403a13b6718fa14c
languageName: node
linkType: hard
@@ -10406,12 +10543,12 @@ __metadata:
languageName: node
linkType: hard
-"scheduler@npm:^0.23.0":
- version: 0.23.0
- resolution: "scheduler@npm:0.23.0"
+"scheduler@npm:^0.23.2":
+ version: 0.23.2
+ resolution: "scheduler@npm:0.23.2"
dependencies:
loose-envify: ^1.1.0
- checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a
+ checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4
languageName: node
linkType: hard
@@ -10437,15 +10574,15 @@ __metadata:
languageName: node
linkType: hard
-"schema-utils@npm:^4.0.0":
- version: 4.0.0
- resolution: "schema-utils@npm:4.0.0"
+"schema-utils@npm:^4.0.0, schema-utils@npm:^4.0.1":
+ version: 4.2.0
+ resolution: "schema-utils@npm:4.2.0"
dependencies:
"@types/json-schema": ^7.0.9
- ajv: ^8.8.0
+ ajv: ^8.9.0
ajv-formats: ^2.1.1
- ajv-keywords: ^5.0.0
- checksum: c843e92fdd1a5c145dbb6ffdae33e501867f9703afac67bdf35a685e49f85b1dcc10ea250033175a64bd9d31f0555bc6785b8359da0c90bcea30cf6dfbb55a8f
+ ajv-keywords: ^5.1.0
+ checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde
languageName: node
linkType: hard
@@ -10504,9 +10641,9 @@ __metadata:
languageName: node
linkType: hard
-"send@npm:0.18.0":
- version: 0.18.0
- resolution: "send@npm:0.18.0"
+"send@npm:0.19.0":
+ version: 0.19.0
+ resolution: "send@npm:0.19.0"
dependencies:
debug: 2.6.9
depd: 2.0.0
@@ -10521,7 +10658,7 @@ __metadata:
on-finished: 2.4.1
range-parser: ~1.2.1
statuses: 2.0.1
- checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8
+ checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f
languageName: node
linkType: hard
@@ -10565,15 +10702,15 @@ __metadata:
languageName: node
linkType: hard
-"serve-static@npm:1.15.0":
- version: 1.15.0
- resolution: "serve-static@npm:1.15.0"
+"serve-static@npm:1.16.2":
+ version: 1.16.2
+ resolution: "serve-static@npm:1.16.2"
dependencies:
- encodeurl: ~1.0.2
+ encodeurl: ~2.0.0
escape-html: ~1.0.3
parseurl: ~1.3.3
- send: 0.18.0
- checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d
+ send: 0.19.0
+ checksum: dffc52feb4cc5c68e66d0c7f3c1824d4e989f71050aefc9bd5f822a42c54c9b814f595fc5f2b717f4c7cc05396145f3e90422af31186a93f76cf15f707019759
languageName: node
linkType: hard
@@ -10584,6 +10721,20 @@ __metadata:
languageName: node
linkType: hard
+"set-function-length@npm:^1.2.1":
+ version: 1.2.2
+ resolution: "set-function-length@npm:1.2.2"
+ dependencies:
+ define-data-property: ^1.1.4
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.4
+ gopd: ^1.0.1
+ has-property-descriptors: ^1.0.2
+ checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72
+ languageName: node
+ linkType: hard
+
"setprototypeof@npm:1.1.0":
version: 1.1.0
resolution: "setprototypeof@npm:1.1.0"
@@ -10650,14 +10801,15 @@ __metadata:
languageName: node
linkType: hard
-"side-channel@npm:^1.0.4":
- version: 1.0.4
- resolution: "side-channel@npm:1.0.4"
+"side-channel@npm:^1.0.6":
+ version: 1.0.6
+ resolution: "side-channel@npm:1.0.6"
dependencies:
- call-bind: ^1.0.0
- get-intrinsic: ^1.0.2
- object-inspect: ^1.9.0
- checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245
+ call-bind: ^1.0.7
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.4
+ object-inspect: ^1.13.1
+ checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97
languageName: node
linkType: hard
@@ -10730,6 +10882,16 @@ __metadata:
languageName: node
linkType: hard
+"snake-case@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "snake-case@npm:3.0.4"
+ dependencies:
+ dot-case: ^3.0.4
+ tslib: ^2.0.3
+ checksum: 0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3
+ languageName: node
+ linkType: hard
+
"sockjs@npm:^0.3.24":
version: 0.3.24
resolution: "sockjs@npm:0.3.24"
@@ -10762,17 +10924,17 @@ __metadata:
languageName: node
linkType: hard
-"sort-css-media-queries@npm:2.1.0":
- version: 2.1.0
- resolution: "sort-css-media-queries@npm:2.1.0"
- checksum: 25cb8f08b148a2ed83d0bc1cf20ddb888d3dee2a3c986896099a21b28b999d5cca3e46a9ef64381bb36fca0fc820471713f2e8af2729ecc6e108ab2b3b315ea9
+"sort-css-media-queries@npm:2.2.0":
+ version: 2.2.0
+ resolution: "sort-css-media-queries@npm:2.2.0"
+ checksum: c090c9a27be40f3e50f5f9bc9d85a8af0e2c5152565eca34bdb028d952749bce169bc5abef21a5a385ca6221a0869640c9faf58f082ac46de9085ebdb506291f
languageName: node
linkType: hard
-"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2":
- version: 1.0.2
- resolution: "source-map-js@npm:1.0.2"
- checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c
+"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "source-map-js@npm:1.2.0"
+ checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97
languageName: node
linkType: hard
@@ -10786,7 +10948,7 @@ __metadata:
languageName: node
linkType: hard
-"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0":
+"source-map@npm:^0.6.0, source-map@npm:~0.6.0":
version: 0.6.1
resolution: "source-map@npm:0.6.1"
checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2
@@ -10857,13 +11019,6 @@ __metadata:
languageName: node
linkType: hard
-"stable@npm:^0.1.8":
- version: 0.1.8
- resolution: "stable@npm:0.1.8"
- checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb
- languageName: node
- linkType: hard
-
"statuses@npm:2.0.1":
version: 2.0.1
resolution: "statuses@npm:2.0.1"
@@ -11010,15 +11165,15 @@ __metadata:
languageName: node
linkType: hard
-"stylehacks@npm:^5.1.1":
- version: 5.1.1
- resolution: "stylehacks@npm:5.1.1"
+"stylehacks@npm:^6.1.1":
+ version: 6.1.1
+ resolution: "stylehacks@npm:6.1.1"
dependencies:
- browserslist: ^4.21.4
- postcss-selector-parser: ^6.0.4
+ browserslist: ^4.23.0
+ postcss-selector-parser: ^6.0.16
peerDependencies:
- postcss: ^8.2.15
- checksum: 11175366ef52de65bf06cefba0ddc9db286dc3a1451fd2989e74c6ea47091a02329a4bf6ce10b1a36950056927b6bbbe47c5ab3a1f4c7032df932d010fbde5a2
+ postcss: ^8.4.31
+ checksum: 7bef69822280a23817caa43969de76d77ba34042e9f1f7baaeda8f22b1d8c20f1f839ad028552c169e158e387830f176feccd0324b07ef6ec657cba1dd0b2466
languageName: node
linkType: hard
@@ -11063,20 +11218,20 @@ __metadata:
languageName: node
linkType: hard
-"svgo@npm:^2.7.0, svgo@npm:^2.8.0":
- version: 2.8.0
- resolution: "svgo@npm:2.8.0"
+"svgo@npm:^3.0.2, svgo@npm:^3.2.0":
+ version: 3.3.2
+ resolution: "svgo@npm:3.3.2"
dependencies:
"@trysound/sax": 0.2.0
commander: ^7.2.0
- css-select: ^4.1.3
- css-tree: ^1.1.3
- csso: ^4.2.0
+ css-select: ^5.1.0
+ css-tree: ^2.3.1
+ css-what: ^6.1.0
+ csso: ^5.0.5
picocolors: ^1.0.0
- stable: ^0.1.8
bin:
- svgo: bin/svgo
- checksum: b92f71a8541468ffd0b81b8cdb36b1e242eea320bf3c1a9b2c8809945853e9d8c80c19744267eb91cabf06ae9d5fff3592d677df85a31be4ed59ff78534fa420
+ svgo: ./bin/svgo
+ checksum: a3f8aad597dec13ab24e679c4c218147048dc1414fe04e99447c5f42a6e077b33d712d306df84674b5253b98c9b84dfbfb41fdd08552443b04946e43d03e054e
languageName: node
linkType: hard
@@ -11449,17 +11604,17 @@ __metadata:
languageName: node
linkType: hard
-"update-browserslist-db@npm:^1.0.13":
- version: 1.0.13
- resolution: "update-browserslist-db@npm:1.0.13"
+"update-browserslist-db@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "update-browserslist-db@npm:1.1.0"
dependencies:
- escalade: ^3.1.1
- picocolors: ^1.0.0
+ escalade: ^3.1.2
+ picocolors: ^1.0.1
peerDependencies:
browserslist: ">= 4.21.0"
bin:
update-browserslist-db: cli.js
- checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322
+ checksum: 7b74694d96f0c360f01b702e72353dc5a49df4fe6663d3ee4e5c628f061576cddf56af35a3a886238c01dd3d8f231b7a86a8ceaa31e7a9220ae31c1c1238e562
languageName: node
linkType: hard
@@ -11944,7 +12099,7 @@ __metadata:
languageName: node
linkType: hard
-"yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2":
+"yaml@npm:^1.7.2":
version: 1.10.2
resolution: "yaml@npm:1.10.2"
checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f
diff --git a/mkdocs.yml b/mkdocs.yml
index 8527d68c28..aa545111d4 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -6,7 +6,7 @@ edit_uri: edit/master/docs
plugins:
- techdocs-core
-# For sidebar navigation on https://backstage.io/, see `microsite/sidebars.json`
+# For sidebar navigation on https://backstage.io/, see `microsite/sidebars.js`
nav:
- Overview:
- What is Backstage?: 'overview/what-is-backstage.md'
@@ -48,6 +48,7 @@ nav:
- External integrations: 'features/software-catalog/external-integrations.md'
- Catalog Customization: 'features/software-catalog/catalog-customization.md'
- API: 'features/software-catalog/api.md'
+ - FAQ: 'features/software-catalog/faq.md'
- Kubernetes:
- Overview: 'features/kubernetes/index.md'
- Installation: 'features/kubernetes/installation.md'
@@ -64,12 +65,14 @@ nav:
- Writing Custom Actions: 'features/software-templates/writing-custom-actions.md'
- Writing Custom Step Layouts: 'features/software-templates/writing-custom-step-layouts.md'
- Migrating from v1beta2 to v1beta3 templates: 'features/software-templates/migrating-from-v1beta2-to-v1beta3.md'
+ - Dry Run Testing: 'features/software-templates/dry-run-testing.md'
- Backstage Search:
- Overview: 'features/search/README.md'
- Getting Started: 'features/search/getting-started.md'
- Concepts: 'features/search/concepts.md'
- Search Architecture: 'features/search/architecture.md'
- Search Engines: 'features/search/search-engines.md'
+ - Collators: 'features/search/collators.md'
- HOW TO guides: 'features/search/how-to-guides.md'
- TechDocs:
- Overview: 'features/techdocs/README.md'
@@ -82,6 +85,7 @@ nav:
- Configuring CI/CD to generate and publish TechDocs sites: 'features/techdocs/configuring-ci-cd.md'
- CLI: 'features/techdocs/cli.md'
- HOW TO guides: 'features/techdocs/how-to-guides.md'
+ - Extensions: 'features/techdocs/extensions.md'
- Troubleshooting: 'features/techdocs/troubleshooting.md'
- FAQ: 'features/techdocs/FAQ.md'
- Integrations:
@@ -136,7 +140,6 @@ nav:
- Proxying: 'plugins/proxying.md'
- Backend plugin: 'plugins/backend-plugin.md'
- Call existing API: 'plugins/call-existing-api.md'
- - URL Reader: 'plugins/url-reader.md'
- Testing:
- Testing with Jest: 'plugins/testing.md'
- Publishing:
@@ -181,6 +184,7 @@ nav:
- Local Development:
- Linking in Local Packages: 'tooling/local-dev/linking-local-packages.md'
- 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'
diff --git a/package.json b/package.json
index 73d0ca5b19..425b1c1a38 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "root",
- "version": "1.30.0-next.0",
+ "version": "1.32.0-next.1",
"private": true,
"repository": {
"type": "git",
@@ -17,7 +17,7 @@
"build:all": "backstage-cli repo build --all",
"build:api-docs": "LANG=en_EN yarn build:api-reports --docs --exclude 'plugins/@(adr|adr-backend|adr-common|airbrake|airbrake-backend|allure|analytics-module-ga|analytics-module-ga4|analytics-module-newrelic-browser|apache-airflow|api-docs|api-docs-module-protoc-gen-doc|apollo-explorer|app-visualizer|azure-devops|azure-devops-backend|azure-devops-common|azure-sites|azure-sites-backend|azure-sites-common|badges|badges-backend|bazaar|bazaar-backend|bitbucket-cloud-common|bitrise|catalog-graph|catalog-graphql|catalog-import|catalog-unprocessed-entities|cicd-statistics|cicd-statistics-module-gitlab|circleci|cloudbuild|code-climate|code-coverage|code-coverage-backend|codescene|config-schema|cost-insights|cost-insights-common|dynatrace|entity-feedback|entity-feedback-backend|entity-feedback-common|entity-validation|example-todo-list|example-todo-list-backend|example-todo-list-common|firehydrant|fossa|gcalendar|gcp-projects|git-release-manager|github-actions|github-deployments|github-issues|github-pull-requests-board|gitops-profiles|gocd|graphiql|graphql-backend|graphql-voyager|ilert|jenkins|jenkins-backend|jenkins-common|kafka|kafka-backend|lighthouse|lighthouse-backend|lighthouse-common|linguist|linguist-backend|linguist-common|microsoft-calendar|newrelic|newrelic-dashboard|nomad|nomad-backend|octopus-deploy|opencost|pagerduty|periskop|periskop-backend|playlist|playlist-backend|playlist-common|proxy-backend|puppetdb|rollbar|rollbar-backend|sentry|shortcuts|splunk-on-call|stack-overflow|stack-overflow-backend|stackstorm|tech-radar|tech-radar-2|todo|todo-backend|xcmetrics)'",
"build:api-reports": "yarn build:api-reports:only --tsc",
- "build:api-reports:only": "NODE_OPTIONS=--max-old-space-size=8192 backstage-repo-tools api-reports --allow-warnings 'packages/backend-app-api,packages/backend-common,packages/core-components,plugins/+(catalog|catalog-import|git-release-manager|jenkins|kubernetes)' -o ae-wrong-input-file-type --validate-release-tags",
+ "build:api-reports:only": "NODE_OPTIONS=--max-old-space-size=8192 backstage-repo-tools api-reports --allow-warnings 'packages/backend-app-api,packages/core-components,plugins/+(catalog|catalog-import|git-release-manager|jenkins|kubernetes)' -o ae-wrong-input-file-type --validate-release-tags",
"build:backend": "yarn workspace example-backend build",
"build:knip-reports": "backstage-repo-tools knip-reports",
"build:plugins-report": "node ./scripts/build-plugins-report",
@@ -31,6 +31,7 @@
"lint": "backstage-cli repo lint --since origin/master",
"lint:all": "backstage-cli repo lint",
"lint:docs": "node ./scripts/check-docs-quality",
+ "lint:peer-deps": "backstage-repo-tools peer-deps",
"lint:type-deps": "backstage-repo-tools type-deps",
"new": "backstage-cli new --scope backstage --baseVersion 0.0.0 --no-private",
"prepare": "husky",
@@ -116,7 +117,7 @@
"cross-env": "^7.0.0",
"e2e-test": "workspace:*",
"eslint": "^8.6.0",
- "eslint-plugin-notice": "^0.9.10",
+ "eslint-plugin-notice": "^1.0.0",
"eslint-plugin-react": "^7.28.0",
"eslint-plugin-testing-library": "^6.0.0",
"fs-extra": "^11.2.0",
diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md
index a045f9a4f9..281ac7d936 100644
--- a/packages/app-defaults/CHANGELOG.md
+++ b/packages/app-defaults/CHANGELOG.md
@@ -1,5 +1,100 @@
# @backstage/app-defaults
+## 1.5.12-next.1
+
+### Patch Changes
+
+- e969dc7: Move `@types/react` to a peer dependency.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/theme@0.5.8-next.0
+
+## 1.5.12-next.0
+
+### Patch Changes
+
+- 46b5a20: Added `externalLink` to icon defaults
+- 8c40e55: Updated the `bitbucket-server-auth` default API to set its environment based on the `auth.environment` config option instead of being hardcoded to `development`.
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-permission-react@0.4.27-next.0
+
+## 1.5.11
+
+### Patch Changes
+
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/core-app-api@1.15.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-permission-react@0.4.26
+
+## 1.5.11-next.1
+
+### Patch Changes
+
+- b537bd7: Allow custom star icons to be provided via the `star` and `unstarred` icon overrides. See how to override existing icons in the [Backstage documentation](https://backstage.io/docs/getting-started/app-custom-theme/#custom-icons).
+- 836127c: Updated dependency `@testing-library/react` to `^16.0.0`.
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-permission-react@0.4.26-next.0
+
+## 1.5.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-permission-react@0.4.25
+
+## 1.5.10
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.10
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-permission-react@0.4.25
+
+## 1.5.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+
+## 1.5.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/theme@0.5.6
+
## 1.5.9-next.0
### Patch Changes
diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json
index 2389c2cddc..6dfe1aaa49 100644
--- a/packages/app-defaults/package.json
+++ b/packages/app-defaults/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/app-defaults",
- "version": "1.5.9-next.0",
+ "version": "1.5.12-next.1",
"description": "Provides the default wiring of a Backstage App",
"backstage": {
"role": "web-library"
@@ -48,12 +48,21 @@
"@backstage/cli": "workspace:^",
"@backstage/test-utils": "workspace:^",
"@testing-library/jest-dom": "^6.0.0",
- "@testing-library/react": "^15.0.0",
- "@types/react": "^16.13.1 || ^17.0.0"
+ "@testing-library/react": "^16.0.0",
+ "@types/react": "^18.0.0",
+ "react": "^18.0.2",
+ "react-dom": "^18.0.2",
+ "react-router-dom": "^6.3.0"
},
"peerDependencies": {
+ "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
}
diff --git a/packages/app-defaults/api-report.md b/packages/app-defaults/report.api.md
similarity index 100%
rename from packages/app-defaults/api-report.md
rename to packages/app-defaults/report.api.md
diff --git a/packages/app-defaults/src/defaults/apis.ts b/packages/app-defaults/src/defaults/apis.ts
index 4e9e1a492c..7fdbb78293 100644
--- a/packages/app-defaults/src/defaults/apis.ts
+++ b/packages/app-defaults/src/defaults/apis.ts
@@ -243,6 +243,7 @@ export const apis = [
discoveryApi,
oauthRequestApi,
defaultScopes: ['REPO_READ'],
+ environment: configApi.getOptionalString('auth.environment'),
}),
}),
createApiFactory({
diff --git a/packages/app-defaults/src/defaults/icons.tsx b/packages/app-defaults/src/defaults/icons.tsx
index 1ed5bf03c6..e0b93517e7 100644
--- a/packages/app-defaults/src/defaults/icons.tsx
+++ b/packages/app-defaults/src/defaults/icons.tsx
@@ -36,6 +36,9 @@ import MuiPersonIcon from '@material-ui/icons/Person';
import MuiWarningIcon from '@material-ui/icons/Warning';
import MuiStorageIcon from '@material-ui/icons/Storage';
import MuiFeaturedPlayListIcon from '@material-ui/icons/FeaturedPlayList';
+import Star from '@material-ui/icons/Star';
+import StarBorder from '@material-ui/icons/StarBorder';
+import OpenInNew from '@material-ui/icons/OpenInNew';
export const icons = {
brokenImage: MuiBrokenImageIcon as IconComponent,
@@ -62,4 +65,7 @@ export const icons = {
'kind:template': MuiFeaturedPlayListIcon as IconComponent,
user: MuiPersonIcon as IconComponent,
warning: MuiWarningIcon as IconComponent,
+ star: Star as IconComponent,
+ unstarred: StarBorder as IconComponent,
+ externalLink: OpenInNew as IconComponent,
};
diff --git a/packages/app-next-example-plugin/CHANGELOG.md b/packages/app-next-example-plugin/CHANGELOG.md
index f05b81642f..c86731a467 100644
--- a/packages/app-next-example-plugin/CHANGELOG.md
+++ b/packages/app-next-example-plugin/CHANGELOG.md
@@ -1,5 +1,85 @@
# app-next-example-plugin
+## 0.0.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+
+## 0.0.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/core-components@0.15.1-next.0
+
+## 0.0.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/frontend-plugin-api@0.8.0
+
+## 0.0.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+
+## 0.0.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+
+## 0.0.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/core-components@0.14.10
+
+## 0.0.14
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/core-components@0.14.10
+
+## 0.0.14-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/core-components@0.14.10-next.0
+
+## 0.0.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/core-components@0.14.10-next.0
+
+## 0.0.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/core-components@0.14.10-next.0
+
## 0.0.14-next.0
### Patch Changes
diff --git a/packages/app-next-example-plugin/api-report.md b/packages/app-next-example-plugin/api-report.md
deleted file mode 100644
index c89a7b599b..0000000000
--- a/packages/app-next-example-plugin/api-report.md
+++ /dev/null
@@ -1,17 +0,0 @@
-## API Report File for "app-next-example-plugin"
-
-> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
-
-```ts
-import { BackstagePlugin } from '@backstage/frontend-plugin-api';
-import { default as React_2 } from 'react';
-
-// @public (undocumented)
-const examplePlugin: BackstagePlugin<{}, {}>;
-export default examplePlugin;
-
-// @public (undocumented)
-export const ExampleSidebarItem: () => React_2.JSX.Element;
-
-// (No @packageDocumentation comment for this package)
-```
diff --git a/packages/app-next-example-plugin/package.json b/packages/app-next-example-plugin/package.json
index d397883063..721779d1b5 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.14-next.0",
+ "version": "0.0.16-next.1",
"description": "Backstage internal example plugin",
"backstage": {
"role": "frontend-plugin",
@@ -47,12 +47,22 @@
},
"devDependencies": {
"@backstage/cli": "workspace:^",
+ "@types/react": "^18.0.0",
"cross-fetch": "^4.0.0",
- "msw": "^1.0.0"
+ "msw": "^1.0.0",
+ "react": "^18.0.2",
+ "react-dom": "^18.0.2",
+ "react-router-dom": "^6.3.0"
},
"peerDependencies": {
+ "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
}
diff --git a/packages/app-next-example-plugin/report.api.md b/packages/app-next-example-plugin/report.api.md
new file mode 100644
index 0000000000..3094fee56e
--- /dev/null
+++ b/packages/app-next-example-plugin/report.api.md
@@ -0,0 +1,61 @@
+## API Report File for "app-next-example-plugin"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { AnyRouteRefParams } from '@backstage/frontend-plugin-api';
+import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
+import { ExtensionDefinition } from '@backstage/frontend-plugin-api';
+import { FrontendPlugin } from '@backstage/frontend-plugin-api';
+import { default as React_2 } from 'react';
+import { RouteRef } from '@backstage/frontend-plugin-api';
+
+// @public (undocumented)
+const examplePlugin: FrontendPlugin<
+ {},
+ {},
+ {
+ 'page:example': ExtensionDefinition<{
+ kind: 'page';
+ name: undefined;
+ config: {
+ path: string | undefined;
+ };
+ configInput: {
+ path?: string | undefined;
+ };
+ output:
+ | ConfigurableExtensionDataRef<
+ React_2.JSX.Element,
+ 'core.reactElement',
+ {}
+ >
+ | ConfigurableExtensionDataRef
+ | ConfigurableExtensionDataRef<
+ RouteRef,
+ 'core.routing.ref',
+ {
+ optional: true;
+ }
+ >;
+ inputs: {};
+ params: {
+ defaultPath: string;
+ loader: () => Promise;
+ routeRef?: RouteRef | undefined;
+ };
+ }>;
+ }
+>;
+export default examplePlugin;
+
+// @public (undocumented)
+export const ExampleSidebarItem: () => React_2.JSX.Element;
+
+// Warnings were encountered during analysis:
+//
+// src/ExampleSidebarItem.d.ts:3:22 - (ae-undocumented) Missing documentation for "ExampleSidebarItem".
+// src/plugin.d.ts:22:22 - (ae-undocumented) Missing documentation for "examplePlugin".
+
+// (No @packageDocumentation comment for this package)
+```
diff --git a/packages/app-next-example-plugin/src/plugin.tsx b/packages/app-next-example-plugin/src/plugin.tsx
index 99c377b7e5..818e8abc84 100644
--- a/packages/app-next-example-plugin/src/plugin.tsx
+++ b/packages/app-next-example-plugin/src/plugin.tsx
@@ -16,17 +16,19 @@
import React from 'react';
import {
- createPageExtension,
- createPlugin,
+ PageBlueprint,
+ createFrontendPlugin,
} from '@backstage/frontend-plugin-api';
-export const ExamplePage = createPageExtension({
- defaultPath: '/example',
- loader: () => import('./Component').then(m => ),
+export const ExamplePage = PageBlueprint.make({
+ params: {
+ defaultPath: '/example',
+ loader: () => import('./Component').then(m => ),
+ },
});
/** @public */
-export const examplePlugin = createPlugin({
+export const examplePlugin = createFrontendPlugin({
id: 'example',
extensions: [ExamplePage],
});
diff --git a/packages/app-next/CHANGELOG.md b/packages/app-next/CHANGELOG.md
index 794484d2ce..a4d5c97a8e 100644
--- a/packages/app-next/CHANGELOG.md
+++ b/packages/app-next/CHANGELOG.md
@@ -1,5 +1,489 @@
# example-app-next
+## 0.0.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/cli@0.28.0-next.1
+ - @backstage/plugin-scaffolder@1.26.0-next.1
+ - @backstage/plugin-signals@0.0.11-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.16-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.1
+ - @backstage/frontend-plugin-api@0.9.0-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.17-next.1
+ - @backstage/frontend-app-api@0.10.0-next.1
+ - @backstage/core-compat-api@0.3.1-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/plugin-scaffolder-react@1.13.0-next.1
+ - @backstage/plugin-app-visualizer@0.1.11-next.1
+ - @backstage/plugin-catalog-import@0.12.5-next.1
+ - @backstage/plugin-techdocs-react@1.2.9-next.1
+ - @backstage/app-defaults@1.5.12-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/plugin-catalog-graph@0.4.11-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-notifications@0.3.2-next.1
+ - @backstage/plugin-user-settings@0.8.14-next.1
+ - @backstage/plugin-search-react@1.8.1-next.1
+ - @backstage/plugin-auth-react@0.1.7-next.1
+ - @backstage/plugin-kubernetes@0.11.16-next.1
+ - @backstage/plugin-api-docs@0.11.11-next.1
+ - @backstage/plugin-techdocs@1.10.11-next.1
+ - @backstage/plugin-catalog@1.24.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/plugin-search@1.4.18-next.1
+ - @backstage/plugin-home@0.7.12-next.1
+ - @backstage/plugin-org@0.6.31-next.1
+ - @backstage/plugin-app@0.1.1-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/frontend-defaults@0.1.1-next.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-search-common@1.2.14
+
+## 0.0.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder@1.26.0-next.0
+ - @backstage/frontend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-catalog@1.24.0-next.0
+ - @backstage/cli@0.28.0-next.0
+ - @backstage/plugin-scaffolder-react@1.13.0-next.0
+ - @backstage/plugin-api-docs@0.11.10-next.0
+ - @backstage/frontend-app-api@0.10.0-next.0
+ - @backstage/plugin-techdocs@1.10.10-next.0
+ - @backstage/app-defaults@1.5.12-next.0
+ - @backstage/core-compat-api@0.3.1-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/frontend-defaults@0.1.1-next.0
+ - @backstage/plugin-app@0.1.1-next.0
+ - @backstage/plugin-app-visualizer@0.1.11-next.0
+ - @backstage/plugin-catalog-graph@0.4.10-next.0
+ - @backstage/plugin-catalog-import@0.12.4-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/plugin-home@0.7.11-next.0
+ - @backstage/plugin-kubernetes@0.11.15-next.0
+ - @backstage/plugin-org@0.6.30-next.0
+ - @backstage/plugin-search@1.4.17-next.0
+ - @backstage/plugin-search-react@1.8.1-next.0
+ - @backstage/plugin-user-settings@0.8.13-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.7-next.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.16-next.0
+ - @backstage/plugin-notifications@0.3.2-next.0
+ - @backstage/plugin-permission-react@0.4.27-next.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-signals@0.0.11-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0
+ - @backstage/plugin-techdocs-react@1.2.9-next.0
+
+## 0.0.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/plugin-techdocs@1.10.9
+ - @backstage/plugin-catalog@1.23.0
+ - @backstage/plugin-home@0.7.10
+ - @backstage/cli@0.27.1
+ - @backstage/frontend-plugin-api@0.8.0
+ - @backstage/plugin-techdocs-react@1.2.8
+ - @backstage/core-app-api@1.15.0
+ - @backstage/frontend-app-api@0.9.0
+ - @backstage/core-compat-api@0.3.0
+ - @backstage/plugin-catalog-import@0.12.3
+ - @backstage/plugin-catalog-graph@0.4.9
+ - @backstage/plugin-user-settings@0.8.12
+ - @backstage/plugin-search-react@1.8.0
+ - @backstage/plugin-kubernetes@0.11.14
+ - @backstage/plugin-scaffolder@1.25.0
+ - @backstage/plugin-api-docs@0.11.9
+ - @backstage/plugin-search@1.4.16
+ - @backstage/plugin-org@0.6.29
+ - @backstage/integration-react@1.1.31
+ - @backstage/frontend-defaults@0.1.0
+ - @backstage/plugin-notifications@0.3.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-scaffolder-react@1.12.0
+ - @backstage/plugin-app@0.1.0
+ - @backstage/app-defaults@1.5.11
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.6
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8
+ - @backstage/plugin-kubernetes-cluster@0.0.15
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/plugin-signals@0.0.10
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14
+ - @backstage/plugin-app-visualizer@0.1.10
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## 0.0.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/plugin-techdocs@1.10.9-next.2
+ - @backstage/plugin-catalog@1.23.0-next.2
+ - @backstage/plugin-home@0.7.10-next.2
+ - @backstage/cli@0.27.1-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/plugin-scaffolder@1.25.0-next.2
+ - @backstage/plugin-notifications@0.3.1-next.2
+ - @backstage/plugin-scaffolder-react@1.12.0-next.2
+ - @backstage/app-defaults@1.5.11-next.1
+ - @backstage/plugin-catalog-import@0.12.3-next.2
+ - @backstage/plugin-app@0.1.0-next.2
+ - @backstage/plugin-search-react@1.8.0-next.2
+ - @backstage/core-compat-api@0.3.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-app-api@0.9.0-next.2
+ - @backstage/frontend-defaults@0.1.0-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-api-docs@0.11.9-next.2
+ - @backstage/plugin-auth-react@0.1.6-next.1
+ - @backstage/plugin-catalog-graph@0.4.9-next.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.2
+ - @backstage/plugin-kubernetes@0.11.14-next.2
+ - @backstage/plugin-org@0.6.29-next.2
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/plugin-search@1.4.16-next.2
+ - @backstage/plugin-signals@0.0.10-next.2
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.2
+ - @backstage/plugin-techdocs-react@1.2.8-next.2
+ - @backstage/plugin-user-settings@0.8.12-next.2
+ - @backstage/plugin-app-visualizer@0.1.10-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-search-common@1.2.14
+
+## 0.0.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.1-next.1
+ - @backstage/frontend-defaults@0.1.0-next.0
+ - @backstage/frontend-app-api@0.9.0-next.1
+ - @backstage/frontend-plugin-api@0.8.0-next.1
+ - @backstage/core-compat-api@0.3.0-next.1
+ - @backstage/plugin-app@0.1.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-graph@0.4.9-next.1
+ - @backstage/plugin-scaffolder-react@1.12.0-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.0
+ - @backstage/plugin-signals@0.0.10-next.1
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/app-defaults@1.5.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-api-docs@0.11.9-next.1
+ - @backstage/plugin-app-visualizer@0.1.10-next.1
+ - @backstage/plugin-auth-react@0.1.6-next.0
+ - @backstage/plugin-catalog@1.22.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-import@0.12.3-next.1
+ - @backstage/plugin-home@0.7.10-next.1
+ - @backstage/plugin-kubernetes@0.11.14-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.1
+ - @backstage/plugin-notifications@0.3.1-next.1
+ - @backstage/plugin-org@0.6.29-next.1
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder@1.25.0-next.1
+ - @backstage/plugin-search@1.4.16-next.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-search-react@1.8.0-next.1
+ - @backstage/plugin-techdocs@1.10.9-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.1
+ - @backstage/plugin-techdocs-react@1.2.8-next.1
+ - @backstage/plugin-user-settings@0.8.12-next.1
+
+## 0.0.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.8.0-next.0
+ - @backstage/plugin-techdocs-react@1.2.8-next.0
+ - @backstage/frontend-app-api@0.9.0-next.0
+ - @backstage/core-compat-api@0.2.9-next.0
+ - @backstage/plugin-catalog-import@0.12.3-next.0
+ - @backstage/plugin-catalog-graph@0.4.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-user-settings@0.8.12-next.0
+ - @backstage/plugin-search-react@1.8.0-next.0
+ - @backstage/plugin-kubernetes@0.11.14-next.0
+ - @backstage/plugin-scaffolder@1.25.0-next.0
+ - @backstage/plugin-api-docs@0.11.9-next.0
+ - @backstage/plugin-techdocs@1.10.9-next.0
+ - @backstage/plugin-catalog@1.22.1-next.0
+ - @backstage/plugin-search@1.4.16-next.0
+ - @backstage/plugin-home@0.7.10-next.0
+ - @backstage/plugin-org@0.6.29-next.0
+ - @backstage/plugin-scaffolder-react@1.12.0-next.0
+ - @backstage/plugin-app@0.1.0-next.0
+ - @backstage/cli@0.27.1-next.0
+ - @backstage/plugin-signals@0.0.10-next.0
+ - @backstage/plugin-app-visualizer@0.1.10-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7
+ - @backstage/plugin-notifications@0.3.1-next.0
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-search-common@1.2.14
+
+## 0.0.14
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0
+ - @backstage/plugin-scaffolder@1.24.0
+ - @backstage/frontend-plugin-api@0.7.0
+ - @backstage/plugin-scaffolder-react@1.11.0
+ - @backstage/cli@0.27.0
+ - @backstage/plugin-notifications@0.3.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-search-react@1.7.14
+ - @backstage/plugin-home@0.7.9
+ - @backstage/plugin-techdocs@1.10.8
+ - @backstage/core-components@0.14.10
+ - @backstage/plugin-api-docs@0.11.8
+ - @backstage/frontend-app-api@0.8.0
+ - @backstage/core-compat-api@0.2.8
+ - @backstage/plugin-app-visualizer@0.1.9
+ - @backstage/plugin-catalog-graph@0.4.8
+ - @backstage/plugin-catalog-import@0.12.2
+ - @backstage/plugin-org@0.6.28
+ - @backstage/plugin-search@1.4.15
+ - @backstage/plugin-user-settings@0.8.11
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-kubernetes@0.11.13
+ - @backstage/core-app-api@1.14.2
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7
+ - @backstage/plugin-kubernetes-cluster@0.0.14
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-signals@0.0.9
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13
+ - @backstage/plugin-techdocs-react@1.2.7
+
+## 0.0.14-next.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder@1.24.0-next.3
+ - @backstage/frontend-plugin-api@0.7.0-next.3
+ - @backstage/plugin-notifications@0.3.0-next.1
+ - @backstage/cli@0.27.0-next.4
+ - @backstage/plugin-techdocs@1.10.8-next.3
+ - @backstage/plugin-api-docs@0.11.8-next.3
+ - @backstage/plugin-catalog@1.22.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/core-compat-api@0.2.8-next.3
+ - @backstage/frontend-app-api@0.7.5-next.3
+ - @backstage/plugin-app-visualizer@0.1.9-next.3
+ - @backstage/plugin-catalog-graph@0.4.8-next.4
+ - @backstage/plugin-catalog-import@0.12.2-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/plugin-home@0.7.9-next.3
+ - @backstage/plugin-kubernetes@0.11.13-next.3
+ - @backstage/plugin-org@0.6.28-next.3
+ - @backstage/plugin-search@1.4.15-next.3
+ - @backstage/plugin-search-react@1.7.14-next.3
+ - @backstage/plugin-user-settings@0.8.11-next.3
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.3
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.1
+ - @backstage/plugin-techdocs-react@1.2.7-next.1
+
+## 0.0.14-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.11.0-next.2
+ - @backstage/plugin-catalog@1.22.0-next.2
+ - @backstage/frontend-plugin-api@0.7.0-next.2
+ - @backstage/cli@0.27.0-next.3
+ - @backstage/frontend-app-api@0.7.5-next.2
+ - @backstage/core-compat-api@0.2.8-next.2
+ - @backstage/plugin-app-visualizer@0.1.9-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-search-react@1.7.14-next.2
+ - @backstage/plugin-search@1.4.15-next.2
+ - @backstage/plugin-api-docs@0.11.8-next.2
+ - @backstage/plugin-techdocs@1.10.8-next.2
+ - @backstage/plugin-scaffolder@1.24.0-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-graph@0.4.8-next.3
+ - @backstage/plugin-catalog-import@0.12.2-next.2
+ - @backstage/plugin-org@0.6.28-next.2
+ - @backstage/plugin-user-settings@0.8.11-next.2
+ - @backstage/plugin-home@0.7.9-next.2
+ - @backstage/plugin-kubernetes@0.11.13-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.2
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## 0.0.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.0-next.2
+ - @backstage/plugin-catalog-graph@0.4.8-next.2
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-api-docs@0.11.8-next.1
+ - @backstage/plugin-app-visualizer@0.1.9-next.1
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-import@0.12.2-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-home@0.7.9-next.1
+ - @backstage/plugin-kubernetes@0.11.13-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-org@0.6.28-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-scaffolder@1.23.1-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/plugin-search@1.4.15-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+ - @backstage/plugin-user-settings@0.8.11-next.1
+
+## 0.0.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/plugin-kubernetes@0.11.13-next.1
+ - @backstage/frontend-plugin-api@0.6.8-next.1
+ - @backstage/cli@0.27.0-next.1
+ - @backstage/plugin-scaffolder@1.23.1-next.1
+ - @backstage/core-compat-api@0.2.8-next.1
+ - @backstage/plugin-user-settings@0.8.11-next.1
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-search@1.4.15-next.1
+ - @backstage/plugin-api-docs@0.11.8-next.1
+ - @backstage/plugin-catalog-graph@0.4.8-next.1
+ - @backstage/plugin-catalog-import@0.12.2-next.1
+ - @backstage/plugin-home@0.7.9-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+ - @backstage/plugin-org@0.6.28-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/plugin-app-visualizer@0.1.9-next.1
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
## 0.0.14-next.0
### Patch Changes
diff --git a/packages/app-next/package.json b/packages/app-next/package.json
index b4b9f69c51..bff21c3b89 100644
--- a/packages/app-next/package.json
+++ b/packages/app-next/package.json
@@ -1,16 +1,38 @@
{
"name": "example-app-next",
- "version": "0.0.14-next.0",
+ "version": "0.0.16-next.1",
+ "backstage": {
+ "role": "frontend"
+ },
"private": true,
"repository": {
"type": "git",
"url": "https://github.com/backstage/backstage",
"directory": "packages/app-next"
},
- "backstage": {
- "role": "frontend"
+ "license": "Apache-2.0",
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "build": "backstage-cli package build",
+ "clean": "backstage-cli package clean",
+ "lint": "backstage-cli package lint",
+ "start": "backstage-cli package start --config ../../app-config.yaml --config app-config.yaml",
+ "test": "backstage-cli package test"
+ },
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
},
- "bundled": true,
"dependencies": {
"@backstage/app-defaults": "workspace:^",
"@backstage/catalog-model": "workspace:^",
@@ -21,9 +43,11 @@
"@backstage/core-components": "workspace:^",
"@backstage/core-plugin-api": "workspace:^",
"@backstage/frontend-app-api": "workspace:^",
+ "@backstage/frontend-defaults": "workspace:^",
"@backstage/frontend-plugin-api": "workspace:^",
"@backstage/integration-react": "workspace:^",
"@backstage/plugin-api-docs": "workspace:^",
+ "@backstage/plugin-app": "workspace:^",
"@backstage/plugin-app-visualizer": "workspace:^",
"@backstage/plugin-auth-react": "workspace:^",
"@backstage/plugin-catalog": "workspace:^",
@@ -53,23 +77,19 @@
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.61",
"@octokit/rest": "^19.0.3",
- "@vitejs/plugin-react": "^4.0.4",
"history": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router": "^6.3.0",
"react-router-dom": "^6.3.0",
"react-use": "^17.2.4",
- "vite": "^4.4.9",
- "vite-plugin-html": "^3.2.0",
- "vite-plugin-node-polyfills": "^0.22.0",
"zen-observable": "^0.10.0"
},
"devDependencies": {
"@backstage/test-utils": "workspace:^",
"@testing-library/dom": "^10.0.0",
"@testing-library/jest-dom": "^6.0.0",
- "@testing-library/react": "^15.0.0",
+ "@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.0.0",
"@types/jquery": "^3.3.34",
"@types/react": "*",
@@ -77,27 +97,5 @@
"@types/zen-observable": "^0.8.0",
"cross-env": "^7.0.0"
},
- "scripts": {
- "start": "backstage-cli package start --config ../../app-config.yaml --config app-config.yaml",
- "build": "backstage-cli package build",
- "clean": "backstage-cli package clean",
- "test": "backstage-cli package test",
- "lint": "backstage-cli package lint"
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- },
- "files": [
- "dist"
- ],
- "license": "Apache-2.0"
+ "bundled": true
}
diff --git a/packages/app-next/src/App.tsx b/packages/app-next/src/App.tsx
index b57c680474..79adc13daf 100644
--- a/packages/app-next/src/App.tsx
+++ b/packages/app-next/src/App.tsx
@@ -15,7 +15,7 @@
*/
import React from 'react';
-import { createApp } from '@backstage/frontend-app-api';
+import { createApp } from '@backstage/frontend-defaults';
import { pagesPlugin } from './examples/pagesPlugin';
import notFoundErrorPage from './examples/notFoundErrorPageExtension';
import userSettingsPlugin from '@backstage/plugin-user-settings/alpha';
@@ -26,10 +26,15 @@ import homePlugin, {
import {
coreExtensionData,
createExtension,
- createApiExtension,
- createExtensionOverrides,
+ ApiBlueprint,
+ createFrontendModule,
} from '@backstage/frontend-plugin-api';
-import techdocsPlugin from '@backstage/plugin-techdocs/alpha';
+import {
+ techdocsPlugin,
+ TechDocsIndexPage,
+ TechDocsReaderPage,
+ EntityTechdocsContent,
+} from '@backstage/plugin-techdocs';
import appVisualizerPlugin from '@backstage/plugin-app-visualizer';
import { homePage } from './HomePage';
import { convertLegacyApp } from '@backstage/core-compat-api';
@@ -43,7 +48,10 @@ import {
scmIntegrationsApiRef,
} from '@backstage/integration-react';
import kubernetesPlugin from '@backstage/plugin-kubernetes/alpha';
-import { signInPageOverrides } from './overrides/SignInPage';
+import { signInPageModule } from './overrides/SignInPage';
+import { convertLegacyPlugin } from '@backstage/core-compat-api';
+import { convertLegacyPageExtension } from '@backstage/core-compat-api';
+import { convertLegacyEntityContentExtension } from '@backstage/plugin-catalog-react/alpha';
/*
@@ -74,28 +82,67 @@ TODO:
/* app.tsx */
-const homePageExtension = createExtension({
- name: 'myhomepage',
- attachTo: { id: 'page:home', input: 'props' },
- output: {
- children: coreExtensionData.reactElement,
- title: titleExtensionDataRef,
- },
- factory() {
- return { children: homePage, title: 'just a title' };
- },
+/**
+ * TechDocs does support the new frontend system so this conversion is not
+ * strictly necessary, but it's left here to provide a demo of the utilities for
+ * converting legacy plugins.
+ */
+const convertedTechdocsPlugin = convertLegacyPlugin(techdocsPlugin, {
+ extensions: [
+ // TODO: We likely also need a way to convert an entire tree similar to collectLegacyRoutes
+ convertLegacyPageExtension(TechDocsIndexPage, {
+ name: 'index',
+ defaultPath: '/docs',
+ }),
+ convertLegacyPageExtension(TechDocsReaderPage, {
+ defaultPath: '/docs/:namespace/:kind/:name/*',
+ }),
+ convertLegacyEntityContentExtension(EntityTechdocsContent),
+ ],
});
-const scmAuthExtension = createApiExtension({
- factory: ScmAuth.createDefaultApiFactory(),
+const customHomePageModule = createFrontendModule({
+ pluginId: 'home',
+ extensions: [
+ createExtension({
+ name: 'my-home-page',
+ attachTo: { id: 'page:home', input: 'props' },
+ output: [coreExtensionData.reactElement, titleExtensionDataRef],
+ factory() {
+ return [
+ coreExtensionData.reactElement(homePage),
+ titleExtensionDataRef('just a title'),
+ ];
+ },
+ }),
+ ],
});
-const scmIntegrationApi = createApiExtension({
- factory: createApiFactory({
- api: scmIntegrationsApiRef,
- deps: { configApi: configApiRef },
- factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
- }),
+const scmModule = createFrontendModule({
+ pluginId: 'app',
+ extensions: [
+ ApiBlueprint.make({
+ name: 'scm-auth',
+ params: {
+ factory: ScmAuth.createDefaultApiFactory(),
+ },
+ }),
+ ApiBlueprint.make({
+ name: 'scm-integrations',
+ params: {
+ factory: createApiFactory({
+ api: scmIntegrationsApiRef,
+ deps: { configApi: configApiRef },
+ factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
+ }),
+ },
+ }),
+ ],
+});
+
+const notFoundErrorPageModule = createFrontendModule({
+ pluginId: 'app',
+ extensions: [notFoundErrorPage],
});
const collectedLegacyPlugins = convertLegacyApp(
@@ -107,21 +154,16 @@ const collectedLegacyPlugins = convertLegacyApp(
const app = createApp({
features: [
pagesPlugin,
- techdocsPlugin,
+ convertedTechdocsPlugin,
userSettingsPlugin,
homePlugin,
appVisualizerPlugin,
kubernetesPlugin,
- signInPageOverrides,
+ signInPageModule,
+ scmModule,
+ notFoundErrorPageModule,
+ customHomePageModule,
...collectedLegacyPlugins,
- createExtensionOverrides({
- extensions: [
- homePageExtension,
- scmAuthExtension,
- scmIntegrationApi,
- notFoundErrorPage,
- ],
- }),
],
/* Handled through config instead */
// bindRoutes({ bind }) {
diff --git a/packages/app-next/src/examples/notFoundErrorPageExtension.tsx b/packages/app-next/src/examples/notFoundErrorPageExtension.tsx
index f5108c6c15..458e716910 100644
--- a/packages/app-next/src/examples/notFoundErrorPageExtension.tsx
+++ b/packages/app-next/src/examples/notFoundErrorPageExtension.tsx
@@ -52,6 +52,7 @@ export function CustomNotFoundErrorPage() {
}
export default createComponentExtension({
+ name: 'not-found-error-page',
ref: coreComponentRefs.notFoundErrorPage,
loader: { sync: () => CustomNotFoundErrorPage },
});
diff --git a/packages/app-next/src/examples/pagesPlugin.tsx b/packages/app-next/src/examples/pagesPlugin.tsx
index 826040a6cb..8eca7d1e6c 100644
--- a/packages/app-next/src/examples/pagesPlugin.tsx
+++ b/packages/app-next/src/examples/pagesPlugin.tsx
@@ -17,11 +17,11 @@
import React from 'react';
import { Link } from '@backstage/core-components';
import {
- createPageExtension,
- createPlugin,
+ createFrontendPlugin,
createRouteRef,
createExternalRouteRef,
useRouteRef,
+ PageBlueprint,
} from '@backstage/frontend-plugin-api';
import { Route, Routes } from 'react-router-dom';
@@ -37,93 +37,101 @@ export const pageXRouteRef = createRouteRef();
// path: '/page2',
// });
-const IndexPage = createPageExtension({
+const IndexPage = PageBlueprint.make({
name: 'index',
- defaultPath: '/',
- routeRef: indexRouteRef,
- loader: async () => {
- const Component = () => {
- const page1Link = useRouteRef(page1RouteRef);
- return (
-
- op
+ params: {
+ defaultPath: '/',
+ routeRef: indexRouteRef,
+ loader: async () => {
+ const Component = () => {
+ const page1Link = useRouteRef(page1RouteRef);
+ return (
- Page 1
-
-
- Home
-
-
- GraphiQL
-
-
- Search
-
-
- Settings
-
-
- );
- };
- return ;
- },
-});
-
-const Page1 = createPageExtension({
- name: 'page1',
- defaultPath: '/page1',
- routeRef: page1RouteRef,
- loader: async () => {
- const Component = () => {
- const indexLink = useRouteRef(indexRouteRef);
- const xLink = useRouteRef(externalPageXRouteRef);
- // const page2Link = useRouteRef(page2RouteRef);
-
- return (
-
-
This is page 1
-
Go back
-
Page 2
- {/*
Page 2 */}
-
Page X
-
-
- Sub-page content:
+ op
+ {page1Link && (
+
+ Page 1
+
+ )}
-
- This is also page 1} />
- This is page 2} />
-
+ Home
+
+
+ GraphiQL
+
+
+ Search
+
+
+ Settings
-
- );
- };
- return ;
+ );
+ };
+ return ;
+ },
},
});
-const ExternalPage = createPageExtension({
+const Page1 = PageBlueprint.make({
+ name: 'page1',
+ params: {
+ defaultPath: '/page1',
+ routeRef: page1RouteRef,
+ loader: async () => {
+ const Component = () => {
+ const indexLink = useRouteRef(indexRouteRef);
+ const xLink = useRouteRef(externalPageXRouteRef);
+ // const page2Link = useRouteRef(page2RouteRef);
+
+ return (
+
+
This is page 1
+ {indexLink &&
Go back}
+
Page 2
+ {/*
Page 2 */}
+ {xLink &&
Page X}
+
+
+ Sub-page content:
+
+
+ This is also page 1} />
+ This is page 2} />
+
+
+
+
+ );
+ };
+ return ;
+ },
+ },
+});
+
+const ExternalPage = PageBlueprint.make({
name: 'pageX',
- defaultPath: '/pageX',
- routeRef: pageXRouteRef,
- loader: async () => {
- const Component = () => {
- const indexLink = useRouteRef(indexRouteRef);
- // const pageXLink = useRouteRef(pageXRouteRef);
+ params: {
+ defaultPath: '/pageX',
+ routeRef: pageXRouteRef,
+ loader: async () => {
+ const Component = () => {
+ const indexLink = useRouteRef(indexRouteRef);
+ // const pageXLink = useRouteRef(pageXRouteRef);
- return (
-
-
This is page X
- Go back
-
- );
- };
- return ;
+ return (
+
+
This is page X
+ {indexLink && Go back}
+
+ );
+ };
+ return ;
+ },
},
});
-export const pagesPlugin = createPlugin({
+export const pagesPlugin = createFrontendPlugin({
id: 'pages',
// routes: {
// index: indexRouteRef,
diff --git a/packages/app-next/src/index-public-experimental.tsx b/packages/app-next/src/index-public-experimental.tsx
index 56bc698ffd..f258a660e3 100644
--- a/packages/app-next/src/index-public-experimental.tsx
+++ b/packages/app-next/src/index-public-experimental.tsx
@@ -14,36 +14,12 @@
* limitations under the License.
*/
-import React from 'react';
import ReactDOM from 'react-dom/client';
-import { CookieAuthRedirect } from '@backstage/plugin-auth-react';
-import { createApp } from '@backstage/frontend-app-api';
-import { signInPageOverrides } from './overrides/SignInPage';
-import {
- coreExtensionData,
- createExtension,
- createExtensionOverrides,
-} from '@backstage/frontend-plugin-api';
+import { signInPageModule } from './overrides/SignInPage';
+import { createPublicSignInApp } from '@backstage/frontend-defaults';
-const authRedirectExtension = createExtension({
- namespace: 'app',
- name: 'layout',
- attachTo: { id: 'app/root', input: 'children' },
- output: {
- element: coreExtensionData.reactElement,
- },
- factory: () => ({
- element: ,
- }),
-});
-
-const app = createApp({
- features: [
- signInPageOverrides,
- createExtensionOverrides({
- extensions: [authRedirectExtension],
- }),
- ],
+const app = createPublicSignInApp({
+ features: [signInPageModule],
});
ReactDOM.createRoot(document.getElementById('root')!).render(app.createRoot());
diff --git a/packages/app-next/src/overrides/SignInPage.tsx b/packages/app-next/src/overrides/SignInPage.tsx
index 364a749293..f1e37a241b 100644
--- a/packages/app-next/src/overrides/SignInPage.tsx
+++ b/packages/app-next/src/overrides/SignInPage.tsx
@@ -17,15 +17,19 @@
import React from 'react';
import { SignInPage } from '@backstage/core-components';
import {
- createExtensionOverrides,
- createSignInPageExtension,
+ SignInPageBlueprint,
+ createFrontendModule,
} from '@backstage/frontend-plugin-api';
-const signInPage = createSignInPageExtension({
+const signInPage = SignInPageBlueprint.make({
name: 'guest',
- loader: async () => props => ,
+ params: {
+ loader: async () => props =>
+ ,
+ },
});
-export const signInPageOverrides = createExtensionOverrides({
+export const signInPageModule = createFrontendModule({
+ pluginId: 'app',
extensions: [signInPage],
});
diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md
index 4ba5430905..f72e393af7 100644
--- a/packages/app/CHANGELOG.md
+++ b/packages/app/CHANGELOG.md
@@ -1,5 +1,456 @@
# example-app
+## 0.2.102-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.1-next.1
+ - @backstage/cli@0.28.0-next.1
+ - @backstage/plugin-scaffolder@1.26.0-next.1
+ - @backstage/plugin-signals@0.0.11-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.16-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.1
+ - @backstage/integration-react@1.2.0-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.17-next.1
+ - @backstage/frontend-app-api@0.10.0-next.1
+ - @backstage/core-plugin-api@1.10.0-next.1
+ - @backstage/plugin-permission-react@0.4.27-next.1
+ - @backstage/plugin-scaffolder-react@1.13.0-next.1
+ - @backstage/plugin-catalog-import@0.12.5-next.1
+ - @backstage/plugin-techdocs-react@1.2.9-next.1
+ - @backstage/app-defaults@1.5.12-next.1
+ - @backstage/core-app-api@1.15.1-next.1
+ - @backstage/plugin-catalog-graph@0.4.11-next.1
+ - @backstage/plugin-catalog-react@1.14.0-next.1
+ - @backstage/plugin-notifications@0.3.2-next.1
+ - @backstage/plugin-user-settings@0.8.14-next.1
+ - @backstage/plugin-search-react@1.8.1-next.1
+ - @backstage/plugin-auth-react@0.1.7-next.1
+ - @backstage/plugin-kubernetes@0.11.16-next.1
+ - @backstage/plugin-api-docs@0.11.11-next.1
+ - @backstage/plugin-devtools@0.1.19-next.1
+ - @backstage/plugin-techdocs@1.10.11-next.1
+ - @backstage/plugin-catalog@1.24.0-next.1
+ - @backstage/theme@0.5.8-next.0
+ - @backstage/plugin-search@1.4.18-next.1
+ - @backstage/plugin-home@0.7.12-next.1
+ - @backstage/plugin-org@0.6.31-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-search-common@1.2.14
+
+## 0.2.102-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder@1.26.0-next.0
+ - @backstage/plugin-catalog@1.24.0-next.0
+ - @backstage/cli@0.28.0-next.0
+ - @backstage/plugin-scaffolder-react@1.13.0-next.0
+ - @backstage/plugin-api-docs@0.11.10-next.0
+ - @backstage/frontend-app-api@0.10.0-next.0
+ - @backstage/plugin-techdocs@1.10.10-next.0
+ - @backstage/app-defaults@1.5.12-next.0
+ - @backstage/core-components@0.15.1-next.0
+ - @backstage/core-plugin-api@1.10.0-next.0
+ - @backstage/plugin-catalog-graph@0.4.10-next.0
+ - @backstage/plugin-catalog-import@0.12.4-next.0
+ - @backstage/plugin-catalog-react@1.13.1-next.0
+ - @backstage/plugin-devtools@0.1.19-next.0
+ - @backstage/plugin-home@0.7.11-next.0
+ - @backstage/plugin-kubernetes@0.11.15-next.0
+ - @backstage/plugin-org@0.6.30-next.0
+ - @backstage/plugin-search@1.4.17-next.0
+ - @backstage/plugin-search-react@1.8.1-next.0
+ - @backstage/plugin-user-settings@0.8.13-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.15.1-next.0
+ - @backstage/integration-react@1.1.32-next.0
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.7-next.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.9-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.16-next.0
+ - @backstage/plugin-notifications@0.3.2-next.0
+ - @backstage/plugin-permission-react@0.4.27-next.0
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-signals@0.0.11-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.15-next.0
+ - @backstage/plugin-techdocs-react@1.2.9-next.0
+
+## 0.2.101
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.15.0
+ - @backstage/plugin-catalog-react@1.13.0
+ - @backstage/plugin-techdocs@1.10.9
+ - @backstage/plugin-catalog@1.23.0
+ - @backstage/plugin-home@0.7.10
+ - @backstage/cli@0.27.1
+ - @backstage/plugin-techdocs-react@1.2.8
+ - @backstage/core-app-api@1.15.0
+ - @backstage/frontend-app-api@0.9.0
+ - @backstage/plugin-catalog-import@0.12.3
+ - @backstage/plugin-catalog-graph@0.4.9
+ - @backstage/plugin-user-settings@0.8.12
+ - @backstage/plugin-search-react@1.8.0
+ - @backstage/plugin-kubernetes@0.11.14
+ - @backstage/plugin-scaffolder@1.25.0
+ - @backstage/plugin-api-docs@0.11.9
+ - @backstage/plugin-devtools@0.1.18
+ - @backstage/plugin-search@1.4.16
+ - @backstage/plugin-org@0.6.29
+ - @backstage/integration-react@1.1.31
+ - @backstage/plugin-notifications@0.3.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-scaffolder-react@1.12.0
+ - @backstage/app-defaults@1.5.11
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/core-plugin-api@1.9.4
+ - @backstage/theme@0.5.7
+ - @backstage/plugin-auth-react@0.1.6
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8
+ - @backstage/plugin-kubernetes-cluster@0.0.15
+ - @backstage/plugin-permission-react@0.4.26
+ - @backstage/plugin-signals@0.0.10
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14
+ - @backstage/config@1.2.0
+ - @backstage/plugin-search-common@1.2.14
+
+## 0.2.101-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.14.11-next.1
+ - @backstage/plugin-catalog-react@1.13.0-next.2
+ - @backstage/plugin-techdocs@1.10.9-next.2
+ - @backstage/plugin-catalog@1.23.0-next.2
+ - @backstage/plugin-home@0.7.10-next.2
+ - @backstage/cli@0.27.1-next.2
+ - @backstage/core-app-api@1.14.3-next.0
+ - @backstage/integration-react@1.1.31-next.0
+ - @backstage/plugin-scaffolder@1.25.0-next.2
+ - @backstage/plugin-notifications@0.3.1-next.2
+ - @backstage/plugin-scaffolder-react@1.12.0-next.2
+ - @backstage/app-defaults@1.5.11-next.1
+ - @backstage/plugin-catalog-import@0.12.3-next.2
+ - @backstage/plugin-search-react@1.8.0-next.2
+ - @backstage/core-plugin-api@1.9.4-next.0
+ - @backstage/frontend-app-api@0.9.0-next.2
+ - @backstage/theme@0.5.7-next.0
+ - @backstage/plugin-api-docs@0.11.9-next.2
+ - @backstage/plugin-auth-react@0.1.6-next.1
+ - @backstage/plugin-catalog-graph@0.4.9-next.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.2
+ - @backstage/plugin-kubernetes@0.11.14-next.2
+ - @backstage/plugin-org@0.6.29-next.2
+ - @backstage/plugin-permission-react@0.4.26-next.0
+ - @backstage/plugin-search@1.4.16-next.2
+ - @backstage/plugin-signals@0.0.10-next.2
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.2
+ - @backstage/plugin-techdocs-react@1.2.8-next.2
+ - @backstage/plugin-user-settings@0.8.12-next.2
+ - @backstage/plugin-devtools@0.1.18-next.2
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-search-common@1.2.14
+
+## 0.2.101-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.1-next.1
+ - @backstage/frontend-app-api@0.9.0-next.1
+ - @backstage/core-components@0.14.11-next.0
+ - @backstage/plugin-catalog-graph@0.4.9-next.1
+ - @backstage/plugin-scaffolder-react@1.12.0-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.8-next.0
+ - @backstage/plugin-signals@0.0.10-next.1
+ - @backstage/plugin-catalog-react@1.12.4-next.1
+ - @backstage/app-defaults@1.5.11-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-api-docs@0.11.9-next.1
+ - @backstage/plugin-auth-react@0.1.6-next.0
+ - @backstage/plugin-catalog@1.22.1-next.1
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-import@0.12.3-next.1
+ - @backstage/plugin-devtools@0.1.18-next.1
+ - @backstage/plugin-home@0.7.10-next.1
+ - @backstage/plugin-kubernetes@0.11.14-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.1
+ - @backstage/plugin-notifications@0.3.1-next.1
+ - @backstage/plugin-org@0.6.29-next.1
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-scaffolder@1.25.0-next.1
+ - @backstage/plugin-search@1.4.16-next.1
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-search-react@1.8.0-next.1
+ - @backstage/plugin-techdocs@1.10.9-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.1
+ - @backstage/plugin-techdocs-react@1.2.8-next.1
+ - @backstage/plugin-user-settings@0.8.12-next.1
+
+## 0.2.101-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.2.8-next.0
+ - @backstage/frontend-app-api@0.9.0-next.0
+ - @backstage/plugin-catalog-import@0.12.3-next.0
+ - @backstage/plugin-catalog-graph@0.4.9-next.0
+ - @backstage/plugin-catalog-react@1.12.4-next.0
+ - @backstage/plugin-user-settings@0.8.12-next.0
+ - @backstage/plugin-search-react@1.8.0-next.0
+ - @backstage/plugin-kubernetes@0.11.14-next.0
+ - @backstage/plugin-scaffolder@1.25.0-next.0
+ - @backstage/plugin-api-docs@0.11.9-next.0
+ - @backstage/plugin-devtools@0.1.18-next.0
+ - @backstage/plugin-techdocs@1.10.9-next.0
+ - @backstage/plugin-catalog@1.22.1-next.0
+ - @backstage/plugin-search@1.4.16-next.0
+ - @backstage/plugin-home@0.7.10-next.0
+ - @backstage/plugin-org@0.6.29-next.0
+ - @backstage/plugin-scaffolder-react@1.12.0-next.0
+ - @backstage/cli@0.27.1-next.0
+ - @backstage/plugin-signals@0.0.10-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.14-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.15-next.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2
+ - @backstage/core-components@0.14.10
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7
+ - @backstage/plugin-notifications@0.3.1-next.0
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-search-common@1.2.14
+
+## 0.2.100
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.22.0
+ - @backstage/plugin-scaffolder@1.24.0
+ - @backstage/plugin-scaffolder-react@1.11.0
+ - @backstage/cli@0.27.0
+ - @backstage/plugin-notifications@0.3.0
+ - @backstage/plugin-catalog-react@1.12.3
+ - @backstage/plugin-search-react@1.7.14
+ - @backstage/plugin-home@0.7.9
+ - @backstage/plugin-techdocs@1.10.8
+ - @backstage/core-components@0.14.10
+ - @backstage/plugin-api-docs@0.11.8
+ - @backstage/frontend-app-api@0.8.0
+ - @backstage/plugin-catalog-graph@0.4.8
+ - @backstage/plugin-catalog-import@0.12.2
+ - @backstage/plugin-devtools@0.1.17
+ - @backstage/plugin-org@0.6.28
+ - @backstage/plugin-search@1.4.15
+ - @backstage/plugin-user-settings@0.8.11
+ - @backstage/plugin-search-common@1.2.14
+ - @backstage/plugin-kubernetes@0.11.13
+ - @backstage/core-app-api@1.14.2
+ - @backstage/plugin-auth-react@0.1.5
+ - @backstage/catalog-model@1.6.0
+ - @backstage/app-defaults@1.5.10
+ - @backstage/config@1.2.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7
+ - @backstage/plugin-kubernetes-cluster@0.0.14
+ - @backstage/plugin-permission-react@0.4.25
+ - @backstage/plugin-signals@0.0.9
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13
+ - @backstage/plugin-techdocs-react@1.2.7
+
+## 0.2.100-next.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder@1.24.0-next.3
+ - @backstage/plugin-notifications@0.3.0-next.1
+ - @backstage/cli@0.27.0-next.4
+ - @backstage/plugin-techdocs@1.10.8-next.3
+ - @backstage/plugin-api-docs@0.11.8-next.3
+ - @backstage/plugin-catalog@1.22.0-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/frontend-app-api@0.7.5-next.3
+ - @backstage/plugin-catalog-graph@0.4.8-next.4
+ - @backstage/plugin-catalog-import@0.12.2-next.3
+ - @backstage/plugin-catalog-react@1.12.3-next.3
+ - @backstage/plugin-devtools@0.1.17-next.3
+ - @backstage/plugin-home@0.7.9-next.3
+ - @backstage/plugin-kubernetes@0.11.13-next.3
+ - @backstage/plugin-org@0.6.28-next.3
+ - @backstage/plugin-search@1.4.15-next.3
+ - @backstage/plugin-search-react@1.7.14-next.3
+ - @backstage/plugin-user-settings@0.8.11-next.3
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.3
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.3
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.1
+ - @backstage/plugin-techdocs-react@1.2.7-next.1
+
+## 0.2.100-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.11.0-next.2
+ - @backstage/plugin-catalog@1.22.0-next.2
+ - @backstage/cli@0.27.0-next.3
+ - @backstage/frontend-app-api@0.7.5-next.2
+ - @backstage/plugin-search-common@1.2.14-next.1
+ - @backstage/plugin-search-react@1.7.14-next.2
+ - @backstage/plugin-search@1.4.15-next.2
+ - @backstage/plugin-api-docs@0.11.8-next.2
+ - @backstage/plugin-techdocs@1.10.8-next.2
+ - @backstage/plugin-scaffolder@1.24.0-next.2
+ - @backstage/plugin-catalog-react@1.12.3-next.2
+ - @backstage/plugin-catalog-graph@0.4.8-next.3
+ - @backstage/plugin-catalog-import@0.12.2-next.2
+ - @backstage/plugin-org@0.6.28-next.2
+ - @backstage/plugin-user-settings@0.8.11-next.2
+ - @backstage/plugin-devtools@0.1.17-next.2
+ - @backstage/plugin-home@0.7.9-next.2
+ - @backstage/plugin-kubernetes@0.11.13-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.1
+ - @backstage/app-defaults@1.5.10-next.2
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.2
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
+## 0.2.100-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.27.0-next.2
+ - @backstage/plugin-catalog-graph@0.4.8-next.2
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-api-docs@0.11.8-next.1
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-import@0.12.2-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-devtools@0.1.17-next.1
+ - @backstage/plugin-home@0.7.9-next.1
+ - @backstage/plugin-kubernetes@0.11.13-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-org@0.6.28-next.1
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-scaffolder@1.23.1-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/plugin-search@1.4.15-next.1
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+ - @backstage/plugin-user-settings@0.8.11-next.1
+
+## 0.2.100-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.10.8-next.1
+ - @backstage/plugin-catalog-react@1.12.3-next.1
+ - @backstage/frontend-app-api@0.7.5-next.1
+ - @backstage/plugin-kubernetes@0.11.13-next.1
+ - @backstage/cli@0.27.0-next.1
+ - @backstage/plugin-scaffolder@1.23.1-next.1
+ - @backstage/plugin-user-settings@0.8.11-next.1
+ - @backstage/plugin-search-react@1.7.14-next.1
+ - @backstage/plugin-catalog@1.21.2-next.1
+ - @backstage/plugin-search@1.4.15-next.1
+ - @backstage/plugin-api-docs@0.11.8-next.1
+ - @backstage/plugin-catalog-graph@0.4.8-next.1
+ - @backstage/plugin-catalog-import@0.12.2-next.1
+ - @backstage/plugin-home@0.7.9-next.1
+ - @backstage/plugin-kubernetes-cluster@0.0.14-next.1
+ - @backstage/plugin-org@0.6.28-next.1
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-permission-react@0.4.25-next.0
+ - @backstage/plugin-search-common@1.2.14-next.0
+ - @backstage/plugin-devtools@0.1.17-next.1
+ - @backstage/app-defaults@1.5.10-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/core-app-api@1.14.2-next.0
+ - @backstage/core-components@0.14.10-next.0
+ - @backstage/core-plugin-api@1.9.3
+ - @backstage/integration-react@1.1.30-next.0
+ - @backstage/theme@0.5.6
+ - @backstage/plugin-auth-react@0.1.5-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.0
+ - @backstage/plugin-notifications@0.2.4-next.0
+ - @backstage/plugin-signals@0.0.9-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.0
+ - @backstage/plugin-techdocs-react@1.2.7-next.0
+
## 0.2.100-next.0
### Patch Changes
diff --git a/packages/app/package.json b/packages/app/package.json
index 0468a2f7a8..e6eb6b9f20 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "example-app",
- "version": "0.2.100-next.0",
+ "version": "0.2.102-next.1",
"backstage": {
"role": "frontend"
},
@@ -74,15 +74,15 @@
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.61",
"@octokit/rest": "^19.0.3",
- "@vitejs/plugin-react": "^4.0.4",
+ "@vitejs/plugin-react": "^4.3.1",
"history": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router": "^6.3.0",
"react-router-dom": "^6.3.0",
"react-use": "^17.2.4",
- "vite": "^4.4.9",
- "vite-plugin-html": "^3.2.0",
+ "vite": "^5.0.0",
+ "vite-plugin-html": "^3.2.2",
"vite-plugin-node-polyfills": "^0.22.0",
"zen-observable": "^0.10.0"
},
@@ -91,7 +91,7 @@
"@playwright/test": "^1.32.3",
"@testing-library/dom": "^10.0.0",
"@testing-library/jest-dom": "^6.0.0",
- "@testing-library/react": "^15.0.0",
+ "@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.0.0",
"@types/jquery": "^3.3.34",
"@types/react": "*",
diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx
index d741dea098..2b0bb00929 100644
--- a/packages/app/src/App.tsx
+++ b/packages/app/src/App.tsx
@@ -73,8 +73,7 @@ import { DelayingComponentFieldExtension } from './components/scaffolder/customS
import { defaultPreviewTemplate } from './components/scaffolder/defaultPreviewTemplate';
import { searchPage } from './components/search/SearchPage';
import { providers } from './identityProviders';
-import * as plugins from './plugins';
-
+import { SignalsDisplay } from '@backstage/plugin-signals';
import { techDocsPage } from './components/techdocs/TechDocsPage';
import { RequirePermission } from '@backstage/plugin-permission-react';
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';
@@ -86,7 +85,6 @@ import { NotificationsPage } from '@backstage/plugin-notifications';
const app = createApp({
apis,
- plugins: Object.values(plugins),
icons: {
// Custom icon example
alert: AlarmIcon,
@@ -119,7 +117,10 @@ const routes = (
}>
{homePage}
- } />
+ }
+ />
}
@@ -217,6 +218,7 @@ export default app.createRoot(
<>
+
{routes}
diff --git a/packages/app/src/plugins.ts b/packages/app/src/plugins.ts
deleted file mode 100644
index 9280536997..0000000000
--- a/packages/app/src/plugins.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2020 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.
- */
-
-// TODO(Rugvip): This plugin is currently not part of the app element tree,
-// ideally we have an API for the context menu that permits that.
-export { homePlugin } from '@backstage/plugin-home';
-export { signalsPlugin } from '@backstage/plugin-signals';
diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md
index 94ab9afb6f..20926596c5 100644
--- a/packages/backend-app-api/CHANGELOG.md
+++ b/packages/backend-app-api/CHANGELOG.md
@@ -1,5 +1,214 @@
# @backstage/backend-app-api
+## 1.0.1-next.0
+
+### Patch Changes
+
+- 094eaa3: Remove references to in-repo backend-common
+- 04af116: The backend will no longer exit immediately if any plugin or modules fails to initialize. Instead, the backend will wait for all plugins and modules to either start up successfully or throw, and then shut down the backend if there were any initialization errors.
+
+ This fixes an issue where backend initialization errors in adjacent plugins during database schema migration could cause the database migrations to be stuck in a locked state.
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.4-next.0
+ - @backstage/plugin-auth-node@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.1-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
+
+## 1.0.0
+
+### Major Changes
+
+- ec1b4be: Release 1.0 of the new backend system! :tada:
+
+ The backend system is finally getting promoted to 1.0.0. This means that the API is now stable and breaking changes should not occur until version 2.0.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information what this means.
+
+ This release also marks the end of the old backend system based on `createRouter` exports. Going forward backend plugins packages will start to deprecate and later this year remove exports supporting the old backend system. If you would like to help out with this transition, see https://github.com/backstage/backstage/issues/26353 or consult the [migration guide](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating/#remove-support-for-the-old-backend-system).
+
+### Minor Changes
+
+- 19ff127: **BREAKING**: The deprecated `identityServiceFactory` and `tokenManagerServiceFactory` have been removed.
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- cd38da8: Deprecate the `featureDiscoveryServiceFactory` in favor of using `@backstage/backend-defaults#discoveryFeatureLoader` instead.
+- 8ccf784: All created backend instances now share a the same `process` exit listeners, and on exit the process will wait for all backend instances to shut down before exiting. This fixes the `EventEmitter` leak warnings in tests.
+- 6ed9264: chore(deps): bump `path-to-regexp` from 6.2.2 to 8.0.0
+- c246372: Updated the error message for missing service dependencies to include the plugin and module IDs.
+- 7f779c7: `auth.externalAccess` should be optional in the config schema
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- 51a69b5: Fix feature loaders in CJS double-default nested builds
+- 0b2a402: Updates to the config schema to match reality
+- Updated dependencies
+ - @backstage/backend-common@0.25.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/plugin-auth-node@0.5.2
+ - @backstage/plugin-permission-node@0.8.3
+ - @backstage/config-loader@1.9.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## 1.0.0-next.2
+
+### Major Changes
+
+- ec1b4be: Release 1.0 of the new backend system! :tada:
+
+ The backend system is finally getting promoted to 1.0.0. This means that the API is now stable and breaking changes should not occur until version 2.0.0, see our [package versioning policy](https://backstage.io/docs/overview/versioning-policy/#package-versioning-policy) for more information what this means.
+
+ This release also marks the end of the old backend system based on `createRouter` exports. Going forward backend plugins packages will start to deprecate and later this year remove exports supporting the old backend system. If you would like to help out with this transition, see https://github.com/backstage/backstage/issues/26353 or consult the [migration guide](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating/#remove-support-for-the-old-backend-system).
+
+### Patch Changes
+
+- 6ed9264: chore(deps): bump `path-to-regexp` from 6.2.2 to 8.0.0
+- c2b63ab: Updated dependency `supertest` to `^7.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.2
+ - @backstage/plugin-auth-node@0.5.2-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/config-loader@1.9.1-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.2
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## 0.10.0-next.1
+
+### Patch Changes
+
+- c246372: Updated the error message for missing service dependencies to include the plugin and module IDs.
+- Updated dependencies
+ - @backstage/backend-common@0.25.0-next.1
+ - @backstage/plugin-auth-node@0.5.2-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-node@0.8.3-next.1
+
+## 0.10.0-next.0
+
+### Minor Changes
+
+- 19ff127: **BREAKING**: The deprecated `identityServiceFactory` and `tokenManagerServiceFactory` have been removed.
+- d425fc4: **BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs.
+
+ This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config.
+
+ As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it.
+
+### Patch Changes
+
+- cd38da8: Deprecate the `featureDiscoveryServiceFactory` in favor of using `@backstage/backend-defaults#discoveryFeatureLoader` instead.
+- 7f779c7: `auth.externalAccess` should be optional in the config schema
+- 51a69b5: Fix feature loaders in CJS double-default nested builds
+- 0b2a402: Updates to the config schema to match reality
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/plugin-permission-node@0.8.3-next.0
+ - @backstage/backend-common@0.25.0-next.0
+ - @backstage/plugin-auth-node@0.5.2-next.0
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## 0.9.0
+
+### Minor Changes
+
+- da4fde5: **BREAKING**: Removed several deprecated service factories. These can instead be imported from `@backstage/backend-defaults` package.
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+- 389f5a4: Remove deprecated `urlReaderServiceFactory`, please import from `@backstage/backend-defaults/urlReader` instead.
+
+### Patch Changes
+
+- 8b13183: Added support for the latest version of `BackendFeature`s from `@backstage/backend-plugin-api`, including feature loaders.
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 7c5f3b0: Update the `ServiceRegister` implementation to enable registering multiple service implementations for a given service ref.
+- 80a0737: Added configuration for the `packages` options to config schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/config-loader@1.9.0
+ - @backstage/plugin-auth-node@0.5.0
+ - @backstage/plugin-permission-node@0.8.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## 0.8.1-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.5.0-next.3
+ - @backstage/plugin-permission-node@0.8.1-next.3
+
+## 0.8.1-next.2
+
+### Patch Changes
+
+- 8b13183: Added support for the latest version of `BackendFeature`s from `@backstage/backend-plugin-api`, including feature loaders.
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- 7c5f3b0: Update the `ServiceRegister` implementation to enable registering multiple service implementations for a given service ref.
+- 80a0737: Added configuration for the `packages` options to config schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/config-loader@1.9.0-next.2
+ - @backstage/plugin-auth-node@0.5.0-next.2
+ - @backstage/plugin-permission-node@0.8.1-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/cli-node@0.2.7
+ - @backstage/cli-common@0.1.14
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+
+## 0.8.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.0-next.1
+ - @backstage/plugin-permission-node@0.8.1-next.1
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/cli-common@0.1.14
+ - @backstage/cli-node@0.2.7
+ - @backstage/config@1.2.0
+ - @backstage/errors@1.2.4
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-node@0.4.18-next.1
+
## 0.8.1-next.0
### Patch Changes
diff --git a/packages/backend-app-api/api-report-alpha.md b/packages/backend-app-api/api-report-alpha.md
deleted file mode 100644
index e4769f4e72..0000000000
--- a/packages/backend-app-api/api-report-alpha.md
+++ /dev/null
@@ -1,17 +0,0 @@
-## API Report File for "@backstage/backend-app-api"
-
-> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
-
-```ts
-import { FeatureDiscoveryService } from '@backstage/backend-plugin-api/alpha';
-import { ServiceFactoryCompat } from '@backstage/backend-plugin-api';
-
-// @alpha (undocumented)
-export const featureDiscoveryServiceFactory: ServiceFactoryCompat<
- FeatureDiscoveryService,
- 'root',
- undefined
->;
-
-// (No @packageDocumentation comment for this package)
-```
diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md
deleted file mode 100644
index 7f9b54dd8f..0000000000
--- a/packages/backend-app-api/api-report.md
+++ /dev/null
@@ -1,368 +0,0 @@
-## API Report File for "@backstage/backend-app-api"
-
-> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
-
-```ts
-///
-
-import type { AppConfig } from '@backstage/config';
-import { AuthService } from '@backstage/backend-plugin-api';
-import { BackendFeature } from '@backstage/backend-plugin-api';
-import { CacheService } from '@backstage/backend-plugin-api';
-import { Config } from '@backstage/config';
-import { ConfigSchema } from '@backstage/config-loader';
-import { CorsOptions } from 'cors';
-import { DatabaseService } from '@backstage/backend-plugin-api';
-import { DiscoveryService } from '@backstage/backend-plugin-api';
-import { ErrorRequestHandler } from 'express';
-import { Express as Express_2 } from 'express';
-import { Format } from 'logform';
-import { Handler } from 'express';
-import { HelmetOptions } from 'helmet';
-import * as http from 'http';
-import { HttpAuthService } from '@backstage/backend-plugin-api';
-import { HttpRouterService } from '@backstage/backend-plugin-api';
-import { HumanDuration } from '@backstage/types';
-import { IdentityService } from '@backstage/backend-plugin-api';
-import { JsonObject } from '@backstage/types';
-import { LifecycleService } from '@backstage/backend-plugin-api';
-import { LoadConfigOptionsRemote } from '@backstage/config-loader';
-import { LoggerService } from '@backstage/backend-plugin-api';
-import { PermissionsService } from '@backstage/backend-plugin-api';
-import { RemoteConfigSourceOptions } from '@backstage/config-loader';
-import { RequestHandler } from 'express';
-import { RequestListener } from 'http';
-import { RootConfigService } from '@backstage/backend-plugin-api';
-import { RootHttpRouterService } from '@backstage/backend-plugin-api';
-import { RootLifecycleService } from '@backstage/backend-plugin-api';
-import { RootLoggerService } from '@backstage/backend-plugin-api';
-import { SchedulerService } from '@backstage/backend-plugin-api';
-import type { Server } from 'node:http';
-import { ServiceFactory } from '@backstage/backend-plugin-api';
-import { ServiceFactoryCompat } from '@backstage/backend-plugin-api';
-import { TokenManagerService } from '@backstage/backend-plugin-api';
-import { transport } from 'winston';
-import { UrlReaderService } from '@backstage/backend-plugin-api';
-import { UserInfoService } from '@backstage/backend-plugin-api';
-
-// @public @deprecated (undocumented)
-export const authServiceFactory: ServiceFactoryCompat<
- AuthService,
- 'plugin',
- undefined
->;
-
-// @public (undocumented)
-export interface Backend {
- // (undocumented)
- add(
- feature:
- | BackendFeature
- | Promise<{
- default: BackendFeature;
- }>,
- ): void;
- // @deprecated (undocumented)
- add(
- feature:
- | (() => BackendFeature)
- | Promise<{
- default: () => BackendFeature;
- }>,
- ): void;
- // (undocumented)
- start(): Promise;
- // (undocumented)
- stop(): Promise;
-}
-
-// @public @deprecated (undocumented)
-export const cacheServiceFactory: ServiceFactoryCompat<
- CacheService,
- 'plugin',
- undefined
->;
-
-// Warning: (ae-forgotten-export) The symbol "createConfigSecretEnumerator_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export const createConfigSecretEnumerator: typeof createConfigSecretEnumerator_2;
-
-// Warning: (ae-forgotten-export) The symbol "createHttpServer_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export const createHttpServer: typeof createHttpServer_2;
-
-// Warning: (ae-forgotten-export) The symbol "createLifecycleMiddleware_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated
-export const createLifecycleMiddleware: typeof createLifecycleMiddleware_2;
-
-// @public (undocumented)
-export function createSpecializedBackend(
- options: CreateSpecializedBackendOptions,
-): Backend;
-
-// @public (undocumented)
-export interface CreateSpecializedBackendOptions {
- // (undocumented)
- defaultServiceFactories: ServiceFactory[];
-}
-
-// @public @deprecated (undocumented)
-export const databaseServiceFactory: ServiceFactoryCompat<
- DatabaseService,
- 'plugin',
- undefined
->;
-
-// @public @deprecated
-export class DefaultRootHttpRouter implements RootHttpRouterService {
- // (undocumented)
- static create(options?: DefaultRootHttpRouterOptions): DefaultRootHttpRouter;
- // (undocumented)
- handler(): Handler;
- // (undocumented)
- use(path: string, handler: Handler): void;
-}
-
-// Warning: (ae-forgotten-export) The symbol "DefaultRootHttpRouterOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated
-export type DefaultRootHttpRouterOptions = DefaultRootHttpRouterOptions_2;
-
-// @public @deprecated (undocumented)
-export const discoveryServiceFactory: ServiceFactoryCompat<
- DiscoveryService,
- 'plugin',
- undefined
->;
-
-// Warning: (ae-forgotten-export) The symbol "ExtendedHttpServer_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export type ExtendedHttpServer = ExtendedHttpServer_2;
-
-// @public @deprecated
-export class HostDiscovery implements DiscoveryService {
- static fromConfig(
- config: Config,
- options?: {
- basePath?: string;
- },
- ): HostDiscovery;
- // (undocumented)
- getBaseUrl(pluginId: string): Promise;
- // (undocumented)
- getExternalBaseUrl(pluginId: string): Promise;
-}
-
-// @public @deprecated (undocumented)
-export const httpAuthServiceFactory: ServiceFactoryCompat<
- HttpAuthService,
- 'plugin',
- undefined
->;
-
-// @public @deprecated
-export const httpRouterServiceFactory: ServiceFactoryCompat<
- HttpRouterService,
- 'plugin',
- undefined
->;
-
-// Warning: (ae-forgotten-export) The symbol "HttpServerCertificateOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export type HttpServerCertificateOptions = HttpServerCertificateOptions_2;
-
-// Warning: (ae-forgotten-export) The symbol "HttpServerOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export type HttpServerOptions = HttpServerOptions_2;
-
-// @public @deprecated
-export type IdentityFactoryOptions = {
- issuer?: string;
- algorithms?: string[];
-};
-
-// @public @deprecated (undocumented)
-export const identityServiceFactory: ServiceFactoryCompat<
- IdentityService,
- 'plugin',
- IdentityFactoryOptions
->;
-
-// Warning: (ae-forgotten-export) The symbol "LifecycleMiddlewareOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated
-export type LifecycleMiddlewareOptions = LifecycleMiddlewareOptions_2;
-
-// @public @deprecated
-export const lifecycleServiceFactory: ServiceFactoryCompat<
- LifecycleService,
- 'plugin',
- undefined
->;
-
-// @public @deprecated
-export function loadBackendConfig(options: {
- remote?: LoadConfigOptionsRemote;
- argv: string[];
- additionalConfigs?: AppConfig[];
- watch?: boolean;
-}): Promise<{
- config: Config;
-}>;
-
-// @public @deprecated
-export const loggerServiceFactory: ServiceFactoryCompat<
- LoggerService,
- 'plugin',
- undefined
->;
-
-// @public @deprecated (undocumented)
-export class MiddlewareFactory {
- compression(): RequestHandler;
- cors(): RequestHandler;
- static create(options: MiddlewareFactoryOptions): MiddlewareFactory;
- error(options?: MiddlewareFactoryErrorOptions): ErrorRequestHandler;
- helmet(): RequestHandler;
- logging(): RequestHandler;
- notFound(): RequestHandler;
-}
-
-// Warning: (ae-forgotten-export) The symbol "MiddlewareFactoryErrorOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export type MiddlewareFactoryErrorOptions = MiddlewareFactoryErrorOptions_2;
-
-// Warning: (ae-forgotten-export) The symbol "MiddlewareFactoryOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export type MiddlewareFactoryOptions = MiddlewareFactoryOptions_2;
-
-// @public @deprecated (undocumented)
-export const permissionsServiceFactory: ServiceFactoryCompat<
- PermissionsService,
- 'plugin',
- undefined
->;
-
-// Warning: (ae-forgotten-export) The symbol "readCorsOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export const readCorsOptions: typeof readCorsOptions_2;
-
-// Warning: (ae-forgotten-export) The symbol "readHelmetOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export const readHelmetOptions: typeof readHelmetOptions_2;
-
-// Warning: (ae-forgotten-export) The symbol "readHttpServerOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export const readHttpServerOptions: typeof readHttpServerOptions_2;
-
-// @public @deprecated (undocumented)
-export interface RootConfigFactoryOptions {
- argv?: string[];
- remote?: Pick;
- // (undocumented)
- watch?: boolean;
-}
-
-// @public @deprecated (undocumented)
-export const rootConfigServiceFactory: ServiceFactoryCompat<
- RootConfigService,
- 'root',
- RootConfigFactoryOptions
->;
-
-// Warning: (ae-forgotten-export) The symbol "RootHttpRouterConfigureContext_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export type RootHttpRouterConfigureContext = RootHttpRouterConfigureContext_2;
-
-// Warning: (ae-forgotten-export) The symbol "RootHttpRouterFactoryOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated
-export type RootHttpRouterFactoryOptions = RootHttpRouterFactoryOptions_2;
-
-// @public @deprecated (undocumented)
-export const rootHttpRouterServiceFactory: ((
- options?: RootHttpRouterFactoryOptions_2 | undefined,
-) => ServiceFactory) &
- ServiceFactory;
-
-// @public @deprecated
-export const rootLifecycleServiceFactory: ServiceFactoryCompat<
- RootLifecycleService,
- 'root',
- undefined
->;
-
-// @public @deprecated
-export const rootLoggerServiceFactory: ServiceFactoryCompat<
- RootLoggerService,
- 'root',
- undefined
->;
-
-// @public @deprecated (undocumented)
-export const schedulerServiceFactory: ServiceFactoryCompat<
- SchedulerService,
- 'plugin',
- undefined
->;
-
-// @public @deprecated (undocumented)
-export const tokenManagerServiceFactory: ServiceFactoryCompat<
- TokenManagerService,
- 'plugin',
- undefined
->;
-
-// @public @deprecated (undocumented)
-export const urlReaderServiceFactory: ServiceFactoryCompat<
- UrlReaderService,
- 'plugin',
- undefined
->;
-
-// @public @deprecated (undocumented)
-export const userInfoServiceFactory: ServiceFactoryCompat<
- UserInfoService,
- 'plugin',
- undefined
->;
-
-// @public @deprecated
-export class WinstonLogger implements RootLoggerService {
- // (undocumented)
- addRedactions(redactions: Iterable): void;
- // (undocumented)
- child(meta: JsonObject): LoggerService;
- static colorFormat(): Format;
- static create(options: WinstonLoggerOptions): WinstonLogger;
- // (undocumented)
- debug(message: string, meta?: JsonObject): void;
- // (undocumented)
- error(message: string, meta?: JsonObject): void;
- // (undocumented)
- info(message: string, meta?: JsonObject): void;
- static redacter(): {
- format: Format;
- add: (redactions: Iterable) => void;
- };
- // (undocumented)
- warn(message: string, meta?: JsonObject): void;
-}
-
-// Warning: (ae-forgotten-export) The symbol "WinstonLoggerOptions_2" needs to be exported by the entry point index.d.ts
-//
-// @public @deprecated (undocumented)
-export type WinstonLoggerOptions = WinstonLoggerOptions_2;
-```
diff --git a/packages/backend-app-api/config.d.ts b/packages/backend-app-api/config.d.ts
index a23bca447b..b5e56af67c 100644
--- a/packages/backend-app-api/config.d.ts
+++ b/packages/backend-app-api/config.d.ts
@@ -16,296 +16,12 @@
export interface Config {
backend?: {
- auth?: {
- /**
- * This disables the otherwise default auth policy, which requires all
- * requests to be authenticated with either user or service credentials.
- *
- * Disabling this check means that the backend will no longer block
- * unauthenticated requests, but instead allow them to pass through to
- * plugins.
- *
- * If permissions are enabled, unauthenticated requests will be treated
- * exactly as such, leaving it to the permission policy to determine what
- * permissions should be allowed for an unauthenticated identity. Note
- * that this will also apply to service-to-service calls between plugins
- * unless you configure credentials for service calls.
- */
- dangerouslyDisableDefaultAuthPolicy?: boolean;
-
- /** Controls how to store keys for plugin-to-plugin auth */
- pluginKeyStore?:
- | { type: 'database' }
- | {
- type: 'static';
- static: {
- /**
- * Must be declared at least once and the first one will be used for signing.
- */
- keys: Array<{
- /**
- * Path to the public key file in the SPKI format. Should be an absolute path.
- */
- publicKeyFile: string;
- /**
- * Path to the matching private key file in the PKCS#8 format. Should be an absolute path.
- *
- * The first array entry must specify a private key file, the rest must not.
- */
- privateKeyFile?: string;
- /**
- * ID to uniquely identify this key within the JWK set.
- */
- keyId: string;
- /**
- * JWS "alg" (Algorithm) Header Parameter value. Defaults to ES256.
- * Must match the algorithm used to generate the keys in the provided files
- */
- algorithm?: string;
- }>;
- };
- };
-
- /**
- * Configures methods of external access, ie ways for callers outside of
- * the Backstage ecosystem to get authorized for access to APIs that do
- * not permit unauthorized access.
- */
- externalAccess: Array<
- | {
- /**
- * This is the legacy service-to-service access method, where a set
- * of static keys were shared among plugins and used for symmetric
- * signing and verification. These correspond to the old
- * `backend.auth.keys` set and retain their behavior for backwards
- * compatibility. Please migrate to other access methods when
- * possible.
- *
- * Callers generate JWT tokens with the following payload:
- *
- * ```json
- * {
- * "sub": "backstage-plugin",
- * "exp":
- * }
- * ```
- *
- * And sign them with HS256, using the base64 decoded secret. The
- * tokens are then passed along with requests in the Authorization
- * header:
- *
- * ```
- * Authorization: Bearer eyJhbGciOiJIUzI...
- * ```
- */
- type: 'legacy';
- options: {
- /**
- * Any set of base64 encoded random bytes to be used as both the
- * signing and verification key. Should be sufficiently long so as
- * not to be easy to guess by brute force.
- *
- * Can be generated eg using
- *
- * ```sh
- * node -p 'require("crypto").randomBytes(24).toString("base64")'
- * ```
- *
- * @visibility secret
- */
- secret: string;
-
- /**
- * Sets the subject of the principal, when matching this token.
- * Useful for debugging and tracking purposes.
- */
- subject: string;
- };
- /**
- * Restricts what types of access that are permitted for this access
- * method. If no access restrictions are given, it'll have unlimited
- * access. This access restriction applies for the framework level;
- * individual plugins may have their own access control mechanisms
- * on top of this.
- */
- accessRestrictions?: Array<{
- /**
- * Permit access to make requests to this plugin.
- *
- * Can be further refined by setting additional fields below.
- */
- plugin: string;
- /**
- * If given, this method is limited to only performing actions
- * with these named permissions in this plugin.
- *
- * Note that this only applies where permissions checks are
- * enabled in the first place. Endpoints that are not protected by
- * the permissions system at all, are not affected by this
- * setting.
- */
- permission?: string | Array;
- /**
- * If given, this method is limited to only performing actions
- * whose permissions have these attributes.
- *
- * Note that this only applies where permissions checks are
- * enabled in the first place. Endpoints that are not protected by
- * the permissions system at all, are not affected by this
- * setting.
- */
- permissionAttribute?: {
- /**
- * One of more of 'create', 'read', 'update', or 'delete'.
- */
- action?: string | Array;
- };
- }>;
- }
- | {
- /**
- * This access method consists of random static tokens that can be
- * handed out to callers.
- *
- * The tokens are then passed along verbatim with requests in the
- * Authorization header:
- *
- * ```
- * Authorization: Bearer eZv5o+fW3KnR3kVabMW4ZcDNLPl8nmMW
- * ```
- */
- type: 'static';
- options: {
- /**
- * A raw token that can be any string, but for security reasons
- * should be sufficiently long so as not to be easy to guess by
- * brute force.
- *
- * Can be generated eg using
- *
- * ```sh
- * node -p 'require("crypto").randomBytes(24).toString("base64")'
- * ```
- *
- * Since the tokens can be any string, you are free to add
- * additional identifying data to them if you like. For example,
- * adding a `freben-local-dev-` prefix for debugging purposes to a
- * token that you know will be handed out for use as a personal
- * access token during development.
- *
- * @visibility secret
- */
- token: string;
-
- /**
- * Sets the subject of the principal, when matching this token.
- * Useful for debugging and tracking purposes.
- */
- subject: string;
- };
- /**
- * Restricts what types of access that are permitted for this access
- * method. If no access restrictions are given, it'll have unlimited
- * access. This access restriction applies for the framework level;
- * individual plugins may have their own access control mechanisms
- * on top of this.
- */
- accessRestrictions?: Array<{
- /**
- * Permit access to make requests to this plugin.
- *
- * Can be further refined by setting additional fields below.
- */
- plugin: string;
- /**
- * If given, this method is limited to only performing actions
- * with these named permissions in this plugin.
- *
- * Note that this only applies where permissions checks are
- * enabled in the first place. Endpoints that are not protected by
- * the permissions system at all, are not affected by this
- * setting.
- */
- permission?: string | Array;
- /**
- * If given, this method is limited to only performing actions
- * whose permissions have these attributes.
- *
- * Note that this only applies where permissions checks are
- * enabled in the first place. Endpoints that are not protected by
- * the permissions system at all, are not affected by this
- * setting.
- */
- permissionAttribute?: {
- /**
- * One of more of 'create', 'read', 'update', or 'delete'.
- */
- action?: string | Array;
- };
- }>;
- }
- | {
- /**
- * This access method consists of a JWKS endpoint that can be used to
- * verify JWT tokens.
- *
- * Callers generate JWT tokens via 3rd party tooling
- * and pass them in the Authorization header:
- *
- * ```
- * Authorization: Bearer eZv5o+fW3KnR3kVabMW4ZcDNLPl8nmMW
- * ```
- */
- type: 'jwks';
- options: {
- /**
- * The full URL of the JWKS endpoint.
- */
- url: string;
- /**
- * Sets the algorithm(s) that should be used to verify the JWT tokens.
- * The passed JWTs must have been signed using one of the listed algorithms.
- */
- algorithm?: string | string[];
- /**
- * Sets the issuer(s) that should be used to verify the JWT tokens.
- * Passed JWTs must have an `iss` claim which matches one of the specified issuers.
- */
- issuer?: string | string[];
- /**
- * Sets the audience(s) that should be used to verify the JWT tokens.
- * The passed JWTs must have an "aud" claim that matches one of the audiences specified,
- * or have no audience specified.
- */
- audience?: string | string[];
- /**
- * Sets an optional subject prefix. Passes the subject to called plugins.
- * Useful for debugging and tracking purposes.
- */
- subjectPrefix?: string;
- };
- }
- >;
- };
- };
-
- /** Discovery options. */
- discovery?: {
- /**
- * Endpoints
- *
- * A list of target baseUrls and the associated plugins.
- */
- endpoints: {
- /**
- * The target baseUrl to use for the plugin
- *
- * Can be either a string or an object with internal and external keys.
- * Targets with `{{pluginId}}` or `{{ pluginId }} in the url will be replaced with the pluginId.
- */
- target: string | { internal: string; external: string };
- /** Array of plugins which use the target baseUrl. */
- plugins: string[];
- }[];
+ /** Used by the feature discovery service */
+ packages?:
+ | 'all'
+ | {
+ include?: string[];
+ exclude?: string[];
+ };
};
}
diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json
index 9372b837e0..018eea139f 100644
--- a/packages/backend-app-api/package.json
+++ b/packages/backend-app-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-app-api",
- "version": "0.8.1-next.0",
+ "version": "1.0.1-next.0",
"description": "Core API used by Backstage backend apps",
"backstage": {
"role": "node-library"
@@ -50,11 +50,9 @@
"test": "backstage-cli package test"
},
"dependencies": {
- "@backstage/backend-common": "workspace:^",
+ "@backstage/backend-common": "^0.25.0",
"@backstage/backend-plugin-api": "workspace:^",
- "@backstage/backend-tasks": "workspace:^",
"@backstage/cli-common": "workspace:^",
- "@backstage/cli-node": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/config-loader": "workspace:^",
"@backstage/errors": "workspace:^",
@@ -62,14 +60,11 @@
"@backstage/plugin-permission-node": "workspace:^",
"@backstage/types": "workspace:^",
"@manypkg/get-packages": "^1.1.3",
- "@types/cors": "^2.8.6",
- "@types/express": "^4.17.6",
"compression": "^1.7.4",
"cookie": "^0.6.0",
"cors": "^2.8.5",
"express": "^4.17.1",
"express-promise-router": "^4.1.0",
- "fs-extra": "^11.2.0",
"helmet": "^6.0.0",
"jose": "^5.0.0",
"knex": "^3.0.0",
@@ -79,9 +74,9 @@
"minimatch": "^9.0.0",
"minimist": "^1.2.5",
"morgan": "^1.10.0",
- "node-fetch": "^2.6.7",
+ "node-fetch": "^2.7.0",
"node-forge": "^1.3.1",
- "path-to-regexp": "^6.2.1",
+ "path-to-regexp": "^8.0.0",
"selfsigned": "^2.0.0",
"stoppable": "^1.1.0",
"triple-beam": "^1.4.1",
@@ -94,7 +89,6 @@
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"@types/compression": "^1.7.0",
- "@types/fs-extra": "^11.0.0",
"@types/http-errors": "^2.0.0",
"@types/minimist": "^1.2.0",
"@types/morgan": "^1.9.0",
@@ -102,7 +96,7 @@
"@types/stoppable": "^1.1.0",
"http-errors": "^2.0.0",
"msw": "^1.0.0",
- "supertest": "^6.1.3"
+ "supertest": "^7.0.0"
},
"configSchema": "config.d.ts"
}
diff --git a/packages/backend-app-api/report-alpha.api.md b/packages/backend-app-api/report-alpha.api.md
new file mode 100644
index 0000000000..e3f11bb800
--- /dev/null
+++ b/packages/backend-app-api/report-alpha.api.md
@@ -0,0 +1,21 @@
+## API Report File for "@backstage/backend-app-api"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { FeatureDiscoveryService } from '@backstage/backend-plugin-api/alpha';
+import { ServiceFactory } from '@backstage/backend-plugin-api';
+
+// @alpha @deprecated (undocumented)
+export const featureDiscoveryServiceFactory: ServiceFactory<
+ FeatureDiscoveryService,
+ 'root',
+ 'singleton'
+>;
+
+// Warnings were encountered during analysis:
+//
+// src/alpha/featureDiscoveryServiceFactory.d.ts:5:22 - (ae-undocumented) Missing documentation for "featureDiscoveryServiceFactory".
+
+// (No @packageDocumentation comment for this package)
+```
diff --git a/packages/backend-app-api/report.api.md b/packages/backend-app-api/report.api.md
new file mode 100644
index 0000000000..ec32ec9b67
--- /dev/null
+++ b/packages/backend-app-api/report.api.md
@@ -0,0 +1,45 @@
+## API Report File for "@backstage/backend-app-api"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { BackendFeature } from '@backstage/backend-plugin-api';
+import { ServiceFactory } from '@backstage/backend-plugin-api';
+
+// @public (undocumented)
+export interface Backend {
+ // (undocumented)
+ add(
+ feature:
+ | BackendFeature
+ | Promise<{
+ default: BackendFeature;
+ }>,
+ ): void;
+ // (undocumented)
+ start(): Promise;
+ // (undocumented)
+ stop(): Promise;
+}
+
+// @public (undocumented)
+export function createSpecializedBackend(
+ options: CreateSpecializedBackendOptions,
+): Backend;
+
+// @public (undocumented)
+export interface CreateSpecializedBackendOptions {
+ // (undocumented)
+ defaultServiceFactories: ServiceFactory[];
+}
+
+// Warnings were encountered during analysis:
+//
+// src/wiring/createSpecializedBackend.d.ts:5:1 - (ae-undocumented) Missing documentation for "createSpecializedBackend".
+// src/wiring/types.d.ts:5:1 - (ae-undocumented) Missing documentation for "Backend".
+// src/wiring/types.d.ts:6:5 - (ae-undocumented) Missing documentation for "add".
+// src/wiring/types.d.ts:9:5 - (ae-undocumented) Missing documentation for "start".
+// src/wiring/types.d.ts:10:5 - (ae-undocumented) Missing documentation for "stop".
+// src/wiring/types.d.ts:15:1 - (ae-undocumented) Missing documentation for "CreateSpecializedBackendOptions".
+// src/wiring/types.d.ts:16:5 - (ae-undocumented) Missing documentation for "defaultServiceFactories".
+```
diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts
index 254b6a47f1..6550a6b1d0 100644
--- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts
+++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.test.ts
@@ -147,7 +147,7 @@ describe('featureDiscoveryServiceFactory', () => {
await startTestBackend({
features: [
mock.factory,
- featureDiscoveryServiceFactory(),
+ featureDiscoveryServiceFactory,
mockServices.rootConfig.factory({
data: { backend: { packages: 'all' } },
}),
@@ -166,7 +166,7 @@ describe('featureDiscoveryServiceFactory', () => {
await startTestBackend({
features: [
mock.factory,
- featureDiscoveryServiceFactory(),
+ featureDiscoveryServiceFactory,
mockServices.rootConfig.factory({
data: {
backend: {
@@ -195,7 +195,7 @@ describe('featureDiscoveryServiceFactory', () => {
await startTestBackend({
features: [
mock.factory,
- featureDiscoveryServiceFactory(),
+ featureDiscoveryServiceFactory,
mockServices.rootConfig.factory({
data: {
backend: {
@@ -220,7 +220,7 @@ describe('featureDiscoveryServiceFactory', () => {
await startTestBackend({
features: [
mock.factory,
- featureDiscoveryServiceFactory(),
+ featureDiscoveryServiceFactory,
mockServices.rootConfig.factory({
data: {
backend: {
@@ -245,7 +245,7 @@ describe('featureDiscoveryServiceFactory', () => {
await startTestBackend({
features: [
mock.factory,
- featureDiscoveryServiceFactory(),
+ featureDiscoveryServiceFactory,
mockServices.rootConfig.factory({
data: {
backend: {
@@ -270,7 +270,7 @@ describe('featureDiscoveryServiceFactory', () => {
await startTestBackend({
features: [
mock.factory,
- featureDiscoveryServiceFactory(),
+ featureDiscoveryServiceFactory,
mockServices.rootConfig.factory({
data: {
backend: {
@@ -300,7 +300,7 @@ describe('featureDiscoveryServiceFactory', () => {
await startTestBackend({
features: [
mock.factory,
- featureDiscoveryServiceFactory(),
+ featureDiscoveryServiceFactory,
mockServices.rootConfig.factory({
data: { backend: { packages: {} } },
}),
@@ -316,7 +316,7 @@ describe('featureDiscoveryServiceFactory', () => {
await startTestBackend({
features: [
mock.factory,
- featureDiscoveryServiceFactory(),
+ featureDiscoveryServiceFactory,
mockServices.rootConfig.factory({
data: { backend: {} },
}),
diff --git a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts
index c16a3f6534..05de659083 100644
--- a/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts
+++ b/packages/backend-app-api/src/alpha/featureDiscoveryServiceFactory.ts
@@ -15,145 +15,17 @@
*/
import {
- BackendFeature,
- RootConfigService,
- RootLoggerService,
coreServices,
createServiceFactory,
} from '@backstage/backend-plugin-api';
-import {
- featureDiscoveryServiceRef,
- FeatureDiscoveryService,
-} from '@backstage/backend-plugin-api/alpha';
-import { resolve as resolvePath, dirname } from 'path';
-import fs from 'fs-extra';
-import { BackstagePackageJson } from '@backstage/cli-node';
+import { featureDiscoveryServiceRef } from '@backstage/backend-plugin-api/alpha';
+// eslint-disable-next-line @backstage/no-relative-monorepo-imports
+import { PackageDiscoveryService } from '../../../backend-defaults/src/PackageDiscoveryService';
-const DETECTED_PACKAGE_ROLES = [
- 'node-library',
- 'backend',
- 'backend-plugin',
- 'backend-plugin-module',
-];
-
-/** @internal */
-async function findClosestPackageDir(
- searchDir: string,
-): Promise {
- let path = searchDir;
-
- // Some confidence check to avoid infinite loop
- for (let i = 0; i < 1000; i++) {
- const packagePath = resolvePath(path, 'package.json');
- const exists = await fs.pathExists(packagePath);
- if (exists) {
- return path;
- }
-
- const newPath = dirname(path);
- if (newPath === path) {
- return undefined;
- }
- path = newPath;
- }
-
- throw new Error(
- `Iteration limit reached when searching for root package.json at ${searchDir}`,
- );
-}
-
-/** @internal */
-class PackageDiscoveryService implements FeatureDiscoveryService {
- constructor(
- private readonly config: RootConfigService,
- private readonly logger: RootLoggerService,
- ) {}
-
- getDependencyNames(path: string) {
- const { dependencies } = require(path) as BackstagePackageJson;
- const packagesConfig = this.config.getOptional('backend.packages');
-
- const dependencyNames = Object.keys(dependencies || {});
-
- if (packagesConfig === 'all') {
- return dependencyNames;
- }
-
- const includedPackagesConfig = this.config.getOptionalStringArray(
- 'backend.packages.include',
- );
-
- const includedPackages = includedPackagesConfig
- ? new Set(includedPackagesConfig)
- : dependencyNames;
- const excludedPackagesSet = new Set(
- this.config.getOptionalStringArray('backend.packages.exclude'),
- );
-
- return [...includedPackages].filter(name => !excludedPackagesSet.has(name));
- }
-
- async getBackendFeatures(): Promise<{ features: Array }> {
- const packagesConfig = this.config.getOptional('backend.packages');
- if (!packagesConfig || Object.keys(packagesConfig).length === 0) {
- return { features: [] };
- }
-
- const packageDir = await findClosestPackageDir(process.argv[1]);
- if (!packageDir) {
- throw new Error('Package discovery failed to find package.json');
- }
- const dependencyNames = this.getDependencyNames(
- resolvePath(packageDir, 'package.json'),
- );
-
- const features: BackendFeature[] = [];
-
- for (const name of dependencyNames) {
- const depPkg = require(require.resolve(`${name}/package.json`, {
- paths: [packageDir],
- })) as BackstagePackageJson;
- if (
- !depPkg?.backstage?.role ||
- !DETECTED_PACKAGE_ROLES.includes(depPkg.backstage.role)
- ) {
- continue; // Not a backstage backend package, ignore
- }
-
- const exportedModulePaths = [
- require.resolve(name, {
- paths: [packageDir],
- }),
- ];
-
- // Find modules exported as alpha
- try {
- exportedModulePaths.push(
- require.resolve(`${name}/alpha`, { paths: [packageDir] }),
- );
- } catch {
- /* ignore */
- }
-
- for (const modulePath of exportedModulePaths) {
- const mod = require(modulePath);
-
- if (isBackendFeature(mod.default)) {
- this.logger.info(`Detected: ${name}`);
- features.push(mod.default);
- }
- if (isBackendFeatureFactory(mod.default)) {
- this.logger.info(`Detected: ${name}`);
- features.push(mod.default());
- }
- }
- }
-
- return { features };
- }
-}
-
-/** @alpha */
+/**
+ * @alpha
+ * @deprecated The `featureDiscoveryServiceFactory` is deprecated in favor of using {@link @backstage/backend-defaults#discoveryFeatureLoader} instead.
+ */
export const featureDiscoveryServiceFactory = createServiceFactory({
service: featureDiscoveryServiceRef,
deps: {
@@ -164,21 +36,3 @@ export const featureDiscoveryServiceFactory = createServiceFactory({
return new PackageDiscoveryService(config, logger);
},
});
-
-function isBackendFeature(value: unknown): value is BackendFeature {
- return (
- !!value &&
- ['object', 'function'].includes(typeof value) &&
- (value as BackendFeature).$$type === '@backstage/BackendFeature'
- );
-}
-
-function isBackendFeatureFactory(
- value: unknown,
-): value is () => BackendFeature {
- return (
- !!value &&
- typeof value === 'function' &&
- (value as any).$$type === '@backstage/BackendFeatureFactory'
- );
-}
diff --git a/packages/backend-app-api/src/config/ObservableConfigProxy.test.ts b/packages/backend-app-api/src/config/ObservableConfigProxy.test.ts
deleted file mode 100644
index 876f5ac7d3..0000000000
--- a/packages/backend-app-api/src/config/ObservableConfigProxy.test.ts
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2020 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 { ConfigReader } from '@backstage/config';
-import { ObservableConfigProxy } from './ObservableConfigProxy';
-
-describe('ObservableConfigProxy', () => {
- it('should notify subscribers', () => {
- const config = new ObservableConfigProxy();
-
- const fn = jest.fn();
- const sub = config.subscribe(fn);
- expect(config.getOptionalNumber('x')).toBe(undefined);
-
- config.setConfig(new ConfigReader({}));
- expect(fn).toHaveBeenCalledTimes(1);
- expect(config.getOptionalNumber('x')).toBe(undefined);
-
- config.setConfig(new ConfigReader({ x: 1 }));
- expect(fn).toHaveBeenCalledTimes(2);
- expect(config.getOptionalNumber('x')).toBe(1);
-
- config.setConfig(new ConfigReader({ x: 3 }));
- expect(fn).toHaveBeenCalledTimes(3);
- sub.unsubscribe();
- expect(config.getOptionalNumber('x')).toBe(3);
-
- config.setConfig(new ConfigReader({ x: 5 }));
- expect(fn).toHaveBeenCalledTimes(3);
- expect(config.getOptionalNumber('x')).toBe(5);
- });
-
- it('should forward subscriptions', () => {
- const config1 = new ObservableConfigProxy();
-
- const fn1 = jest.fn();
- const fn2 = jest.fn();
- const fn3 = jest.fn();
- const config2 = config1.getConfig('a');
- const config3 = config2.getConfig('b');
- const sub1 = config1.subscribe(fn1);
- const sub2 = config2.subscribe!(fn2);
- const sub3 = config3.subscribe!(fn3);
- expect(config1.getOptionalNumber('x')).toBe(undefined);
- expect(config2.getOptionalNumber('x')).toBe(undefined);
- expect(config3.getOptionalNumber('x')).toBe(undefined);
-
- config1.setConfig(new ConfigReader({}));
- expect(fn1).toHaveBeenCalledTimes(1);
- expect(fn2).toHaveBeenCalledTimes(1);
- expect(fn3).toHaveBeenCalledTimes(1);
- expect(config1.getOptionalNumber('x')).toBe(undefined);
- expect(config2.getOptionalNumber('x')).toBe(undefined);
- expect(config3.getOptionalNumber('x')).toBe(undefined);
-
- config1.setConfig(new ConfigReader({ x: 1, a: { x: 2, b: { x: 3 } } }));
- expect(fn1).toHaveBeenCalledTimes(2);
- expect(fn2).toHaveBeenCalledTimes(2);
- expect(fn3).toHaveBeenCalledTimes(2);
- expect(config1.getNumber('x')).toBe(1);
- expect(config2.getNumber('x')).toBe(2);
- expect(config3.getNumber('x')).toBe(3);
-
- sub1.unsubscribe();
- sub2.unsubscribe();
- sub3.unsubscribe();
-
- config1.setConfig(new ConfigReader({ x: 4, a: { x: 5, b: { x: 6 } } }));
- expect(fn1).toHaveBeenCalledTimes(2);
- expect(fn2).toHaveBeenCalledTimes(2);
- expect(fn3).toHaveBeenCalledTimes(2);
- expect(config1.getNumber('x')).toBe(4);
- expect(config2.getNumber('x')).toBe(5);
- expect(config3.getNumber('x')).toBe(6);
-
- config1.setConfig(new ConfigReader({}));
- expect(() => config1.getNumber('x')).toThrow(
- "Missing required config value at 'x'",
- );
- expect(() => config2.getNumber('x')).toThrow(
- "Missing required config value at 'a'",
- );
- expect(() => config3.getNumber('x')).toThrow(
- "Missing required config value at 'a'",
- );
-
- config1.setConfig(
- new ConfigReader({ x: 's', a: { x: 's', b: { x: 's' } } }),
- );
- expect(() => config1.getNumber('x')).toThrow(
- "Unable to convert config value for key 'x' in 'mock-config' to a number",
- );
- expect(() => config2.getNumber('x')).toThrow(
- "Unable to convert config value for key 'a.x' in 'mock-config' to a number",
- );
- expect(() => config3.getNumber('x')).toThrow(
- "Unable to convert config value for key 'a.b.x' in 'mock-config' to a number",
- );
- });
-
- it('should make sub configs available as expected', () => {
- const config = new ObservableConfigProxy();
-
- config.setConfig(new ConfigReader({ a: { x: 1 } }));
-
- expect(config.getConfig('a')).toBeDefined();
- expect(config.getConfig('a').getNumber('x')).toBe(1);
- expect(config.getConfig('a').getOptionalNumber('x')).toBe(1);
- expect(config.getOptionalConfig('a')?.getNumber('x')).toBe(1);
- expect(config.getOptionalConfig('a')?.getOptionalNumber('x')).toBe(1);
- expect(config.getOptionalConfig('b')).toBeUndefined();
- expect(() => config.getConfig('b')).toBeDefined();
- expect(() => config.getConfig('b').get()).toThrow();
- });
-});
diff --git a/packages/backend-app-api/src/config/ObservableConfigProxy.ts b/packages/backend-app-api/src/config/ObservableConfigProxy.ts
deleted file mode 100644
index 8c8d3b553f..0000000000
--- a/packages/backend-app-api/src/config/ObservableConfigProxy.ts
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2023 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 { Config, ConfigReader } from '@backstage/config';
-import { JsonValue } from '@backstage/types';
-
-export class ObservableConfigProxy implements Config {
- private config: Config = new ConfigReader({});
-
- private readonly subscribers: (() => void)[] = [];
-
- constructor(
- private readonly parent?: ObservableConfigProxy,
- private parentKey?: string,
- ) {
- if (parent && !parentKey) {
- throw new Error('parentKey is required if parent is set');
- }
- }
-
- setConfig(config: Config) {
- if (this.parent) {
- throw new Error('immutable');
- }
- this.config = config;
- for (const subscriber of this.subscribers) {
- try {
- subscriber();
- } catch (error) {
- console.error(`Config subscriber threw error, ${error}`);
- }
- }
- }
-
- subscribe(onChange: () => void): { unsubscribe: () => void } {
- if (this.parent) {
- return this.parent.subscribe(onChange);
- }
-
- this.subscribers.push(onChange);
- return {
- unsubscribe: () => {
- const index = this.subscribers.indexOf(onChange);
- if (index >= 0) {
- this.subscribers.splice(index, 1);
- }
- },
- };
- }
-
- private select(required: true): Config;
- private select(required: false): Config | undefined;
- private select(required: boolean): Config | undefined {
- if (this.parent && this.parentKey) {
- if (required) {
- return this.parent.select(true).getConfig(this.parentKey);
- }
- return this.parent.select(false)?.getOptionalConfig(this.parentKey);
- }
-
- return this.config;
- }
-
- has(key: string): boolean {
- return this.select(false)?.has(key) ?? false;
- }
- keys(): string[] {
- return this.select(false)?.keys() ?? [];
- }
- get(key?: string): T {
- return this.select(true).get(key);
- }
- getOptional(key?: string): T | undefined {
- return this.select(false)?.getOptional(key);
- }
- getConfig(key: string): Config {
- return new ObservableConfigProxy(this, key);
- }
- getOptionalConfig(key: string): Config | undefined {
- if (this.select(false)?.has(key)) {
- return new ObservableConfigProxy(this, key);
- }
- return undefined;
- }
- getConfigArray(key: string): Config[] {
- return this.select(true).getConfigArray(key);
- }
- getOptionalConfigArray(key: string): Config[] | undefined {
- return this.select(false)?.getOptionalConfigArray(key);
- }
- getNumber(key: string): number {
- return this.select(true).getNumber(key);
- }
- getOptionalNumber(key: string): number | undefined {
- return this.select(false)?.getOptionalNumber(key);
- }
- getBoolean(key: string): boolean {
- return this.select(true).getBoolean(key);
- }
- getOptionalBoolean(key: string): boolean | undefined {
- return this.select(false)?.getOptionalBoolean(key);
- }
- getString(key: string): string {
- return this.select(true).getString(key);
- }
- getOptionalString(key: string): string | undefined {
- return this.select(false)?.getOptionalString(key);
- }
- getStringArray(key: string): string[] {
- return this.select(true).getStringArray(key);
- }
- getOptionalStringArray(key: string): string[] | undefined {
- return this.select(false)?.getOptionalStringArray(key);
- }
-}
diff --git a/packages/backend-app-api/src/config/config.test.ts b/packages/backend-app-api/src/config/config.test.ts
deleted file mode 100644
index 8828c557e0..0000000000
--- a/packages/backend-app-api/src/config/config.test.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2020 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 { loadConfigSchema } from '@backstage/config-loader';
-import { createConfigSecretEnumerator } from './config';
-import { mockServices } from '@backstage/backend-test-utils';
-
-describe('createConfigSecretEnumerator', () => {
- it('should enumerate secrets', async () => {
- const logger = mockServices.logger.mock();
-
- const enumerate = await createConfigSecretEnumerator({
- logger,
- });
- const secrets = enumerate(
- mockServices.rootConfig({
- data: {
- backend: { auth: { keys: [{ secret: 'my-secret-password' }] } },
- },
- }),
- );
- expect(Array.from(secrets)).toEqual(['my-secret-password']);
- }, 20_000); // Bit higher timeout since we're loading all config schemas in the repo
-
- it('should enumerate secrets with explicit schema', async () => {
- const logger = mockServices.logger.mock();
-
- const enumerate = await createConfigSecretEnumerator({
- logger,
- schema: await loadConfigSchema({
- serialized: {
- schemas: [
- {
- value: {
- type: 'object',
- properties: {
- secret: {
- visibility: 'secret',
- type: 'string',
- },
- },
- },
- path: '/mock',
- },
- ],
- backstageConfigSchemaVersion: 1,
- },
- }),
- });
-
- const secrets = enumerate(
- mockServices.rootConfig({
- data: {
- secret: 'my-secret',
- other: 'not-secret',
- },
- }),
- );
- expect(Array.from(secrets)).toEqual(['my-secret']);
- });
-});
diff --git a/packages/backend-app-api/src/config/config.ts b/packages/backend-app-api/src/config/config.ts
deleted file mode 100644
index 957997849e..0000000000
--- a/packages/backend-app-api/src/config/config.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2020 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.
- */
-
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import { createConfigSecretEnumerator as _createConfigSecretEnumerator } from '../../../backend-defaults/src/entrypoints/rootConfig/createConfigSecretEnumerator';
-
-import { resolve as resolvePath } from 'path';
-import parseArgs from 'minimist';
-import { findPaths } from '@backstage/cli-common';
-import {
- loadConfig,
- ConfigTarget,
- LoadConfigOptionsRemote,
-} from '@backstage/config-loader';
-import { ConfigReader } from '@backstage/config';
-import type { Config, AppConfig } from '@backstage/config';
-import { ObservableConfigProxy } from './ObservableConfigProxy';
-import { isValidUrl } from '../lib/urls';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootConfig` instead.
- */
-export const createConfigSecretEnumerator = _createConfigSecretEnumerator;
-
-/**
- * Load configuration for a Backend.
- *
- * This function should only be called once, during the initialization of the backend.
- *
- * @public
- * @deprecated Please migrate to the new backend system and use `coreServices.rootConfig` instead, or the {@link @backstage/config-loader#ConfigSources} facilities if required.
- */
-export async function loadBackendConfig(options: {
- remote?: LoadConfigOptionsRemote;
- argv: string[];
- additionalConfigs?: AppConfig[];
- watch?: boolean;
-}): Promise<{ config: Config }> {
- const args = parseArgs(options.argv);
-
- const configTargets: ConfigTarget[] = [args.config ?? []]
- .flat()
- .map(arg => (isValidUrl(arg) ? { url: arg } : { path: resolvePath(arg) }));
-
- /* eslint-disable-next-line no-restricted-syntax */
- const paths = findPaths(__dirname);
-
- let currentCancelFunc: (() => void) | undefined = undefined;
-
- const config = new ObservableConfigProxy();
- const { appConfigs } = await loadConfig({
- configRoot: paths.targetRoot,
- configTargets: configTargets,
- remote: options.remote,
- watch:
- options.watch ?? true
- ? {
- onChange(newConfigs) {
- console.info(
- `Reloaded config from ${newConfigs
- .map(c => c.context)
- .join(', ')}`,
- );
- const configsToMerge = [...newConfigs];
- if (options.additionalConfigs) {
- configsToMerge.push(...options.additionalConfigs);
- }
- config.setConfig(ConfigReader.fromConfigs(configsToMerge));
- },
- stopSignal: new Promise(resolve => {
- if (currentCancelFunc) {
- currentCancelFunc();
- }
- currentCancelFunc = resolve;
-
- // TODO(Rugvip): We keep this here for now to avoid breaking the old system
- // since this is re-used in backend-common
- if (module.hot) {
- module.hot.addDisposeHandler(resolve);
- }
- }),
- }
- : undefined,
- });
- console.info(
- `Loaded config from ${appConfigs.map(c => c.context).join(', ')}`,
- );
-
- const finalAppConfigs = [...appConfigs];
- if (options.additionalConfigs) {
- finalAppConfigs.push(...options.additionalConfigs);
- }
- config.setConfig(ConfigReader.fromConfigs(finalAppConfigs));
-
- return { config };
-}
diff --git a/packages/backend-app-api/src/config/index.ts b/packages/backend-app-api/src/config/index.ts
deleted file mode 100644
index 0ed8d2bc93..0000000000
--- a/packages/backend-app-api/src/config/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { loadBackendConfig, createConfigSecretEnumerator } from './config';
diff --git a/packages/backend-app-api/src/http/index.ts b/packages/backend-app-api/src/http/index.ts
deleted file mode 100644
index a056ed2d61..0000000000
--- a/packages/backend-app-api/src/http/index.ts
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2023 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 { ErrorRequestHandler, RequestHandler } from 'express';
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import {
- readHttpServerOptions as _readHttpServerOptions,
- createHttpServer as _createHttpServer,
- MiddlewareFactory as _MiddlewareFactory,
- readCorsOptions as _readCorsOptions,
- readHelmetOptions as _readHelmetOptions,
- type MiddlewareFactoryErrorOptions as _MiddlewareFactoryErrorOptions,
- type MiddlewareFactoryOptions as _MiddlewareFactoryOptions,
- type ExtendedHttpServer as _ExtendedHttpServer,
- type HttpServerCertificateOptions as _HttpServerCertificateOptions,
- type HttpServerOptions as _HttpServerOptions,
-} from '../../../backend-defaults/src/entrypoints/rootHttpRouter/http';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export const readHttpServerOptions = _readHttpServerOptions;
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export const createHttpServer = _createHttpServer;
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export const readCorsOptions = _readCorsOptions;
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export const readHelmetOptions = _readHelmetOptions;
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export class MiddlewareFactory {
- /**
- * Creates a new {@link MiddlewareFactory}.
- */
- static create(options: MiddlewareFactoryOptions) {
- return new MiddlewareFactory(_MiddlewareFactory.create(options));
- }
-
- private constructor(private readonly impl: _MiddlewareFactory) {}
-
- /**
- * Returns a middleware that unconditionally produces a 404 error response.
- *
- * @remarks
- *
- * Typically you want to place this middleware at the end of the chain, such
- * that it's the last one attempted after no other routes matched.
- *
- * @returns An Express request handler
- */
- notFound(): RequestHandler {
- return this.impl.notFound();
- }
-
- /**
- * Returns the compression middleware.
- *
- * @remarks
- *
- * The middleware will attempt to compress response bodies for all requests
- * that traverse through the middleware.
- */
- compression(): RequestHandler {
- return this.impl.compression();
- }
-
- /**
- * Returns a request logging middleware.
- *
- * @remarks
- *
- * Typically you want to place this middleware at the start of the chain, such
- * that it always logs requests whether they are "caught" by handlers farther
- * down or not.
- *
- * @returns An Express request handler
- */
- logging(): RequestHandler {
- return this.impl.logging();
- }
-
- /**
- * Returns a middleware that implements the helmet library.
- *
- * @remarks
- *
- * This middleware applies security policies to incoming requests and outgoing
- * responses. It is configured using config keys such as `backend.csp`.
- *
- * @see {@link https://helmetjs.github.io/}
- *
- * @returns An Express request handler
- */
- helmet(): RequestHandler {
- return this.impl.helmet();
- }
-
- /**
- * Returns a middleware that implements the cors library.
- *
- * @remarks
- *
- * This middleware handles CORS. It is configured using the config key
- * `backend.cors`.
- *
- * @see {@link https://github.com/expressjs/cors}
- *
- * @returns An Express request handler
- */
- cors(): RequestHandler {
- return this.impl.cors();
- }
-
- /**
- * Express middleware to handle errors during request processing.
- *
- * @remarks
- *
- * This is commonly the very last middleware in the chain.
- *
- * Its primary purpose is not to do translation of business logic exceptions,
- * but rather to be a global catch-all for uncaught "fatal" errors that are
- * expected to result in a 500 error. However, it also does handle some common
- * error types (such as http-error exceptions, and the well-known error types
- * in the `@backstage/errors` package) and returns the enclosed status code
- * accordingly.
- *
- * It will also produce a response body with a serialized form of the error,
- * unless a previous handler already did send a body. See
- * {@link @backstage/errors#ErrorResponseBody} for the response shape used.
- *
- * @returns An Express error request handler
- */
- error(options: MiddlewareFactoryErrorOptions = {}): ErrorRequestHandler {
- return this.impl.error(options);
- }
-}
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export type MiddlewareFactoryErrorOptions = _MiddlewareFactoryErrorOptions;
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export type MiddlewareFactoryOptions = _MiddlewareFactoryOptions;
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export type ExtendedHttpServer = _ExtendedHttpServer;
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export type HttpServerCertificateOptions = _HttpServerCertificateOptions;
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export type HttpServerOptions = _HttpServerOptions;
diff --git a/packages/backend-app-api/src/index.ts b/packages/backend-app-api/src/index.ts
index 13864a3470..c58379c3e4 100644
--- a/packages/backend-app-api/src/index.ts
+++ b/packages/backend-app-api/src/index.ts
@@ -20,8 +20,4 @@
* @packageDocumentation
*/
-export * from './config';
-export * from './http';
-export * from './logging';
export * from './wiring';
-export * from './services/implementations';
diff --git a/packages/backend-app-api/src/lib/urls.test.ts b/packages/backend-app-api/src/lib/urls.test.ts
deleted file mode 100644
index c2a67fb849..0000000000
--- a/packages/backend-app-api/src/lib/urls.test.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2021 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 { isValidUrl } from './urls';
-
-describe('isValidUrl', () => {
- it('should return true for url', () => {
- const validUrl = isValidUrl('http://some.valid.url');
- expect(validUrl).toBe(true);
- });
-
- it('should return false for absolute path', () => {
- const validUrl = isValidUrl('/some/absolute/path');
- expect(validUrl).toBe(false);
- });
-
- it('should return false for relative path', () => {
- const validUrl = isValidUrl('../some/relative/path');
- expect(validUrl).toBe(false);
- });
-});
diff --git a/packages/backend-app-api/src/lib/urls.ts b/packages/backend-app-api/src/lib/urls.ts
deleted file mode 100644
index 848cea25d9..0000000000
--- a/packages/backend-app-api/src/lib/urls.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2021 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 function isValidUrl(url: string): boolean {
- try {
- // eslint-disable-next-line no-new
- new URL(url);
- return true;
- } catch {
- return false;
- }
-}
diff --git a/packages/backend-app-api/src/logging/WinstonLogger.ts b/packages/backend-app-api/src/logging/WinstonLogger.ts
deleted file mode 100644
index e5403906ce..0000000000
--- a/packages/backend-app-api/src/logging/WinstonLogger.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2023 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.
- */
-
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import {
- WinstonLogger as _WinstonLogger,
- type WinstonLoggerOptions as _WinstonLoggerOptions,
-} from '../../../backend-defaults/src/entrypoints/rootLogger';
-
-import {
- LoggerService,
- RootLoggerService,
-} from '@backstage/backend-plugin-api';
-import { JsonObject } from '@backstage/types';
-import { Format } from 'logform';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootLogger` instead.
- */
-export type WinstonLoggerOptions = _WinstonLoggerOptions;
-
-/**
- * A {@link @backstage/backend-plugin-api#LoggerService} implementation based on winston.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootLogger` instead.
- */
-export class WinstonLogger implements RootLoggerService {
- /**
- * Creates a {@link WinstonLogger} instance.
- */
- static create(options: WinstonLoggerOptions): WinstonLogger {
- return new WinstonLogger(_WinstonLogger.create(options));
- }
-
- /**
- * Creates a winston log formatter for redacting secrets.
- */
- static redacter(): {
- format: Format;
- add: (redactions: Iterable) => void;
- } {
- return _WinstonLogger.redacter();
- }
-
- /**
- * Creates a pretty printed winston log formatter.
- */
- static colorFormat(): Format {
- return _WinstonLogger.colorFormat();
- }
-
- private constructor(private readonly impl: _WinstonLogger) {}
-
- error(message: string, meta?: JsonObject): void {
- this.impl.error(message, meta);
- }
-
- warn(message: string, meta?: JsonObject): void {
- this.impl.warn(message, meta);
- }
-
- info(message: string, meta?: JsonObject): void {
- this.impl.info(message, meta);
- }
-
- debug(message: string, meta?: JsonObject): void {
- this.impl.debug(message, meta);
- }
-
- child(meta: JsonObject): LoggerService {
- return this.impl.child(meta);
- }
-
- addRedactions(redactions: Iterable) {
- this.impl.addRedactions(redactions);
- }
-}
diff --git a/packages/backend-app-api/src/logging/index.ts b/packages/backend-app-api/src/logging/index.ts
deleted file mode 100644
index 14fe33f898..0000000000
--- a/packages/backend-app-api/src/logging/index.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright 2023 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 { WinstonLogger } from './WinstonLogger';
-export type { WinstonLoggerOptions } from './WinstonLogger';
diff --git a/packages/backend-app-api/src/services/implementations/cache/cacheServiceFactory.ts b/packages/backend-app-api/src/services/implementations/cache/cacheServiceFactory.ts
deleted file mode 100644
index 9b5e5ab16a..0000000000
--- a/packages/backend-app-api/src/services/implementations/cache/cacheServiceFactory.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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 { CacheManager } from '@backstage/backend-common';
-import {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/cache` instead.
- */
-export const cacheServiceFactory = createServiceFactory({
- service: coreServices.cache,
- deps: {
- config: coreServices.rootConfig,
- logger: coreServices.rootLogger,
- plugin: coreServices.pluginMetadata,
- },
- async createRootContext({ config, logger }) {
- return CacheManager.fromConfig(config, { logger });
- },
- async factory({ plugin }, manager) {
- return manager.forPlugin(plugin.getId()).getClient();
- },
-});
diff --git a/packages/backend-app-api/src/services/implementations/cache/index.ts b/packages/backend-app-api/src/services/implementations/cache/index.ts
deleted file mode 100644
index f96ee77182..0000000000
--- a/packages/backend-app-api/src/services/implementations/cache/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { cacheServiceFactory } from './cacheServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/config/rootConfigServiceFactory.ts b/packages/backend-app-api/src/services/implementations/config/rootConfigServiceFactory.ts
deleted file mode 100644
index c74474e629..0000000000
--- a/packages/backend-app-api/src/services/implementations/config/rootConfigServiceFactory.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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 {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-import {
- ConfigSources,
- RemoteConfigSourceOptions,
-} from '@backstage/config-loader';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootConfig` instead.
- */
-export interface RootConfigFactoryOptions {
- /**
- * Process arguments to use instead of the default `process.argv()`.
- */
- argv?: string[];
-
- /**
- * Enables and sets options for remote configuration loading.
- */
- remote?: Pick;
- watch?: boolean;
-}
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootConfig` instead.
- */
-export const rootConfigServiceFactory = createServiceFactory(
- (options?: RootConfigFactoryOptions) => ({
- service: coreServices.rootConfig,
- deps: {},
- async factory() {
- const source = ConfigSources.default({
- argv: options?.argv,
- remote: options?.remote,
- watch: options?.watch,
- });
- console.log(`Loading config from ${source}`);
- return await ConfigSources.toConfig(source);
- },
- }),
-);
diff --git a/packages/backend-app-api/src/services/implementations/database/databaseServiceFactory.ts b/packages/backend-app-api/src/services/implementations/database/databaseServiceFactory.ts
deleted file mode 100644
index 972d8dd4ec..0000000000
--- a/packages/backend-app-api/src/services/implementations/database/databaseServiceFactory.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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 { DatabaseManager } from '@backstage/backend-common';
-import {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-import { ConfigReader } from '@backstage/config';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/database` instead.
- */
-export const databaseServiceFactory = createServiceFactory({
- service: coreServices.database,
- deps: {
- config: coreServices.rootConfig,
- lifecycle: coreServices.lifecycle,
- pluginMetadata: coreServices.pluginMetadata,
- },
- async createRootContext({ config }) {
- return config.getOptional('backend.database')
- ? DatabaseManager.fromConfig(config)
- : DatabaseManager.fromConfig(
- new ConfigReader({
- backend: {
- database: { client: 'better-sqlite3', connection: ':memory:' },
- },
- }),
- );
- },
- async factory({ pluginMetadata, lifecycle }, databaseManager) {
- return databaseManager.forPlugin(pluginMetadata.getId(), {
- pluginMetadata,
- lifecycle,
- });
- },
-});
diff --git a/packages/backend-app-api/src/services/implementations/discovery/HostDiscovery.test.ts b/packages/backend-app-api/src/services/implementations/discovery/HostDiscovery.test.ts
deleted file mode 100644
index 4e6aff5853..0000000000
--- a/packages/backend-app-api/src/services/implementations/discovery/HostDiscovery.test.ts
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2020 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 { ConfigReader } from '@backstage/config';
-import { HostDiscovery } from './HostDiscovery';
-
-describe('HostDiscovery', () => {
- it('is created from config', async () => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40',
- listen: { port: 80, host: 'localhost' },
- },
- }),
- );
-
- await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
- 'http://localhost:80/api/catalog',
- );
- await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
- 'http://localhost:40/api/catalog',
- );
- });
-
- it('strips trailing slashes in config', async () => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40//',
- listen: { port: 80, host: 'localhost' },
- },
- }),
- );
-
- await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
- 'http://localhost:80/api/catalog',
- );
- await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
- 'http://localhost:40/api/catalog',
- );
- });
-
- it('can configure the base path', async () => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40',
- listen: { port: 80, host: 'localhost' },
- },
- }),
- { basePath: '/service' },
- );
-
- await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
- 'http://localhost:80/service/catalog',
- );
- await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
- 'http://localhost:40/service/catalog',
- );
- });
-
- it.each([
- [{ listen: ':80' }, 'http://localhost:80'],
- [{ listen: ':40', https: true }, 'https://localhost:40'],
- [{ listen: '127.0.0.1:80' }, 'http://127.0.0.1:80'],
- [{ listen: '127.0.0.1:80', https: true }, 'https://127.0.0.1:80'],
- [{ listen: '0.0.0.0:40' }, 'http://127.0.0.1:40'],
- [{ listen: { port: 80 } }, 'http://localhost:80'],
- [{ listen: { port: 8000 } }, 'http://localhost:8000'],
- [{ listen: { port: 80, host: '0.0.0.0' } }, 'http://127.0.0.1:80'],
- [{ listen: { port: 80, host: '::' } }, 'http://localhost:80'],
- [{ listen: { port: 80, host: '::1' } }, 'http://[::1]:80'],
- [{ listen: { port: 90, host: '::2' }, https: true }, 'https://[::2]:90'],
- ])('resolves internal baseUrl for %j as %s', async (config, expected) => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40',
- ...config,
- },
- }),
- );
-
- await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
- `${expected}/api/catalog`,
- );
- });
-
- it('uses plugin specific targets from config if provided', async () => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40',
- listen: { port: 80, host: 'localhost' },
- },
- discovery: {
- endpoints: [
- {
- target: {
- internal: 'http://catalog-backend-internal:8080/api/catalog',
- external: 'http://catalog-backend-external:8080/api/catalog',
- },
- plugins: ['catalog'],
- },
- ],
- },
- }),
- );
-
- await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
- 'http://catalog-backend-internal:8080/api/catalog',
- );
- await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
- 'http://catalog-backend-external:8080/api/catalog',
- );
- });
-
- it('uses a single target for internal and external for a plugin', async () => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40',
- listen: { port: 80, host: 'localhost' },
- },
- discovery: {
- endpoints: [
- {
- target: 'http://catalog-backend:8080/api/catalog',
- plugins: ['catalog'],
- },
- ],
- },
- }),
- );
-
- await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
- 'http://catalog-backend:8080/api/catalog',
- );
- await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
- 'http://catalog-backend:8080/api/catalog',
- );
- });
-
- it('defaults to the backend baseUrl when there is not an endpoint for a plugin', async () => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40',
- listen: { port: 80, host: 'localhost' },
- },
- discovery: {
- endpoints: [
- {
- target: 'http://catalog-backend:8080/api/catalog',
- plugins: ['catalog'],
- },
- ],
- },
- }),
- );
-
- await expect(discovery.getBaseUrl('scaffolder')).resolves.toBe(
- 'http://localhost:80/api/scaffolder',
- );
- await expect(discovery.getExternalBaseUrl('scaffolder')).resolves.toBe(
- 'http://localhost:40/api/scaffolder',
- );
- });
-
- it('replaces {{pluginId}} or {{ pluginId }} in the target', async () => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40',
- listen: { port: 80, host: 'localhost' },
- },
- discovery: {
- endpoints: [
- {
- target: 'http://common-backend:8080/api/{{pluginId}}',
- plugins: ['catalog', 'docs'],
- },
- {
- target: {
- internal: 'http://scaffolder-internal:8080/api/{{ pluginId }}',
- external: 'http://scaffolder-external:8080/api/{{ pluginId }}',
- },
- plugins: ['scaffolder'],
- },
- ],
- },
- }),
- );
-
- await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
- 'http://common-backend:8080/api/catalog',
- );
- await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
- 'http://common-backend:8080/api/catalog',
- );
- await expect(discovery.getBaseUrl('docs')).resolves.toBe(
- 'http://common-backend:8080/api/docs',
- );
- await expect(discovery.getExternalBaseUrl('docs')).resolves.toBe(
- 'http://common-backend:8080/api/docs',
- );
- await expect(discovery.getBaseUrl('scaffolder')).resolves.toBe(
- 'http://scaffolder-internal:8080/api/scaffolder',
- );
- await expect(discovery.getExternalBaseUrl('scaffolder')).resolves.toBe(
- 'http://scaffolder-external:8080/api/scaffolder',
- );
- });
-
- it('encodes the pluginId', async () => {
- const discovery = HostDiscovery.fromConfig(
- new ConfigReader({
- backend: {
- baseUrl: 'http://localhost:40',
- listen: { port: 80, host: 'localhost' },
- },
- discovery: {
- endpoints: [
- {
- target: 'http://common-backend:8080/api/{{pluginId}}',
- plugins: ['plugin/beta'],
- },
- ],
- },
- }),
- );
-
- await expect(discovery.getBaseUrl('plugin/beta')).resolves.toBe(
- 'http://common-backend:8080/api/plugin%2Fbeta',
- );
- await expect(discovery.getBaseUrl('plugin/alpha')).resolves.toBe(
- 'http://localhost:80/api/plugin%2Falpha',
- );
- await expect(discovery.getExternalBaseUrl('plugin/alpha')).resolves.toBe(
- 'http://localhost:40/api/plugin%2Falpha',
- );
- });
-});
diff --git a/packages/backend-app-api/src/services/implementations/discovery/HostDiscovery.ts b/packages/backend-app-api/src/services/implementations/discovery/HostDiscovery.ts
deleted file mode 100644
index 5909dd1ae6..0000000000
--- a/packages/backend-app-api/src/services/implementations/discovery/HostDiscovery.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2020 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 { Config } from '@backstage/config';
-import { DiscoveryService } from '@backstage/backend-plugin-api';
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import { HostDiscovery as _HostDiscovery } from '../../../../../backend-defaults/src/entrypoints/discovery';
-
-/**
- * HostDiscovery is a basic PluginEndpointDiscovery implementation
- * that can handle plugins that are hosted in a single or multiple deployments.
- *
- * The deployment may be scaled horizontally, as long as the external URL
- * is the same for all instances. However, internal URLs will always be
- * resolved to the same host, so there won't be any balancing of internal traffic.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/discovery` instead.
- */
-export class HostDiscovery implements DiscoveryService {
- /**
- * Creates a new HostDiscovery discovery instance by reading
- * from the `backend` config section, specifically the `.baseUrl` for
- * discovering the external URL, and the `.listen` and `.https` config
- * for the internal one.
- *
- * Can be overridden in config by providing a target and corresponding plugins in `discovery.endpoints`.
- * eg.
- * ```yaml
- * discovery:
- * endpoints:
- * - target: https://internal.example.com/internal-catalog
- * plugins: [catalog]
- * - target: https://internal.example.com/secure/api/{{pluginId}}
- * plugins: [auth, permission]
- * - target:
- * internal: https://internal.example.com/search
- * external: https://example.com/search
- * plugins: [search]
- * ```
- *
- * The basePath defaults to `/api`, meaning the default full internal
- * path for the `catalog` plugin will be `http://localhost:7007/api/catalog`.
- */
- static fromConfig(config: Config, options?: { basePath?: string }) {
- return new HostDiscovery(_HostDiscovery.fromConfig(config, options));
- }
-
- private constructor(private readonly impl: _HostDiscovery) {}
-
- async getBaseUrl(pluginId: string): Promise {
- return this.impl.getBaseUrl(pluginId);
- }
-
- async getExternalBaseUrl(pluginId: string): Promise {
- return this.impl.getExternalBaseUrl(pluginId);
- }
-}
diff --git a/packages/backend-app-api/src/services/implementations/discovery/discoveryServiceFactory.ts b/packages/backend-app-api/src/services/implementations/discovery/discoveryServiceFactory.ts
deleted file mode 100644
index b29a589438..0000000000
--- a/packages/backend-app-api/src/services/implementations/discovery/discoveryServiceFactory.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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 {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-import { HostDiscovery } from './HostDiscovery';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/discovery` instead.
- */
-export const discoveryServiceFactory = createServiceFactory({
- service: coreServices.discovery,
- deps: {
- config: coreServices.rootConfig,
- },
- async factory({ config }) {
- return HostDiscovery.fromConfig(config);
- },
-});
diff --git a/packages/backend-app-api/src/services/implementations/discovery/index.ts b/packages/backend-app-api/src/services/implementations/discovery/index.ts
deleted file mode 100644
index ee4851271a..0000000000
--- a/packages/backend-app-api/src/services/implementations/discovery/index.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright 2023 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 { discoveryServiceFactory } from './discoveryServiceFactory';
-export { HostDiscovery } from './HostDiscovery';
diff --git a/packages/backend-app-api/src/services/implementations/httpRouter/createLifecycleMiddleware.ts b/packages/backend-app-api/src/services/implementations/httpRouter/createLifecycleMiddleware.ts
deleted file mode 100644
index d4864a23a6..0000000000
--- a/packages/backend-app-api/src/services/implementations/httpRouter/createLifecycleMiddleware.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.
- */
-
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import {
- createLifecycleMiddleware as _createLifecycleMiddleware,
- type LifecycleMiddlewareOptions as _LifecycleMiddlewareOptions,
-} from '../../../../../backend-defaults/src/entrypoints/httpRouter/createLifecycleMiddleware';
-
-/**
- * Options for {@link createLifecycleMiddleware}.
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/httpRouter` instead.
- */
-export type LifecycleMiddlewareOptions = _LifecycleMiddlewareOptions;
-
-/**
- * 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
- * @deprecated Please import from `@backstage/backend-defaults/httpRouter` instead.
- */
-export const createLifecycleMiddleware = _createLifecycleMiddleware;
diff --git a/packages/backend-app-api/src/services/implementations/httpRouter/httpRouterServiceFactory.ts b/packages/backend-app-api/src/services/implementations/httpRouter/httpRouterServiceFactory.ts
deleted file mode 100644
index 0088e53f98..0000000000
--- a/packages/backend-app-api/src/services/implementations/httpRouter/httpRouterServiceFactory.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import { httpRouterServiceFactory as _httpRouterServiceFactory } from '../../../../../backend-defaults/src/entrypoints/httpRouter/httpRouterServiceFactory';
-
-/**
- * HTTP route registration for plugins.
- *
- * See {@link @backstage/code-plugin-api#HttpRouterService}
- * and {@link https://backstage.io/docs/backend-system/core-services/http-router | the service docs}
- * for more information.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/httpRouter` instead.
- */
-export const httpRouterServiceFactory = _httpRouterServiceFactory;
diff --git a/packages/backend-app-api/src/services/implementations/httpRouter/index.ts b/packages/backend-app-api/src/services/implementations/httpRouter/index.ts
deleted file mode 100644
index bc12480ae8..0000000000
--- a/packages/backend-app-api/src/services/implementations/httpRouter/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2023 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 { httpRouterServiceFactory } from './httpRouterServiceFactory';
-export { createLifecycleMiddleware } from './createLifecycleMiddleware';
-export type { LifecycleMiddlewareOptions } from './createLifecycleMiddleware';
diff --git a/packages/backend-app-api/src/services/implementations/identity/identityServiceFactory.ts b/packages/backend-app-api/src/services/implementations/identity/identityServiceFactory.ts
deleted file mode 100644
index c2f1a61007..0000000000
--- a/packages/backend-app-api/src/services/implementations/identity/identityServiceFactory.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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 {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
-
-/**
- * An identity client options object which allows extra configurations
- *
- * @public
- * @deprecated Please migrate to the new `coreServices.auth`, `coreServices.httpAuth`, and `coreServices.userInfo` services as needed instead
- */
-export type IdentityFactoryOptions = {
- issuer?: string;
-
- /**
- * JWS "alg" (Algorithm) Header Parameter values. Defaults to an array containing just ES256.
- * More info on supported algorithms: https://github.com/panva/jose
- */
- algorithms?: string[];
-};
-
-/**
- * @public
- * @deprecated Please migrate to the new `coreServices.auth`, `coreServices.httpAuth`, and `coreServices.userInfo` services as needed instead
- */
-export const identityServiceFactory = createServiceFactory(
- (options?: IdentityFactoryOptions) => ({
- service: coreServices.identity,
- deps: {
- discovery: coreServices.discovery,
- },
- async factory({ discovery }) {
- return DefaultIdentityClient.create({ discovery, ...options });
- },
- }),
-);
diff --git a/packages/backend-app-api/src/services/implementations/identity/index.ts b/packages/backend-app-api/src/services/implementations/identity/index.ts
deleted file mode 100644
index bf2f4436dd..0000000000
--- a/packages/backend-app-api/src/services/implementations/identity/index.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright 2023 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 { identityServiceFactory } from './identityServiceFactory';
-export type { IdentityFactoryOptions } from './identityServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/index.ts b/packages/backend-app-api/src/services/implementations/index.ts
deleted file mode 100644
index 3a2fe819ed..0000000000
--- a/packages/backend-app-api/src/services/implementations/index.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- */
-
-export * from './cache';
-export * from './config';
-export * from './database';
-export * from './discovery';
-export * from './identity';
-export * from './lifecycle';
-export * from './permissions';
-export * from './rootLifecycle';
-export * from './tokenManager';
-export * from './urlReader';
-
-export * from './deprecated';
diff --git a/packages/backend-app-api/src/services/implementations/lifecycle/index.ts b/packages/backend-app-api/src/services/implementations/lifecycle/index.ts
deleted file mode 100644
index 8dac4c26b4..0000000000
--- a/packages/backend-app-api/src/services/implementations/lifecycle/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { lifecycleServiceFactory } from './lifecycleServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/lifecycle/lifecycleServiceFactory.ts b/packages/backend-app-api/src/services/implementations/lifecycle/lifecycleServiceFactory.ts
deleted file mode 100644
index b3b0135a7c..0000000000
--- a/packages/backend-app-api/src/services/implementations/lifecycle/lifecycleServiceFactory.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * 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 {
- LifecycleService,
- LifecycleServiceShutdownHook,
- LifecycleServiceShutdownOptions,
- LifecycleServiceStartupHook,
- LifecycleServiceStartupOptions,
- LoggerService,
- PluginMetadataService,
- RootLifecycleService,
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-
-/**
- * @internal
- * @deprecated
- */
-export class BackendPluginLifecycleImpl implements LifecycleService {
- constructor(
- private readonly logger: LoggerService,
- private readonly rootLifecycle: RootLifecycleService,
- private readonly pluginMetadata: PluginMetadataService,
- ) {}
-
- #hasStarted = false;
- #startupTasks: Array<{
- hook: LifecycleServiceStartupHook;
- options?: LifecycleServiceStartupOptions;
- }> = [];
-
- addStartupHook(
- hook: LifecycleServiceStartupHook,
- options?: LifecycleServiceStartupOptions,
- ): void {
- if (this.#hasStarted) {
- throw new Error('Attempted to add startup hook after startup');
- }
- this.#startupTasks.push({ hook, options });
- }
-
- async startup(): Promise {
- if (this.#hasStarted) {
- return;
- }
- this.#hasStarted = true;
-
- this.logger.debug(
- `Running ${this.#startupTasks.length} plugin startup tasks...`,
- );
- await Promise.all(
- this.#startupTasks.map(async ({ hook, options }) => {
- const logger = options?.logger ?? this.logger;
- try {
- await hook();
- logger.debug(`Plugin startup hook succeeded`);
- } catch (error) {
- logger.error(`Plugin startup hook failed, ${error}`);
- }
- }),
- );
- }
-
- addShutdownHook(
- hook: LifecycleServiceShutdownHook,
- options?: LifecycleServiceShutdownOptions,
- ): void {
- const plugin = this.pluginMetadata.getId();
- this.rootLifecycle.addShutdownHook(hook, {
- logger: options?.logger?.child({ plugin }) ?? this.logger,
- });
- }
-}
-
-/**
- * Allows plugins to register shutdown hooks that are run when the process is about to exit.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/lifecycle` instead.
- */
-export const lifecycleServiceFactory = createServiceFactory({
- service: coreServices.lifecycle,
- deps: {
- logger: coreServices.logger,
- rootLifecycle: coreServices.rootLifecycle,
- pluginMetadata: coreServices.pluginMetadata,
- },
- async factory({ rootLifecycle, logger, pluginMetadata }) {
- return new BackendPluginLifecycleImpl(
- logger,
- rootLifecycle,
- pluginMetadata,
- );
- },
-});
diff --git a/packages/backend-app-api/src/services/implementations/logger/index.ts b/packages/backend-app-api/src/services/implementations/logger/index.ts
deleted file mode 100644
index ca52bf5193..0000000000
--- a/packages/backend-app-api/src/services/implementations/logger/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { loggerServiceFactory } from './loggerServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/permissions/index.ts b/packages/backend-app-api/src/services/implementations/permissions/index.ts
deleted file mode 100644
index 781dda31a0..0000000000
--- a/packages/backend-app-api/src/services/implementations/permissions/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { permissionsServiceFactory } from './permissionsServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/permissions/permissionsServiceFactory.ts b/packages/backend-app-api/src/services/implementations/permissions/permissionsServiceFactory.ts
deleted file mode 100644
index c8fa0e7bbf..0000000000
--- a/packages/backend-app-api/src/services/implementations/permissions/permissionsServiceFactory.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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 {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-import { ServerPermissionClient } from '@backstage/plugin-permission-node';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/permissions` instead.
- */
-export const permissionsServiceFactory = createServiceFactory({
- service: coreServices.permissions,
- deps: {
- auth: coreServices.auth,
- config: coreServices.rootConfig,
- discovery: coreServices.discovery,
- tokenManager: coreServices.tokenManager,
- },
- async factory({ auth, config, discovery, tokenManager }) {
- return ServerPermissionClient.fromConfig(config, {
- auth,
- discovery,
- tokenManager,
- });
- },
-});
diff --git a/packages/backend-app-api/src/services/implementations/rootHttpRouter/DefaultRootHttpRouter.test.ts b/packages/backend-app-api/src/services/implementations/rootHttpRouter/DefaultRootHttpRouter.test.ts
deleted file mode 100644
index fc1de9b205..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootHttpRouter/DefaultRootHttpRouter.test.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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 express from 'express';
-import request from 'supertest';
-import { DefaultRootHttpRouter } from './DefaultRootHttpRouter';
-
-describe('DefaultRootHttpRouter', () => {
- it.each([
- [['/b'], '/a'],
- [['/a'], '/aa/b'],
- [['/aa'], '/a/b'],
- [['/a/b'], '/aa'],
- [['/b/a'], '/a'],
- [['/a'], '/aa'],
- ])(`with existing paths %s, adds %s without conflict`, (existing, added) => {
- const router = DefaultRootHttpRouter.create();
- for (const path of existing) {
- router.use(path, () => {});
- }
- expect(() => router.use(added, () => {})).not.toThrow();
- });
-
- it.each([
- [['/a'], '/a', '/a'],
- [['/a'], '/a/b', '/a'],
- [['/a/b'], '/a', '/a/b'],
- ])(
- `find conflict when existing paths %s, adds %s`,
- (existing, added, conflict) => {
- const router = DefaultRootHttpRouter.create();
- for (const path of existing) {
- router.use(path, () => {});
- }
- expect(() => router.use(added, () => {})).toThrow(
- `Path ${added} conflicts with the existing path ${conflict}`,
- );
- },
- );
-
- it('should not be possible to supply an empty indexPath', () => {
- expect(() => DefaultRootHttpRouter.create({ indexPath: '' })).toThrow(
- 'indexPath option may not be an empty string',
- );
- });
-
- it('will always prioritize non-index paths', async () => {
- const router = DefaultRootHttpRouter.create({ indexPath: '/x' });
- const app = express();
- app.use(router.handler());
-
- const routerX = express.Router();
- routerX.get('/a', (_req, res) => res.status(201).end());
-
- const routerY = express.Router();
- routerY.get('/a', (_req, res) => res.status(202).end());
-
- await request(app).get('/').expect(404);
- await request(app).get('/a').expect(404);
- await request(app).get('/x/a').expect(404);
- await request(app).get('/y/a').expect(404);
-
- router.use('/x', routerX);
-
- await request(app).get('/').expect(404);
- await request(app).get('/a').expect(201);
- await request(app).get('/x/a').expect(201);
- await request(app).get('/y/a').expect(404);
-
- router.use('/y', routerY);
-
- await request(app).get('/').expect(404);
- await request(app).get('/a').expect(201);
- await request(app).get('/x/a').expect(201);
- await request(app).get('/y/a').expect(202);
-
- expect('test').toBe('test');
- });
-
- it('should treat unknown /api/ routes as 404', async () => {
- const router = DefaultRootHttpRouter.create();
- const app = express();
- app.use(router.handler());
-
- router.use('/api/app', (_req, res) => res.status(201).end());
- router.use('/api/catalog', (_req, res) => res.status(202).end());
-
- await request(app).get('/').expect(201);
- await request(app).get('/api/catalog').expect(202);
- await request(app).get('/unknown').expect(201);
- await request(app).get('/api/unknown').expect(404);
-
- expect('test').toBe('test');
- });
-
- it('should treat unknown /api/ routes as 404 without an index path', async () => {
- const router = DefaultRootHttpRouter.create({ indexPath: false });
- const app = express();
- app.use(router.handler());
-
- router.use('/api/app', (_req, res) => res.status(201).end());
- router.use('/api/catalog', (_req, res) => res.status(202).end());
-
- await request(app).get('/').expect(404);
- await request(app).get('/api/catalog').expect(202);
- await request(app).get('/unknown').expect(404);
- await request(app).get('/api/unknown').expect(404);
-
- expect('test').toBe('test');
- });
-});
diff --git a/packages/backend-app-api/src/services/implementations/rootHttpRouter/DefaultRootHttpRouter.ts b/packages/backend-app-api/src/services/implementations/rootHttpRouter/DefaultRootHttpRouter.ts
deleted file mode 100644
index 617d5055db..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootHttpRouter/DefaultRootHttpRouter.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2023 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 { RootHttpRouterService } from '@backstage/backend-plugin-api';
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import {
- DefaultRootHttpRouter as _DefaultRootHttpRouter,
- DefaultRootHttpRouterOptions as _DefaultRootHttpRouterOptions,
-} from '../../../../../backend-defaults/src/entrypoints/rootHttpRouter/DefaultRootHttpRouter';
-import { Handler } from 'express';
-
-/**
- * Options for the {@link DefaultRootHttpRouter} class.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export type DefaultRootHttpRouterOptions = _DefaultRootHttpRouterOptions;
-
-/**
- * The default implementation of the {@link @backstage/backend-plugin-api#RootHttpRouterService} interface for
- * {@link @backstage/backend-plugin-api#coreServices.rootHttpRouter}.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export class DefaultRootHttpRouter implements RootHttpRouterService {
- static create(options?: DefaultRootHttpRouterOptions) {
- return new DefaultRootHttpRouter(_DefaultRootHttpRouter.create(options));
- }
-
- private constructor(private readonly impl: RootHttpRouterService) {}
-
- use(path: string, handler: Handler) {
- this.impl.use(path, handler);
- }
-
- handler(): Handler {
- return (this.impl as any).handler();
- }
-}
diff --git a/packages/backend-app-api/src/services/implementations/rootHttpRouter/index.ts b/packages/backend-app-api/src/services/implementations/rootHttpRouter/index.ts
deleted file mode 100644
index 8437399fec..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootHttpRouter/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2023 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 {
- rootHttpRouterServiceFactory,
- type RootHttpRouterFactoryOptions,
- type RootHttpRouterConfigureContext,
-} from './rootHttpRouterServiceFactory';
-export {
- DefaultRootHttpRouter,
- type DefaultRootHttpRouterOptions,
-} from './DefaultRootHttpRouter';
diff --git a/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterServiceFactory.ts b/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterServiceFactory.ts
deleted file mode 100644
index bef1913645..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterServiceFactory.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import {
- rootHttpRouterServiceFactory as _rootHttpRouterServiceFactory,
- RootHttpRouterFactoryOptions as _RootHttpRouterFactoryOptions,
- RootHttpRouterConfigureContext as _RootHttpRouterConfigureContext,
-} from '../../../../../backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export type RootHttpRouterConfigureContext = _RootHttpRouterConfigureContext;
-
-/**
- * HTTP route registration for root services.
- *
- * See {@link @backstage/code-plugin-api#RootHttpRouterService}
- * and {@link https://backstage.io/docs/backend-system/core-services/root-http-router | the service docs}
- * for more information.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export type RootHttpRouterFactoryOptions = _RootHttpRouterFactoryOptions;
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootHttpRouter` instead.
- */
-export const rootHttpRouterServiceFactory = _rootHttpRouterServiceFactory;
diff --git a/packages/backend-app-api/src/services/implementations/rootLifecycle/index.ts b/packages/backend-app-api/src/services/implementations/rootLifecycle/index.ts
deleted file mode 100644
index 86589cd23e..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootLifecycle/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { rootLifecycleServiceFactory } from './rootLifecycleServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/rootLifecycle/rootLifecycleServiceFactory.test.ts b/packages/backend-app-api/src/services/implementations/rootLifecycle/rootLifecycleServiceFactory.test.ts
deleted file mode 100644
index 5992e38d50..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootLifecycle/rootLifecycleServiceFactory.test.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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 { BackendLifecycleImpl } from './rootLifecycleServiceFactory';
-import { mockServices } from '@backstage/backend-test-utils';
-
-describe('lifecycleService', () => {
- it('should execute registered shutdown hook', async () => {
- const service = new BackendLifecycleImpl(mockServices.logger.mock());
- const hook = jest.fn();
- service.addShutdownHook(() => hook());
- // should not execute the hook more than once.
- await service.shutdown();
- await service.shutdown();
- await service.shutdown();
- expect(hook).toHaveBeenCalledTimes(1);
- });
-
- it('should not throw errors', async () => {
- const service = new BackendLifecycleImpl(mockServices.logger.mock());
- service.addShutdownHook(() => {
- throw new Error('oh no');
- });
- await expect(service.shutdown()).resolves.toBeUndefined();
- });
-
- it('should not throw async errors', async () => {
- const service = new BackendLifecycleImpl(mockServices.logger.mock());
- service.addShutdownHook(async () => {
- throw new Error('oh no');
- });
- await expect(service.shutdown()).resolves.toBeUndefined();
- });
-
- it('should reject hooks after trigger', async () => {
- const service = new BackendLifecycleImpl(mockServices.logger.mock());
- await service.startup();
- expect(() => {
- service.addStartupHook(() => {});
- }).toThrow('Attempted to add startup hook after startup');
-
- await service.shutdown();
- expect(() => {
- service.addShutdownHook(() => {});
- }).toThrow('Attempted to add shutdown hook after shutdown');
- });
-});
diff --git a/packages/backend-app-api/src/services/implementations/rootLifecycle/rootLifecycleServiceFactory.ts b/packages/backend-app-api/src/services/implementations/rootLifecycle/rootLifecycleServiceFactory.ts
deleted file mode 100644
index bf5dc09b80..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootLifecycle/rootLifecycleServiceFactory.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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 {
- createServiceFactory,
- coreServices,
- LifecycleServiceStartupHook,
- LifecycleServiceStartupOptions,
- LifecycleServiceShutdownHook,
- LifecycleServiceShutdownOptions,
- RootLifecycleService,
- LoggerService,
-} from '@backstage/backend-plugin-api';
-
-/**
- * @internal
- * @deprecated
- */
-export class BackendLifecycleImpl implements RootLifecycleService {
- constructor(private readonly logger: LoggerService) {}
-
- #hasStarted = false;
- #startupTasks: Array<{
- hook: LifecycleServiceStartupHook;
- options?: LifecycleServiceStartupOptions;
- }> = [];
-
- addStartupHook(
- hook: LifecycleServiceStartupHook,
- options?: LifecycleServiceStartupOptions,
- ): void {
- if (this.#hasStarted) {
- throw new Error('Attempted to add startup hook after startup');
- }
- this.#startupTasks.push({ hook, options });
- }
-
- async startup(): Promise {
- if (this.#hasStarted) {
- return;
- }
- this.#hasStarted = true;
-
- this.logger.debug(`Running ${this.#startupTasks.length} startup tasks...`);
- await Promise.all(
- this.#startupTasks.map(async ({ hook, options }) => {
- const logger = options?.logger ?? this.logger;
- try {
- await hook();
- logger.debug(`Startup hook succeeded`);
- } catch (error) {
- logger.error(`Startup hook failed, ${error}`);
- }
- }),
- );
- }
-
- #hasShutdown = false;
- #shutdownTasks: Array<{
- hook: LifecycleServiceShutdownHook;
- options?: LifecycleServiceShutdownOptions;
- }> = [];
-
- addShutdownHook(
- hook: LifecycleServiceShutdownHook,
- options?: LifecycleServiceShutdownOptions,
- ): void {
- if (this.#hasShutdown) {
- throw new Error('Attempted to add shutdown hook after shutdown');
- }
- this.#shutdownTasks.push({ hook, options });
- }
-
- async shutdown(): Promise {
- if (this.#hasShutdown) {
- return;
- }
- this.#hasShutdown = true;
-
- this.logger.debug(
- `Running ${this.#shutdownTasks.length} shutdown tasks...`,
- );
- await Promise.all(
- this.#shutdownTasks.map(async ({ hook, options }) => {
- const logger = options?.logger ?? this.logger;
- try {
- await hook();
- logger.debug(`Shutdown hook succeeded`);
- } catch (error) {
- logger.error(`Shutdown hook failed, ${error}`);
- }
- }),
- );
- }
-}
-
-/**
- * Allows plugins to register shutdown hooks that are run when the process is about to exit.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootLifecycle` instead.
- */
-export const rootLifecycleServiceFactory = createServiceFactory({
- service: coreServices.rootLifecycle,
- deps: {
- logger: coreServices.rootLogger,
- },
- async factory({ logger }) {
- return new BackendLifecycleImpl(logger);
- },
-});
diff --git a/packages/backend-app-api/src/services/implementations/rootLogger/index.ts b/packages/backend-app-api/src/services/implementations/rootLogger/index.ts
deleted file mode 100644
index 366cd53163..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootLogger/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { rootLoggerServiceFactory } from './rootLoggerServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/rootLogger/rootLoggerServiceFactory.ts b/packages/backend-app-api/src/services/implementations/rootLogger/rootLoggerServiceFactory.ts
deleted file mode 100644
index af1931c438..0000000000
--- a/packages/backend-app-api/src/services/implementations/rootLogger/rootLoggerServiceFactory.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-
-// eslint-disable-next-line @backstage/no-relative-monorepo-imports
-import { rootLoggerServiceFactory as _rootLoggerServiceFactory } from '../../../../../backend-defaults/src/entrypoints/rootLogger/rootLoggerServiceFactory';
-
-/**
- * Root-level logging.
- *
- * See {@link @backstage/code-plugin-api#RootLoggerService}
- * and {@link https://backstage.io/docs/backend-system/core-services/root-logger | the service docs}
- * for more information.
- *
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/rootLogger` instead.
- */
-export const rootLoggerServiceFactory = _rootLoggerServiceFactory;
diff --git a/packages/backend-app-api/src/services/implementations/scheduler/index.ts b/packages/backend-app-api/src/services/implementations/scheduler/index.ts
deleted file mode 100644
index 8b67006a4d..0000000000
--- a/packages/backend-app-api/src/services/implementations/scheduler/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { schedulerServiceFactory } from './schedulerServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.test.ts b/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.test.ts
deleted file mode 100644
index b16509cf96..0000000000
--- a/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.test.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2023 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 { coreServices } from '@backstage/backend-plugin-api';
-import { ServiceFactoryTester } from '@backstage/backend-test-utils';
-import { schedulerServiceFactory } from './schedulerServiceFactory';
-
-describe('schedulerFactory', () => {
- it('creates sidecar database features', async () => {
- const tester = ServiceFactoryTester.from(schedulerServiceFactory());
-
- const scheduler = await tester.getSubject();
- await scheduler.scheduleTask({
- id: 'task1',
- timeout: { seconds: 1 },
- frequency: { seconds: 1 },
- fn: async () => {},
- });
-
- const database = await tester.getService(coreServices.database);
-
- const client = await database.getClient();
- await expect(
- client.from('backstage_backend_tasks__tasks').count(),
- ).resolves.toEqual([{ 'count(*)': 1 }]);
- await expect(
- client.from('backstage_backend_tasks__knex_migrations').count(),
- ).resolves.toEqual([{ 'count(*)': expect.any(Number) }]);
- await expect(
- client.from('backstage_backend_tasks__knex_migrations_lock').count(),
- ).resolves.toEqual([{ 'count(*)': expect.any(Number) }]);
- });
-});
diff --git a/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.ts b/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.ts
deleted file mode 100644
index b4370761d9..0000000000
--- a/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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 {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-import { TaskScheduler } from '@backstage/backend-tasks';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/scheduler` instead.
- */
-export const schedulerServiceFactory = createServiceFactory({
- service: coreServices.scheduler,
- deps: {
- plugin: coreServices.pluginMetadata,
- databaseManager: coreServices.database,
- logger: coreServices.logger,
- },
- async factory({ plugin, databaseManager, logger }) {
- return TaskScheduler.forPlugin({
- pluginId: plugin.getId(),
- databaseManager,
- logger,
- });
- },
-});
diff --git a/packages/backend-app-api/src/services/implementations/tokenManager/index.ts b/packages/backend-app-api/src/services/implementations/tokenManager/index.ts
deleted file mode 100644
index 3ae3d45d2f..0000000000
--- a/packages/backend-app-api/src/services/implementations/tokenManager/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { tokenManagerServiceFactory } from './tokenManagerServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.test.ts b/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.test.ts
deleted file mode 100644
index dc52130ec6..0000000000
--- a/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.test.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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 { tokenManagerServiceFactory } from './tokenManagerServiceFactory';
-import { ServiceFactoryTester } from '@backstage/backend-test-utils';
-
-describe('tokenManagerFactory', () => {
- it('should create a disabled manager without configuration', async () => {
- const tokenManager = await ServiceFactoryTester.from(
- tokenManagerServiceFactory,
- ).getSubject();
-
- await expect(tokenManager.authenticate('abc')).rejects.toThrow(
- 'no legacy keys are configured',
- );
- await expect(tokenManager.getToken()).rejects.toThrow(
- 'no legacy keys are configured',
- );
- });
-});
diff --git a/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.ts b/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.ts
deleted file mode 100644
index e7c4ce7af0..0000000000
--- a/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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 {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-import { ServerTokenManager } from '@backstage/backend-common';
-
-/**
- * @public
- * @deprecated Please migrate to the new `coreServices.auth`, `coreServices.httpAuth`, and `coreServices.userInfo` services as needed instead
- */
-export const tokenManagerServiceFactory = createServiceFactory({
- service: coreServices.tokenManager,
- deps: {
- config: coreServices.rootConfig,
- logger: coreServices.rootLogger,
- },
- createRootContext({ config, logger }) {
- return ServerTokenManager.fromConfig(config, {
- logger,
- allowDisabledTokenManager: true,
- });
- },
- async factory(_deps, tokenManager) {
- return tokenManager;
- },
-});
diff --git a/packages/backend-app-api/src/services/implementations/urlReader/index.ts b/packages/backend-app-api/src/services/implementations/urlReader/index.ts
deleted file mode 100644
index 6a4b9f65be..0000000000
--- a/packages/backend-app-api/src/services/implementations/urlReader/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2023 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 { urlReaderServiceFactory } from './urlReaderServiceFactory';
diff --git a/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts b/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts
deleted file mode 100644
index 44caf25ad6..0000000000
--- a/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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 { UrlReaders } from '@backstage/backend-common';
-import {
- coreServices,
- createServiceFactory,
-} from '@backstage/backend-plugin-api';
-
-/**
- * @public
- * @deprecated Please import from `@backstage/backend-defaults/urlReader` instead.
- */
-export const urlReaderServiceFactory = createServiceFactory({
- service: coreServices.urlReader,
- deps: {
- config: coreServices.rootConfig,
- logger: coreServices.logger,
- },
- async factory({ config, logger }) {
- return UrlReaders.default({
- config,
- logger,
- });
- },
-});
diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.test.ts b/packages/backend-app-api/src/wiring/BackendInitializer.test.ts
index 3bbef5a4c0..8e92fc7120 100644
--- a/packages/backend-app-api/src/wiring/BackendInitializer.test.ts
+++ b/packages/backend-app-api/src/wiring/BackendInitializer.test.ts
@@ -24,6 +24,7 @@ import {
createBackendPlugin,
createBackendModule,
createExtensionPoint,
+ createBackendFeatureLoader,
} from '@backstage/backend-plugin-api';
import { BackendInitializer } from './BackendInitializer';
@@ -38,14 +39,14 @@ class MockLogger {
}
const baseFactories = [
- lifecycleServiceFactory(),
- rootLifecycleServiceFactory(),
+ lifecycleServiceFactory,
+ rootLifecycleServiceFactory,
createServiceFactory({
service: coreServices.rootLogger,
deps: {},
factory: () => new MockLogger(),
- })(),
- loggerServiceFactory(),
+ }),
+ loggerServiceFactory,
];
const testPlugin = createBackendPlugin({
@@ -56,7 +57,7 @@ const testPlugin = createBackendPlugin({
async init() {},
});
},
-})();
+});
describe('BackendInitializer', () => {
it('should initialize root scoped services', async () => {
@@ -83,18 +84,18 @@ describe('BackendInitializer', () => {
initialization: 'always',
deps: {},
factory: factory1,
- })(),
+ }),
createServiceFactory({
service: ref2,
deps: {},
factory: factory2,
- })(),
+ }),
createServiceFactory({
service: ref3,
initialization: 'lazy',
deps: {},
factory: factory3,
- })(),
+ }),
];
const init = new BackendInitializer(services);
@@ -105,6 +106,128 @@ describe('BackendInitializer', () => {
expect(factory3).not.toHaveBeenCalled();
});
+ it('should discover features from feature loader', async () => {
+ const ref1 = createServiceRef<{ x: number }>({
+ id: '1',
+ scope: 'root',
+ });
+ const ref2 = createServiceRef<{ x: number }>({
+ id: '2',
+ scope: 'plugin',
+ });
+ const factory1 = jest.fn();
+ const factory2 = jest.fn();
+
+ const pluginInit = jest.fn(async () => {});
+ const moduleInit = jest.fn(async () => {});
+
+ const init = new BackendInitializer(baseFactories);
+ init.add(
+ createBackendFeatureLoader({
+ *loader() {
+ yield createServiceFactory({
+ service: ref1,
+ deps: {},
+ factory: factory1,
+ });
+ yield createServiceFactory({
+ service: ref2,
+ initialization: 'always',
+ deps: {},
+ factory: factory2,
+ });
+ yield createBackendPlugin({
+ pluginId: 'test',
+ register(reg) {
+ reg.registerInit({
+ deps: {},
+ init: pluginInit,
+ });
+ },
+ });
+ yield createBackendModule({
+ pluginId: 'test',
+ moduleId: 'tester',
+ register(reg) {
+ reg.registerInit({
+ deps: {},
+ init: moduleInit,
+ });
+ },
+ });
+ },
+ }),
+ );
+ await init.start();
+
+ expect(factory1).toHaveBeenCalled();
+ expect(factory2).toHaveBeenCalled();
+ expect(pluginInit).toHaveBeenCalled();
+ expect(moduleInit).toHaveBeenCalled();
+ });
+
+ it('should refuse to override already initialized services through loaded features', async () => {
+ const ref1 = createServiceRef<{ x: number }>({
+ id: '1',
+ scope: 'root',
+ });
+
+ const init = new BackendInitializer([
+ ...baseFactories,
+ createServiceFactory({
+ service: ref1,
+ deps: {},
+ factory: () => ({ x: 1 }),
+ }),
+ ]);
+ init.add(
+ createBackendFeatureLoader({
+ deps: { service1: ref1 },
+ *loader() {
+ yield createServiceFactory({
+ service: ref1,
+ deps: {},
+ factory: jest.fn(),
+ });
+ },
+ }),
+ );
+ await expect(init.start()).rejects.toThrow(
+ 'Unable to set service factory with id 1, service has already been instantiated',
+ );
+ });
+
+ it('should refuse feature loader that depends on a plugin scoped service', async () => {
+ const ref1 = createServiceRef<{ x: number }>({
+ id: '1',
+ });
+
+ const init = new BackendInitializer([
+ ...baseFactories,
+ createServiceFactory({
+ service: ref1,
+ deps: {},
+ factory: () => ({ x: 1 }),
+ }),
+ ]);
+ init.add(
+ createBackendFeatureLoader({
+ // @ts-expect-error
+ deps: { service1: ref1 },
+ *loader() {
+ yield createServiceFactory({
+ service: ref1,
+ deps: {},
+ factory: jest.fn(),
+ });
+ },
+ }),
+ );
+ await expect(init.start()).rejects.toThrow(
+ /^Feature loaders can only depend on root scoped services, but 'service1' is scoped to 'plugin'. Offending loader is created at '.*'$/,
+ );
+ });
+
it('should initialize plugin scoped services with eager initialization', async () => {
const ref1 = createServiceRef<{ x: number }>({
id: '1',
@@ -126,18 +249,18 @@ describe('BackendInitializer', () => {
initialization: 'always',
deps: {},
factory: factory1,
- })(),
+ }),
createServiceFactory({
service: ref2,
deps: {},
factory: factory2,
- })(),
+ }),
createServiceFactory({
service: ref3,
initialization: 'lazy',
deps: {},
factory: factory3,
- })(),
+ }),
];
const init = new BackendInitializer(services);
@@ -219,6 +342,62 @@ describe('BackendInitializer', () => {
await init.start();
});
+ it('should allow plugins and modules depend on multiton services', async () => {
+ expect.assertions(2);
+
+ const multiServiceRef = createServiceRef({
+ id: 'a',
+ multiton: true,
+ });
+ const init = new BackendInitializer(baseFactories);
+
+ init.add(
+ createServiceFactory({
+ service: multiServiceRef,
+ deps: {},
+ factory: () => 'x',
+ }),
+ );
+ init.add(
+ createServiceFactory({
+ service: multiServiceRef,
+ deps: {},
+ factory: () => 'y',
+ }),
+ );
+
+ init.add(
+ createBackendPlugin({
+ pluginId: 'test',
+ register(reg) {
+ reg.registerInit({
+ deps: { multi: multiServiceRef },
+ async init({ multi }) {
+ expect(multi).toEqual(['x', 'y']);
+ },
+ });
+ },
+ }),
+ );
+
+ init.add(
+ createBackendModule({
+ pluginId: 'test',
+ moduleId: 'test',
+ register(reg) {
+ reg.registerInit({
+ deps: { multi: multiServiceRef },
+ async init({ multi }) {
+ expect(multi).toEqual(['x', 'y']);
+ },
+ });
+ },
+ }),
+ );
+
+ await init.start();
+ });
+
it('should forward errors when plugins fail to start', async () => {
const init = new BackendInitializer([]);
init.add(
@@ -239,6 +418,49 @@ describe('BackendInitializer', () => {
);
});
+ it('should forward errors when multiple plugins fail to start', async () => {
+ const init = new BackendInitializer([]);
+ init.add(
+ createBackendPlugin({
+ pluginId: 'test-1',
+ register(reg) {
+ reg.registerInit({
+ deps: {},
+ async init() {
+ throw new Error('NOPE A');
+ },
+ });
+ },
+ }),
+ );
+ init.add(
+ createBackendPlugin({
+ pluginId: 'test-2',
+ register(reg) {
+ reg.registerInit({
+ deps: {},
+ async init() {
+ throw new Error('NOPE B');
+ },
+ });
+ },
+ }),
+ );
+ const result = init.start();
+
+ await expect(result).rejects.toThrow('Backend startup failed');
+ await expect(result).rejects.toMatchObject({
+ errors: [
+ expect.objectContaining({
+ message: "Plugin 'test-1' startup failed; caused by Error: NOPE A",
+ }),
+ expect.objectContaining({
+ message: "Plugin 'test-2' startup failed; caused by Error: NOPE B",
+ }),
+ ],
+ });
+ });
+
it('should forward errors when modules fail to start', async () => {
const init = new BackendInitializer([]);
init.add(testPlugin);
@@ -326,12 +548,12 @@ describe('BackendInitializer', () => {
const extA = createExtensionPoint({ id: 'a' });
const extB = createExtensionPoint({ id: 'b' });
const init = new BackendInitializer([
- rootLifecycleServiceFactory(),
+ rootLifecycleServiceFactory,
createServiceFactory({
service: coreServices.rootLogger,
deps: {},
factory: () => new MockLogger(),
- })(),
+ }),
]);
init.add(testPlugin);
init.add(
@@ -397,4 +619,109 @@ describe('BackendInitializer', () => {
"Illegal dependency: Module 'mod' for plugin 'test' attempted to depend on extension point 'a' for plugin 'test-a'. Extension points can only be used within their plugin's scope.",
);
});
+
+ it('should reject plugins with missing dependencies', async () => {
+ const init = new BackendInitializer(baseFactories);
+ const ref = createServiceRef({ id: 'a' });
+ init.add(
+ createBackendPlugin({
+ pluginId: 'test',
+ register(reg) {
+ reg.registerInit({
+ deps: { ref },
+ async init() {},
+ });
+ },
+ }),
+ );
+ await expect(init.start()).rejects.toThrow(
+ "Service or extension point dependencies of plugin 'test' are missing for the following ref(s): serviceRef{a}",
+ );
+ });
+
+ it('should reject modules with missing dependencies', async () => {
+ const init = new BackendInitializer(baseFactories);
+ const ref = createServiceRef({ id: 'a' });
+ init.add(
+ createBackendPlugin({
+ pluginId: 'test',
+ register(reg) {
+ reg.registerInit({
+ deps: {},
+ async init() {},
+ });
+ },
+ }),
+ );
+ init.add(
+ createBackendModule({
+ pluginId: 'test',
+ moduleId: 'test-mod',
+ register(reg) {
+ reg.registerInit({
+ deps: { ref },
+ async init() {},
+ });
+ },
+ }),
+ );
+ await expect(init.start()).rejects.toThrow(
+ "Service or extension point dependencies of module 'test-mod' for plugin 'test' are missing for the following ref(s): serviceRef{a}",
+ );
+ });
+
+ it('should properly load double-default CJS modules', async () => {
+ expect.assertions(3);
+
+ const init = new BackendInitializer(baseFactories);
+ init.add(
+ createBackendFeatureLoader({
+ loader() {
+ return [
+ createBackendPlugin({
+ pluginId: 'no-double-wrapping',
+ register(reg) {
+ reg.registerInit({
+ deps: {},
+ async init() {
+ expect(true).toBeTruthy();
+ },
+ });
+ },
+ }),
+ {
+ default: createBackendPlugin({
+ pluginId: 'single-wrapping',
+ register(reg) {
+ reg.registerInit({
+ deps: {},
+ async init() {
+ expect(true).toBeTruthy();
+ },
+ });
+ },
+ }),
+ },
+ {
+ default: {
+ default: createBackendPlugin({
+ pluginId: 'double-wrapping',
+ register(reg) {
+ reg.registerInit({
+ deps: {},
+ async init() {
+ expect(true).toBeTruthy();
+ },
+ });
+ },
+ }),
+ },
+ } as any, // not typescript valid, but can happen at runtime
+ ];
+ },
+ }),
+ );
+
+ await init.start();
+ });
});
diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts
index ddad94de14..86771fbb74 100644
--- a/packages/backend-app-api/src/wiring/BackendInitializer.ts
+++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts
@@ -25,13 +25,20 @@ import {
} from '@backstage/backend-plugin-api';
import { ServiceOrExtensionPoint } from './types';
// Direct internal import to avoid duplication
-// eslint-disable-next-line @backstage/no-forbidden-package-imports
-import { InternalBackendFeature } from '@backstage/backend-plugin-api/src/wiring/types';
+// eslint-disable-next-line @backstage/no-relative-monorepo-imports
+import type {
+ InternalBackendFeature,
+ InternalBackendFeatureLoader,
+ InternalBackendRegistrations,
+} from '../../../backend-plugin-api/src/wiring/types';
+// 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 { DependencyGraph } from '../lib/DependencyGraph';
import { ServiceRegistry } from './ServiceRegistry';
import { createInitializationLogger } from './createInitializationLogger';
+import { unwrapFeature } from './helpers';
export interface BackendRegisterInit {
consumes: Set;
@@ -42,12 +49,61 @@ export interface BackendRegisterInit {
};
}
+/**
+ * A registry of backend instances, used to manage process shutdown hooks across all instances.
+ */
+const instanceRegistry = new (class InstanceRegistry {
+ #registered = false;
+ #instances = new Set();
+
+ register(instance: BackendInitializer) {
+ if (!this.#registered) {
+ this.#registered = true;
+
+ process.addListener('SIGTERM', this.#exitHandler);
+ process.addListener('SIGINT', this.#exitHandler);
+ process.addListener('beforeExit', this.#exitHandler);
+ }
+
+ this.#instances.add(instance);
+ }
+
+ unregister(instance: BackendInitializer) {
+ this.#instances.delete(instance);
+ }
+
+ #exitHandler = async () => {
+ try {
+ const results = await Promise.allSettled(
+ Array.from(this.#instances).map(b => b.stop()),
+ );
+ const errors = results.flatMap(r =>
+ r.status === 'rejected' ? [r.reason] : [],
+ );
+
+ if (errors.length > 0) {
+ for (const error of errors) {
+ console.error(error);
+ }
+ process.exit(1);
+ } else {
+ process.exit(0);
+ }
+ } catch (error) {
+ console.error(error);
+ process.exit(1);
+ }
+ };
+})();
+
export class BackendInitializer {
#startPromise?: Promise;
- #features = new Array();
+ #stopPromise?: Promise;
+ #registrations = new Array();
#extensionPoints = new Map();
#serviceRegistry: ServiceRegistry;
#registeredFeatures = new Array>();
+ #registeredFeatureLoaders = new Array();
constructor(defaultApiFactories: ServiceFactory[]) {
this.#serviceRegistry = ServiceRegistry.create([...defaultApiFactories]);
@@ -85,8 +141,11 @@ export class BackendInitializer {
if (missingRefs.size > 0) {
const missing = Array.from(missingRefs).join(', ');
+ const target = moduleId
+ ? `module '${moduleId}' for plugin '${pluginId}'`
+ : `plugin '${pluginId}'`;
throw new Error(
- `No extension point or service available for the following ref(s): ${missing}`,
+ `Service or extension point dependencies of ${target} are missing for the following ref(s): ${missing}`,
);
}
@@ -101,21 +160,12 @@ export class BackendInitializer {
}
#addFeature(feature: BackendFeature) {
- if (feature.$$type !== '@backstage/BackendFeature') {
- throw new Error(
- `Failed to add feature, invalid type '${feature.$$type}'`,
- );
- }
-
if (isServiceFactory(feature)) {
this.#serviceRegistry.add(feature);
- } else if (isInternalBackendFeature(feature)) {
- if (feature.version !== 'v1') {
- throw new Error(
- `Failed to add feature, invalid version '${feature.version}'`,
- );
- }
- this.#features.push(feature);
+ } else if (isBackendFeatureLoader(feature)) {
+ this.#registeredFeatureLoaders.push(feature);
+ } else if (isBackendRegistrations(feature)) {
+ this.#registrations.push(feature);
} else {
throw new Error(
`Failed to add feature, invalid feature ${JSON.stringify(feature)}`,
@@ -127,24 +177,11 @@ export class BackendInitializer {
if (this.#startPromise) {
throw new Error('Backend has already started');
}
+ if (this.#stopPromise) {
+ throw new Error('Backend has already stopped');
+ }
- const exitHandler = async () => {
- process.removeListener('SIGTERM', exitHandler);
- process.removeListener('SIGINT', exitHandler);
- process.removeListener('beforeExit', exitHandler);
-
- try {
- await this.stop();
- process.exit(0);
- } catch (error) {
- console.error(error);
- process.exit(1);
- }
- };
-
- process.addListener('SIGTERM', exitHandler);
- process.addListener('SIGINT', exitHandler);
- process.addListener('beforeExit', exitHandler);
+ instanceRegistry.register(this);
this.#startPromise = this.#doStart();
await this.#startPromise;
@@ -158,6 +195,7 @@ export class BackendInitializer {
}
const featureDiscovery = await this.#serviceRegistry.get(
+ // TODO: Let's leave this in place and remove it once the deprecated service is removed. We can do that post-1.0 since it's alpha
featureDiscoveryServiceRef,
'root',
);
@@ -165,19 +203,21 @@ export class BackendInitializer {
if (featureDiscovery) {
const { features } = await featureDiscovery.getBackendFeatures();
for (const feature of features) {
- this.#addFeature(feature);
+ this.#addFeature(unwrapFeature(feature));
}
this.#serviceRegistry.checkForCircularDeps();
}
+ await this.#applyBackendFeatureLoaders(this.#registeredFeatureLoaders);
+
// Initialize all root scoped services
await this.#serviceRegistry.initializeEagerServicesWithScope('root');
const pluginInits = new Map();
const moduleInits = new Map>();
- // Enumerate all features
- for (const feature of this.#features) {
+ // Enumerate all registrations
+ for (const feature of this.#registrations) {
for (const r of feature.getRegistrations()) {
const provides = new Set>();
@@ -205,7 +245,7 @@ export class BackendInitializer {
consumes: new Set(Object.values(r.init.deps)),
init: r.init,
});
- } else {
+ } else if (r.type === 'module') {
let modules = moduleInits.get(r.pluginId);
if (!modules) {
modules = new Map();
@@ -221,6 +261,8 @@ export class BackendInitializer {
consumes: new Set(Object.values(r.init.deps)),
init: r.init,
});
+ } else {
+ throw new Error(`Invalid registration type '${(r as any).type}'`);
}
}
}
@@ -233,76 +275,91 @@ export class BackendInitializer {
);
// All plugins are initialized in parallel
- await Promise.all(
+ const results = await Promise.allSettled(
allPluginIds.map(async pluginId => {
- // Initialize all eager services
- await this.#serviceRegistry.initializeEagerServicesWithScope(
- 'plugin',
- pluginId,
- );
-
- // Modules are initialized before plugins, so that they can provide extension to the plugin
- const modules = moduleInits.get(pluginId);
- if (modules) {
- const tree = DependencyGraph.fromIterable(
- Array.from(modules).map(([moduleId, moduleInit]) => ({
- value: { moduleId, moduleInit },
- // Relationships are reversed at this point since we're only interested in the extension points.
- // If a modules provides extension point A we want it to be initialized AFTER all modules
- // that depend on extension point A, so that they can provide their extensions.
- consumes: Array.from(moduleInit.provides).map(p => p.id),
- provides: Array.from(moduleInit.consumes).map(c => c.id),
- })),
- );
- const circular = tree.detectCircularDependency();
- if (circular) {
- throw new ConflictError(
- `Circular dependency detected for modules of plugin '${pluginId}', ${circular
- .map(({ moduleId }) => `'${moduleId}'`)
- .join(' -> ')}`,
- );
- }
- await tree.parallelTopologicalTraversal(
- async ({ moduleId, moduleInit }) => {
- const moduleDeps = await this.#getInitDeps(
- moduleInit.init.deps,
- pluginId,
- moduleId,
- );
- await moduleInit.init.func(moduleDeps).catch(error => {
- throw new ForwardedError(
- `Module '${moduleId}' for plugin '${pluginId}' startup failed`,
- error,
- );
- });
- },
- );
- }
-
- // Once all modules have been initialized, we can initialize the plugin itself
- const pluginInit = pluginInits.get(pluginId);
- // We allow modules to be installed without the accompanying plugin, so the plugin may not exist
- if (pluginInit) {
- const pluginDeps = await this.#getInitDeps(
- pluginInit.init.deps,
+ try {
+ // Initialize all eager services
+ await this.#serviceRegistry.initializeEagerServicesWithScope(
+ 'plugin',
pluginId,
);
- await pluginInit.init.func(pluginDeps).catch(error => {
- throw new ForwardedError(
- `Plugin '${pluginId}' startup failed`,
- error,
+
+ // Modules are initialized before plugins, so that they can provide extension to the plugin
+ const modules = moduleInits.get(pluginId);
+ if (modules) {
+ const tree = DependencyGraph.fromIterable(
+ Array.from(modules).map(([moduleId, moduleInit]) => ({
+ value: { moduleId, moduleInit },
+ // Relationships are reversed at this point since we're only interested in the extension points.
+ // If a modules provides extension point A we want it to be initialized AFTER all modules
+ // that depend on extension point A, so that they can provide their extensions.
+ consumes: Array.from(moduleInit.provides).map(p => p.id),
+ provides: Array.from(moduleInit.consumes).map(c => c.id),
+ })),
);
- });
+ const circular = tree.detectCircularDependency();
+ if (circular) {
+ throw new ConflictError(
+ `Circular dependency detected for modules of plugin '${pluginId}', ${circular
+ .map(({ moduleId }) => `'${moduleId}'`)
+ .join(' -> ')}`,
+ );
+ }
+ await tree.parallelTopologicalTraversal(
+ async ({ moduleId, moduleInit }) => {
+ const moduleDeps = await this.#getInitDeps(
+ moduleInit.init.deps,
+ pluginId,
+ moduleId,
+ );
+ await moduleInit.init.func(moduleDeps).catch(error => {
+ throw new ForwardedError(
+ `Module '${moduleId}' for plugin '${pluginId}' startup failed`,
+ error,
+ );
+ });
+ },
+ );
+ }
+
+ // Once all modules have been initialized, we can initialize the plugin itself
+ const pluginInit = pluginInits.get(pluginId);
+ // We allow modules to be installed without the accompanying plugin, so the plugin may not exist
+ if (pluginInit) {
+ const pluginDeps = await this.#getInitDeps(
+ pluginInit.init.deps,
+ pluginId,
+ );
+ await pluginInit.init.func(pluginDeps).catch(error => {
+ throw new ForwardedError(
+ `Plugin '${pluginId}' startup failed`,
+ error,
+ );
+ });
+ }
+
+ initLogger.onPluginStarted(pluginId);
+
+ // Once the plugin and all modules have been initialized, we can signal that the plugin has stared up successfully
+ const lifecycleService = await this.#getPluginLifecycleImpl(pluginId);
+ await lifecycleService.startup();
+ } catch (error) {
+ initLogger.onPluginFailed(pluginId);
+ throw error;
}
-
- initLogger.onPluginStarted(pluginId);
-
- // Once the plugin and all modules have been initialized, we can signal that the plugin has stared up successfully
- const lifecycleService = await this.#getPluginLifecycleImpl(pluginId);
- await lifecycleService.startup();
}),
);
+ const initErrors = results.flatMap(r =>
+ r.status === 'rejected' ? [r.reason] : [],
+ );
+ if (initErrors.length === 1) {
+ throw initErrors[0];
+ } else if (initErrors.length > 1) {
+ // TODO(Rugvip): Seems like there aren't proper types for AggregateError yet
+ throw new (AggregateError as any)(initErrors, 'Backend startup failed');
+ }
+
// Once all plugins and modules have been initialized, we can signal that the backend has started up successfully
const lifecycleService = await this.#getRootLifecycleImpl();
await lifecycleService.startup();
@@ -329,7 +386,17 @@ export class BackendInitializer {
}
}
+ // It's fine to call .stop() multiple times, which for example can happen with manual stop + process exit
async stop(): Promise {
+ instanceRegistry.unregister(this);
+
+ if (!this.#stopPromise) {
+ this.#stopPromise = this.#doStop();
+ }
+ await this.#stopPromise;
+ }
+
+ async #doStop(): Promise {
if (!this.#startPromise) {
return;
}
@@ -383,16 +450,110 @@ export class BackendInitializer {
throw new Error('Unexpected plugin lifecycle service implementation');
}
+
+ async #applyBackendFeatureLoaders(loaders: InternalBackendFeatureLoader[]) {
+ for (const loader of loaders) {
+ const deps = new Map();
+ const missingRefs = new Set();
+
+ for (const [name, ref] of Object.entries(loader.deps ?? {})) {
+ if (ref.scope !== 'root') {
+ throw new Error(
+ `Feature loaders can only depend on root scoped services, but '${name}' is scoped to '${ref.scope}'. Offending loader is ${loader.description}`,
+ );
+ }
+ const impl = await this.#serviceRegistry.get(
+ ref as ServiceRef,
+ 'root',
+ );
+ if (impl) {
+ deps.set(name, impl);
+ } else {
+ missingRefs.add(ref);
+ }
+ }
+
+ if (missingRefs.size > 0) {
+ const missing = Array.from(missingRefs).join(', ');
+ throw new Error(
+ `No service available for the following ref(s): ${missing}, depended on by feature loader ${loader.description}`,
+ );
+ }
+
+ const result = await loader
+ .loader(Object.fromEntries(deps))
+ .then(features => features.map(unwrapFeature))
+ .catch(error => {
+ throw new ForwardedError(
+ `Feature loader ${loader.description} failed`,
+ error,
+ );
+ });
+
+ let didAddServiceFactory = false;
+ const newLoaders = new Array();
+
+ for await (const feature of result) {
+ if (isBackendFeatureLoader(feature)) {
+ newLoaders.push(feature);
+ } else {
+ didAddServiceFactory ||= isServiceFactory(feature);
+ this.#addFeature(feature);
+ }
+ }
+
+ // Every time we add a new service factory we need to make sure that we don't have circular dependencies
+ if (didAddServiceFactory) {
+ this.#serviceRegistry.checkForCircularDeps();
+ }
+
+ // Apply loaders recursively, depth-first
+ if (newLoaders.length > 0) {
+ await this.#applyBackendFeatureLoaders(newLoaders);
+ }
+ }
+ }
}
-function isServiceFactory(feature: BackendFeature): feature is ServiceFactory {
- return !!(feature as ServiceFactory).service;
-}
-
-function isInternalBackendFeature(
+function toInternalBackendFeature(
feature: BackendFeature,
-): feature is InternalBackendFeature {
- return (
- typeof (feature as InternalBackendFeature).getRegistrations === 'function'
- );
+): InternalBackendFeature {
+ if (feature.$$type !== '@backstage/BackendFeature') {
+ throw new Error(`Invalid BackendFeature, bad type '${feature.$$type}'`);
+ }
+ const internal = feature as InternalBackendFeature;
+ if (internal.version !== 'v1') {
+ throw new Error(
+ `Invalid BackendFeature, bad version '${internal.version}'`,
+ );
+ }
+ return internal;
+}
+
+function isServiceFactory(
+ feature: BackendFeature,
+): feature is InternalServiceFactory {
+ const internal = toInternalBackendFeature(feature);
+ if (internal.featureType === 'service') {
+ return true;
+ }
+ // Backwards compatibility for v1 registrations that use duck typing
+ return 'service' in internal;
+}
+
+function isBackendRegistrations(
+ feature: BackendFeature,
+): feature is InternalBackendRegistrations {
+ const internal = toInternalBackendFeature(feature);
+ if (internal.featureType === 'registrations') {
+ return true;
+ }
+ // Backwards compatibility for v1 registrations that use duck typing
+ return 'getRegistrations' in internal;
+}
+
+function isBackendFeatureLoader(
+ feature: BackendFeature,
+): feature is InternalBackendFeatureLoader {
+ return toInternalBackendFeature(feature).featureType === 'loader';
}
diff --git a/packages/backend-app-api/src/wiring/BackstageBackend.ts b/packages/backend-app-api/src/wiring/BackstageBackend.ts
index 0dd3ba4423..49a8bbbbfb 100644
--- a/packages/backend-app-api/src/wiring/BackstageBackend.ts
+++ b/packages/backend-app-api/src/wiring/BackstageBackend.ts
@@ -16,6 +16,7 @@
import { BackendFeature, ServiceFactory } from '@backstage/backend-plugin-api';
import { BackendInitializer } from './BackendInitializer';
+import { unwrapFeature } from './helpers';
import { Backend } from './types';
export class BackstageBackend implements Backend {
@@ -25,12 +26,7 @@ export class BackstageBackend implements Backend {
this.#initializer = new BackendInitializer(defaultServiceFactories);
}
- add(
- feature:
- | BackendFeature
- | (() => BackendFeature)
- | Promise<{ default: BackendFeature | (() => BackendFeature) }>,
- ): void {
+ add(feature: BackendFeature | Promise<{ default: BackendFeature }>): void {
if (isPromise(feature)) {
this.#initializer.add(feature.then(f => unwrapFeature(f.default)));
} else {
@@ -55,31 +51,3 @@ function isPromise(value: unknown | Promise): value is Promise {
typeof value.then === 'function'
);
}
-
-function unwrapFeature(
- feature:
- | BackendFeature
- | (() => BackendFeature)
- | { default: BackendFeature | (() => BackendFeature) },
-): BackendFeature {
- if (typeof feature === 'function') {
- return feature();
- }
-
- if ('$$type' in feature) {
- return feature;
- }
-
- // This is a workaround where default exports get transpiled to `exports['default'] = ...`
- // in CommonJS modules, which in turn results in a double `{ default: { default: ... } }` nesting
- // when importing using a dynamic import.
- // TODO: This is a broader issue than just this piece of code, and should move away from CommonJS.
- if ('default' in feature) {
- const defaultFeature = feature.default;
- return typeof defaultFeature === 'function'
- ? defaultFeature()
- : defaultFeature;
- }
-
- return feature;
-}
diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts
index 32807ca826..90ee6344e5 100644
--- a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts
+++ b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts
@@ -95,7 +95,7 @@ describe('ServiceRegistry', () => {
});
it('should return an implementation for a registered ref', async () => {
- const registry = ServiceRegistry.create([sf1()]);
+ const registry = ServiceRegistry.create([sf1]);
await expect(registry.get(ref1, 'catalog')).resolves.toEqual({ x: 1 });
await expect(registry.get(ref1, 'scaffolder')).resolves.toEqual({ x: 1 });
expect(await registry.get(ref1, 'catalog')).toBe(
@@ -110,7 +110,7 @@ describe('ServiceRegistry', () => {
});
it('should handle multiple factories with different serviceRefs', async () => {
- const registry = ServiceRegistry.create([sf1(), sf2()]);
+ const registry = ServiceRegistry.create([sf1, sf2]);
await expect(registry.get(ref1, 'catalog')).resolves.toEqual({
x: 1,
@@ -124,15 +124,15 @@ describe('ServiceRegistry', () => {
});
it('should not be possible for root scoped services to depend on plugin scoped services', async () => {
+ // @ts-expect-error
const factory = createServiceFactory({
- // @ts-expect-error
service: ref2,
deps: { pluginDep: ref1 },
async factory() {
return { x: 2 };
},
});
- const registry = ServiceRegistry.create([factory(), sf1()]);
+ const registry = ServiceRegistry.create([factory, sf1]);
await expect(registry.get(ref2, 'catalog')).rejects.toThrow(
"Failed to instantiate 'root' scoped service '2' because it depends on 'plugin' scoped service '1'.",
);
@@ -146,7 +146,7 @@ describe('ServiceRegistry', () => {
return { x: rootDep.x };
},
});
- const registry = ServiceRegistry.create([factory(), sf2()]);
+ const registry = ServiceRegistry.create([factory, sf2]);
await expect(registry.get(ref1, 'catalog')).resolves.toEqual({
x: 2,
});
@@ -161,7 +161,7 @@ describe('ServiceRegistry', () => {
return { x: rootDep.x };
},
});
- const registry = ServiceRegistry.create([factory(), sf2()]);
+ const registry = ServiceRegistry.create([factory, sf2]);
await expect(registry.get(ref, 'catalog')).resolves.toEqual({
x: 2,
});
@@ -176,41 +176,41 @@ describe('ServiceRegistry', () => {
return { pluginId: meta.getId() };
},
});
- const registry = ServiceRegistry.create([factory()]);
+ const registry = ServiceRegistry.create([factory]);
await expect(registry.get(ref, 'catalog')).resolves.toEqual({
pluginId: 'catalog',
});
});
it('should use the last factory for each ref', async () => {
- const registry = ServiceRegistry.create([sf2(), sf2b()]);
+ const registry = ServiceRegistry.create([sf2, sf2b]);
await expect(registry.get(ref2, 'catalog')).resolves.toEqual({
x: 22,
});
});
it('should use added service factories for each ref', async () => {
- const registry = ServiceRegistry.create([sf2()]);
- registry.add(sf2b());
+ const registry = ServiceRegistry.create([sf2]);
+ registry.add(sf2b);
await expect(registry.get(ref2, 'catalog')).resolves.toEqual({
x: 22,
});
});
it('should not allow factories to be added after instantiation', async () => {
- const registry = ServiceRegistry.create([sf2()]);
+ const registry = ServiceRegistry.create([sf2]);
await expect(registry.get(ref2, 'catalog')).resolves.toEqual({
x: 2,
});
- expect(() => registry.add(sf2b())).toThrow(
+ expect(() => registry.add(sf2b)).toThrow(
'Unable to set service factory with id 2, service has already been instantiated',
);
});
it('should not allow the same factory to be added twice', async () => {
- const registry = ServiceRegistry.create([sf2()]);
- registry.add(sf2b());
- expect(() => registry.add(sf2b())).toThrow(
+ const registry = ServiceRegistry.create([sf2]);
+ registry.add(sf2b);
+ expect(() => registry.add(sf2b)).toThrow(
'Duplicate service implementations provided for 2',
);
});
@@ -223,7 +223,7 @@ describe('ServiceRegistry', () => {
});
it('should not use the defaultFactory from the ref if provided to the registry', async () => {
- const registry = ServiceRegistry.create([sf1()]);
+ const registry = ServiceRegistry.create([sf1]);
await expect(registry.get(refDefault1, 'catalog')).resolves.toEqual({
x: 1,
});
@@ -279,7 +279,7 @@ describe('ServiceRegistry', () => {
factory,
});
- const registry = ServiceRegistry.create([myFactory()]);
+ const registry = ServiceRegistry.create([myFactory]);
await Promise.all([
registry.get(ref1, 'catalog')!,
@@ -301,7 +301,7 @@ describe('ServiceRegistry', () => {
factory,
});
- const registry = ServiceRegistry.create([myFactory()]);
+ const registry = ServiceRegistry.create([myFactory]);
await Promise.all([
registry.get(ref1, 'catalog')!,
@@ -323,7 +323,7 @@ describe('ServiceRegistry', () => {
},
});
- const registry = ServiceRegistry.create([myFactory()]);
+ const registry = ServiceRegistry.create([myFactory]);
await expect(registry.get(ref1, 'catalog')).rejects.toThrow(
"Failed to instantiate service '1' for 'catalog' because the following dependent services are missing: '2'",
@@ -350,7 +350,7 @@ describe('ServiceRegistry', () => {
},
});
- const registry = ServiceRegistry.create([factoryA(), factoryB()]);
+ const registry = ServiceRegistry.create([factoryA, factoryB]);
await expect(registry.get(refA, 'catalog')).rejects.toThrow(
"Failed to instantiate service 'a' for 'catalog' because the factory function threw an error, Error: Failed to instantiate service 'b' for 'catalog' because the following dependent services are missing: 'c', 'd'",
@@ -374,7 +374,7 @@ describe('ServiceRegistry', () => {
factory: async ({ a }) => a,
});
- expect(() => ServiceRegistry.create([factoryA(), factoryB()])).toThrow(
+ expect(() => ServiceRegistry.create([factoryA, factoryB])).toThrow(
`Circular dependencies detected:
'a' -> 'b' -> 'a'`,
);
@@ -411,12 +411,7 @@ describe('ServiceRegistry', () => {
});
expect(() =>
- ServiceRegistry.create([
- factoryA(),
- factoryB(),
- factoryC(),
- factoryD(),
- ]),
+ ServiceRegistry.create([factoryA, factoryB, factoryC, factoryD]),
).toThrow(
`Circular dependencies detected:
'a' -> 'b' -> 'a'
@@ -448,7 +443,7 @@ describe('ServiceRegistry', () => {
});
expect(() =>
- ServiceRegistry.create([factoryA(), factoryB(), factoryC()]),
+ ServiceRegistry.create([factoryA, factoryB, factoryC]),
).toThrow(
`Circular dependencies detected:
'a' -> 'b' -> 'c' -> 'a'`,
@@ -486,12 +481,7 @@ describe('ServiceRegistry', () => {
});
expect(() =>
- ServiceRegistry.create([
- factoryA(),
- factoryB(),
- factoryC(),
- factoryD(),
- ]),
+ ServiceRegistry.create([factoryA, factoryB, factoryC, factoryD]),
).toThrow(
`Circular dependencies detected:
'a' -> 'b' -> 'c' -> 'a'`,
@@ -522,7 +512,7 @@ describe('ServiceRegistry', () => {
});
expect(() =>
- ServiceRegistry.create([factoryA(), factoryB(), factoryC()]),
+ ServiceRegistry.create([factoryA, factoryB, factoryC]),
).toThrow(
`Circular dependencies detected:
'a' -> 'c' -> 'a'`,
@@ -553,7 +543,7 @@ describe('ServiceRegistry', () => {
});
expect(() =>
- ServiceRegistry.create([factoryA(), factoryB(), factoryC()]),
+ ServiceRegistry.create([factoryA, factoryB, factoryC]),
).toThrow(
`Circular dependencies detected:
'b' -> 'c' -> 'b'`,
@@ -573,7 +563,7 @@ describe('ServiceRegistry', () => {
},
});
- const registry = ServiceRegistry.create([myFactory()]);
+ const registry = ServiceRegistry.create([myFactory]);
await expect(registry.get(ref1, 'catalog')).rejects.toThrow(
"Failed to instantiate service '1' because createRootContext threw an error, Error: top-level error",
@@ -589,7 +579,7 @@ describe('ServiceRegistry', () => {
},
});
- const registry = ServiceRegistry.create([myFactory()]);
+ const registry = ServiceRegistry.create([myFactory]);
await expect(registry.get(ref1, 'catalog')).rejects.toThrow(
"Failed to instantiate service '1' for 'catalog' because the factory function threw an error, Error: error in plugin",
diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.ts
index 56d8d611bb..0abd5605ae 100644
--- a/packages/backend-app-api/src/wiring/ServiceRegistry.ts
+++ b/packages/backend-app-api/src/wiring/ServiceRegistry.ts
@@ -58,12 +58,24 @@ function createPluginMetadataServiceFactory(pluginId: string) {
export class ServiceRegistry {
static create(factories: Array): ServiceRegistry {
- const registry = new ServiceRegistry(factories);
+ const factoryMap = new Map();
+ for (const factory of factories) {
+ if (factory.service.multiton) {
+ const existing = factoryMap.get(factory.service.id) ?? [];
+ factoryMap.set(
+ factory.service.id,
+ existing.concat(toInternalServiceFactory(factory)),
+ );
+ } else {
+ factoryMap.set(factory.service.id, [toInternalServiceFactory(factory)]);
+ }
+ }
+ const registry = new ServiceRegistry(factoryMap);
registry.checkForCircularDeps();
return registry;
}
- readonly #providedFactories: Map;
+ readonly #providedFactories: Map;
readonly #loadedDefaultFactories: Map<
Function,
Promise
@@ -82,10 +94,8 @@ export class ServiceRegistry {
readonly #addedFactoryIds = new Set();
readonly #instantiatedFactories = new Set();
- private constructor(factories: Array) {
- this.#providedFactories = new Map(
- factories.map(sf => [sf.service.id, toInternalServiceFactory(sf)]),
- );
+ private constructor(factories: Map) {
+ this.#providedFactories = factories;
this.#loadedDefaultFactories = new Map();
this.#implementations = new Map();
}
@@ -93,17 +103,17 @@ export class ServiceRegistry {
#resolveFactory(
ref: ServiceRef,
pluginId: string,
- ): Promise | undefined {
+ ): Promise | undefined {
// Special case handling of the plugin metadata service, generating a custom factory for it each time
if (ref.id === coreServices.pluginMetadata.id) {
- return Promise.resolve(
+ return Promise.resolve([
toInternalServiceFactory(createPluginMetadataServiceFactory(pluginId)),
- );
+ ]);
}
let resolvedFactory:
- | Promise
- | InternalServiceFactory
+ | Promise
+ | InternalServiceFactory[]
| undefined = this.#providedFactories.get(ref.id);
const { __defaultFactory: defaultFactory } = ref as InternalServiceRef;
if (!resolvedFactory && !defaultFactory) {
@@ -120,15 +130,18 @@ export class ServiceRegistry {
);
this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory);
}
- resolvedFactory = loadedFactory.catch(error => {
- throw new Error(
- `Failed to instantiate service '${
- ref.id
- }' because the default factory loader threw an error, ${stringifyError(
- error,
- )}`,
- );
- });
+ resolvedFactory = loadedFactory.then(
+ factory => [factory],
+ error => {
+ throw new Error(
+ `Failed to instantiate service '${
+ ref.id
+ }' because the default factory loader threw an error, ${stringifyError(
+ error,
+ )}`,
+ );
+ },
+ );
}
return Promise.resolve(resolvedFactory);
@@ -142,6 +155,9 @@ export class ServiceRegistry {
if (this.#providedFactories.get(ref.id)) {
return false;
}
+ if (ref.multiton) {
+ return false;
+ }
return !(ref as InternalServiceRef).__defaultFactory;
});
@@ -156,13 +172,13 @@ export class ServiceRegistry {
checkForCircularDeps(): void {
const graph = DependencyGraph.fromIterable(
- Array.from(this.#providedFactories).map(
- ([serviceId, serviceFactory]) => ({
- value: serviceId,
- provides: [serviceId],
- consumes: Object.values(serviceFactory.deps).map(d => d.id),
- }),
- ),
+ Array.from(this.#providedFactories).map(([serviceId, factories]) => ({
+ value: serviceId,
+ provides: [serviceId],
+ consumes: factories.flatMap(factory =>
+ Object.values(factory.deps).map(d => d.id),
+ ),
+ })),
);
const circularDependencies = Array.from(graph.detectCircularDependencies());
@@ -183,27 +199,36 @@ export class ServiceRegistry {
);
}
- if (this.#addedFactoryIds.has(factoryId)) {
- throw new Error(
- `Duplicate service implementations provided for ${factoryId}`,
- );
- }
-
if (this.#instantiatedFactories.has(factoryId)) {
throw new Error(
`Unable to set service factory with id ${factoryId}, service has already been instantiated`,
);
}
- this.#addedFactoryIds.add(factoryId);
- this.#providedFactories.set(factoryId, toInternalServiceFactory(factory));
+ if (factory.service.multiton) {
+ const newFactories = (
+ this.#providedFactories.get(factoryId) ?? []
+ ).concat(toInternalServiceFactory(factory));
+ this.#providedFactories.set(factoryId, newFactories);
+ } else {
+ if (this.#addedFactoryIds.has(factoryId)) {
+ throw new Error(
+ `Duplicate service implementations provided for ${factoryId}`,
+ );
+ }
+
+ this.#addedFactoryIds.add(factoryId);
+ this.#providedFactories.set(factoryId, [
+ toInternalServiceFactory(factory),
+ ]);
+ }
}
async initializeEagerServicesWithScope(
scope: 'root' | 'plugin',
pluginId: string = 'root',
) {
- for (const factory of this.#providedFactories.values()) {
+ for (const [factory] of this.#providedFactories.values()) {
if (factory.service.scope === scope) {
// Root-scoped services are eager by default, plugin-scoped are lazy by default
if (scope === 'root' && factory.initialization !== 'lazy') {
@@ -215,88 +240,112 @@ export class ServiceRegistry {
}
}
- get(ref: ServiceRef, pluginId: string): Promise | undefined {
+ get(
+ ref: ServiceRef