diff --git a/.changeset/beige-chairs-repair.md b/.changeset/beige-chairs-repair.md
new file mode 100644
index 0000000000..20cad7be6e
--- /dev/null
+++ b/.changeset/beige-chairs-repair.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
+---
+
+Refresh (potentially) updated catalog files on `repo:push` more efficiently.
diff --git a/.changeset/blue-chefs-know.md b/.changeset/blue-chefs-know.md
new file mode 100644
index 0000000000..fa06f52caa
--- /dev/null
+++ b/.changeset/blue-chefs-know.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-azure-devops-backend': patch
+---
+
+Updated installation documentation
diff --git a/.changeset/clean-seals-whisper.md b/.changeset/clean-seals-whisper.md
new file mode 100644
index 0000000000..8891d75f8f
--- /dev/null
+++ b/.changeset/clean-seals-whisper.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-react': minor
+---
+
+The `value` of a search analytics event is now set as the total number of search results (when available)
diff --git a/.changeset/create-app-1669720399.md b/.changeset/create-app-1669720399.md
new file mode 100644
index 0000000000..b50d431d4b
--- /dev/null
+++ b/.changeset/create-app-1669720399.md
@@ -0,0 +1,5 @@
+---
+'@backstage/create-app': patch
+---
+
+Bumped create-app version.
diff --git a/.changeset/dry-melons-listen.md b/.changeset/dry-melons-listen.md
new file mode 100644
index 0000000000..07342fb88e
--- /dev/null
+++ b/.changeset/dry-melons-listen.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-search-backend': minor
+'@backstage/plugin-search-backend-module-elasticsearch': minor
+'@backstage/plugin-search-backend-node': minor
+---
+
+numberOfResults is now provided alongside the query result
diff --git a/.changeset/dry-radios-live.md b/.changeset/dry-radios-live.md
new file mode 100644
index 0000000000..057d3d0050
--- /dev/null
+++ b/.changeset/dry-radios-live.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-explore': patch
+---
+
+Update search links to only have header as linkable text
diff --git a/.changeset/eight-tables-hunt.md b/.changeset/eight-tables-hunt.md
new file mode 100644
index 0000000000..bd1be0047f
--- /dev/null
+++ b/.changeset/eight-tables-hunt.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Optimize `Stitcher` process to be more memory efficient
diff --git a/.changeset/empty-taxis-run.md b/.changeset/empty-taxis-run.md
new file mode 100644
index 0000000000..d0360b4521
--- /dev/null
+++ b/.changeset/empty-taxis-run.md
@@ -0,0 +1,22 @@
+---
+'@backstage/backend-app-api': patch
+'@backstage/plugin-app-backend': patch
+'@backstage/plugin-catalog-backend': patch
+'@backstage/plugin-catalog-backend-module-aws': 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-gerrit': patch
+'@backstage/plugin-catalog-backend-module-github': patch
+'@backstage/plugin-catalog-backend-module-gitlab': patch
+'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
+'@backstage/plugin-catalog-backend-module-msgraph': patch
+'@backstage/plugin-catalog-node': patch
+'@backstage/plugin-events-backend': patch
+'@backstage/plugin-events-backend-module-aws-sqs': patch
+'@backstage/plugin-events-backend-module-github': patch
+'@backstage/plugin-events-backend-module-gitlab': patch
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
diff --git a/.changeset/famous-cobras-suffer.md b/.changeset/famous-cobras-suffer.md
new file mode 100644
index 0000000000..d09948f876
--- /dev/null
+++ b/.changeset/famous-cobras-suffer.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-github': patch
+---
+
+Added the githubCredentialsProvider property to the GithubLocationAnalyzerOptions to be able to override the GithubCredentialsProvider.
diff --git a/.changeset/fifty-news-stare.md b/.changeset/fifty-news-stare.md
new file mode 100644
index 0000000000..24ad2e20e7
--- /dev/null
+++ b/.changeset/fifty-news-stare.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-catalog-backend': patch
+'@backstage/plugin-catalog-node': minor
+---
+
+Make it possible for entity providers to supply only entity refs, instead of full entities, in `delta` mutation deletions.
diff --git a/.changeset/four-buttons-clean.md b/.changeset/four-buttons-clean.md
new file mode 100644
index 0000000000..41af42b45e
--- /dev/null
+++ b/.changeset/four-buttons-clean.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog': patch
+---
+
+Handle refresh entity error in `AboutCard`.
diff --git a/.changeset/fresh-news-push.md b/.changeset/fresh-news-push.md
new file mode 100644
index 0000000000..a77b7a256b
--- /dev/null
+++ b/.changeset/fresh-news-push.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-bazaar': patch
+---
+
+`HomePageBazaarInfoCard` is now displaying `title` instead of `name`. Title is a string that doesn't have to be URL friendly.
+The BazaarOverviewCard have the new property `fullHeight`. Link in `BazaarOverviewCard`is moved to header in card.
diff --git a/.changeset/gentle-ligers-help.md b/.changeset/gentle-ligers-help.md
new file mode 100644
index 0000000000..f7f9c3b270
--- /dev/null
+++ b/.changeset/gentle-ligers-help.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-app-api': patch
+---
+
+Tweak feature flag registration so that it happens immediately before the first rendering of the app, rather than just after.
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-wasps-yell.md b/.changeset/hip-wasps-yell.md
new file mode 100644
index 0000000000..1cdea4e84d
--- /dev/null
+++ b/.changeset/hip-wasps-yell.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-bazaar': patch
+---
+
+Add `title` as optional parameter to `BazaarOverviewCard`
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/light-snakes-exercise.md b/.changeset/light-snakes-exercise.md
new file mode 100644
index 0000000000..45bd37cf27
--- /dev/null
+++ b/.changeset/light-snakes-exercise.md
@@ -0,0 +1,16 @@
+---
+'@backstage/backend-common': minor
+'@backstage/backend-tasks': minor
+'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
+'@backstage/plugin-search-backend-node': patch
+---
+
+Changed to use native `AbortController` and `AbortSignal` from Node.js, instead
+of the one from `node-abort-controller`. This is possible now that the minimum
+supported Node.js version of the project is 16.
+
+Note that their interfaces are very slightly different, but typically not in a
+way that matters to consumers. If you see any typescript errors as a direct
+result from this, they are compatible with each other in the ways that we
+interact with them, and should be possible to type-cast across without ill
+effects.
diff --git a/.changeset/light-turtles-yawn.md b/.changeset/light-turtles-yawn.md
new file mode 100644
index 0000000000..3f42fb0524
--- /dev/null
+++ b/.changeset/light-turtles-yawn.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Fixed deprecated use of `substr` into `substring`.
diff --git a/.changeset/many-bikes-press.md b/.changeset/many-bikes-press.md
new file mode 100644
index 0000000000..68ddb68c05
--- /dev/null
+++ b/.changeset/many-bikes-press.md
@@ -0,0 +1,5 @@
+---
+'@backstage/backend-plugin-api': minor
+---
+
+**BREAKING**: All core service references are now exported via a single `coreServices` object. For example, the `loggerServiceRef` is now accessed via `coreServices.logger` instead.
diff --git a/.changeset/modern-camels-cheat.md b/.changeset/modern-camels-cheat.md
new file mode 100644
index 0000000000..c0a80934d5
--- /dev/null
+++ b/.changeset/modern-camels-cheat.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog': minor
+---
+
+Removed `CatalogKindHeader` from `DefaultCatalogPage`. Deprecated `CatalogKindHeader` in favour of `EntityKindPicker`.
diff --git a/.changeset/modern-jokes-attack.md b/.changeset/modern-jokes-attack.md
new file mode 100644
index 0000000000..3cb3143f05
--- /dev/null
+++ b/.changeset/modern-jokes-attack.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+Made AlertDisplay not crash on undefined messages
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/nice-pants-boil.md b/.changeset/nice-pants-boil.md
new file mode 100644
index 0000000000..e8bdf0a00f
--- /dev/null
+++ b/.changeset/nice-pants-boil.md
@@ -0,0 +1,6 @@
+---
+'@backstage/backend-common': patch
+'@backstage/plugin-catalog-backend': patch
+---
+
+Adds MySQL support for the catalog-backend
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-tips-cough.md b/.changeset/old-tips-cough.md
new file mode 100644
index 0000000000..bcf6de6a53
--- /dev/null
+++ b/.changeset/old-tips-cough.md
@@ -0,0 +1,9 @@
+---
+'@backstage/plugin-adr': patch
+'@backstage/plugin-catalog': patch
+'@backstage/plugin-search-react': patch
+'@backstage/plugin-stack-overflow': patch
+'@backstage/plugin-techdocs': patch
+---
+
+Update search links to only have header as linkable text
diff --git a/.changeset/pre.json b/.changeset/pre.json
index 136b807fdf..8c78c0f0b3 100644
--- a/.changeset/pre.json
+++ b/.changeset/pre.json
@@ -187,7 +187,10 @@
"@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"
+ "@backstage/plugin-xcmetrics": "0.2.31",
+ "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.0.0",
+ "@backstage/plugin-explore-backend": "0.0.0",
+ "@backstage/plugin-explore-common": "0.0.0"
},
"changesets": [
"angry-dingos-lick",
@@ -197,38 +200,76 @@
"clever-pillows-drive",
"clever-rivers-obey",
"create-app-1669131574",
+ "create-app-1669720399",
"early-hairs-switch",
"early-parrots-guess",
+ "eight-spiders-know",
+ "eight-tables-hunt",
"fair-walls-talk",
+ "famous-cobras-suffer",
"fast-lies-remain",
"fluffy-walls-approve",
+ "forty-baboons-burn",
"four-adults-provide",
+ "four-buttons-clean",
+ "fresh-news-push",
"funny-numbers-compete",
"gold-icons-cheat",
+ "gold-yaks-join",
"gorgeous-hairs-applaud",
+ "healthy-crabs-collect",
+ "hip-chairs-tap",
"hip-stingrays-kneel",
"itchy-walls-boil",
+ "kind-walls-share",
+ "light-snakes-exercise",
+ "light-turtles-yawn",
+ "loud-rockets-reply",
"modern-mugs-shout",
+ "nasty-melons-build",
+ "nervous-mice-flow",
"new-bugs-march",
"nine-ears-whisper",
+ "old-bulldogs-fry",
"old-keys-leave",
+ "old-tips-cough",
+ "pretty-eagles-matter",
+ "pretty-melons-taste",
+ "quick-horses-cry",
"renovate-3fe8460",
"renovate-4bb70f3",
+ "renovate-50ee0c3",
"renovate-778b2fa",
+ "renovate-a5f7839",
+ "rich-balloons-leave",
"rich-garlics-play",
+ "rude-pugs-deny",
+ "rude-sloths-cross",
"search-heavy-frogs-confess",
"search-om-manniskan-ginge",
+ "search-tofu-panaeng",
"serious-windows-occur",
"silly-wolves-remember",
"slow-dragons-promise",
+ "slow-eggs-grab",
+ "slow-flies-marinate",
+ "slow-flies-marry",
+ "smart-radios-change",
"soft-nails-arrive",
"sour-flowers-care",
"sour-plums-grow",
+ "sour-queens-wait",
+ "stupid-clocks-return",
+ "stupid-gifts-serve",
+ "tender-colts-greet",
"tender-parrots-cover",
"thin-donuts-join",
"twelve-meals-smell",
"twenty-dodos-wash",
+ "warm-parents-notice",
"weak-ears-jam",
+ "wicked-games-search",
+ "yellow-forks-knock",
"young-turkeys-relax"
]
}
diff --git a/.changeset/pretty-eagles-matter.md b/.changeset/pretty-eagles-matter.md
new file mode 100644
index 0000000000..64eabd9ce6
--- /dev/null
+++ b/.changeset/pretty-eagles-matter.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-bazaar-backend': patch
+---
+
+Column `title` has replaced column `name` for `BazaarProject` in database
diff --git a/.changeset/pretty-melons-taste.md b/.changeset/pretty-melons-taste.md
new file mode 100644
index 0000000000..9c2a7a13da
--- /dev/null
+++ b/.changeset/pretty-melons-taste.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+JSX and React Fast Refresh transforms are no longer enabled when bundling backend code.
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-1e2853d.md b/.changeset/renovate-1e2853d.md
new file mode 100644
index 0000000000..9378786e80
--- /dev/null
+++ b/.changeset/renovate-1e2853d.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Updated dependency `minimatch` to `5.1.1` and switch version range to `^`.
diff --git a/.changeset/renovate-4cbe4f9.md b/.changeset/renovate-4cbe4f9.md
new file mode 100644
index 0000000000..90d7faa801
--- /dev/null
+++ b/.changeset/renovate-4cbe4f9.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Updated dependency `@rollup/plugin-commonjs` to `^23.0.0`.
diff --git a/.changeset/renovate-50ee0c3.md b/.changeset/renovate-50ee0c3.md
new file mode 100644
index 0000000000..3cdd142cf6
--- /dev/null
+++ b/.changeset/renovate-50ee0c3.md
@@ -0,0 +1,17 @@
+---
+'@backstage/core-app-api': patch
+'@backstage/core-components': patch
+'@backstage/core-plugin-api': patch
+'@backstage/dev-utils': patch
+'@backstage/test-utils': patch
+'@backstage/types': patch
+'@backstage/plugin-catalog-react': patch
+'@backstage/plugin-catalog': patch
+'@backstage/plugin-config-schema': patch
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/plugin-scaffolder': patch
+'@backstage/plugin-shortcuts': patch
+'@backstage/plugin-user-settings': patch
+---
+
+Updated dependency `zen-observable` to `^0.10.0`.
diff --git a/.changeset/renovate-61ad428.md b/.changeset/renovate-61ad428.md
new file mode 100644
index 0000000000..95e4e27baf
--- /dev/null
+++ b/.changeset/renovate-61ad428.md
@@ -0,0 +1,8 @@
+---
+'@backstage/core-components': patch
+'@backstage/plugin-gcp-projects': patch
+'@backstage/plugin-scaffolder': patch
+'@backstage/plugin-techdocs-module-addons-contrib': patch
+---
+
+Updated dependency `@react-hookz/web` to `^19.0.0`.
diff --git a/.changeset/renovate-bf8dfb3.md b/.changeset/renovate-bf8dfb3.md
new file mode 100644
index 0000000000..57cabf075b
--- /dev/null
+++ b/.changeset/renovate-bf8dfb3.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Updated dependency `@rollup/plugin-yaml` to `^4.0.0`.
diff --git a/.changeset/renovate-ceb9248.md b/.changeset/renovate-ceb9248.md
new file mode 100644
index 0000000000..d1cfe1775e
--- /dev/null
+++ b/.changeset/renovate-ceb9248.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Updated dependency `@rollup/plugin-json` to `^5.0.0`.
diff --git a/.changeset/rude-pugs-deny.md b/.changeset/rude-pugs-deny.md
new file mode 100644
index 0000000000..b877d96285
--- /dev/null
+++ b/.changeset/rude-pugs-deny.md
@@ -0,0 +1,27 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+The catalog no longer stops after the first processor `validateEntityKind`
+method returns `true` when validating entity kind shapes. Instead, it continues
+through all registered processors that have this method, and requires that _at
+least one_ of them returned true.
+
+The old behavior of stopping early made it harder to extend existing core kinds
+with additional fields, since the `BuiltinKindsEntityProcessor` is always
+present at the top of the processing chain and ensures that your additional
+validation code would never be run.
+
+This is technically a breaking change, although it should not affect anybody
+under normal circumstances, except if you had problematic validation code that
+you were unaware that it was not being run. That code may now start to exhibit
+those problems.
+
+If you need to disable this new behavior, `CatalogBuilder` as used in your
+`packages/backend/src/plugins/catalog.ts` file now has a
+`useLegacySingleProcessorValidation()` method to go back to the old behavior.
+
+```diff
+ const builder = await CatalogBuilder.create(env);
++builder.useLegacySingleProcessorValidation();
+```
diff --git a/.changeset/rude-sloths-cross.md b/.changeset/rude-sloths-cross.md
new file mode 100644
index 0000000000..8d3fc486e8
--- /dev/null
+++ b/.changeset/rude-sloths-cross.md
@@ -0,0 +1,14 @@
+---
+'@backstage/plugin-explore': patch
+'@backstage/plugin-explore-backend': patch
+'@backstage/plugin-explore-common': patch
+'@backstage/plugin-explore-react': patch
+---
+
+Added new `@backstage/plugin-explore-backend` & `@backstage/plugin-explore-common` packages.
+
+This deprecates the `ExploreToolsConfig` API (in `@backstage/plugin-explore-react`) which is replaced by the `ExploreApi` & `ExploreClient`. The list of `ExploreTool` data can now be provided on the backend by either using the supplied `StaticExploreToolProvider` or by implementing a custom `ExploreToolProvider`. See the [explore-backend README](https://github.com/backstage/backstage/blob/master/plugins/explore-backend/README.md) for full details.
+
+NOTE: Existing installations that have customized the `ExploreToolConfig` will continue to work through the new `ExploreClient`. However, existing data should be migrated over to new `explore-backend` plugin as `ExploreToolConfig` will be removed in the future.
+
+BREAKING CHANGE: If you have previously installed the `explore` plugin, but not yet customized the `ExploreToolConfig` API in your `packages/app`, this will result in an empty list of tools.
diff --git a/.changeset/search-lieutenant-dangle.md b/.changeset/search-lieutenant-dangle.md
new file mode 100644
index 0000000000..75f1bca915
--- /dev/null
+++ b/.changeset/search-lieutenant-dangle.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-backend-module-elasticsearch': patch
+---
+
+Fixed a bug that prevented indices from being cleaned up under some circumstances, which could have led to shard exhaustion.
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/selfish-lizards-invent.md b/.changeset/selfish-lizards-invent.md
new file mode 100644
index 0000000000..fd486416d8
--- /dev/null
+++ b/.changeset/selfish-lizards-invent.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-analytics-module-ga': patch
+---
+
+Added support for sending virtual pageviews on `search` events in order to enable
+Site Search functionality in GA. For more information consult [README](/plugins/analytics-module-ga/README.md#enabling-site-search)
diff --git a/.changeset/shy-cycles-add.md b/.changeset/shy-cycles-add.md
new file mode 100644
index 0000000000..2c70f2a8eb
--- /dev/null
+++ b/.changeset/shy-cycles-add.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-graph': patch
+---
+
+Set the default `maxDepth` prop for `EntityRelationsGraph` to a smaller value to provide better readability.
diff --git a/.changeset/silver-rats-rest.md b/.changeset/silver-rats-rest.md
new file mode 100644
index 0000000000..52bb9acd6f
--- /dev/null
+++ b/.changeset/silver-rats-rest.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-common': minor
+---
+
+numberOfResults (total number of results for a given query) can now be provided by each search engine and consumed as part of the search results response
diff --git a/.changeset/slow-eggs-grab.md b/.changeset/slow-eggs-grab.md
new file mode 100644
index 0000000000..e4c537687f
--- /dev/null
+++ b/.changeset/slow-eggs-grab.md
@@ -0,0 +1,8 @@
+---
+'@backstage/repo-tools': minor
+---
+
+Api reference documentation improvements
+
+- breadcrumbs links semantics as code spans
+- new `@config` annotation to describe related config keys
diff --git a/.changeset/slow-flies-marinate.md b/.changeset/slow-flies-marinate.md
new file mode 100644
index 0000000000..42d0de5f44
--- /dev/null
+++ b/.changeset/slow-flies-marinate.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-events-backend-module-aws-sqs': patch
+---
+
+Upgrade to AWS SDK for Javascript v3
diff --git a/.changeset/slow-flies-marry.md b/.changeset/slow-flies-marry.md
new file mode 100644
index 0000000000..7882707d32
--- /dev/null
+++ b/.changeset/slow-flies-marry.md
@@ -0,0 +1,8 @@
+---
+'@backstage/plugin-techdocs-node': patch
+---
+
+Upgrade to AWS SDK for Javascript v3
+
+Techdocs support for AWS S3 now requires defining the AWS region to connect to.
+If `techdocs.publisher.awsS3.region` is missing from the config, the AWS environment variable `AWS_REGION` will be used.
diff --git a/.changeset/slow-lies-jam.md b/.changeset/slow-lies-jam.md
new file mode 100644
index 0000000000..a9d7a90b95
--- /dev/null
+++ b/.changeset/slow-lies-jam.md
@@ -0,0 +1,11 @@
+---
+'@backstage/backend-common': patch
+'@backstage/cli': patch
+'@backstage/cli-common': patch
+'@backstage/core-app-api': patch
+'@backstage/core-components': patch
+'@backstage/dev-utils': patch
+'@techdocs/cli': patch
+---
+
+Tweaked wording to use inclusive terminology
diff --git a/.changeset/smart-radios-change.md b/.changeset/smart-radios-change.md
new file mode 100644
index 0000000000..1c7393829d
--- /dev/null
+++ b/.changeset/smart-radios-change.md
@@ -0,0 +1,5 @@
+---
+'@backstage/backend-common': patch
+---
+
+Fixed `SingleHostDiscovery` so that it properly handles single-string `backend.listen` configurations such as `:80`.
diff --git a/.changeset/sour-queens-wait.md b/.changeset/sour-queens-wait.md
new file mode 100644
index 0000000000..87231a1eb0
--- /dev/null
+++ b/.changeset/sour-queens-wait.md
@@ -0,0 +1,5 @@
+---
+'@backstage/repo-tools': patch
+---
+
+add the command type-deps to the repo tool package.
diff --git a/.changeset/strange-rocks-hide.md b/.changeset/strange-rocks-hide.md
new file mode 100644
index 0000000000..e171a277fb
--- /dev/null
+++ b/.changeset/strange-rocks-hide.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+The search table also holds the original entity value now and the facets endpoint fetches the filtered entity data from the search table.
diff --git a/.changeset/strong-peaches-melt.md b/.changeset/strong-peaches-melt.md
new file mode 100644
index 0000000000..43f819fd4d
--- /dev/null
+++ b/.changeset/strong-peaches-melt.md
@@ -0,0 +1,6 @@
+---
+'@backstage/core-components': patch
+'@backstage/test-utils': patch
+---
+
+Sync components in @backstage/core-components with the Component Design Guidelines
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/warm-parents-notice.md b/.changeset/warm-parents-notice.md
new file mode 100644
index 0000000000..0084a968a1
--- /dev/null
+++ b/.changeset/warm-parents-notice.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-proxy-backend': patch
+---
+
+Documented the `createRouter` method.
diff --git a/.changeset/wicked-games-search.md b/.changeset/wicked-games-search.md
new file mode 100644
index 0000000000..5264995a2d
--- /dev/null
+++ b/.changeset/wicked-games-search.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-cost-insights': patch
+---
+
+added an optional config entry `costInsights.engineerThreshold` to allow users to control the threshold value for the 'negligible' change in costs.
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/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml
index c376f7d0f3..9fed796aa5 100644
--- a/.github/workflows/automate_merge_message.yml
+++ b/.github/workflows/automate_merge_message.yml
@@ -27,8 +27,8 @@ jobs:
with:
ref: '${{ github.event.pull_request.merge_commit_sha }}'
- - name: fetch base
- run: git fetch --depth 1 origin ${{ github.event.pull_request.base.sha }}
+ - name: fetch head & base
+ run: git fetch --depth 1 origin ${{ github.event.pull_request.head.sha }} ${{ 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
diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml
index 12fccdc7ed..1d8aa525a9 100644
--- a/.github/workflows/automate_stale.yml
+++ b/.github/workflows/automate_stale.yml
@@ -8,7 +8,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v5
+ - uses: actions/stale@v6
id: stale
with:
stale-issue-message: >
diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml
index 1ee10e83d3..bebe24d0f6 100644
--- a/.github/workflows/deploy_packages.yml
+++ b/.github/workflows/deploy_packages.yml
@@ -12,6 +12,7 @@ jobs:
needs_release: ${{ steps.release_check.outputs.needs_release }}
strategy:
+ fail-fast: false
matrix:
node-version: [16.x, 18.x]
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/app-config.yaml b/app-config.yaml
index ef133491af..dd72051189 100644
--- a/app-config.yaml
+++ b/app-config.yaml
@@ -373,6 +373,7 @@ auth:
development: {}
costInsights:
engineerCost: 200000
+ engineerThreshold: 0.5
products:
computeEngine:
name: Compute Engine
diff --git a/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md b/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md
index 3cedf5634b..1bdf9cc367 100644
--- a/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md
+++ b/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md
@@ -48,7 +48,7 @@ Once you've saved the action, you should see an authentication flow be triggered
### Frontend
The Backstage App needs a SignInPage when authentication is required.
-When using ALB authentication Backstage will only be loaded once the user has successfully authenticated; we won't need to display a SignIn page, however we will need to create a dummy SignIn component that can refresh the token.
+When using ALB authentication Backstage will only be loaded once the user has successfully authenticated; we won't need to display a SignIn page, however we will need to create a placeholder SignIn component that can refresh the token.
- edit `packages/app/src/App.tsx`
- import the following two additional definitions from `@backstage/core-plugin-api`: `useApi`, `configApiRef`; these will be used to check whether Backstage is running locally or behind an ALB
@@ -59,7 +59,7 @@ import React from 'react';
import { UserIdentity } from '@backstage/core-components';
import { SignInPageProps } from '@backstage/core-app-api';
-const DummySignInComponent: any = (props: SignInPageProps) => {
+const SampleSignInComponent: any = (props: SignInPageProps) => {
const [error, setError] = React.useState();
const config = useApi(configApiRef);
React.useEffect(() => {
@@ -102,13 +102,13 @@ const DummySignInComponent: any = (props: SignInPageProps) => {
};
```
-- add `DummySignInComponent` as `SignInPage`:
+- add `SampleSignInComponent` as `SignInPage`:
```ts
const app = createApp({
...
components: {
- SignInPage: DummySignInComponent,
+ SignInPage: SampleSignInComponent,
...
},
...
diff --git a/docs/FAQ.md b/docs/FAQ.md
index f695a59410..fcd5542f74 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -54,7 +54,7 @@ begun work on various aspects of all three phases. Looking at the
[milestones for active issues](https://github.com/backstage/backstage/milestones)
will also give you a sense of our progress.
-### My company doesn't have thousands of developers or services. Is Backstage overkill?
+### My company doesn't have thousands of developers or services. Is using Backstage excessive for our needs?
Not at all! A core reason to adopt Backstage is to standardize how software is
built at your company. It's easier to decide on those standards as a small
diff --git a/docs/architecture-decisions/adr010-luxon-date-library.md b/docs/architecture-decisions/adr010-luxon-date-library.md
index 65cabd256c..a7b287ae0d 100644
--- a/docs/architecture-decisions/adr010-luxon-date-library.md
+++ b/docs/architecture-decisions/adr010-luxon-date-library.md
@@ -10,7 +10,7 @@ description: Architecture Decision Record (ADR) for Luxon Date Library
Date formatting (e.g. `a day ago`) and calculations are common within Backstage.
Some of these useful features are not supported by the standard JavaScript
`Date` object. The popular [Moment.js](https://momentjs.com/) library has been
-commonly used to fill this gap but suffers from large bundle sizes and mutable
+commonly used to fill this gap but is affected by large bundle sizes and mutable
state issues. On top of this, `momentjs` is
[being sunset](https://momentjs.com/docs/#/-project-status/) and the project
recommends using one of the more modern alternative libraries.
diff --git a/docs/auth/cloudflare/access.md b/docs/auth/cloudflare/access.md
index c7db308438..d47495180a 100644
--- a/docs/auth/cloudflare/access.md
+++ b/docs/auth/cloudflare/access.md
@@ -63,7 +63,7 @@ export default async function createPlugin(
// and the access token and produces the Backstage token with the
// relevant user info.
async resolver({ profile, result }, ctx) {
- // Somehow compute the Backstage token claims. Just some dummy code
+ // Somehow compute the Backstage token claims. Just some sample code
// shown here, but you may want to query your LDAP server, or
// https://.cloudflareaccess.com/cdn-cgi/access/get-identity
// https://developers.cloudflare.com/cloudflare-one/identity/users/validating-json/#groups-within-a-jwt
diff --git a/docs/auth/google/gcp-iap-auth.md b/docs/auth/google/gcp-iap-auth.md
index 90d267b327..d6303ced6f 100644
--- a/docs/auth/google/gcp-iap-auth.md
+++ b/docs/auth/google/gcp-iap-auth.md
@@ -70,7 +70,7 @@ export default async function createPlugin(
// and the IAP token and produces the Backstage token with the
// relevant user info.
async resolver({ profile, result: { iapToken } }, ctx) {
- // Somehow compute the Backstage token claims. Just some dummy code
+ // Somehow compute the Backstage token claims. Just some sample code
// shown here, but you may want to query your LDAP server, or
// GSuite or similar, based on the IAP token sub/email claims
const id = iapToken.email.split('@')[0];
diff --git a/docs/deployment/k8s.md b/docs/deployment/k8s.md
index a80ba1816e..b0218c8657 100644
--- a/docs/deployment/k8s.md
+++ b/docs/deployment/k8s.md
@@ -256,7 +256,7 @@ bash-5.1# exit
The database pod is running, but how does another pod connect to it?
-Kubernetes pods are transient - they can be killed, restarted, or created
+Kubernetes pods are transient - they can be stopped, restarted, or created
dynamically. Therefore we don't want to try to connect to pods directly, but
rather create a Kubernetes Service. Services keep track of pods and direct
traffic to the right place.
diff --git a/docs/features/search/getting-started.md b/docs/features/search/getting-started.md
index 726d1557d0..e13401a8e3 100644
--- a/docs/features/search/getting-started.md
+++ b/docs/features/search/getting-started.md
@@ -279,6 +279,8 @@ an example:
```
+> For more advanced customization of the Search frontend, also see how to guides such as [How to implement your own Search API](./how-to-guides.md#how-to-implement-your-own-search-api) and [How to customize search results highlighting styling](./how-to-guides.md#how-to-customize-search-results-highlighting-styling)
+
### Backend
Backstage Search isn't a search engine itself, rather, it provides an interface
@@ -380,3 +382,5 @@ indexBuilder.addCollator({
}),
});
```
+
+> For more advanced customization of the Search backend, also see how to guides such as [How to index TechDocs documents](./how-to-guides.md#how-to-index-techdocs-documents) and [How to limit what can be searched in the Software Catalog](./how-to-guides.md#how-to-limit-what-can-be-searched-in-the-software-catalog)
diff --git a/docs/features/software-catalog/descriptor-format.md b/docs/features/software-catalog/descriptor-format.md
index 81e3604ffe..27b26659cf 100644
--- a/docs/features/software-catalog/descriptor-format.md
+++ b/docs/features/software-catalog/descriptor-format.md
@@ -360,7 +360,7 @@ Fields of a link are:
_NOTE_: The `icon` field value is meant to be a semantic key that will map to a
specific icon that may be provided by an icon library (e.g. `material-ui`
icons). These keys should be a sequence of `[a-z0-9A-Z]`, possibly separated by
-one of `[-_.]`. Backstage may support some basic icons out of the box, but the
+one of `[-_.]`. Backstage may support some basic icons out of the box such as those [defined in app-defaults](https://github.com/backstage/backstage/blob/master/packages/app-defaults/src/defaults/icons.tsx), but the
Backstage integrator will ultimately be left to provide the appropriate icon
component mappings. A generic fallback icon would be provided if a mapping
cannot be resolved.
diff --git a/docs/features/software-catalog/system-model.md b/docs/features/software-catalog/system-model.md
index 8a7e0cd30a..409f3e8450 100644
--- a/docs/features/software-catalog/system-model.md
+++ b/docs/features/software-catalog/system-model.md
@@ -50,7 +50,7 @@ components need to be in a known machine-readable format so we can build further
tooling and analysis on top.
APIs have a visibility: they are either public (making them available for any
-other component to consume), restricted (only available to a whitelisted set of
+other component to consume), restricted (only available to an allowlisted set of
consumers), or private (only available within their system). As public APIs are
going to be the primary way interaction between components, Backstage supports
documenting, indexing and searching all APIs so we can browse them as
diff --git a/docs/features/software-catalog/well-known-relations.md b/docs/features/software-catalog/well-known-relations.md
index 6fb7ae2fea..bfcbcb780a 100644
--- a/docs/features/software-catalog/well-known-relations.md
+++ b/docs/features/software-catalog/well-known-relations.md
@@ -76,6 +76,9 @@ an entity to function. It can for example be used to express that a website
component needs a library component as part of its build, or that a service
component uses a persistent storage resource.
+This relation is commonly generated based on `spec.dependsOn` of the component
+or resource in question.
+
### `parentOf` and `childOf`
A parent/child relation to build up a tree, used for example to describe the
diff --git a/docs/features/techdocs/cli.md b/docs/features/techdocs/cli.md
index dc89f1718b..06eb83dfca 100644
--- a/docs/features/techdocs/cli.md
+++ b/docs/features/techdocs/cli.md
@@ -235,7 +235,7 @@ details.
You need to make sure that your environment is able to authenticate with the
target cloud provider. `techdocs-cli` uses the official Node.js clients provided
-by AWS (v2), Google Cloud and Azure. You can authenticate using environment
+by AWS (v3), Google Cloud and Azure. You can authenticate using environment
variables and/or by other means (`~/.aws/credentials`, `~/.config/gcloud` etc.)
Refer to the Authentication section of the following documentation depending
diff --git a/docs/features/techdocs/configuration.md b/docs/features/techdocs/configuration.md
index 8a54d76ed0..4e806296e5 100644
--- a/docs/features/techdocs/configuration.md
+++ b/docs/features/techdocs/configuration.md
@@ -108,8 +108,8 @@ techdocs:
# (Optional) An API key is required to write to a storage bucket.
# If not set, environment variables or aws config file will be used to authenticate.
- # https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/loading-node-credentials-environment.html
- # https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/loading-node-credentials-shared.html
+ # https://www.npmjs.com/package/@aws-sdk/credential-provider-node
+ # https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html
credentials:
accessKeyId: ${TECHDOCS_AWSS3_ACCESS_KEY_ID_CREDENTIAL}
secretAccessKey: ${TECHDOCS_AWSS3_SECRET_ACCESS_KEY_CREDENTIAL}
@@ -121,7 +121,7 @@ techdocs:
# (Optional) Endpoint URI to send requests to.
# If not set, the default endpoint is built from the configured region.
- # https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property
+ # https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/s3clientconfig.html#endpoint
endpoint: ${AWS_ENDPOINT}
# (Optional) Whether to use path style URLs when communicating with S3.
diff --git a/docs/features/techdocs/configuring-ci-cd.md b/docs/features/techdocs/configuring-ci-cd.md
index 642fd4ab77..75800c48ca 100644
--- a/docs/features/techdocs/configuring-ci-cd.md
+++ b/docs/features/techdocs/configuring-ci-cd.md
@@ -145,6 +145,8 @@ jobs:
- uses: actions/setup-node@v3
- uses: actions/setup-python@v4
+ with:
+ python-version: '3.9'
# the 2 steps below can be removed if you aren't using plantuml in your documentation
- name: setup java
diff --git a/docs/features/techdocs/using-cloud-storage.md b/docs/features/techdocs/using-cloud-storage.md
index 66b4f09596..3ea57edc6b 100644
--- a/docs/features/techdocs/using-cloud-storage.md
+++ b/docs/features/techdocs/using-cloud-storage.md
@@ -219,22 +219,19 @@ If the environment variables
- `AWS_REGION`
are set and can be used to access the bucket you created in step 2, they will be
-used by the AWS SDK V2 Node.js client for authentication.
-[Refer to the official documentation for loading credentials in Node.js from environment variables](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html).
+used by the AWS SDK V3 Node.js client for authentication.
+[Refer to the official documentation for loading credentials in Node.js from environment variables](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/loading-node-credentials-environment.html).
If the environment variables are missing, the AWS SDK tries to read the
`~/.aws/credentials` file for credentials.
-[Refer to the official documentation.](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html)
+[Refer to the official documentation.](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/loading-node-credentials-shared.html)
-If you are using Amazon EC2 instance to deploy Backstage, you do not need to
-obtain the access keys separately. They can be made available in the environment
-automatically by defining appropriate IAM role with access to the bucket. Read
-more in
+If you are deploying Backstage to Amazon EC2, Amazon ECS, or Amazon EKS, you do
+not need to obtain the access keys separately. They can be made available in the
+environment automatically by defining appropriate IAM role with access to the
+bucket. Read more in the
[official AWS documentation for using IAM roles.](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html#use-roles).
-The AWS Region of the bucket is optional since TechDocs uses AWS SDK V2 and not
-V3.
-
**4b. Authentication using app-config.yaml**
AWS credentials and region can be provided to the AWS SDK via `app-config.yaml`.
@@ -254,7 +251,7 @@ techdocs:
```
Refer to the
-[official AWS documentation for obtaining the credentials](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/getting-your-credentials.html).
+[official AWS documentation for obtaining the credentials](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html).
**4c. Authentication using an assumed role** Users with multiple AWS accounts
may want to use a role for S3 storage that is in a different AWS account. Using
diff --git a/docs/getting-started/contributors.md b/docs/getting-started/contributors.md
index 1bf3d6bc7d..cda53f8a54 100644
--- a/docs/getting-started/contributors.md
+++ b/docs/getting-started/contributors.md
@@ -29,8 +29,9 @@ After you have cloned the Backstage repository, you should run the following
commands once to set things up for development:
```bash
-$ yarn install # fetch dependency packages - may take a while
+$ cd backstage # change to root directory of project
+$ yarn install # fetch dependency packages - may take a while
$ yarn tsc # does a first run of type generation and checks
```
diff --git a/docs/getting-started/homepage.md b/docs/getting-started/homepage.md
index eac76b5fdc..2d34998013 100644
--- a/docs/getting-started/homepage.md
+++ b/docs/getting-started/homepage.md
@@ -78,7 +78,7 @@ const routes = (
)
```
-### 4. Update sidebar items
+#### 4. Update sidebar items
Let's update the route for "Home" in the Backstage sidebar to point to the new homepage. We'll also add a Sidebar item to quickly open Catalog.
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/overview/architecture-overview.md b/docs/overview/architecture-overview.md
index 384ab6cf32..3ba3f4ba0b 100644
--- a/docs/overview/architecture-overview.md
+++ b/docs/overview/architecture-overview.md
@@ -260,7 +260,7 @@ development dependency only.
It can sometimes be difficult to decide where to place your plugin code. For example
should it go directly in the `-backend` plugin package or in the `-node` package?
-As a rule of thumb you should try to keep the exposure of your code as low
+As a general guideline you should try to keep the exposure of your code as low
as possible. If it doesn't need to be public API, it's best to avoid. If you don't
need it to be used by other plugins, then keep it directly in the plugin packages.
diff --git a/docs/plugins/analytics.md b/docs/plugins/analytics.md
index 46e1d354df..e04cb9c5c6 100644
--- a/docs/plugins/analytics.md
+++ b/docs/plugins/analytics.md
@@ -52,13 +52,13 @@ learn how to contribute the integration yourself!
The following table summarizes events that, depending on the plugins you have
installed, may be captured.
-| Action | Subject | Other Notes |
-| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- |
-| `navigate` | The URL of the page that was navigated to | |
-| `click` | The text of the link that was clicked on | The `to` attribute represents the URL clicked to |
-| `create` | The `name` of the software being created; if no `name` property is requested by the given Software Template, then the string `new {templateName}` is used instead. | The context holds an `entityRef`, set to the template's ref (e.g. `template:default/template-name`) |
-| `search` | The search term entered in any search bar component | The context holds `searchTypes`, representing `types` constraining the search |
-| `discover` | The title of the search result that was clicked on | The `value` is the result rank. A `to` attribute is also provided |
+| Action | Subject | Other Notes |
+| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `navigate` | The URL of the page that was navigated to | |
+| `click` | The text of the link that was clicked on | The `to` attribute represents the URL clicked to |
+| `create` | The `name` of the software being created; if no `name` property is requested by the given Software Template, then the string `new {templateName}` is used instead. | The context holds an `entityRef`, set to the template's ref (e.g. `template:default/template-name`) |
+| `search` | The search term entered in any search bar component | - The context holds `searchTypes`, representing `types` constraining the search. The `value` represents the total number of search results for the query. This may not be visible if the permission framework is being used. |
+| `discover` | The title of the search result that was clicked on | The `value` is the result rank. A `to` attribute is also provided |
If there is an event you'd like to see captured, please [open an
issue][add-event] describing the event you want to see and the questions it
diff --git a/docs/plugins/backend-plugin.md b/docs/plugins/backend-plugin.md
index 3eddb9e1c2..65a668d391 100644
--- a/docs/plugins/backend-plugin.md
+++ b/docs/plugins/backend-plugin.md
@@ -51,7 +51,7 @@ terminal window, now run
curl localhost:7007/carmen/health
```
-This should return `{"status":"ok"}`. Success! Press `Ctrl + c` to kill it
+This should return `{"status":"ok"}`. Success! Press `Ctrl + c` to stop it
again.
## Developing your Backend Plugin
diff --git a/docs/plugins/testing.md b/docs/plugins/testing.md
index aa7815728c..baee47c695 100644
--- a/docs/plugins/testing.md
+++ b/docs/plugins/testing.md
@@ -123,7 +123,7 @@ than simply letting them know they had an invalid input.
> input change.
This piggybacks the Scalability Principle and applies primarily to frontend
-development. As a general rule of thumb, frontends should be flexible enough so
+development. As a general guideline, frontends should be flexible enough so
that the UX or design can change while touching the least amount of code
possible. So for example, a poor unit test would verify the color of a button
when it is hovered. This would be a poor unit test, because if you decide to
@@ -353,7 +353,7 @@ For more information:
### Accessing `store`, `theme`, routing, browser history, etc.
The Backstage application has several core providers at its root. To run your
-test wrapped in a "dummy" Backstage application, you can use our utility
+test wrapped in a "sample" Backstage application, you can use our utility
functions:
**`wrapInTestApp`**
diff --git a/docs/plugins/url-reader.md b/docs/plugins/url-reader.md
index 8788737f17..815674091b 100644
--- a/docs/plugins/url-reader.md
+++ b/docs/plugins/url-reader.md
@@ -268,7 +268,7 @@ async function main() {
```
This will be run every time you restart the backend. Note that after any change
-in the URL Reader code, you need to kill the backend and restart, since the
+in the URL Reader code, you need to stop the backend and restart, since the
`reader` instance is memoized and does not update on hot module reloading. Also,
there are a lot of unit tests written for the URL Readers, which you can make
use of.
diff --git a/docs/releases/v1.9.0-next.1-changelog.md b/docs/releases/v1.9.0-next.1-changelog.md
new file mode 100644
index 0000000000..862734131a
--- /dev/null
+++ b/docs/releases/v1.9.0-next.1-changelog.md
@@ -0,0 +1,2325 @@
+# Release v1.9.0-next.1
+
+## @backstage/backend-common@0.17.0-next.1
+
+### Minor Changes
+
+- de8a975911: Changed to use native `AbortController` and `AbortSignal` from Node.js, instead
+ of the one from `node-abort-controller`. This is possible now that the minimum
+ supported Node.js version of the project is 16.
+
+ Note that their interfaces are very slightly different, but typically not in a
+ way that matters to consumers. If you see any typescript errors as a direct
+ result from this, they are compatible with each other in the ways that we
+ interact with them, and should be possible to type-cast across without ill
+ effects.
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- 1f2b2de3fe: exported KubernetesContainerRunner, KubernetesContainerRunnerOptions, KubernetesContainerRunnerMountBase
+- 6b82598bd8: Added the ability to understand Job Artifact URLs to the GitLab integration
+- 8646067e07: Fixed `SingleHostDiscovery` so that it properly handles single-string `backend.listen` configurations such as `:80`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config-loader@1.1.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/cli-common@0.1.10
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/backend-tasks@0.4.0-next.1
+
+### Minor Changes
+
+- de8a975911: Changed to use native `AbortController` and `AbortSignal` from Node.js, instead
+ of the one from `node-abort-controller`. This is possible now that the minimum
+ supported Node.js version of the project is 16.
+
+ Note that their interfaces are very slightly different, but typically not in a
+ way that matters to consumers. If you see any typescript errors as a direct
+ result from this, they are compatible with each other in the ways that we
+ interact with them, and should be possible to type-cast across without ill
+ effects.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/repo-tools@0.1.0-next.1
+
+### Minor Changes
+
+- 03843259b4: Api reference documentation improvements
+
+ - breadcrumbs links semantics as code spans
+ - new `@config` annotation to describe related config keys
+
+### Patch Changes
+
+- 71f80eb354: add the command type-deps to the repo tool package.
+- Updated dependencies
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-catalog-backend@1.6.0-next.1
+
+### Minor Changes
+
+- c395abb5b2: The catalog no longer stops after the first processor `validateEntityKind`
+ method returns `true` when validating entity kind shapes. Instead, it continues
+ through all registered processors that have this method, and requires that _at
+ least one_ of them returned true.
+
+ The old behavior of stopping early made it harder to extend existing core kinds
+ with additional fields, since the `BuiltinKindsEntityProcessor` is always
+ present at the top of the processing chain and ensures that your additional
+ validation code would never be run.
+
+ This is technically a breaking change, although it should not affect anybody
+ under normal circumstances, except if you had problematic validation code that
+ you were unaware that it was not being run. That code may now start to exhibit
+ those problems.
+
+ If you need to disable this new behavior, `CatalogBuilder` as used in your
+ `packages/backend/src/plugins/catalog.ts` file now has a
+ `useLegacySingleProcessorValidation()` method to go back to the old behavior.
+
+ ```diff
+ const builder = await CatalogBuilder.create(env);
+ +builder.useLegacySingleProcessorValidation();
+ ```
+
+### Patch Changes
+
+- 2a8e3cc0b5: Optimize `Stitcher` process to be more memory efficient
+- 5b3e2afa45: Fixed deprecated use of `substr` into `substring`.
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/plugin-permission-node@0.7.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-scaffolder-common@1.2.3-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.1.0-next.0
+
+### Minor Changes
+
+- 98c643a1a2: Introduces incremental entity providers, which are used for streaming very large data sources into the catalog.
+
+### Patch Changes
+
+- de8a975911: Changed to use native `AbortController` and `AbortSignal` from Node.js, instead
+ of the one from `node-abort-controller`. This is possible now that the minimum
+ supported Node.js version of the project is 16.
+
+ Note that their interfaces are very slightly different, but typically not in a
+ way that matters to consumers. If you see any typescript errors as a direct
+ result from this, they are compatible with each other in the ways that we
+ interact with them, and should be possible to type-cast across without ill
+ effects.
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/backend-test-utils@0.1.31-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/app-defaults@1.0.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-permission-react@0.4.8-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/backend-app-api@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-permission-node@0.7.2-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/backend-defaults@0.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-app-api@0.2.4-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+
+## @backstage/backend-plugin-api@0.1.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/backend-test-utils@0.1.31-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/cli@0.21.2-next.1
+ - @backstage/backend-app-api@0.2.4-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/catalog-client@1.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/catalog-model@1.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/cli@0.21.2-next.1
+
+### Patch Changes
+
+- 8fffe42708: JSX and React Fast Refresh transforms are no longer enabled when bundling backend code.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config-loader@1.1.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/release-manifests@0.0.8-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/config@1.0.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+
+## @backstage/config-loader@1.1.7-next.1
+
+### Patch Changes
+
+- 40e7e6e1a2: Updated dependency `typescript-json-schema` to `^0.55.0`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/cli-common@0.1.10
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/core-app-api@1.2.1-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/core-components@0.12.1-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/core-plugin-api@1.1.1-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/create-app@0.4.35-next.1
+
+### Patch Changes
+
+- Bumped create-app version.
+- Updated dependencies
+ - @backstage/cli-common@0.1.10
+
+## @backstage/dev-utils@1.0.9-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/test-utils@1.2.3-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/app-defaults@1.0.9-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/errors@1.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+
+## @backstage/integration@1.4.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/integration-react@1.1.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/theme@0.2.16
+
+## @techdocs/cli@1.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-techdocs-node@1.4.3-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/cli-common@0.1.10
+
+## @backstage/test-utils@1.2.3-next.1
+
+### Patch Changes
+
+- 5e238ed56a: 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`.
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-permission-react@0.4.8-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/types@1.0.2-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+
+## @backstage/version-bridge@1.0.3-next.0
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+
+## @backstage/plugin-adr@0.2.4-next.1
+
+### Patch Changes
+
+- a19cffbeed: Update search links to only have header as linkable text
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-adr-common@0.2.4-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-adr-backend@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-adr-common@0.2.4-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-adr-common@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-airbrake@0.3.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/test-utils@1.2.3-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/dev-utils@1.0.9-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-airbrake-backend@0.2.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/plugin-allure@0.1.28-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-analytics-module-ga@0.1.23-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-apache-airflow@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+
+## @backstage/plugin-api-docs@0.8.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-catalog@1.6.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-apollo-explorer@0.1.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-app-backend@0.3.39-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config-loader@1.1.7-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/plugin-auth-backend@0.17.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-auth-node@0.2.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-azure-devops@0.2.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-azure-devops-common@0.3.0
+
+## @backstage/plugin-azure-devops-backend@0.3.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-azure-devops-common@0.3.0
+
+## @backstage/plugin-azure-sites@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-azure-sites-common@0.1.0
+
+## @backstage/plugin-azure-sites-backend@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-azure-sites-common@0.1.0
+
+## @backstage/plugin-badges@0.2.36-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-badges-backend@0.1.33-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-bazaar@0.2.1-next.1
+
+### Patch Changes
+
+- 9b1891061c: `HomePageBazaarInfoCard` is now displaying `title` instead of `name`. Title is a string that doesn't have to be URL friendly.
+ The BazaarOverviewCard have the new property `fullHeight`. Link in `BazaarOverviewCard`is moved to header in card.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-catalog@1.6.2-next.1
+ - @backstage/cli@0.21.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-bazaar-backend@0.2.2-next.1
+
+### Patch Changes
+
+- 9b1891061c: Column `title` has replaced column `name` for `BazaarProject` in database
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-test-utils@0.1.31-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.4.1-next.1
+
+## @backstage/plugin-bitrise@0.1.39-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-catalog@1.6.2-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- ca04d97b09: Handle refresh entity error in `AboutCard`.
+- a19cffbeed: Update search links to only have header as linkable text
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-catalog-backend-module-aws@0.1.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-catalog-backend-module-azure@0.1.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-catalog-backend-module-bitbucket@0.2.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.2-next.1
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.6-next.1
+
+### Patch Changes
+
+- 4eb0bce299: Fix repo:push topic not matching `BitbucketCloudEventRouter`.
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.2-next.1
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.1.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-catalog-backend-module-github@0.2.2-next.1
+
+### Patch Changes
+
+- fe93cce743: Added the githubCredentialsProvider property to the GithubLocationAnalyzerOptions to be able to override the GithubCredentialsProvider.
+
+- a0fd4af94a: 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
+
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.1.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-catalog-backend-module-ldap@0.5.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.4.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+
+## @backstage/plugin-catalog-backend-module-openapi@0.1.5-next.1
+
+### Patch Changes
+
+- dd995cdc72: 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`.
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+
+## @backstage/plugin-catalog-common@1.0.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-catalog-graph@0.2.24-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-catalog-graphql@0.3.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+
+## @backstage/plugin-catalog-import@0.9.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+
+## @backstage/plugin-catalog-node@1.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+
+## @backstage/plugin-catalog-react@1.2.2-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/plugin-permission-react@0.4.8-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/plugin-cicd-statistics@0.1.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+
+## @backstage/plugin-cicd-statistics-module-gitlab@0.1.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/plugin-cicd-statistics@0.1.14-next.1
+
+## @backstage/plugin-circleci@0.3.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-cloudbuild@0.3.12-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-code-climate@0.1.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-code-coverage@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-code-coverage-backend@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-codescene@0.1.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-config-schema@0.1.35-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-cost-insights@0.12.1-next.1
+
+### Patch Changes
+
+- d379b6f070: Internal refactor to avoid usage of deprecated symbols
+- f97c7fd1f7: added an optional config entry `costInsights.engineerThreshold` to allow users to control the threshold value for the 'negligible' change in costs.
+- a5ecdb99f0: Making a possibility to hide a trending line in a cost insights plugin
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/test-utils@1.2.3-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-cost-insights-common@0.1.1
+
+## @backstage/plugin-dynatrace@1.0.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-events-backend@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.1.1-next.1
+
+### Patch Changes
+
+- dd008a10c1: Upgrade to AWS SDK for Javascript v3
+- Updated dependencies
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-events-backend-module-azure@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-events-backend-module-gerrit@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-events-backend-module-github@0.1.1-next.1
+
+### Patch Changes
+
+- 0f46ec304c: 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
+ .
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-events-backend-module-gitlab@0.1.1-next.1
+
+### Patch Changes
+
+- 31fe8f256a: 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
+ .
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-events-backend-test-utils@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.0-next.1
+
+## @backstage/plugin-events-node@0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.1.5-next.1
+
+## @backstage/plugin-explore@0.3.43-next.1
+
+### Patch Changes
+
+- 4dec6f16be: Added new `@backstage/plugin-explore-backend` & `@backstage/plugin-explore-common` packages.
+
+ This deprecates the `ExploreToolsConfig` API (in `@backstage/plugin-explore-react`) which is replaced by the `ExploreApi` & `ExploreClient`. The list of `ExploreTool` data can now be provided on the backend by either using the supplied `StaticExploreToolProvider` or by implementing a custom `ExploreToolProvider`. See the [explore-backend README](https://github.com/backstage/backstage/blob/master/plugins/explore-backend/README.md) for full details.
+
+ NOTE: Existing installations that have customized the `ExploreToolConfig` will continue to work through the new `ExploreClient`. However, existing data should be migrated over to new `explore-backend` plugin as `ExploreToolConfig` will be removed in the future.
+
+ BREAKING CHANGE: If you have previously installed the `explore` plugin, but not yet customized the `ExploreToolConfig` API in your `packages/app`, this will result in an empty list of tools.
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/plugin-explore-common@0.0.1-next.0
+ - @backstage/plugin-explore-react@0.0.24-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-explore-backend@0.0.1-next.0
+
+### Patch Changes
+
+- 4dec6f16be: Added new `@backstage/plugin-explore-backend` & `@backstage/plugin-explore-common` packages.
+
+ This deprecates the `ExploreToolsConfig` API (in `@backstage/plugin-explore-react`) which is replaced by the `ExploreApi` & `ExploreClient`. The list of `ExploreTool` data can now be provided on the backend by either using the supplied `StaticExploreToolProvider` or by implementing a custom `ExploreToolProvider`. See the [explore-backend README](https://github.com/backstage/backstage/blob/master/plugins/explore-backend/README.md) for full details.
+
+ NOTE: Existing installations that have customized the `ExploreToolConfig` will continue to work through the new `ExploreClient`. However, existing data should be migrated over to new `explore-backend` plugin as `ExploreToolConfig` will be removed in the future.
+
+ BREAKING CHANGE: If you have previously installed the `explore` plugin, but not yet customized the `ExploreToolConfig` API in your `packages/app`, this will result in an empty list of tools.
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-explore-common@0.0.1-next.0
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-explore-common@0.0.1-next.0
+
+### Patch Changes
+
+- 4dec6f16be: Added new `@backstage/plugin-explore-backend` & `@backstage/plugin-explore-common` packages.
+
+ This deprecates the `ExploreToolsConfig` API (in `@backstage/plugin-explore-react`) which is replaced by the `ExploreApi` & `ExploreClient`. The list of `ExploreTool` data can now be provided on the backend by either using the supplied `StaticExploreToolProvider` or by implementing a custom `ExploreToolProvider`. See the [explore-backend README](https://github.com/backstage/backstage/blob/master/plugins/explore-backend/README.md) for full details.
+
+ NOTE: Existing installations that have customized the `ExploreToolConfig` will continue to work through the new `ExploreClient`. However, existing data should be migrated over to new `explore-backend` plugin as `ExploreToolConfig` will be removed in the future.
+
+ BREAKING CHANGE: If you have previously installed the `explore` plugin, but not yet customized the `ExploreToolConfig` API in your `packages/app`, this will result in an empty list of tools.
+
+## @backstage/plugin-explore-react@0.0.24-next.1
+
+### Patch Changes
+
+- 4dec6f16be: Added new `@backstage/plugin-explore-backend` & `@backstage/plugin-explore-common` packages.
+
+ This deprecates the `ExploreToolsConfig` API (in `@backstage/plugin-explore-react`) which is replaced by the `ExploreApi` & `ExploreClient`. The list of `ExploreTool` data can now be provided on the backend by either using the supplied `StaticExploreToolProvider` or by implementing a custom `ExploreToolProvider`. See the [explore-backend README](https://github.com/backstage/backstage/blob/master/plugins/explore-backend/README.md) for full details.
+
+ NOTE: Existing installations that have customized the `ExploreToolConfig` will continue to work through the new `ExploreClient`. However, existing data should be migrated over to new `explore-backend` plugin as `ExploreToolConfig` will be removed in the future.
+
+ BREAKING CHANGE: If you have previously installed the `explore` plugin, but not yet customized the `ExploreToolConfig` API in your `packages/app`, this will result in an empty list of tools.
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-explore-common@0.0.1-next.0
+
+## @backstage/plugin-firehydrant@0.1.29-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-fossa@0.2.44-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-gcalendar@0.3.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-gcp-projects@0.3.31-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-git-release-manager@0.3.25-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-github-actions@0.5.12-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-github-deployments@0.1.43-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-github-issues@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-github-pull-requests-board@0.1.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-gitops-profiles@0.3.30-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-gocd@0.1.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-graphiql@0.2.44-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-graphql-backend@0.1.29-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-catalog-graphql@0.3.16-next.1
+
+## @backstage/plugin-home@0.4.28-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-stack-overflow@0.1.8-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-ilert@0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-jenkins@0.7.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-jenkins-common@0.1.11-next.1
+
+## @backstage/plugin-jenkins-backend@0.1.29-next.1
+
+### Patch Changes
+
+- cfe2b98fbe: Remove unnecessary dependency promise-any-polyfill
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-jenkins-common@0.1.11-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/plugin-jenkins-common@0.1.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/plugin-kafka@0.3.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-kafka-backend@0.2.32-next.1
+
+### Patch Changes
+
+- 0b54dbaf7d: Internal tweak to adapt to `kafkajs` 2.2.3
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-kubernetes@0.7.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-kubernetes-common@0.4.5-next.1
+
+## @backstage/plugin-kubernetes-backend@0.8.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-test-utils@0.1.31-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-kubernetes-common@0.4.5-next.1
+
+## @backstage/plugin-kubernetes-common@0.4.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.4-next.1
+
+## @backstage/plugin-lighthouse@0.3.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-newrelic@0.3.30-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-newrelic-dashboard@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-org@0.6.2-next.1
+
+### Patch Changes
+
+- 67cedfe42e: 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.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-org-react@0.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-pagerduty@0.5.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-periskop@0.1.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-periskop-backend@0.1.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/plugin-permission-backend@0.5.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/plugin-permission-node@0.7.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/plugin-permission-common@0.7.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-permission-node@0.7.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/plugin-permission-react@0.4.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/plugin-playlist@0.1.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/plugin-permission-react@0.4.8-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-playlist-common@0.1.3-next.1
+
+## @backstage/plugin-playlist-backend@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-test-utils@0.1.31-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/plugin-permission-node@0.7.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-playlist-common@0.1.3-next.1
+
+## @backstage/plugin-playlist-common@0.1.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/plugin-proxy-backend@0.2.33-next.1
+
+### Patch Changes
+
+- 03843259b4: Documented the `createRouter` method.
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/plugin-rollbar@0.4.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-rollbar-backend@0.1.36-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/plugin-scaffolder@1.9.0-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/plugin-permission-react@0.4.8-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-scaffolder-common@1.2.3-next.1
+
+## @backstage/plugin-scaffolder-backend@1.8.1-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-scaffolder-common@1.2.3-next.1
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.12-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.1
+ - @backstage/config@1.0.5-next.1
+
+## @backstage/plugin-scaffolder-common@1.2.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+
+## @backstage/plugin-search@1.0.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-search-backend@1.1.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-search-backend-node@1.0.5-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/plugin-permission-node@0.7.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-backend-node@1.0.5-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-search-backend-module-pg@0.4.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-search-backend-node@1.0.5-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-search-backend-node@1.0.5-next.1
+
+### Patch Changes
+
+- de8a975911: Changed to use native `AbortController` and `AbortSignal` from Node.js, instead
+ of the one from `node-abort-controller`. This is possible now that the minimum
+ supported Node.js version of the project is 16.
+
+ Note that their interfaces are very slightly different, but typically not in a
+ way that matters to consumers. If you see any typescript errors as a direct
+ result from this, they are compatible with each other in the ways that we
+ interact with them, and should be possible to type-cast across without ill
+ effects.
+
+- 54c5836f7a: 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.
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-search-common@1.1.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
+## @backstage/plugin-search-react@1.2.2-next.1
+
+### Patch Changes
+
+- a19cffbeed: Update search links to only have header as linkable text
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-sentry@0.4.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-shortcuts@0.3.4-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-sonarqube@0.5.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-sonarqube-backend@0.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-splunk-on-call@0.4.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-stack-overflow@0.1.8-next.1
+
+### Patch Changes
+
+- a19cffbeed: Update search links to only have header as linkable text
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-home@0.4.28-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-stack-overflow-backend@0.1.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.21.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-tech-insights@0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-tech-insights-common@0.2.9-next.1
+
+## @backstage/plugin-tech-insights-backend@0.5.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-tech-insights-node@0.3.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-tech-insights-common@0.2.9-next.1
+
+## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-tech-insights-node@0.3.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-tech-insights-common@0.2.9-next.1
+
+## @backstage/plugin-tech-insights-common@0.2.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+
+## @backstage/plugin-tech-insights-node@0.3.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-tech-insights-common@0.2.9-next.1
+
+## @backstage/plugin-tech-radar@0.5.19-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-techdocs@1.4.1-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- a19cffbeed: Update search links to only have header as linkable text
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/plugin-techdocs-react@1.0.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-catalog@1.6.2-next.1
+ - @backstage/plugin-techdocs@1.4.1-next.1
+ - @backstage/test-utils@1.2.3-next.1
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/plugin-techdocs-react@1.0.7-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-techdocs-backend@1.4.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-techdocs-node@1.4.3-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/plugin-techdocs-react@1.0.7-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-techdocs-node@1.4.3-next.1
+
+### Patch Changes
+
+- 0a61aab172: Bump dependency @azure/identity to next minor
+
+- 37931c33ce: Upgrade to AWS SDK for Javascript v3
+
+ Techdocs support for AWS S3 now requires defining the AWS region to connect to.
+ If `techdocs.publisher.awsS3.region` is missing from the config, the AWS environment variable `AWS_REGION` will be used.
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## @backstage/plugin-techdocs-react@1.0.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+
+## @backstage/plugin-todo@0.2.14-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-todo-backend@0.1.36-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-user-settings@0.6.0-next.1
+
+### Patch Changes
+
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-user-settings-backend@0.1.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-vault@0.1.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @backstage/plugin-vault-backend@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/backend-test-utils@0.1.31-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @backstage/plugin-xcmetrics@0.2.32-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## example-app@0.2.78-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-cloudbuild@0.3.12-next.1
+ - @backstage/plugin-gcp-projects@0.3.31-next.1
+ - @backstage/plugin-github-actions@0.5.12-next.1
+ - @backstage/plugin-graphiql@0.2.44-next.1
+ - @backstage/plugin-techdocs@1.4.1-next.1
+ - @backstage/plugin-cost-insights@0.12.1-next.1
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/plugin-stack-overflow@0.1.8-next.1
+ - @backstage/cli@0.21.2-next.1
+ - @backstage/plugin-org@0.6.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/plugin-scaffolder@1.9.0-next.1
+ - @backstage/plugin-shortcuts@0.3.4-next.1
+ - @backstage/plugin-user-settings@0.6.0-next.1
+ - @backstage/plugin-explore@0.3.43-next.1
+ - @backstage/app-defaults@1.0.9-next.1
+ - @backstage/plugin-apache-airflow@0.2.5-next.1
+ - @backstage/plugin-api-docs@0.8.12-next.1
+ - @backstage/plugin-azure-devops@0.2.3-next.1
+ - @backstage/plugin-azure-sites@0.1.1-next.1
+ - @backstage/plugin-badges@0.2.36-next.1
+ - @backstage/plugin-catalog-graph@0.2.24-next.1
+ - @backstage/plugin-catalog-import@0.9.2-next.1
+ - @backstage/plugin-circleci@0.3.12-next.1
+ - @backstage/plugin-code-coverage@0.2.5-next.1
+ - @backstage/plugin-dynatrace@1.0.2-next.1
+ - @backstage/plugin-gcalendar@0.3.8-next.1
+ - @backstage/plugin-gocd@0.1.18-next.1
+ - @backstage/plugin-home@0.4.28-next.1
+ - @backstage/plugin-jenkins@0.7.11-next.1
+ - @backstage/plugin-kafka@0.3.12-next.1
+ - @backstage/plugin-kubernetes@0.7.5-next.1
+ - @backstage/plugin-lighthouse@0.3.12-next.1
+ - @backstage/plugin-newrelic@0.3.30-next.1
+ - @backstage/plugin-pagerduty@0.5.5-next.1
+ - @backstage/plugin-playlist@0.1.3-next.1
+ - @backstage/plugin-rollbar@0.4.12-next.1
+ - @backstage/plugin-search@1.0.5-next.1
+ - @backstage/plugin-sentry@0.4.5-next.1
+ - @backstage/plugin-tech-insights@0.3.4-next.1
+ - @backstage/plugin-tech-radar@0.5.19-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.1
+ - @backstage/plugin-todo@0.2.14-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/plugin-airbrake@0.3.12-next.1
+ - @backstage/plugin-newrelic-dashboard@0.2.5-next.1
+ - @backstage/plugin-techdocs-react@1.0.7-next.1
+ - @internal/plugin-catalog-customized@0.0.5-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-permission-react@0.4.8-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## example-backend@0.2.78-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/plugin-kafka-backend@0.2.32-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/plugin-search-backend-node@1.0.5-next.1
+ - @backstage/plugin-jenkins-backend@0.1.29-next.1
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.1
+ - @backstage/plugin-explore-backend@0.0.1-next.0
+ - @backstage/plugin-proxy-backend@0.2.33-next.1
+ - @backstage/plugin-app-backend@0.3.39-next.1
+ - @backstage/plugin-auth-backend@0.17.2-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/plugin-azure-devops-backend@0.3.18-next.1
+ - @backstage/plugin-azure-sites-backend@0.1.1-next.1
+ - @backstage/plugin-badges-backend@0.1.33-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/plugin-code-coverage-backend@0.2.5-next.1
+ - @backstage/plugin-events-backend@0.2.0-next.1
+ - @backstage/plugin-graphql-backend@0.1.29-next.1
+ - @backstage/plugin-kubernetes-backend@0.8.1-next.1
+ - @backstage/plugin-permission-backend@0.5.14-next.1
+ - @backstage/plugin-permission-node@0.7.2-next.1
+ - @backstage/plugin-playlist-backend@0.2.2-next.1
+ - @backstage/plugin-rollbar-backend@0.1.36-next.1
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.1
+ - @backstage/plugin-search-backend@1.1.2-next.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.1
+ - @backstage/plugin-search-backend-module-pg@0.4.3-next.1
+ - @backstage/plugin-tech-insights-backend@0.5.5-next.1
+ - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.1
+ - @backstage/plugin-tech-insights-node@0.3.7-next.1
+ - @backstage/plugin-techdocs-backend@1.4.2-next.1
+ - @backstage/plugin-todo-backend@0.1.36-next.1
+ - example-app@0.2.78-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
+## example-backend-next@0.0.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.1
+ - @backstage/plugin-app-backend@0.3.39-next.1
+ - @backstage/backend-defaults@0.1.4-next.1
+
+## techdocs-cli-embedded-app@0.2.77-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-catalog@1.6.2-next.1
+ - @backstage/plugin-techdocs@1.4.1-next.1
+ - @backstage/test-utils@1.2.3-next.1
+ - @backstage/cli@0.21.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/app-defaults@1.0.9-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/plugin-techdocs-react@1.0.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
+## @internal/plugin-catalog-customized@0.0.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.6.2-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+
+## @internal/plugin-todo-list@1.0.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/theme@0.2.16
+
+## @internal/plugin-todo-list-backend@1.0.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## @internal/plugin-todo-list-common@1.0.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.7.2-next.1
diff --git a/docs/tutorials/configuring-plugin-databases.md b/docs/tutorials/configuring-plugin-databases.md
index 8cb78bff60..ed550f1801 100644
--- a/docs/tutorials/configuring-plugin-databases.md
+++ b/docs/tutorials/configuring-plugin-databases.md
@@ -21,8 +21,8 @@ instance or cluster.
With infrastructure defined as code or data (Terraform, AWS CloudFormation,
etc.), you may have database credentials which lack permissions to create new
databases or you do not have control over the database names. In these
-instances, you can set the database name and connection information on a per
-plugin basis as mentioned earlier.
+instances, you can set the database connection configuration on a [per plugin basis]
+(#connection-configuration-per-plugin).
Backstage supports all of these use cases with the `DatabaseManager` provided by
`@backstage/backend-common`. We will now cover how to use and configure
diff --git a/microsite/blog/2022-03-04-backstage-upgrade-helper.md b/microsite/blog/2022-03-04-backstage-upgrade-helper.md
index a189e28cd5..80b3b9c0a8 100644
--- a/microsite/blog/2022-03-04-backstage-upgrade-helper.md
+++ b/microsite/blog/2022-03-04-backstage-upgrade-helper.md
@@ -29,7 +29,7 @@ We started by creating a fork from React Native’s open source project, applyin
The Backstage Upgrade Helper tool enables adopters to easily upgrade their Backstage app by using the power of git to create a diff between different versions.
-Whenever a new version of Backstage is released, the Helper scaffolds a new dummy Backstage app using the `backstage-create-app` cli utility and checks all the generated files in a specific git branch. After the branch is generated, it gets compared with all the existing ones, which results in generating specific git patches stored in specific files. By selecting the version of the current Backstage release together with the version you want to upgrade to, the UI knows which patch file needs to be picked up.
+Whenever a new version of Backstage is released, the Helper scaffolds a new sample Backstage app using the `backstage-create-app` cli utility and checks all the generated files in a specific git branch. After the branch is generated, it gets compared with all the existing ones, which results in generating specific git patches stored in specific files. By selecting the version of the current Backstage release together with the version you want to upgrade to, the UI knows which patch file needs to be picked up.
So, now you can update your Backstage application in three steps rather than manually reading the changelogs of all the Backstage modules in reverse order.
diff --git a/microsite/data/plugins/azure-spring-apps.yml b/microsite/data/plugins/azure-spring-apps.yml
index cefb0e2824..5b41885ac4 100644
--- a/microsite/data/plugins/azure-spring-apps.yml
+++ b/microsite/data/plugins/azure-spring-apps.yml
@@ -5,6 +5,6 @@ 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
+iconUrl: img/enfuse.png
npmPackageName: '@enfuse/plugin-azure-spring-apps'
addedDate: '2022-11-21'
diff --git a/package.json b/package.json
index 2d2d5f335b..524cdf4bbe 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
"lint": "backstage-cli repo lint --since origin/master",
"lint:docs": "node ./scripts/check-docs-quality",
"lint:all": "backstage-cli repo lint",
- "lint:type-deps": "node scripts/check-type-dependencies.js",
+ "lint:type-deps": "backstage-repo-tools type-deps",
"docker-build": "yarn tsc && yarn workspace example-backend build --build-dependencies && yarn workspace example-backend build-image",
"new": "backstage-cli new --scope backstage --baseVersion 0.0.0 --no-private",
"create-plugin": "echo \"use 'yarn new' instead\"",
@@ -46,7 +46,7 @@
"@types/react": "^17",
"@types/react-dom": "^17"
},
- "version": "1.9.0-next.0",
+ "version": "1.9.0-next.1",
"dependencies": {
"@backstage/errors": "workspace:^",
"@manypkg/get-packages": "^1.1.3"
diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md
index ab34404847..7485f130e3 100644
--- a/packages/app-defaults/CHANGELOG.md
+++ b/packages/app-defaults/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/app-defaults
+## 1.0.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-permission-react@0.4.8-next.1
+ - @backstage/theme@0.2.16
+
## 1.0.9-next.0
### Patch Changes
diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json
index 10cbea0824..e7acda4732 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.9-next.0",
+ "version": "1.0.9-next.1",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md
index 2d7cce1b6d..813a669173 100644
--- a/packages/app/CHANGELOG.md
+++ b/packages/app/CHANGELOG.md
@@ -1,5 +1,68 @@
# example-app
+## 0.2.78-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-app-api@1.2.1-next.1
+ - @backstage/core-components@0.12.1-next.1
+ - @backstage/plugin-cloudbuild@0.3.12-next.1
+ - @backstage/plugin-gcp-projects@0.3.31-next.1
+ - @backstage/plugin-github-actions@0.5.12-next.1
+ - @backstage/plugin-graphiql@0.2.44-next.1
+ - @backstage/plugin-techdocs@1.4.1-next.1
+ - @backstage/plugin-cost-insights@0.12.1-next.1
+ - @backstage/plugin-search-react@1.2.2-next.1
+ - @backstage/plugin-stack-overflow@0.1.8-next.1
+ - @backstage/cli@0.21.2-next.1
+ - @backstage/plugin-org@0.6.2-next.1
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-react@1.2.2-next.1
+ - @backstage/plugin-scaffolder@1.9.0-next.1
+ - @backstage/plugin-shortcuts@0.3.4-next.1
+ - @backstage/plugin-user-settings@0.6.0-next.1
+ - @backstage/plugin-explore@0.3.43-next.1
+ - @backstage/app-defaults@1.0.9-next.1
+ - @backstage/plugin-apache-airflow@0.2.5-next.1
+ - @backstage/plugin-api-docs@0.8.12-next.1
+ - @backstage/plugin-azure-devops@0.2.3-next.1
+ - @backstage/plugin-azure-sites@0.1.1-next.1
+ - @backstage/plugin-badges@0.2.36-next.1
+ - @backstage/plugin-catalog-graph@0.2.24-next.1
+ - @backstage/plugin-catalog-import@0.9.2-next.1
+ - @backstage/plugin-circleci@0.3.12-next.1
+ - @backstage/plugin-code-coverage@0.2.5-next.1
+ - @backstage/plugin-dynatrace@1.0.2-next.1
+ - @backstage/plugin-gcalendar@0.3.8-next.1
+ - @backstage/plugin-gocd@0.1.18-next.1
+ - @backstage/plugin-home@0.4.28-next.1
+ - @backstage/plugin-jenkins@0.7.11-next.1
+ - @backstage/plugin-kafka@0.3.12-next.1
+ - @backstage/plugin-kubernetes@0.7.5-next.1
+ - @backstage/plugin-lighthouse@0.3.12-next.1
+ - @backstage/plugin-newrelic@0.3.30-next.1
+ - @backstage/plugin-pagerduty@0.5.5-next.1
+ - @backstage/plugin-playlist@0.1.3-next.1
+ - @backstage/plugin-rollbar@0.4.12-next.1
+ - @backstage/plugin-search@1.0.5-next.1
+ - @backstage/plugin-sentry@0.4.5-next.1
+ - @backstage/plugin-tech-insights@0.3.4-next.1
+ - @backstage/plugin-tech-radar@0.5.19-next.1
+ - @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.1
+ - @backstage/plugin-todo@0.2.14-next.1
+ - @backstage/integration-react@1.1.7-next.1
+ - @backstage/plugin-airbrake@0.3.12-next.1
+ - @backstage/plugin-newrelic-dashboard@0.2.5-next.1
+ - @backstage/plugin-techdocs-react@1.0.7-next.1
+ - @internal/plugin-catalog-customized@0.0.5-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-permission-react@0.4.8-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/theme@0.2.16
+ - @backstage/plugin-catalog-common@1.0.9-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
## 0.2.78-next.0
### Patch Changes
diff --git a/packages/app/package.json b/packages/app/package.json
index 171151f843..3f15471993 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "example-app",
- "version": "0.2.78-next.0",
+ "version": "0.2.78-next.1",
"private": true,
"backstage": {
"role": "frontend"
@@ -80,7 +80,7 @@
"react-router": "^6.3.0",
"react-router-dom": "^6.3.0",
"react-use": "^17.2.4",
- "zen-observable": "^0.9.0"
+ "zen-observable": "^0.10.0"
},
"devDependencies": {
"@backstage/test-utils": "workspace:^",
diff --git a/packages/app/src/components/search/SearchModal.tsx b/packages/app/src/components/search/SearchModal.tsx
index 218ead9b82..2aed970e75 100644
--- a/packages/app/src/components/search/SearchModal.tsx
+++ b/packages/app/src/components/search/SearchModal.tsx
@@ -25,6 +25,7 @@ import {
Paper,
useTheme,
} from '@material-ui/core';
+import BuildIcon from '@material-ui/icons/Build';
import LaunchIcon from '@material-ui/icons/Launch';
import {
CatalogIcon,
@@ -38,6 +39,7 @@ import {
catalogApiRef,
CATALOG_FILTER_EXISTS,
} from '@backstage/plugin-catalog-react';
+import { ToolSearchResultListItem } from '@backstage/plugin-explore';
import { searchPlugin, SearchType } from '@backstage/plugin-search';
import {
DefaultResultListItem,
@@ -110,6 +112,10 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => {
value: 'techdocs',
name: 'Documentation',
},
+ {
+ value: 'tools',
+ name: 'Tools',
+ },
]}
/>
@@ -209,6 +215,17 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => {
/>
);
break;
+ case 'tools':
+ resultItem = (
+ }
+ key={document.location}
+ result={document}
+ highlight={highlight}
+ rank={rank}
+ />
+ );
+ break;
default:
resultItem = (
({
bar: {
@@ -155,6 +157,16 @@ const SearchPage = () => {
rank={rank}
/>
);
+ case 'tools':
+ return (
+ }
+ key={document.location}
+ result={document}
+ highlight={highlight}
+ rank={rank}
+ />
+ );
default:
return (
{
diff --git a/packages/backend-app-api/src/services/implementations/permissionsService.ts b/packages/backend-app-api/src/services/implementations/permissionsService.ts
index 32e8a1a9f9..d3f8d5783c 100644
--- a/packages/backend-app-api/src/services/implementations/permissionsService.ts
+++ b/packages/backend-app-api/src/services/implementations/permissionsService.ts
@@ -15,21 +15,18 @@
*/
import {
- configServiceRef,
+ coreServices,
createServiceFactory,
- discoveryServiceRef,
- permissionsServiceRef,
- tokenManagerServiceRef,
} from '@backstage/backend-plugin-api';
import { ServerPermissionClient } from '@backstage/plugin-permission-node';
/** @public */
export const permissionsFactory = createServiceFactory({
- service: permissionsServiceRef,
+ service: coreServices.permissions,
deps: {
- config: configServiceRef,
- discovery: discoveryServiceRef,
- tokenManager: tokenManagerServiceRef,
+ config: coreServices.config,
+ discovery: coreServices.discovery,
+ tokenManager: coreServices.tokenManager,
},
async factory({ config }) {
return async ({ discovery, tokenManager }) => {
diff --git a/packages/backend-app-api/src/services/implementations/rootLoggerService.ts b/packages/backend-app-api/src/services/implementations/rootLoggerService.ts
index a65a8d9126..d2bb406adb 100644
--- a/packages/backend-app-api/src/services/implementations/rootLoggerService.ts
+++ b/packages/backend-app-api/src/services/implementations/rootLoggerService.ts
@@ -18,7 +18,7 @@ import { createRootLogger } from '@backstage/backend-common';
import {
createServiceFactory,
Logger,
- rootLoggerServiceRef,
+ coreServices,
} from '@backstage/backend-plugin-api';
import { Logger as WinstonLogger } from 'winston';
@@ -40,7 +40,7 @@ class BackstageLogger implements Logger {
/** @public */
export const rootLoggerFactory = createServiceFactory({
- service: rootLoggerServiceRef,
+ service: coreServices.rootLogger,
deps: {},
async factory() {
return BackstageLogger.fromWinston(createRootLogger());
diff --git a/packages/backend-app-api/src/services/implementations/schedulerService.ts b/packages/backend-app-api/src/services/implementations/schedulerService.ts
index 40676344ec..a6edec868a 100644
--- a/packages/backend-app-api/src/services/implementations/schedulerService.ts
+++ b/packages/backend-app-api/src/services/implementations/schedulerService.ts
@@ -15,19 +15,17 @@
*/
import {
- configServiceRef,
+ coreServices,
createServiceFactory,
- pluginMetadataServiceRef,
- schedulerServiceRef,
} from '@backstage/backend-plugin-api';
import { TaskScheduler } from '@backstage/backend-tasks';
/** @public */
export const schedulerFactory = createServiceFactory({
- service: schedulerServiceRef,
+ service: coreServices.scheduler,
deps: {
- config: configServiceRef,
- plugin: pluginMetadataServiceRef,
+ config: coreServices.config,
+ plugin: coreServices.pluginMetadata,
},
async factory({ config }) {
const taskScheduler = TaskScheduler.fromConfig(config);
diff --git a/packages/backend-app-api/src/services/implementations/tokenManagerService.ts b/packages/backend-app-api/src/services/implementations/tokenManagerService.ts
index 92f42c10db..6a2d47ae14 100644
--- a/packages/backend-app-api/src/services/implementations/tokenManagerService.ts
+++ b/packages/backend-app-api/src/services/implementations/tokenManagerService.ts
@@ -15,20 +15,18 @@
*/
import {
- configServiceRef,
- loggerServiceRef,
+ coreServices,
createServiceFactory,
- tokenManagerServiceRef,
loggerToWinstonLogger,
} from '@backstage/backend-plugin-api';
import { ServerTokenManager } from '@backstage/backend-common';
/** @public */
export const tokenManagerFactory = createServiceFactory({
- service: tokenManagerServiceRef,
+ service: coreServices.tokenManager,
deps: {
- config: configServiceRef,
- logger: loggerServiceRef,
+ config: coreServices.config,
+ logger: coreServices.logger,
},
async factory() {
return async ({ config, logger }) => {
diff --git a/packages/backend-app-api/src/services/implementations/urlReaderService.ts b/packages/backend-app-api/src/services/implementations/urlReaderService.ts
index d7d7502a08..b68be74d8c 100644
--- a/packages/backend-app-api/src/services/implementations/urlReaderService.ts
+++ b/packages/backend-app-api/src/services/implementations/urlReaderService.ts
@@ -16,19 +16,17 @@
import { UrlReaders } from '@backstage/backend-common';
import {
- configServiceRef,
+ coreServices,
createServiceFactory,
- loggerServiceRef,
loggerToWinstonLogger,
- urlReaderServiceRef,
} from '@backstage/backend-plugin-api';
/** @public */
export const urlReaderFactory = createServiceFactory({
- service: urlReaderServiceRef,
+ service: coreServices.urlReader,
deps: {
- config: configServiceRef,
- logger: loggerServiceRef,
+ config: coreServices.config,
+ logger: coreServices.logger,
},
async factory() {
return async ({ config, logger }) => {
diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts
index 897ed4e3cd..b878a6a75d 100644
--- a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts
+++ b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts
@@ -18,7 +18,7 @@ import {
createServiceRef,
createServiceFactory,
ServiceRef,
- pluginMetadataServiceRef,
+ coreServices,
} from '@backstage/backend-plugin-api';
import { ServiceRegistry } from './ServiceRegistry';
@@ -172,7 +172,7 @@ describe('ServiceRegistry', () => {
const ref = createServiceRef<{ pluginId: string }>({ id: 'x' });
const factory = createServiceFactory({
service: ref,
- deps: { meta: pluginMetadataServiceRef },
+ deps: { meta: coreServices.pluginMetadata },
async factory() {
return async ({ meta }) => ({ pluginId: meta.getId() });
},
diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.ts
index 007ca00c88..9ff73f4270 100644
--- a/packages/backend-app-api/src/wiring/ServiceRegistry.ts
+++ b/packages/backend-app-api/src/wiring/ServiceRegistry.ts
@@ -17,7 +17,7 @@
import {
ServiceFactory,
ServiceRef,
- pluginMetadataServiceRef,
+ coreServices,
} from '@backstage/backend-plugin-api';
import { stringifyError } from '@backstage/errors';
@@ -65,10 +65,10 @@ export class ServiceRegistry {
pluginId: string,
): Promise | undefined {
// Special case handling of the plugin metadata service, generating a custom factory for it each time
- if (ref.id === pluginMetadataServiceRef.id) {
+ if (ref.id === coreServices.pluginMetadata.id) {
return Promise.resolve({
scope: 'plugin',
- service: pluginMetadataServiceRef,
+ service: coreServices.pluginMetadata,
deps: {},
factory: async () => async () => ({
getId() {
@@ -114,7 +114,7 @@ export class ServiceRegistry {
#checkForMissingDeps(factory: ServiceFactory, pluginId: string) {
const missingDeps = Object.values(factory.deps).filter(ref => {
- if (ref.id === pluginMetadataServiceRef.id) {
+ if (ref.id === coreServices.pluginMetadata.id) {
return false;
}
if (this.#providedFactories.get(ref.id)) {
diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md
index 66f505399d..83bc1e70c2 100644
--- a/packages/backend-common/CHANGELOG.md
+++ b/packages/backend-common/CHANGELOG.md
@@ -1,5 +1,33 @@
# @backstage/backend-common
+## 0.17.0-next.1
+
+### Minor Changes
+
+- de8a975911: Changed to use native `AbortController` and `AbortSignal` from Node.js, instead
+ of the one from `node-abort-controller`. This is possible now that the minimum
+ supported Node.js version of the project is 16.
+
+ Note that their interfaces are very slightly different, but typically not in a
+ way that matters to consumers. If you see any typescript errors as a direct
+ result from this, they are compatible with each other in the ways that we
+ interact with them, and should be possible to type-cast across without ill
+ effects.
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- 1f2b2de3fe: exported KubernetesContainerRunner, KubernetesContainerRunnerOptions, KubernetesContainerRunnerMountBase
+- 6b82598bd8: Added the ability to understand Job Artifact URLs to the GitLab integration
+- 8646067e07: Fixed `SingleHostDiscovery` so that it properly handles single-string `backend.listen` configurations such as `:80`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config-loader@1.1.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/cli-common@0.1.10
+ - @backstage/errors@1.1.4-next.1
+
## 0.16.1-next.0
### Patch Changes
diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md
index e8dbd8d150..784f3295c6 100644
--- a/packages/backend-common/api-report.md
+++ b/packages/backend-common/api-report.md
@@ -6,8 +6,6 @@
///
///
-import { AbortController as AbortController_2 } from 'node-abort-controller';
-import { AbortSignal as AbortSignal_2 } from 'node-abort-controller';
import aws from 'aws-sdk';
import { AwsS3Integration } from '@backstage/integration';
import { AzureIntegration } from '@backstage/integration';
@@ -28,6 +26,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 +36,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';
@@ -198,7 +198,7 @@ export interface ContainerRunner {
// @alpha
export interface Context {
- readonly abortSignal: AbortSignal_2;
+ readonly abortSignal: AbortSignal;
readonly deadline: Date | undefined;
value(key: string): T | undefined;
}
@@ -208,7 +208,7 @@ export class Contexts {
static root(): Context;
static withAbort(
parentCtx: Context,
- source: AbortController_2 | AbortSignal_2,
+ source: AbortController | AbortSignal,
): Context;
static withTimeoutDuration(parentCtx: Context, timeout: Duration): Context;
static withTimeoutMillis(parentCtx: Context, timeout: number): Context;
@@ -474,6 +474,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;
@@ -519,7 +542,7 @@ export type ReadTreeOptions = {
},
): boolean;
etag?: string;
- signal?: AbortSignal_2;
+ signal?: AbortSignal;
};
// @public
@@ -573,7 +596,7 @@ export type ReadTreeResponseFile = {
// @public
export type ReadUrlOptions = {
etag?: string;
- signal?: AbortSignal_2;
+ signal?: AbortSignal;
};
// @public
@@ -632,7 +655,7 @@ export type RunContainerOptions = {
// @public
export type SearchOptions = {
etag?: string;
- signal?: AbortSignal_2;
+ signal?: AbortSignal;
};
// @public
diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json
index 9fadc0aeb7..eb9ab49521 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.1-next.0",
+ "version": "0.17.0-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
@@ -73,7 +73,6 @@
"minimatch": "^5.0.0",
"minimist": "^1.2.5",
"morgan": "^1.10.0",
- "node-abort-controller": "^3.0.1",
"node-fetch": "^2.6.7",
"node-forge": "^1.3.1",
"raw-body": "^2.4.1",
diff --git a/packages/backend-common/src/cache/CacheManager.ts b/packages/backend-common/src/cache/CacheManager.ts
index 9bf5000fc6..8fa4b92b42 100644
--- a/packages/backend-common/src/cache/CacheManager.ts
+++ b/packages/backend-common/src/cache/CacheManager.ts
@@ -102,7 +102,7 @@ export class CacheManager {
getClient: (opts = {}): CacheClient => {
const concreteClient = this.getClientWithTtl(pluginId, opts.defaultTtl);
- // Always provide an error handler to avoid killing the process.
+ // Always provide an error handler to avoid stopping the process.
concreteClient.on('error', (err: Error) => {
// In all cases, just log the error.
this.logger.error(err);
diff --git a/packages/backend-common/src/context/AbortContext.test.ts b/packages/backend-common/src/context/AbortContext.test.ts
index f69e282d28..a6c522ffcf 100644
--- a/packages/backend-common/src/context/AbortContext.test.ts
+++ b/packages/backend-common/src/context/AbortContext.test.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { AbortController } from 'node-abort-controller';
import { AbortContext } from './AbortContext';
import { RootContext } from './RootContext';
diff --git a/packages/backend-common/src/context/AbortContext.ts b/packages/backend-common/src/context/AbortContext.ts
index 8a119358a6..92735fbcc6 100644
--- a/packages/backend-common/src/context/AbortContext.ts
+++ b/packages/backend-common/src/context/AbortContext.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { AbortController, AbortSignal } from 'node-abort-controller';
import { Context } from './types';
/**
diff --git a/packages/backend-common/src/context/Contexts.test.ts b/packages/backend-common/src/context/Contexts.test.ts
index cbd61d20a9..c895b3bb49 100644
--- a/packages/backend-common/src/context/Contexts.test.ts
+++ b/packages/backend-common/src/context/Contexts.test.ts
@@ -15,7 +15,6 @@
*/
import { Duration } from 'luxon';
-import { AbortController } from 'node-abort-controller';
import { Contexts } from './Contexts';
describe('Contexts', () => {
diff --git a/packages/backend-common/src/context/Contexts.ts b/packages/backend-common/src/context/Contexts.ts
index e22a76f673..4eeb56b029 100644
--- a/packages/backend-common/src/context/Contexts.ts
+++ b/packages/backend-common/src/context/Contexts.ts
@@ -15,7 +15,6 @@
*/
import { Duration } from 'luxon';
-import { AbortController, AbortSignal } from 'node-abort-controller';
import { AbortContext } from './AbortContext';
import { RootContext } from './RootContext';
import { Context } from './types';
diff --git a/packages/backend-common/src/context/RootContext.ts b/packages/backend-common/src/context/RootContext.ts
index 61962380a4..fd3690a945 100644
--- a/packages/backend-common/src/context/RootContext.ts
+++ b/packages/backend-common/src/context/RootContext.ts
@@ -14,31 +14,36 @@
* limitations under the License.
*/
-import { AbortSignal } from 'node-abort-controller';
import { Context } from './types';
/**
- * Since the root context can never abort, and since nobody is every meant to
- * dispatch events through it, we can use a static dummy instance for
- * efficiency.
+ * Since the root context can never abort, and since nobody is ever meant to
+ * dispatch events through it, we can use a static fake instance for efficiency.
+ *
+ * The reason that this was initially made for the root context is that due to
+ * the way that we always chain contexts off of it, sometimes a huge number of
+ * listeners want to add themselves to something that effectively never can be
+ * aborted in the first place. This triggered warnings that the max listeners
+ * limit was exceeded.
*/
-const dummyAbortSignal: AbortSignal = Object.freeze({
- aborted: false,
- addEventListener() {},
- removeEventListener() {},
+class FakeAbortSignal implements AbortSignal {
+ readonly aborted = false;
+ readonly reason = undefined;
+ onabort() {}
+ throwIfAborted() {}
+ addEventListener() {}
+ removeEventListener() {}
dispatchEvent() {
return true;
- },
- onabort: null,
-});
+ }
+}
/**
* An empty root context.
*/
export class RootContext implements Context {
- readonly abortSignal = dummyAbortSignal;
+ readonly abortSignal = new FakeAbortSignal();
readonly deadline = undefined;
-
value(_key: string): T | undefined {
return undefined;
}
diff --git a/packages/backend-common/src/context/ValueContext.ts b/packages/backend-common/src/context/ValueContext.ts
index 441aaec984..c8e4426d05 100644
--- a/packages/backend-common/src/context/ValueContext.ts
+++ b/packages/backend-common/src/context/ValueContext.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { AbortSignal } from 'node-abort-controller';
import { Context } from './types';
/**
diff --git a/packages/backend-common/src/context/types.ts b/packages/backend-common/src/context/types.ts
index 664745bbf6..3b53225163 100644
--- a/packages/backend-common/src/context/types.ts
+++ b/packages/backend-common/src/context/types.ts
@@ -14,8 +14,6 @@
* limitations under the License.
*/
-import { AbortSignal } from 'node-abort-controller';
-
/**
* A context that is meant to be passed as a ctx variable down the call chain,
* to pass along scoped information and abort signals.
diff --git a/packages/backend-common/src/database/util.ts b/packages/backend-common/src/database/util.ts
index 0a7d3cd7f7..f5abcd7fba 100644
--- a/packages/backend-common/src/database/util.ts
+++ b/packages/backend-common/src/database/util.ts
@@ -29,6 +29,7 @@ export function isDatabaseConflictError(e: unknown) {
typeof message === 'string' &&
(/SQLITE_CONSTRAINT(?:_UNIQUE)?: UNIQUE/.test(message) ||
/UNIQUE constraint failed:/.test(message) ||
- /unique constraint/.test(message))
+ /unique constraint/.test(message) ||
+ /Duplicate entry/.test(message)) // MySQL uniqueness error msg
);
}
diff --git a/packages/backend-common/src/discovery/SingleHostDiscovery.test.ts b/packages/backend-common/src/discovery/SingleHostDiscovery.test.ts
new file mode 100644
index 0000000000..ce4a5ae261
--- /dev/null
+++ b/packages/backend-common/src/discovery/SingleHostDiscovery.test.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2020 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { ConfigReader } from '@backstage/config';
+import { SingleHostDiscovery } from './SingleHostDiscovery';
+
+describe('SingleHostDiscovery', () => {
+ it('is created from config', async () => {
+ const discovery = SingleHostDiscovery.fromConfig(
+ new ConfigReader({
+ backend: {
+ baseUrl: 'http://localhost:40',
+ listen: { port: 80, host: 'localhost' },
+ },
+ }),
+ );
+
+ await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
+ 'http://localhost:80/api/catalog',
+ );
+ await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
+ 'http://localhost:40/api/catalog',
+ );
+ });
+
+ it('can configure the base path', async () => {
+ const discovery = SingleHostDiscovery.fromConfig(
+ new ConfigReader({
+ backend: {
+ baseUrl: 'http://localhost:40',
+ listen: { port: 80, host: 'localhost' },
+ },
+ }),
+ { basePath: '/service' },
+ );
+
+ await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
+ 'http://localhost:80/service/catalog',
+ );
+ await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
+ 'http://localhost:40/service/catalog',
+ );
+ });
+
+ it.each([
+ [{ listen: ':80' }, 'http://localhost:80'],
+ [{ listen: ':40', https: true }, 'https://localhost:40'],
+ [{ listen: '127.0.0.1:80' }, 'http://127.0.0.1:80'],
+ [{ listen: '127.0.0.1:80', https: true }, 'https://127.0.0.1:80'],
+ [{ listen: '0.0.0.0:40' }, 'http://127.0.0.1:40'],
+ [{ listen: { port: 80 } }, 'http://localhost:80'],
+ [{ listen: { port: 8000 } }, 'http://localhost:8000'],
+ [{ listen: { port: 80, host: '0.0.0.0' } }, 'http://127.0.0.1:80'],
+ [{ listen: { port: 80, host: '::' } }, 'http://localhost:80'],
+ [{ listen: { port: 80, host: '::1' } }, 'http://[::1]:80'],
+ [{ listen: { port: 90, host: '::2' }, https: true }, 'https://[::2]:90'],
+ ])('resolves internal baseUrl for %j as %s', async (config, expected) => {
+ const discovery = SingleHostDiscovery.fromConfig(
+ new ConfigReader({
+ backend: {
+ baseUrl: 'http://localhost:40',
+ ...config,
+ },
+ }),
+ );
+
+ await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
+ `${expected}/api/catalog`,
+ );
+ });
+});
diff --git a/packages/backend-common/src/discovery/SingleHostDiscovery.ts b/packages/backend-common/src/discovery/SingleHostDiscovery.ts
index 2f1e44b293..cc23a2f744 100644
--- a/packages/backend-common/src/discovery/SingleHostDiscovery.ts
+++ b/packages/backend-common/src/discovery/SingleHostDiscovery.ts
@@ -50,7 +50,7 @@ export class SingleHostDiscovery implements PluginEndpointDiscovery {
// Translate bind-all to localhost, and support IPv6
let host = listenHost;
- if (host === '::') {
+ if (host === '::' || host === '') {
// We use localhost instead of ::1, since IPv6-compatible systems should default
// to using IPv6 when they see localhost, but if the system doesn't support IPv6
// things will still work.
diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts
index 4a2be1fc74..dd4cd23de4 100644
--- a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts
+++ b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts
@@ -133,7 +133,7 @@ describe('AwsS3UrlReader', () => {
});
};
- it('creates a dummy reader without the awsS3 field', () => {
+ it('creates a sample reader without the awsS3 field', () => {
const entries = createReader({
integrations: {},
});
diff --git a/packages/backend-common/src/reading/types.ts b/packages/backend-common/src/reading/types.ts
index 2ebf38c08a..bce737f3c7 100644
--- a/packages/backend-common/src/reading/types.ts
+++ b/packages/backend-common/src/reading/types.ts
@@ -17,7 +17,6 @@
import { Readable } from 'stream';
import { Logger } from 'winston';
import { Config } from '@backstage/config';
-import { AbortSignal } from 'node-abort-controller';
/**
* A generic interface for fetching plain data from URLs.
diff --git a/packages/backend-common/src/tokens/ServerTokenManager.ts b/packages/backend-common/src/tokens/ServerTokenManager.ts
index 970dcfb83d..c7468eeb1a 100644
--- a/packages/backend-common/src/tokens/ServerTokenManager.ts
+++ b/packages/backend-common/src/tokens/ServerTokenManager.ts
@@ -27,7 +27,7 @@ const TOKEN_EXPIRY_AFTER = Duration.fromObject({ hours: 1 });
const TOKEN_REISSUE_AFTER = Duration.fromObject({ minutes: 10 });
/**
- * A token manager that issues static dummy tokens and never fails
+ * A token manager that issues static fake tokens and never fails
* authentication. This can be useful for testing.
*/
class NoopTokenManager implements TokenManager {
@@ -66,7 +66,7 @@ export class ServerTokenManager implements TokenManager {
private currentTokenPromise: Promise<{ token: string }> | undefined;
/**
- * Creates a token manager that issues static dummy tokens and never fails
+ * Creates a token manager that issues static fake tokens and never fails
* authentication. This can be useful for testing.
*/
static noop(): TokenManager {
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 270e946880..f8dfe0a4d7 100644
--- a/packages/backend-defaults/CHANGELOG.md
+++ b/packages/backend-defaults/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/backend-defaults
+## 0.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-app-api@0.2.4-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+
## 0.1.4-next.0
### Patch Changes
diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json
index 74d0b726e5..39b3df0a7b 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.4-next.0",
+ "version": "0.1.4-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md
index e8957375cd..41299d9b5f 100644
--- a/packages/backend-next/CHANGELOG.md
+++ b/packages/backend-next/CHANGELOG.md
@@ -1,5 +1,15 @@
# example-backend-next
+## 0.0.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.1
+ - @backstage/plugin-app-backend@0.3.39-next.1
+ - @backstage/backend-defaults@0.1.4-next.1
+
## 0.0.6-next.0
### Patch Changes
diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json
index b8b26d6e61..2474413dc2 100644
--- a/packages/backend-next/package.json
+++ b/packages/backend-next/package.json
@@ -1,6 +1,6 @@
{
"name": "example-backend-next",
- "version": "0.0.6-next.0",
+ "version": "0.0.6-next.1",
"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 b33b7ec9a4..8837f56cc7 100644
--- a/packages/backend-plugin-api/CHANGELOG.md
+++ b/packages/backend-plugin-api/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/backend-plugin-api
+## 0.1.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+
## 0.1.5-next.0
### Patch Changes
diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md
index b73a85c32e..17cae29bff 100644
--- a/packages/backend-plugin-api/api-report.md
+++ b/packages/backend-plugin-api/api-report.md
@@ -76,10 +76,29 @@ export interface BackendRegistrationPoints {
}
// @public (undocumented)
-export const cacheServiceRef: ServiceRef;
+const cacheServiceRef: ServiceRef;
// @public (undocumented)
-export const configServiceRef: ServiceRef;
+const configServiceRef: ServiceRef;
+
+declare namespace coreServices {
+ export {
+ configServiceRef as config,
+ httpRouterServiceRef as httpRouter,
+ loggerServiceRef as logger,
+ urlReaderServiceRef as urlReader,
+ cacheServiceRef as cache,
+ databaseServiceRef as database,
+ discoveryServiceRef as discovery,
+ tokenManagerServiceRef as tokenManager,
+ permissionsServiceRef as permissions,
+ schedulerServiceRef as scheduler,
+ rootLoggerServiceRef as rootLogger,
+ pluginMetadataServiceRef as pluginMetadata,
+ lifecycleServiceRef as lifecycle,
+ };
+}
+export { coreServices };
// @public
export function createBackendModule<
@@ -146,10 +165,10 @@ export function createServiceRef(options: {
}): ServiceRef;
// @public (undocumented)
-export const databaseServiceRef: ServiceRef;
+const databaseServiceRef: ServiceRef;
// @public (undocumented)
-export const discoveryServiceRef: ServiceRef;
+const discoveryServiceRef: ServiceRef;
// @public
export type ExtensionPoint = {
@@ -166,10 +185,10 @@ export interface HttpRouterService {
}
// @public (undocumented)
-export const httpRouterServiceRef: ServiceRef;
+const httpRouterServiceRef: ServiceRef;
// @public (undocumented)
-export const lifecycleServiceRef: ServiceRef;
+const lifecycleServiceRef: ServiceRef;
// @public (undocumented)
export interface Logger {
@@ -180,7 +199,7 @@ export interface Logger {
}
// @public (undocumented)
-export const loggerServiceRef: ServiceRef;
+const loggerServiceRef: ServiceRef;
// @public (undocumented)
export function loggerToWinstonLogger(
@@ -189,7 +208,7 @@ export function loggerToWinstonLogger(
): Logger_2;
// @public (undocumented)
-export const permissionsServiceRef: ServiceRef<
+const permissionsServiceRef: ServiceRef<
PermissionAuthorizer | PermissionEvaluator,
'plugin'
>;
@@ -201,13 +220,13 @@ export interface PluginMetadata {
}
// @public (undocumented)
-export const pluginMetadataServiceRef: ServiceRef;
+const pluginMetadataServiceRef: ServiceRef;
// @public (undocumented)
-export const rootLoggerServiceRef: ServiceRef;
+const rootLoggerServiceRef: ServiceRef;
// @public (undocumented)
-export const schedulerServiceRef: ServiceRef;
+const schedulerServiceRef: ServiceRef;
// @public (undocumented)
export type ServiceFactory =
@@ -249,7 +268,7 @@ export type ServiceRef<
};
// @public (undocumented)
-export const tokenManagerServiceRef: ServiceRef;
+const tokenManagerServiceRef: ServiceRef;
// @public (undocumented)
export type TypesToServiceRef = {
@@ -257,5 +276,5 @@ export type TypesToServiceRef = {
};
// @public (undocumented)
-export const urlReaderServiceRef: ServiceRef;
+const urlReaderServiceRef: ServiceRef;
```
diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json
index 2e9c0aa6ec..bd7ebb7bf1 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.5-next.0",
+ "version": "0.1.5-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-plugin-api/src/services/definitions/coreServices.ts b/packages/backend-plugin-api/src/services/definitions/coreServices.ts
new file mode 100644
index 0000000000..d5a5953806
--- /dev/null
+++ b/packages/backend-plugin-api/src/services/definitions/coreServices.ts
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2022 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export { configServiceRef as config } from './configServiceRef';
+export { httpRouterServiceRef as httpRouter } from './httpRouterServiceRef';
+export { loggerServiceRef as logger } from './loggerServiceRef';
+export { urlReaderServiceRef as urlReader } from './urlReaderServiceRef';
+export { cacheServiceRef as cache } from './cacheServiceRef';
+export { databaseServiceRef as database } from './databaseServiceRef';
+export { discoveryServiceRef as discovery } from './discoveryServiceRef';
+export { tokenManagerServiceRef as tokenManager } from './tokenManagerServiceRef';
+export { permissionsServiceRef as permissions } from './permissionsServiceRef';
+export { schedulerServiceRef as scheduler } from './schedulerServiceRef';
+export { rootLoggerServiceRef as rootLogger } from './rootLoggerServiceRef';
+export { pluginMetadataServiceRef as pluginMetadata } from './pluginMetadataServiceRef';
+export { lifecycleServiceRef as lifecycle } from './lifecycleServiceRef';
diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts
index cf997a344d..1ff33362fa 100644
--- a/packages/backend-plugin-api/src/services/definitions/index.ts
+++ b/packages/backend-plugin-api/src/services/definitions/index.ts
@@ -14,21 +14,11 @@
* limitations under the License.
*/
-export { configServiceRef } from './configServiceRef';
-export { httpRouterServiceRef } from './httpRouterServiceRef';
+import * as coreServices from './coreServices';
+
+export { coreServices };
export type { HttpRouterService } from './httpRouterServiceRef';
-export { loggerServiceRef } from './loggerServiceRef';
export type { Logger } from './loggerServiceRef';
-export { urlReaderServiceRef } from './urlReaderServiceRef';
-export { cacheServiceRef } from './cacheServiceRef';
-export { databaseServiceRef } from './databaseServiceRef';
-export { discoveryServiceRef } from './discoveryServiceRef';
-export { tokenManagerServiceRef } from './tokenManagerServiceRef';
-export { permissionsServiceRef } from './permissionsServiceRef';
-export { schedulerServiceRef } from './schedulerServiceRef';
-export { rootLoggerServiceRef } from './rootLoggerServiceRef';
-export { pluginMetadataServiceRef } from './pluginMetadataServiceRef';
-export { lifecycleServiceRef } from './lifecycleServiceRef';
export type {
BackendLifecycle,
BackendLifecycleShutdownHook,
diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md
index 3276c0d453..e3381d2f02 100644
--- a/packages/backend-tasks/CHANGELOG.md
+++ b/packages/backend-tasks/CHANGELOG.md
@@ -1,5 +1,27 @@
# @backstage/backend-tasks
+## 0.4.0-next.1
+
+### Minor Changes
+
+- de8a975911: Changed to use native `AbortController` and `AbortSignal` from Node.js, instead
+ of the one from `node-abort-controller`. This is possible now that the minimum
+ supported Node.js version of the project is 16.
+
+ Note that their interfaces are very slightly different, but typically not in a
+ way that matters to consumers. If you see any typescript errors as a direct
+ result from this, they are compatible with each other in the ways that we
+ interact with them, and should be possible to type-cast across without ill
+ effects.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
## 0.3.8-next.0
### Patch Changes
diff --git a/packages/backend-tasks/api-report.md b/packages/backend-tasks/api-report.md
index 8f53d1e5ae..f7b4782263 100644
--- a/packages/backend-tasks/api-report.md
+++ b/packages/backend-tasks/api-report.md
@@ -3,7 +3,6 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
-import { AbortSignal as AbortSignal_2 } from 'node-abort-controller';
import { Config } from '@backstage/config';
import { DatabaseManager } from '@backstage/backend-common';
import { Duration } from 'luxon';
@@ -29,14 +28,14 @@ export function readTaskScheduleDefinitionFromConfig(
// @public
export type TaskFunction =
- | ((abortSignal: AbortSignal_2) => void | Promise)
+ | ((abortSignal: AbortSignal) => void | Promise)
| (() => void | Promise);
// @public
export interface TaskInvocationDefinition {
fn: TaskFunction;
id: string;
- signal?: AbortSignal_2;
+ signal?: AbortSignal;
}
// @public
diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json
index 1e209a4d10..fd8a9fe8cc 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.8-next.0",
+ "version": "0.4.0-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
@@ -41,7 +41,6 @@
"knex": "^2.0.0",
"lodash": "^4.17.21",
"luxon": "^3.0.0",
- "node-abort-controller": "^3.0.1",
"uuid": "^8.0.0",
"winston": "^3.2.1",
"zod": "^3.9.5"
diff --git a/packages/backend-tasks/src/tasks/LocalTaskWorker.test.ts b/packages/backend-tasks/src/tasks/LocalTaskWorker.test.ts
index b81f7ab1c2..c46743ae59 100644
--- a/packages/backend-tasks/src/tasks/LocalTaskWorker.test.ts
+++ b/packages/backend-tasks/src/tasks/LocalTaskWorker.test.ts
@@ -15,7 +15,6 @@
*/
import { getVoidLogger } from '@backstage/backend-common';
-import { AbortController } from 'node-abort-controller';
import { LocalTaskWorker } from './LocalTaskWorker';
describe('LocalTaskWorker', () => {
diff --git a/packages/backend-tasks/src/tasks/LocalTaskWorker.ts b/packages/backend-tasks/src/tasks/LocalTaskWorker.ts
index be30988aa8..0edec5e84e 100644
--- a/packages/backend-tasks/src/tasks/LocalTaskWorker.ts
+++ b/packages/backend-tasks/src/tasks/LocalTaskWorker.ts
@@ -17,7 +17,6 @@
import { ConflictError } from '@backstage/errors';
import { CronTime } from 'cron';
import { DateTime, Duration } from 'luxon';
-import { AbortController, AbortSignal } from 'node-abort-controller';
import { Logger } from 'winston';
import { TaskFunction, TaskSettingsV2 } from './types';
import { delegateAbortController, sleep } from './util';
diff --git a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts
index d61948a929..1847370d2b 100644
--- a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts
+++ b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts
@@ -18,7 +18,6 @@ import { getVoidLogger } from '@backstage/backend-common';
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import { ConflictError, NotFoundError } from '@backstage/errors';
import { Duration } from 'luxon';
-import { AbortSignal } from 'node-abort-controller';
import { migrateBackendTasks } from '../database/migrateBackendTasks';
import {
parseDuration,
diff --git a/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts b/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts
index bedf03d08a..81b0345c2c 100644
--- a/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts
+++ b/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts
@@ -16,7 +16,6 @@
import { Knex } from 'knex';
import { Duration } from 'luxon';
-import { AbortSignal } from 'node-abort-controller';
import { Logger } from 'winston';
import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables';
import { sleep } from './util';
diff --git a/packages/backend-tasks/src/tasks/TaskWorker.test.ts b/packages/backend-tasks/src/tasks/TaskWorker.test.ts
index e631dcce54..28dbcc4337 100644
--- a/packages/backend-tasks/src/tasks/TaskWorker.test.ts
+++ b/packages/backend-tasks/src/tasks/TaskWorker.test.ts
@@ -17,7 +17,6 @@
import { getVoidLogger } from '@backstage/backend-common';
import { TestDatabases } from '@backstage/backend-test-utils';
import { Duration } from 'luxon';
-import { AbortController } from 'node-abort-controller';
import waitForExpect from 'wait-for-expect';
import { migrateBackendTasks } from '../database/migrateBackendTasks';
import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables';
diff --git a/packages/backend-tasks/src/tasks/TaskWorker.ts b/packages/backend-tasks/src/tasks/TaskWorker.ts
index f56c03c3d5..483fb1a02d 100644
--- a/packages/backend-tasks/src/tasks/TaskWorker.ts
+++ b/packages/backend-tasks/src/tasks/TaskWorker.ts
@@ -18,7 +18,6 @@ import { ConflictError, NotFoundError } from '@backstage/errors';
import { CronTime } from 'cron';
import { Knex } from 'knex';
import { DateTime, Duration } from 'luxon';
-import { AbortSignal } from 'node-abort-controller';
import { v4 as uuid } from 'uuid';
import { Logger } from 'winston';
import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables';
diff --git a/packages/backend-tasks/src/tasks/types.ts b/packages/backend-tasks/src/tasks/types.ts
index dbf2595e1d..6ec5165aec 100644
--- a/packages/backend-tasks/src/tasks/types.ts
+++ b/packages/backend-tasks/src/tasks/types.ts
@@ -17,7 +17,6 @@
import { HumanDuration } from '@backstage/types';
import { CronTime } from 'cron';
import { Duration } from 'luxon';
-import { AbortSignal } from 'node-abort-controller';
import { z } from 'zod';
/**
diff --git a/packages/backend-tasks/src/tasks/util.test.ts b/packages/backend-tasks/src/tasks/util.test.ts
index ceeeba14d6..e2536abb88 100644
--- a/packages/backend-tasks/src/tasks/util.test.ts
+++ b/packages/backend-tasks/src/tasks/util.test.ts
@@ -16,12 +16,11 @@
import knexFactory, { Knex } from 'knex';
import { Duration } from 'luxon';
-import { AbortController } from 'node-abort-controller';
import { delegateAbortController, nowPlus, sleep, validateId } from './util';
class KnexBuilder {
public build(client: string): Knex {
- return knexFactory({ client });
+ return knexFactory({ client, useNullAsDefault: true });
}
}
diff --git a/packages/backend-tasks/src/tasks/util.ts b/packages/backend-tasks/src/tasks/util.ts
index 2561203318..70d67a9fbe 100644
--- a/packages/backend-tasks/src/tasks/util.ts
+++ b/packages/backend-tasks/src/tasks/util.ts
@@ -17,7 +17,6 @@
import { InputError } from '@backstage/errors';
import { Knex } from 'knex';
import { DateTime, Duration } from 'luxon';
-import { AbortController, AbortSignal } from 'node-abort-controller';
// Keep the IDs compatible with e.g. Prometheus labels
export function validateId(id: string) {
diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md
index 77de87b476..47053ba391 100644
--- a/packages/backend-test-utils/CHANGELOG.md
+++ b/packages/backend-test-utils/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/backend-test-utils
+## 0.1.31-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/cli@0.21.2-next.1
+ - @backstage/backend-app-api@0.2.4-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/config@1.0.5-next.1
+
## 0.1.31-next.0
### Patch Changes
diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json
index 6dde2fe3d4..063088776d 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.31-next.0",
+ "version": "0.1.31-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md
index d30c720c73..034d27c5cd 100644
--- a/packages/backend/CHANGELOG.md
+++ b/packages/backend/CHANGELOG.md
@@ -1,5 +1,52 @@
# example-backend
+## 0.2.78-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/plugin-kafka-backend@0.2.32-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/plugin-search-backend-node@1.0.5-next.1
+ - @backstage/plugin-jenkins-backend@0.1.29-next.1
+ - @backstage/plugin-scaffolder-backend@1.8.1-next.1
+ - @backstage/plugin-explore-backend@0.0.1-next.0
+ - @backstage/plugin-proxy-backend@0.2.33-next.1
+ - @backstage/plugin-app-backend@0.3.39-next.1
+ - @backstage/plugin-auth-backend@0.17.2-next.1
+ - @backstage/plugin-auth-node@0.2.8-next.1
+ - @backstage/plugin-azure-devops-backend@0.3.18-next.1
+ - @backstage/plugin-azure-sites-backend@0.1.1-next.1
+ - @backstage/plugin-badges-backend@0.1.33-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/plugin-code-coverage-backend@0.2.5-next.1
+ - @backstage/plugin-events-backend@0.2.0-next.1
+ - @backstage/plugin-graphql-backend@0.1.29-next.1
+ - @backstage/plugin-kubernetes-backend@0.8.1-next.1
+ - @backstage/plugin-permission-backend@0.5.14-next.1
+ - @backstage/plugin-permission-node@0.7.2-next.1
+ - @backstage/plugin-playlist-backend@0.2.2-next.1
+ - @backstage/plugin-rollbar-backend@0.1.36-next.1
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.1
+ - @backstage/plugin-search-backend@1.1.2-next.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.1
+ - @backstage/plugin-search-backend-module-pg@0.4.3-next.1
+ - @backstage/plugin-tech-insights-backend@0.5.5-next.1
+ - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.1
+ - @backstage/plugin-tech-insights-node@0.3.7-next.1
+ - @backstage/plugin-techdocs-backend@1.4.2-next.1
+ - @backstage/plugin-todo-backend@0.1.36-next.1
+ - example-app@0.2.78-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-client@1.2.0-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/plugin-events-node@0.2.0-next.1
+ - @backstage/plugin-permission-common@0.7.2-next.1
+ - @backstage/plugin-search-common@1.1.2-next.1
+
## 0.2.78-next.0
### Patch Changes
diff --git a/packages/backend/package.json b/packages/backend/package.json
index e7d2d5d7b7..6277a96e5c 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "example-backend",
- "version": "0.2.78-next.0",
+ "version": "0.2.78-next.1",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -43,6 +43,7 @@
"@backstage/plugin-code-coverage-backend": "workspace:^",
"@backstage/plugin-events-backend": "workspace:^",
"@backstage/plugin-events-node": "workspace:^",
+ "@backstage/plugin-explore-backend": "workspace:^",
"@backstage/plugin-graphql-backend": "workspace:^",
"@backstage/plugin-jenkins-backend": "workspace:^",
"@backstage/plugin-kafka-backend": "workspace:^",
diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts
index bacae07917..371ce40358 100644
--- a/packages/backend/src/index.ts
+++ b/packages/backend/src/index.ts
@@ -45,6 +45,7 @@ import catalog from './plugins/catalog';
import catalogEventBasedProviders from './plugins/catalogEventBasedProviders';
import codeCoverage from './plugins/codecoverage';
import events from './plugins/events';
+import explore from './plugins/explore';
import kubernetes from './plugins/kubernetes';
import kafka from './plugins/kafka';
import rollbar from './plugins/rollbar';
@@ -144,6 +145,7 @@ async function main() {
const permissionEnv = useHotMemoize(module, () => createEnv('permission'));
const playlistEnv = useHotMemoize(module, () => createEnv('playlist'));
const eventsEnv = useHotMemoize(module, () => createEnv('events'));
+ const exploreEnv = useHotMemoize(module, () => createEnv('explore'));
const eventBasedEntityProviders = await catalogEventBasedProviders(
catalogEnv,
@@ -172,6 +174,7 @@ async function main() {
apiRouter.use('/jenkins', await jenkins(jenkinsEnv));
apiRouter.use('/permission', await permission(permissionEnv));
apiRouter.use('/playlist', await playlist(playlistEnv));
+ apiRouter.use('/explore', await explore(exploreEnv));
apiRouter.use(notFoundHandler());
const service = createServiceBuilder(module)
diff --git a/packages/backend/src/plugins/explore.ts b/packages/backend/src/plugins/explore.ts
new file mode 100644
index 0000000000..131f9461fa
--- /dev/null
+++ b/packages/backend/src/plugins/explore.ts
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2020 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {
+ createRouter,
+ exampleTools,
+ StaticExploreToolProvider,
+} from '@backstage/plugin-explore-backend';
+import { Router } from 'express';
+import { PluginEnvironment } from '../types';
+
+export default async function createPlugin(
+ env: PluginEnvironment,
+): Promise {
+ return await createRouter({
+ logger: env.logger,
+ toolProvider: StaticExploreToolProvider.fromData(exampleTools),
+ });
+}
diff --git a/packages/backend/src/plugins/search.ts b/packages/backend/src/plugins/search.ts
index 084b1a54e5..0e6982545f 100644
--- a/packages/backend/src/plugins/search.ts
+++ b/packages/backend/src/plugins/search.ts
@@ -16,6 +16,7 @@
import { useHotCleanup } from '@backstage/backend-common';
import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend';
+import { ToolDocumentCollatorFactory } from '@backstage/plugin-explore-backend';
import { createRouter } from '@backstage/plugin-search-backend';
import { ElasticSearchSearchEngine } from '@backstage/plugin-search-backend-module-elasticsearch';
import { PgSearchEngine } from '@backstage/plugin-search-backend-module-pg';
@@ -84,6 +85,14 @@ export default async function createPlugin(
}),
});
+ indexBuilder.addCollator({
+ schedule,
+ factory: ToolDocumentCollatorFactory.fromConfig(env.config, {
+ discovery: env.discovery,
+ logger: env.logger,
+ }),
+ });
+
// The scheduler controls when documents are gathered from collators and sent
// to the search engine for indexing.
const { scheduler } = await indexBuilder.build();
diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md
index 71f05de695..3a7bbc124a 100644
--- a/packages/catalog-client/CHANGELOG.md
+++ b/packages/catalog-client/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/catalog-client
+## 1.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
## 1.2.0-next.0
### Minor Changes
diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json
index 6093d6a891..3f2ffe255a 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.2.0-next.0",
+ "version": "1.2.0-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md
index 0383ec3194..1f4b669120 100644
--- a/packages/catalog-model/CHANGELOG.md
+++ b/packages/catalog-model/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/catalog-model
+## 1.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+
## 1.1.4-next.0
### Patch Changes
diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json
index 4127936c26..e043a43165 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.4-next.0",
+ "version": "1.1.4-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/cli-common/src/paths.ts b/packages/cli-common/src/paths.ts
index 2b1ca34ca5..bdd0245c76 100644
--- a/packages/cli-common/src/paths.ts
+++ b/packages/cli-common/src/paths.ts
@@ -64,7 +64,7 @@ export function findRootPath(
): string | undefined {
let path = searchDir;
- // Some sanity check to avoid infinite loop
+ // Some confidence check to avoid infinite loop
for (let i = 0; i < 1000; i++) {
const packagePath = resolvePath(path, 'package.json');
const exists = fs.existsSync(packagePath);
diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md
index 8902ec60b6..5a1e863014 100644
--- a/packages/cli/CHANGELOG.md
+++ b/packages/cli/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/cli
+## 0.21.2-next.1
+
+### Patch Changes
+
+- 8fffe42708: JSX and React Fast Refresh transforms are no longer enabled when bundling backend code.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config-loader@1.1.7-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/release-manifests@0.0.8-next.0
+ - @backstage/cli-common@0.1.10
+ - @backstage/errors@1.1.4-next.1
+
## 0.21.2-next.0
### Patch 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/config/eslint-factory.js b/packages/cli/config/eslint-factory.js
index e213f58e4e..a40aa79fb3 100644
--- a/packages/cli/config/eslint-factory.js
+++ b/packages/cli/config/eslint-factory.js
@@ -231,7 +231,7 @@ function createConfigForRole(dir, role, extraConfig = {}) {
},
restrictedImports: [
{
- // Importing the entire MUI icons packages kills build performance as the list of icons is huge.
+ // Importing the entire MUI icons packages impedes build performance as the list of icons is huge.
name: '@material-ui/icons',
message: "Please import '@material-ui/icons/' instead.",
},
diff --git a/packages/cli/config/jest.js b/packages/cli/config/jest.js
index 4b9fcd3d8e..148d574441 100644
--- a/packages/cli/config/jest.js
+++ b/packages/cli/config/jest.js
@@ -82,7 +82,7 @@ async function getProjectConfig(targetPath, displayName) {
let closestPkgJson = undefined;
let currentPath = targetPath;
- // Some sanity check to avoid infinite loop
+ // Some confidence check to avoid infinite loop
for (let i = 0; i < 100; i++) {
const packagePath = path.resolve(currentPath, 'package.json');
const exists = fs.pathExistsSync(packagePath);
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 1bba3b41a9..ca2bdfb56c 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.2-next.0",
+ "version": "0.21.2-next.1",
"publishConfig": {
"access": "public"
},
@@ -39,10 +39,10 @@
"@manypkg/get-packages": "^1.1.3",
"@octokit/request": "^6.0.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
- "@rollup/plugin-commonjs": "^22.0.0",
- "@rollup/plugin-json": "^4.1.0",
+ "@rollup/plugin-commonjs": "^23.0.0",
+ "@rollup/plugin-json": "^5.0.0",
"@rollup/plugin-node-resolve": "^13.0.6",
- "@rollup/plugin-yaml": "^3.1.0",
+ "@rollup/plugin-yaml": "^4.0.0",
"@spotify/eslint-config-base": "^14.0.0",
"@spotify/eslint-config-react": "^14.0.0",
"@spotify/eslint-config-typescript": "^14.0.0",
@@ -96,7 +96,7 @@
"json-schema": "^0.4.0",
"lodash": "^4.17.21",
"mini-css-extract-plugin": "^2.4.2",
- "minimatch": "5.1.0",
+ "minimatch": "^5.1.1",
"node-fetch": "^2.6.7",
"node-libs-browser": "^2.2.1",
"npm-packlist": "^5.0.0",
diff --git a/packages/cli/src/lib/builder/packager.test.ts b/packages/cli/src/lib/builder/packager.test.ts
index 6264eb57ac..ea38aa82d9 100644
--- a/packages/cli/src/lib/builder/packager.test.ts
+++ b/packages/cli/src/lib/builder/packager.test.ts
@@ -31,7 +31,7 @@ describe('formatErrorMessage with esbuild plugin error', () => {
plugin: 'esbuild',
message: 'test',
id: 'index.js',
- errors: [{ text: 'Dummy', location: { line: 1, column: 1 } }],
+ errors: [{ text: 'Sample', location: { line: 1, column: 1 } }],
});
expect(msg).toContain('test\n\n');
});
diff --git a/packages/cli/src/lib/builder/plugins.ts b/packages/cli/src/lib/builder/plugins.ts
index 3b1cbe4f1c..e68758c1c8 100644
--- a/packages/cli/src/lib/builder/plugins.ts
+++ b/packages/cli/src/lib/builder/plugins.ts
@@ -114,7 +114,7 @@ export function forwardFileImports(options: ForwardFileImportsOptions): Plugin {
return false;
}
- // Sanity check, dunno if this can happen
+ // Confidence check, dunno if this can happen
if (!importer) {
throw new Error(`Unknown importer of file module ${id}`);
}
diff --git a/packages/cli/src/lib/bundler/LinkedPackageResolvePlugin.test.ts b/packages/cli/src/lib/bundler/LinkedPackageResolvePlugin.test.ts
index 450126e6fa..a64630d6fb 100644
--- a/packages/cli/src/lib/bundler/LinkedPackageResolvePlugin.test.ts
+++ b/packages/cli/src/lib/bundler/LinkedPackageResolvePlugin.test.ts
@@ -80,7 +80,7 @@ describe('LinkedPackageResolvePlugin', () => {
const callbackFalse = jest.fn();
tap(
{
- request: 'dummy',
+ request: 'sample',
path: false,
},
'some-context',
diff --git a/packages/cli/src/lib/bundler/transforms.ts b/packages/cli/src/lib/bundler/transforms.ts
index 0a4dddcaf5..9a93f550dd 100644
--- a/packages/cli/src/lib/bundler/transforms.ts
+++ b/packages/cli/src/lib/bundler/transforms.ts
@@ -62,14 +62,16 @@ export const transforms = (options: TransformOptions): Transforms => {
externalHelpers: !isBackend,
parser: {
syntax: 'typescript',
- tsx: true,
+ tsx: !isBackend,
dynamicImport: true,
},
transform: {
- react: {
- runtime: 'automatic',
- refresh: isDev,
- },
+ react: isBackend
+ ? undefined
+ : {
+ runtime: 'automatic',
+ refresh: isDev,
+ },
},
},
},
@@ -88,14 +90,16 @@ export const transforms = (options: TransformOptions): Transforms => {
externalHelpers: !isBackend,
parser: {
syntax: 'ecmascript',
- jsx: true,
+ jsx: !isBackend,
dynamicImport: true,
},
transform: {
- react: {
- runtime: 'automatic',
- refresh: isDev,
- },
+ react: isBackend
+ ? undefined
+ : {
+ runtime: 'automatic',
+ refresh: isDev,
+ },
},
},
},
@@ -119,7 +123,7 @@ export const transforms = (options: TransformOptions): Transforms => {
externalHelpers: !isBackend,
parser: {
syntax: 'ecmascript',
- jsx: true,
+ jsx: !isBackend,
dynamicImport: true,
},
},
@@ -188,11 +192,13 @@ export const transforms = (options: TransformOptions): Transforms => {
const plugins = new Array();
if (isDev) {
- plugins.push(
- new ReactRefreshPlugin({
- overlay: { sockProtocol: 'ws' },
- }),
- );
+ if (!isBackend) {
+ plugins.push(
+ new ReactRefreshPlugin({
+ overlay: { sockProtocol: 'ws' },
+ }),
+ );
+ }
} else {
plugins.push(
new MiniCssExtractPlugin({
diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md
index e079cb345b..62cd2b0ff9 100644
--- a/packages/config-loader/CHANGELOG.md
+++ b/packages/config-loader/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/config-loader
+## 1.1.7-next.1
+
+### Patch Changes
+
+- 40e7e6e1a2: Updated dependency `typescript-json-schema` to `^0.55.0`.
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/cli-common@0.1.10
+ - @backstage/errors@1.1.4-next.1
+
## 1.1.7-next.0
### Patch Changes
diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json
index 5a128cd0b6..b39d00259d 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.7-next.0",
+ "version": "1.1.7-next.1",
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js",
diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md
index cc4d1571ee..212bf7e008 100644
--- a/packages/config/CHANGELOG.md
+++ b/packages/config/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/config
+## 1.0.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.0.2-next.1
+
## 1.0.5-next.0
### Patch Changes
diff --git a/packages/config/package.json b/packages/config/package.json
index 274e7f016e..5db3832789 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.5-next.0",
+ "version": "1.0.5-next.1",
"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 63bb4511a1..5307464eed 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.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/config@1.0.5-next.1
+
## 1.2.1-next.0
### Patch Changes
diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json
index 9a10514ab7..5f548374f4 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.1-next.0",
+ "version": "1.2.1-next.1",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
@@ -40,7 +40,7 @@
"canvas": "^2.10.2",
"prop-types": "^15.7.2",
"react-use": "^17.2.4",
- "zen-observable": "^0.9.0",
+ "zen-observable": "^0.10.0",
"zod": "^3.11.6"
},
"peerDependencies": {
diff --git a/packages/core-app-api/src/app/AppManager.test.tsx b/packages/core-app-api/src/app/AppManager.test.tsx
index b03fedd89a..5a29cc3bfd 100644
--- a/packages/core-app-api/src/app/AppManager.test.tsx
+++ b/packages/core-app-api/src/app/AppManager.test.tsx
@@ -21,7 +21,7 @@ import {
withLogCollector,
} from '@backstage/test-utils';
import { render, screen } from '@testing-library/react';
-import React, { PropsWithChildren } from 'react';
+import React, { PropsWithChildren, ReactNode } from 'react';
import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
import {
configApiRef,
@@ -166,19 +166,20 @@ describe('Integration Test', () => {
};
const icons = {} as AppIcons;
+ const themes = [
+ {
+ id: 'light',
+ title: 'Light Theme',
+ variant: 'light' as const,
+ Provider: ({ children }: { children: ReactNode }) => <>{children}>,
+ },
+ ];
it('runs happy paths', async () => {
const app = new AppManager({
apis: [noOpAnalyticsApi],
defaultApis: [],
- themes: [
- {
- id: 'light',
- title: 'Light Theme',
- variant: 'light',
- Provider: ({ children }) => <>{children}>,
- },
- ],
+ themes,
icons,
plugins: [],
components,
@@ -226,14 +227,7 @@ describe('Integration Test', () => {
const app = new AppManager({
apis: [noOpAnalyticsApi],
defaultApis: [],
- themes: [
- {
- id: 'light',
- title: 'Light Theme',
- variant: 'light',
- Provider: ({ children }) => <>{children}>,
- },
- ],
+ themes,
icons,
plugins: [],
components,
@@ -284,14 +278,7 @@ describe('Integration Test', () => {
const app = new AppManager({
apis,
defaultApis: [],
- themes: [
- {
- id: 'light',
- title: 'Light Theme',
- variant: 'light',
- Provider: ({ children }) => <>{children}>,
- },
- ],
+ themes,
icons,
plugins: [
createPlugin({
@@ -347,14 +334,7 @@ describe('Integration Test', () => {
const app = new AppManager({
apis,
defaultApis: [],
- themes: [
- {
- id: 'light',
- title: 'Light Theme',
- variant: 'light',
- Provider: ({ children }) => <>{children}>,
- },
- ],
+ themes,
icons,
plugins: [
createPlugin({
@@ -417,6 +397,44 @@ describe('Integration Test', () => {
});
});
+ it('feature flags should be available immediately', async () => {
+ const app = new AppManager({
+ apis: [
+ createApiFactory({
+ api: featureFlagsApiRef,
+ deps: { configApi: configApiRef },
+ factory() {
+ return new LocalStorageFeatureFlags();
+ },
+ }),
+ ],
+ defaultApis: [],
+ themes,
+ icons,
+ plugins: [createPlugin({ id: 'test', featureFlags: [{ name: 'foo' }] })],
+ components,
+ configLoader: async () => [],
+ });
+
+ const Provider = app.getProvider();
+ const Router = app.getRouter();
+
+ const FeatureFlags = () => {
+ const featureFlags = useApi(featureFlagsApiRef).getRegisteredFlags();
+ return
Flags: {featureFlags.map(f => f.name).join(',')}
;
+ };
+
+ await renderWithEffects(
+
+
+
+
+ ,
+ );
+
+ expect(screen.getByText('Flags: foo')).toBeInTheDocument();
+ });
+
it('should prevent duplicate feature flags from being rendered', async () => {
const p1 = createPlugin({
id: 'p1',
@@ -499,14 +517,7 @@ describe('Integration Test', () => {
const app = new AppManager({
apis,
defaultApis: [],
- themes: [
- {
- id: 'light',
- title: 'Light Theme',
- variant: 'light',
- Provider: ({ children }) => <>{children}>,
- },
- ],
+ themes,
icons,
plugins: [],
components,
@@ -560,14 +571,7 @@ describe('Integration Test', () => {
const app = new AppManager({
apis: [],
defaultApis: [],
- themes: [
- {
- id: 'light',
- title: 'Light Theme',
- variant: 'light',
- Provider: ({ children }) => <>{children}>,
- },
- ],
+ themes,
icons,
plugins: [],
components,
@@ -610,14 +614,7 @@ describe('Integration Test', () => {
const app = new AppManager({
apis: [],
defaultApis: [],
- themes: [
- {
- id: 'light',
- title: 'Light Theme',
- variant: 'light',
- Provider: ({ children }) => <>{children}>,
- },
- ],
+ themes,
icons,
plugins: [],
components,
diff --git a/packages/core-app-api/src/app/AppManager.tsx b/packages/core-app-api/src/app/AppManager.tsx
index 8c2e09c903..b7eafb0100 100644
--- a/packages/core-app-api/src/app/AppManager.tsx
+++ b/packages/core-app-api/src/app/AppManager.tsx
@@ -21,8 +21,8 @@ import React, {
PropsWithChildren,
ReactElement,
useContext,
- useEffect,
useMemo,
+ useRef,
useState,
} from 'react';
import { Route, Routes } from 'react-router-dom';
@@ -116,7 +116,7 @@ function getBasePath(configApi: Config) {
function readBasePath(configApi: ConfigApi) {
let { pathname } = new URL(
configApi.getOptionalString('app.baseUrl') ?? '/',
- 'http://dummy.dev', // baseUrl can be specified as just a path
+ 'http://sample.dev', // baseUrl can be specified as just a path
);
pathname = pathname.replace(/\/*$/, '');
return pathname;
@@ -230,6 +230,7 @@ export class AppManager implements BackstageApp {
let routesHaveBeenValidated = false;
const Provider = ({ children }: PropsWithChildren<{}>) => {
+ const needsFeatureFlagRegistrationRef = useRef(true);
const appThemeApi = useMemo(
() => AppThemeSelector.createWithStorage(this.themes),
[],
@@ -284,10 +285,21 @@ export class AppManager implements BackstageApp {
this.configApi = api;
}
- useEffect(() => {
- if (hasConfigApi) {
- const featureFlagsApi = this.getApiHolder().get(featureFlagsApiRef)!;
+ if ('node' in loadedConfig) {
+ // Loading or error
+ return loadedConfig.node;
+ }
+ // We can't register feature flags just after the element traversal, because the
+ // config API isn't available yet and implementations frequently depend on it.
+ // Instead we make it happen immediately, to make sure all flags are available
+ // for the first render.
+ if (hasConfigApi && needsFeatureFlagRegistrationRef.current) {
+ needsFeatureFlagRegistrationRef.current = false;
+
+ const featureFlagsApi = this.getApiHolder().get(featureFlagsApiRef)!;
+
+ if (featureFlagsApi) {
for (const plugin of this.plugins.values()) {
if ('getFeatureFlags' in plugin) {
for (const flag of plugin.getFeatureFlags()) {
@@ -319,11 +331,6 @@ export class AppManager implements BackstageApp {
}
}
}
- }, [hasConfigApi, loadedConfig, featureFlags]);
-
- if ('node' in loadedConfig) {
- // Loading or error
- return loadedConfig.node;
}
const { ThemeProvider = AppThemeProvider } = this.components;
diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md
index 051dc9a67d..af438fab0c 100644
--- a/packages/core-components/CHANGELOG.md
+++ b/packages/core-components/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/core-components
+## 0.12.1-next.1
+
+### Patch Changes
+
+- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
+- c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`.
+- Updated dependencies
+ - @backstage/version-bridge@1.0.3-next.0
+ - @backstage/core-plugin-api@1.1.1-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/theme@0.2.16
+
## 0.12.1-next.0
### Patch Changes
diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md
index 248b9e227c..9ed964db44 100644
--- a/packages/core-components/api-report.md
+++ b/packages/core-components/api-report.md
@@ -52,10 +52,10 @@ import { Theme } from '@material-ui/core/styles';
import { TooltipProps } from '@material-ui/core/Tooltip';
import { WithStyles } from '@material-ui/core/styles';
-// @public (undocumented)
+// @public
export function AlertDisplay(props: AlertDisplayProps): JSX.Element | null;
-// @public
+// @public (undocumented)
export type AlertDisplayProps = {
anchorOrigin?: {
vertical: 'top' | 'bottom';
diff --git a/packages/core-components/package.json b/packages/core-components/package.json
index 11aebfbc0f..56e124d094 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.1-next.0",
+ "version": "0.12.1-next.1",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
@@ -41,7 +41,7 @@
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
- "@react-hookz/web": "^15.0.0",
+ "@react-hookz/web": "^19.0.0",
"@types/react-sparklines": "^1.7.0",
"@types/react-text-truncate": "^0.14.0",
"ansi-regex": "^6.0.1",
@@ -67,7 +67,7 @@
"react-virtualized-auto-sizer": "^1.0.6",
"react-window": "^1.8.6",
"remark-gfm": "^3.0.1",
- "zen-observable": "^0.9.0",
+ "zen-observable": "^0.10.0",
"zod": "^3.11.6"
},
"peerDependencies": {
diff --git a/packages/core-components/src/components/AlertDisplay/AlertDisplay.tsx b/packages/core-components/src/components/AlertDisplay/AlertDisplay.tsx
index 3af261da23..83c11647bb 100644
--- a/packages/core-components/src/components/AlertDisplay/AlertDisplay.tsx
+++ b/packages/core-components/src/components/AlertDisplay/AlertDisplay.tsx
@@ -13,14 +13,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import React, { useEffect, useState } from 'react';
-import Snackbar from '@material-ui/core/Snackbar';
+import { alertApiRef, AlertMessage, useApi } from '@backstage/core-plugin-api';
import IconButton from '@material-ui/core/IconButton';
+import Snackbar from '@material-ui/core/Snackbar';
+import Typography from '@material-ui/core/Typography';
import CloseIcon from '@material-ui/icons/Close';
import { Alert } from '@material-ui/lab';
-import { AlertMessage, useApi, alertApiRef } from '@backstage/core-plugin-api';
import pluralize from 'pluralize';
+import React, { useEffect, useState } from 'react';
+
+// TODO: improve on this and promote to a shared component for use by all apps.
+
+/** @public */
+export type AlertDisplayProps = {
+ anchorOrigin?: {
+ vertical: 'top' | 'bottom';
+ horizontal: 'left' | 'center' | 'right';
+ };
+};
/**
* Displays alerts from {@link @backstage/core-plugin-api#AlertApi}
@@ -30,17 +40,6 @@ import pluralize from 'pluralize';
*
* Shown as SnackBar at the center top of the page by default. Configurable with props.
*/
-
-// TODO: improve on this and promote to a shared component for use by all apps.
-
-export type AlertDisplayProps = {
- anchorOrigin?: {
- vertical: 'top' | 'bottom';
- horizontal: 'left' | 'center' | 'right';
- };
-};
-
-/** @public */
export function AlertDisplay(props: AlertDisplayProps) {
const [messages, setMessages] = useState>([]);
const alertApi = useApi(alertApiRef);
@@ -82,15 +81,15 @@ export function AlertDisplay(props: AlertDisplayProps) {
}
severity={firstMessage.severity}
>
-
- {firstMessage.message.toString()}
+
+ {String(firstMessage.message)}
{messages.length > 1 && (
{` (${messages.length - 1} older ${pluralize(
'message',
messages.length - 1,
)})`}
)}
-
+
);
diff --git a/packages/core-components/src/components/Avatar/Avatar.test.tsx b/packages/core-components/src/components/Avatar/Avatar.test.tsx
index d7bbf712fe..4c726eb785 100644
--- a/packages/core-components/src/components/Avatar/Avatar.test.tsx
+++ b/packages/core-components/src/components/Avatar/Avatar.test.tsx
@@ -29,7 +29,9 @@ describe('', () => {
it('generates a background color', async () => {
const bgcolor = stringToColor('John Doe');
const { getByText } = render();
- expect(getByText('JD')).toHaveStyle(`background-color: ${bgcolor}`);
+ expect(getByText('JD').parentElement).toHaveStyle(
+ `background-color: ${bgcolor}`,
+ );
});
it('does not generate a background color when a picture is given', async () => {
diff --git a/packages/core-components/src/components/Avatar/Avatar.tsx b/packages/core-components/src/components/Avatar/Avatar.tsx
index af8dabf554..950f57668e 100644
--- a/packages/core-components/src/components/Avatar/Avatar.tsx
+++ b/packages/core-components/src/components/Avatar/Avatar.tsx
@@ -13,9 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import React, { CSSProperties } from 'react';
-import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';
import MaterialAvatar from '@material-ui/core/Avatar';
+import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';
+import Typography from '@material-ui/core/Typography';
+import React, { CSSProperties } from 'react';
+
import { extractInitials, stringToColor } from './utils';
/** @public */
@@ -28,6 +30,8 @@ const useStyles = makeStyles(
width: '4rem',
height: '4rem',
color: '#fff',
+ },
+ avatarText: {
fontWeight: theme.typography.fontWeightBold,
letterSpacing: '1px',
textTransform: 'uppercase',
@@ -68,6 +72,11 @@ export function Avatar(props: AvatarProps) {
const { displayName, picture, customStyles } = props;
const classes = useStyles();
let styles = { ...customStyles };
+ const fontStyles = {
+ fontFamily: styles.fontFamily,
+ fontSize: styles.fontSize,
+ fontWeight: styles.fontWeight,
+ };
// We only calculate the background color if there's not an avatar
// picture. If there is a picture, it might have a transparent
// background and we don't know whether the calculated background
@@ -85,7 +94,16 @@ export function Avatar(props: AvatarProps) {
className={classes.avatar}
style={styles}
>
- {displayName && extractInitials(displayName)}
+ {displayName && (
+
+ {extractInitials(displayName)}
+
+ )}
);
}
diff --git a/packages/core-components/src/components/CodeSnippet/CodeSnippet.tsx b/packages/core-components/src/components/CodeSnippet/CodeSnippet.tsx
index fd83797a88..3270cac176 100644
--- a/packages/core-components/src/components/CodeSnippet/CodeSnippet.tsx
+++ b/packages/core-components/src/components/CodeSnippet/CodeSnippet.tsx
@@ -13,16 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import React from 'react';
-import { useTheme } from '@material-ui/core/styles';
import { BackstageTheme } from '@backstage/theme';
-import { CopyTextButton } from '../CopyTextButton';
+import Box from '@material-ui/core/Box';
+import { useTheme } from '@material-ui/core/styles';
+import React from 'react';
import type {} from 'react-syntax-highlighter';
-import { default as LightAsync } from 'react-syntax-highlighter/dist/esm/light-async';
+import LightAsync from 'react-syntax-highlighter/dist/esm/light-async';
import dark from 'react-syntax-highlighter/dist/esm/styles/hljs/dark';
import docco from 'react-syntax-highlighter/dist/esm/styles/hljs/docco';
+import { CopyTextButton } from '../CopyTextButton';
+
/**
* Properties for {@link CodeSnippet}
*
@@ -87,7 +88,7 @@ export function CodeSnippet(props: CodeSnippetProps) {
const highlightColor = theme.palette.type === 'dark' ? '#256bf3' : '#e6ffed';
return (
-
+
{showCopyCodeButton && (
-
+
-
+
)}
-
+
);
}
diff --git a/packages/core-components/src/components/DismissableBanner/DismissableBanner.tsx b/packages/core-components/src/components/DismissableBanner/DismissableBanner.tsx
index 99113fcdb1..c18f9b605f 100644
--- a/packages/core-components/src/components/DismissableBanner/DismissableBanner.tsx
+++ b/packages/core-components/src/components/DismissableBanner/DismissableBanner.tsx
@@ -58,7 +58,7 @@ const useStyles = makeStyles(
zIndex: 'unset',
},
icon: {
- fontSize: 20,
+ fontSize: theme.typography.h6.fontSize,
},
content: {
width: '100%',
diff --git a/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx b/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx
index 59596e6d2b..1910d6e7fd 100644
--- a/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx
+++ b/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx
@@ -13,15 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import React from 'react';
-import { makeStyles } from '@material-ui/core/styles';
-import Button from '@material-ui/core/Button';
-import Typography from '@material-ui/core/Typography';
import { BackstageTheme } from '@backstage/theme';
+import Box from '@material-ui/core/Box';
+import Button from '@material-ui/core/Button';
+import { makeStyles } from '@material-ui/core/styles';
+import Typography from '@material-ui/core/Typography';
+import React from 'react';
+
+import { CodeSnippet } from '../CodeSnippet';
import { Link } from '../Link';
import { EmptyState } from './EmptyState';
-import { CodeSnippet } from '../CodeSnippet';
const COMPONENT_YAML_TEMPLATE = `apiVersion: backstage.io/v1alpha1
kind: Component
@@ -109,7 +110,7 @@ export function MissingAnnotationEmptyState(props: Props) {
Add the annotation to your component YAML as shown in the
highlighted example below:
-
+
-
+
diff --git a/packages/core-components/src/components/FeatureDiscovery/FeatureCalloutCircular.tsx b/packages/core-components/src/components/FeatureDiscovery/FeatureCalloutCircular.tsx
index cac3c8166b..b967ee0a9f 100644
--- a/packages/core-components/src/components/FeatureDiscovery/FeatureCalloutCircular.tsx
+++ b/packages/core-components/src/components/FeatureDiscovery/FeatureCalloutCircular.tsx
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+import Box from '@material-ui/core/Box';
import ClickAwayListener from '@material-ui/core/ClickAwayListener';
import { makeStyles } from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
@@ -26,6 +26,7 @@ import React, {
useState,
} from 'react';
import { createPortal } from 'react-dom';
+
import { usePortal } from './lib/usePortal';
import { useShowCallout } from './lib/useShowCallout';
@@ -168,14 +169,14 @@ export function FeatureCalloutCircular(props: PropsWithChildren) {
return (
<>
-
+
{children}
-
+
{createPortal(
-
+
<>
-
) {
role="button"
tabIndex={0}
>
-
-
-
+
+ ) {
{title}
{description}
-
+
>
- ,
+ ,
portalElement,
)}
>
diff --git a/packages/core-components/src/components/HeaderIconLinkRow/IconLinkVertical.tsx b/packages/core-components/src/components/HeaderIconLinkRow/IconLinkVertical.tsx
index f128455549..c1c0bd4ec8 100644
--- a/packages/core-components/src/components/HeaderIconLinkRow/IconLinkVertical.tsx
+++ b/packages/core-components/src/components/HeaderIconLinkRow/IconLinkVertical.tsx
@@ -18,6 +18,8 @@ import classnames from 'classnames';
import { makeStyles } from '@material-ui/core/styles';
import LinkIcon from '@material-ui/icons/Link';
import { Link } from '../Link';
+import Box from '@material-ui/core/Box';
+import Typography from '@material-ui/core/Typography';
export type IconLinkVerticalProps = {
color?: 'primary' | 'secondary';
@@ -56,9 +58,8 @@ const useIconStyles = makeStyles(
color: theme.palette.secondary.main,
},
label: {
- fontSize: '0.7rem',
textTransform: 'uppercase',
- fontWeight: 600,
+ fontWeight: theme.typography.fontWeightBold,
letterSpacing: 1.2,
},
}),
@@ -79,10 +80,16 @@ export function IconLinkVertical({
if (disabled) {
return (
-
+
{icon}
- {label}
-
+
+ {label}
+
+
);
}
@@ -94,7 +101,9 @@ export function IconLinkVertical({
onClick={onClick}
>
{icon}
- {label}
+
+ {label}
+
);
}
diff --git a/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx b/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx
index 4ab49596fe..c4c9dadb78 100644
--- a/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx
+++ b/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+import Box from '@material-ui/core/Box';
import Grid from '@material-ui/core/Grid';
import IconButton from '@material-ui/core/IconButton';
import { makeStyles, Theme } from '@material-ui/core/styles';
@@ -227,7 +227,7 @@ export function HorizontalScrollGrid(props: PropsWithChildren) {
};
return (
-
+ ) {
>
{children}
-
-
) {
)}
-
+
);
}
diff --git a/packages/core-components/src/components/Lifecycle/Lifecycle.tsx b/packages/core-components/src/components/Lifecycle/Lifecycle.tsx
index f553129927..f0bbeaa7bd 100644
--- a/packages/core-components/src/components/Lifecycle/Lifecycle.tsx
+++ b/packages/core-components/src/components/Lifecycle/Lifecycle.tsx
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import React from 'react';
-import CSS from 'csstype';
import { makeStyles } from '@material-ui/core/styles';
+import Typography from '@material-ui/core/Typography';
+import CSS from 'csstype';
+import React from 'react';
type Props = CSS.Properties & {
shorthand?: boolean;
@@ -47,15 +47,16 @@ export function Lifecycle(props: Props) {
const classes = useStyles(props);
const { shorthand, alpha } = props;
return shorthand ? (
-
{alpha ? <>α> : <>β>}
-
+
) : (
-
+
{alpha ? 'Alpha' : 'Beta'}
-
+
);
}
diff --git a/packages/core-components/src/components/Link/Link.tsx b/packages/core-components/src/components/Link/Link.tsx
index 66b7453abd..440fcb811f 100644
--- a/packages/core-components/src/components/Link/Link.tsx
+++ b/packages/core-components/src/components/Link/Link.tsx
@@ -13,21 +13,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
import { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api';
-import classnames from 'classnames';
// eslint-disable-next-line no-restricted-imports
import MaterialLink, {
LinkProps as MaterialLinkProps,
} from '@material-ui/core/Link';
import { makeStyles } from '@material-ui/core/styles';
+import Typography from '@material-ui/core/Typography';
+import classnames from 'classnames';
+import { trimEnd } from 'lodash';
import React, { ElementType } from 'react';
import {
+ createRoutesFromChildren,
Link as RouterLink,
LinkProps as RouterLinkProps,
+ Route,
} from 'react-router-dom';
-import { trimEnd } from 'lodash';
-import { createRoutesFromChildren, Route } from 'react-router-dom';
export function isReactRouterBeta(): boolean {
const [obj] = createRoutesFromChildren(} />);
@@ -80,7 +81,7 @@ const useBaseUrl = () => {
*/
const useBasePath = () => {
// baseUrl can be specified as just a path
- const base = 'http://dummy.dev';
+ const base = 'http://sample.dev';
const url = useBaseUrl() ?? '/';
const { pathname } = new URL(url, base);
return trimEnd(pathname, '/');
@@ -161,7 +162,9 @@ export const Link = React.forwardRef(
className={classnames(classes.externalLink, props.className)}
>
{props.children}
- , Opens in a new window
+
+ , Opens in a new window
+
) : (
// Interact with React Router for internal links
diff --git a/packages/core-components/src/components/LogViewer/RealLogViewer.tsx b/packages/core-components/src/components/LogViewer/RealLogViewer.tsx
index ac66d7cdf5..59e0bea44b 100644
--- a/packages/core-components/src/components/LogViewer/RealLogViewer.tsx
+++ b/packages/core-components/src/components/LogViewer/RealLogViewer.tsx
@@ -13,18 +13,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import React, { useEffect, useMemo, useRef } from 'react';
-import { useLocation } from 'react-router-dom';
+import Box from '@material-ui/core/Box';
import IconButton from '@material-ui/core/IconButton';
import CopyIcon from '@material-ui/icons/FileCopy';
+import classnames from 'classnames';
+import React, { useEffect, useMemo, useRef } from 'react';
+import { useLocation } from 'react-router-dom';
import AutoSizer from 'react-virtualized-auto-sizer';
import { FixedSizeList } from 'react-window';
+
import { AnsiProcessor } from './AnsiProcessor';
-import { HEADER_SIZE, useStyles } from './styles';
-import classnames from 'classnames';
import { LogLine } from './LogLine';
import { LogViewerControls } from './LogViewerControls';
+import { HEADER_SIZE, useStyles } from './styles';
import { useLogViewerSearch } from './useLogViewerSearch';
import { useLogViewerSelection } from './useLogViewerSelection';
@@ -69,10 +70,10 @@ export function RealLogViewer(props: RealLogViewerProps) {
return (
{({ height, width }) => (
-
-
+
+
-
+
-
+
);
}}
-
+
)}
);
diff --git a/packages/core-components/src/components/OverflowTooltip/OverflowTooltip.stories.tsx b/packages/core-components/src/components/OverflowTooltip/OverflowTooltip.stories.tsx
index a022b3b5c2..5ab5ba7dc4 100644
--- a/packages/core-components/src/components/OverflowTooltip/OverflowTooltip.stories.tsx
+++ b/packages/core-components/src/components/OverflowTooltip/OverflowTooltip.stories.tsx
@@ -23,7 +23,7 @@ export default {
};
const text =
- 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.';
+ 'Lorem Ipsum is simply sample text of the printing and typesetting industry.';
export const Default = () => (
diff --git a/packages/core-components/src/components/Progress/Progress.tsx b/packages/core-components/src/components/Progress/Progress.tsx
index f199c5640f..eb17b9eb25 100644
--- a/packages/core-components/src/components/Progress/Progress.tsx
+++ b/packages/core-components/src/components/Progress/Progress.tsx
@@ -13,23 +13,29 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import React, { useState, useEffect, PropsWithChildren } from 'react';
+import { BackstageTheme } from '@backstage/theme';
+import Box from '@material-ui/core/Box';
import LinearProgress, {
LinearProgressProps,
} from '@material-ui/core/LinearProgress';
+import { useTheme } from '@material-ui/core/styles';
+import React, { PropsWithChildren, useEffect, useState } from 'react';
export function Progress(props: PropsWithChildren) {
+ const theme = useTheme();
const [isVisible, setIsVisible] = useState(false);
useEffect(() => {
- const handle = setTimeout(() => setIsVisible(true), 250);
+ const handle = setTimeout(
+ () => setIsVisible(true),
+ theme.transitions.duration.short,
+ );
return () => clearTimeout(handle);
- }, []);
+ }, [theme.transitions.duration.short]);
return isVisible ? (
) : (
-
+
);
}
diff --git a/packages/core-components/src/components/ProgressBars/Gauge.tsx b/packages/core-components/src/components/ProgressBars/Gauge.tsx
index 11f977b387..ca84a5f480 100644
--- a/packages/core-components/src/components/ProgressBars/Gauge.tsx
+++ b/packages/core-components/src/components/ProgressBars/Gauge.tsx
@@ -18,6 +18,7 @@ import { BackstagePalette, BackstageTheme } from '@backstage/theme';
import { makeStyles, useTheme } from '@material-ui/core/styles';
import { Circle } from 'rc-progress';
import React, { ReactNode, useEffect, useState } from 'react';
+import Box from '@material-ui/core/Box';
/** @public */
export type GaugeClassKey =
@@ -38,8 +39,8 @@ const useStyles = makeStyles(
top: '50%',
left: '50%',
transform: 'translate(-50%, -60%)',
- fontSize: 45,
- fontWeight: 'bold',
+ fontSize: theme.typography.pxToRem(45),
+ fontWeight: theme.typography.fontWeightBold,
color: theme.palette.textContrast,
},
description: {
@@ -152,7 +153,7 @@ export function Gauge(props: GaugeProps) {
}, [description, hoverRef]);
return (
-
+
{description && isHovering ? (
-
{description}
+ {description}
) : (
-
+
{isNaN(value) ? 'N/A' : `${asActual}${unit}`}
-
+
)}
-
+
);
}
diff --git a/packages/core-components/src/components/ProgressBars/GaugeCard.tsx b/packages/core-components/src/components/ProgressBars/GaugeCard.tsx
index 1114890523..3442395380 100644
--- a/packages/core-components/src/components/ProgressBars/GaugeCard.tsx
+++ b/packages/core-components/src/components/ProgressBars/GaugeCard.tsx
@@ -13,9 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+import Box from '@material-ui/core/Box';
import { makeStyles } from '@material-ui/core/styles';
import React, { ReactNode } from 'react';
+
import { BottomLinkProps } from '../../layout/BottomLink';
import { InfoCard, InfoCardVariants } from '../../layout/InfoCard';
import { Gauge, GaugePropsGetColor } from './Gauge';
@@ -74,7 +75,7 @@ export function GaugeCard(props: Props) {
};
return (
-
+
-
+
);
}
diff --git a/packages/core-components/src/components/ProgressBars/LinearGauge.tsx b/packages/core-components/src/components/ProgressBars/LinearGauge.tsx
index 643c3ec2ac..5bfe1b7a61 100644
--- a/packages/core-components/src/components/ProgressBars/LinearGauge.tsx
+++ b/packages/core-components/src/components/ProgressBars/LinearGauge.tsx
@@ -13,13 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import React from 'react';
+import { BackstageTheme } from '@backstage/theme';
import { useTheme } from '@material-ui/core/styles';
import Tooltip from '@material-ui/core/Tooltip';
+import Typography from '@material-ui/core/Typography';
import { Line } from 'rc-progress';
-import { BackstageTheme } from '@backstage/theme';
-import { getProgressColor, GaugePropsGetColor } from './Gauge';
+import React from 'react';
+
+import { GaugePropsGetColor, getProgressColor } from './Gauge';
type Props = {
/**
@@ -47,14 +48,14 @@ export function LinearGauge(props: Props) {
});
return (
-
+
-
+
);
}
diff --git a/packages/core-components/src/components/Select/Select.tsx b/packages/core-components/src/components/Select/Select.tsx
index 7229f89653..9cb8822a05 100644
--- a/packages/core-components/src/components/Select/Select.tsx
+++ b/packages/core-components/src/components/Select/Select.tsx
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+import Box from '@material-ui/core/Box';
import Checkbox from '@material-ui/core/Checkbox';
import Chip from '@material-ui/core/Chip';
import ClickAwayListener from '@material-ui/core/ClickAwayListener';
@@ -30,6 +30,7 @@ import {
} from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
import React, { useEffect, useState } from 'react';
+
import ClosedDropdown from './static/ClosedDropdown';
import OpenedDropdown from './static/OpenedDropdown';
@@ -45,17 +46,17 @@ const BootstrapInput = withStyles(
},
},
input: {
- borderRadius: 4,
+ borderRadius: theme.shape.borderRadius,
position: 'relative',
backgroundColor: theme.palette.background.paper,
border: '1px solid #ced4da',
- fontSize: 16,
- padding: '10px 26px 10px 12px',
+ fontSize: theme.typography.body1.fontSize,
+ padding: theme.spacing(1.25, 3.25, 1.25, 1.5),
transition: theme.transitions.create(['border-color', 'box-shadow']),
fontFamily: 'Helvetica Neue',
'&:focus': {
background: theme.palette.background.paper,
- borderRadius: 4,
+ borderRadius: theme.shape.borderRadius,
},
},
}),
@@ -81,7 +82,7 @@ const useStyles = makeStyles(
label: {
transform: 'initial',
fontWeight: 'bold',
- fontSize: 14,
+ fontSize: theme.typography.body2.fontSize,
fontFamily: theme.typography.fontFamily,
color: theme.palette.text.primary,
'&.Mui-focused': {
@@ -91,7 +92,7 @@ const useStyles = makeStyles(
formLabel: {
transform: 'initial',
fontWeight: 'bold',
- fontSize: 14,
+ fontSize: theme.typography.body2.fontSize,
fontFamily: theme.typography.fontFamily,
color: theme.palette.text.primary,
'&.Mui-focused': {
@@ -196,7 +197,7 @@ export function SelectComponent(props: SelectProps) {
};
return (
-
+
);
};
diff --git a/packages/core-components/src/components/SimpleStepper/SimpleStepperStep.tsx b/packages/core-components/src/components/SimpleStepper/SimpleStepperStep.tsx
index bb46163105..911ad2e73e 100644
--- a/packages/core-components/src/components/SimpleStepper/SimpleStepperStep.tsx
+++ b/packages/core-components/src/components/SimpleStepper/SimpleStepperStep.tsx
@@ -13,12 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import React, { PropsWithChildren } from 'react';
-import { makeStyles } from '@material-ui/core/styles';
+import Box from '@material-ui/core/Box';
import MuiStep from '@material-ui/core/Step';
import StepContent from '@material-ui/core/StepContent';
import StepLabel from '@material-ui/core/StepLabel';
+import { makeStyles } from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
+import React, { PropsWithChildren } from 'react';
+
import { SimpleStepperFooter } from './SimpleStepperFooter';
import { StepProps } from './types';
@@ -40,11 +42,11 @@ export function SimpleStepperStep(props: PropsWithChildren) {
// The end step is not a part of the stepper
// It simply is the final screen with an option to have buttons such as reset or back
return end ? (
-