diff --git a/.changeset/angry-dingos-lick.md b/.changeset/angry-dingos-lick.md
new file mode 100644
index 0000000000..933f19a839
--- /dev/null
+++ b/.changeset/angry-dingos-lick.md
@@ -0,0 +1,9 @@
+---
+'@backstage/plugin-catalog-graph': patch
+'@backstage/plugin-pagerduty': patch
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/plugin-splunk-on-call': patch
+'@backstage/plugin-techdocs-react': patch
+---
+
+Internal refactor to improve tests
diff --git a/.changeset/angry-trees-relax.md b/.changeset/angry-trees-relax.md
new file mode 100644
index 0000000000..64dd50366c
--- /dev/null
+++ b/.changeset/angry-trees-relax.md
@@ -0,0 +1,11 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Enabling the customization of the last step in the scaffolder template.
+
+To override the content you have to do the next:
+
+```typescript jsx
+
+```
diff --git a/.changeset/chilly-ads-lay.md b/.changeset/chilly-ads-lay.md
new file mode 100644
index 0000000000..844eaa8dc7
--- /dev/null
+++ b/.changeset/chilly-ads-lay.md
@@ -0,0 +1,5 @@
+---
+'@backstage/catalog-client': minor
+---
+
+**BREAKING PRODUCERS**: Added a new `getEntitiesByRefs` endpoint to `CatalogApi`, for efficient batch fetching of entities by ref.
diff --git a/.changeset/clean-paws-fry.md b/.changeset/clean-paws-fry.md
new file mode 100644
index 0000000000..5e66a686c0
--- /dev/null
+++ b/.changeset/clean-paws-fry.md
@@ -0,0 +1,5 @@
+---
+'@backstage/repo-tools': minor
+---
+
+Introducing repo-tools package
diff --git a/.changeset/clever-pillows-drive.md b/.changeset/clever-pillows-drive.md
new file mode 100644
index 0000000000..f4e60fb869
--- /dev/null
+++ b/.changeset/clever-pillows-drive.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Do not use deprecated `LocationSpec` from the `@backstage/plugin-catalog-node` package
diff --git a/.changeset/clever-rivers-obey.md b/.changeset/clever-rivers-obey.md
new file mode 100644
index 0000000000..0fac8711e9
--- /dev/null
+++ b/.changeset/clever-rivers-obey.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-github': patch
+---
+
+Fixes the assignment of group member references in `GithubMultiOrgProcessor` so membership relations are resolved correctly.
diff --git a/.changeset/create-app-1669131574.md b/.changeset/create-app-1669131574.md
new file mode 100644
index 0000000000..b50d431d4b
--- /dev/null
+++ b/.changeset/create-app-1669131574.md
@@ -0,0 +1,5 @@
+---
+'@backstage/create-app': patch
+---
+
+Bumped create-app version.
diff --git a/.changeset/early-parrots-guess.md b/.changeset/early-parrots-guess.md
new file mode 100644
index 0000000000..4df8dcea95
--- /dev/null
+++ b/.changeset/early-parrots-guess.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Initialize all `formData` in the `Stepper` in `/next`
diff --git a/.changeset/eight-spiders-know.md b/.changeset/eight-spiders-know.md
new file mode 100644
index 0000000000..2e3e54dc0f
--- /dev/null
+++ b/.changeset/eight-spiders-know.md
@@ -0,0 +1,15 @@
+---
+'@backstage/backend-common': patch
+'@backstage/core-app-api': patch
+'@backstage/core-components': patch
+'@backstage/version-bridge': patch
+'@backstage/plugin-analytics-module-ga': patch
+'@backstage/plugin-catalog': patch
+'@backstage/plugin-cloudbuild': patch
+'@backstage/plugin-gcp-projects': patch
+'@backstage/plugin-github-actions': patch
+'@backstage/plugin-graphiql': patch
+'@backstage/plugin-techdocs': patch
+---
+
+Internal fixes to avoid implicit usage of globals
diff --git a/.changeset/fair-walls-talk.md b/.changeset/fair-walls-talk.md
new file mode 100644
index 0000000000..3e3ee26160
--- /dev/null
+++ b/.changeset/fair-walls-talk.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-org-react': patch
+---
+
+Bug fixes and adding the possibility to add a default value for the `GroupListPicker`. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, auto focus on the popup when opening
diff --git a/.changeset/fast-lies-remain.md b/.changeset/fast-lies-remain.md
new file mode 100644
index 0000000000..74be117920
--- /dev/null
+++ b/.changeset/fast-lies-remain.md
@@ -0,0 +1,8 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+Added new `POST /entities/by-refs` endpoint, which allows you to efficiently
+batch-fetch entities by their entity ref. This can be useful e.g. in graphql
+resolvers or similar contexts where you need to fetch many entities at the same
+time.
diff --git a/.changeset/fluffy-walls-approve.md b/.changeset/fluffy-walls-approve.md
new file mode 100644
index 0000000000..968f5cc402
--- /dev/null
+++ b/.changeset/fluffy-walls-approve.md
@@ -0,0 +1,21 @@
+---
+'@backstage/plugin-events-backend': minor
+---
+
+**BREAKING:** Remove required field `router` at `HttpPostIngressEventPublisher.fromConfig`
+and replace it with `bind(router: Router)`.
+Additionally, the path prefix `/http` will be added inside `HttpPostIngressEventPublisher`.
+
+```diff
+// at packages/backend/src/plugins/events.ts
+ const eventsRouter = Router();
+- const httpRouter = Router();
+- eventsRouter.use('/http', httpRouter);
+
+ const http = HttpPostIngressEventPublisher.fromConfig({
+ config: env.config,
+ logger: env.logger,
+- router: httpRouter,
+ });
++ http.bind(eventsRouter);
+```
diff --git a/.changeset/forty-baboons-burn.md b/.changeset/forty-baboons-burn.md
new file mode 100644
index 0000000000..f54b0871c4
--- /dev/null
+++ b/.changeset/forty-baboons-burn.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-techdocs-node': patch
+---
+
+Bump dependency @azure/identity to next minor
diff --git a/.changeset/four-adults-provide.md b/.changeset/four-adults-provide.md
new file mode 100644
index 0000000000..0edb4807d9
--- /dev/null
+++ b/.changeset/four-adults-provide.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-cost-insights': patch
+---
+
+Provide the ability to change the base currency from USD to any other currency in cost insights plugin
diff --git a/.changeset/funny-numbers-compete.md b/.changeset/funny-numbers-compete.md
new file mode 100644
index 0000000000..604ffe7294
--- /dev/null
+++ b/.changeset/funny-numbers-compete.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+Use Json types from @backstage/types
diff --git a/.changeset/gold-icons-cheat.md b/.changeset/gold-icons-cheat.md
new file mode 100644
index 0000000000..3c5e796c05
--- /dev/null
+++ b/.changeset/gold-icons-cheat.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Bump `msw` version in default plugin/app templates
diff --git a/.changeset/gold-yaks-join.md b/.changeset/gold-yaks-join.md
new file mode 100644
index 0000000000..29996d1f74
--- /dev/null
+++ b/.changeset/gold-yaks-join.md
@@ -0,0 +1,6 @@
+---
+'@backstage/test-utils': patch
+---
+
+The test utility for the plugin context called `MockPluginProvider` has been created. It will be handy in the cases when you use
+`__experimentalConfigure` in your plugin. It is experimental and exported through `@backstage/test-utils/alpha`.
diff --git a/.changeset/healthy-crabs-collect.md b/.changeset/healthy-crabs-collect.md
new file mode 100644
index 0000000000..5dc90f9b80
--- /dev/null
+++ b/.changeset/healthy-crabs-collect.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-kafka-backend': patch
+---
+
+Internal tweak to adapt to `kafkajs` 2.2.3
diff --git a/.changeset/hip-chairs-tap.md b/.changeset/hip-chairs-tap.md
new file mode 100644
index 0000000000..8eca0a9292
--- /dev/null
+++ b/.changeset/hip-chairs-tap.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-cost-insights': patch
+---
+
+Internal refactor to avoid usage of deprecated symbols
diff --git a/.changeset/hip-stingrays-kneel.md b/.changeset/hip-stingrays-kneel.md
new file mode 100644
index 0000000000..171e9257f2
--- /dev/null
+++ b/.changeset/hip-stingrays-kneel.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+Create a variable for minimum height and add a prop named 'fit' for determining if the graph height should grow or be contained.
diff --git a/.changeset/kind-walls-share.md b/.changeset/kind-walls-share.md
new file mode 100644
index 0000000000..5df03999b1
--- /dev/null
+++ b/.changeset/kind-walls-share.md
@@ -0,0 +1,5 @@
+---
+'@backstage/backend-common': patch
+---
+
+exported KubernetesContainerRunner, KubernetesContainerRunnerOptions, KubernetesContainerRunnerMountBase
diff --git a/.changeset/loud-rockets-reply.md b/.changeset/loud-rockets-reply.md
new file mode 100644
index 0000000000..85ed77f51f
--- /dev/null
+++ b/.changeset/loud-rockets-reply.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-incremental-ingestion': minor
+---
+
+Introduces incremental entity providers, which are used for streaming very large data sources into the catalog.
diff --git a/.changeset/modern-mugs-shout.md b/.changeset/modern-mugs-shout.md
new file mode 100644
index 0000000000..cb845b1fff
--- /dev/null
+++ b/.changeset/modern-mugs-shout.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+Add items prop to SupportButton. This prop can be used to override the items that would otherwise be grabbed from the config.
diff --git a/.changeset/nasty-melons-build.md b/.changeset/nasty-melons-build.md
new file mode 100644
index 0000000000..35fb520a5e
--- /dev/null
+++ b/.changeset/nasty-melons-build.md
@@ -0,0 +1,12 @@
+---
+'@backstage/plugin-events-backend-module-github': patch
+---
+
+Add `createGithubSignatureValidator(config)` which can be used
+to create a validator used at an ingress for topic `github`.
+
+On top, there is a new `githubWebhookEventsModule` for the new backend plugin API
+which auto-registers the `HttpPostIngress` for topic `github` incl. the validator.
+
+Please find more information at
+https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-github/README.md.
diff --git a/.changeset/nervous-mice-flow.md b/.changeset/nervous-mice-flow.md
new file mode 100644
index 0000000000..c3a25b9f3d
--- /dev/null
+++ b/.changeset/nervous-mice-flow.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-jenkins-backend': patch
+---
+
+Remove unnecessary dependency promise-any-polyfill
diff --git a/.changeset/new-bugs-march.md b/.changeset/new-bugs-march.md
new file mode 100644
index 0000000000..346f5a151e
--- /dev/null
+++ b/.changeset/new-bugs-march.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-explore': patch
+---
+
+Adds styling to graph forcing it to always fill out the available space.
diff --git a/.changeset/nine-ears-whisper.md b/.changeset/nine-ears-whisper.md
new file mode 100644
index 0000000000..a1427158af
--- /dev/null
+++ b/.changeset/nine-ears-whisper.md
@@ -0,0 +1,9 @@
+---
+'@backstage/plugin-events-backend': patch
+'@backstage/plugin-events-node': minor
+---
+
+Introduce a new interface `RequestDetails` to abstract `Request`
+providing access to request body and headers.
+
+**BREAKING:** Replace `request: Request` with `request: RequestDetails` at `RequestValidator`.
diff --git a/.changeset/old-bulldogs-fry.md b/.changeset/old-bulldogs-fry.md
new file mode 100644
index 0000000000..9c8eef67ad
--- /dev/null
+++ b/.changeset/old-bulldogs-fry.md
@@ -0,0 +1,14 @@
+---
+'@backstage/plugin-catalog-backend-module-github': patch
+---
+
+Handle GitHub `push` events at the `GithubEntityProvider` by subscribing to the topic `github.push.`
+
+Implements `EventSubscriber` to receive events for the topic `github.push`.
+
+On `github.push`, the affected repository will be refreshed.
+This includes adding new Location entities, refreshing existing ones,
+and removing obsolete ones.
+
+Please find more information at
+https://backstage.io/docs/integrations/github/discovery#installation-with-events-support
diff --git a/.changeset/old-keys-leave.md b/.changeset/old-keys-leave.md
new file mode 100644
index 0000000000..d80574b2e4
--- /dev/null
+++ b/.changeset/old-keys-leave.md
@@ -0,0 +1,5 @@
+---
+'@backstage/backend-app-api': patch
+---
+
+Added `lifecycleFactory` implementation.
diff --git a/.changeset/pre.json b/.changeset/pre.json
new file mode 100644
index 0000000000..136b807fdf
--- /dev/null
+++ b/.changeset/pre.json
@@ -0,0 +1,234 @@
+{
+ "mode": "pre",
+ "tag": "next",
+ "initialVersions": {
+ "example-app": "0.2.77",
+ "@backstage/app-defaults": "1.0.8",
+ "example-backend": "0.2.77",
+ "@backstage/backend-app-api": "0.2.3",
+ "@backstage/backend-common": "0.16.0",
+ "@backstage/backend-defaults": "0.1.3",
+ "example-backend-next": "0.0.5",
+ "@backstage/backend-plugin-api": "0.1.4",
+ "@backstage/backend-tasks": "0.3.7",
+ "@backstage/backend-test-utils": "0.1.30",
+ "@backstage/catalog-client": "1.1.2",
+ "@backstage/catalog-model": "1.1.3",
+ "@backstage/cli": "0.21.0",
+ "@backstage/cli-common": "0.1.10",
+ "@backstage/codemods": "0.1.41",
+ "@backstage/config": "1.0.4",
+ "@backstage/config-loader": "1.1.6",
+ "@backstage/core-app-api": "1.2.0",
+ "@backstage/core-components": "0.12.0",
+ "@backstage/core-plugin-api": "1.1.0",
+ "@backstage/create-app": "0.4.34",
+ "@backstage/dev-utils": "1.0.8",
+ "e2e-test": "0.2.0",
+ "@backstage/errors": "1.1.3",
+ "@backstage/integration": "1.4.0",
+ "@backstage/integration-react": "1.1.6",
+ "@backstage/release-manifests": "0.0.7",
+ "@backstage/repo-tools": "0.0.0",
+ "@techdocs/cli": "1.2.3",
+ "techdocs-cli-embedded-app": "0.2.76",
+ "@backstage/test-utils": "1.2.2",
+ "@backstage/theme": "0.2.16",
+ "@backstage/types": "1.0.1",
+ "@backstage/version-bridge": "1.0.2",
+ "@backstage/plugin-adr": "0.2.3",
+ "@backstage/plugin-adr-backend": "0.2.3",
+ "@backstage/plugin-adr-common": "0.2.3",
+ "@backstage/plugin-airbrake": "0.3.11",
+ "@backstage/plugin-airbrake-backend": "0.2.11",
+ "@backstage/plugin-allure": "0.1.27",
+ "@backstage/plugin-analytics-module-ga": "0.1.22",
+ "@backstage/plugin-apache-airflow": "0.2.4",
+ "@backstage/plugin-api-docs": "0.8.11",
+ "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.0",
+ "@backstage/plugin-apollo-explorer": "0.1.4",
+ "@backstage/plugin-app-backend": "0.3.38",
+ "@backstage/plugin-auth-backend": "0.17.1",
+ "@backstage/plugin-auth-node": "0.2.7",
+ "@backstage/plugin-azure-devops": "0.2.2",
+ "@backstage/plugin-azure-devops-backend": "0.3.17",
+ "@backstage/plugin-azure-devops-common": "0.3.0",
+ "@backstage/plugin-azure-sites": "0.1.0",
+ "@backstage/plugin-azure-sites-backend": "0.1.0",
+ "@backstage/plugin-azure-sites-common": "0.1.0",
+ "@backstage/plugin-badges": "0.2.35",
+ "@backstage/plugin-badges-backend": "0.1.32",
+ "@backstage/plugin-bazaar": "0.2.0",
+ "@backstage/plugin-bazaar-backend": "0.2.1",
+ "@backstage/plugin-bitbucket-cloud-common": "0.2.1",
+ "@backstage/plugin-bitrise": "0.1.38",
+ "@backstage/plugin-catalog": "1.6.1",
+ "@backstage/plugin-catalog-backend": "1.5.1",
+ "@backstage/plugin-catalog-backend-module-aws": "0.1.11",
+ "@backstage/plugin-catalog-backend-module-azure": "0.1.9",
+ "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.5",
+ "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.5",
+ "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.3",
+ "@backstage/plugin-catalog-backend-module-gerrit": "0.1.6",
+ "@backstage/plugin-catalog-backend-module-github": "0.2.0",
+ "@backstage/plugin-catalog-backend-module-gitlab": "0.1.9",
+ "@backstage/plugin-catalog-backend-module-ldap": "0.5.5",
+ "@backstage/plugin-catalog-backend-module-msgraph": "0.4.4",
+ "@backstage/plugin-catalog-backend-module-openapi": "0.1.4",
+ "@backstage/plugin-catalog-common": "1.0.8",
+ "@internal/plugin-catalog-customized": "0.0.4",
+ "@backstage/plugin-catalog-graph": "0.2.23",
+ "@backstage/plugin-catalog-graphql": "0.3.15",
+ "@backstage/plugin-catalog-import": "0.9.1",
+ "@backstage/plugin-catalog-node": "1.2.1",
+ "@backstage/plugin-catalog-react": "1.2.1",
+ "@backstage/plugin-cicd-statistics": "0.1.13",
+ "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.7",
+ "@backstage/plugin-circleci": "0.3.11",
+ "@backstage/plugin-cloudbuild": "0.3.11",
+ "@backstage/plugin-code-climate": "0.1.11",
+ "@backstage/plugin-code-coverage": "0.2.4",
+ "@backstage/plugin-code-coverage-backend": "0.2.4",
+ "@backstage/plugin-codescene": "0.1.6",
+ "@backstage/plugin-config-schema": "0.1.34",
+ "@backstage/plugin-cost-insights": "0.12.0",
+ "@backstage/plugin-cost-insights-common": "0.1.1",
+ "@backstage/plugin-dynatrace": "1.0.1",
+ "@backstage/plugin-events-backend": "0.1.0",
+ "@backstage/plugin-events-backend-module-aws-sqs": "0.1.0",
+ "@backstage/plugin-events-backend-module-azure": "0.1.0",
+ "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.0",
+ "@backstage/plugin-events-backend-module-gerrit": "0.1.0",
+ "@backstage/plugin-events-backend-module-github": "0.1.0",
+ "@backstage/plugin-events-backend-module-gitlab": "0.1.0",
+ "@backstage/plugin-events-backend-test-utils": "0.1.0",
+ "@backstage/plugin-events-node": "0.1.0",
+ "@internal/plugin-todo-list": "1.0.7",
+ "@internal/plugin-todo-list-backend": "1.0.7",
+ "@internal/plugin-todo-list-common": "1.0.6",
+ "@backstage/plugin-explore": "0.3.42",
+ "@backstage/plugin-explore-react": "0.0.23",
+ "@backstage/plugin-firehydrant": "0.1.28",
+ "@backstage/plugin-fossa": "0.2.43",
+ "@backstage/plugin-gcalendar": "0.3.7",
+ "@backstage/plugin-gcp-projects": "0.3.30",
+ "@backstage/plugin-git-release-manager": "0.3.24",
+ "@backstage/plugin-github-actions": "0.5.11",
+ "@backstage/plugin-github-deployments": "0.1.42",
+ "@backstage/plugin-github-issues": "0.2.0",
+ "@backstage/plugin-github-pull-requests-board": "0.1.5",
+ "@backstage/plugin-gitops-profiles": "0.3.29",
+ "@backstage/plugin-gocd": "0.1.17",
+ "@backstage/plugin-graphiql": "0.2.43",
+ "@backstage/plugin-graphql-backend": "0.1.28",
+ "@backstage/plugin-home": "0.4.27",
+ "@backstage/plugin-ilert": "0.2.0",
+ "@backstage/plugin-jenkins": "0.7.10",
+ "@backstage/plugin-jenkins-backend": "0.1.28",
+ "@backstage/plugin-jenkins-common": "0.1.10",
+ "@backstage/plugin-kafka": "0.3.11",
+ "@backstage/plugin-kafka-backend": "0.2.31",
+ "@backstage/plugin-kubernetes": "0.7.4",
+ "@backstage/plugin-kubernetes-backend": "0.8.0",
+ "@backstage/plugin-kubernetes-common": "0.4.4",
+ "@backstage/plugin-lighthouse": "0.3.11",
+ "@backstage/plugin-newrelic": "0.3.29",
+ "@backstage/plugin-newrelic-dashboard": "0.2.4",
+ "@backstage/plugin-org": "0.6.0",
+ "@backstage/plugin-org-react": "0.1.0",
+ "@backstage/plugin-pagerduty": "0.5.4",
+ "@backstage/plugin-periskop": "0.1.9",
+ "@backstage/plugin-periskop-backend": "0.1.9",
+ "@backstage/plugin-permission-backend": "0.5.13",
+ "@backstage/plugin-permission-common": "0.7.1",
+ "@backstage/plugin-permission-node": "0.7.1",
+ "@backstage/plugin-permission-react": "0.4.7",
+ "@backstage/plugin-playlist": "0.1.2",
+ "@backstage/plugin-playlist-backend": "0.2.1",
+ "@backstage/plugin-playlist-common": "0.1.2",
+ "@backstage/plugin-proxy-backend": "0.2.32",
+ "@backstage/plugin-rollbar": "0.4.11",
+ "@backstage/plugin-rollbar-backend": "0.1.35",
+ "@backstage/plugin-scaffolder": "1.8.0",
+ "@backstage/plugin-scaffolder-backend": "1.8.0",
+ "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.13",
+ "@backstage/plugin-scaffolder-backend-module-rails": "0.4.6",
+ "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.11",
+ "@backstage/plugin-scaffolder-common": "1.2.2",
+ "@backstage/plugin-search": "1.0.4",
+ "@backstage/plugin-search-backend": "1.1.1",
+ "@backstage/plugin-search-backend-module-elasticsearch": "1.0.4",
+ "@backstage/plugin-search-backend-module-pg": "0.4.2",
+ "@backstage/plugin-search-backend-node": "1.0.4",
+ "@backstage/plugin-search-common": "1.1.1",
+ "@backstage/plugin-search-react": "1.2.1",
+ "@backstage/plugin-sentry": "0.4.4",
+ "@backstage/plugin-shortcuts": "0.3.3",
+ "@backstage/plugin-sonarqube": "0.5.0",
+ "@backstage/plugin-sonarqube-backend": "0.1.3",
+ "@backstage/plugin-splunk-on-call": "0.4.0",
+ "@backstage/plugin-stack-overflow": "0.1.7",
+ "@backstage/plugin-stack-overflow-backend": "0.1.7",
+ "@backstage/plugin-tech-insights": "0.3.3",
+ "@backstage/plugin-tech-insights-backend": "0.5.4",
+ "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.22",
+ "@backstage/plugin-tech-insights-common": "0.2.8",
+ "@backstage/plugin-tech-insights-node": "0.3.6",
+ "@backstage/plugin-tech-radar": "0.5.18",
+ "@backstage/plugin-techdocs": "1.4.0",
+ "@backstage/plugin-techdocs-addons-test-utils": "1.0.6",
+ "@backstage/plugin-techdocs-backend": "1.4.1",
+ "@backstage/plugin-techdocs-module-addons-contrib": "1.0.6",
+ "@backstage/plugin-techdocs-node": "1.4.2",
+ "@backstage/plugin-techdocs-react": "1.0.6",
+ "@backstage/plugin-todo": "0.2.13",
+ "@backstage/plugin-todo-backend": "0.1.35",
+ "@backstage/plugin-user-settings": "0.5.1",
+ "@backstage/plugin-user-settings-backend": "0.1.2",
+ "@backstage/plugin-vault": "0.1.5",
+ "@backstage/plugin-vault-backend": "0.2.4",
+ "@backstage/plugin-xcmetrics": "0.2.31"
+ },
+ "changesets": [
+ "angry-dingos-lick",
+ "angry-trees-relax",
+ "chilly-ads-lay",
+ "clean-paws-fry",
+ "clever-pillows-drive",
+ "clever-rivers-obey",
+ "create-app-1669131574",
+ "early-hairs-switch",
+ "early-parrots-guess",
+ "fair-walls-talk",
+ "fast-lies-remain",
+ "fluffy-walls-approve",
+ "four-adults-provide",
+ "funny-numbers-compete",
+ "gold-icons-cheat",
+ "gorgeous-hairs-applaud",
+ "hip-stingrays-kneel",
+ "itchy-walls-boil",
+ "modern-mugs-shout",
+ "new-bugs-march",
+ "nine-ears-whisper",
+ "old-keys-leave",
+ "renovate-3fe8460",
+ "renovate-4bb70f3",
+ "renovate-778b2fa",
+ "rich-garlics-play",
+ "search-heavy-frogs-confess",
+ "search-om-manniskan-ginge",
+ "serious-windows-occur",
+ "silly-wolves-remember",
+ "slow-dragons-promise",
+ "soft-nails-arrive",
+ "sour-flowers-care",
+ "sour-plums-grow",
+ "tender-parrots-cover",
+ "thin-donuts-join",
+ "twelve-meals-smell",
+ "twenty-dodos-wash",
+ "weak-ears-jam",
+ "young-turkeys-relax"
+ ]
+}
diff --git a/.changeset/quick-horses-cry.md b/.changeset/quick-horses-cry.md
new file mode 100644
index 0000000000..8b40c92b41
--- /dev/null
+++ b/.changeset/quick-horses-cry.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-org': patch
+---
+
+Update `UserProfileCard` and `GroupProfileCard` to not render links unless the `showLinks` prop is set. The primary component for rendering links are the `EntityLinksCard` from plugin-catalog.
diff --git a/.changeset/renovate-3fe8460.md b/.changeset/renovate-3fe8460.md
new file mode 100644
index 0000000000..17dc8b8b97
--- /dev/null
+++ b/.changeset/renovate-3fe8460.md
@@ -0,0 +1,113 @@
+---
+'@backstage/backend-common': patch
+'@backstage/backend-test-utils': patch
+'@backstage/catalog-client': patch
+'@backstage/cli': patch
+'@backstage/config-loader': patch
+'@backstage/core-app-api': patch
+'@backstage/core-components': patch
+'@backstage/core-plugin-api': patch
+'@backstage/integration-react': patch
+'@backstage/integration': patch
+'@backstage/release-manifests': patch
+'@backstage/test-utils': patch
+'@backstage/plugin-adr-backend': patch
+'@backstage/plugin-adr': patch
+'@backstage/plugin-airbrake-backend': patch
+'@backstage/plugin-airbrake': patch
+'@backstage/plugin-allure': patch
+'@backstage/plugin-analytics-module-ga': patch
+'@backstage/plugin-apache-airflow': patch
+'@backstage/plugin-api-docs': patch
+'@backstage/plugin-apollo-explorer': patch
+'@backstage/plugin-app-backend': patch
+'@backstage/plugin-auth-backend': patch
+'@backstage/plugin-auth-node': patch
+'@backstage/plugin-azure-devops-backend': patch
+'@backstage/plugin-azure-devops': patch
+'@backstage/plugin-azure-sites-backend': patch
+'@backstage/plugin-azure-sites': patch
+'@backstage/plugin-badges': patch
+'@backstage/plugin-bitbucket-cloud-common': patch
+'@backstage/plugin-bitrise': patch
+'@backstage/plugin-catalog-backend-module-azure': patch
+'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
+'@backstage/plugin-catalog-backend-module-bitbucket-server': patch
+'@backstage/plugin-catalog-backend-module-bitbucket': patch
+'@backstage/plugin-catalog-backend-module-gerrit': patch
+'@backstage/plugin-catalog-backend-module-github': patch
+'@backstage/plugin-catalog-backend-module-gitlab': patch
+'@backstage/plugin-catalog-backend-module-msgraph': patch
+'@backstage/plugin-catalog-backend': patch
+'@backstage/plugin-catalog-graphql': patch
+'@backstage/plugin-catalog-import': patch
+'@backstage/plugin-circleci': patch
+'@backstage/plugin-cloudbuild': patch
+'@backstage/plugin-code-climate': patch
+'@backstage/plugin-code-coverage-backend': patch
+'@backstage/plugin-code-coverage': patch
+'@backstage/plugin-codescene': patch
+'@backstage/plugin-config-schema': patch
+'@backstage/plugin-cost-insights': patch
+'@backstage/plugin-dynatrace': patch
+'@backstage/plugin-explore-react': patch
+'@backstage/plugin-explore': patch
+'@backstage/plugin-firehydrant': patch
+'@backstage/plugin-fossa': patch
+'@backstage/plugin-gcalendar': patch
+'@backstage/plugin-gcp-projects': patch
+'@backstage/plugin-git-release-manager': patch
+'@backstage/plugin-github-actions': patch
+'@backstage/plugin-github-deployments': patch
+'@backstage/plugin-github-issues': patch
+'@backstage/plugin-github-pull-requests-board': patch
+'@backstage/plugin-gitops-profiles': patch
+'@backstage/plugin-gocd': patch
+'@backstage/plugin-graphiql': patch
+'@backstage/plugin-graphql-backend': patch
+'@backstage/plugin-home': patch
+'@backstage/plugin-ilert': patch
+'@backstage/plugin-jenkins-backend': patch
+'@backstage/plugin-jenkins': patch
+'@backstage/plugin-kafka': patch
+'@backstage/plugin-kubernetes': patch
+'@backstage/plugin-lighthouse': patch
+'@backstage/plugin-newrelic': patch
+'@backstage/plugin-org-react': patch
+'@backstage/plugin-org': patch
+'@backstage/plugin-pagerduty': patch
+'@backstage/plugin-periskop-backend': patch
+'@backstage/plugin-periskop': patch
+'@backstage/plugin-permission-backend': patch
+'@backstage/plugin-permission-common': patch
+'@backstage/plugin-permission-node': patch
+'@backstage/plugin-playlist-backend': patch
+'@backstage/plugin-playlist': patch
+'@backstage/plugin-proxy-backend': patch
+'@backstage/plugin-rollbar-backend': patch
+'@backstage/plugin-rollbar': patch
+'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/plugin-scaffolder': patch
+'@backstage/plugin-search': patch
+'@backstage/plugin-sentry': patch
+'@backstage/plugin-shortcuts': patch
+'@backstage/plugin-sonarqube-backend': patch
+'@backstage/plugin-sonarqube': patch
+'@backstage/plugin-splunk-on-call': patch
+'@backstage/plugin-stack-overflow': patch
+'@backstage/plugin-tech-insights': patch
+'@backstage/plugin-tech-radar': patch
+'@backstage/plugin-techdocs-addons-test-utils': patch
+'@backstage/plugin-techdocs-backend': patch
+'@backstage/plugin-techdocs-module-addons-contrib': patch
+'@backstage/plugin-techdocs': patch
+'@backstage/plugin-todo-backend': patch
+'@backstage/plugin-todo': patch
+'@backstage/plugin-user-settings': patch
+'@backstage/plugin-vault-backend': patch
+'@backstage/plugin-vault': patch
+'@backstage/plugin-xcmetrics': patch
+---
+
+Updated dependency `msw` to `^0.49.0`.
diff --git a/.changeset/renovate-778b2fa.md b/.changeset/renovate-778b2fa.md
new file mode 100644
index 0000000000..f4f57e448b
--- /dev/null
+++ b/.changeset/renovate-778b2fa.md
@@ -0,0 +1,7 @@
+---
+'@backstage/core-components': patch
+'@backstage/plugin-codescene': patch
+'@backstage/plugin-sonarqube': patch
+---
+
+Updated dependency `rc-progress` to `3.4.1`.
diff --git a/.changeset/renovate-a5f7839.md b/.changeset/renovate-a5f7839.md
new file mode 100644
index 0000000000..d1ab22e04a
--- /dev/null
+++ b/.changeset/renovate-a5f7839.md
@@ -0,0 +1,5 @@
+---
+'@backstage/config-loader': patch
+---
+
+Updated dependency `typescript-json-schema` to `^0.55.0`.
diff --git a/.changeset/rich-balloons-leave.md b/.changeset/rich-balloons-leave.md
new file mode 100644
index 0000000000..bb6832a681
--- /dev/null
+++ b/.changeset/rich-balloons-leave.md
@@ -0,0 +1,5 @@
+---
+'@backstage/backend-common': patch
+---
+
+Added the ability to understand Job Artifact URLs to the GitLab integration
diff --git a/.changeset/rich-garlics-play.md b/.changeset/rich-garlics-play.md
new file mode 100644
index 0000000000..5589a70e35
--- /dev/null
+++ b/.changeset/rich-garlics-play.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-kubernetes-backend': patch
+'@backstage/plugin-kubernetes-common': patch
+---
+
+Added Kubernetes proxy API route to backend Kubernetes plugin, allowing Backstage plugin developers to read/write new information from Kubernetes (if proper credentials are provided).
diff --git a/.changeset/search-heavy-frogs-confess.md b/.changeset/search-heavy-frogs-confess.md
new file mode 100644
index 0000000000..a37c28c60c
--- /dev/null
+++ b/.changeset/search-heavy-frogs-confess.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-backend-node': patch
+---
+
+Fixed a bug that could cause a `max listeners exceeded warning` to be logged when more than 10 collators were running simultaneously.
diff --git a/.changeset/search-om-manniskan-ginge.md b/.changeset/search-om-manniskan-ginge.md
new file mode 100644
index 0000000000..c36972f191
--- /dev/null
+++ b/.changeset/search-om-manniskan-ginge.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-backend-node': patch
+---
+
+Updated indexer and decorator base classes to take advantage of features introduced in Node.js v16; be sure you are running a [supported version of Node.js](https://backstage.io/docs/releases/v1.8.0#node-16-and-18).
diff --git a/.changeset/search-tofu-panaeng.md b/.changeset/search-tofu-panaeng.md
new file mode 100644
index 0000000000..1f8bbf6a7b
--- /dev/null
+++ b/.changeset/search-tofu-panaeng.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-backend-node': patch
+---
+
+Use of `TestPipeline.withSubject()` is now deprecated. Instead, use the `fromCollator`, `fromDecorator`, or `fromIndexer` static methods to instantiate a test pipeline. You may also use the class' `withCollator`, `withDecorator`, and `withIndexer` instance methods to build test pipelines that consist of multiple test subjects.
diff --git a/.changeset/silly-wolves-remember.md b/.changeset/silly-wolves-remember.md
new file mode 100644
index 0000000000..f39812db88
--- /dev/null
+++ b/.changeset/silly-wolves-remember.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Registered shutdown hook in experimental catalog plugin.
diff --git a/.changeset/sour-plums-grow.md b/.changeset/sour-plums-grow.md
new file mode 100644
index 0000000000..4070dc5e50
--- /dev/null
+++ b/.changeset/sour-plums-grow.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+fixed `headerOptions` not passed to `TemplatePage` component
diff --git a/.changeset/stupid-clocks-return.md b/.changeset/stupid-clocks-return.md
new file mode 100644
index 0000000000..84b061334f
--- /dev/null
+++ b/.changeset/stupid-clocks-return.md
@@ -0,0 +1,12 @@
+---
+'@backstage/plugin-events-backend-module-gitlab': patch
+---
+
+Add `createGitlabTokenValidator(config)` which can be used
+to create a validator used at an ingress for topic `gitlab`.
+
+On top, there is a new `gitlabWebhookEventsModule` for the new backend plugin API
+which auto-registers the `HttpPostIngress` for topic `gitlab` incl. the validator.
+
+Please find more information at
+https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-gitlab/README.md.
diff --git a/.changeset/stupid-gifts-serve.md b/.changeset/stupid-gifts-serve.md
new file mode 100644
index 0000000000..3110a1976c
--- /dev/null
+++ b/.changeset/stupid-gifts-serve.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
+---
+
+Fix repo:push topic not matching `BitbucketCloudEventRouter`.
diff --git a/.changeset/tender-colts-greet.md b/.changeset/tender-colts-greet.md
new file mode 100644
index 0000000000..ff59bf0bea
--- /dev/null
+++ b/.changeset/tender-colts-greet.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-openapi': patch
+---
+
+Enabled support of resolving `$refs` in all kind of yaml documents, not only OpenAPI. This implicitly adds `$ref` resolving support for AsyncAPI specs. Thus, the `openApiPlaceholderResolver` has been renamed to `jsonSchemaRefPlaceholderResolver`.
diff --git a/.changeset/tender-parrots-cover.md b/.changeset/tender-parrots-cover.md
new file mode 100644
index 0000000000..5272fcbdce
--- /dev/null
+++ b/.changeset/tender-parrots-cover.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-techdocs-module-addons-contrib': patch
+---
+
+Use `app.title` from `app-config.yaml` when creating new Documentation Feedback issue. `Backstage` is the default value.
diff --git a/.changeset/thin-donuts-join.md b/.changeset/thin-donuts-join.md
new file mode 100644
index 0000000000..84705711d2
--- /dev/null
+++ b/.changeset/thin-donuts-join.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog': patch
+---
+
+Fixed Entity kind pluralisation in the `CatalogKindHeader` component.
diff --git a/.changeset/twelve-meals-smell.md b/.changeset/twelve-meals-smell.md
new file mode 100644
index 0000000000..a9d64823a3
--- /dev/null
+++ b/.changeset/twelve-meals-smell.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-vault-backend': patch
+---
+
+Use `express-promise-router` to catch errors properly.
+Add `403` error as a known one. It will now return a `NotAllowed` error.
diff --git a/.changeset/twenty-dodos-wash.md b/.changeset/twenty-dodos-wash.md
new file mode 100644
index 0000000000..d21088a953
--- /dev/null
+++ b/.changeset/twenty-dodos-wash.md
@@ -0,0 +1,5 @@
+---
+'@backstage/backend-defaults': patch
+---
+
+Added `lifecycleFactory` to default service factories.
diff --git a/.changeset/yellow-forks-knock.md b/.changeset/yellow-forks-knock.md
new file mode 100644
index 0000000000..98c4b5b675
--- /dev/null
+++ b/.changeset/yellow-forks-knock.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-cost-insights': patch
+---
+
+Making a possibility to hide a trending line in a cost insights plugin
diff --git a/.changeset/young-turkeys-relax.md b/.changeset/young-turkeys-relax.md
new file mode 100644
index 0000000000..c53cd984a6
--- /dev/null
+++ b/.changeset/young-turkeys-relax.md
@@ -0,0 +1,5 @@
+---
+'@backstage/backend-plugin-api': patch
+---
+
+Added initial support for registering shutdown hooks via `lifecycleServiceRef`.
diff --git a/.eslintrc.js b/.eslintrc.js
index 47a47daee6..675a834efb 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -18,7 +18,7 @@ var path = require('path');
module.exports = {
root: true,
- plugins: ['notice'],
+ plugins: ['notice', 'testing-library'],
rules: {
'notice/notice': [
'error',
@@ -45,5 +45,196 @@ module.exports = {
"CallExpression[arguments.length=0] > MemberExpression[property.name='toUpperCase']",
},
],
+ 'testing-library/await-async-query': 'error',
+ 'testing-library/await-async-utils': 'error',
+ 'testing-library/no-await-sync-query': 'error',
+ 'testing-library/prefer-wait-for': 'error',
+ 'testing-library/no-dom-import': 'error',
+ 'testing-library/no-wait-for-side-effects': 'error',
+ 'testing-library/no-wait-for-empty-callback': 'error',
+ 'no-restricted-globals': [
+ 'error',
+ [
+ 'blur',
+ 'captureEvents',
+ 'chrome',
+ 'clientInformation',
+ 'close',
+ 'closed',
+ 'createImageBitmap',
+ 'crypto',
+ 'customElements',
+ 'defaultstatus',
+ 'defaultStatus',
+ 'devicePixelRatio',
+ 'external',
+ 'find',
+ 'focus',
+ 'frameElement',
+ 'frames',
+ 'getComputedStyle',
+ 'getSelection',
+ 'indexedDB',
+ 'innerHeight',
+ 'innerWidth',
+ 'isSecureContext',
+ 'length',
+ 'location',
+ 'locationbar',
+ 'matchMedia',
+ 'menubar',
+ 'moveBy',
+ 'moveTo',
+ 'name',
+ 'navigator',
+ 'onabort',
+ 'onafterprint',
+ 'onanimationend',
+ 'onanimationiteration',
+ 'onanimationstart',
+ 'onappinstalled',
+ 'onauxclick',
+ 'onbeforeinstallprompt',
+ 'onbeforeprint',
+ 'onbeforeunload',
+ 'onblur',
+ 'oncancel',
+ 'oncanplay',
+ 'oncanplaythrough',
+ 'onchange',
+ 'onclick',
+ 'onclose',
+ 'oncontextmenu',
+ 'oncuechange',
+ 'ondblclick',
+ 'ondevicemotion',
+ 'ondeviceorientation',
+ 'ondeviceorientationabsolute',
+ 'ondrag',
+ 'ondragend',
+ 'ondragenter',
+ 'ondragleave',
+ 'ondragover',
+ 'ondragstart',
+ 'ondrop',
+ 'ondurationchange',
+ 'onemptied',
+ 'onended',
+ 'onerror',
+ 'onfocus',
+ 'ongotpointercapture',
+ 'onhashchange',
+ 'oninput',
+ 'oninvalid',
+ 'onkeydown',
+ 'onkeypress',
+ 'onkeyup',
+ 'onlanguagechange',
+ 'onload',
+ 'onloadeddata',
+ 'onloadedmetadata',
+ 'onloadstart',
+ 'onlostpointercapture',
+ 'onmessage',
+ 'onmessageerror',
+ 'onmousedown',
+ 'onmouseenter',
+ 'onmouseleave',
+ 'onmousemove',
+ 'onmouseout',
+ 'onmouseover',
+ 'onmouseup',
+ 'onmousewheel',
+ 'onoffline',
+ 'ononline',
+ 'onpagehide',
+ 'onpageshow',
+ 'onpause',
+ 'onplay',
+ 'onplaying',
+ 'onpointercancel',
+ 'onpointerdown',
+ 'onpointerenter',
+ 'onpointerleave',
+ 'onpointermove',
+ 'onpointerout',
+ 'onpointerover',
+ 'onpointerup',
+ 'onpopstate',
+ 'onprogress',
+ 'onratechange',
+ 'onrejectionhandled',
+ 'onreset',
+ 'onresize',
+ 'onscroll',
+ 'onsearch',
+ 'onseeked',
+ 'onseeking',
+ 'onselect',
+ 'onstalled',
+ 'onstorage',
+ 'onsubmit',
+ 'onsuspend',
+ 'ontimeupdate',
+ 'ontoggle',
+ 'ontransitionend',
+ 'onunhandledrejection',
+ 'onunload',
+ 'onvolumechange',
+ 'onwaiting',
+ 'onwebkitanimationend',
+ 'onwebkitanimationiteration',
+ 'onwebkitanimationstart',
+ 'onwebkittransitionend',
+ 'onwheel',
+ 'open',
+ 'openDatabase',
+ 'opener',
+ 'origin',
+ 'outerHeight',
+ 'outerWidth',
+ 'pageXOffset',
+ 'pageYOffset',
+ 'parent',
+ 'performance',
+ 'personalbar',
+ 'postMessage',
+ 'print',
+ 'releaseEvents',
+ 'resizeBy',
+ 'resizeTo',
+ 'screen',
+ 'screenLeft',
+ 'screenTop',
+ 'screenX',
+ 'screenY',
+ 'scroll',
+ 'scrollbars',
+ 'scrollBy',
+ 'scrollTo',
+ 'scrollX',
+ 'scrollY',
+ 'self',
+ 'speechSynthesis',
+ 'status',
+ 'statusbar',
+ 'stop',
+ 'styleMedia',
+ 'toolbar',
+ 'top',
+ 'visualViewport',
+ 'webkitRequestFileSystem',
+ 'webkitResolveLocalFileSystemURL',
+ 'webkitStorageInfo',
+ ].map(function f(name) {
+ return {
+ name: name,
+ message:
+ 'Avoid using implicitly global variables. Use e.g. window.' +
+ name +
+ ' instead if this was your intent.',
+ };
+ }),
+ ].flat(),
},
};
diff --git a/.github/ISSUE_TEMPLATE/feature.yaml b/.github/ISSUE_TEMPLATE/feature.yaml
index 9cac5055f1..b5e06d48cf 100644
--- a/.github/ISSUE_TEMPLATE/feature.yaml
+++ b/.github/ISSUE_TEMPLATE/feature.yaml
@@ -41,7 +41,7 @@ body:
attributes:
label: '🏢 Have you read the Code of Conduct?'
options:
- - label: 'I have read the [Contributing Guidelines](https://github.com/backstage/backstage/blob/master/CODE_OF_CONDUCT.md)'
+ - label: 'I have read the [Code of Conduct](https://github.com/backstage/backstage/blob/master/CODE_OF_CONDUCT.md)'
required: true
- type: dropdown
id: willing-to-submit-pr
diff --git a/.github/ISSUE_TEMPLATE/plugin.yaml b/.github/ISSUE_TEMPLATE/plugin.yaml
index 9f3a708b41..a36c427981 100644
--- a/.github/ISSUE_TEMPLATE/plugin.yaml
+++ b/.github/ISSUE_TEMPLATE/plugin.yaml
@@ -39,7 +39,7 @@ body:
attributes:
label: '🏢 Have you read the Code of Conduct?'
options:
- - label: 'I have read the [Contributing Guidelines](https://github.com/backstage/backstage/blob/master/CODE_OF_CONDUCT.md)'
+ - label: 'I have read the [Code of Conduct](https://github.com/backstage/backstage/blob/master/CODE_OF_CONDUCT.md)'
required: true
- type: dropdown
id: willing-to-submit-pr
diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 93e0471fd3..b58c0beb05 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -21,5 +21,10 @@
groupName: 'SVGR monorepo packages',
rangeStrategy: 'replace',
},
+ // We update yarn packages manually as it's gzip'd and we don't want to pollute the repository too much.
+ {
+ matchSourceUrls: ['https://github.com/yarnpkg/berry'],
+ enabled: false,
+ },
],
}
diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt
index 9af9ae6137..bba59094e3 100644
--- a/.github/vale/Vocab/Backstage/accept.txt
+++ b/.github/vale/Vocab/Backstage/accept.txt
@@ -126,6 +126,7 @@ github
Gitiles
gitlab
GitLab
+globals
Gource
Grafana
graphql
@@ -241,6 +242,7 @@ pageview
parallelization
parseable
Patrik
+pattison
Peloton
performant
Performant
@@ -408,3 +410,4 @@ Zolotusky
zoomable
zsh
Lainfiesta
+allowlisted
diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml
new file mode 100644
index 0000000000..c376f7d0f3
--- /dev/null
+++ b/.github/workflows/automate_merge_message.yml
@@ -0,0 +1,63 @@
+name: Automate merge message
+on:
+ pull_request_target:
+ branches: ['master']
+ types: ['closed']
+
+permissions:
+ pull-requests: write
+ actions: none
+ checks: none
+ contents: none
+ deployments: none
+ issues: none
+ packages: none
+ pages: none
+ repository-projects: none
+ security-events: none
+ statuses: none
+
+jobs:
+ message:
+ # prevent running towards forks, and only run on merged PRs
+ if: github.repository == 'backstage/backstage' && github.event.pull_request.merged == true
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ ref: '${{ github.event.pull_request.merge_commit_sha }}'
+
+ - name: fetch base
+ run: git fetch --depth 1 origin ${{ github.event.pull_request.base.sha }}
+
+ # We avoid using the in-source script since this workflow has elevated permissions that we don't want to expose
+ - name: Generate Message
+ id: generate-message
+ run: |
+ rm -f generate.js
+ wget -O generate.js https://raw.githubusercontent.com/backstage/backstage/master/scripts/generate-merge-message.js 1>&2
+ node generate.js ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} > message.txt
+
+ - name: Post Message
+ uses: actions/github-script@v6
+ env:
+ ISSUE_NUMBER: ${{ github.event.pull_request.number }}
+ with:
+ script: |
+ const owner = "backstage";
+ const repo = "backstage";
+ const body = require('fs').readFileSync('message.txt', 'utf8').trim();
+ const issue_number = Number(process.env.ISSUE_NUMBER);
+
+ if (!body) {
+ console.log(`skipping comment for #${issue_number}`);
+ return;
+ }
+
+ console.log(`creating comment for #${issue_number}`);
+ await github.rest.issues.createComment({
+ owner,
+ repo,
+ issue_number,
+ body,
+ });
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d826bc8bb4..7cc5874184 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -33,7 +33,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -63,12 +63,12 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: verify yarn dependency duplicates
- run: yarn dedupe --check
+ run: node scripts/verify-lockfile-duplicates.js
- name: verify changesets
run: node scripts/verify-changesets.js
@@ -181,7 +181,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml
index 4629d656ce..2d28c242ee 100644
--- a/.github/workflows/cron.yml
+++ b/.github/workflows/cron.yml
@@ -8,7 +8,7 @@ jobs:
cron:
runs-on: ubuntu-latest
steps:
- - uses: backstage/actions/cron@v0.5.7
+ - uses: backstage/actions/cron@v0.5.8
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 90ea8e13f1..f5dc164737 100644
--- a/.github/workflows/deploy_docker-image.yml
+++ b/.github/workflows/deploy_docker-image.yml
@@ -9,13 +9,13 @@ jobs:
steps:
- name: checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
path: backstage
ref: v${{ github.event.client_payload.version }}
- name: setup-node
- uses: actions/setup-node@v1
+ uses: actions/setup-node@v3
with:
node-version: 16.x
registry-url: https://registry.npmjs.org/
@@ -23,7 +23,7 @@ jobs:
# Beginning of yarn setup, keep in sync between all workflows.
# TODO(Rugvip): move this to composite action once all features we use are supported
- name: use node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v1
+ uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
@@ -31,7 +31,7 @@ jobs:
# Cache every node_modules folder inside the monorepo
- name: cache all node_modules
id: cache-modules
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
path: '**/node_modules'
# We use both yarn.lock and package.json as cache keys to ensure that
@@ -44,10 +44,10 @@ jobs:
- name: find location of global yarn cache
id: yarn-cache
if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
+ run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: cache global yarn cache
- uses: actions/cache@v2
+ uses: actions/cache@v3
if: steps.cache-modules.outputs.cache-hit != 'true'
with:
path: ${{ steps.yarn-cache.outputs.dir }}
diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml
index 360a74e012..053f3db621 100644
--- a/.github/workflows/deploy_nightly.yml
+++ b/.github/workflows/deploy_nightly.yml
@@ -26,7 +26,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml
index 1d03c210cd..1ee10e83d3 100644
--- a/.github/workflows/deploy_packages.yml
+++ b/.github/workflows/deploy_packages.yml
@@ -67,7 +67,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -145,7 +145,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml
index a42b9b6f7b..e7582bd788 100644
--- a/.github/workflows/issue.yaml
+++ b/.github/workflows/issue.yaml
@@ -10,4 +10,4 @@ jobs:
if: github.repository == 'backstage/backstage'
steps:
- name: Issue sync
- uses: backstage/actions/issue-sync@v0.5.7
+ uses: backstage/actions/issue-sync@v0.5.8
diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml
index 6104a802d9..e3988a898d 100644
--- a/.github/workflows/pr-review-comment.yaml
+++ b/.github/workflows/pr-review-comment.yaml
@@ -33,9 +33,9 @@ jobs:
}
const prNumber = artifact.name.slice('pr_number-'.length)
- console.log(`::set-output name=pr-number::${prNumber}`);
+ core.setOutput('pr-number', prNumber);
- - uses: backstage/actions/re-review@v0.5.7
+ - uses: backstage/actions/re-review@v0.5.8
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 4ab7da8e07..54fcf2e74b 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -18,7 +18,7 @@ jobs:
if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request )
steps:
- name: PR sync
- uses: backstage/actions/pr-sync@v0.5.7
+ uses: backstage/actions/pr-sync@v0.5.8
with:
github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml
index 2113efe924..45c84e298a 100644
--- a/.github/workflows/sync_code-formatting.yml
+++ b/.github/workflows/sync_code-formatting.yml
@@ -20,7 +20,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml
index c1fb727c33..7b01757ba7 100644
--- a/.github/workflows/sync_snyk-github-issues.yml
+++ b/.github/workflows/sync_snyk-github-issues.yml
@@ -23,7 +23,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml
index 736f09571f..dc1d942e32 100644
--- a/.github/workflows/verify_docs-quality.yml
+++ b/.github/workflows/verify_docs-quality.yml
@@ -18,7 +18,7 @@ jobs:
# also contains an "--config=.github/vale/config.ini" option
- name: generate vale args
id: generate
- run: echo "::set-output name=args::$(node scripts/check-docs-quality.js --ci-args)"
+ run: echo "args=$(node scripts/check-docs-quality.js --ci-args)" >> $GITHUB_OUTPUT
- name: documentation quality check
uses: errata-ai/vale-action@v2.0.1
diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml
index a84b315e33..8d296041b7 100644
--- a/.github/workflows/verify_e2e-linux.yml
+++ b/.github/workflows/verify_e2e-linux.yml
@@ -52,7 +52,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
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 8d59d15899..59c8d9f7cc 100644
--- a/.github/workflows/verify_e2e-techdocs.yml
+++ b/.github/workflows/verify_e2e-techdocs.yml
@@ -26,7 +26,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- - uses: actions/setup-python@v3
+ - uses: actions/setup-python@v4
+ with:
+ python-version: '3.9'
- name: install dependencies
run: yarn install --immutable
diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml
index fc29c1f03b..8a49b8fe31 100644
--- a/.github/workflows/verify_e2e-windows.yml
+++ b/.github/workflows/verify_e2e-windows.yml
@@ -49,7 +49,7 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
- name: Add msbuild to PATH
- uses: microsoft/setup-msbuild@v1.0.3
+ uses: microsoft/setup-msbuild@v1.1.3
- name: setup chrome
uses: browser-actions/setup-chrome@latest
- name: yarn install
diff --git a/.github/workflows/verify_kubernetes.yml b/.github/workflows/verify_kubernetes.yml
index b92deb96ac..a50f817020 100644
--- a/.github/workflows/verify_kubernetes.yml
+++ b/.github/workflows/verify_kubernetes.yml
@@ -28,12 +28,12 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: bootstrap kind
- uses: helm/kind-action@v1.3.0
+ uses: helm/kind-action@v1.4.0
- name: kubernetes test
working-directory: packages/backend-common
diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml
index 3a24befa84..4085f334f3 100644
--- a/.github/workflows/verify_microsite.yml
+++ b/.github/workflows/verify_microsite.yml
@@ -32,6 +32,9 @@ jobs:
run: yarn install --immutable
working-directory: microsite
+ - name: verify yarn dependency duplicates
+ run: node scripts/verify-lockfile-duplicates.js
+
- name: prettier
run: yarn prettier:check
working-directory: microsite
diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml
index 4fe39fe244..b3bd850937 100644
--- a/.github/workflows/verify_storybook.yml
+++ b/.github/workflows/verify_storybook.yml
@@ -35,7 +35,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
- uses: backstage/actions/yarn-install@v0.5.7
+ uses: backstage/actions/yarn-install@v0.5.8
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: storybook yarn install
diff --git a/contrib/scripts/upgrade-backstage-app/upgrade-backstage-app.sh b/contrib/scripts/upgrade-backstage-app/upgrade-backstage-app.sh
index d68d9e31c4..5c87d16d29 100755
--- a/contrib/scripts/upgrade-backstage-app/upgrade-backstage-app.sh
+++ b/contrib/scripts/upgrade-backstage-app/upgrade-backstage-app.sh
@@ -9,6 +9,7 @@ if [ "$CURRENT_VERSION" == "$TARGET_VERSION" ]; then
else
echo "Attempting upgrade from Backstage $CURRENT_VERSION (create-app $CREATE_APP_CURRENT_VERSION) to $TARGET_VERSION ($CREATE_APP_TARGET_VERSION)"
rm -rf .upgrade && mkdir .upgrade
+ git fetch https://github.com/backstage/upgrade-helper-diff.git '+refs/heads/*:refs/remotes/upgrade-helper/*'
curl -s https://raw.githubusercontent.com/backstage/upgrade-helper-diff/master/diffs/$CREATE_APP_CURRENT_VERSION..$CREATE_APP_TARGET_VERSION.diff > .upgrade/upgrade.diff
git apply -3 .upgrade/upgrade.diff
git mergetool
diff --git a/cypress/yarn.lock b/cypress/yarn.lock
index 07249a29fc..49c85adb2b 100644
--- a/cypress/yarn.lock
+++ b/cypress/yarn.lock
@@ -1415,22 +1415,22 @@ __metadata:
linkType: hard
"typescript@npm:^4.1.3":
- version: 4.8.4
- resolution: "typescript@npm:4.8.4"
+ version: 4.9.3
+ resolution: "typescript@npm:4.9.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0
+ checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc
languageName: node
linkType: hard
"typescript@patch:typescript@^4.1.3#~builtin":
- version: 4.8.4
- resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=a1c5e5"
+ version: 4.9.3
+ resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=a1c5e5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 563a0ef47abae6df27a9a3ab38f75fc681f633ccf1a3502b1108e252e187787893de689220f4544aaf95a371a4eb3141e4a337deb9895de5ac3c1ca76430e5f0
+ checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1
languageName: node
linkType: hard
diff --git a/docs/assets/getting-started/sidebar-submenu-example.png b/docs/assets/getting-started/sidebar-submenu-example.png
new file mode 100644
index 0000000000..0b30f0ca6a
Binary files /dev/null and b/docs/assets/getting-started/sidebar-submenu-example.png differ
diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md
index 30276a97ab..88c22afb9b 100644
--- a/docs/deployment/docker.md
+++ b/docs/deployment/docker.md
@@ -275,6 +275,11 @@ browser at `http://localhost:7007`
## Separate Frontend
+> NOTE: This is an optional step, and you will lose out on the features of the
+> `@backstage/plugin-app-backend` plugin. Most notably the frontend configuration
+> will no longer be injected by the backend, you will instead need to use the
+> correct configuration when building the frontend bundle.
+
It is sometimes desirable to serve the frontend separately from the backend,
either from a separate image or for example a static file serving provider. The
first step in doing so is to remove the `app-backend` plugin from the backend
diff --git a/docs/features/search/getting-started.md b/docs/features/search/getting-started.md
index 71b9c276d9..726d1557d0 100644
--- a/docs/features/search/getting-started.md
+++ b/docs/features/search/getting-started.md
@@ -68,7 +68,7 @@ export const searchPage = (
switch (result.type) {
case 'software-catalog':
return (
- {
It's good practice for search results to highlight information that was used to
return it in the first place! The code below highlights how you might specify a
-custom result item component, using the `` component as
+custom result item component, using the `` component as
an example:
```tsx {7-13}
@@ -265,7 +265,7 @@ an example:
switch (result.type) {
case 'software-catalog':
return (
- ` with this:
+
+ ```ts
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ```
+
+When you startup your Backstage app and hover over the Home option on the sidebar you'll now see a nice sub-menu appear with links to the various Kinds in your Catalog. It would look like this:
+
+
+
+You can see more ways to use this in the [Storybook Sidebar examples](https://backstage.io/storybook/?path=/story/layout-sidebar--sample-scalable-sidebar)
+
## Custom Homepage
In addition to a custom theme, a custom logo, you can also customize the
diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md
index 4f032901a9..bbbe86a834 100644
--- a/docs/integrations/github/discovery.md
+++ b/docs/integrations/github/discovery.md
@@ -14,7 +14,7 @@ organization and register entities matching the configured path. This can be
useful as an alternative to static locations or manually adding things to the
catalog. This is the preferred method for ingesting entities into the catalog.
-## Installation
+## Installation without Events Support
You will have to add the provider in the catalog initialization code of your
backend. They are not installed by default, therefore you have to add a
@@ -53,6 +53,52 @@ And then add the entity provider to your catalog builder:
}
```
+## Installation with Events Support
+
+Please follow the installation instructions at
+
+- https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md
+- https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-github/README.md
+
+Additionally, you need to decide how you want to receive events from external sources like
+
+- [via HTTP endpoint](https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md)
+- [via an AWS SQS queue](https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-aws-sqs/README.md)
+
+Set up your provider
+
+```diff
+// packages/backend/src/plugins/catalogEventBasedProviders.ts
++import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github';
+ import { EntityProvider } from '@backstage/plugin-catalog-node';
+ import { EventSubscriber } from '@backstage/plugin-events-node';
+ import { PluginEnvironment } from '../types';
+ export default async function createCatalogEventBasedProviders(
+- _: PluginEnvironment,
++ env: PluginEnvironment,
+ ): Promise> {
+ const providers: Array<
+ (EntityProvider & EventSubscriber) | Array
+ > = [];
+- // add your event-based entity providers here
++ providers.push(
++ GithubEntityProvider.fromConfig(env.config, {
++ logger: env.logger,
++ // optional: alternatively, use scheduler with schedule defined in app-config.yaml
++ schedule: env.scheduler.createScheduledTaskRunner({
++ frequency: { minutes: 30 },
++ timeout: { minutes: 3 },
++ }),
++ // optional: alternatively, use schedule
++ scheduler: env.scheduler,
++ }),
++ );
+ return providers.flat();
+ }
+```
+
+You can check the official docs to [configure your webhook](https://docs.github.com/en/developers/webhooks-and-events/webhooks/creating-webhooks) and to [secure your request](https://docs.github.com/en/developers/webhooks-and-events/webhooks/securing-your-webhooks). The webhook will need to be configured to forward `push` events.
+
## Configuration
To use the discovery provider, you'll need a GitHub integration
diff --git a/docs/releases/v1.9.0-next.0-changelog.md b/docs/releases/v1.9.0-next.0-changelog.md
new file mode 100644
index 0000000000..690bf60ceb
--- /dev/null
+++ b/docs/releases/v1.9.0-next.0-changelog.md
@@ -0,0 +1,2305 @@
+# Release v1.9.0-next.0
+
+## @backstage/catalog-client@1.2.0-next.0
+
+### Minor Changes
+
+- 00d90b520a: **BREAKING PRODUCERS**: Added a new `getEntitiesByRefs` endpoint to `CatalogApi`, for efficient batch fetching of entities by ref.
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/repo-tools@0.1.0-next.0
+
+### Minor Changes
+
+- 99713fd671: Introducing repo-tools package
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend@1.6.0-next.0
+
+### Minor Changes
+
+- 16891a212c: Added new `POST /entities/by-refs` endpoint, which allows you to efficiently
+ batch-fetch entities by their entity ref. This can be useful e.g. in graphql
+ resolvers or similar contexts where you need to fetch many entities at the same
+ time.
+
+### Patch Changes
+
+- d8593ce0e6: Do not use deprecated `LocationSpec` from the `@backstage/plugin-catalog-node` package
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- e982f77fe3: Registered shutdown hook in experimental catalog plugin.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/plugin-permission-node@0.7.2-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+ - @backstage/plugin-scaffolder-common@1.2.3-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-events-backend@0.2.0-next.0
+
+### Minor Changes
+
+- cf41eedf43: **BREAKING:** Remove required field `router` at `HttpPostIngressEventPublisher.fromConfig`
+ and replace it with `bind(router: Router)`.
+ Additionally, the path prefix `/http` will be added inside `HttpPostIngressEventPublisher`.
+
+ ```diff
+ // at packages/backend/src/plugins/events.ts
+ const eventsRouter = Router();
+ - const httpRouter = Router();
+ - eventsRouter.use('/http', httpRouter);
+
+ const http = HttpPostIngressEventPublisher.fromConfig({
+ config: env.config,
+ logger: env.logger,
+ - router: httpRouter,
+ });
+ + http.bind(eventsRouter);
+ ```
+
+### Patch Changes
+
+- cf41eedf43: Introduce a new interface `RequestDetails` to abstract `Request`
+ providing access to request body and headers.
+
+ **BREAKING:** Replace `request: Request` with `request: RequestDetails` at `RequestValidator`.
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-events-node@0.2.0-next.0
+
+### Minor Changes
+
+- cf41eedf43: Introduce a new interface `RequestDetails` to abstract `Request`
+ providing access to request body and headers.
+
+ **BREAKING:** Replace `request: Request` with `request: RequestDetails` at `RequestValidator`.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.1.5-next.0
+
+## @backstage/plugin-scaffolder@1.9.0-next.0
+
+### Minor Changes
+
+- ddd1c3308d: Implement Custom Field Explorer to view and play around with available installed custom field extensions
+- adb1b01e32: Adds the ability to supply a `transformErrors` function to the `Stepper` for `/next`
+
+### Patch Changes
+
+- d4d07cf55e: Enabling the customization of the last step in the scaffolder template.
+
+ To override the content you have to do the next:
+
+ ```typescript jsx
+
+ ```
+
+- ef803022f1: Initialize all `formData` in the `Stepper` in `/next`
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+
+- a63e2df559: fixed `headerOptions` not passed to `TemplatePage` component
+
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+ - @backstage/plugin-permission-react@0.4.8-next.0
+ - @backstage/plugin-scaffolder-common@1.2.3-next.0
+
+## @backstage/plugin-user-settings@0.6.0-next.0
+
+### Minor Changes
+
+- 29bdda5442: Added the ability to fully customize settings page. Deprecated UserSettingsTab in favour of SettingsLayout.Route
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/app-defaults@1.0.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-permission-react@0.4.8-next.0
+
+## @backstage/backend-app-api@0.2.4-next.0
+
+### Patch Changes
+
+- d6dbf1792b: Added `lifecycleFactory` implementation.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-permission-node@0.7.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/backend-common@0.16.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- dfc8edf9c5: Internal refactor to avoid usage of deprecated symbols.
+- Updated dependencies
+ - @backstage/config-loader@1.1.7-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/backend-defaults@0.1.4-next.0
+
+### Patch Changes
+
+- d6dbf1792b: Added `lifecycleFactory` to default service factories.
+- Updated dependencies
+ - @backstage/backend-app-api@0.2.4-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+
+## @backstage/backend-plugin-api@0.1.5-next.0
+
+### Patch Changes
+
+- d6dbf1792b: Added initial support for registering shutdown hooks via `lifecycleServiceRef`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/backend-tasks@0.3.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/backend-test-utils@0.1.31-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/cli@0.21.2-next.0
+ - @backstage/backend-app-api@0.2.4-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/catalog-model@1.1.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/cli@0.21.2-next.0
+
+### Patch Changes
+
+- 91d050c140: changed tests created by create-plugin to follow eslint-rules best practices particularly testing-library/prefer-screen-queries and testing-library/render-result-naming-convention
+- 459a3457e1: Bump `msw` version in default plugin/app templates
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/config-loader@1.1.7-next.0
+ - @backstage/release-manifests@0.0.8-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/config@1.0.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+
+## @backstage/config-loader@1.1.7-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/core-app-api@1.2.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/version-bridge@1.0.2
+
+## @backstage/core-components@0.12.1-next.0
+
+### Patch Changes
+
+- ea4a5be8f3: Create a variable for minimum height and add a prop named 'fit' for determining if the graph height should grow or be contained.
+- 64a579a998: Add items prop to SupportButton. This prop can be used to override the items that would otherwise be grabbed from the config.
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- 17a8e32f39: Updated dependency `rc-progress` to `3.4.1`.
+- dfc8edf9c5: Internal refactor to avoid usage of deprecated symbols.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/version-bridge@1.0.2
+
+## @backstage/core-plugin-api@1.1.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/version-bridge@1.0.2
+
+## @backstage/create-app@0.4.35-next.0
+
+### Patch Changes
+
+- Bumped create-app version.
+- Updated dependencies
+ - @backstage/cli-common@0.1.10
+
+## @backstage/dev-utils@1.0.9-next.0
+
+### Patch Changes
+
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/test-utils@1.2.3-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/app-defaults@1.0.9-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/errors@1.1.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+
+## @backstage/integration@1.4.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 34b039ca9f: Added `integrations.github.apps.allowedInstallationOwners` to the configuration schema.
+- Updated dependencies
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/integration-react@1.1.7-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/release-manifests@0.0.8-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+
+## @techdocs/cli@1.2.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-techdocs-node@1.4.3-next.0
+
+## @backstage/test-utils@1.2.3-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-permission-react@0.4.8-next.0
+
+## @backstage/types@1.0.2-next.0
+
+### Patch Changes
+
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+
+## @backstage/plugin-adr@0.2.4-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-adr-common@0.2.4-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-search-react@1.2.2-next.0
+
+## @backstage/plugin-adr-backend@0.2.4-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-adr-common@0.2.4-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-adr-common@0.2.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-airbrake@0.3.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/test-utils@1.2.3-next.0
+ - @backstage/dev-utils@1.0.9-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-airbrake-backend@0.2.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-allure@0.1.28-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-analytics-module-ga@0.1.23-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-apache-airflow@0.2.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+
+## @backstage/plugin-api-docs@0.8.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/plugin-catalog@1.6.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-apollo-explorer@0.1.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-app-backend@0.3.39-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config-loader@1.1.7-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-auth-backend@0.17.2-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-auth-node@0.2.8-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-azure-devops@0.2.3-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-azure-devops-common@0.3.0
+
+## @backstage/plugin-azure-devops-backend@0.3.18-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-azure-devops-common@0.3.0
+
+## @backstage/plugin-azure-sites@0.1.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-azure-sites-common@0.1.0
+
+## @backstage/plugin-azure-sites-backend@0.1.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-azure-sites-common@0.1.0
+
+## @backstage/plugin-badges@0.2.36-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-badges-backend@0.1.33-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-bazaar@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/cli@0.21.2-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/plugin-catalog@1.6.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-bazaar-backend@0.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/backend-test-utils@0.1.31-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.2-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/integration@1.4.1-next.0
+
+## @backstage/plugin-bitrise@0.1.39-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-catalog@1.6.2-next.0
+
+### Patch Changes
+
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- 387d1d5218: Fixed Entity kind pluralisation in the `CatalogKindHeader` component.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-search-react@1.2.2-next.0
+
+## @backstage/plugin-catalog-backend-module-aws@0.1.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend-module-azure@0.1.10-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket@0.2.6-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.2-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.6-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.4-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.1.7-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend-module-github@0.2.2-next.0
+
+### Patch Changes
+
+- 70fa5ec3ec: Fixes the assignment of group member references in `GithubMultiOrgProcessor` so membership relations are resolved correctly.
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 754b5854df: Fix incorrectly exported GithubOrgEntityProvider as a type
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.1.10-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend-module-ldap@0.5.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.4.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-catalog-common@1.0.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-catalog-graph@0.2.24-next.0
+
+### Patch Changes
+
+- cb716004ef: Internal refactor to improve tests
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-catalog-graphql@0.3.16-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-catalog-import@0.9.2-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+
+## @backstage/plugin-catalog-node@1.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+
+## @backstage/plugin-catalog-react@1.2.2-next.0
+
+### Patch Changes
+
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/version-bridge@1.0.2
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+ - @backstage/plugin-permission-react@0.4.8-next.0
+
+## @backstage/plugin-cicd-statistics@0.1.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+
+## @backstage/plugin-cicd-statistics-module-gitlab@0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/plugin-cicd-statistics@0.1.14-next.0
+
+## @backstage/plugin-circleci@0.3.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-cloudbuild@0.3.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-code-climate@0.1.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-code-coverage@0.2.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-code-coverage-backend@0.2.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-codescene@0.1.7-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 17a8e32f39: Updated dependency `rc-progress` to `3.4.1`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-config-schema@0.1.35-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-cost-insights@0.12.1-next.0
+
+### Patch Changes
+
+- f9bbb3be37: Provide the ability to change the base currency from USD to any other currency in cost insights plugin
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-cost-insights-common@0.1.1
+
+## @backstage/plugin-dynatrace@1.0.2-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-events-backend-module-azure@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+
+## @backstage/plugin-events-backend-module-gerrit@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+
+## @backstage/plugin-events-backend-module-github@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+
+## @backstage/plugin-events-backend-module-gitlab@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+
+## @backstage/plugin-events-backend-test-utils@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.0
+
+## @backstage/plugin-explore@0.3.43-next.0
+
+### Patch Changes
+
+- ea4a5be8f3: Adds styling to graph forcing it to always fill out the available space.
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-explore-react@0.0.24-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-explore-react@0.0.24-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.0
+
+## @backstage/plugin-firehydrant@0.1.29-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-fossa@0.2.44-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-gcalendar@0.3.8-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-gcp-projects@0.3.31-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-git-release-manager@0.3.25-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-github-actions@0.5.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-github-deployments@0.1.43-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-github-issues@0.2.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-github-pull-requests-board@0.1.6-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-gitops-profiles@0.3.30-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-gocd@0.1.18-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-graphiql@0.2.44-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-graphql-backend@0.1.29-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-catalog-graphql@0.3.16-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-home@0.4.28-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-stack-overflow@0.1.8-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-ilert@0.2.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-jenkins@0.7.11-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-jenkins-common@0.1.11-next.0
+
+## @backstage/plugin-jenkins-backend@0.1.29-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-jenkins-common@0.1.11-next.0
+
+## @backstage/plugin-jenkins-common@0.1.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+
+## @backstage/plugin-kafka@0.3.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-kafka-backend@0.2.32-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-kubernetes@0.7.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/plugin-kubernetes-common@0.4.5-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-kubernetes-backend@0.8.1-next.0
+
+### Patch Changes
+
+- b585179770: Added Kubernetes proxy API route to backend Kubernetes plugin, allowing Backstage plugin developers to read/write new information from Kubernetes (if proper credentials are provided).
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/backend-test-utils@0.1.31-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/plugin-kubernetes-common@0.4.5-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-kubernetes-common@0.4.5-next.0
+
+### Patch Changes
+
+- b585179770: Added Kubernetes proxy API route to backend Kubernetes plugin, allowing Backstage plugin developers to read/write new information from Kubernetes (if proper credentials are provided).
+- Updated dependencies
+ - @backstage/catalog-model@1.1.4-next.0
+
+## @backstage/plugin-lighthouse@0.3.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-newrelic@0.3.30-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-newrelic-dashboard@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-org@0.6.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-org-react@0.1.1-next.0
+
+### Patch Changes
+
+- 4cb5066828: Bug fixes and adding the possibility to add a default value for the `GroupListPicker`. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, auto focus on the popup when opening
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-pagerduty@0.5.5-next.0
+
+### Patch Changes
+
+- cb716004ef: Internal refactor to improve tests
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-periskop@0.1.10-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-periskop-backend@0.1.10-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-permission-backend@0.5.14-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/plugin-permission-node@0.7.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-permission-common@0.7.2-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-permission-node@0.7.2-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-permission-react@0.4.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-playlist@0.1.3-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+ - @backstage/plugin-permission-react@0.4.8-next.0
+ - @backstage/plugin-playlist-common@0.1.3-next.0
+ - @backstage/plugin-search-react@1.2.2-next.0
+
+## @backstage/plugin-playlist-backend@0.2.2-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/backend-test-utils@0.1.31-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/plugin-permission-node@0.7.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-playlist-common@0.1.3-next.0
+
+## @backstage/plugin-playlist-common@0.1.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.7.2-next.0
+
+## @backstage/plugin-proxy-backend@0.2.33-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-rollbar@0.4.12-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-rollbar-backend@0.1.36-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-scaffolder-backend@1.8.1-next.0
+
+### Patch Changes
+
+- cb716004ef: Internal refactor to improve tests
+- 26404430bc: Use Json types from @backstage/types
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-scaffolder-common@1.2.3-next.0
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.14-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+
+## @backstage/plugin-scaffolder-common@1.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+
+## @backstage/plugin-search@1.0.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/version-bridge@1.0.2
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-search-react@1.2.2-next.0
+
+## @backstage/plugin-search-backend@1.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.0.5-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/plugin-permission-node@0.7.2-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.0.5-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-search-backend-module-pg@0.4.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.0.5-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-search-backend-node@1.0.5-next.0
+
+### Patch Changes
+
+- a962ce0551: Wait for indexer initialization before finalizing indexing.
+- 683ced83f6: Fixed a bug that could cause a `max listeners exceeded warning` to be logged when more than 10 collators were running simultaneously.
+- 81b1e7b0fe: Updated indexer and decorator base classes to take advantage of features introduced in Node.js v16; be sure you are running a [supported version of Node.js](https://backstage.io/docs/releases/v1.8.0#node-16-and-18).
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-search-common@1.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/types@1.0.2-next.0
+
+## @backstage/plugin-search-react@1.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/version-bridge@1.0.2
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-sentry@0.4.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-shortcuts@0.3.4-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-sonarqube@0.5.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 17a8e32f39: Updated dependency `rc-progress` to `3.4.1`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-sonarqube-backend@0.1.4-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-splunk-on-call@0.4.1-next.0
+
+### Patch Changes
+
+- cb716004ef: Internal refactor to improve tests
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-stack-overflow@0.1.8-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-home@0.4.28-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-stack-overflow-backend@0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.21.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-tech-insights@0.3.4-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-tech-insights-common@0.2.9-next.0
+
+## @backstage/plugin-tech-insights-backend@0.5.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-tech-insights-common@0.2.9-next.0
+ - @backstage/plugin-tech-insights-node@0.3.7-next.0
+
+## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-tech-insights-common@0.2.9-next.0
+ - @backstage/plugin-tech-insights-node@0.3.7-next.0
+
+## @backstage/plugin-tech-insights-common@0.2.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+
+## @backstage/plugin-tech-insights-node@0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-tech-insights-common@0.2.9-next.0
+
+## @backstage/plugin-tech-radar@0.5.19-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-techdocs@1.4.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.0.7-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-search-react@1.2.2-next.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.7-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.0.7-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/test-utils@1.2.3-next.0
+ - @backstage/plugin-techdocs@1.4.1-next.0
+ - @backstage/plugin-catalog@1.6.2-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-search-react@1.2.2-next.0
+
+## @backstage/plugin-techdocs-backend@1.4.2-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-techdocs-node@1.4.3-next.0
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 8536e7c281: Use `app.title` from `app-config.yaml` when creating new Documentation Feedback issue. `Backstage` is the default value.
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.0.7-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-techdocs-node@1.4.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+
+## @backstage/plugin-techdocs-react@1.0.7-next.0
+
+### Patch Changes
+
+- cb716004ef: Internal refactor to improve tests
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/version-bridge@1.0.2
+
+## @backstage/plugin-todo@0.2.14-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-todo-backend@0.1.36-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-user-settings-backend@0.1.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-vault@0.1.6-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-vault-backend@0.2.5-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 7a3d2688ed: Use `express-promise-router` to catch errors properly.
+ Add `403` error as a known one. It will now return a `NotAllowed` error.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/backend-test-utils@0.1.31-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @backstage/plugin-xcmetrics@0.2.32-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+
+## example-app@0.2.78-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-graph@0.2.24-next.0
+ - @backstage/plugin-pagerduty@0.5.5-next.0
+ - @backstage/plugin-techdocs-react@1.0.7-next.0
+ - @backstage/plugin-scaffolder@1.9.0-next.0
+ - @backstage/cli@0.21.2-next.0
+ - @backstage/plugin-cost-insights@0.12.1-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/plugin-user-settings@0.6.0-next.0
+ - @backstage/plugin-explore@0.3.43-next.0
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/plugin-airbrake@0.3.12-next.0
+ - @backstage/plugin-apache-airflow@0.2.5-next.0
+ - @backstage/plugin-api-docs@0.8.12-next.0
+ - @backstage/plugin-azure-devops@0.2.3-next.0
+ - @backstage/plugin-azure-sites@0.1.1-next.0
+ - @backstage/plugin-badges@0.2.36-next.0
+ - @backstage/plugin-catalog-import@0.9.2-next.0
+ - @backstage/plugin-circleci@0.3.12-next.0
+ - @backstage/plugin-cloudbuild@0.3.12-next.0
+ - @backstage/plugin-code-coverage@0.2.5-next.0
+ - @backstage/plugin-dynatrace@1.0.2-next.0
+ - @backstage/plugin-gcalendar@0.3.8-next.0
+ - @backstage/plugin-gcp-projects@0.3.31-next.0
+ - @backstage/plugin-github-actions@0.5.12-next.0
+ - @backstage/plugin-gocd@0.1.18-next.0
+ - @backstage/plugin-graphiql@0.2.44-next.0
+ - @backstage/plugin-home@0.4.28-next.0
+ - @backstage/plugin-jenkins@0.7.11-next.0
+ - @backstage/plugin-kafka@0.3.12-next.0
+ - @backstage/plugin-kubernetes@0.7.5-next.0
+ - @backstage/plugin-lighthouse@0.3.12-next.0
+ - @backstage/plugin-newrelic@0.3.30-next.0
+ - @backstage/plugin-org@0.6.1-next.0
+ - @backstage/plugin-playlist@0.1.3-next.0
+ - @backstage/plugin-rollbar@0.4.12-next.0
+ - @backstage/plugin-search@1.0.5-next.0
+ - @backstage/plugin-sentry@0.4.5-next.0
+ - @backstage/plugin-shortcuts@0.3.4-next.0
+ - @backstage/plugin-stack-overflow@0.1.8-next.0
+ - @backstage/plugin-tech-insights@0.3.4-next.0
+ - @backstage/plugin-tech-radar@0.5.19-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.0
+ - @backstage/plugin-techdocs@1.4.1-next.0
+ - @backstage/plugin-todo@0.2.14-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/app-defaults@1.0.9-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+ - @backstage/plugin-newrelic-dashboard@0.2.5-next.0
+ - @backstage/plugin-permission-react@0.4.8-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-search-react@1.2.2-next.0
+ - @internal/plugin-catalog-customized@0.0.5-next.0
+
+## example-backend@0.2.78-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.0
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/plugin-events-backend@0.2.0-next.0
+ - @backstage/plugin-search-backend-node@1.0.5-next.0
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-app-backend@0.3.39-next.0
+ - @backstage/plugin-auth-backend@0.17.2-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/plugin-azure-devops-backend@0.3.18-next.0
+ - @backstage/plugin-azure-sites-backend@0.1.1-next.0
+ - @backstage/plugin-code-coverage-backend@0.2.5-next.0
+ - @backstage/plugin-graphql-backend@0.1.29-next.0
+ - @backstage/plugin-jenkins-backend@0.1.29-next.0
+ - @backstage/plugin-permission-backend@0.5.14-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/plugin-permission-node@0.7.2-next.0
+ - @backstage/plugin-playlist-backend@0.2.2-next.0
+ - @backstage/plugin-proxy-backend@0.2.33-next.0
+ - @backstage/plugin-rollbar-backend@0.1.36-next.0
+ - @backstage/plugin-techdocs-backend@1.4.2-next.0
+ - @backstage/plugin-todo-backend@0.1.36-next.0
+ - @backstage/plugin-kubernetes-backend@0.8.1-next.0
+ - example-app@0.2.78-next.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.0
+ - @backstage/plugin-badges-backend@0.1.33-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/plugin-tech-insights-backend@0.5.5-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-kafka-backend@0.2.32-next.0
+ - @backstage/plugin-search-backend@1.1.2-next.0
+ - @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.0
+ - @backstage/plugin-search-backend-module-pg@0.4.3-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.0
+ - @backstage/plugin-tech-insights-node@0.3.7-next.0
+
+## example-backend-next@0.0.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.0
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/plugin-app-backend@0.3.39-next.0
+ - @backstage/backend-defaults@0.1.4-next.0
+
+## techdocs-cli-embedded-app@0.2.77-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs-react@1.0.7-next.0
+ - @backstage/cli@0.21.2-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/test-utils@1.2.3-next.0
+ - @backstage/plugin-techdocs@1.4.1-next.0
+ - @backstage/plugin-catalog@1.6.2-next.0
+ - @backstage/app-defaults@1.0.9-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+
+## @internal/plugin-catalog-customized@0.0.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/plugin-catalog@1.6.2-next.0
+
+## @internal/plugin-todo-list@1.0.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+
+## @internal/plugin-todo-list-backend@1.0.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## @internal/plugin-todo-list-common@1.0.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.7.2-next.0
diff --git a/microsite/data/plugins/azure-spring-apps.yml b/microsite/data/plugins/azure-spring-apps.yml
new file mode 100644
index 0000000000..cefb0e2824
--- /dev/null
+++ b/microsite/data/plugins/azure-spring-apps.yml
@@ -0,0 +1,10 @@
+---
+title: 'Azure Spring Apps'
+author: Enfuse
+authorUrl: https://enfuse.io/
+category: Discovery
+description: Easily view your Azure Spring Apps service resources
+documentation: https://github.com/enfuse/asae-backstage-plugin/blob/main/README.md
+iconUrl: img/azure-spring-apps.png
+npmPackageName: '@enfuse/plugin-azure-spring-apps'
+addedDate: '2022-11-21'
diff --git a/microsite/data/plugins/cloudsmith.yaml b/microsite/data/plugins/cloudsmith.yaml
new file mode 100644
index 0000000000..5fc417eec1
--- /dev/null
+++ b/microsite/data/plugins/cloudsmith.yaml
@@ -0,0 +1,13 @@
+---
+title: Cloudsmith
+author: Roadie
+authorUrl: https://roadie.io
+category: CI/CD
+description: Show Cloudsmith Repository stats on your backstage homepage.
+documentation: https://github.com/RoadieHQ/roadie-backstage-plugins/tree/main/plugins/frontend/backstage-plugin-cloudsmith
+iconUrl: https://cloudsmith.com/img/cloudsmith-mini-dark.svg
+npmPackageName: '@roadiehq/backstage-plugin-cloudsmith'
+tags:
+ - dashboards
+ - monitoring
+addedDate: '2022-11-18'
diff --git a/microsite/data/plugins/humanitec.yaml b/microsite/data/plugins/humanitec.yaml
index 5b3c459116..1b79270582 100644
--- a/microsite/data/plugins/humanitec.yaml
+++ b/microsite/data/plugins/humanitec.yaml
@@ -6,7 +6,7 @@ category: Deployment # A single category e.g. CI, Machine Learning, Services, Mo
description: |
Show workloads, environments and resources deployed by Humanitec Platform Orchestrator.
Plugin includes an Entity ComponentCard, Backend API route and scaffolder actions.
-documentation: https://github.com/thefrontside/backstage/tree/main/plugins/humanitec
+documentation: https://github.com/thefrontside/playhouse/tree/main/plugins/humanitec
iconUrl: img/humanitec-logo.png
npmPackageName: '@frontside/backstage-plugin-humanitec'
addedDate: '2022-06-22'
diff --git a/microsite/static/img/enfuse.png b/microsite/static/img/enfuse.png
new file mode 100644
index 0000000000..42124a4a24
Binary files /dev/null and b/microsite/static/img/enfuse.png differ
diff --git a/microsite/yarn.lock b/microsite/yarn.lock
index 0a943bbe83..f0e6bd698a 100644
--- a/microsite/yarn.lock
+++ b/microsite/yarn.lock
@@ -281,14 +281,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-validator-identifier@npm:^7.10.4, @babel/helper-validator-identifier@npm:^7.12.11":
- version: 7.12.11
- resolution: "@babel/helper-validator-identifier@npm:7.12.11"
- checksum: e604c6bf890704fc46c1ae13bf23afb242b810224ec3403bba67cdbf0d8dabfec4b82123d6dfb18135a0ee3f7f79218583c819363ebb5e04a0a49d8418db7fce
- languageName: node
- linkType: hard
-
-"@babel/helper-validator-identifier@npm:^7.18.6":
+"@babel/helper-validator-identifier@npm:^7.10.4, @babel/helper-validator-identifier@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-validator-identifier@npm:7.18.6"
checksum: e295254d616bbe26e48c196a198476ab4d42a73b90478c9842536cf910ead887f5af6b5c4df544d3052a25ccb3614866fa808dc1e3a5a4291acd444e243c0648
@@ -1241,18 +1234,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/types@npm:^7.10.4, @babel/types@npm:^7.10.5, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.10, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.12, @babel/types@npm:^7.12.5, @babel/types@npm:^7.12.6, @babel/types@npm:^7.12.7, @babel/types@npm:^7.4.4":
- version: 7.12.12
- resolution: "@babel/types@npm:7.12.12"
- dependencies:
- "@babel/helper-validator-identifier": ^7.12.11
- lodash: ^4.17.19
- to-fast-properties: ^2.0.0
- checksum: 1eefe9468573a32491030f2986f820eb4289ff0b93e437b97f665e73cc8dae0ec0bdd95f37995bb3b70b5ce2a9a45a302affbbad497150021cf874c5ef10e361
- languageName: node
- linkType: hard
-
-"@babel/types@npm:^7.8.3":
+"@babel/types@npm:^7.10.4, @babel/types@npm:^7.10.5, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.10, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.12, @babel/types@npm:^7.12.5, @babel/types@npm:^7.12.6, @babel/types@npm:^7.12.7, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
version: 7.18.10
resolution: "@babel/types@npm:7.18.10"
dependencies:
@@ -2917,7 +2899,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4.3.3":
+"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.3":
version: 4.3.4
resolution: "debug@npm:4.3.4"
dependencies:
@@ -2929,7 +2911,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4.3.1, debug@npm:^4.1.0":
+"debug@npm:4.3.1":
version: 4.3.1
resolution: "debug@npm:4.3.1"
dependencies:
@@ -4275,21 +4257,7 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:^7.0.0, glob@npm:^7.0.5, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.6":
- version: 7.2.0
- resolution: "glob@npm:7.2.0"
- dependencies:
- fs.realpath: ^1.0.0
- inflight: ^1.0.4
- inherits: 2
- minimatch: ^3.0.4
- once: ^1.3.0
- path-is-absolute: ^1.0.0
- checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134
- languageName: node
- linkType: hard
-
-"glob@npm:^7.1.4":
+"glob@npm:^7.0.0, glob@npm:^7.0.5, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6":
version: 7.2.3
resolution: "glob@npm:7.2.3"
dependencies:
@@ -4430,14 +4398,7 @@ __metadata:
languageName: node
linkType: hard
-"graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0":
- version: 4.2.4
- resolution: "graceful-fs@npm:4.2.4"
- checksum: 9d58c444eb4f391ce30b451aae8a8af2bd675d9f6f624719e97306f571ab89b2bd2b5f9025199bc63a2edfe2e53e7701554012f32a708148d53aa689163728cc
- languageName: node
- linkType: hard
-
-"graceful-fs@npm:^4.2.6":
+"graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6":
version: 4.2.10
resolution: "graceful-fs@npm:4.2.10"
checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da
@@ -5056,15 +5017,6 @@ __metadata:
languageName: node
linkType: hard
-"is-core-module@npm:^2.1.0":
- version: 2.2.0
- resolution: "is-core-module@npm:2.2.0"
- dependencies:
- has: ^1.0.3
- checksum: 61e2aff4a7db4f8f7d5a97b484808af17290f4197b34a797cd3d3d27b6b448951064f8d3d6ceae4394fa9b7e6cf08aacd2ba7a17ef6352e922fe803580fbde56
- languageName: node
- linkType: hard
-
"is-core-module@npm:^2.8.0":
version: 2.8.1
resolution: "is-core-module@npm:2.8.1"
@@ -6196,7 +6148,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:3.0.4, minimatch@npm:^3.0.4, minimatch@npm:~3.0.2":
+"minimatch@npm:3.0.4, minimatch@npm:~3.0.2":
version: 3.0.4
resolution: "minimatch@npm:3.0.4"
dependencies:
@@ -6205,7 +6157,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^3.1.1":
+"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1":
version: 3.1.2
resolution: "minimatch@npm:3.1.2"
dependencies:
@@ -6941,7 +6893,7 @@ __metadata:
languageName: node
linkType: hard
-"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7":
+"path-parse@npm:^1.0.7":
version: 1.0.7
resolution: "path-parse@npm:1.0.7"
checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a
@@ -7441,11 +7393,11 @@ __metadata:
linkType: hard
"prettier@npm:^2.6.2":
- version: 2.7.1
- resolution: "prettier@npm:2.7.1"
+ version: 2.8.0
+ resolution: "prettier@npm:2.8.0"
bin:
prettier: bin-prettier.js
- checksum: 55a4409182260866ab31284d929b3cb961e5fdb91fe0d2e099dac92eaecec890f36e524b4c19e6ceae839c99c6d7195817579cdffc8e2c80da0cb794463a748b
+ checksum: 72004ce0cc9bb097daf3e3833f62495768724392c1d5b178dd47372337616e9e50ecbb0804f236596223f7b5eb1bbe69cefc8957dca21112c5777e77ef73a564
languageName: node
linkType: hard
@@ -7967,7 +7919,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^1.1.6":
+"resolve@npm:^1.1.6, resolve@npm:^1.10.0":
version: 1.21.0
resolution: "resolve@npm:1.21.0"
dependencies:
@@ -7980,17 +7932,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^1.10.0":
- version: 1.19.0
- resolution: "resolve@npm:1.19.0"
- dependencies:
- is-core-module: ^2.1.0
- path-parse: ^1.0.6
- checksum: a05b356e47b85ad3613d9e2a39a824f3c27f4fcad9c9ff6c7cc71a2e314c5904a90ab37481ad0069d03cab9eaaac6eb68aca1bc3355fdb05f1045cd50e2aacea
- languageName: node
- linkType: hard
-
-"resolve@patch:resolve@^1.1.6#~builtin":
+"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin":
version: 1.21.0
resolution: "resolve@patch:resolve@npm%3A1.21.0#~builtin::version=1.21.0&hash=07638b"
dependencies:
@@ -8003,16 +7945,6 @@ __metadata:
languageName: node
linkType: hard
-"resolve@patch:resolve@^1.10.0#~builtin":
- version: 1.19.0
- resolution: "resolve@patch:resolve@npm%3A1.19.0#~builtin::version=1.19.0&hash=07638b"
- dependencies:
- is-core-module: ^2.1.0
- path-parse: ^1.0.6
- checksum: 2443b94d347e6946c87c85faf13071f605e609e0b54784829b0ed2b917d050bfc1cbaf4ecc6453f224cfa7d0c5dcd97cbb273454cd210bee68e4af15c1a5abc9
- languageName: node
- linkType: hard
-
"responselike@npm:1.0.2":
version: 1.0.2
resolution: "responselike@npm:1.0.2"
@@ -8313,14 +8245,7 @@ __metadata:
languageName: node
linkType: hard
-"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2":
- version: 3.0.3
- resolution: "signal-exit@npm:3.0.3"
- checksum: f0169d3f1263d06df32ca072b0bf33b34c6f8f0341a7a1621558a2444dfbe8f5fec76b35537fcc6f0bc4944bdb5336fe0bdcf41a5422c4e45a1dba3f45475e6c
- languageName: node
- linkType: hard
-
-"signal-exit@npm:^3.0.7":
+"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7":
version: 3.0.7
resolution: "signal-exit@npm:3.0.7"
checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318
diff --git a/package.json b/package.json
index 7b0fc5cddd..2d2d5f335b 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
"build:backend": "yarn workspace backend build",
"build:all": "backstage-cli repo build --all",
"build:api-reports": "yarn build:api-reports:only --tsc",
- "build:api-reports:only": "ts-node -T -P scripts/tsconfig.json scripts/api-extractor.ts",
+ "build:api-reports:only": "backstage-repo-tools api-reports",
"build:api-docs": "LANG=en_EN yarn build:api-reports --docs",
"tsc": "tsc",
"tsc:full": "backstage-cli repo clean && tsc --skipLibCheck false --incremental false",
@@ -33,7 +33,8 @@
"build-storybook": "yarn ./storybook run build-storybook",
"techdocs-cli": "node scripts/techdocs-cli.js",
"techdocs-cli:dev": "cross-env TECHDOCS_CLI_DEV_MODE=true node scripts/techdocs-cli.js",
- "prepare": "husky install"
+ "prepare": "husky install",
+ "postinstall": "husky install"
},
"workspaces": {
"packages": [
@@ -45,19 +46,16 @@
"@types/react": "^17",
"@types/react-dom": "^17"
},
- "version": "1.8.0",
+ "version": "1.9.0-next.0",
"dependencies": {
"@backstage/errors": "workspace:^",
- "@manypkg/get-packages": "^1.1.3",
- "@microsoft/api-documenter": "^7.17.11",
- "@microsoft/api-extractor": "^7.23.0",
- "@microsoft/api-extractor-model": "^7.17.2",
- "@microsoft/tsdoc": "^0.14.1"
+ "@manypkg/get-packages": "^1.1.3"
},
"devDependencies": {
"@backstage/cli": "workspace:*",
"@backstage/codemods": "workspace:*",
"@backstage/create-app": "workspace:*",
+ "@backstage/repo-tools": "workspace:*",
"@changesets/cli": "^2.14.0",
"@octokit/rest": "^19.0.3",
"@spotify/prettier-config": "^14.0.0",
@@ -70,6 +68,7 @@
"e2e-test": "workspace:*",
"eslint": "^8.6.0",
"eslint-plugin-notice": "^0.9.10",
+ "eslint-plugin-testing-library": "^5.9.1",
"fs-extra": "10.1.0",
"husky": "^8.0.0",
"lint-staged": "^13.0.0",
@@ -92,6 +91,12 @@
],
"*.md": [
"node ./scripts/check-docs-quality"
+ ],
+ "./yarn.lock": [
+ "node ./scripts/verify-lockfile-duplicates --fix"
+ ],
+ "*/yarn.lock": [
+ "node ./scripts/verify-lockfile-duplicates --fix"
]
},
"packageManager": "yarn@3.2.3"
diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md
index ebe8519740..ab34404847 100644
--- a/packages/app-defaults/CHANGELOG.md
+++ b/packages/app-defaults/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/app-defaults
+## 1.0.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-permission-react@0.4.8-next.0
+
## 1.0.8
### Patch Changes
diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json
index e89757d925..10cbea0824 100644
--- a/packages/app-defaults/package.json
+++ b/packages/app-defaults/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/app-defaults",
"description": "Provides the default wiring of a Backstage App",
- "version": "1.0.8",
+ "version": "1.0.9-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md
index 69860075a1..2d7cce1b6d 100644
--- a/packages/app/CHANGELOG.md
+++ b/packages/app/CHANGELOG.md
@@ -1,5 +1,68 @@
# example-app
+## 0.2.78-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-graph@0.2.24-next.0
+ - @backstage/plugin-pagerduty@0.5.5-next.0
+ - @backstage/plugin-techdocs-react@1.0.7-next.0
+ - @backstage/plugin-scaffolder@1.9.0-next.0
+ - @backstage/cli@0.21.2-next.0
+ - @backstage/plugin-cost-insights@0.12.1-next.0
+ - @backstage/core-components@0.12.1-next.0
+ - @backstage/plugin-user-settings@0.6.0-next.0
+ - @backstage/plugin-explore@0.3.43-next.0
+ - @backstage/core-app-api@1.2.1-next.0
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/integration-react@1.1.7-next.0
+ - @backstage/plugin-airbrake@0.3.12-next.0
+ - @backstage/plugin-apache-airflow@0.2.5-next.0
+ - @backstage/plugin-api-docs@0.8.12-next.0
+ - @backstage/plugin-azure-devops@0.2.3-next.0
+ - @backstage/plugin-azure-sites@0.1.1-next.0
+ - @backstage/plugin-badges@0.2.36-next.0
+ - @backstage/plugin-catalog-import@0.9.2-next.0
+ - @backstage/plugin-circleci@0.3.12-next.0
+ - @backstage/plugin-cloudbuild@0.3.12-next.0
+ - @backstage/plugin-code-coverage@0.2.5-next.0
+ - @backstage/plugin-dynatrace@1.0.2-next.0
+ - @backstage/plugin-gcalendar@0.3.8-next.0
+ - @backstage/plugin-gcp-projects@0.3.31-next.0
+ - @backstage/plugin-github-actions@0.5.12-next.0
+ - @backstage/plugin-gocd@0.1.18-next.0
+ - @backstage/plugin-graphiql@0.2.44-next.0
+ - @backstage/plugin-home@0.4.28-next.0
+ - @backstage/plugin-jenkins@0.7.11-next.0
+ - @backstage/plugin-kafka@0.3.12-next.0
+ - @backstage/plugin-kubernetes@0.7.5-next.0
+ - @backstage/plugin-lighthouse@0.3.12-next.0
+ - @backstage/plugin-newrelic@0.3.30-next.0
+ - @backstage/plugin-org@0.6.1-next.0
+ - @backstage/plugin-playlist@0.1.3-next.0
+ - @backstage/plugin-rollbar@0.4.12-next.0
+ - @backstage/plugin-search@1.0.5-next.0
+ - @backstage/plugin-sentry@0.4.5-next.0
+ - @backstage/plugin-shortcuts@0.3.4-next.0
+ - @backstage/plugin-stack-overflow@0.1.8-next.0
+ - @backstage/plugin-tech-insights@0.3.4-next.0
+ - @backstage/plugin-tech-radar@0.5.19-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.0
+ - @backstage/plugin-techdocs@1.4.1-next.0
+ - @backstage/plugin-todo@0.2.14-next.0
+ - @backstage/plugin-catalog-react@1.2.2-next.0
+ - @backstage/app-defaults@1.0.9-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.0
+ - @backstage/plugin-newrelic-dashboard@0.2.5-next.0
+ - @backstage/plugin-permission-react@0.4.8-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-search-react@1.2.2-next.0
+ - @internal/plugin-catalog-customized@0.0.5-next.0
+
## 0.2.77
### Patch Changes
diff --git a/packages/app/cypress/integration/app.js b/packages/app/cypress/integration/app.js
index 7b874907be..6371bcc4f8 100644
--- a/packages/app/cypress/integration/app.js
+++ b/packages/app/cypress/integration/app.js
@@ -25,14 +25,17 @@ describe('App', () => {
it('should display support info when clicking the button', () => {
cy.visit('/');
+ // eslint-disable-next-line testing-library/await-async-query
cy.findByTestId('support-button').click({ force: true });
cy.contains('#backstage');
});
it('should display error message when triggering it', () => {
cy.visit('/');
+ // eslint-disable-next-line testing-library/await-async-query
cy.findByTestId('error-button').click({ force: true });
cy.contains('Error: Oh no!');
+ // eslint-disable-next-line testing-library/await-async-query
cy.findByTestId('error-button-close').click({ force: true });
});
@@ -55,6 +58,7 @@ describe('App', () => {
cy.contains('Token')
.get('input[name=github-auth-tf]')
.type('password', { force: true });
+ // eslint-disable-next-line testing-library/await-async-query
cy.findByTestId('github-auth-button').click({ force: true });
cy.contains(`Welcome, ${name}!`);
cy.contains('Logout').click({ force: true });
diff --git a/packages/app/package.json b/packages/app/package.json
index 9978a0d515..171151f843 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "example-app",
- "version": "0.2.77",
+ "version": "0.2.78-next.0",
"private": true,
"backstage": {
"role": "frontend"
diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx
index 41e5b15db9..8cec54326a 100644
--- a/packages/app/src/components/Root/Root.tsx
+++ b/packages/app/src/components/Root/Root.tsx
@@ -47,12 +47,21 @@ import {
SidebarSpace,
Link,
useSidebarOpenState,
+ SidebarSubmenu,
+ SidebarSubmenuItem,
} from '@backstage/core-components';
import { MyGroupsSidebarItem } from '@backstage/plugin-org';
import GroupIcon from '@material-ui/icons/People';
import { SearchModal } from '../search/SearchModal';
import Score from '@material-ui/icons/Score';
+import ApiIcon from '@material-ui/icons/Extension';
+import ComponentIcon from '@material-ui/icons/Memory';
+import DomainIcon from '@material-ui/icons/Apartment';
+import ResourceIcon from '@material-ui/icons/Work';
+import SystemIcon from '@material-ui/icons/Category';
+import UserIcon from '@material-ui/icons/Person';
+
const useSidebarLogoStyles = makeStyles({
root: {
width: sidebarConfig.drawerWidthClosed,
@@ -93,7 +102,47 @@ export const Root = ({ children }: PropsWithChildren<{}>) => (
}>
{/* Global nav, not org-specific */}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
{
return (
- {!isMobile && } />}
+ {!isMobile && }
diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md
index 15e4a6942d..22f29c3fd2 100644
--- a/packages/backend-app-api/CHANGELOG.md
+++ b/packages/backend-app-api/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/backend-app-api
+## 0.2.4-next.0
+
+### Patch Changes
+
+- d6dbf1792b: Added `lifecycleFactory` implementation.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-permission-node@0.7.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/errors@1.1.4-next.0
+
## 0.2.3
### Patch Changes
diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md
index 4d9fbea4a5..5008b1efe1 100644
--- a/packages/backend-app-api/api-report.md
+++ b/packages/backend-app-api/api-report.md
@@ -4,6 +4,7 @@
```ts
import { BackendFeature } from '@backstage/backend-plugin-api';
+import { BackendLifecycle } from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import { ExtensionPoint } from '@backstage/backend-plugin-api';
import { HttpRouterService } from '@backstage/backend-plugin-api';
@@ -66,6 +67,11 @@ export type HttpRouterFactoryOptions = {
indexPlugin?: string;
};
+// @public
+export const lifecycleFactory: (
+ options?: undefined,
+) => ServiceFactory;
+
// @public (undocumented)
export const loggerFactory: (options?: undefined) => ServiceFactory;
diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json
index c25105fc6c..75517acad1 100644
--- a/packages/backend-app-api/package.json
+++ b/packages/backend-app-api/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-app-api",
"description": "Core API used by Backstage backend apps",
- "version": "0.2.3",
+ "version": "0.2.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-app-api/src/services/implementations/index.ts b/packages/backend-app-api/src/services/implementations/index.ts
index 608399bad9..2c26097f48 100644
--- a/packages/backend-app-api/src/services/implementations/index.ts
+++ b/packages/backend-app-api/src/services/implementations/index.ts
@@ -25,4 +25,5 @@ export { schedulerFactory } from './schedulerService';
export { tokenManagerFactory } from './tokenManagerService';
export { urlReaderFactory } from './urlReaderService';
export { httpRouterFactory } from './httpRouterService';
+export { lifecycleFactory } from './lifecycleService';
export type { HttpRouterFactoryOptions } from './httpRouterService';
diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.test.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.test.ts
new file mode 100644
index 0000000000..c0b69a3bef
--- /dev/null
+++ b/packages/backend-app-api/src/services/implementations/lifecycleService.test.ts
@@ -0,0 +1,47 @@
+/*
+ * 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 { getVoidLogger } from '@backstage/backend-common';
+import { BackendLifecycleImpl } from './lifecycleService';
+
+describe('lifecycleService', () => {
+ it('should execute registered shutdown hook', async () => {
+ const service = new BackendLifecycleImpl(getVoidLogger());
+ const hook = jest.fn();
+ service.addShutdownHook({
+ pluginId: 'test',
+ fn: async () => {
+ 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(getVoidLogger());
+ service.addShutdownHook({
+ pluginId: 'test',
+ fn: async () => {
+ throw new Error('oh no');
+ },
+ });
+ await expect(service.shutdown()).resolves.toBeUndefined();
+ });
+});
diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.ts
new file mode 100644
index 0000000000..7d41a7a276
--- /dev/null
+++ b/packages/backend-app-api/src/services/implementations/lifecycleService.ts
@@ -0,0 +1,96 @@
+/*
+ * 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 {
+ BackendLifecycle,
+ createServiceFactory,
+ lifecycleServiceRef,
+ loggerToWinstonLogger,
+ pluginMetadataServiceRef,
+ rootLoggerServiceRef,
+ BackendLifecycleShutdownHook,
+} from '@backstage/backend-plugin-api';
+import { Logger } from 'winston';
+
+const CALLBACKS = ['SIGTERM', 'SIGINT', 'beforeExit'];
+export class BackendLifecycleImpl {
+ constructor(private readonly logger: Logger) {
+ CALLBACKS.map(signal => process.on(signal, () => this.shutdown()));
+ }
+
+ #isCalled = false;
+ #shutdownTasks: Array =
+ [];
+
+ addShutdownHook(
+ options: BackendLifecycleShutdownHook & { pluginId: string },
+ ): void {
+ this.#shutdownTasks.push(options);
+ }
+
+ async shutdown(): Promise {
+ if (this.#isCalled) {
+ return;
+ }
+ this.#isCalled = true;
+
+ this.logger.info(`Running ${this.#shutdownTasks.length} shutdown tasks...`);
+ await Promise.all(
+ this.#shutdownTasks.map(hook =>
+ Promise.resolve()
+ .then(() => hook.fn())
+ .catch(e => {
+ this.logger.error(
+ `Shutdown hook registered by plugin '${hook.pluginId}' failed with: ${e}`,
+ );
+ })
+ .then(() =>
+ this.logger.info(
+ `Successfully ran shutdown hook registered by plugin ${hook.pluginId}`,
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class PluginScopedLifecycleImpl implements BackendLifecycle {
+ constructor(
+ private readonly lifecycle: BackendLifecycleImpl,
+ private readonly pluginId: string,
+ ) {}
+ addShutdownHook(options: BackendLifecycleShutdownHook): void {
+ this.lifecycle.addShutdownHook({ ...options, pluginId: this.pluginId });
+ }
+}
+
+/**
+ * Allows plugins to register shutdown hooks that are run when the process is about to exit.
+ * @public */
+export const lifecycleFactory = createServiceFactory({
+ service: lifecycleServiceRef,
+ deps: {
+ logger: rootLoggerServiceRef,
+ plugin: pluginMetadataServiceRef,
+ },
+ async factory({ logger }) {
+ const rootLifecycle = new BackendLifecycleImpl(
+ loggerToWinstonLogger(logger),
+ );
+ return async ({ plugin }) => {
+ return new PluginScopedLifecycleImpl(rootLifecycle, plugin.getId());
+ };
+ },
+});
diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md
index ca2fca26dc..66f505399d 100644
--- a/packages/backend-common/CHANGELOG.md
+++ b/packages/backend-common/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/backend-common
+## 0.16.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- dfc8edf9c5: Internal refactor to avoid usage of deprecated symbols.
+- Updated dependencies
+ - @backstage/config-loader@1.1.7-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
## 0.16.0
### Minor Changes
diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md
index e8dbd8d150..a063815056 100644
--- a/packages/backend-common/api-report.md
+++ b/packages/backend-common/api-report.md
@@ -28,6 +28,7 @@ import { GitLabIntegration } from '@backstage/integration';
import { isChildPath } from '@backstage/cli-common';
import { JsonValue } from '@backstage/types';
import { Knex } from 'knex';
+import { KubeConfig } from '@kubernetes/client-node';
import { LoadConfigOptionsRemote } from '@backstage/config-loader';
import { Logger } from 'winston';
import { MergeResult } from 'isomorphic-git';
@@ -37,6 +38,7 @@ import { ReadCommitResult } from 'isomorphic-git';
import { RequestHandler } from 'express';
import { Router } from 'express';
import { Server } from 'http';
+import { V1PodTemplateSpec } from '@kubernetes/client-node';
import * as winston from 'winston';
import { Writable } from 'stream';
@@ -474,6 +476,29 @@ export { isChildPath };
// @public
export function isDatabaseConflictError(e: unknown): boolean;
+// @public
+export class KubernetesContainerRunner implements ContainerRunner {
+ constructor(options: KubernetesContainerRunnerOptions);
+ // (undocumented)
+ runContainer(options: RunContainerOptions): Promise;
+}
+
+// @public
+export type KubernetesContainerRunnerMountBase = {
+ volumeName: string;
+ basePath: string;
+};
+
+// @public
+export type KubernetesContainerRunnerOptions = {
+ kubeConfig: KubeConfig;
+ name: string;
+ namespace?: string;
+ mountBase?: KubernetesContainerRunnerMountBase;
+ podTemplate?: V1PodTemplateSpec;
+ timeoutMs?: number;
+};
+
// @public
export function loadBackendConfig(options: {
logger: Logger;
diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json
index c703405719..9fadc0aeb7 100644
--- a/packages/backend-common/package.json
+++ b/packages/backend-common/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-common",
"description": "Common functionality library for Backstage backends",
- "version": "0.16.0",
+ "version": "0.16.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
@@ -117,7 +117,7 @@
"better-sqlite3": "^7.5.0",
"http-errors": "^2.0.0",
"mock-fs": "^5.1.0",
- "msw": "^0.48.0",
+ "msw": "^0.49.0",
"mysql2": "^2.2.5",
"recursive-readdir": "^2.2.2",
"supertest": "^6.1.3"
diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts
index 012f8978ae..518e2efadc 100644
--- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts
+++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts
@@ -574,4 +574,86 @@ describe('GitlabUrlReader', () => {
).rejects.toThrow(NotModifiedError);
});
});
+
+ describe('getGitlabFetchUrl', () => {
+ beforeEach(() => {
+ worker.use(
+ rest.get(
+ '*/api/v4/projects/group%2Fsubgroup%2Fproject',
+ (_, res, ctx) => res(ctx.status(200), ctx.json({ id: 12345 })),
+ ),
+ );
+ });
+ it('should fall back to getGitLabFileFetchUrl for blob urls', async () => {
+ await expect(
+ (gitlabProcessor as any).getGitlabFetchUrl(
+ 'https://gitlab.com/group/subgroup/project/-/blob/branch/my/path/to/file.yaml',
+ ),
+ ).resolves.toEqual(
+ 'https://gitlab.com/api/v4/projects/12345/repository/files/my%2Fpath%2Fto%2Ffile.yaml/raw?ref=branch',
+ );
+ });
+ it('should work for job artifact urls', async () => {
+ await expect(
+ (gitlabProcessor as any).getGitlabFetchUrl(
+ 'https://gitlab.com/group/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
+ ),
+ ).resolves.toEqual(
+ 'https://gitlab.com/api/v4/projects/12345/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
+ );
+ });
+ it('should fail on unfamiliar or non-Gitlab urls', async () => {
+ await expect(
+ (gitlabProcessor as any).getGitlabFetchUrl(
+ 'https://gitlab.com/some/random/endpoint',
+ ),
+ ).rejects.toThrow('Please provide full path to yaml file from GitLab');
+ });
+ });
+
+ describe('getGitlabArtifactFetchUrl', () => {
+ beforeEach(() => {
+ worker.use(
+ rest.get(
+ '*/api/v4/projects/group%2Fsubgroup%2Fproject',
+ (_, res, ctx) => res(ctx.status(200), ctx.json({ id: 12345 })),
+ ),
+ );
+ worker.use(
+ rest.get(
+ '*/api/v4/projects/groupA%2Fsubgroup%2Fproject',
+ (_, res, ctx) => res(ctx.status(404)),
+ ),
+ );
+ });
+ it('should reject urls that are not for the job artifacts API', async () => {
+ await expect(
+ (gitlabProcessor as any).getGitlabArtifactFetchUrl(
+ new URL('https://gitlab.com/some/url'),
+ ),
+ ).rejects.toThrow('Unable to process url as an GitLab artifact');
+ });
+ it('should work for job artifact urls', async () => {
+ await expect(
+ (gitlabProcessor as any).getGitlabArtifactFetchUrl(
+ new URL(
+ 'https://gitlab.com/group/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
+ ),
+ ),
+ ).resolves.toEqual(
+ new URL(
+ 'https://gitlab.com/api/v4/projects/12345/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
+ ),
+ );
+ });
+ it('errors in mapping the project ID should be captured', async () => {
+ await expect(
+ (gitlabProcessor as any).getGitlabArtifactFetchUrl(
+ new URL(
+ 'https://gitlab.com/groupA/subgroup/project/-/jobs/artifacts/branch/raw/my/path/to/file.yaml?job=myJob',
+ ),
+ ),
+ ).rejects.toThrow(/^Unable to translate GitLab artifact URL:/);
+ });
+ });
});
diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts
index eaa15a7208..522e81cd2f 100644
--- a/packages/backend-common/src/reading/GitlabUrlReader.ts
+++ b/packages/backend-common/src/reading/GitlabUrlReader.ts
@@ -73,7 +73,7 @@ export class GitlabUrlReader implements UrlReader {
options?: ReadUrlOptions,
): Promise {
const { etag, signal } = options ?? {};
- const builtUrl = await getGitLabFileFetchUrl(url, this.integration.config);
+ const builtUrl = await this.getGitlabFetchUrl(url);
let response: Response;
try {
@@ -256,4 +256,66 @@ export class GitlabUrlReader implements UrlReader {
const { host, token } = this.integration.config;
return `gitlab{host=${host},authed=${Boolean(token)}}`;
}
+
+ private async getGitlabFetchUrl(target: string): Promise {
+ // If the target is for a job artifact then go down that path
+ const targetUrl = new URL(target);
+ if (targetUrl.pathname.includes('/-/jobs/artifacts/')) {
+ return this.getGitlabArtifactFetchUrl(targetUrl).then(value =>
+ value.toString(),
+ );
+ }
+ // Default to the old behavior of assuming the url is for a file
+ return getGitLabFileFetchUrl(target, this.integration.config);
+ }
+
+ // convert urls of the form:
+ // https://example.com///-/jobs/artifacts/[/raw/?job=
+ // to urls of the form:
+ // https://example.com/api/v4/projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=
+ private async getGitlabArtifactFetchUrl(target: URL): Promise {
+ if (!target.pathname.includes('/-/jobs/artifacts/')) {
+ throw new Error('Unable to process url as an GitLab artifact');
+ }
+ try {
+ const [namespaceAndProject, ref] =
+ target.pathname.split('/-/jobs/artifacts/');
+ const projectPath = new URL(target);
+ projectPath.pathname = namespaceAndProject;
+ const projectId = await this.resolveProjectToId(projectPath);
+ const relativePath = getGitLabIntegrationRelativePath(
+ this.integration.config,
+ );
+ const newUrl = new URL(target);
+ newUrl.pathname = `${relativePath}/api/v4/projects/${projectId}/jobs/artifacts/${ref}`;
+ return newUrl;
+ } catch (e) {
+ throw new Error(
+ `Unable to translate GitLab artifact URL: ${target}, ${e}`,
+ );
+ }
+ }
+
+ private async resolveProjectToId(pathToProject: URL): Promise {
+ let project = pathToProject.pathname;
+ // Check relative path exist and remove it if so
+ const relativePath = getGitLabIntegrationRelativePath(
+ this.integration.config,
+ );
+ if (relativePath) {
+ project = project.replace(relativePath, '');
+ }
+ // Trim an initial / if it exists
+ project = project.replace(/^\//, '');
+ const result = await fetch(
+ `${
+ pathToProject.origin
+ }${relativePath}/api/v4/projects/${encodeURIComponent(project)}`,
+ );
+ const data = await result.json();
+ if (!result.ok) {
+ throw new Error(`Gitlab error: ${data.error}, ${data.error_description}`);
+ }
+ return Number(data.id);
+ }
}
diff --git a/packages/backend-common/src/scm/git.ts b/packages/backend-common/src/scm/git.ts
index 0c9252cb64..ea28ffb9b2 100644
--- a/packages/backend-common/src/scm/git.ts
+++ b/packages/backend-common/src/scm/git.ts
@@ -179,7 +179,7 @@ export class Git {
});
} catch (ex) {
this.config.logger?.error(
- `Failed to fetch repo {dir=${dir},origin=${origin}}`,
+ `Failed to fetch repo {dir=${dir},remote=${remote}}`,
);
if (ex.data) {
throw new Error(`${ex.message} {data=${JSON.stringify(ex.data)}}`);
diff --git a/packages/backend-common/src/util/KubernetesContainerRunner.ts b/packages/backend-common/src/util/KubernetesContainerRunner.ts
index af00351fd1..f3590a0bdc 100644
--- a/packages/backend-common/src/util/KubernetesContainerRunner.ts
+++ b/packages/backend-common/src/util/KubernetesContainerRunner.ts
@@ -39,7 +39,7 @@ import { Request } from 'request';
*
* @public
*/
-export type MountBaseOptions = {
+export type KubernetesContainerRunnerMountBase = {
volumeName: string;
basePath: string;
};
@@ -51,7 +51,7 @@ export type MountBaseOptions = {
* and their names will be prefixed with the provided 'name'.
*
* 'podTemplate' defines a Pod template for the Jobs. It has to include
- * a volume definition named as the {@link MountBaseOptions} 'volumeName'.
+ * a volume definition named as the {@link KubernetesContainerRunnerMountBase} 'volumeName'.
*
* @public
*/
@@ -59,7 +59,7 @@ export type KubernetesContainerRunnerOptions = {
kubeConfig: KubeConfig;
name: string;
namespace?: string;
- mountBase?: MountBaseOptions;
+ mountBase?: KubernetesContainerRunnerMountBase;
podTemplate?: V1PodTemplateSpec;
timeoutMs?: number;
};
@@ -77,12 +77,12 @@ export class KubernetesContainerRunner implements ContainerRunner {
private readonly log: Log;
private readonly name: string;
private readonly namespace: string;
- private readonly mountBase?: MountBaseOptions;
+ private readonly mountBase?: KubernetesContainerRunnerMountBase;
private readonly podTemplate?: V1PodTemplateSpec;
private readonly timeoutMs: number;
private readonly containerName = 'executor';
- getNamespace(kubeConfig: KubeConfig, namespace?: string): string {
+ private getNamespace(kubeConfig: KubeConfig, namespace?: string): string {
let _namespace = namespace;
if (!_namespace) {
_namespace = kubeConfig.getContextObject(
@@ -95,10 +95,10 @@ export class KubernetesContainerRunner implements ContainerRunner {
return _namespace;
}
- validateMountBase(
- mountBase: MountBaseOptions,
+ private validateMountBase(
+ mountBase: KubernetesContainerRunnerMountBase,
podTemplate?: V1PodTemplateSpec,
- ): MountBaseOptions {
+ ): KubernetesContainerRunnerMountBase {
if (
!podTemplate?.spec?.volumes?.filter(v => v.name === mountBase.volumeName)
.length
@@ -213,7 +213,7 @@ export class KubernetesContainerRunner implements ContainerRunner {
await this.runJob(jobSpec, taskId, logStream);
}
- handleError(err: any, errorCallback: (reason: any) => void) {
+ private handleError(err: any, errorCallback: (reason: any) => void) {
if (err.code !== 'ECONNRESET' && err.message !== 'aborted') {
errorCallback(
handleKubernetesError(
@@ -224,7 +224,7 @@ export class KubernetesContainerRunner implements ContainerRunner {
}
}
- watchPod(
+ private watchPod(
taskId: string,
callback: (pod: V1Pod) => void,
errorCallback: (reason: any) => void,
@@ -247,7 +247,7 @@ export class KubernetesContainerRunner implements ContainerRunner {
);
}
- tailLogs(
+ private tailLogs(
taskId: string,
logStream: Writable,
): { promise: Promise; close: () => Promise } {
@@ -295,7 +295,7 @@ export class KubernetesContainerRunner implements ContainerRunner {
return { promise: Promise.race([watchPromise, logPromise]), close };
}
- waitPod(taskId: string): {
+ private waitPod(taskId: string): {
promise: Promise;
close: () => Promise;
} {
@@ -322,7 +322,7 @@ export class KubernetesContainerRunner implements ContainerRunner {
return { promise, close };
}
- async createJob(jobSpec: V1Job): Promise {
+ private async createJob(jobSpec: V1Job): Promise {
return this.batchV1Api
.createNamespacedJob(this.namespace, jobSpec)
.catch(err => {
@@ -333,7 +333,7 @@ export class KubernetesContainerRunner implements ContainerRunner {
});
}
- async runJob(
+ private async runJob(
jobSpec: V1Job,
taskId: string,
logStream: Writable,
diff --git a/packages/backend-common/src/util/index.ts b/packages/backend-common/src/util/index.ts
index ba8074a11e..3e7b762519 100644
--- a/packages/backend-common/src/util/index.ts
+++ b/packages/backend-common/src/util/index.ts
@@ -16,3 +16,8 @@
export type { ContainerRunner, RunContainerOptions } from './ContainerRunner';
export { DockerContainerRunner } from './DockerContainerRunner';
+export type {
+ KubernetesContainerRunnerOptions,
+ KubernetesContainerRunnerMountBase,
+} from './KubernetesContainerRunner';
+export { KubernetesContainerRunner } from './KubernetesContainerRunner';
diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md
index 1ba1c02e1c..270e946880 100644
--- a/packages/backend-defaults/CHANGELOG.md
+++ b/packages/backend-defaults/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/backend-defaults
+## 0.1.4-next.0
+
+### Patch Changes
+
+- d6dbf1792b: Added `lifecycleFactory` to default service factories.
+- Updated dependencies
+ - @backstage/backend-app-api@0.2.4-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+
## 0.1.3
### Patch Changes
diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json
index 8561f3c5d3..74d0b726e5 100644
--- a/packages/backend-defaults/package.json
+++ b/packages/backend-defaults/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-defaults",
"description": "Backend defaults used by Backstage backend apps",
- "version": "0.1.3",
+ "version": "0.1.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts
index b95bd6f35b..9fde31e3bd 100644
--- a/packages/backend-defaults/src/CreateBackend.ts
+++ b/packages/backend-defaults/src/CreateBackend.ts
@@ -22,6 +22,7 @@ import {
databaseFactory,
discoveryFactory,
httpRouterFactory,
+ lifecycleFactory,
loggerFactory,
permissionsFactory,
rootLoggerFactory,
@@ -43,6 +44,7 @@ export const defaultServiceFactories = [
tokenManagerFactory,
urlReaderFactory,
httpRouterFactory,
+ lifecycleFactory,
];
/**
diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md
index e117ef1120..e8957375cd 100644
--- a/packages/backend-next/CHANGELOG.md
+++ b/packages/backend-next/CHANGELOG.md
@@ -1,5 +1,15 @@
# example-backend-next
+## 0.0.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.0
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/plugin-app-backend@0.3.39-next.0
+ - @backstage/backend-defaults@0.1.4-next.0
+
## 0.0.5
### Patch Changes
diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json
index 3219adb21f..b8b26d6e61 100644
--- a/packages/backend-next/package.json
+++ b/packages/backend-next/package.json
@@ -1,6 +1,6 @@
{
"name": "example-backend-next",
- "version": "0.0.5",
+ "version": "0.0.6-next.0",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md
index 2a2cc35141..b33b7ec9a4 100644
--- a/packages/backend-plugin-api/CHANGELOG.md
+++ b/packages/backend-plugin-api/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/backend-plugin-api
+## 0.1.5-next.0
+
+### Patch Changes
+
+- d6dbf1792b: Added initial support for registering shutdown hooks via `lifecycleServiceRef`.
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/config@1.0.5-next.0
+
## 0.1.4
### Patch Changes
diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md
index 70ab168053..b73a85c32e 100644
--- a/packages/backend-plugin-api/api-report.md
+++ b/packages/backend-plugin-api/api-report.md
@@ -24,6 +24,16 @@ export interface BackendFeature {
register(reg: BackendRegistrationPoints): void;
}
+// @public (undocumented)
+export interface BackendLifecycle {
+ addShutdownHook(options: BackendLifecycleShutdownHook): void;
+}
+
+// @public (undocumented)
+export type BackendLifecycleShutdownHook = {
+ fn: () => void | Promise;
+};
+
// @public (undocumented)
export interface BackendModuleConfig {
// (undocumented)
@@ -158,6 +168,9 @@ export interface HttpRouterService {
// @public (undocumented)
export const httpRouterServiceRef: ServiceRef;
+// @public (undocumented)
+export const lifecycleServiceRef: ServiceRef;
+
// @public (undocumented)
export interface Logger {
// (undocumented)
diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json
index 0eee8d8d2f..2e9c0aa6ec 100644
--- a/packages/backend-plugin-api/package.json
+++ b/packages/backend-plugin-api/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-plugin-api",
"description": "Core API used by Backstage backend plugins",
- "version": "0.1.4",
+ "version": "0.1.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts
index e5f032ef60..cf997a344d 100644
--- a/packages/backend-plugin-api/src/services/definitions/index.ts
+++ b/packages/backend-plugin-api/src/services/definitions/index.ts
@@ -28,4 +28,9 @@ export { permissionsServiceRef } from './permissionsServiceRef';
export { schedulerServiceRef } from './schedulerServiceRef';
export { rootLoggerServiceRef } from './rootLoggerServiceRef';
export { pluginMetadataServiceRef } from './pluginMetadataServiceRef';
+export { lifecycleServiceRef } from './lifecycleServiceRef';
+export type {
+ BackendLifecycle,
+ BackendLifecycleShutdownHook,
+} from './lifecycleServiceRef';
export type { PluginMetadata } from './pluginMetadataServiceRef';
diff --git a/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts
new file mode 100644
index 0000000000..15610e2643
--- /dev/null
+++ b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts
@@ -0,0 +1,42 @@
+/*
+ * 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 { createServiceRef } from '../system/types';
+
+/**
+ * @public
+ **/
+export type BackendLifecycleShutdownHook = {
+ fn: () => void | Promise;
+};
+
+/**
+ * @public
+ **/
+export interface BackendLifecycle {
+ /**
+ * Register a function to be called when the backend is shutting down.
+ */
+ addShutdownHook(options: BackendLifecycleShutdownHook): void;
+}
+
+/**
+ * @public
+ */
+export const lifecycleServiceRef = createServiceRef({
+ id: 'core.lifecycle',
+ scope: 'plugin',
+});
diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md
index 365bcb28ad..3276c0d453 100644
--- a/packages/backend-tasks/CHANGELOG.md
+++ b/packages/backend-tasks/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/backend-tasks
+## 0.3.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
## 0.3.7
### Patch Changes
diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json
index b28355a7d6..1e209a4d10 100644
--- a/packages/backend-tasks/package.json
+++ b/packages/backend-tasks/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-tasks",
"description": "Common distributed task management library for Backstage backends",
- "version": "0.3.7",
+ "version": "0.3.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md
index 5422015003..77de87b476 100644
--- a/packages/backend-test-utils/CHANGELOG.md
+++ b/packages/backend-test-utils/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/backend-test-utils
+## 0.1.31-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/cli@0.21.2-next.0
+ - @backstage/backend-app-api@0.2.4-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/config@1.0.5-next.0
+
## 0.1.30
### Patch Changes
diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json
index 87da7162d8..6dde2fe3d4 100644
--- a/packages/backend-test-utils/package.json
+++ b/packages/backend-test-utils/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-test-utils",
"description": "Test helpers library for Backstage backends",
- "version": "0.1.30",
+ "version": "0.1.31-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
@@ -41,7 +41,7 @@
"@backstage/config": "workspace:^",
"better-sqlite3": "^7.5.0",
"knex": "^2.0.0",
- "msw": "^0.48.0",
+ "msw": "^0.49.0",
"mysql2": "^2.2.5",
"pg": "^8.3.0",
"testcontainers": "^8.1.2",
diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md
index 4b72814000..d30c720c73 100644
--- a/packages/backend/CHANGELOG.md
+++ b/packages/backend/CHANGELOG.md
@@ -1,5 +1,51 @@
# example-backend
+## 0.2.78-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.0
+ - @backstage/catalog-client@1.2.0-next.0
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/plugin-events-backend@0.2.0-next.0
+ - @backstage/plugin-search-backend-node@1.0.5-next.0
+ - @backstage/plugin-events-node@0.2.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/plugin-app-backend@0.3.39-next.0
+ - @backstage/plugin-auth-backend@0.17.2-next.0
+ - @backstage/plugin-auth-node@0.2.8-next.0
+ - @backstage/plugin-azure-devops-backend@0.3.18-next.0
+ - @backstage/plugin-azure-sites-backend@0.1.1-next.0
+ - @backstage/plugin-code-coverage-backend@0.2.5-next.0
+ - @backstage/plugin-graphql-backend@0.1.29-next.0
+ - @backstage/plugin-jenkins-backend@0.1.29-next.0
+ - @backstage/plugin-permission-backend@0.5.14-next.0
+ - @backstage/plugin-permission-common@0.7.2-next.0
+ - @backstage/plugin-permission-node@0.7.2-next.0
+ - @backstage/plugin-playlist-backend@0.2.2-next.0
+ - @backstage/plugin-proxy-backend@0.2.33-next.0
+ - @backstage/plugin-rollbar-backend@0.1.36-next.0
+ - @backstage/plugin-techdocs-backend@1.4.2-next.0
+ - @backstage/plugin-todo-backend@0.1.36-next.0
+ - @backstage/plugin-kubernetes-backend@0.8.1-next.0
+ - example-app@0.2.78-next.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.0
+ - @backstage/plugin-badges-backend@0.1.33-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/plugin-tech-insights-backend@0.5.5-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/plugin-kafka-backend@0.2.32-next.0
+ - @backstage/plugin-search-backend@1.1.2-next.0
+ - @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.0
+ - @backstage/plugin-search-backend-module-pg@0.4.3-next.0
+ - @backstage/plugin-search-common@1.1.2-next.0
+ - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.0
+ - @backstage/plugin-tech-insights-node@0.3.7-next.0
+
## 0.2.77
### Patch Changes
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 8162293228..e7d2d5d7b7 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "example-backend",
- "version": "0.2.77",
+ "version": "0.2.78-next.0",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/backend/src/plugins/events.ts b/packages/backend/src/plugins/events.ts
index 2ada92a5b6..7427d34217 100644
--- a/packages/backend/src/plugins/events.ts
+++ b/packages/backend/src/plugins/events.ts
@@ -27,14 +27,12 @@ export default async function createPlugin(
subscribers: EventSubscriber[],
): Promise {
const eventsRouter = Router();
- const httpRouter = Router();
- eventsRouter.use('/http', httpRouter);
const http = HttpPostIngressEventPublisher.fromConfig({
config: env.config,
logger: env.logger,
- router: httpRouter,
});
+ http.bind(eventsRouter);
await new EventsBackend(env.logger)
.addPublishers(http)
diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md
index ff2f42799f..71f05de695 100644
--- a/packages/catalog-client/CHANGELOG.md
+++ b/packages/catalog-client/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/catalog-client
+## 1.2.0-next.0
+
+### Minor Changes
+
+- 00d90b520a: **BREAKING PRODUCERS**: Added a new `getEntitiesByRefs` endpoint to `CatalogApi`, for efficient batch fetching of entities by ref.
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/errors@1.1.4-next.0
+
## 1.1.2
### Patch Changes
diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md
index 85fc389af7..2f76be79e2 100644
--- a/packages/catalog-client/api-report.md
+++ b/packages/catalog-client/api-report.md
@@ -34,6 +34,10 @@ export interface CatalogApi {
request?: GetEntitiesRequest,
options?: CatalogRequestOptions,
): Promise;
+ getEntitiesByRefs(
+ request: GetEntitiesByRefsRequest,
+ options?: CatalogRequestOptions,
+ ): Promise;
getEntityAncestors(
request: GetEntityAncestorsRequest,
options?: CatalogRequestOptions,
@@ -91,6 +95,10 @@ export class CatalogClient implements CatalogApi {
request?: GetEntitiesRequest,
options?: CatalogRequestOptions,
): Promise;
+ getEntitiesByRefs(
+ request: GetEntitiesByRefsRequest,
+ options?: CatalogRequestOptions,
+ ): Promise;
getEntityAncestors(
request: GetEntityAncestorsRequest,
options?: CatalogRequestOptions,
@@ -145,14 +153,30 @@ export interface CatalogRequestOptions {
export const ENTITY_STATUS_CATALOG_PROCESSING_TYPE =
'backstage.io/catalog-processing';
+// @public
+export type EntityFieldsQuery = string[];
+
+// @public
+export type EntityFilterQuery =
+ | Record[]
+ | Record;
+
+// @public
+export interface GetEntitiesByRefsRequest {
+ entityRefs: string[];
+ fields?: EntityFieldsQuery | undefined;
+}
+
+// @public
+export interface GetEntitiesByRefsResponse {
+ items: Array;
+}
+
// @public
export interface GetEntitiesRequest {
after?: string;
- fields?: string[] | undefined;
- filter?:
- | Record[]
- | Record
- | undefined;
+ fields?: EntityFieldsQuery;
+ filter?: EntityFilterQuery;
limit?: number;
offset?: number;
}
diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json
index 04e35ca670..6093d6a891 100644
--- a/packages/catalog-client/package.json
+++ b/packages/catalog-client/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/catalog-client",
"description": "An isomorphic client for the catalog backend",
- "version": "1.1.2",
+ "version": "1.2.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -38,7 +38,7 @@
},
"devDependencies": {
"@backstage/cli": "workspace:^",
- "msw": "^0.48.0"
+ "msw": "^0.49.0"
},
"files": [
"dist"
diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts
index 5a344f49a3..1206d557c1 100644
--- a/packages/catalog-client/src/CatalogClient.test.ts
+++ b/packages/catalog-client/src/CatalogClient.test.ts
@@ -195,6 +195,35 @@ describe('CatalogClient', () => {
});
});
+ describe('getEntitiesByRefs', () => {
+ it('encodes and decodes the query correctly', async () => {
+ const entity = {
+ apiVersion: '1',
+ kind: 'Component',
+ metadata: {
+ name: 'Test2',
+ namespace: 'test1',
+ },
+ };
+ server.use(
+ rest.post(`${mockBaseUrl}/entities/by-refs`, async (req, res, ctx) => {
+ expect(req.url.searchParams.get('fields')).toBe('a,b');
+ await expect(req.json()).resolves.toEqual({
+ entityRefs: ['k:n/a', 'k:n/b'],
+ });
+ return res(ctx.json({ items: [entity, null] }));
+ }),
+ );
+
+ const response = await client.getEntitiesByRefs(
+ { entityRefs: ['k:n/a', 'k:n/b'], fields: ['a', 'b'] },
+ { token },
+ );
+
+ expect(response).toEqual({ items: [entity, null] });
+ });
+ });
+
describe('getEntityByRef', () => {
const existingEntity: Entity = {
apiVersion: 'v1',
diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts
index d67392d80d..d15f382ddd 100644
--- a/packages/catalog-client/src/CatalogClient.ts
+++ b/packages/catalog-client/src/CatalogClient.ts
@@ -37,6 +37,8 @@ import {
GetEntityFacetsRequest,
GetEntityFacetsResponse,
ValidateEntityResponse,
+ GetEntitiesByRefsRequest,
+ GetEntitiesByRefsResponse,
} from './types/api';
import { DiscoveryApi } from './types/discovery';
import { FetchApi } from './types/fetch';
@@ -169,6 +171,40 @@ export class CatalogClient implements CatalogApi {
return { items: entities.sort(refCompare) };
}
+ /**
+ * {@inheritdoc CatalogApi.getEntitiesByRefs}
+ */
+ async getEntitiesByRefs(
+ request: GetEntitiesByRefsRequest,
+ options?: CatalogRequestOptions,
+ ): Promise {
+ const params: string[] = [];
+ if (request.fields?.length) {
+ params.push(`fields=${request.fields.map(encodeURIComponent).join(',')}`);
+ }
+
+ const baseUrl = await this.discoveryApi.getBaseUrl('catalog');
+ const query = params.length ? `?${params.join('&')}` : '';
+ const url = `${baseUrl}/entities/by-refs${query}`;
+
+ const response = await this.fetchApi.fetch(url, {
+ headers: {
+ 'Content-Type': 'application/json',
+ ...(options?.token && { Authorization: `Bearer ${options?.token}` }),
+ },
+ method: 'POST',
+ body: JSON.stringify({ entityRefs: request.entityRefs }),
+ });
+
+ if (!response.ok) {
+ throw await ResponseError.fromResponse(response);
+ }
+
+ const { items } = await response.json();
+
+ return { items };
+ }
+
/**
* {@inheritdoc CatalogApi.getEntityByRef}
*/
diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts
index d3d02022f3..771adaaeee 100644
--- a/packages/catalog-client/src/types/api.ts
+++ b/packages/catalog-client/src/types/api.ts
@@ -29,6 +29,75 @@ export const CATALOG_FILTER_EXISTS = Symbol.for(
'CATALOG_FILTER_EXISTS_0e15b590c0b343a2bae3e787e84c2111',
);
+/**
+ * A key-value based filter expression for entities.
+ *
+ * @remarks
+ *
+ * Each key of a record is a dot-separated path into the entity structure, e.g.
+ * `metadata.name`.
+ *
+ * The values are literal values to match against. As a value you can also pass
+ * in the symbol `CATALOG_FILTER_EXISTS` (exported from this package), which
+ * means that you assert on the existence of that key, no matter what its value
+ * is.
+ *
+ * All matching of keys and values is case insensitive.
+ *
+ * If multiple filter sets are given as an array, then there is effectively an
+ * OR between each filter set.
+ *
+ * Within one filter set, there is effectively an AND between the various keys.
+ *
+ * Within one key, if there are more than one value, then there is effectively
+ * an OR between them.
+ *
+ * Example: For an input of
+ *
+ * ```
+ * [
+ * { kind: ['API', 'Component'] },
+ * { 'metadata.name': 'a', 'metadata.namespace': 'b' }
+ * ]
+ * ```
+ *
+ * This effectively means
+ *
+ * ```
+ * (kind = EITHER 'API' OR 'Component')
+ * OR
+ * (metadata.name = 'a' AND metadata.namespace = 'b' )
+ * ```
+ *
+ * @public
+ */
+export type EntityFilterQuery =
+ | Record[]
+ | Record;
+
+/**
+ * A set of dot-separated paths into an entity's keys, showing what parts of an
+ * entity to include in a response, and excluding all others.
+ *
+ * @remarks
+ *
+ * Example: For an input of `['kind', 'metadata.annotations']`, then response
+ * objects will be shaped like
+ *
+ * ```
+ * {
+ * "kind": "Component",
+ * "metadata": {
+ * "annotations": {
+ * "foo": "bar"
+ * }
+ * }
+ * }
+ * ```
+ * @public
+ */
+export type EntityFieldsQuery = string[];
+
/**
* The request type for {@link CatalogClient.getEntities}.
*
@@ -36,67 +105,14 @@ export const CATALOG_FILTER_EXISTS = Symbol.for(
*/
export interface GetEntitiesRequest {
/**
- * If given, return only entities that match the given patterns.
- *
- * @remarks
- *
- * If multiple filter sets are given as an array, then there is effectively an
- * OR between each filter set.
- *
- * Within one filter set, there is effectively an AND between the various
- * keys.
- *
- * Within one key, if there are more than one value, then there is effectively
- * an OR between them.
- *
- * Example: For an input of
- *
- * ```
- * [
- * { kind: ['API', 'Component'] },
- * { 'metadata.name': 'a', 'metadata.namespace': 'b' }
- * ]
- * ```
- *
- * This effectively means
- *
- * ```
- * (kind = EITHER 'API' OR 'Component')
- * OR
- * (metadata.name = 'a' AND metadata.namespace = 'b' )
- * ```
- *
- * Each key is a dot separated path in each object.
- *
- * As a value you can also pass in the symbol `CATALOG_FILTER_EXISTS`
- * (exported from this package), which means that you assert on the existence
- * of that key, no matter what its value is.
+ * If given, return only entities that match the given filter.
*/
- filter?:
- | Record[]
- | Record
- | undefined;
+ filter?: EntityFilterQuery;
/**
- * If given, return only the parts of each entity that match those dot
- * separated paths in each object.
- *
- * @remarks
- *
- * Example: For an input of `['kind', 'metadata.annotations']`, then response
- * objects will be shaped like
- *
- * ```
- * {
- * "kind": "Component",
- * "metadata": {
- * "annotations": {
- * "foo": "bar"
- * }
- * }
- * }
- * ```
+ * If given, return only the parts of each entity that match the field
+ * declarations.
*/
- fields?: string[] | undefined;
+ fields?: EntityFieldsQuery;
/**
* If given, skips over the first N items in the result set.
*/
@@ -121,6 +137,45 @@ export interface GetEntitiesResponse {
items: Entity[];
}
+/**
+ * The request type for {@link CatalogClient.getEntitiesByRefs}.
+ *
+ * @public
+ */
+export interface GetEntitiesByRefsRequest {
+ /**
+ * The list of entity refs to fetch.
+ *
+ * @remarks
+ *
+ * The returned list of entities will be in the same order as the refs, and
+ * null will be returned in those positions that were not found.
+ */
+ entityRefs: string[];
+ /**
+ * If given, return only the parts of each entity that match the field
+ * declarations.
+ */
+ fields?: EntityFieldsQuery | undefined;
+}
+
+/**
+ * The response type for {@link CatalogClient.getEntitiesByRefs}.
+ *
+ * @public
+ */
+export interface GetEntitiesByRefsResponse {
+ /**
+ * The returned list of entities.
+ *
+ * @remarks
+ *
+ * The list will be in the same order as the refs given in the request, and
+ * null will be returned in those positions that were not found.
+ */
+ items: Array;
+}
+
/**
* The request type for {@link CatalogClient.getEntityAncestors}.
*
@@ -296,6 +351,23 @@ export interface CatalogApi {
options?: CatalogRequestOptions,
): Promise;
+ /**
+ * Gets a batch of entities, by their entity refs.
+ *
+ * @remarks
+ *
+ * The output list of entities is of the same size and in the same order as
+ * the requested list of entity refs. Entries that are not found are returned
+ * as null.
+ *
+ * @param request - Request parameters
+ * @param options - Additional options
+ */
+ getEntitiesByRefs(
+ request: GetEntitiesByRefsRequest,
+ options?: CatalogRequestOptions,
+ ): Promise;
+
/**
* Gets entity ancestor information, i.e. the hierarchy of parent entities
* whose processing resulted in a given entity appearing in the catalog.
diff --git a/packages/catalog-client/src/types/index.ts b/packages/catalog-client/src/types/index.ts
index 86f7b18ab0..5ac058e349 100644
--- a/packages/catalog-client/src/types/index.ts
+++ b/packages/catalog-client/src/types/index.ts
@@ -20,13 +20,17 @@ export type {
AddLocationResponse,
CatalogApi,
CatalogRequestOptions,
+ EntityFieldsQuery,
+ EntityFilterQuery,
+ GetEntitiesByRefsRequest,
+ GetEntitiesByRefsResponse,
GetEntitiesRequest,
GetEntitiesResponse,
GetEntityAncestorsRequest,
GetEntityAncestorsResponse,
- Location,
GetEntityFacetsRequest,
GetEntityFacetsResponse,
+ Location,
ValidateEntityResponse,
} from './api';
export { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from './status';
diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md
index c9f5b8f098..0383ec3194 100644
--- a/packages/catalog-model/CHANGELOG.md
+++ b/packages/catalog-model/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/catalog-model
+## 1.1.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
## 1.1.3
### Patch Changes
diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json
index 5eaed7c679..4127936c26 100644
--- a/packages/catalog-model/package.json
+++ b/packages/catalog-model/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/catalog-model",
"description": "Types and validators that help describe the model of a Backstage Catalog",
- "version": "1.1.3",
+ "version": "1.1.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md
index 035e8b3d2d..8902ec60b6 100644
--- a/packages/cli/CHANGELOG.md
+++ b/packages/cli/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/cli
+## 0.21.2-next.0
+
+### Patch Changes
+
+- 91d050c140: changed tests created by create-plugin to follow eslint-rules best practices particularly testing-library/prefer-screen-queries and testing-library/render-result-naming-convention
+- 459a3457e1: Bump `msw` version in default plugin/app templates
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/config-loader@1.1.7-next.0
+ - @backstage/release-manifests@0.0.8-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
## 0.21.0
### Minor Changes
diff --git a/packages/cli/cli-report.md b/packages/cli/cli-report.md
index aef56380d2..d82f8da60e 100644
--- a/packages/cli/cli-report.md
+++ b/packages/cli/cli-report.md
@@ -345,11 +345,13 @@ Options:
-i, --runInBand
--runTestsByPath
--runner
+ --seed
--selectProjects
--setupFiles
--setupFilesAfterEnv
--shard
--showConfig
+ --showSeed
--silent
--skipFilter
--snapshotSerializers
@@ -524,11 +526,13 @@ Options:
-i, --runInBand
--runTestsByPath
--runner
+ --seed
--selectProjects
--setupFiles
--setupFilesAfterEnv
--shard
--showConfig
+ --showSeed
--silent
--skipFilter
--snapshotSerializers
diff --git a/packages/cli/package.json b/packages/cli/package.json
index e7a113fb7f..1bba3b41a9 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli",
"description": "CLI for developing Backstage plugins and apps",
- "version": "0.21.0",
+ "version": "0.21.2-next.0",
"publishConfig": {
"access": "public"
},
@@ -155,7 +155,7 @@
"@types/yarnpkg__lockfile": "^1.1.4",
"del": "^6.0.0",
"mock-fs": "^5.1.0",
- "msw": "^0.48.0",
+ "msw": "^0.49.0",
"nodemon": "^2.0.2",
"ts-node": "^10.0.0",
"type-fest": "^2.0.0"
diff --git a/packages/cli/templates/default-backend-plugin/package.json.hbs b/packages/cli/templates/default-backend-plugin/package.json.hbs
index df381159f0..3a9091e87f 100644
--- a/packages/cli/templates/default-backend-plugin/package.json.hbs
+++ b/packages/cli/templates/default-backend-plugin/package.json.hbs
@@ -41,7 +41,7 @@
"@backstage/cli": "{{versionQuery '@backstage/cli'}}",
"@types/supertest": "{{versionQuery '@types/supertest' '2.0.12'}}",
"supertest": "{{versionQuery 'supertest' '6.2.4'}}",
- "msw": "{{versionQuery 'msw' '0.47.0'}}"
+ "msw": "{{versionQuery 'msw' '0.49.0'}}"
},
"files": [
"dist"
diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs
index c60ba63f2b..d319b16449 100644
--- a/packages/cli/templates/default-plugin/package.json.hbs
+++ b/packages/cli/templates/default-plugin/package.json.hbs
@@ -48,7 +48,7 @@
"@testing-library/react": "{{versionQuery '@testing-library/react' '12.1.3'}}",
"@testing-library/user-event": "{{versionQuery '@testing-library/user-event' '14.0.0'}}",
"@types/node": "{{versionQuery '@types/node' '16.11.26'}}",
- "msw": "{{versionQuery 'msw' '0.47.0'}}",
+ "msw": "{{versionQuery 'msw' '0.49.0'}}",
"cross-fetch": "{{versionQuery 'cross-fetch' '3.1.5'}}"
},
"files": [
diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md
index 84fa76e097..e079cb345b 100644
--- a/packages/config-loader/CHANGELOG.md
+++ b/packages/config-loader/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/config-loader
+## 1.1.7-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
## 1.1.6
### Patch Changes
diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json
index 7c9306cb64..5a128cd0b6 100644
--- a/packages/config-loader/package.json
+++ b/packages/config-loader/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/config-loader",
"description": "Config loading functionality used by Backstage backend, and CLI",
- "version": "1.1.6",
+ "version": "1.1.7-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js",
@@ -45,7 +45,7 @@
"json-schema-merge-allof": "^0.8.1",
"json-schema-traverse": "^1.0.0",
"node-fetch": "^2.6.7",
- "typescript-json-schema": "^0.54.0",
+ "typescript-json-schema": "^0.55.0",
"yaml": "^2.0.0",
"yup": "^0.32.9"
},
@@ -56,7 +56,7 @@
"@types/node": "^16.11.26",
"@types/yup": "^0.29.13",
"mock-fs": "^5.1.0",
- "msw": "^0.48.0"
+ "msw": "^0.49.0"
},
"files": [
"dist"
diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md
index 5523d7efc6..cc4d1571ee 100644
--- a/packages/config/CHANGELOG.md
+++ b/packages/config/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/config
+## 1.0.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.0
+
## 1.0.4
### Patch Changes
diff --git a/packages/config/package.json b/packages/config/package.json
index bf322e15af..274e7f016e 100644
--- a/packages/config/package.json
+++ b/packages/config/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/config",
"description": "Config API used by Backstage core, backend, and CLI",
- "version": "1.0.4",
+ "version": "1.0.5-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js",
diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md
index 6e5d88ffae..63bb4511a1 100644
--- a/packages/core-app-api/CHANGELOG.md
+++ b/packages/core-app-api/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/core-app-api
+## 1.2.1-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/version-bridge@1.0.2
+
## 1.2.0
### Minor Changes
diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json
index b5972bf308..1c15f7d6f5 100644
--- a/packages/core-app-api/package.json
+++ b/packages/core-app-api/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-app-api",
"description": "Core app API used by Backstage apps",
- "version": "1.2.0",
+ "version": "1.2.1-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
@@ -57,7 +57,7 @@
"@types/node": "^16.11.26",
"@types/zen-observable": "^0.8.0",
"cross-fetch": "^3.1.5",
- "msw": "^0.48.0",
+ "msw": "^0.49.0",
"react-router-beta": "npm:react-router@6.0.0-beta.0",
"react-router-dom-beta": "npm:react-router-dom@6.0.0-beta.0",
"react-router-dom-stable": "npm:react-router-dom@^6.3.0",
diff --git a/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.test.ts b/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.test.ts
index 6fa46db7c9..5993543c33 100644
--- a/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.test.ts
+++ b/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.test.ts
@@ -89,6 +89,6 @@ describe('AppIdentityProxy', () => {
});
await proxy.signOut();
- expect(location.href).toBe('/foo');
+ expect(window.location.href).toBe('/foo');
});
});
diff --git a/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.ts b/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.ts
index 2df351bc18..4a51444879 100644
--- a/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.ts
+++ b/packages/core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy.ts
@@ -124,6 +124,6 @@ export class AppIdentityProxy implements IdentityApi {
async signOut(): Promise {
await this.waitForTarget.then(target => target.signOut());
- location.href = this.signOutTargetUrl;
+ window.location.href = this.signOutTargetUrl;
}
}
diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts
index a467957063..988c9f17b1 100644
--- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts
+++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts
@@ -154,7 +154,7 @@ export class DefaultAuthConnector
const scope = this.joinScopesFunc(scopes);
const popupUrl = await this.buildUrl('/start', {
scope,
- origin: location.origin,
+ origin: window.location.origin,
});
const payload = await showLoginPopup({
diff --git a/packages/core-app-api/src/routing/FeatureFlagged.test.tsx b/packages/core-app-api/src/routing/FeatureFlagged.test.tsx
index d1b45c39d1..8ee74c0a23 100644
--- a/packages/core-app-api/src/routing/FeatureFlagged.test.tsx
+++ b/packages/core-app-api/src/routing/FeatureFlagged.test.tsx
@@ -13,9 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
import React from 'react';
import { FeatureFlagged } from './FeatureFlagged';
-import { render } from '@testing-library/react';
+import { render, screen } from '@testing-library/react';
import { LocalStorageFeatureFlags } from '../apis';
import { TestApiProvider } from '@backstage/test-utils';
import { featureFlagsApiRef } from '@backstage/core-plugin-api';
@@ -34,7 +35,7 @@ describe('FeatureFlagged', () => {
.spyOn(mockFeatureFlagsApi, 'isActive')
.mockImplementation(() => true);
- const { queryByText } = render(
+ render(
]
@@ -44,14 +45,14 @@ describe('FeatureFlagged', () => {
,
);
- expect(await queryByText('BACKSTAGE!')).toBeInTheDocument();
+ expect(screen.getByText('BACKSTAGE!')).toBeInTheDocument();
});
it('should not render contents when the feature flag is disabled', async () => {
jest
.spyOn(mockFeatureFlagsApi, 'isActive')
.mockImplementation(() => false);
- const { queryByText } = render(
+ render(
@@ -61,7 +62,7 @@ describe('FeatureFlagged', () => {
,
);
- expect(await queryByText('BACKSTAGE!')).not.toBeInTheDocument();
+ expect(screen.queryByText('BACKSTAGE!')).not.toBeInTheDocument();
});
});
describe('without', () => {
@@ -70,7 +71,7 @@ describe('FeatureFlagged', () => {
.spyOn(mockFeatureFlagsApi, 'isActive')
.mockImplementation(() => true);
- const { queryByText } = render(
+ render(
@@ -80,14 +81,14 @@ describe('FeatureFlagged', () => {
,
);
- expect(await queryByText('BACKSTAGE!')).not.toBeInTheDocument();
+ expect(screen.queryByText('BACKSTAGE!')).not.toBeInTheDocument();
});
it('should render contents when the feature flag is disabled', async () => {
jest
.spyOn(mockFeatureFlagsApi, 'isActive')
.mockImplementation(() => false);
- const { queryByText } = render(
+ render(
@@ -97,7 +98,7 @@ describe('FeatureFlagged', () => {
,
);
- expect(await queryByText('BACKSTAGE!')).toBeInTheDocument();
+ expect(screen.getByText('BACKSTAGE!')).toBeInTheDocument();
});
});
});
diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md
index dc0df7cd2b..051dc9a67d 100644
--- a/packages/core-components/CHANGELOG.md
+++ b/packages/core-components/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/core-components
+## 0.12.1-next.0
+
+### Patch Changes
+
+- ea4a5be8f3: Create a variable for minimum height and add a prop named 'fit' for determining if the graph height should grow or be contained.
+- 64a579a998: Add items prop to SupportButton. This prop can be used to override the items that would otherwise be grabbed from the config.
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- 19356df560: Updated dependency `zen-observable` to `^0.9.0`.
+- 17a8e32f39: Updated dependency `rc-progress` to `3.4.1`.
+- dfc8edf9c5: Internal refactor to avoid usage of deprecated symbols.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+ - @backstage/theme@0.2.16
+ - @backstage/version-bridge@1.0.2
+
## 0.12.0
### Minor Changes
diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md
index fc3ab4e5fc..248b9e227c 100644
--- a/packages/core-components/api-report.md
+++ b/packages/core-components/api-report.md
@@ -250,6 +250,7 @@ export interface DependencyGraphProps
edgeRanks?: number;
edges: DependencyEdge[];
edgeWeight?: number;
+ fit?: 'grow' | 'contain';
labelOffset?: number;
// Warning: (ae-unresolved-link) The @link reference could not be resolved: This type of declaration is not supported yet by the resolver
labelPosition?: LabelPosition;
diff --git a/packages/core-components/package.json b/packages/core-components/package.json
index 4a7fec9ef1..11aebfbc0f 100644
--- a/packages/core-components/package.json
+++ b/packages/core-components/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-components",
"description": "Core components used by Backstage plugins and apps",
- "version": "0.12.0",
+ "version": "0.12.1-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
@@ -56,7 +56,7 @@
"pluralize": "^8.0.0",
"prop-types": "^15.7.2",
"qs": "^6.9.4",
- "rc-progress": "3.4.0",
+ "rc-progress": "3.4.1",
"react-helmet": "6.1.0",
"react-hook-form": "^7.12.2",
"react-markdown": "^8.0.0",
@@ -99,7 +99,7 @@
"@types/react-window": "^1.8.5",
"@types/zen-observable": "^0.8.0",
"cross-fetch": "^3.1.5",
- "msw": "^0.48.0"
+ "msw": "^0.49.0"
},
"files": [
"dist"
diff --git a/packages/core-components/src/components/AlertDisplay/AlertDisplay.test.tsx b/packages/core-components/src/components/AlertDisplay/AlertDisplay.test.tsx
index 477057f31b..c366082b46 100644
--- a/packages/core-components/src/components/AlertDisplay/AlertDisplay.test.tsx
+++ b/packages/core-components/src/components/AlertDisplay/AlertDisplay.test.tsx
@@ -15,6 +15,7 @@
*/
import React from 'react';
+import { screen } from '@testing-library/react';
import { AlertDisplay } from './AlertDisplay';
import { alertApiRef } from '@backstage/core-plugin-api';
import { AlertApiForwarder } from '@backstage/core-app-api';
@@ -34,7 +35,7 @@ describe('', () => {
});
it('renders with message', async () => {
- const { queryByText } = await renderInTestApp(
+ await renderInTestApp(
', () => {
,
);
- expect(queryByText(TEST_MESSAGE)).toBeInTheDocument();
+ expect(screen.getByText(TEST_MESSAGE)).toBeInTheDocument();
});
describe('with multiple messages', () => {
@@ -73,23 +74,23 @@ describe('', () => {
] as const;
it('renders first message', async () => {
- const { queryByText } = await renderInTestApp(
+ await renderInTestApp(
,
);
- expect(queryByText('message one')).toBeInTheDocument();
+ expect(screen.getByText('message one')).toBeInTheDocument();
});
it('renders a count of remaining messages', async () => {
- const { queryByText } = await renderInTestApp(
+ await renderInTestApp(
,
);
- expect(queryByText('(2 older messages)')).toBeInTheDocument();
+ expect(screen.getByText('(2 older messages)')).toBeInTheDocument();
});
});
});
diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx
index 5159f67d9e..94d152ce1e 100644
--- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx
+++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx
@@ -170,6 +170,14 @@ export interface DependencyGraphProps
* Default: 'curveMonotoneX'
*/
curve?: 'curveStepBefore' | 'curveMonotoneX';
+ /**
+ * Controls if the graph should be contained or grow
+ *
+ * @remarks
+ *
+ * Default: 'grow'
+ */
+ fit?: 'grow' | 'contain';
}
const WORKSPACE_ID = 'workspace';
@@ -203,6 +211,7 @@ export function DependencyGraph(
defs,
zoom = 'enabled',
curve = 'curveMonotoneX',
+ fit = 'grow',
...svgProps
} = props;
const theme: BackstageTheme = useTheme();
@@ -223,6 +232,9 @@ export function DependencyGraph(
const maxWidth = Math.max(graphWidth, containerWidth);
const maxHeight = Math.max(graphHeight, containerHeight);
+ const minHeight = Math.min(graphHeight, containerHeight);
+
+ const scalableHeight = fit === 'grow' ? maxHeight : minHeight;
const containerRef = React.useMemo(
() =>
@@ -394,7 +406,7 @@ export function DependencyGraph(
ref={containerRef}
{...svgProps}
width="100%"
- height={maxHeight}
+ height={scalableHeight}
viewBox={`0 0 ${maxWidth} ${maxHeight}`}
>
diff --git a/packages/core-components/src/components/FeatureDiscovery/FeatureCalloutCircular.test.tsx b/packages/core-components/src/components/FeatureDiscovery/FeatureCalloutCircular.test.tsx
index 35ea30ffa6..f72e33ac4b 100644
--- a/packages/core-components/src/components/FeatureDiscovery/FeatureCalloutCircular.test.tsx
+++ b/packages/core-components/src/components/FeatureDiscovery/FeatureCalloutCircular.test.tsx
@@ -70,8 +70,8 @@ describe('', () => {
description="description"
/>,
);
- const dot = await getByTestId('dot');
- const text = await getByTestId('text');
+ const dot = getByTestId('dot');
+ const text = getByTestId('text');
expect(dot).toBeInTheDocument();
expect(text).toBeInTheDocument();
@@ -96,8 +96,8 @@ describe('', () => {
description="description"
/>,
);
- const dot = await getByTestId('dot');
- const text = await getByTestId('text');
+ const dot = getByTestId('dot');
+ const text = getByTestId('text');
act(() => {
Element.prototype.getBoundingClientRect = jest.fn(
@@ -128,8 +128,8 @@ describe('', () => {
description="description"
/>,
);
- const dot = await getByTestId('dot');
- const text = await getByTestId('text');
+ const dot = getByTestId('dot');
+ const text = getByTestId('text');
act(() => {
Element.prototype.getBoundingClientRect = jest.fn(
diff --git a/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx b/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx
index 8c5dc4d530..4ab49596fe 100644
--- a/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx
+++ b/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx
@@ -155,7 +155,7 @@ function useScrollDistance(
return [scrollLeft, scrollRight];
}
-// Used to animate scrolling. Returns a single setScrollTarger function, when called with e.g. 200,
+// Used to animate scrolling. Returns a single setScrollTarget function, when called with e.g. 200,
// the element pointer to by the ref will be scrolled 200px forwards over time.
function useSmoothScroll(
ref: React.MutableRefObject,
@@ -169,7 +169,7 @@ function useSmoothScroll(
return;
}
- const startTime = performance.now();
+ const startTime = window.performance.now();
const id = requestAnimationFrame(frameTime => {
if (!ref.current) {
return;
diff --git a/packages/core-components/src/components/LogViewer/RealLogViewer.test.tsx b/packages/core-components/src/components/LogViewer/RealLogViewer.test.tsx
index b56279a53f..dd707778e1 100644
--- a/packages/core-components/src/components/LogViewer/RealLogViewer.test.tsx
+++ b/packages/core-components/src/components/LogViewer/RealLogViewer.test.tsx
@@ -60,11 +60,11 @@ describe('RealLogViewer', () => {
await userEvent.keyboard('{shift>}{enter}{/shift}');
expect(rendered.getByText('3/3')).toBeInTheDocument();
- expect(rendered.queryByText('Some Log Line')).toBeInTheDocument();
+ expect(rendered.getByText('Some Log Line')).toBeInTheDocument();
await userEvent.keyboard('{meta>}{enter}{/meta}');
expect(rendered.queryByText('Some Log Line')).not.toBeInTheDocument();
await userEvent.keyboard('{meta>}{enter}{/meta}');
- expect(rendered.queryByText('Some Log Line')).toBeInTheDocument();
+ expect(rendered.getByText('Some Log Line')).toBeInTheDocument();
// Tab down to line #2 and click
await userEvent.tab();
diff --git a/packages/core-components/src/components/Select/Select.test.tsx b/packages/core-components/src/components/Select/Select.test.tsx
index 41e787a5b4..df29983222 100644
--- a/packages/core-components/src/components/Select/Select.test.tsx
+++ b/packages/core-components/src/components/Select/Select.test.tsx
@@ -41,7 +41,7 @@ describe('', () => {
const { getByText, getByTestId } = render();
expect(getByText('Default')).toBeInTheDocument();
- const input = await getByTestId('select');
+ const input = getByTestId('select');
expect(input.textContent).toBe('All results');
// Simulate click on input
diff --git a/packages/core-components/src/components/SupportButton/SupportButton.test.tsx b/packages/core-components/src/components/SupportButton/SupportButton.test.tsx
index 341ed145a6..6b0e239aa5 100644
--- a/packages/core-components/src/components/SupportButton/SupportButton.test.tsx
+++ b/packages/core-components/src/components/SupportButton/SupportButton.test.tsx
@@ -14,32 +14,40 @@
* limitations under the License.
*/
-import React from 'react';
+import { configApiRef } from '@backstage/core-plugin-api';
import {
- render,
- act,
- RenderResult,
- waitFor,
- fireEvent,
- screen,
-} from '@testing-library/react';
-import { wrapInTestApp, renderInTestApp } from '@backstage/test-utils';
+ MockConfigApi,
+ renderInTestApp,
+ TestApiProvider,
+} from '@backstage/test-utils';
+import { act, fireEvent, screen } from '@testing-library/react';
+import React from 'react';
import { SupportButton } from './SupportButton';
+const configApi = new MockConfigApi({
+ app: {
+ support: {
+ url: 'https://github.com',
+ items: [
+ {
+ title: 'Github',
+ icon: 'github',
+ links: [{ title: 'Github Issues', url: '/issues' }],
+ },
+ ],
+ },
+ },
+});
+
const SUPPORT_BUTTON_ID = 'support-button';
const POPOVER_ID = 'support-button-popover';
describe('', () => {
it('renders without exploding', async () => {
- let renderResult: RenderResult;
-
- await act(async () => {
- renderResult = render(wrapInTestApp());
- });
-
- await waitFor(() =>
- expect(renderResult.getByTestId(SUPPORT_BUTTON_ID)).toBeInTheDocument(),
- );
+ await renderInTestApp();
+ await expect(
+ screen.findByTestId(SUPPORT_BUTTON_ID),
+ ).resolves.toBeInTheDocument();
});
it('supports passing a title', async () => {
@@ -48,26 +56,54 @@ describe('', () => {
expect(screen.getByText('Custom title')).toBeInTheDocument();
});
+ it('supports passing link items through props', async () => {
+ await renderInTestApp(
+ ,
+ );
+
+ const supportButton = screen.getByTestId(SUPPORT_BUTTON_ID);
+ expect(supportButton).toBeInTheDocument();
+
+ fireEvent.click(supportButton);
+
+ const documentationItem = screen.getByText('Documentation');
+ expect(documentationItem).toBeInTheDocument();
+ });
+
+ it('shows items from support config', async () => {
+ await renderInTestApp(
+
+
+ ,
+ );
+
+ const supportButton = screen.getByTestId(SUPPORT_BUTTON_ID);
+ expect(supportButton).toBeInTheDocument();
+
+ fireEvent.click(supportButton);
+
+ const defaultGithubSupportConfig = screen.getByText('Github Issues');
+ expect(defaultGithubSupportConfig).toBeInTheDocument();
+ });
+
it('shows popover on click', async () => {
- let renderResult: RenderResult;
+ await renderInTestApp();
+ await expect(
+ screen.findByTestId(SUPPORT_BUTTON_ID),
+ ).resolves.toBeInTheDocument();
await act(async () => {
- renderResult = render(wrapInTestApp());
+ fireEvent.click(screen.getByTestId(SUPPORT_BUTTON_ID));
});
- let button: HTMLElement;
-
- await waitFor(() => {
- expect(renderResult.getByTestId(SUPPORT_BUTTON_ID)).toBeInTheDocument();
- button = renderResult.getByTestId(SUPPORT_BUTTON_ID);
- });
-
- await act(async () => {
- fireEvent.click(button);
- });
-
- await waitFor(() => {
- expect(renderResult.getByTestId(POPOVER_ID)).toBeInTheDocument();
- });
+ await expect(screen.findByTestId(POPOVER_ID)).resolves.toBeInTheDocument();
});
});
diff --git a/packages/core-components/src/components/SupportButton/SupportButton.tsx b/packages/core-components/src/components/SupportButton/SupportButton.tsx
index 4e0bb866f5..7bb9aab9b5 100644
--- a/packages/core-components/src/components/SupportButton/SupportButton.tsx
+++ b/packages/core-components/src/components/SupportButton/SupportButton.tsx
@@ -35,6 +35,7 @@ import { Link } from '../Link';
type SupportButtonProps = {
title?: string;
+ items?: SupportItem[];
children?: React.ReactNode;
};
@@ -82,8 +83,8 @@ const SupportListItem = ({ item }: { item: SupportItem }) => {
};
export function SupportButton(props: SupportButtonProps) {
- const { title, children } = props;
- const { items } = useSupportConfig();
+ const { title, items, children } = props;
+ const { items: configItems } = useSupportConfig();
const [popoverOpen, setPopoverOpen] = useState(false);
const [anchorEl, setAnchorEl] = useState(null);
@@ -150,10 +151,9 @@ export function SupportButton(props: SupportButtonProps) {
{child}
))}
- {items &&
- items.map((item, i) => (
-
- ))}
+ {(items ?? configItems).map((item, i) => (
+
+ ))}