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/brave-bags-sniff.md b/.changeset/brave-bags-sniff.md new file mode 100644 index 0000000000..751e99b41b --- /dev/null +++ b/.changeset/brave-bags-sniff.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': minor +--- + +Fixes in kind selectors (now `OwnershipCard` works again). `EntityKindPicker` now accepts an optional `allowedKinds` prop, just like `CatalogKindHeader`. diff --git a/.changeset/chilled-ladybugs-cough.md b/.changeset/chilled-ladybugs-cough.md new file mode 100644 index 0000000000..95a86e97c6 --- /dev/null +++ b/.changeset/chilled-ladybugs-cough.md @@ -0,0 +1,20 @@ +--- +'@backstage/core-plugin-api': minor +--- + +Added a new `display` property to the `AlertMessage` which can accept the values `permanent` or `transient`. + +Here's a rough example of how to trigger an alert using the new `display` property: + +```ts +import { alertApiRef, useApi } from '@backstage/core-plugin-api'; + +const ExampleTransient = () => { + const alertApi = useApi(alertApiRef); + alertApi.post({ + message: 'Example of Transient Alert', + severity: 'success', + display: 'transient', + }); +}; +``` 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/create-app-1670332900.md b/.changeset/create-app-1670332900.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1670332900.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-eels-compete.md b/.changeset/eight-eels-compete.md new file mode 100644 index 0000000000..5cd0cdf041 --- /dev/null +++ b/.changeset/eight-eels-compete.md @@ -0,0 +1,10 @@ +--- +'@backstage/plugin-bazaar-backend': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-playlist-backend': patch +'@backstage/plugin-search-backend-module-pg': patch +'@backstage/plugin-user-settings-backend': patch +--- + +Ensured typescript type checks in migration files. 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-crews-speak.md b/.changeset/famous-crews-speak.md new file mode 100644 index 0000000000..d2246472a0 --- /dev/null +++ b/.changeset/famous-crews-speak.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Fixed GitlabUrlReader to include api tokens in API calls 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/five-trainers-admire.md b/.changeset/five-trainers-admire.md new file mode 100644 index 0000000000..e624fc222a --- /dev/null +++ b/.changeset/five-trainers-admire.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Fix webpack dev server issue where it wasn't serving `index.html` from correct endpoint on subsequent requests. 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/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/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/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/little-chairs-dance.md b/.changeset/little-chairs-dance.md new file mode 100644 index 0000000000..c08dd3838c --- /dev/null +++ b/.changeset/little-chairs-dance.md @@ -0,0 +1,21 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Deprecated the `taskWorkers` option in RouterOptions in favor of `concurrentTasksLimit` which sets the limit of concurrent tasks in a single TaskWorker + +TaskWorker can now run multiple (defaults to 10) tasks concurrently using the `concurrentTasksLimit` option available in both `RouterOptions` and `CreateWorkerOptions`. + +To use the option to create a TaskWorker: + +```diff +const worker = await TaskWorker.create({ + taskBroker, + actionRegistry, + integrations, + logger, + workingDirectory, + additionalTemplateFilters, ++ concurrentTasksLimit: 10 // (1 to Infinity) +}); +``` diff --git a/.changeset/loud-snails-sleep.md b/.changeset/loud-snails-sleep.md new file mode 100644 index 0000000000..d72c1a22b4 --- /dev/null +++ b/.changeset/loud-snails-sleep.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-vault-backend': patch +--- + +Added (optional) config `vault.publicUrl` as alternative to `vault.baseUrl` for `editUrl` and `showUrl` in case `vault.baseUrl` is internal 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/neat-lies-know.md b/.changeset/neat-lies-know.md new file mode 100644 index 0000000000..01fc002668 --- /dev/null +++ b/.changeset/neat-lies-know.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Cleanup and small fixes for the kind selector diff --git a/.changeset/nice-apricots-love.md b/.changeset/nice-apricots-love.md new file mode 100644 index 0000000000..527b644d5f --- /dev/null +++ b/.changeset/nice-apricots-love.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-app-api': patch +--- + +Prevent duplicate feature flag components from rendering in the settings when using components 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-sloths-warn.md b/.changeset/old-sloths-warn.md new file mode 100644 index 0000000000..8eca0a9292 --- /dev/null +++ b/.changeset/old-sloths-warn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-cost-insights': patch +--- + +Internal refactor to avoid usage of deprecated symbols diff --git a/.changeset/pre.json b/.changeset/pre.json index 136b807fdf..0b0b05051e 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -187,48 +187,133 @@ "@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", "angry-trees-relax", + "beige-chairs-repair", + "blue-chefs-know", + "brave-bags-sniff", + "chilled-ladybugs-cough", "chilly-ads-lay", "clean-paws-fry", + "clean-seals-whisper", "clever-pillows-drive", "clever-rivers-obey", "create-app-1669131574", + "create-app-1669720399", + "create-app-1670332900", + "dry-melons-listen", + "dry-radios-live", "early-hairs-switch", "early-parrots-guess", + "eight-eels-compete", + "eight-spiders-know", + "eight-tables-hunt", + "empty-taxis-run", "fair-walls-talk", + "famous-cobras-suffer", + "famous-crews-speak", "fast-lies-remain", + "fifty-news-stare", + "five-trainers-admire", "fluffy-walls-approve", + "forty-baboons-burn", "four-adults-provide", + "four-buttons-clean", + "fresh-news-push", "funny-numbers-compete", + "gentle-ligers-help", "gold-icons-cheat", + "gold-yaks-join", "gorgeous-hairs-applaud", + "healthy-crabs-collect", + "hip-chairs-tap", "hip-stingrays-kneel", + "hip-wasps-yell", "itchy-walls-boil", + "kind-walls-share", + "light-snakes-exercise", + "light-turtles-yawn", + "little-chairs-dance", + "loud-rockets-reply", + "loud-snails-sleep", + "many-bikes-press", + "modern-camels-cheat", + "modern-jokes-attack", "modern-mugs-shout", + "nasty-melons-build", + "neat-lies-know", + "nervous-mice-flow", "new-bugs-march", + "nice-apricots-love", + "nice-pants-boil", "nine-ears-whisper", + "old-bulldogs-fry", "old-keys-leave", + "old-sloths-warn", + "old-tips-cough", + "pretty-eagles-matter", + "pretty-melons-taste", + "quick-horses-cry", + "renovate-1e2853d", "renovate-3fe8460", "renovate-4bb70f3", + "renovate-4cbe4f9", + "renovate-50ee0c3", + "renovate-61ad428", "renovate-778b2fa", + "renovate-8c69aed", + "renovate-a5f7839", + "renovate-bf8dfb3", + "renovate-ceb9248", + "renovate-ebb2ea1", + "rich-balloons-leave", "rich-garlics-play", + "rude-pugs-deny", + "rude-sloths-cross", "search-heavy-frogs-confess", + "search-lieutenant-dangle", "search-om-manniskan-ginge", + "search-tofu-panaeng", + "selfish-lizards-invent", "serious-windows-occur", + "sharp-shoes-bathe", + "short-turtles-dream", + "shy-cycles-add", "silly-wolves-remember", + "silver-rats-rest", "slow-dragons-promise", + "slow-eggs-grab", + "slow-flies-marinate", + "slow-flies-marry", + "slow-lies-jam", + "smart-radios-change", "soft-nails-arrive", "sour-flowers-care", "sour-plums-grow", + "sour-queens-wait", + "strange-rocks-hide", + "strong-peaches-melt", + "strong-rice-warn", + "stupid-clocks-return", + "stupid-gifts-serve", + "sweet-pandas-relax", + "tender-colts-greet", "tender-parrots-cover", "thin-donuts-join", + "thin-flies-wink", "twelve-meals-smell", "twenty-dodos-wash", + "warm-parents-notice", "weak-ears-jam", + "wicked-games-search", + "yellow-forks-knock", + "young-chairs-check", "young-turkeys-relax" ] } 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-8c69aed.md b/.changeset/renovate-8c69aed.md new file mode 100644 index 0000000000..63a61d941a --- /dev/null +++ b/.changeset/renovate-8c69aed.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Updated dependency `@types/http-errors` to `^2.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/renovate-ebb2ea1.md b/.changeset/renovate-ebb2ea1.md new file mode 100644 index 0000000000..010236c2f2 --- /dev/null +++ b/.changeset/renovate-ebb2ea1.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 `^20.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/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/sharp-shoes-bathe.md b/.changeset/sharp-shoes-bathe.md new file mode 100644 index 0000000000..8d3c0dfddb --- /dev/null +++ b/.changeset/sharp-shoes-bathe.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Make incremental providers more resilient to failures diff --git a/.changeset/short-turtles-dream.md b/.changeset/short-turtles-dream.md new file mode 100644 index 0000000000..022ef35f58 --- /dev/null +++ b/.changeset/short-turtles-dream.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-stack-overflow-backend': patch +--- + +Added option to supply API Access Token. This is required in addition to an API key when trying to access the data for a private Stack Overflow Team. 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-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/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/strong-rice-warn.md b/.changeset/strong-rice-warn.md new file mode 100644 index 0000000000..da157ddaaf --- /dev/null +++ b/.changeset/strong-rice-warn.md @@ -0,0 +1,19 @@ +--- +'@backstage/core-components': patch +--- + +Added an option to allow the `AlertMessage` to be self-closing. This is done with a new `display` property that is set to `transient` on the `AlertMessage` when triggering a message to the `AlertApi`. The length of time that these transient messages stay open for can be set using the `transientTimeoutMs` prop on the `AlertDisplay` in the `App.tsx`. Here is an example: + +```diff + const App = () => ( + ++ + + + {routes} + + + ); +``` + +The above example will set the transient timeout to 2500ms from the default of 5000ms diff --git a/.changeset/sweet-pandas-relax.md b/.changeset/sweet-pandas-relax.md new file mode 100644 index 0000000000..97cff5a89d --- /dev/null +++ b/.changeset/sweet-pandas-relax.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +InfoCard - Remove subheader container when there is not a subheader or icon diff --git a/.changeset/thin-flies-wink.md b/.changeset/thin-flies-wink.md new file mode 100644 index 0000000000..a31db67a1c --- /dev/null +++ b/.changeset/thin-flies-wink.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Bump `json-schema-library` to version `^7.3.9` which does not pull in the `gson-pointer` library 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/young-chairs-check.md b/.changeset/young-chairs-check.md new file mode 100644 index 0000000000..e70073e9df --- /dev/null +++ b/.changeset/young-chairs-check.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-app-api': patch +--- + +Apps will now rewrite the `app.baseUrl` configuration to match the current `location.origin`. The `backend.baseUrl` will also be rewritten in the same way when the `app.baseUrl` and `backend.baseUrl` have matching origins. This will reduce the need for separate frontend builds for different environments. 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/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/assets/architecture-overview/scaffolder-task-broker-blocking.drawio.png b/docs/assets/architecture-overview/scaffolder-task-broker-blocking.drawio.png new file mode 100644 index 0000000000..34f2c31f81 Binary files /dev/null and b/docs/assets/architecture-overview/scaffolder-task-broker-blocking.drawio.png differ 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/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/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/releases/v1.9.0-next.2-changelog.md b/docs/releases/v1.9.0-next.2-changelog.md new file mode 100644 index 0000000000..a410da5263 --- /dev/null +++ b/docs/releases/v1.9.0-next.2-changelog.md @@ -0,0 +1,2178 @@ +# Release v1.9.0-next.2 + +## @backstage/backend-plugin-api@0.2.0-next.2 + +### Minor Changes + +- 884d749b14: **BREAKING**: All core service references are now exported via a single `coreServices` object. For example, the `loggerServiceRef` is now accessed via `coreServices.logger` instead. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/core-plugin-api@1.2.0-next.2 + +### Minor Changes + +- 9a1864976a: Added a new `display` property to the `AlertMessage` which can accept the values `permanent` or `transient`. + + Here's a rough example of how to trigger an alert using the new `display` property: + + ```ts + import { alertApiRef, useApi } from '@backstage/core-plugin-api'; + + const ExampleTransient = () => { + const alertApi = useApi(alertApiRef); + alertApi.post({ + message: 'Example of Transient Alert', + severity: 'success', + display: 'transient', + }); + }; + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.5-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/version-bridge@1.0.3-next.0 + +## @backstage/plugin-catalog@1.7.0-next.2 + +### Minor Changes + +- 6ffa47bb0a: Fixes in kind selectors (now `OwnershipCard` works again). `EntityKindPicker` now accepts an optional `allowedKinds` prop, just like `CatalogKindHeader`. +- 462c1d012e: Removed `CatalogKindHeader` from `DefaultCatalogPage`. Deprecated `CatalogKindHeader` in favour of `EntityKindPicker`. + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @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/types@1.0.2-next.1 + - @backstage/plugin-catalog-common@1.0.9-next.2 + +## @backstage/plugin-catalog-backend@1.6.0-next.2 + +### Minor Changes + +- 3072ebfdd7: The search table also holds the original entity value now and the facets endpoint fetches the filtered entity data from the search table. + +### Patch Changes + +- c507aee8a2: Ensured typescript type checks in migration files. +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- eacc8e2b55: Make it possible for entity providers to supply only entity refs, instead of full entities, in `delta` mutation deletions. +- 20a5161f04: Adds MySQL support for the catalog-backend +- Updated dependencies + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/plugin-permission-node@0.7.2-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-catalog-common@1.0.9-next.2 + - @backstage/plugin-permission-common@0.7.2-next.1 + - @backstage/plugin-scaffolder-common@1.2.3-next.1 + +## @backstage/plugin-catalog-node@1.3.0-next.2 + +### Minor Changes + +- eacc8e2b55: Make it possible for entity providers to supply only entity refs, instead of full entities, in `delta` mutation deletions. + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-catalog-common@1.0.9-next.2 + +## @backstage/plugin-scaffolder-backend@1.9.0-next.2 + +### Minor Changes + +- b32005e98a: Deprecated the `taskWorkers` option in RouterOptions in favor of `concurrentTasksLimit` which sets the limit of concurrent tasks in a single TaskWorker + + TaskWorker can now run multiple (defaults to 10) tasks concurrently using the `concurrentTasksLimit` option available in both `RouterOptions` and `CreateWorkerOptions`. + + To use the option to create a TaskWorker: + + ```diff + const worker = await TaskWorker.create({ + taskBroker, + actionRegistry, + integrations, + logger, + workingDirectory, + additionalTemplateFilters, + + concurrentTasksLimit: 10 // (1 to Infinity) + }); + ``` + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-scaffolder-common@1.2.3-next.1 + +## @backstage/plugin-search-backend@1.2.0-next.2 + +### Minor Changes + +- 29ebc43a0b: numberOfResults is now provided alongside the query result + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.1.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/plugin-permission-node@0.7.2-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/plugin-search-backend-module-elasticsearch@1.1.0-next.2 + +### Minor Changes + +- 29ebc43a0b: numberOfResults is now provided alongside the query result + +### Patch Changes + +- 45eb4d23cf: Fixed a bug that prevented indices from being cleaned up under some circumstances, which could have led to shard exhaustion. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.1.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + +## @backstage/plugin-search-backend-node@1.1.0-next.2 + +### Minor Changes + +- 29ebc43a0b: numberOfResults is now provided alongside the query result + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @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.2.0-next.2 + +### Minor Changes + +- 29ebc43a0b: 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 + +### 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.3.0-next.2 + +### Minor Changes + +- 29ebc43a0b: The `value` of a search analytics event is now set as the total number of search results (when available) + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + - @backstage/version-bridge@1.0.3-next.0 + +## @backstage/app-defaults@1.0.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-permission-react@0.4.8-next.2 + - @backstage/theme@0.2.16 + +## @backstage/backend-app-api@0.2.4-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/plugin-permission-node@0.7.2-next.2 + - @backstage/errors@1.1.4-next.1 + +## @backstage/backend-common@0.17.0-next.2 + +### Patch Changes + +- 98776e638a: Fixed GitlabUrlReader to include api tokens in API calls +- 20a5161f04: Adds MySQL support for the catalog-backend +- 3c1302c07d: Updated dependency `@types/http-errors` to `^2.0.0`. +- 8015ff1258: Tweaked wording to use inclusive terminology +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + - @backstage/config@1.0.5-next.1 + - @backstage/config-loader@1.1.7-next.2 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/backend-defaults@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.2.4-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + +## @backstage/backend-tasks@0.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/backend-test-utils@0.1.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.2.4-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/cli@0.21.2-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/config@1.0.5-next.1 + +## @backstage/cli@0.21.2-next.2 + +### Patch Changes + +- 5850ef9b84: Fix webpack dev server issue where it wasn't serving `index.html` from correct endpoint on subsequent requests. +- ee14bab716: Updated dependency `minimatch` to `5.1.1` and switch version range to `^`. +- ed0cf59c59: Updated dependency `@rollup/plugin-commonjs` to `^23.0.0`. +- 16b7c2fccd: Updated dependency `@rollup/plugin-yaml` to `^4.0.0`. +- 086c0bbb45: Updated dependency `@rollup/plugin-json` to `^5.0.0`. +- 8015ff1258: Tweaked wording to use inclusive terminology +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + - @backstage/config@1.0.5-next.1 + - @backstage/config-loader@1.1.7-next.2 + - @backstage/errors@1.1.4-next.1 + - @backstage/release-manifests@0.0.8-next.0 + - @backstage/types@1.0.2-next.1 + +## @backstage/cli-common@0.1.11-next.0 + +### Patch Changes + +- 8015ff1258: Tweaked wording to use inclusive terminology + +## @backstage/codemods@0.1.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + +## @backstage/config-loader@1.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/core-app-api@1.2.1-next.2 + +### Patch Changes + +- b4b5b02315: Tweak feature flag registration so that it happens immediately before the first rendering of the app, rather than just after. +- 203271b746: Prevent duplicate feature flag components from rendering in the settings when using components +- 8015ff1258: Tweaked wording to use inclusive terminology +- 63310e3987: Apps will now rewrite the `app.baseUrl` configuration to match the current `location.origin`. The `backend.baseUrl` will also be rewritten in the same way when the `app.baseUrl` and `backend.baseUrl` have matching origins. This will reduce the need for separate frontend builds for different environments. +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/version-bridge@1.0.3-next.0 + +## @backstage/core-components@0.12.1-next.2 + +### Patch Changes + +- d2e3bf6737: Made AlertDisplay not crash on undefined messages + +- 5fb6d5e92e: Updated dependency `@react-hookz/web` to `^19.0.0`. + +- 146378c146: Updated dependency `@react-hookz/web` to `^20.0.0`. + +- 8015ff1258: Tweaked wording to use inclusive terminology + +- 830687539f: Sync components in @backstage/core-components with the Component Design Guidelines + +- 1ae86ab5fb: Added an option to allow the `AlertMessage` to be self-closing. This is done with a new `display` property that is set to `transient` on the `AlertMessage` when triggering a message to the `AlertApi`. The length of time that these transient messages stay open for can be set using the `transientTimeoutMs` prop on the `AlertDisplay` in the `App.tsx`. Here is an example: + + ```diff + const App = () => ( + + + + + + {routes} + + + ); + ``` + + The above example will set the transient timeout to 2500ms from the default of 5000ms + +- 16e31e690f: InfoCard - Remove subheader container when there is not a subheader or icon + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + - @backstage/version-bridge@1.0.3-next.0 + +## @backstage/create-app@0.4.35-next.2 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + +## @backstage/dev-utils@1.0.9-next.2 + +### Patch Changes + +- 8015ff1258: Tweaked wording to use inclusive terminology +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/test-utils@1.2.3-next.2 + - @backstage/app-defaults@1.0.9-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/integration-react@1.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @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.2 + +### Patch Changes + +- 8015ff1258: Tweaked wording to use inclusive terminology +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/cli-common@0.1.11-next.0 + - @backstage/plugin-techdocs-node@1.4.3-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + +## @backstage/test-utils@1.2.3-next.2 + +### Patch Changes + +- 830687539f: Sync components in @backstage/core-components with the Component Design Guidelines +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/plugin-permission-react@0.4.8-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/plugin-adr@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + - @backstage/plugin-adr-common@0.2.4-next.2 + +## @backstage/plugin-adr-backend@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/plugin-adr-common@0.2.4-next.2 + +## @backstage/plugin-adr-common@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + +## @backstage/plugin-airbrake@0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/dev-utils@1.0.9-next.2 + - @backstage/test-utils@1.2.3-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-airbrake-backend@0.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + +## @backstage/plugin-allure@0.1.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-analytics-module-ga@0.1.23-next.2 + +### Patch Changes + +- 9516b0c355: 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) +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-apache-airflow@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + +## @backstage/plugin-api-docs@0.8.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.7.0-next.2 + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-apollo-explorer@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-app-backend@0.3.39-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/config-loader@1.1.7-next.2 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-auth-backend@0.17.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-auth-node@0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + +## @backstage/plugin-azure-devops@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- eaccf6d628: Updated installation documentation +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-sites@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-badges@0.2.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + +## @backstage/plugin-bazaar@0.2.1-next.2 + +### Patch Changes + +- 312962da30: Add `title` as optional parameter to `BazaarOverviewCard` +- Updated dependencies + - @backstage/plugin-catalog@1.7.0-next.2 + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/cli@0.21.2-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- c507aee8a2: Ensured typescript type checks in migration files. +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-test-utils@0.1.31-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + +## @backstage/plugin-bitrise@0.1.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-catalog-backend-module-aws@0.1.12-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-catalog-backend-module-azure@0.1.10-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.2-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.6-next.2 + +### Patch Changes + +- ce08e1798e: Refresh (potentially) updated catalog files on `repo:push` more efficiently. +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.2-next.1 + - @backstage/plugin-catalog-common@1.0.9-next.2 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.4-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.7-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + +## @backstage/plugin-catalog-backend-module-github@0.2.2-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-catalog-common@1.0.9-next.2 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.10-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.1.0-next.1 + +### Patch Changes + +- c507aee8a2: Ensured typescript type checks in migration files. +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- 61d4efe978: Make incremental providers more resilient to failures +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-test-utils@0.1.31-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-model@1.1.4-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-catalog-backend-module-ldap@0.5.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-catalog-backend-module-msgraph@0.4.5-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-catalog-common@1.0.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/plugin-catalog-graph@0.2.24-next.2 + +### Patch Changes + +- 454f2e90db: Set the default `maxDepth` prop for `EntityRelationsGraph` to a smaller value to provide better readability. +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-catalog-import@0.9.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/plugin-catalog-common@1.0.9-next.2 + +## @backstage/plugin-catalog-react@1.2.2-next.2 + +### Patch Changes + +- 6ffa47bb0a: Cleanup and small fixes for the kind selector +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-permission-react@0.4.8-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + - @backstage/version-bridge@1.0.3-next.0 + - @backstage/plugin-catalog-common@1.0.9-next.2 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/plugin-cicd-statistics@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-cicd-statistics@0.1.14-next.2 + - @backstage/catalog-model@1.1.4-next.1 + +## @backstage/plugin-circleci@0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-cloudbuild@0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-climate@0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-coverage@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-coverage-backend@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + +## @backstage/plugin-codescene@0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-cost-insights@0.12.1-next.2 + +### Patch Changes + +- 5960d0902e: Internal refactor to avoid usage of deprecated symbols +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/test-utils@1.2.3-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-events-backend@0.2.0-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-events-backend-module-aws-sqs@0.1.1-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-events-backend-module-azure@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-events-backend-module-gerrit@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-events-backend-module-github@0.1.1-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-events-backend-module-gitlab@0.1.1-next.2 + +### Patch Changes + +- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`. +- Updated dependencies + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-events-backend-test-utils@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.0-next.2 + +## @backstage/plugin-events-node@0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.2.0-next.2 + +## @backstage/plugin-explore@0.3.43-next.2 + +### Patch Changes + +- c8f49ed4d0: Update search links to only have header as linkable text +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/plugin-explore-react@0.0.24-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + - @backstage/plugin-explore-common@0.0.1-next.0 + +## @backstage/plugin-explore-backend@0.0.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-explore-common@0.0.1-next.0 + +## @backstage/plugin-explore-react@0.0.24-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-explore-common@0.0.1-next.0 + +## @backstage/plugin-firehydrant@0.1.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-fossa@0.2.44-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gcp-projects@0.3.31-next.2 + +### Patch Changes + +- 5fb6d5e92e: Updated dependency `@react-hookz/web` to `^19.0.0`. +- 146378c146: Updated dependency `@react-hookz/web` to `^20.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-git-release-manager@0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-actions@0.5.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-deployments@0.1.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-issues@0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-pull-requests-board@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gitops-profiles@0.3.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gocd@0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-graphql-backend@0.1.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-catalog-graphql@0.3.16-next.1 + +## @backstage/plugin-home@0.4.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-stack-overflow@0.1.8-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-ilert@0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +## @backstage/plugin-jenkins-backend@0.1.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/plugin-jenkins-common@0.1.11-next.2 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/plugin-jenkins-common@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.9-next.2 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/plugin-kafka@0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-kafka-backend@0.2.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + +## @backstage/plugin-kubernetes@0.7.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + - @backstage/plugin-kubernetes-common@0.4.5-next.1 + +## @backstage/plugin-kubernetes-backend@0.8.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-test-utils@0.1.31-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/plugin-kubernetes-common@0.4.5-next.1 + +## @backstage/plugin-lighthouse@0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-newrelic@0.3.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-newrelic-dashboard@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/errors@1.1.4-next.1 + +## @backstage/plugin-org@0.6.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-org-react@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + +## @backstage/plugin-permission-backend@0.5.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/plugin-permission-node@0.7.2-next.2 + - @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-node@0.7.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/plugin-playlist@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-permission-react@0.4.8-next.2 + - @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.2 + - @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.2 + +### Patch Changes + +- c507aee8a2: Ensured typescript type checks in migration files. +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-test-utils@0.1.31-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/plugin-permission-node@0.7.2-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-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-playlist-common@0.1.3-next.1 + +## @backstage/plugin-proxy-backend@0.2.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + +## @backstage/plugin-rollbar@0.4.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-rollbar-backend@0.1.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + +## @backstage/plugin-scaffolder@1.9.0-next.2 + +### Patch Changes + +- 5fb6d5e92e: Updated dependency `@react-hookz/web` to `^19.0.0`. +- 146378c146: Updated dependency `@react-hookz/web` to `^20.0.0`. +- 9b606366bf: Bump `json-schema-library` to version `^7.3.9` which does not pull in the `gson-pointer` library +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/plugin-permission-react@0.4.8-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-catalog-common@1.0.9-next.2 + - @backstage/plugin-scaffolder-common@1.2.3-next.1 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.9.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.9.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.9.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-search@1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + - @backstage/version-bridge@1.0.3-next.0 + +## @backstage/plugin-search-backend-module-pg@0.4.3-next.2 + +### Patch Changes + +- c507aee8a2: Ensured typescript type checks in migration files. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.1.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + +## @backstage/plugin-sentry@0.4.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-shortcuts@0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-sonarqube@0.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-sonarqube-backend@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + +## @backstage/plugin-splunk-on-call@0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-stack-overflow@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/plugin-home@0.4.28-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-stack-overflow-backend@0.1.8-next.2 + +### Patch Changes + +- fd0ca6f447: Added option to supply API Access Token. This is required in addition to an API key when trying to access the data for a private Stack Overflow Team. +- Updated dependencies + - @backstage/cli@0.21.2-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + +## @backstage/plugin-tech-insights@0.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-tech-insights-common@0.2.9-next.1 + +## @backstage/plugin-tech-insights-backend@0.5.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/plugin-tech-insights-node@0.3.7-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-tech-insights-common@0.2.9-next.1 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-tech-insights-node@0.3.7-next.2 + - @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-node@0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/plugin-tech-insights-common@0.2.9-next.1 + +## @backstage/plugin-tech-radar@0.5.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs@1.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/plugin-techdocs-react@1.0.7-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.7.0-next.2 + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/test-utils@1.2.3-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/plugin-techdocs@1.4.1-next.2 + - @backstage/plugin-techdocs-react@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs-backend@1.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/plugin-techdocs-node@1.4.3-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/plugin-catalog-common@1.0.9-next.2 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.2 + +### Patch Changes + +- 5fb6d5e92e: Updated dependency `@react-hookz/web` to `^19.0.0`. +- 146378c146: Updated dependency `@react-hookz/web` to `^20.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/plugin-techdocs-react@1.0.7-next.2 + - @backstage/integration@1.4.1-next.1 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs-node@1.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + +## @backstage/plugin-techdocs-react@1.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/version-bridge@1.0.3-next.0 + +## @backstage/plugin-todo@0.2.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + +## @backstage/plugin-user-settings@0.6.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-user-settings-backend@0.1.3-next.2 + +### Patch Changes + +- c507aee8a2: Ensured typescript type checks in migration files. +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + +## @backstage/plugin-vault@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @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.2 + +### Patch Changes + +- 568ae02463: Added (optional) config `vault.publicUrl` as alternative to `vault.baseUrl` for `editUrl` and `showUrl` in case `vault.baseUrl` is internal +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-test-utils@0.1.31-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + +## @backstage/plugin-xcmetrics@0.2.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + +## example-app@0.2.78-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/plugin-explore@0.3.43-next.2 + - @backstage/cli@0.21.2-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-cost-insights@0.12.1-next.2 + - @backstage/plugin-gcp-projects@0.3.31-next.2 + - @backstage/plugin-scaffolder@1.9.0-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.2 + - @backstage/plugin-catalog-graph@0.2.24-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/plugin-api-docs@0.8.12-next.2 + - @internal/plugin-catalog-customized@0.0.5-next.2 + - @backstage/app-defaults@1.0.9-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/plugin-airbrake@0.3.12-next.2 + - @backstage/plugin-apache-airflow@0.2.5-next.2 + - @backstage/plugin-azure-devops@0.2.3-next.2 + - @backstage/plugin-azure-sites@0.1.1-next.2 + - @backstage/plugin-badges@0.2.36-next.2 + - @backstage/plugin-catalog-import@0.9.2-next.2 + - @backstage/plugin-circleci@0.3.12-next.2 + - @backstage/plugin-cloudbuild@0.3.12-next.2 + - @backstage/plugin-code-coverage@0.2.5-next.2 + - @backstage/plugin-dynatrace@1.0.2-next.2 + - @backstage/plugin-gcalendar@0.3.8-next.2 + - @backstage/plugin-github-actions@0.5.12-next.2 + - @backstage/plugin-gocd@0.1.18-next.2 + - @backstage/plugin-graphiql@0.2.44-next.2 + - @backstage/plugin-home@0.4.28-next.2 + - @backstage/plugin-jenkins@0.7.11-next.2 + - @backstage/plugin-kafka@0.3.12-next.2 + - @backstage/plugin-kubernetes@0.7.5-next.2 + - @backstage/plugin-lighthouse@0.3.12-next.2 + - @backstage/plugin-newrelic@0.3.30-next.2 + - @backstage/plugin-newrelic-dashboard@0.2.5-next.2 + - @backstage/plugin-org@0.6.2-next.2 + - @backstage/plugin-pagerduty@0.5.5-next.2 + - @backstage/plugin-permission-react@0.4.8-next.2 + - @backstage/plugin-playlist@0.1.3-next.2 + - @backstage/plugin-rollbar@0.4.12-next.2 + - @backstage/plugin-search@1.0.5-next.2 + - @backstage/plugin-sentry@0.4.5-next.2 + - @backstage/plugin-shortcuts@0.3.4-next.2 + - @backstage/plugin-stack-overflow@0.1.8-next.2 + - @backstage/plugin-tech-insights@0.3.4-next.2 + - @backstage/plugin-tech-radar@0.5.19-next.2 + - @backstage/plugin-techdocs@1.4.1-next.2 + - @backstage/plugin-techdocs-react@1.0.7-next.2 + - @backstage/plugin-todo@0.2.14-next.2 + - @backstage/plugin-user-settings@0.6.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + - @backstage/plugin-catalog-common@1.0.9-next.2 + +## example-backend@0.2.78-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-azure-devops-backend@0.3.18-next.2 + - @backstage/plugin-search-backend@1.2.0-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.1.0-next.2 + - @backstage/plugin-search-backend-node@1.1.0-next.2 + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-playlist-backend@0.2.2-next.2 + - @backstage/plugin-search-backend-module-pg@0.4.3-next.2 + - @backstage/plugin-app-backend@0.3.39-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/plugin-events-backend@0.2.0-next.2 + - @backstage/plugin-scaffolder-backend@1.9.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - example-app@0.2.78-next.2 + - @backstage/plugin-techdocs-backend@1.4.2-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/plugin-auth-backend@0.17.2-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/plugin-azure-sites-backend@0.1.1-next.2 + - @backstage/plugin-badges-backend@0.1.33-next.2 + - @backstage/plugin-code-coverage-backend@0.2.5-next.2 + - @backstage/plugin-explore-backend@0.0.1-next.1 + - @backstage/plugin-graphql-backend@0.1.29-next.2 + - @backstage/plugin-jenkins-backend@0.1.29-next.2 + - @backstage/plugin-kafka-backend@0.2.32-next.2 + - @backstage/plugin-kubernetes-backend@0.8.1-next.2 + - @backstage/plugin-permission-backend@0.5.14-next.2 + - @backstage/plugin-permission-node@0.7.2-next.2 + - @backstage/plugin-proxy-backend@0.2.33-next.2 + - @backstage/plugin-rollbar-backend@0.1.36-next.2 + - @backstage/plugin-tech-insights-backend@0.5.5-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.2 + - @backstage/plugin-tech-insights-node@0.3.7-next.2 + - @backstage/plugin-todo-backend@0.1.36-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/plugin-events-node@0.2.0-next.2 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## example-backend-next@0.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-app-backend@0.3.39-next.2 + - @backstage/plugin-scaffolder-backend@1.9.0-next.2 + - @backstage/backend-defaults@0.1.4-next.2 + +## techdocs-cli-embedded-app@0.2.77-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.7.0-next.2 + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/cli@0.21.2-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/test-utils@1.2.3-next.2 + - @backstage/app-defaults@1.0.9-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/plugin-techdocs@1.4.1-next.2 + - @backstage/plugin-techdocs-react@1.0.7-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + +## @internal/plugin-catalog-customized@0.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.7.0-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + +## @internal/plugin-todo-list@1.0.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/theme@0.2.16 + +## @internal/plugin-todo-list-backend@1.0.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-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/microsite/data/plugins/blackduck.yaml b/microsite/data/plugins/blackduck.yaml new file mode 100644 index 0000000000..4ef192d2fc --- /dev/null +++ b/microsite/data/plugins/blackduck.yaml @@ -0,0 +1,12 @@ +--- +title: BlackDuck +author: Deepankumar +authorUrl: https://github.com/deepan10 +category: Security +description: BlackDuck scanned vulnerabilities in Backstage. +documentation: https://github.com/deepan10/backstage-plugin-blackduck +iconUrl: https://avatars.githubusercontent.com/u/431461?s=200&v=4 +npmPackageName: '@deepan10/backstage-plugin-blackduck' +tags: + - security +addedDate: '2022-12-03' diff --git a/microsite/data/plugins/cicd-statistics.yaml b/microsite/data/plugins/cicd-statistics.yaml new file mode 100644 index 0000000000..a43b56b0d9 --- /dev/null +++ b/microsite/data/plugins/cicd-statistics.yaml @@ -0,0 +1,13 @@ +--- +title: CI/CD Statistics +author: Spotify +authorUrl: https://github.com/spotify +category: CI/CD +description: Visualize CI/CD pipeline statistics such as build time or success and error rates. +documentation: https://github.com/backstage/backstage/tree/master/plugins/cicd-statistics +iconUrl: img/cicd-statistics.svg +npmPackageName: '@backstage/plugin-cicd-statistics' +tags: + - ci + - cd +addedDate: '2022-01-13' diff --git a/microsite/static/img/cicd-statistics.svg b/microsite/static/img/cicd-statistics.svg new file mode 100644 index 0000000000..302f5e8f98 --- /dev/null +++ b/microsite/static/img/cicd-statistics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/microsite/yarn.lock b/microsite/yarn.lock index f0e6bd698a..0a26cf8ef6 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2940,9 +2940,9 @@ __metadata: linkType: hard "decode-uri-component@npm:^0.2.0": - version: 0.2.0 - resolution: "decode-uri-component@npm:0.2.0" - checksum: f3749344ab9305ffcfe4bfe300e2dbb61fc6359e2b736812100a3b1b6db0a5668cba31a05e4b45d4d63dbf1a18dfa354cd3ca5bb3ededddabb8cd293f4404f94 + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 languageName: node linkType: hard diff --git a/package.json b/package.json index ad75fcdec3..d3f5fb7cbb 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.9.0-next.0", + "version": "1.9.0-next.2", "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..cc09c5cff4 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/app-defaults +## 1.0.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-permission-react@0.4.8-next.2 + - @backstage/theme@0.2.16 + +## 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..af6034f10b 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.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 2d7cce1b6d..13f81c67c6 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,131 @@ # example-app +## 0.2.78-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/plugin-search-react@1.3.0-next.2 + - @backstage/plugin-explore@0.3.43-next.2 + - @backstage/cli@0.21.2-next.2 + - @backstage/core-app-api@1.2.1-next.2 + - @backstage/core-components@0.12.1-next.2 + - @backstage/plugin-catalog-react@1.2.2-next.2 + - @backstage/plugin-cost-insights@0.12.1-next.2 + - @backstage/plugin-gcp-projects@0.3.31-next.2 + - @backstage/plugin-scaffolder@1.9.0-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.7-next.2 + - @backstage/plugin-catalog-graph@0.2.24-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - @backstage/plugin-api-docs@0.8.12-next.2 + - @internal/plugin-catalog-customized@0.0.5-next.2 + - @backstage/app-defaults@1.0.9-next.2 + - @backstage/integration-react@1.1.7-next.2 + - @backstage/plugin-airbrake@0.3.12-next.2 + - @backstage/plugin-apache-airflow@0.2.5-next.2 + - @backstage/plugin-azure-devops@0.2.3-next.2 + - @backstage/plugin-azure-sites@0.1.1-next.2 + - @backstage/plugin-badges@0.2.36-next.2 + - @backstage/plugin-catalog-import@0.9.2-next.2 + - @backstage/plugin-circleci@0.3.12-next.2 + - @backstage/plugin-cloudbuild@0.3.12-next.2 + - @backstage/plugin-code-coverage@0.2.5-next.2 + - @backstage/plugin-dynatrace@1.0.2-next.2 + - @backstage/plugin-gcalendar@0.3.8-next.2 + - @backstage/plugin-github-actions@0.5.12-next.2 + - @backstage/plugin-gocd@0.1.18-next.2 + - @backstage/plugin-graphiql@0.2.44-next.2 + - @backstage/plugin-home@0.4.28-next.2 + - @backstage/plugin-jenkins@0.7.11-next.2 + - @backstage/plugin-kafka@0.3.12-next.2 + - @backstage/plugin-kubernetes@0.7.5-next.2 + - @backstage/plugin-lighthouse@0.3.12-next.2 + - @backstage/plugin-newrelic@0.3.30-next.2 + - @backstage/plugin-newrelic-dashboard@0.2.5-next.2 + - @backstage/plugin-org@0.6.2-next.2 + - @backstage/plugin-pagerduty@0.5.5-next.2 + - @backstage/plugin-permission-react@0.4.8-next.2 + - @backstage/plugin-playlist@0.1.3-next.2 + - @backstage/plugin-rollbar@0.4.12-next.2 + - @backstage/plugin-search@1.0.5-next.2 + - @backstage/plugin-sentry@0.4.5-next.2 + - @backstage/plugin-shortcuts@0.3.4-next.2 + - @backstage/plugin-stack-overflow@0.1.8-next.2 + - @backstage/plugin-tech-insights@0.3.4-next.2 + - @backstage/plugin-tech-radar@0.5.19-next.2 + - @backstage/plugin-techdocs@1.4.1-next.2 + - @backstage/plugin-techdocs-react@1.0.7-next.2 + - @backstage/plugin-todo@0.2.14-next.2 + - @backstage/plugin-user-settings@0.6.0-next.2 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/theme@0.2.16 + - @backstage/plugin-catalog-common@1.0.9-next.2 + +## 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..5bac16b457 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.2", "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/App.tsx b/packages/app/src/App.tsx index fd73e99bcb..05ef61c11a 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -280,7 +280,7 @@ const routes = ( const App = () => ( - + {routes} 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..e1c0d292d4 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,49 @@ # @backstage/backend-common +## 0.17.0-next.2 + +### Patch Changes + +- 98776e638a: Fixed GitlabUrlReader to include api tokens in API calls +- 20a5161f04: Adds MySQL support for the catalog-backend +- 3c1302c07d: Updated dependency `@types/http-errors` to `^2.0.0`. +- 8015ff1258: Tweaked wording to use inclusive terminology +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + - @backstage/config@1.0.5-next.1 + - @backstage/config-loader@1.1.7-next.2 + - @backstage/errors@1.1.4-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/types@1.0.2-next.1 + +## 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 a063815056..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'; @@ -200,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; } @@ -210,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; @@ -544,7 +542,7 @@ export type ReadTreeOptions = { }, ): boolean; etag?: string; - signal?: AbortSignal_2; + signal?: AbortSignal; }; // @public @@ -598,7 +596,7 @@ export type ReadTreeResponseFile = { // @public export type ReadUrlOptions = { etag?: string; - signal?: AbortSignal_2; + signal?: AbortSignal; }; // @public @@ -657,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..6e8cb6faeb 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.2", "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", @@ -102,7 +101,7 @@ "@types/compression": "^1.7.0", "@types/concat-stream": "^2.0.0", "@types/fs-extra": "^9.0.3", - "@types/http-errors": "^1.6.3", + "@types/http-errors": "^2.0.0", "@types/minimist": "^1.2.0", "@types/mock-fs": "^4.13.0", "@types/morgan": "^1.9.0", 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/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/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index 518e2efadc..31092e7707 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -44,6 +44,7 @@ const gitlabProcessor = new GitlabUrlReader( host: 'gitlab.com', apiBaseUrl: 'https://gitlab.com/api/v4', baseUrl: 'https://gitlab.com', + token: 'gl-dummy-token', }), ), ), @@ -57,6 +58,7 @@ const hostedGitlabProcessor = new GitlabUrlReader( host: 'gitlab.mycompany.com', apiBaseUrl: 'https://gitlab.mycompany.com/api/v4', baseUrl: 'https://gitlab.mycompany.com', + token: 'gl-dummy-token', }), ), ), @@ -656,4 +658,21 @@ describe('GitlabUrlReader', () => { ).rejects.toThrow(/^Unable to translate GitLab artifact URL:/); }); }); + + describe('resolveProjectToId', () => { + it('should resolve the project path to a valid project id', async () => { + worker.use( + rest.get('*/api/v4/projects/some%2Fproject', (req, res, ctx) => { + // the private-token header must be included on API calls + expect(req.headers.get('private-token')).toBe('gl-dummy-token'); + return res(ctx.status(200), ctx.json({ id: 12345 })); + }), + ); + await expect( + (gitlabProcessor as any).resolveProjectToId( + new URL('https://gitlab.com/some/project'), + ), + ).resolves.toEqual(12345); + }); + }); }); diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts index 522e81cd2f..a582f02cf0 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.ts @@ -311,6 +311,7 @@ export class GitlabUrlReader implements UrlReader { `${ pathToProject.origin }${relativePath}/api/v4/projects/${encodeURIComponent(project)}`, + getGitLabRequestOptions(this.integration.config), ); const data = await result.json(); if (!result.ok) { 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-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 270e946880..fb593ef671 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/backend-defaults +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.2.4-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + +## 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..0b70fc35d9 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.2", "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..91e9441de6 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,25 @@ # example-backend-next +## 0.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-app-backend@0.3.39-next.2 + - @backstage/plugin-scaffolder-backend@1.9.0-next.2 + - @backstage/backend-defaults@0.1.4-next.2 + +## 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..0eb9d02a68 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.2", "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..5c600f446d 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/backend-plugin-api +## 0.2.0-next.2 + +### Minor Changes + +- 884d749b14: **BREAKING**: All core service references are now exported via a single `coreServices` object. For example, the `loggerServiceRef` is now accessed via `coreServices.logger` instead. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## 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..f01f8df6ce 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.2.0-next.2", "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..3000b92700 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/backend-tasks +## 0.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.17.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + +## 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..1008ef5f74 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.2", "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..0b2c25b9e2 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/backend-test-utils +## 0.1.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.2.4-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/cli@0.21.2-next.2 + - @backstage/backend-plugin-api@0.2.0-next.2 + - @backstage/config@1.0.5-next.1 + +## 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..83d398562d 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.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index d30c720c73..d04638b675 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,99 @@ # example-backend +## 0.2.78-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-azure-devops-backend@0.3.18-next.2 + - @backstage/plugin-search-backend@1.2.0-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.1.0-next.2 + - @backstage/plugin-search-backend-node@1.1.0-next.2 + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-playlist-backend@0.2.2-next.2 + - @backstage/plugin-search-backend-module-pg@0.4.3-next.2 + - @backstage/plugin-app-backend@0.3.39-next.2 + - @backstage/plugin-catalog-node@1.3.0-next.2 + - @backstage/plugin-events-backend@0.2.0-next.2 + - @backstage/plugin-scaffolder-backend@1.9.0-next.2 + - @backstage/backend-common@0.17.0-next.2 + - @backstage/plugin-search-common@1.2.0-next.2 + - example-app@0.2.78-next.2 + - @backstage/plugin-techdocs-backend@1.4.2-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.2 + - @backstage/backend-tasks@0.4.0-next.2 + - @backstage/plugin-auth-backend@0.17.2-next.2 + - @backstage/plugin-auth-node@0.2.8-next.2 + - @backstage/plugin-azure-sites-backend@0.1.1-next.2 + - @backstage/plugin-badges-backend@0.1.33-next.2 + - @backstage/plugin-code-coverage-backend@0.2.5-next.2 + - @backstage/plugin-explore-backend@0.0.1-next.1 + - @backstage/plugin-graphql-backend@0.1.29-next.2 + - @backstage/plugin-jenkins-backend@0.1.29-next.2 + - @backstage/plugin-kafka-backend@0.2.32-next.2 + - @backstage/plugin-kubernetes-backend@0.8.1-next.2 + - @backstage/plugin-permission-backend@0.5.14-next.2 + - @backstage/plugin-permission-node@0.7.2-next.2 + - @backstage/plugin-proxy-backend@0.2.33-next.2 + - @backstage/plugin-rollbar-backend@0.1.36-next.2 + - @backstage/plugin-tech-insights-backend@0.5.5-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.2 + - @backstage/plugin-tech-insights-node@0.3.7-next.2 + - @backstage/plugin-todo-backend@0.1.36-next.2 + - @backstage/catalog-client@1.2.0-next.1 + - @backstage/catalog-model@1.1.4-next.1 + - @backstage/config@1.0.5-next.1 + - @backstage/integration@1.4.1-next.1 + - @backstage/plugin-events-node@0.2.0-next.2 + - @backstage/plugin-permission-common@0.7.2-next.1 + +## 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..99e38c6b13 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.2", "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/CHANGELOG.md b/packages/cli-common/CHANGELOG.md index 30a8fd70bb..ced0cc1502 100644 --- a/packages/cli-common/CHANGELOG.md +++ b/packages/cli-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/cli-common +## 0.1.11-next.0 + +### Patch Changes + +- 8015ff1258: Tweaked wording to use inclusive terminology + ## 0.1.10 ### Patch Changes diff --git a/packages/cli-common/package.json b/packages/cli-common/package.json index 3b229071cf..6bc7cad209 100644 --- a/packages/cli-common/package.json +++ b/packages/cli-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli-common", "description": "Common functionality used by cli, backend, and create-app", - "version": "0.1.10", + "version": "0.1.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { 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..6e82755701 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/cli +## 0.21.2-next.2 + +### Patch Changes + +- 5850ef9b84: Fix webpack dev server issue where it wasn't serving `index.html` from correct endpoint on subsequent requests. +- ee14bab716: Updated dependency `minimatch` to `5.1.1` and switch version range to `^`. +- ed0cf59c59: Updated dependency `@rollup/plugin-commonjs` to `^23.0.0`. +- 16b7c2fccd: Updated dependency `@rollup/plugin-yaml` to `^4.0.0`. +- 086c0bbb45: Updated dependency `@rollup/plugin-json` to `^5.0.0`. +- 8015ff1258: Tweaked wording to use inclusive terminology +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + - @backstage/config@1.0.5-next.1 + - @backstage/config-loader@1.1.7-next.2 + - @backstage/errors@1.1.4-next.1 + - @backstage/release-manifests@0.0.8-next.0 + - @backstage/types@1.0.2-next.1 + +## 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/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..4a16b18318 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.2", "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/server.ts b/packages/cli/src/lib/bundler/server.ts index fb11316fa6..cef55d3265 100644 --- a/packages/cli/src/lib/bundler/server.ts +++ b/packages/cli/src/lib/bundler/server.ts @@ -60,6 +60,9 @@ export async function serveBundle(options: ServeOptions) { // Paths with dots should still use the history fallback. // See https://github.com/facebookincubator/create-react-app/issues/387. disableDotRule: true, + + // The index needs to be rewritten relative to the new public path, including subroutes. + index: `${config.output?.publicPath}index.html`, }, https: url.protocol === 'https:' diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index 7526b085de..3c4bddbba3 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/codemods +## 0.1.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + ## 0.1.41 ### Patch Changes diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 29d639456b..0b49cef79a 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/codemods", "description": "A collection of codemods for Backstage projects", - "version": "0.1.41", + "version": "0.1.42-next.0", "publishConfig": { "access": "public", "main": "dist/index.cjs.js" diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index e079cb345b..eaee146dc7 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/config-loader +## 1.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.11-next.0 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/types@1.0.2-next.1 + +## 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..33b47314a6 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.2", "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..d4ade1a82a 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/core-app-api +## 1.2.1-next.2 + +### Patch Changes + +- b4b5b02315: Tweak feature flag registration so that it happens immediately before the first rendering of the app, rather than just after. +- 203271b746: Prevent duplicate feature flag components from rendering in the settings when using components +- 8015ff1258: Tweaked wording to use inclusive terminology +- 63310e3987: Apps will now rewrite the `app.baseUrl` configuration to match the current `location.origin`. The `backend.baseUrl` will also be rewritten in the same way when the `app.baseUrl` and `backend.baseUrl` have matching origins. This will reduce the need for separate frontend builds for different environments. +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/types@1.0.2-next.1 + - @backstage/version-bridge@1.0.3-next.0 + +## 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 1c15f7d6f5..e1c14f2c95 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.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -39,7 +39,7 @@ "@types/prop-types": "^15.7.3", "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.compat.test.tsx b/packages/core-app-api/src/app/AppManager.compat.test.tsx index bdebd79dc4..cfbcc87a01 100644 --- a/packages/core-app-api/src/app/AppManager.compat.test.tsx +++ b/packages/core-app-api/src/app/AppManager.compat.test.tsx @@ -81,7 +81,9 @@ describe.each(['beta', 'stable'])('react-router %s', rrVersion => { configLoader: async () => [ { context: 'test', - data: { app: { baseUrl: 'http://localhost/foo' } }, + data: { + app: { baseUrl: 'http://localhost/foo' }, + }, }, ], bindRoutes: () => {}, diff --git a/packages/core-app-api/src/app/AppManager.stable.test.tsx b/packages/core-app-api/src/app/AppManager.stable.test.tsx index a9948a6070..ba16353d47 100644 --- a/packages/core-app-api/src/app/AppManager.stable.test.tsx +++ b/packages/core-app-api/src/app/AppManager.stable.test.tsx @@ -62,7 +62,9 @@ describe('AppManager', () => { configLoader: async () => [ { context: 'test', - data: { app: { baseUrl: 'http://localhost/foo' } }, + data: { + app: { baseUrl: 'http://localhost/foo' }, + }, }, ], }); @@ -94,7 +96,9 @@ describe('AppManager', () => { configLoader: async () => [ { context: 'test', - data: { app: { baseUrl: 'http://localhost/foo' } }, + data: { + app: { baseUrl: 'http://localhost/foo' }, + }, }, ], }); diff --git a/packages/core-app-api/src/app/AppManager.test.tsx b/packages/core-app-api/src/app/AppManager.test.tsx index c70b43581a..03bd34eba1 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, @@ -34,9 +34,11 @@ import { createSubRouteRef, createRoutableExtension, analyticsApiRef, + useApi, } from '@backstage/core-plugin-api'; import { AppManager } from './AppManager'; import { AppComponents, AppIcons } from './types'; +import { FeatureFlagged } from '../routing/FeatureFlagged'; describe('Integration Test', () => { const noOpAnalyticsApi = createApiFactory( @@ -164,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, @@ -224,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, @@ -282,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({ @@ -345,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({ @@ -415,20 +397,103 @@ 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', + featureFlags: [{ name: 'show-p1-feature' }], + }); + const p2 = createPlugin({ + id: 'p2', + featureFlags: [{ name: 'show-p2-feature' }], + }); + + const app = new AppManager({ + apis: [], + defaultApis: [], + themes, + icons, + plugins: [p1, p2], + components, + configLoader: async () => [], + }); + + const Provider = app.getProvider(); + const Router = app.getRouter(); + + function FeatureFlags() { + const featureFlags = useApi(featureFlagsApiRef); + return ( +
{`Flags: ${featureFlags + .getRegisteredFlags() + .map(f => f.name) + .join(',')}`}
+ ); + } + + await renderWithEffects( + + + +
My feature behind a flag
+
+ +
My feature behind a flag
+
+ +
+
, + ); + + expect( + screen.getByText('Flags: show-p1-feature,show-p2-feature'), + ).toBeInTheDocument(); + }); + it('should track route changes via analytics api', async () => { const mockAnalyticsApi = new MockAnalyticsApi(); const apis = [createApiFactory(analyticsApiRef, mockAnalyticsApi)]; const app = new AppManager({ apis, defaultApis: [], - themes: [ - { - id: 'light', - title: 'Light Theme', - variant: 'light', - Provider: ({ children }) => <>{children}, - }, - ], + themes, icons, plugins: [], components, @@ -482,14 +547,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, @@ -532,14 +590,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, @@ -569,4 +620,110 @@ describe('Integration Test', () => { ), ]); }); + + describe('relative url resolvers', () => { + it.each([ + [ + [document.location.href, document.location.href], + { + backend: { + baseUrl: 'http://localhost:8008/', + }, + app: { + baseUrl: 'http://localhost:8008/', + }, + }, + ], + [ + [ + `${document.location.origin}/backstage`, + `${document.location.origin}/backstage`, + ], + { + backend: { + baseUrl: 'http://test.com/backstage', + }, + app: { + baseUrl: 'http://test.com/backstage', + }, + }, + ], + [ + [ + `${document.location.origin}/backstage/instance`, + `${document.location.origin}/backstage/instance`, + ], + { + backend: { + baseUrl: 'http://test.com/backstage/instance', + }, + app: { + baseUrl: 'http://test.com/backstage/instance', + }, + }, + ], + [ + [ + `${document.location.origin}/backstage/instance`, + `http://test.com/backstage/instance`, + ], + { + backend: { + baseUrl: 'http://test.com/backstage/instance', + }, + app: { + baseUrl: 'http://test-front.com/backstage/instance', + }, + }, + ], + ])( + 'should be %p when %p', + async ([expectedAppUrl, expectedBackendUrl], data) => { + const app = new AppManager({ + apis: [], + defaultApis: [], + themes: [ + { + id: 'light', + title: 'Light Theme', + variant: 'light', + Provider: ({ children }) => <>{children}, + }, + ], + icons, + plugins: [], + components, + configLoader: async () => [ + { + context: 'test', + data, + }, + ], + }); + + const Provider = app.getProvider(); + const ConfigDisplay = ({ configString }: { configString: string }) => { + const config = useApi(configApiRef); + return ( + + {configString}: {config?.getString(configString)} + + ); + }; + + const dom = await renderWithEffects( + + + + , + ); + + expect(dom.getByText(`app.baseUrl: ${expectedAppUrl}`)).toBeTruthy(); + + expect( + dom.getByText(`backend.baseUrl: ${expectedBackendUrl}`), + ).toBeTruthy(); + }, + ); + }); }); diff --git a/packages/core-app-api/src/app/AppManager.tsx b/packages/core-app-api/src/app/AppManager.tsx index 0ca09c0a0c..155ff6ad3b 100644 --- a/packages/core-app-api/src/app/AppManager.tsx +++ b/packages/core-app-api/src/app/AppManager.tsx @@ -14,15 +14,15 @@ * limitations under the License. */ -import { Config } from '@backstage/config'; +import { AppConfig, Config } from '@backstage/config'; import React, { ComponentType, createContext, 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; @@ -154,7 +154,71 @@ function useConfigLoader( }; } - const configReader = ConfigReader.fromConfigs(config.value ?? []); + let configReader; + /** + * config.value can be undefined or empty. If it's either, don't bother overriding anything. + */ + if (config.value?.length) { + const urlConfigReader = ConfigReader.fromConfigs(config.value); + + /** + * Return the origin of the given URL. + * @param url An absolute URL. + * @returns The given URL's origin. + * @throws If fullUrl is not a correctly formatted absolute URL. + */ + const getOrigin = (url: string) => new URL(url).origin; + + /** + * Resolve an absolute URL as relative to the current document. + * @param fullUrl URL to resolve. + * @returns Absolute URL with origin as the current document origin. + * @throws If fullUrl is not a correctly formatted absolute URL. + */ + const overrideOrigin = (fullUrl: string) => { + return new URL( + fullUrl.replace(getOrigin(fullUrl), ''), + document.location.origin, + ).href; + }; + + /** + * Test configs may not define `app.baseUrl` or `backend.baseUrl` and we + * don't want to enforce here. + */ + const appBaseUrl = urlConfigReader.getOptionalString('app.baseUrl'); + const backendBaseUrl = urlConfigReader.getOptionalString('backend.baseUrl'); + + let configs = config.value; + const relativeResolverConfig: AppConfig = { + data: {}, + context: 'relative-resolver', + }; + if (appBaseUrl && backendBaseUrl) { + const appOrigin = getOrigin(appBaseUrl); + const backendOrigin = getOrigin(backendBaseUrl); + + if (appOrigin === backendOrigin) { + relativeResolverConfig.data.backend = { + baseUrl: overrideOrigin(backendBaseUrl), + }; + } + } + if (appBaseUrl) { + relativeResolverConfig.data.app = { + baseUrl: overrideOrigin(appBaseUrl), + }; + } + /** + * Only add the relative config if there is actually data to add. + */ + if (Object.keys(relativeResolverConfig.data).length) { + configs = configs.concat([relativeResolverConfig]); + } + configReader = ConfigReader.fromConfigs(configs); + } else { + configReader = ConfigReader.fromConfigs([]); + } return { api: configReader }; } @@ -230,6 +294,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 +349,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()) { @@ -310,15 +386,15 @@ export class AppManager implements BackstageApp { // Go through the featureFlags returned from the traversal and // register those now the configApi has been loaded + const registeredFlags = featureFlagsApi.getRegisteredFlags(); + const flagNames = new Set(registeredFlags.map(f => f.name)); for (const name of featureFlags) { - featureFlagsApi.registerFlag({ name, pluginId: '' }); + // Prevents adding duplicate feature flags + if (!flagNames.has(name)) { + featureFlagsApi.registerFlag({ name, pluginId: '' }); + } } } - }, [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..101bf2206a 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,51 @@ # @backstage/core-components +## 0.12.1-next.2 + +### Patch Changes + +- d2e3bf6737: Made AlertDisplay not crash on undefined messages +- 5fb6d5e92e: Updated dependency `@react-hookz/web` to `^19.0.0`. +- 146378c146: Updated dependency `@react-hookz/web` to `^20.0.0`. +- 8015ff1258: Tweaked wording to use inclusive terminology +- 830687539f: Sync components in @backstage/core-components with the Component Design Guidelines +- 1ae86ab5fb: Added an option to allow the `AlertMessage` to be self-closing. This is done with a new `display` property that is set to `transient` on the `AlertMessage` when triggering a message to the `AlertApi`. The length of time that these transient messages stay open for can be set using the `transientTimeoutMs` prop on the `AlertDisplay` in the `App.tsx`. Here is an example: + + ```diff + const App = () => ( + + + + + + {routes} + + + ); + ``` + + The above example will set the transient timeout to 2500ms from the default of 5000ms + +- 16e31e690f: InfoCard - Remove subheader container when there is not a subheader or icon +- Updated dependencies + - @backstage/core-plugin-api@1.2.0-next.2 + - @backstage/config@1.0.5-next.1 + - @backstage/errors@1.1.4-next.1 + - @backstage/theme@0.2.16 + - @backstage/version-bridge@1.0.3-next.0 + +## 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..d8ea9d2bbe 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -52,7 +52,7 @@ 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 @@ -61,6 +61,7 @@ export type AlertDisplayProps = { vertical: 'top' | 'bottom'; horizontal: 'left' | 'center' | 'right'; }; + transientTimeoutMs?: number; }; // @public diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 11aebfbc0f..e12d5fdea5 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.2", "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": "^20.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.test.tsx b/packages/core-components/src/components/AlertDisplay/AlertDisplay.test.tsx index c366082b46..b75f773f90 100644 --- a/packages/core-components/src/components/AlertDisplay/AlertDisplay.test.tsx +++ b/packages/core-components/src/components/AlertDisplay/AlertDisplay.test.tsx @@ -14,13 +14,15 @@ * limitations under the License. */ -import React from 'react'; -import { screen } from '@testing-library/react'; -import { AlertDisplay } from './AlertDisplay'; -import { alertApiRef } from '@backstage/core-plugin-api'; +import { AlertMessage, alertApiRef } from '@backstage/core-plugin-api'; +import { TestApiProvider, renderInTestApp } from '@backstage/test-utils'; +import { fireEvent, screen } from '@testing-library/react'; + import { AlertApiForwarder } from '@backstage/core-app-api'; +import { AlertDisplay } from './AlertDisplay'; import Observable from 'zen-observable'; -import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; +import React from 'react'; +import { act } from '@testing-library/react'; const TEST_MESSAGE = 'TEST_MESSAGE'; @@ -93,4 +95,263 @@ describe('', () => { expect(screen.getByText('(2 older messages)')).toBeInTheDocument(); }); }); + + describe('with transient message', () => { + const apis = [ + [ + alertApiRef, + { + post() {}, + alert$() { + return Observable.of({ + message: 'transient message one', + display: 'transient', + }); + }, + }, + ] as const, + ] as const; + + it('renders message and then removes it', async () => { + jest.useFakeTimers(); + const { queryByText } = await renderInTestApp( + + + , + ); + + expect(queryByText('transient message one')).toBeInTheDocument(); + act(() => { + jest.advanceTimersByTime(5005); + }); + expect(queryByText('transient message one')).not.toBeInTheDocument(); + jest.useRealTimers(); + }); + + it('respects transientTimeoutMs prop', async () => { + jest.useFakeTimers(); + const { queryByText } = await renderInTestApp( + + + , + ); + + expect(queryByText('transient message one')).toBeInTheDocument(); + act(() => { + jest.advanceTimersByTime(2505); + }); + expect(queryByText('transient message one')).not.toBeInTheDocument(); + jest.useRealTimers(); + }); + }); + + describe('with multiple transient messages', () => { + const alert$ = () => + new Observable(subscriber => { + subscriber.next({ + message: 'transient message one', + display: 'transient', + }); + setTimeout(() => { + subscriber.next({ + message: 'transient message two', + display: 'transient', + }); + }, 1000); + setTimeout(() => { + subscriber.next({ + message: 'transient message three', + display: 'transient', + }); + }, 2000); + }); + + const apis = [ + [ + alertApiRef, + { + post() {}, + alert$, + }, + ] as const, + ] as const; + + it('renders message and then removes it', async () => { + jest.useFakeTimers(); + const { queryByText } = await renderInTestApp( + + + , + ); + // Validate adding messages + expect(queryByText('transient message one')).toBeInTheDocument(); + act(() => { + jest.advanceTimersByTime(1000); + }); + expect(queryByText('transient message one')).toBeInTheDocument(); + expect(queryByText('(1 older message)')).toBeInTheDocument(); + act(() => { + jest.advanceTimersByTime(1000); + }); + expect(queryByText('transient message one')).toBeInTheDocument(); + expect(queryByText('(2 older messages)')).toBeInTheDocument(); + + // Validate removing messages + act(() => { + jest.advanceTimersByTime(5000); + }); + expect(queryByText('transient message two')).toBeInTheDocument(); + expect(queryByText('(1 older message)')).toBeInTheDocument(); + + act(() => { + jest.advanceTimersByTime(5000); + }); + expect(queryByText('transient message three')).toBeInTheDocument(); + + act(() => { + jest.advanceTimersByTime(5000); + }); + expect(queryByText('transient message')).not.toBeInTheDocument(); + jest.useRealTimers(); + }); + + it('renders 3 different messages with overlapping timeout', async () => { + jest.useFakeTimers(); + const { queryByText } = await renderInTestApp( + + + , + ); + + // 3 messages stacked with 1.5s each, display times: 0-1.5, 1.5-3, 3-4.5 + + // 0s in, only message 1 + expect(queryByText('transient message one')).toBeInTheDocument(); + + // 1s in, message 1 still shown, message 2 added in background + act(() => jest.advanceTimersByTime(1000)); + expect(queryByText('transient message one')).toBeInTheDocument(); + expect(queryByText('(1 older message)')).toBeInTheDocument(); + + // 2s in, message 2 now shown, message 3 added + act(() => jest.advanceTimersByTime(1000)); + expect(queryByText('transient message two')).toBeInTheDocument(); + expect(queryByText('(1 older message)')).toBeInTheDocument(); + + // 3.5s in, message 3 now shown + act(() => jest.advanceTimersByTime(1500)); + expect(queryByText('transient message three')).toBeInTheDocument(); + + // 5s in, all messages gone + act(() => jest.advanceTimersByTime(1500)); + expect(queryByText('transient message three')).not.toBeInTheDocument(); + jest.useRealTimers(); + }); + + it('renders 3 different messages with overlapping timeout and manual removal', async () => { + jest.useFakeTimers(); + const { queryByText } = await renderInTestApp( + + + , + ); + + // 3 messages stacked with 1.5s each, display times: 0-1.5, 1.5-3, 3-4.5 + + // 0s in, only message 1 + expect(queryByText('transient message one')).toBeInTheDocument(); + + // 1s in, message 1 still shown, message 2 added in background + act(() => jest.advanceTimersByTime(1000)); + expect(queryByText('transient message one')).toBeInTheDocument(); + expect(queryByText('(1 older message)')).toBeInTheDocument(); + + // manually remove message 1 + fireEvent.click(screen.getByTestId('error-button-close')); + expect(screen.getByText('transient message two')).toBeInTheDocument(); + + // 2s in, message 2 now shown, message 3 added + act(() => jest.advanceTimersByTime(1000)); + expect(queryByText('transient message two')).toBeInTheDocument(); + expect(queryByText('(1 older message)')).toBeInTheDocument(); + + // 3s in, message 3 now shown + act(() => jest.advanceTimersByTime(1500)); + expect(queryByText('transient message three')).toBeInTheDocument(); + + // 4s in, all messages gone + act(() => jest.advanceTimersByTime(1500)); + expect(queryByText('transient message three')).not.toBeInTheDocument(); + jest.useRealTimers(); + }); + }); + + describe('with multiple messages of mixed display', () => { + const alert$ = () => + new Observable(subscriber => { + subscriber.next({ + message: 'transient message one', + display: 'transient', + }); + setTimeout(() => { + subscriber.next({ + message: 'permanent message', + display: 'permanent', + }); + }, 1000); + setTimeout(() => { + subscriber.next({ + message: 'transient message three', + display: 'transient', + }); + }, 2000); + }); + + const apis = [ + [ + alertApiRef, + { + post() {}, + alert$, + }, + ] as const, + ] as const; + + it('renders message and then removes it', async () => { + jest.useFakeTimers(); + const { queryByText } = await renderInTestApp( + + + , + ); + // Validate adding messages + expect(queryByText('transient message one')).toBeInTheDocument(); + act(() => { + jest.advanceTimersByTime(1000); + }); + expect(queryByText('transient message one')).toBeInTheDocument(); + expect(queryByText('(1 older message)')).toBeInTheDocument(); + act(() => { + jest.advanceTimersByTime(1000); + }); + expect(queryByText('transient message one')).toBeInTheDocument(); + expect(queryByText('(2 older messages)')).toBeInTheDocument(); + + // Validate removing messages + act(() => { + jest.advanceTimersByTime(5000); + }); + expect(queryByText('permanent message')).toBeInTheDocument(); + expect(queryByText('(1 older message)')).toBeInTheDocument(); + + fireEvent.click(screen.getByTestId('error-button-close')); + expect(queryByText('transient message three')).toBeInTheDocument(); + + act(() => { + jest.advanceTimersByTime(5000); + }); + expect(queryByText('transient message')).not.toBeInTheDocument(); + jest.useRealTimers(); + }); + }); }); diff --git a/packages/core-components/src/components/AlertDisplay/AlertDisplay.tsx b/packages/core-components/src/components/AlertDisplay/AlertDisplay.tsx index 3af261da23..b1c8273749 100644 --- a/packages/core-components/src/components/AlertDisplay/AlertDisplay.tsx +++ b/packages/core-components/src/components/AlertDisplay/AlertDisplay.tsx @@ -13,14 +13,27 @@ * 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'; + +/** + * Properties for {@link AlertDisplay} + * + * @public + */ +export type AlertDisplayProps = { + anchorOrigin?: { + vertical: 'top' | 'bottom'; + horizontal: 'left' | 'center' | 'right'; + }; + transientTimeoutMs?: number; +}; /** * Displays alerts from {@link @backstage/core-plugin-api#AlertApi} @@ -29,23 +42,33 @@ import pluralize from 'pluralize'; * @remarks * * Shown as SnackBar at the center top of the page by default. Configurable with props. + * + * @param anchorOrigin - The `vertical` property will set the vertical orientation of where the AlertDisplay will be located + * and the `horizontal` property will set the horizontal orientation of where the AlertDisplay will be located + * @param transientTimeoutMs - Number of milliseconds a transient alert will stay open for. Default value is 5000 + * + * @example + * Here's some examples: + * ``` + * // This example shows the default usage, the SnackBar will show up at the top in the center and any transient messages will stay open for 5000ms + * + * + * // With this example the SnackBar will show up in the bottom right hand corner and any transient messages will stay open for 2500ms + * + * + * // If you want to just set the time a transientTimeoutMs, you can do that like this: + * + * ``` */ - -// 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); - const { anchorOrigin = { vertical: 'top', horizontal: 'center' } } = props; + const { + anchorOrigin = { vertical: 'top', horizontal: 'center' }, + transientTimeoutMs, + } = props; + const timeoutMs = transientTimeoutMs ?? 5000; useEffect(() => { const subscription = alertApi @@ -57,12 +80,25 @@ export function AlertDisplay(props: AlertDisplayProps) { }; }, [alertApi]); + const [firstMessage] = messages; + + useEffect(() => { + if (firstMessage && firstMessage.display === 'transient') { + const timeout = setTimeout(() => { + setMessages(msgs => { + const newMsgs = msgs.filter(msg => msg !== firstMessage); + return newMsgs.length === msgs.length ? msgs : newMsgs; + }); + }, timeoutMs); + return () => clearTimeout(timeout); + } + return undefined; + }, [firstMessage, timeoutMs]); + if (messages.length === 0) { return null; } - const [firstMessage] = messages; - const handleClose = () => { setMessages(msgs => msgs.filter(msg => msg !== firstMessage)); }; @@ -82,15 +118,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 ( -
+ {label} @@ -217,7 +218,7 @@ export function SelectComponent(props: SelectProps) { tabIndex={0} renderValue={s => multiple && (value as any[]).length !== 0 ? ( -
+ {(s as string[]).map(selectedValue => ( el.value === selectedValue)?.value} @@ -229,7 +230,7 @@ export function SelectComponent(props: SelectProps) { className={classes.chip} /> ))} -
+
) : ( {(value as any[]).length === 0 @@ -279,6 +280,6 @@ export function SelectComponent(props: SelectProps) { -
+ ); } diff --git a/packages/core-components/src/components/Select/static/ClosedDropdown.tsx b/packages/core-components/src/components/Select/static/ClosedDropdown.tsx index 7b0516d017..812afe34eb 100644 --- a/packages/core-components/src/components/Select/static/ClosedDropdown.tsx +++ b/packages/core-components/src/components/Select/static/ClosedDropdown.tsx @@ -21,11 +21,11 @@ import SvgIcon from '@material-ui/core/SvgIcon'; export type ClosedDropdownClassKey = 'icon'; const useStyles = makeStyles( - () => + theme => createStyles({ icon: { position: 'absolute', - right: '4px', + right: theme.spacing(0.5), pointerEvents: 'none', }, }), diff --git a/packages/core-components/src/components/Select/static/OpenedDropdown.tsx b/packages/core-components/src/components/Select/static/OpenedDropdown.tsx index 617288ded6..b87a00c26a 100644 --- a/packages/core-components/src/components/Select/static/OpenedDropdown.tsx +++ b/packages/core-components/src/components/Select/static/OpenedDropdown.tsx @@ -20,11 +20,11 @@ import SvgIcon from '@material-ui/core/SvgIcon'; export type OpenedDropdownClassKey = 'icon'; const useStyles = makeStyles( - () => + theme => createStyles({ icon: { position: 'absolute', - right: '4px', + right: theme.spacing(0.5), pointerEvents: 'none', }, }), diff --git a/packages/core-components/src/components/SimpleStepper/SimpleStepperFooter.tsx b/packages/core-components/src/components/SimpleStepper/SimpleStepperFooter.tsx index 0f7d604eb0..224b66533a 100644 --- a/packages/core-components/src/components/SimpleStepper/SimpleStepperFooter.tsx +++ b/packages/core-components/src/components/SimpleStepper/SimpleStepperFooter.tsx @@ -13,11 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { useContext, ReactNode, PropsWithChildren } from 'react'; -import { makeStyles } from '@material-ui/core/styles'; +import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; -import { StepActions } from './types'; +import { makeStyles } from '@material-ui/core/styles'; +import React, { PropsWithChildren, ReactNode, useContext } from 'react'; + import { VerticalStepperContext } from './SimpleStepper'; +import { StepActions } from './types'; export type SimpleStepperFooterClassKey = 'root'; @@ -145,7 +147,7 @@ export const SimpleStepperFooter = ({ }; return ( -
+ {[undefined, true].includes(actions.showBack) && stepIndex !== 0 && ( )} {children} -
+ ); }; 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 ? ( -
+ {title} {children} -
+ ) : ( diff --git a/packages/core-components/src/components/Status/Status.tsx b/packages/core-components/src/components/Status/Status.tsx index a855fe3ebe..364193e383 100644 --- a/packages/core-components/src/components/Status/Status.tsx +++ b/packages/core-components/src/components/Status/Status.tsx @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import { makeStyles } from '@material-ui/core/styles'; import { BackstageTheme } from '@backstage/theme'; +import { makeStyles } from '@material-ui/core/styles'; +import Typography from '@material-ui/core/Typography'; import classNames from 'classnames'; import React, { PropsWithChildren } from 'react'; @@ -31,12 +31,12 @@ export type StatusClassKey = const useStyles = makeStyles( theme => ({ status: { - fontWeight: 500, + fontWeight: theme.typography.fontWeightMedium, '&::before': { width: '0.7em', height: '0.7em', display: 'inline-block', - marginRight: 8, + marginRight: theme.spacing(1), borderRadius: '50%', content: '""', }, @@ -78,7 +78,8 @@ const useStyles = makeStyles( export function StatusOK(props: PropsWithChildren<{}>) { const classes = useStyles(props); return ( -