diff --git a/.changeset/afraid-flies-try.md b/.changeset/afraid-flies-try.md
new file mode 100644
index 0000000000..15d2e3942c
--- /dev/null
+++ b/.changeset/afraid-flies-try.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-cost-insights': patch
+---
+
+Move cost-insights data specific API types (non react) into an @backstage/plugin-cost-insights-common
+isomorphic package. This allows these types to be shared in any backend packages or other cost-insight
+modules.
diff --git a/.changeset/beige-carpets-double.md b/.changeset/beige-carpets-double.md
new file mode 100644
index 0000000000..98e0d8d69a
--- /dev/null
+++ b/.changeset/beige-carpets-double.md
@@ -0,0 +1,9 @@
+---
+'@backstage/plugin-code-coverage': minor
+---
+
+Cleaned up API exports.
+
+The `Router` export has been removed; users are expected to use `EntityCodeCoverageContent` instead.
+
+The `isPluginApplicableToEntity` helper has been deprecated, in favor of the `isCodeCoverageAvailable` helper.
diff --git a/.changeset/beige-carpets-triple.md b/.changeset/beige-carpets-triple.md
new file mode 100644
index 0000000000..5eda26fb02
--- /dev/null
+++ b/.changeset/beige-carpets-triple.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-code-coverage-backend': minor
+---
+
+Cleaned up API exports.
+
+The `CodeCoverageApi` and `makeRouter` exports have been removed from the backend, since they were not meant to be exported in the first place.
diff --git a/.changeset/blue-monkeys-explain.md b/.changeset/blue-monkeys-explain.md
new file mode 100644
index 0000000000..69382ff11d
--- /dev/null
+++ b/.changeset/blue-monkeys-explain.md
@@ -0,0 +1,6 @@
+---
+'@backstage/create-app': patch
+---
+
+Adds the ability to define the Backstage app name using a `BACKSTAGE_APP_NAME`
+environment variable when running `create-app`.
diff --git a/.changeset/cuddly-flowers-provide.md b/.changeset/cuddly-flowers-provide.md
new file mode 100644
index 0000000000..729ac96cda
--- /dev/null
+++ b/.changeset/cuddly-flowers-provide.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-fossa': patch
+---
+
+Allow configuration of base URL for Fossa links
diff --git a/.changeset/eighty-windows-brush.md b/.changeset/eighty-windows-brush.md
new file mode 100644
index 0000000000..753b53fbb4
--- /dev/null
+++ b/.changeset/eighty-windows-brush.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-tech-insights-backend': minor
+---
+
+Allow FactRetrieverRegistry to be injected into buildTechInsightsContext so that we can override default registry implementation.
diff --git a/.changeset/fifty-vans-drum.md b/.changeset/fifty-vans-drum.md
new file mode 100644
index 0000000000..6b1b920bb9
--- /dev/null
+++ b/.changeset/fifty-vans-drum.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-tech-radar': patch
+---
+
+Update tech-radar documentation on how to use an external json data source with dates.
diff --git a/.changeset/five-fireants-run.md b/.changeset/five-fireants-run.md
new file mode 100644
index 0000000000..589d46cc81
--- /dev/null
+++ b/.changeset/five-fireants-run.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+Fix the EntityLayout header style so that EntityContextMenu button can display in correct shape when user hover on it
diff --git a/.changeset/great-roses-pump.md b/.changeset/great-roses-pump.md
index 16a49bd464..0e15d186d4 100644
--- a/.changeset/great-roses-pump.md
+++ b/.changeset/great-roses-pump.md
@@ -4,7 +4,7 @@
Previously, the color of the Entity Context Menu (in the Entity Page Header) was hardcoded as `white`.
-This was an issue for themes that use a header with a white background. By default, the color of the icon is now `theme.palette.bursts.fontColor`.
+This was an issue for themes that use a header with a white background. By default, the color of the icon is now `theme.page.fontColor`.
It can now also be overridden in the theme, which is only necessary if the header title, subtitle and three-dots icon need to have different colors. For example:
diff --git a/.changeset/light-hornets-eat.md b/.changeset/light-hornets-eat.md
new file mode 100644
index 0000000000..795e51fb67
--- /dev/null
+++ b/.changeset/light-hornets-eat.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-cost-insights-common': minor
+---
+
+Introduces a new isomorphic @backstage/plugin-cost-insight-common package to contain shared types across all other cost insights packages and modules.
diff --git a/.changeset/little-geckos-end.md b/.changeset/little-geckos-end.md
new file mode 100644
index 0000000000..328095aa44
--- /dev/null
+++ b/.changeset/little-geckos-end.md
@@ -0,0 +1,18 @@
+---
+'@backstage/plugin-kubernetes-backend': minor
+---
+
+Add new endpoints to Kubernetes backend plugin
+
+BREAKING: Kubernetes backend plugin now depends on CatalogApi
+
+```typescript
+// Create new CatalogClient
+const catalogApi = new CatalogClient({ discoveryApi: env.discovery });
+const { router } = await KubernetesBuilder.createBuilder({
+ logger: env.logger,
+ config: env.config,
+ // Inject it into createBuilder params
+ catalogApi,
+}).build();
+```
diff --git a/.changeset/long-bananas-rescue.md b/.changeset/long-bananas-rescue.md
new file mode 100644
index 0000000000..d990fd67c6
--- /dev/null
+++ b/.changeset/long-bananas-rescue.md
@@ -0,0 +1,91 @@
+---
+'@backstage/plugin-catalog-backend-module-msgraph': minor
+---
+
+Align `msgraph` plugin's entity provider config with other providers. **Deprecated** entity processor as well as previous config.
+
+You will see warning at the log output until you migrate to the new setup.
+All deprecated parts will be removed eventually after giving some time to migrate.
+
+Please find information on how to migrate your current setup to the new one below.
+
+**Migration Guide:**
+
+There were two different way on how to use the msgraph plugin: processor or provider.
+
+Previous registration for the processor:
+
+```typescript
+// packages/backend/src/plugins/catalog.ts
+builder.addProcessor(
+ MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, {
+ logger: env.logger,
+ // [...]
+ }),
+);
+```
+
+Previous registration when using the provider:
+
+```typescript
+// packages/backend/src/plugins/catalog.ts
+builder.addEntityProvider(
+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, {
+ id: 'https://graph.microsoft.com/v1.0',
+ target: 'https://graph.microsoft.com/v1.0',
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
+ // [...]
+ }),
+);
+```
+
+Previous configuration as used for both:
+
+```yaml
+# app-config.yaml
+catalog:
+ processors:
+ microsoftGraphOrg:
+ providers:
+ - target: https://graph.microsoft.com/v1.0
+ # [...]
+```
+
+**Replacement:**
+
+Please check https://github.com/backstage/backstage/blob/master/plugins/catalog-backend-module-msgraph/README.md for the complete documentation of all configuration options (config as well as registration of the provider).
+
+```yaml
+# app-config.yaml
+catalog:
+ providers:
+ microsoftGraphOrg:
+ # In case you used the deprecated configuration with the entity provider
+ # using the value of `target` will keep the same location key for all
+ providerId: # some stable ID which will be used as part of the location key for all ingested data
+ target: https://graph.microsoft.com/v1.0
+ # [...]
+```
+
+```typescript
+// packages/backend/src/plugins/catalog.ts
+builder.addEntityProvider(
+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
+ // [...]
+ }),
+);
+```
+
+In case you've used multiple entity providers before
+**and** you had different transformers for each of them
+you can provide these directly at the one `fromConfig` call
+by passing a Record with the provider ID as key.
diff --git a/.changeset/many-vans-thank.md b/.changeset/many-vans-thank.md
new file mode 100644
index 0000000000..16f8c8a69b
--- /dev/null
+++ b/.changeset/many-vans-thank.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-jenkins': patch
+'@backstage/plugin-jenkins-backend': patch
+---
+
+feature: added support for multiple branches to the `JenkinsApi`
diff --git a/.changeset/metal-windows-share.md b/.changeset/metal-windows-share.md
new file mode 100644
index 0000000000..b4443a620f
--- /dev/null
+++ b/.changeset/metal-windows-share.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-search-backend-module-pg': patch
+---
+
+**DEPRECATED**: `PgSearchEngine` static `from` has been deprecated and will be removed in a future release. Use static `fromConfig` method to instantiate.
+
+Added support for highlighting matched terms in search result data
diff --git a/.changeset/ninety-coats-learn.md b/.changeset/ninety-coats-learn.md
new file mode 100644
index 0000000000..9d6945e9c0
--- /dev/null
+++ b/.changeset/ninety-coats-learn.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+Fix relative `sub-paths` by concatenating the app's base path with them.
diff --git a/.changeset/pink-cars-pretend.md b/.changeset/pink-cars-pretend.md
new file mode 100644
index 0000000000..c46cb99f55
--- /dev/null
+++ b/.changeset/pink-cars-pretend.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+new setUserAsOwner flag for publish:gitlab action
+
+The field default is `false`. When true it will use the token configured in the gitlab integration for the matching host, to try and set the user logged in via `repoUrlPicker` `requestUserCredentials` OAuth flow as owner of the repository created in GitLab.
diff --git a/.changeset/polite-lions-sell.md b/.changeset/polite-lions-sell.md
new file mode 100644
index 0000000000..07b5fcbd77
--- /dev/null
+++ b/.changeset/polite-lions-sell.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-auth-backend': patch
+---
+
+Auth provider now also export createAuthProviderIntegration
diff --git a/.changeset/pre.json b/.changeset/pre.json
index 2bba491efc..7b30cba7ba 100644
--- a/.changeset/pre.json
+++ b/.changeset/pre.json
@@ -158,50 +158,76 @@
"@backstage/plugin-vault-backend": "0.1.0",
"@backstage/plugin-xcmetrics": "0.2.26",
"@backstage/plugin-api-docs-module-protoc-gen-doc": "0.0.0",
- "@backstage/plugin-catalog-backend-module-openapi": "0.0.0"
+ "@backstage/plugin-catalog-backend-module-openapi": "0.0.0",
+ "@backstage/plugin-cost-insights-common": "0.0.0"
},
"changesets": [
+ "afraid-flies-try",
"beige-horses-scream",
+ "blue-monkeys-explain",
"breezy-poems-grab",
"breezy-seas-exist",
"bright-balloons-hide",
"calm-experts-buy",
"chilled-mirrors-grab",
+ "cool-toys-flow",
"create-app-1656408352",
"curly-candles-battle",
"curvy-weeks-matter",
+ "eight-suits-fail",
+ "eighty-windows-brush",
"eleven-mice-collect",
+ "five-fireants-run",
"forty-seals-complain",
"great-roses-pump",
"green-actors-argue",
"happy-boxes-melt",
+ "hot-rice-sin",
"large-kangaroos-poke",
"lemon-goats-obey",
+ "light-hornets-eat",
+ "long-bananas-rescue",
+ "many-vans-thank",
"metal-singers-matter",
+ "metal-windows-share",
"modern-ducks-lay",
+ "moody-crabs-march",
"nasty-zoos-cross",
"nervous-humans-sip",
+ "old-onions-hear",
"plenty-clouds-guess",
"polite-eagles-invite",
+ "polite-lions-sell",
"popular-pots-yell",
"pretty-masks-live",
+ "proud-toys-return",
"purple-beans-march",
"quiet-pens-notice",
"red-games-decide",
+ "renovate-149779d",
+ "renovate-2ae4dda",
"renovate-4b5ff24",
+ "renovate-7438bff",
+ "renovate-833a91b",
"renovate-9454dab",
"rude-llamas-lie",
+ "search-boats-double",
"search-lightning-cult",
"search-turtles-itch",
+ "serious-houses-watch",
"serious-zebras-joke",
"shaggy-melons-drive",
"sharp-numbers-taste",
"sharp-planes-turn",
+ "shiny-seahorses-do",
"shiny-turkeys-doubt",
+ "short-deers-remember",
"short-olives-train",
"shy-cameras-develop",
"silent-coats-brake",
+ "silly-geese-design",
"silver-needles-unite",
+ "smart-elephants-knock",
"smooth-sheep-hide",
"strange-tables-flash",
"strange-trains-collect",
@@ -211,14 +237,20 @@
"techdocs-eyes-sit",
"techdocs-gorgeous-plants-sniff",
"techdocs-sheep-talk",
+ "techdocs-sixty-mugs-hug",
"techdocs-the-whole-pulse",
+ "thick-cats-kiss",
"thick-radios-drive",
+ "thirty-rivers-watch",
+ "tricky-ravens-visit",
"twelve-candles-jump",
"two-crews-accept",
"unlucky-stingrays-juggle",
"weak-bananas-deliver",
+ "weak-jeans-cry",
"weak-llamas-repeat",
"wet-dolphins-act",
- "wicked-icons-grin"
+ "wicked-icons-grin",
+ "wicked-ladybugs-argue"
]
}
diff --git a/.changeset/purple-cherries-fix.md b/.changeset/purple-cherries-fix.md
new file mode 100644
index 0000000000..d29a107cf3
--- /dev/null
+++ b/.changeset/purple-cherries-fix.md
@@ -0,0 +1,22 @@
+---
+'@backstage/plugin-sentry': minor
+---
+
+Added the possibility to specify organization per component, now the annotation `sentry.io/project-slug` can have the format of `[organization]/[project-slug]` or just `[project-slug]`.
+
+**BREAKING**: The method `fetchIssue` changed the signature:
+
+```diff
+export interface SentryApi {
+ fetchIssues(
+- project: string,
+- statsFor: string,
+- query?: string,
++ entity: Entity,
++ options: {
++ statsFor: string;
++ query?: string;
++ },
+ ): Promise;
+}
+```
diff --git a/.changeset/renovate-0546761.md b/.changeset/renovate-0546761.md
new file mode 100644
index 0000000000..ed7b8b19a3
--- /dev/null
+++ b/.changeset/renovate-0546761.md
@@ -0,0 +1,103 @@
+---
+'@backstage/backend-common': patch
+'@backstage/backend-test-utils': patch
+'@backstage/catalog-client': patch
+'@backstage/cli': patch
+'@backstage/config-loader': patch
+'@backstage/core-app-api': patch
+'@backstage/core-components': patch
+'@backstage/core-plugin-api': patch
+'@backstage/integration-react': patch
+'@backstage/integration': patch
+'@backstage/release-manifests': patch
+'@backstage/test-utils': patch
+'@backstage/plugin-adr-backend': patch
+'@backstage/plugin-adr': patch
+'@backstage/plugin-airbrake-backend': patch
+'@backstage/plugin-airbrake': patch
+'@backstage/plugin-allure': patch
+'@backstage/plugin-analytics-module-ga': patch
+'@backstage/plugin-apache-airflow': patch
+'@backstage/plugin-api-docs': patch
+'@backstage/plugin-app-backend': patch
+'@backstage/plugin-auth-backend': patch
+'@backstage/plugin-auth-node': patch
+'@backstage/plugin-azure-devops-backend': patch
+'@backstage/plugin-azure-devops': patch
+'@backstage/plugin-badges': patch
+'@backstage/plugin-bitbucket-cloud-common': patch
+'@backstage/plugin-bitrise': patch
+'@backstage/plugin-catalog-backend-module-azure': patch
+'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
+'@backstage/plugin-catalog-backend-module-bitbucket': patch
+'@backstage/plugin-catalog-backend-module-gerrit': patch
+'@backstage/plugin-catalog-backend-module-github': patch
+'@backstage/plugin-catalog-backend-module-gitlab': patch
+'@backstage/plugin-catalog-backend-module-msgraph': patch
+'@backstage/plugin-catalog-backend': patch
+'@backstage/plugin-catalog-graphql': patch
+'@backstage/plugin-catalog-import': patch
+'@backstage/plugin-circleci': patch
+'@backstage/plugin-cloudbuild': patch
+'@backstage/plugin-code-climate': patch
+'@backstage/plugin-code-coverage-backend': patch
+'@backstage/plugin-code-coverage': patch
+'@backstage/plugin-codescene': patch
+'@backstage/plugin-config-schema': patch
+'@backstage/plugin-cost-insights': patch
+'@backstage/plugin-dynatrace': patch
+'@backstage/plugin-explore-react': patch
+'@backstage/plugin-explore': patch
+'@backstage/plugin-firehydrant': patch
+'@backstage/plugin-fossa': patch
+'@backstage/plugin-gcalendar': patch
+'@backstage/plugin-gcp-projects': patch
+'@backstage/plugin-git-release-manager': patch
+'@backstage/plugin-github-actions': patch
+'@backstage/plugin-github-deployments': patch
+'@backstage/plugin-github-pull-requests-board': patch
+'@backstage/plugin-gitops-profiles': patch
+'@backstage/plugin-gocd': patch
+'@backstage/plugin-graphiql': patch
+'@backstage/plugin-graphql-backend': patch
+'@backstage/plugin-home': patch
+'@backstage/plugin-ilert': patch
+'@backstage/plugin-jenkins-backend': patch
+'@backstage/plugin-jenkins': patch
+'@backstage/plugin-kafka': patch
+'@backstage/plugin-kubernetes': patch
+'@backstage/plugin-lighthouse': patch
+'@backstage/plugin-newrelic': patch
+'@backstage/plugin-org': patch
+'@backstage/plugin-pagerduty': patch
+'@backstage/plugin-periskop-backend': patch
+'@backstage/plugin-periskop': patch
+'@backstage/plugin-permission-backend': patch
+'@backstage/plugin-permission-common': patch
+'@backstage/plugin-permission-node': patch
+'@backstage/plugin-rollbar-backend': patch
+'@backstage/plugin-rollbar': patch
+'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/plugin-scaffolder': patch
+'@backstage/plugin-search': patch
+'@backstage/plugin-sentry': patch
+'@backstage/plugin-shortcuts': patch
+'@backstage/plugin-sonarqube': patch
+'@backstage/plugin-splunk-on-call': patch
+'@backstage/plugin-stack-overflow': patch
+'@backstage/plugin-tech-insights': patch
+'@backstage/plugin-tech-radar': patch
+'@backstage/plugin-techdocs-addons-test-utils': patch
+'@backstage/plugin-techdocs-backend': patch
+'@backstage/plugin-techdocs-module-addons-contrib': patch
+'@backstage/plugin-techdocs': patch
+'@backstage/plugin-todo-backend': patch
+'@backstage/plugin-todo': patch
+'@backstage/plugin-user-settings': patch
+'@backstage/plugin-vault-backend': patch
+'@backstage/plugin-vault': patch
+'@backstage/plugin-xcmetrics': patch
+---
+
+Updated dependency `msw` to `^0.43.0`.
diff --git a/.changeset/renovate-2ae4dda.md b/.changeset/renovate-2ae4dda.md
new file mode 100644
index 0000000000..2cedbcb9d7
--- /dev/null
+++ b/.changeset/renovate-2ae4dda.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend-module-openapi': patch
+---
+
+Updated dependency `openapi-types` to `^12.0.0`.
diff --git a/.changeset/renovate-4338117.md b/.changeset/renovate-4338117.md
new file mode 100644
index 0000000000..199073c599
--- /dev/null
+++ b/.changeset/renovate-4338117.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 `^15.0.0`.
diff --git a/.changeset/renovate-833a91b.md b/.changeset/renovate-833a91b.md
new file mode 100644
index 0000000000..15e23ec5ff
--- /dev/null
+++ b/.changeset/renovate-833a91b.md
@@ -0,0 +1,7 @@
+---
+'@backstage/core-components': patch
+'@backstage/plugin-codescene': patch
+'@backstage/plugin-sonarqube': patch
+---
+
+Updated dependency `rc-progress` to `3.4.0`.
diff --git a/.changeset/renovate-913f3dc.md b/.changeset/renovate-913f3dc.md
new file mode 100644
index 0000000000..edb2f95356
--- /dev/null
+++ b/.changeset/renovate-913f3dc.md
@@ -0,0 +1,5 @@
+---
+'@backstage/config-loader': patch
+---
+
+Updated dependency `typescript-json-schema` to `^0.54.0`.
diff --git a/.changeset/renovate-cbb545a.md b/.changeset/renovate-cbb545a.md
new file mode 100644
index 0000000000..be423e8252
--- /dev/null
+++ b/.changeset/renovate-cbb545a.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-api-docs': patch
+---
+
+Updated dependency `@asyncapi/react-component` to `1.0.0-next.39`.
diff --git a/.changeset/renovate-dd35ce8.md b/.changeset/renovate-dd35ce8.md
new file mode 100644
index 0000000000..9d828bc42d
--- /dev/null
+++ b/.changeset/renovate-dd35ce8.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-kubernetes-backend': patch
+'@backstage/plugin-kubernetes-common': patch
+'@backstage/plugin-kubernetes': patch
+---
+
+Updated dependency `@kubernetes/client-node` to `^0.17.0`.
diff --git a/.changeset/rich-goats-breathe.md b/.changeset/rich-goats-breathe.md
new file mode 100644
index 0000000000..2888c2f9a7
--- /dev/null
+++ b/.changeset/rich-goats-breathe.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-tech-insights-backend': minor
+---
+
+**BREAKING**: Update FactRetrieverRegistry interface to be async so that db backed implementations can be passed through to the FactRetrieverEngine.
+
+If you have existing custom `FactRetrieverRegistry` implementations, you'll need to remove the `retrievers` member and make all the methods async.
diff --git a/.changeset/search-boats-double.md b/.changeset/search-boats-double.md
new file mode 100644
index 0000000000..92fd372cb8
--- /dev/null
+++ b/.changeset/search-boats-double.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-react': patch
+---
+
+Fix search pagination to reset page cursor also when a term is cleared.
diff --git a/.changeset/serious-houses-watch.md b/.changeset/serious-houses-watch.md
new file mode 100644
index 0000000000..63d5253bcb
--- /dev/null
+++ b/.changeset/serious-houses-watch.md
@@ -0,0 +1,7 @@
+---
+'@backstage/theme': patch
+---
+
+**DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release
+
+The `genPageTheme` function now includes an optional options object with an optional `fontColor` which defaults to white if not provided.
diff --git a/.changeset/shiny-seahorses-do.md b/.changeset/shiny-seahorses-do.md
new file mode 100644
index 0000000000..06892900bf
--- /dev/null
+++ b/.changeset/shiny-seahorses-do.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-badges-backend': patch
+---
+
+Add missing installation instructions
diff --git a/.changeset/short-deers-remember.md b/.changeset/short-deers-remember.md
new file mode 100644
index 0000000000..7579e7773b
--- /dev/null
+++ b/.changeset/short-deers-remember.md
@@ -0,0 +1,21 @@
+---
+'@backstage/backend-common': patch
+'@backstage/integration': patch
+'@backstage/plugin-adr': patch
+'@backstage/plugin-catalog-backend': patch
+'@backstage/plugin-catalog-import': patch
+'@backstage/plugin-scaffolder': patch
+'@backstage/plugin-scaffolder-backend': patch
+'@backstage/plugin-techdocs': patch
+'@backstage/plugin-techdocs-module-addons-contrib': patch
+'@backstage/plugin-techdocs-node': patch
+---
+
+Upgrade git-url-parse to 12.0.0.
+
+Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+to several CVEs detected by Snyk.
+
+- SNYK-JS-PARSEURL-2935944
+- SNYK-JS-PARSEURL-2935947
+- SNYK-JS-PARSEURL-2936249
diff --git a/.changeset/silly-geese-design.md b/.changeset/silly-geese-design.md
new file mode 100644
index 0000000000..d4f8de2510
--- /dev/null
+++ b/.changeset/silly-geese-design.md
@@ -0,0 +1,6 @@
+---
+'@backstage/plugin-api-docs': patch
+'@backstage/plugin-catalog': minor
+---
+
+Add hidden title column to catalog and API table to enable filtering by title.
diff --git a/.changeset/small-shoes-hide.md b/.changeset/small-shoes-hide.md
new file mode 100644
index 0000000000..b1f95e9f2d
--- /dev/null
+++ b/.changeset/small-shoes-hide.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-backend-node': patch
+---
+
+Exports `MissingIndexError` that can be used by the search engines for better error handling when missing index.
diff --git a/.changeset/smart-elephants-knock.md b/.changeset/smart-elephants-knock.md
new file mode 100644
index 0000000000..7aed10a71e
--- /dev/null
+++ b/.changeset/smart-elephants-knock.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+The `test` command now ensures that all IO is flushed before exiting when printing `--help`.
diff --git a/.changeset/ten-cobras-wash.md b/.changeset/ten-cobras-wash.md
new file mode 100644
index 0000000000..81915d958d
--- /dev/null
+++ b/.changeset/ten-cobras-wash.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-auth-backend': minor
+---
+
+Allowed post method on /refresh path
diff --git a/.changeset/tender-chicken-learn.md b/.changeset/tender-chicken-learn.md
new file mode 100644
index 0000000000..bd95c5545f
--- /dev/null
+++ b/.changeset/tender-chicken-learn.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-backend': patch
+---
+
+If error is `MissingIndexError` we return a 400 response with a more clear error message.
diff --git a/.changeset/tender-terms-flash.md b/.changeset/tender-terms-flash.md
new file mode 100644
index 0000000000..ca5fdb3799
--- /dev/null
+++ b/.changeset/tender-terms-flash.md
@@ -0,0 +1,5 @@
+---
+'@backstage/integration': patch
+---
+
+Avoid double encoding of the file path in `getBitbucketServerDownloadUrl`
diff --git a/.changeset/thick-cats-kiss.md b/.changeset/thick-cats-kiss.md
new file mode 100644
index 0000000000..8817115ec3
--- /dev/null
+++ b/.changeset/thick-cats-kiss.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-catalog': patch
+---
+
+Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'.With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled.
+
+The boolean input for "unregister entity" will be deprecated later in favour of the above three options.
diff --git a/.changeset/tricky-ravens-visit.md b/.changeset/tricky-ravens-visit.md
new file mode 100644
index 0000000000..8500c9b64e
--- /dev/null
+++ b/.changeset/tricky-ravens-visit.md
@@ -0,0 +1,6 @@
+---
+'@backstage/core-components': patch
+'@backstage/plugin-catalog': patch
+---
+
+Updated to remove usage of the `bursts` object in the theme palette
diff --git a/.changeset/two-owls-cry.md b/.changeset/two-owls-cry.md
new file mode 100644
index 0000000000..ca371781a1
--- /dev/null
+++ b/.changeset/two-owls-cry.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-search-backend-module-elasticsearch': patch
+---
+
+Throws `MissingIndexError` when no index of type exist.
diff --git a/.github/workflows/automate_review-labels-scheduled.yaml b/.github/workflows/automate_review-labels-scheduled.yaml
deleted file mode 100644
index 3ba13cfd17..0000000000
--- a/.github/workflows/automate_review-labels-scheduled.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-# on a review from someone in the reviewers group, remove the awaiting-review label and add the awaiting-author label
-name: Automate review labels - scheduled
-on:
- schedule:
- - cron: '* * * * *'
-
-jobs:
- label:
- runs-on: ubuntu-latest
- steps:
- - name: Get Token
- id: get_workflow_token
- uses: peter-murray/workflow-application-token-action@v1
- with:
- application_id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
- application_private_key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }}
- organization: backstage
-
- - uses: actions/checkout@v3
- - uses: actions/setup-node@v3
- with:
- node-version: 14
- - run: npm install codeowners
-
- - uses: actions/github-script@v6
- id: fix-labels
- with:
- github-token: ${{ steps.get_workflow_token.outputs.token }}
- script: |
- const script = require('./scripts/goalie-labels.js')
- await script({github, context, core})
diff --git a/.github/workflows/automate_review-labels.yaml b/.github/workflows/automate_review-labels.yaml
deleted file mode 100644
index cae71f6aaa..0000000000
--- a/.github/workflows/automate_review-labels.yaml
+++ /dev/null
@@ -1,84 +0,0 @@
-# When the target of the PR changes, open, re-open or sync, then re-add the label.
-
-name: Automate review labels
-on:
- pull_request_target:
- types:
- - opened
- - closed
- - synchronize
-
-permissions:
- issues: write
- pull-requests: write
-
-jobs:
- label:
- runs-on: ubuntu-latest
- steps:
- # THESE SCRIPTS SHOULD BE INLINED AND NOT IN REPO
- # DUE TO THE TOKEN PERMISSIONS THAT ARE GIVEN
- # TO THE WORKFLOW. THIS SCRIPT WILL AND SHOULD
- # RUN FROM THE BASE REPO ALL TIMES.
- - uses: actions/github-script@v6
- id: fix-labels
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- script: |
- if (['opened', 'synchronize'].includes('${{ github.event.action }}')) {
- // if it's the author, always add awaiting-review label
- const isAuthor = context.payload.pull_request.user.login === context.actor
- if (isAuthor) {
- await github.rest.issues.addLabels({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- labels: ['awaiting-review']
- });
- }
- }
-
- if ('${{ github.event.action}}' === 'closed') {
- await github.rest.issues.removeLabel({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- labels: 'awaiting-review'
- }).catch((e) => {
- console.log(e)
- });
- }
-
- - name: Add PRs to review board
- uses: actions/github-script@v6
- if: github.event.action == 'opened' || github.event.action == 'reopened'
- env:
- PROJECT_ID: PN_kwDOBFKqdc02LQ
- with:
- github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
- script: |
- const prLookup = await github.graphql(`
- query($owner: String!, $repo: String!, $number: Int!){
- repository(owner: $owner, name: $repo) {
- pullRequest(number: $number) {
- id
- }
- }
- }
- `, context.issue);
-
- await github.graphql(`
- mutation($projectId: ID!, $contentId: ID!) {
- addProjectNextItem(input: {
- projectId: $projectId,
- contentId: $contentId,
- }) {
- projectNextItem {
- id
- }
- }
- }
- `, {
- projectId: process.env.PROJECT_ID,
- contentId: prLookup.repository.pullRequest.id
- })
diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml
index f9c655fc4a..8978048c89 100644
--- a/.github/workflows/automate_stale.yml
+++ b/.github/workflows/automate_stale.yml
@@ -25,6 +25,6 @@ jobs:
If you are the author and the PR has been closed, feel free to re-open the PR and continue the contribution!
days-before-pr-stale: 7
days-before-pr-close: 5
- exempt-pr-labels: reviewer-approved,awaiting-review,will-fix
+ exempt-pr-labels: reviewer-approved,will-fix
stale-pr-label: stale
operations-per-run: 100
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0718c8a8b9..2e134eaa71 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -9,9 +9,116 @@ concurrency:
cancel-in-progress: true
jobs:
+ # This step only runs yarn install to make sure that an exact match is available
+ # in the cache. The two following verify and tests jobs then always install from cache.
+ install:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x, 16.x]
+
+ env:
+ CI: true
+ NODE_OPTIONS: --max-old-space-size=4096
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: use node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+ registry-url: https://registry.npmjs.org/ # Needed for auth
+
+ - name: yarn install
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
+
+ # The verify jobs runs all the verification that doesn't require a
+ # diff towards master, since it takes some time to fetch that.
verify:
runs-on: ubuntu-latest
+ needs: install
+
+ strategy:
+ matrix:
+ node-version: [14.x, 16.x]
+
+ env:
+ CI: true
+ NODE_OPTIONS: --max-old-space-size=4096
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: use node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+ registry-url: https://registry.npmjs.org/ # Needed for auth
+
+ - name: yarn install
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
+
+ - name: verify changesets
+ run: node scripts/verify-changesets.js
+
+ - name: verify local dependency ranges
+ run: node scripts/verify-local-dependencies.js
+
+ - name: validate config
+ run: yarn backstage-cli config:check --lax
+
+ - name: type checking and declarations
+ run: yarn tsc:full
+
+ - name: prettier
+ run: yarn prettier:check
+
+ # We need to generate the API references as well, so that we can verify the doc links
+ - name: check api reports and generate API reference
+ run: yarn build:api-reports:only --ci --docs
+
+ - name: verify api reference
+ run: node scripts/verify-api-reference.js
+
+ - name: verify doc links
+ run: node scripts/verify-links.js
+
+ - name: build all packages
+ run: yarn backstage-cli repo build --all
+
+ - name: verify type dependencies
+ run: yarn lint:type-deps
+
+ - name: verify plugin template
+ run: yarn lerna -- run diff -- --check
+
+ - name: ensure clean working directory
+ run: |
+ if files=$(git ls-files --exclude-standard --others --modified) && [[ -z "$files" ]]; then
+ exit 0
+ else
+ echo ""
+ echo "Working directory has been modified:"
+ echo ""
+ git status --short
+ echo ""
+ exit 1
+ fi
+
+ # The test job runs all tests as well as any verification step that
+ # requires a diff towards master.
+ test:
+ runs-on: ubuntu-latest
+
+ needs: install
+
strategy:
matrix:
node-version: [14.x, 16.x]
@@ -64,93 +171,28 @@ jobs:
- name: fetch branch master
run: git fetch origin master
- # Beginning of yarn setup, keep in sync between all workflows.
- # TODO(Rugvip): move this to composite action once all features we use are supported
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- # Cache every node_modules folder inside the monorepo
- - name: cache all node_modules
- id: cache-modules
- uses: actions/cache@v3
- with:
- path: '**/node_modules'
- # We use both yarn.lock and package.json as cache keys to ensure that
- # changes to local monorepo packages bust the cache.
- key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
-
- # If we get a cache hit for node_modules, there's no need to bring in the global
- # yarn cache or run yarn install, as all dependencies will be installed already.
-
- - name: find location of global yarn cache
- id: yarn-cache
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
-
- - name: cache global yarn cache
- uses: actions/cache@v3
- if: steps.cache-modules.outputs.cache-hit != 'true'
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
-
- name: yarn install
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: yarn install --frozen-lockfile
- # End of yarn setup
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: check for yarn.lock changes
id: yarn-lock
run: git diff --quiet origin/master HEAD -- yarn.lock
continue-on-error: true
- - name: prettier
- run: yarn prettier:check
-
- name: lock
run: yarn lock:check
- - name: validate config
- run: yarn backstage-cli config:check --lax
-
- name: lint
run: yarn backstage-cli repo lint --since origin/master
- - name: type checking and declarations
- run: yarn tsc:full
-
- # We need to generate the API references as well, so that we can verify the doc links
- - name: check api reports and generate API reference
- run: yarn build:api-reports:only --ci --docs
-
- - name: verify api reference
- run: node scripts/verify-api-reference.js
-
- - name: verify changesets
- run: node scripts/verify-changesets.js
-
- - name: verify doc links
- run: node scripts/verify-links.js
-
- - name: verify local dependency ranges
- run: node scripts/verify-local-dependencies.js
-
- - name: build changed packages
- if: ${{ steps.yarn-lock.outcome == 'success' }}
- run: yarn backstage-cli repo build --all --since origin/master
-
- - name: build all packages
- if: ${{ steps.yarn-lock.outcome == 'failure' }}
- run: yarn backstage-cli repo build --all
-
- - name: verify type dependencies
- run: yarn lint:type-deps
-
- name: test changed packages
if: ${{ steps.yarn-lock.outcome == 'success' }}
run: yarn lerna -- run test --since origin/master -- --coverage --runInBand
@@ -173,9 +215,6 @@ jobs:
BACKSTAGE_TEST_DATABASE_POSTGRES9_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres9.ports[5432] }}
BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING: mysql://root:root@localhost:${{ job.services.mysql8.ports[3306] }}/ignored
- - name: verify plugin template
- run: yarn lerna -- run diff -- --check
-
- name: ensure clean working directory
run: |
if files=$(git ls-files --exclude-standard --others --modified) && [[ -z "$files" ]]; then
diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml
index 4d1ba7fc0e..6fd9fe2814 100644
--- a/.github/workflows/cron.yml
+++ b/.github/workflows/cron.yml
@@ -8,4 +8,8 @@ jobs:
cron:
runs-on: ubuntu-latest
steps:
- - uses: backstage/actions/cron@v0.1.8
+ - uses: backstage/actions/cron@v0.5.3
+ with:
+ app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
+ private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }}
+ installation-id: ${{ secrets.BACKSTAGE_GOALIE_INSTALLATION_ID }}
diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml
new file mode 100644
index 0000000000..93d59b64bd
--- /dev/null
+++ b/.github/workflows/deploy_docker-image.yml
@@ -0,0 +1,89 @@
+name: Build and push Docker Hub image
+on:
+ repository_dispatch:
+ types: [release-published]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: checkout
+ uses: actions/checkout@v2
+ with:
+ path: backstage
+ ref: v${{ github.event.client_payload.version }}
+
+ - name: setup-node
+ uses: actions/setup-node@v1
+ with:
+ node-version: 16.x
+ registry-url: https://registry.npmjs.org/
+
+ # Beginning of yarn setup, keep in sync between all workflows.
+ # TODO(Rugvip): move this to composite action once all features we use are supported
+ - name: use node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+ registry-url: https://registry.npmjs.org/ # Needed for auth
+
+ # Cache every node_modules folder inside the monorepo
+ - name: cache all node_modules
+ id: cache-modules
+ uses: actions/cache@v2
+ with:
+ path: '**/node_modules'
+ # We use both yarn.lock and package.json as cache keys to ensure that
+ # changes to local monorepo packages bust the cache.
+ key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
+
+ # If we get a cache hit for node_modules, there's no need to bring in the global
+ # yarn cache or run yarn install, as all dependencies will be installed already.
+
+ - name: find location of global yarn cache
+ id: yarn-cache
+ if: steps.cache-modules.outputs.cache-hit != 'true'
+ run: echo "::set-output name=dir::$(yarn cache dir)"
+
+ - name: cache global yarn cache
+ uses: actions/cache@v2
+ if: steps.cache-modules.outputs.cache-hit != 'true'
+ with:
+ path: ${{ steps.yarn-cache.outputs.dir }}
+ key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-yarn-
+ - name: yarn install
+ if: steps.cache-modules.outputs.cache-hit != 'true'
+ run: yarn install --frozen-lockfile
+ # End of yarn setup
+
+ - name: create-app
+ run: npx @backstage/create-app
+ env:
+ BACKSTAGE_APP_NAME: example-app
+
+ - name: yarn build
+ run: yarn build
+ working-directory: ./example-app
+
+ - name: Login to GitHub Container Registry
+ uses: docker/login-action@v2
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ - name: Build and push
+ uses: docker/build-push-action@v3
+ with:
+ context: './example-app'
+ file: ./example-app/packages/backend/Dockerfile
+ push: true
+ tags: |
+ ghcr.io/${{ github.repository_owner }}/backstage:latest
+ ghcr.io/${{ github.repository_owner }}/backstage:${{ github.event.client_payload.version }}
diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml
index c90894bce4..fe234359dd 100644
--- a/.github/workflows/deploy_nightly.yml
+++ b/.github/workflows/deploy_nightly.yml
@@ -20,33 +20,15 @@ jobs:
steps:
- uses: actions/checkout@v3
- # Beginning of yarn setup, keep in sync between all workflows, see ci.yml
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: cache all node_modules
- id: cache-modules
- uses: actions/cache@v3
- with:
- path: '**/node_modules'
- key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
- - name: find location of global yarn cache
- id: yarn-cache
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: cache global yarn cache
- uses: actions/cache@v3
- if: steps.cache-modules.outputs.cache-hit != 'true'
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- name: yarn install
- run: yarn install --frozen-lockfile
- # End of yarn setup
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
# No verification done here, only build & publish. If the master branch
# is broken we will see that from those builds, but we still want to push nightly
diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml
index b63507df0c..6b505dfbf5 100644
--- a/.github/workflows/deploy_packages.yml
+++ b/.github/workflows/deploy_packages.yml
@@ -61,33 +61,15 @@ jobs:
steps:
- uses: actions/checkout@v3
- # Beginning of yarn setup, keep in sync between all workflows, see ci.yml
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: cache all node_modules
- id: cache-modules
- uses: actions/cache@v3
- with:
- path: '**/node_modules'
- key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
- - name: find location of global yarn cache
- id: yarn-cache
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: cache global yarn cache
- uses: actions/cache@v3
- if: steps.cache-modules.outputs.cache-hit != 'true'
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- name: yarn install
- run: yarn install --frozen-lockfile
- # End of yarn setup
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: Fetch previous commit for release check
run: git fetch origin '${{ github.event.before }}'
@@ -157,33 +139,15 @@ jobs:
steps:
- uses: actions/checkout@v3
- # Beginning of yarn setup, keep in sync between all workflows, see ci.yml
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: cache all node_modules
- id: cache-modules
- uses: actions/cache@v3
- with:
- path: '**/node_modules'
- key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
- - name: find location of global yarn cache
- id: yarn-cache
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: cache global yarn cache
- uses: actions/cache@v3
- if: steps.cache-modules.outputs.cache-hit != 'true'
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- name: yarn install
- run: yarn install --frozen-lockfile
- # End of yarn setup
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: build type declarations
run: yarn tsc:full
@@ -209,7 +173,7 @@ jobs:
# Grabs the version in the root package.json and creates a tag on GitHub
- name: Create a release tag
id: create_tag
- run: node scripts/create-release-tag.js --dispatch-workflows
+ run: node scripts/create-release-tag.js
env:
GITHUB_TOKEN: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
@@ -219,6 +183,13 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
+ - name: Dispatch repository event
+ uses: peter-evans/repository-dispatch@v2
+ with:
+ token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
+ event-type: release-published
+ client-payload: '{"version": "${{ steps.create_tag.outputs.version }}"}'
+
# Notify everyone about this great new release :D
- name: Discord notification
uses: Ilshidur/action-discord@0.3.2
diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml
index 972f90795c..58b1f725ad 100644
--- a/.github/workflows/issue.yaml
+++ b/.github/workflows/issue.yaml
@@ -10,4 +10,4 @@ jobs:
if: github.repository == 'backstage/backstage'
steps:
- name: Issue sync
- uses: backstage/actions/issue-sync@v0.1.8
+ uses: backstage/actions/issue-sync@v0.5.3
diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml
new file mode 100644
index 0000000000..25475a03dc
--- /dev/null
+++ b/.github/workflows/pr-review-comment-trigger.yaml
@@ -0,0 +1,19 @@
+# This workflow is used to trigger the "PR Review Comment" workflow. This chaining is needed
+# because workflows triggered by pull_request_review_comment do not have access to secrets.
+
+name: PR Review Comment Trigger
+on:
+ pull_request_review_comment:
+ types:
+ - created
+
+jobs:
+ trigger:
+ runs-on: ubuntu-latest
+
+ # The "PR Review Comment" workflow will check the success status of this workflow and only mark
+ # the PR for re-review if this workflow was successful, which is when the author leaves a review comment.
+ if: github.repository == 'backstage/backstage' && github.event.comment.user.id == github.event.pull_request.user.id
+
+ steps:
+ - run: echo "This PR needs another review"
diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml
new file mode 100644
index 0000000000..37cdea5aa9
--- /dev/null
+++ b/.github/workflows/pr-review-comment.yaml
@@ -0,0 +1,24 @@
+# This workflow is triggered by "PR Review Comment Trigger"
+
+name: PR Review Comment
+on:
+ workflow_run:
+ workflows: [PR Review Comment Trigger]
+ types:
+ - completed
+
+jobs:
+ re-review:
+ runs-on: ubuntu-latest
+
+ # The triggering workflow will report success if the PR needs re-review
+ if: github.repository == 'backstage/backstage' && github.event.workflow_run.conclusion == 'success'
+
+ steps:
+ - uses: backstage/actions/re-review@v0.5.3
+ with:
+ app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
+ private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }}
+ installation-id: ${{ secrets.BACKSTAGE_GOALIE_INSTALLATION_ID }}
+ project-id: PVT_kwDOBFKqdc02LQ
+ issue-number: ${{ github.event.workflow_run.pull_requests[0].number }}
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 01254a53a8..1444559a68 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -1,14 +1,29 @@
name: PR
on:
pull_request_target:
+ types:
+ - opened
+ - synchronize
+ - reopened
+ - closed
+ issue_comment:
+ types:
+ - created
jobs:
sync:
runs-on: ubuntu-latest
- if: github.repository == 'backstage/backstage'
+ # Avoid running on issue comments
+ if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request )
steps:
- name: PR sync
- uses: backstage/actions/pr-sync@v0.1.8
+ uses: backstage/actions/pr-sync@v0.5.3
with:
- github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
+ github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
+ app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
+ private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }}
+ installation-id: ${{ secrets.BACKSTAGE_GOALIE_INSTALLATION_ID }}
+ project-id: PVT_kwDOBFKqdc02LQ
+ excluded-users: ${{ secrets.OOO_USERS }}
+ owning-teams: '@backstage/techdocs'
diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml
index b6fce0e68d..45cf6dca3d 100644
--- a/.github/workflows/sync_code-formatting.yml
+++ b/.github/workflows/sync_code-formatting.yml
@@ -14,33 +14,15 @@ jobs:
# Fetch changes to previous commit - required for 'only_changed' in Prettier action
fetch-depth: 0
- # Beginning of yarn setup, keep in sync between all workflows, see ci.yml
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: cache all node_modules
- id: cache-modules
- uses: actions/cache@v3
- with:
- path: '**/node_modules'
- key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
- - name: find location of global yarn cache
- id: yarn-cache
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: cache global yarn cache
- uses: actions/cache@v3
- if: steps.cache-modules.outputs.cache-hit != 'true'
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- name: yarn install
- run: yarn install --frozen-lockfile
- # End of yarn setup
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: Run Prettier on ADOPTERS.md
uses: creyD/prettier_action@v4.2
diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml
index 816a3e632f..8cf6991aaf 100644
--- a/.github/workflows/sync_release-manifest.yml
+++ b/.github/workflows/sync_release-manifest.yml
@@ -1,10 +1,7 @@
name: Sync Release Manifest
on:
- workflow_dispatch:
- inputs:
- version:
- description: Version number, without any 'v' prefix
- required: true
+ repository_dispatch:
+ types: [release-published]
jobs:
create-new-version:
@@ -23,7 +20,7 @@ jobs:
with:
path: backstage
# 'v' prefix is added here for the tag, we keep it out of the manifest logic
- ref: v${{ github.event.inputs.version }}
+ ref: v${{ github.event.client_payload.version }}
# Checkout backstage/versions into /backstage/versions, which is where store the output
- name: Checkout versions
@@ -44,10 +41,10 @@ jobs:
cd backstage
mkdir -p scripts
wget -O scripts/assemble-manifest.js https://raw.githubusercontent.com/backstage/backstage/master/scripts/assemble-manifest.js
- node scripts/assemble-manifest.js ${{ github.event.inputs.version }}
+ node scripts/assemble-manifest.js ${{ github.event.client_payload.version }}
cd versions
git add .
- git commit -am "${{ github.event.inputs.version }}"
+ git commit -am "${{ github.event.client_payload.version }}"
git push
- name: Dispatch update-helper update
diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml
index e45a36c8e8..1ac1ff3b2c 100644
--- a/.github/workflows/sync_snyk-github-issues.yml
+++ b/.github/workflows/sync_snyk-github-issues.yml
@@ -16,33 +16,15 @@ jobs:
steps:
- uses: actions/checkout@v3
- # Beginning of yarn setup, keep in sync between all workflows, see ci.yml
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: cache all node_modules
- id: cache-modules
- uses: actions/cache@v3
- with:
- path: '**/node_modules'
- key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
- - name: find location of global yarn cache
- id: yarn-cache
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: cache global yarn cache
- uses: actions/cache@v3
- if: steps.cache-modules.outputs.cache-hit != 'true'
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- name: yarn install
- run: yarn install --frozen-lockfile
- # End of yarn setup
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: Create Snyk report
uses: snyk/actions/node@master
diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml
index 884d8bf172..ec3edb0dbe 100644
--- a/.github/workflows/verify_e2e-linux.yml
+++ b/.github/workflows/verify_e2e-linux.yml
@@ -40,35 +40,15 @@ jobs:
steps:
- uses: actions/checkout@v3
- # Beginning of yarn setup, keep in sync between all workflows, see ci.yml
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: cache all node_modules
- id: cache-modules
- uses: actions/cache@v3
- with:
- path: '**/node_modules'
- key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
- - name: find location of global yarn cache
- id: yarn-cache
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: setup chrome
- uses: browser-actions/setup-chrome@latest
- - name: cache global yarn cache
- uses: actions/cache@v3
- if: steps.cache-modules.outputs.cache-hit != 'true'
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- name: yarn install
- run: yarn install --frozen-lockfile
- # End of yarn setup
+ uses: backstage/actions/yarn-install@v0.5.3
+ with:
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- run: yarn tsc
- run: yarn backstage-cli repo build
diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml
index a13aa3ae71..03a1b01c07 100644
--- a/.github/workflows/verify_storybook.yml
+++ b/.github/workflows/verify_storybook.yml
@@ -17,44 +17,30 @@ on:
jobs:
chromatic:
- runs-on: ubuntu-latest
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ node-version: [16.x]
+
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # Required to retrieve git history
- # Beginning of yarn setup, keep in sync between all workflows, see ci.yml
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: cache all node_modules
- id: cache-modules
- uses: actions/cache@v3
+ - name: yarn install
+ uses: backstage/actions/yarn-install@v0.5.3
with:
- path: '**/node_modules'
- key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
- - name: find location of global yarn cache
- id: yarn-cache
- if: steps.cache-modules.outputs.cache-hit != 'true'
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: cache global yarn cache
- uses: actions/cache@v3
- if: steps.cache-modules.outputs.cache-hit != 'true'
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
-
- - name: top-level install
- run: yarn install --frozen-lockfile
-
+ cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: storybook yarn install
run: yarn install --frozen-lockfile
working-directory: storybook
- # End of yarn setup
- run: yarn build-storybook
diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml
index bb8aa9e5aa..e286d42c7e 100644
--- a/.github/workflows/verify_windows.yml
+++ b/.github/workflows/verify_windows.yml
@@ -26,25 +26,15 @@ jobs:
steps:
- uses: actions/checkout@v3
- # Beginning of yarn setup, keep in sync between all workflows, see ci.yml
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- - name: find location of global yarn cache
- id: yarn-cache
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: cache global yarn cache
- uses: actions/cache@v3
- with:
- path: ${{ steps.yarn-cache.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
+
+ # Windows file operation slowness means there's no point caching this
- name: yarn install
run: yarn install --frozen-lockfile
- # End of yarn setup
- name: lint
run: yarn backstage-cli repo lint
diff --git a/.prettierignore b/.prettierignore
index 393c35fdbe..8f1fae0456 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -5,6 +5,7 @@ coverage
*.hbs
templates
api-report.md
+cli-report.md
plugins/scaffolder-backend/sample-templates
.vscode
dist-types
diff --git a/ADOPTERS.md b/ADOPTERS.md
index 5263fa1287..b3e27472f9 100644
--- a/ADOPTERS.md
+++ b/ADOPTERS.md
@@ -1,190 +1,200 @@
# Adopters
-_If you're using Backstage in your organization, please try to add your company name to this list. This really helps the project to gain momentum and credibility. It's a small contribution back to the project with a big impact._
+_If you're using Backstage in your organization, please try to add your company name to this list. It really helps the project to gain momentum and credibility. It's a small contribution back to the project with a big impact._
+_You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKikB) or by editing this file after following the [CONTRIBUTING.md](./CONTRIBUTING.md)._
-| Organization | Contact | Description of Use |
-|-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [Spotify](https://www.spotify.com) | [@leemills83](https://github.com/leemills83) | Main interface towards all of Spotify's infrastructure and technical documentation. |
-| [bol.com](https://www.bol.com) | [@sagacity](https://github.com/sagacity) | Initial work being done to unify platform tooling. |
-| [DFDS](https://www.dfds.com) | [@carlsendk](https://github.com/carlsendk) | V2 self-service platform. |
-| [Roadie](https://roadie.io) | [@dtuite](https://github.com/dtuite) | Hosted, managed Backstage with easy set-up |
-| [Roku](https://www.roku.com) | [@timurista](https://github.com/timurista) | Initial work on Cloud engineering service platform. |
-| [SDA SE](https://sda.se) | [@dschwank](https://github.com/dschwank), [@iammnils](https://github.com/iammnils) | Central place for developing and sharing services in our insurance ecosystem. |
-| [H-E-B](https://www.heb.com) | [@german-j-rodriguez](https://github.com/german-j-rodriguez) | Initial work on Engineering Portal service platform. |
-| [American Airlines](https://www.aa.com) | [@paulpach](https://github.com/paulpach) | Central place for developers to develop and maintain applications |
-| [Kiwi.com](https://kiwi.com) | [@aexvir](https://github.com/aexvir) | Replacing the frontend of [The Zoo](https://github.com/kiwicom/the-zoo), their service registry. |
-| [Voi](https://www.voiscooters.com/) | [@K-Phoen](https://github.com/K-Phoen) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. |
-| [Talkdesk](https://www.talkdesk.com) | [@jaime-talkdesk](https://github.com/jaime-talkdesk) | Initial work for Engineering Portal and Self Provisioning to R&D |
-| [Wealthsimple](https://www.wealthsimple.com) | [@andrewthauer](https://github.com/andrewthauer) | Developer portal, service catalog, documentation and tooling |
-| [Grab](https://www.grab.com) | [@althafh](https://github.com/althafh) | Initial work as a unified interface for all of Grab's internal tooling |
-| [Telenor Sweden](https://www.telenor.se) | [@O5ten](https://github.com/O5ten) | Building a developer portal for scaffolding projects towards our unified build environment and microservice stacks |
-| [Fiverr](https://www.fiverr.com) | [@nirga](https://github.com/nirga) | Unifying separate tools that developers are using today (i.e. monitoring, dead letter queues management, etc.) into a single platform. |
-| [Zalando SE](https://www.zalando.de) | [@leviferreira](https://github.com/leviferreira) | Building V2 of the Internal Development Portal. |
-| [LegalZoom](https://legalzoom.com) | [@backjo](https://github.com/backjo) | Developer portal - hub for all engineering projects and metadata. |
-| [Expedia Group](https://www.expediagroup.com) | [@guillermomanzo](https://github.com/guillermomanzo), [Sheena Sharma](mailto:shesharma@expediagroup.com) | EG Common Developer Toolkit |
-| [Paddle.com](https://paddle.com) | [Ioannis Georgoulas](https://github.com/geototti21) | Developer portal (Tech Docs, Service Catalog, Internal Tooling), we use vanilla Backstage FE and custom BE implementation in Go |
-| [Acast.com](https://acast.com) | [Olle Lundberg](https://github.com/lndbrg) | Developer portal with tech docs, service catalog and a bunch of other internal tooling |
-| [Lunar](https://lunar.app) | [Jacob Valdemar](https://github.com/JacobValdemar) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. |
-| [Trendyol](https://trendyol.com) | [Gamze Senturk](https://github.com/gmzsenturk), [Mert Can Bilgic](https://github.com/mertcb) | The Developer Portal has been called `Pandora`. Provides an overview of Trendyol tech ecosystem. TechDocs, Catalog, Custom Plugins and Theme. |
-| [Peloton](https://www.onepeloton.com/) | [Matt Waldron](https://github.com/daftgopher) | Creating our first developer portal and tech-docs. Exploring Service Catalog, Tech Insights and Cost Insights as well. |
-| [TELUS](https://telus.com) | [Seb Barre](https://github.com/sbarre) | The Go-to place to find answers about development and delivery at TELUS. |
-| [Brex](https://www.brex.com/) | [Vamsi Chitters](https://github.com/vamsikc) | A centralized UI to understand how a service fits in the whole Brex architecture and manage a team’s engineering dependencies. |
-| [Oriflame](https://www.oriflame.com/) | [Oriflame](https://github.com/oriflame) | Internal developer portal for services, single page apps and packages overview, API documentation, technical guides, tech-radar and more. |
-| [Booz Allen Hamilton](https://www.boozallen.com/) | [Jason Miller](https://github.com/JasonMiller-BAH) | Developer portal for a full-stack software development ecosystem that accelerates consistent and repeatable Modern Software Development practices for internal innovation and investments. |
-| [Netflix](https://www.netflix.com/) | [bleathem](https://github.com/bleathem) | Our Backstage implementation will be the front door to a unified experience connecting our internal platform products across important workflows with integrated knowledge and support. |
-| [b.well](https://www.icanbwell.com/) | [Jacob Rosales](https://github.com/jrosales) | Foundation for our engineering portal and cloud insights. |
-| [PagerDuty](https://www.pagerduty.com/) | [Mark Shaw](https://github.com/markshawtoronto) | Developer portal, initially focused on software templates and tech-docs. |
-| [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process 🌕🚀🧑🚀 |
-| [FundApps](https://www.fundapps.co/) | [Elliot Greenwood](https://github.com/egnwd) | Developer Portal - A place for us to keep track of our projects and documentation for all services and processes |
-| [DAZN](https://dazn.com/) | [Lou Bichard](https://twitter.com/loujaybee), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). |
-| [HelloFresh](https://www.hellofresh.de/) | [@iammuho](https://github.com/iammuho), [@ElenaForester](https://github.com/ElenaForester), [@diegomarangoni](https://github.com/diegomarangoni) | Our developer portal at HelloFresh - Spread across an organisation of 500+ engineers globally. |
-| [FactSet](https://www.factset.com/) | [@kuangp](https://github.com/kuangp) | Developer portal to provide discoverability to all internal components, APIs, documentation, and scaffold templates with integrations to our internal infrastructure tools. |
-| [Workrise](https://www.workrise.com/) | [Michael Rode](https://github.com/michaelrode) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. |
-| [RedVentures](https://www.redventures.com/) | [Chris Diaz](https://github.com/codingdiaz) | Developer portal that brings everything an engineer needs to provide value into a single pane of glass. |
-| [MavTek](https://www.mavtek.com/) | [@fgascon](https://github.com/fgascon) | Developer portal focused on standardizing practices, centralizing documentation and streamlining developer practices. |
-| [QuintoAndar](https://www.quintoandar.com.br/) | [@quintoandar](https://github.com/quintoandar) | Developer portal, services catalog and centralization of service metrics. |
-| [empathy.co](https://empathy.co/) | [@guillermotti](https://github.com/guillermotti) | Developer portal for tech docs, service catalog, plugin discovery and much more. |
-| [creditas.com](https://creditas.com/) | [@aureliosaraiva](https://github.com/aureliosaraiva) [@Creditas](https://github.com/creditas) | Centralization of all services, standards, documentation, etc. We started the deployment process. |
-| [Prisjakt](https://www.prisjakt.nu) / [PriceSpy](https://pricespy.co.uk) | [@kennylindahl](https://github.com/kennylindahl) | Internal developer portal - Documentation, scaffolding, software catalog, TechRadar, Gitlab org data integration |
-| [Powerspike](https://powerspike.tv/) | [@trelore](https://github.com/trelore) | Developer portal for documentation of core libraries and repositories. |
-| [2U](https://2u.com) | [@danielleEriksen](https://github.com/danielleEriksen), [@sbhatia](https://github.com/sbhatia) | Development team home-base, promoting service discoverability, resource dependencies, and tech radar |
-| [Taxfix](https://taxfix.de/) | [Sami Ur Rehman](https://github.com/samiurrehman92) | Developer's portal with software catalog at it's core. Hosts API Specs, Tech Docs, Tech Radar and some custom plugins. |
-| [Busuu](https://busuu.com/) | [Adam Tester](https://github.com/adamtester) | Developer portal with service catalog, API docs, Event docs, service templating, and cost insights. |
-| [Loadsmart](https://loadsmart.com/) | [Loadsmart](https://github.com/loadsmart) | Improve services visibility and operations for service owners and developers. |
-| [Monzo](https://monzo.com/) | [@WillSewell](https://github.com/WillSewell), [@joechrisellis](https://github.com/joechrisellis) | Developer portal showing metadata and docs for over 2000 microservices. We have built a number of plugins such as a UI for our system to measure [software excellence](https://monzo.com/blog/2021/09/15/how-we-measure-software-excellence), and a UI to show deployment and config change events. |
-| [Vaimo](https://www.vaimo.com) | [@vaimo-magnus](https://github.com/vaimo-magnus) | Developer Portal for our developers at Vaimo, currently docs and self-service towards our internal PaaS based on k8s. Plans to extend the catalog into Projects, Environments etc |
-| [Wayfair](https://www.wayfair.com) | [@fransan](https://github.com/fransan), [@errskipower](https://github.com/errskipower), [@hrrs](https://github.com/hrrs) | Developer portal for service catalog, technical documentation, and APIs. |
-| [CircleHD](https://www.circlehd.com) | [@circlehddev](https://github.com/circlehddev) | Developer Portal for internal dev team across the globe |
-| [CastDesk](https://castdesk.com) | [@circlehddev](https://github.com/circlehddev) | Developer Portal for internal dev team across the globe |
-| [Santagostino](https://santagostino.it) | [@santagostino](https://github.com/santagostino) | Developer portal, gateway to our infrastructure, documentation, service catalog and internal tooling. |
-| [Peak](https://peak.ai) | [Luke Beamish](https://github.com/lukebeamish-peak) | Developer portal for all internal engineers to access documentation and tooling. |
-| [Gelato](https://gelato.com/) | [Dmitry Makarenko](https://github.com/dmitry-makarenko-gelato) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal and third-party systems🚀. |
-| [GoCardless](https://gocardless.com/) | [James Turley](https://github.com/tragiclifestories) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal systems. |
-| [Box](https://www.box.com) | [@kielosz](https://github.com/kielosz), [@jluk-box](https://github.com/jluk-box), [@ptychu](https://github.com/ptychu), [@alexrybch](https://github.com/alexrybch), [@szubster](https://github.com/szubster) | Developer portal for service catalog, integration with internal systems, new service onboarding. |
-| [Bazaarvoice](https://www.bazaarvoice.com) | [@niallmccullagh](https://github.com/niallmccullagh) | Developer portal for service catalog and scaffolds, publishing Github docs and API documentation, visualising our internal tech radar and our product engineering org structure. |
-| [Krateo PlatformOps](https://www.krateo.io) | [@projectkerberus](https://github.com/projectkerberus) | A multi-cloud control plane to create, manage and deploy any kind of resource easily and centrally via a Developer Portal that centralizes via a self-service catalog the templating and ownership of services, the available documentation, the overview of the components that compose an entire domain and all the data of the service lifecycle. |
-| [Adevinta](https://www.adevinta.com) | [Ray Sinnema](https://github.com/RemonSinnema) | Showcase shared services to our internal customers. |
-| [Splunk](https://www.splunk.com) | [@tonytamsf](https://github.com/tonytamsf) | Developer portal as a centralized place to find people, services, documentation, escalation policies and give bravos. This portal is also being used as a centralized search engine for engineering specific documentation. |
-| [SoundCloud](https://www.soundcloud.com) | [Julio Zynger](https://github.com/julioz) | Developer portal as a [humane registry](https://martinfowler.com/bliki/HumaneRegistry.html) for the organization: catalog of people, services, documentation, feature toggles, escalation policies, etc. |
-| [Volvofinans Bank](https://www.volvofinans.se) | [Johan Hammar](https://github.com/johanhammar) | Developer portal enabling engineers to manage and explore software and documentation. |
-| [Palo Alto Networks](https://www.paloaltonetworks.com) | [Jeremy Guarini](https://github.com/jeremyguarini), [Brian Lomeland](https://github.com/bbbmmmlll), [Palo Alto Networks](https://github.com/PaloAltoNetworks) | Developer portal, service catalog, documentation and tooling |
-| [Signal Iduna Group](https://www.signal-iduna.de/) | [Jonas Thomsen](https://github.com/JoThomsen) | Developer Portal, documentation, monitoring, service catalog for our insurance ecosystem |
-| [Tradeshift](https://www.tradeshift.com/) | [Soren Mathiasen](https://github.com/sorenmat) | Developer Portal: documentation, monitoring, service templates, service catalog for our micro services |
-| [Unity](https://unity.com) | [Ted Cordery](https://github.com/TeddyBallGame) | A centralized service catalog with documentation for our service engineers. |
-| [PicPay](https://www.picpay.com) | [Luis Baroni](https://github.com/lcsbaroni), [Renata Poluceno](https://github.com/renatapoluceno), [PicPay](https://github.com/picpay) | Developer portal for building services through templates, service catalog with ownership of services, documentation and metrics providing autonomy and visibility for all. |
-| [Epic Games](https://www.epicgames.com) | [Brian Jung](https://github.com/brian-at-epic), [Jeff Goldian](https://github.com/jeffgoldian-Epic) | Developer Portal: Service Catalog, Documentation, Software Templates and more making our internal teams' lives easier! |
-| [Globo](https://globo.com) | [Carlos Gusmão](https://github.com/caeugusmao), [Guilherme Vierno](https://github.com/vierno), [Denis Aoki](https://github.com/dnsaoki2), [Maycon Dionisio](https://github.com/MayconDionisio), | Reduce the friction of accessing the information engineers need about Globo's digital services through a coherent and centralized experience. |
-| [QBE](https://www.qbe.com/) | [Daniel Steel](https://github.com/danielsteelqbe), [Pete Jespers](https://github.com/petejespersqbe) | Developer portal allowing our global teams to explore and create applications, documentation and cloud infrastructure easily and quickly 🚀 |
-| [GoTo](https://www.goto.com) | [Lorenzo Orsatti](https://github.com/lorsatti) | Improve onboarding experience of new developers. Discover faster and painlessly developer documentation, API definitions and team information. Provide useful dev metrics in a central place. Provide easy-to-use templates for new services. |
-| [Telstra](https://www.telstra.com.au) | [@kiranpatel11](https://github.com/kiranpatel11), [JasonC](https://github.com/JasonC17) | Primary usage: software catalog and templates Emerging usage : TechDocs, Explore Ecosystem, TechRadar, etc |
-| [Mosaico](https://www.mosaico.com.br/) | [Wédney Yuri](https://github.com/wedneyyuri),[@tino.milton](https://github.com/miltonjacomini) | A centralized service catalog of our documentation for our service engineers. |
-| [Mox Bank](https://www.mox.com/) | [Nick Laqua](https://github.com/nick-laqua-dragon) | "Single pane of glass" developer portal for providing a best-in-class developer experience to our product teams and making Mox the best tech environment in Hongkong 🥰🚀 |
-| [Keyloop](https://www.keyloop.com/) | [Andre Wanlin](https://github.com/awanlin) | Future-motive Developer Portal to help our teams create technology to make everything about buying and owning a car better. 🚗 |
-| [Simply Business](https://sbtech.simplybusiness.co.uk/) | [@addersuk](https://github.com/addersuk), [@LightningStairs](https://github.com/LightningStairs), [@punitcse](https://github.com/punitcse), [@moltenice](https://github.com/moltenice) | Central developer portal to access everything a developer needs such as docs, internal service catalog, and the ability to quickly create a new service from a template. Internally developed Backstage plugins allow us to customise the experience to how we work. |
-| [Overwolf](https://www.overwolf.com) | [@tomwolfgang](https://github.com/tomwolfgang) | Dev portal - software catalog, tech-docs, scaffolding |
-| [Hotmart](https://www.hotmart.com) | [@fabioviana-hotmart](https://github.com/fabioviana-hotmart) | The main Developers Portal to centralize docs, applications and technical metrics. |
-| [EF Education First](https://www.ef.com) | [Daan Boerlage](https://github.com/runebaas), [Rafał Nowosielski](https://github.com/rnowosielski) | Our developer portal - primarily used for cataloging and scaffolding with the ambition to expand with more feature adoptions over time |
-| [Power Home Remodeling](https://www.techatpower.com) | [Ben Langfeld](https://github.com/benlangfeld) | Developer portal to our internal services, build on open-source software (including Kubernetes) in our own datacenters. Our Portal allows our team members to navigate inherant complexity and standardise. |
-| [Livspace](https://www.livspace.com) | [Praveen Kumar](https://github.com/praveen-livspace) | Developer portal, service catalog, tech docs, API docs and plugins |
-| [Just Eat Takeaway](https://www.justeattakeaway.com) | [Kim Wilson](https://github.com/kwilson541) | Our developer portal which centralises applications, reduces cognitive load and provides teams insights. |
-| [Hopin](https://hopin.com) | [Vladimir Glafirov](https://github.com/vglafirov), [Chloe Lee](https://github.com/msfuko) | Developer portal to streamline the development practices. Integrated with service catalog, software templates, application monitoring, tech docs and plugins. |
-| [HBO Max](https://hbomax.com) | [@mdb](https://github.com/mdb), [@nesta219](https://github.com/nesta219), [@nmische](https://github.com/nmische), [@hbomark](https://github.com/hbomark) | Developer portal hosting service catalog and API documentation, as well as cloud infrastructure details, operational visibility tools, and a custom plugin for browsing notable platform change events, such as deployments and configuration updates. |
-| [RCHLO](https://www.riachuelo.com.br) & [MIDWAY](https://www.midway.com.br) | [@marcosborges](https://github.com/marcosborges), [@defaultbr](https://github.com/defaultbr) | Self-Service Platform |
-| [HP Inc](https://www.hp.com) | [Damon Kaswell](https://github.com/dekoding) | DevEx engagement hub (dev portal: docs, standards, Q&A) and extensive assets catalog (APIs, services, code, data, etc.) for the pan-HP internal developer community. |
-| [VMware](https://www.vmware.com) | [@mpriamo](https://github.com/mpriamo), [@krisapplegate](https://github.com/krisapplegate) | Part of [Tanzu Application Platform](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/index.html) offering; internal developer portal |
-| [Ualá](https://www.uala.com.ar/) | [Santiago Bernal](https://github.com/sabernal) | Initial work being done to centralize documentation for all our microservices and APIs, as well as scaffolding new services and tracking code quality |
-| [IKEA IT AB](https://www.ingka.com) | [@bjornramberg](https://github.com/bjornramberg), [@supriyachitale](https://github.com/supriyachitale) | Supporting engineers at scale with self serve access and connecting the dots of our engineering platform and services, enabling product teams to move faster and go further, and unleashing innovation, reuse and co-creation across the organisation. |
-| [Invitae](https://www.invitae.com/en) | [@ryan-hanchett](https://github.com/ryan-hanchett), [@gmandler42](https://github.com/gmandler42) | Centralized Developer Experience portal, putting all of our tooling behind a single pane of glass and creating a living service catalog. |
-| [Fortum](https://www.fortum.com/) | [@brunoamaroalmeida](https://github.com/brunoamaroalmeida), [@dhaval-vithalani](https://github.com/dhaval-vithalani), [@sunilkumarmohanty](https://github.com/sunilkumarmohanty) | A central portal containing information about our applications, services, processes and other software assets to be used by Fortum software engineering community. |
-| [Procore](https://www.procore.com/jobs/engineering) | [@shayon](https://github.com/Shayon), [@jamesdabbs-procore](https://github.com/jamesdabbs-procore) | Developer portal - centralized software catalog and templates to enable self serve and reduce cognitive load. |
-| [Bradesco](https://banco.bradesco/html/classic/sobre/index.shtm) | [@danilosoarescardoso](https://github.com/danilosoarescardoso) | Centralized developer portal with software catalog, software templates, techdocs and some plugins from community and by our own. |
-| [SeatGeek](https://seatgeek.com) | [@zhammer](https://github.com/zhammer) | Software catalog and documentation platform |
-| [Grupo Boticário](https://www.grupoboticario.com.br/) | [@chicoribas](https://github.com/chicoribas), [@fndiaz](https://github.com/fndiaz), [@digogid](https://github.com/digogid), [@manumbs](https://github.com/manumbs), [@haooliveira84](https://github.com/haooliveira84), [@Rhullyam](https://github.com/Rhullyam) | Centralized developer portal with catalog, documentation, and software templates to build a ready to go application, including pipelines (CI/CD) and cloud services provisioning |
-| [Snyk](https://snyk.io/) | [@robcresswell](https://github.com/robcresswell) | Developer portal for software discovery, API documentation and templating |
-| [Stilingue](https://www.stilingue.com.br/) | [@stilingue-inteligencia-artificial](https://github.com/Stilingue-IA), [@bbviana](https://github.com/bbviana) | Developer portal, services catalog and centralization of metrics from Grafana, Sentry and GCP. Furthermore, centralization of documentation and infra details like DNS, Network services, SSL and so on. |
-| [TUI Group](https://www.tuigroup.com/) | [Simon Stamm](https://github.com/simonstamm), [Christian Rudolph](https://github.com/ChrisRu82) | Developer portal for all engineer to provide discoverability to all internal components, APIs, documentation and to scaffold templates with integrations to our internal tools extended by plugins from our community. |
-| [Alliander](https://www.alliander.com/) | [@leon-vg](https://github.com/leon-vg), [@gieljl](https://github.com/gieljl), [@niekteg](https://github.com/niekteg) | Developer portal - software catalog, technical documentation, software templates, tech radar and exploration of used tools/services |
-| [VIA](https://www.via.com.br) | [@vagnerguedes](https://github.com/vagnerguedes) | Centralized Developer Experience portal - Software catalog and documentation platform, software templates, techdocs, scaffolding, self-service infrastructure |
-| [Surevine](https://www.surevine.com/) | [@DJDANNY123](https://github.com/djdanny123) | Developer portal for software catalog, discovery and a view of the technologies we are using across the organisation, we are looking to explore how we can enrich our entities in Backstage by integrating a software bill of materials. |
-| [Bonial International GmbH](https://www.bonial.com/) | [@pjungermann](https://github.com/pjungermann) | Centralized developer portal with software catalog, tech docs, templates, and more. |
-| [Beez Innovation Labs Pvt. Ltd](https://www.beezlabs.com/) | [Karthikeyan Venkatesan](https://github.com/karthikeyan23) | Developer portal with software catalog, scaffolding, tech docs, templates, and infra. |
-| [Agorapulse](https://www.agorapulse.com/) | [@jvdrean](https://github.com/jvdrean) | Developer portal with software catalog, documentation, monitoring, runbooks, tech radar and more. |
-| [Wistia](https://wistia.com/) | [@qrush](https://github.com/qrush), [@okize](https://github.com/okize) | Internal Developer Portal, service catalog, tech docs and more |
-| [SIX](https://www.six-group.com/) | [@jbadeau](https://github.com/jbadeau), [@tomassatka](https://github.com/tomassatka) | Internal DevOps portal hosting our software and dataset catalog, as well as custom plugins for observability, service virtualization, deployments, incident managment and quality metrics. |
-| [Raiffeisen Bank International](https://www.rbinternational.com/) | [Daniel Baumgartner](https://github.com/dabarbi) | From developers for developers: software catalog, techdocs and heavy use of scaffolder to drive reuse on engineering level forward. Part of inner source initiative. Multi national setup coming. |
-| [Spread Group](https://www.spreadgroup.com/) | [Luna Stadler](https://github.com/heyLu), [Iván González](https://github.com/ivangonzalezacuna) | Internal Developer Portal, an overview of all running software, architecture documentation and more; replacing and unifying a variety of internal tools. |
-| [RD Station](https://rdstation.com) | [Rogerio Angeliski](https://github.com/angeliski), [Paula Assis](https://github.com/paulassis), [Guilherme Eric](https://github.com/guilhermeeric), [Daniela Adamatti](https://github.com/daniadamatti), [Luana Negreiros](https://github.com/luananegreiros) | Developer portal, scaffolding, services catalog. We are looking to centralize automations and information for the whole engineering team . |
-| [Resuelve Tu Deuda](https://resuelve.mx) | [Iván Álvarez](https://github.com/ivanhoe), [Jorge Medina](https://github.com/jorgearma1982) | Internal developer portal, service catalog, tech docs, api doc |
-| [Pachama](https://pachama.com/) | [Aron Gates](https://github.com/agates4) | Internal Developer Portal, a catalog of all microservices, architecture documentation, and templates to generate developer resources. |
-| [SEEK](https://www.seek.com.au) | [Jahred Hope](https://github.com/jahredhope) | Developer portal for developer tooling and technical documentation. |
-| [Marks & Spencer](https://www.marksandspencer.com/) | [Kamal Cheriyath](https://github.com/kcheriyath) | Centralised discovery, adoption and devops automation hub for Engineering & Architecture. |
-| [McKesson](https://www.mckesson.com/) | [Agnel Antony](https://github.com/aantony2) | Internal Developer Platform for developer gated CI/CD templates, technical documentation, cloud automation service catalog, etc. |
-| [World Fuel Services](https://www.wfscorp.com/) | [Anirudh Kurapathi](https://github.com/anirudhkurapati), [Alex Kwon](https://github.com/alexkwon), [Lester Hernandez](https://github.com/lhernandez-wfscorp), [Avi Boru](https://github.com/aviboru), [Vardhan Annapureddy](https://github.com/harshaaws) | Internal Developer Portal, service catalog product, API's, Software Templates, tech docs and more. |
-| [leboncoin](https://www.leboncoin.fr/) | [Andy Ladjadj](https://github.com/aladjadj) | Centralize our multiple UI in a single portal. Simplify onbording, new features and harmonize how people search information. Core features (catalog,api,docs,scafolder) are good to start the adoption. status: internal beta. |
-| [Contentful](https://www.contentful.com) | [James Bourne](https://github.com/jamesmbourne) | Centralized documentation of service ownership, APIs, and documentation, and new service creation with a custom scaffolder - [full case study with Roadie](https://roadie.io/case-studies/maintaining-velocity-through-hypergrowth-contentful/). |
-| [Back Market](https://www.backmarket.com) | [Sami Farhat](https://github.com/skfarhat) | Internal Developer Portal featuring catalog, tech-radar, ownership management, component creation (scaffolder) and centralized infrastructure management -- probably more to come. |
-| [Avalia Systems](https://avalia.io) | [Olivier Liechti](https://github.com/wasadigi), [Fabio Velloso](https://github.com/fabiovelloso) | Innersource, software analytics, knowledge base for 360 software assessments, collaborative applications, hub for tracking and sharing IP assets. |
-| [Albert Heijn](https://ah.technology) | [Joost Hofman](https://github.com/joosthofman), [Reindrich Geerman](https://github.com/reinst) | Single point of entry for all our engineers (Developer portal), Tech radar, catalog, templates (paved roads) and tech documentation. |
-| [Wise, formerly TransferWise](https://wise.com) | [Andrew Beveridge](https://github.com/beveradb) | It's early days for us, we're trying to start small with catalog, tech docs and unified search. Future ambitious vision includes scaffolder for one-click component addition, building out integrations with CI/CD tooling, kubernetes clusters, monitoring/alerting tooling etc. and aiming for a frictionless "golden path" for engineers! 🚀 |
-| [Happy Money](http://happymoney.com/) | [Akshit Lomash](mailto:alomash@happymoney.com) | We are moving from a monolith to microservices-based architecture. We are developing a developer portal based on Backstage to create a service catalog for our new services. All the services created are onboarded Backstage and engineering teams are using a cookie-cutter-based template from backstage to initiate a new service. |
-| [Lightspeed](http://lightspeedhq.com/) | [Marcus Crane](mailto:marcus.crane@lightspeedhq.com) | We use it within our X-Series division (https://vendhq.com) to catalog ~100+ systems and ~350 components! |
-| [Siemens](https://www.siemens.com/global/en.html) | [Nizar Chaouch](mailto:nizar.chaouch@siemens.com) | We are using Backstage as our Developer portal |
-| [The Warehouse Group](https://www.thewarehouse.co.nz) | [Matt Law](mailto:matt.law@thewarehouse.co.nz) | Backstage enables us to bootstrap our middleware environment of new services for our Dev teams in a matter of seconds. CI, CD, testing, logging, deployments are all taken care of to get them up and running in less than 60 seconds. |
-| [Tink](https://tink.com/) | [Sebastian Olsson](https://github.com/Sebelino), [Błażej Szum](https://github.com/blazejszumtink), [Anders Eurenius Runvald](https://github.com/anders-er-at-tink) | Internal developer portal which provides templates for creating new Java or Go microservices seamlessly. Also includes a tech radar and a visualization of our CD pipeline. |
-| [Brandwatch](https://brandwatch.com) | [Stefan Buck](https://github.com/stefanbuck) | Our primary focus is on the service catalog. Backstage is replacing our homemade service catalog. The switch was quite simple due to the catalog processor API. |
-| [Laybuy](https://www.laybuy.com) | [Chris Simmons](https://github.com/contrarianchris) | Backstage is the heart of Laybuy’s new centralised Development Platform, bringing disparate development tools and experiences into a single easy-to-use portal. It simplifies software and API discovery, project scaffolding, and technical documentation, enabling us to embrace golden path development and automate software standards. |
-| [Sendinblue](https://engineering.sendinblue.com/) | [Tanguy Antoine](mailto:antoine.tanguy@sendinblue.com) | Helps us drive the change at scale. Puts light on services, resources, and dependencies. One tool that rules them all through plugins we created for that purpose. We are aiming to put Backstage at the center of every developer's work (Actionable items, Debugging, Monitoring, Provisioning, etc...) to improve their happiness |
-| [SafetyCulture](https://safetyculture.com/) | [@R-cen](https://github.com/R-cen), [@lachlancooper](https://github.com/lachlancooper), [@hkf57](https://github.com/hkf57) | Internal developer portal to provide a centralized place for engineers to see an overview of their team's services and information related to the service from other systems. Initially focused on the software catalog, techdocs and search. |
-| [Sana Life Science](https://sanalifescience.com) | [Joe Hillyard](mailto:joe@sanalifescience.com) | API Catalog, Tools Management & Control Hub |
-| [Ndustrial](https://ndustrial.io) | [Jonathan Skubic](mailto:jonathan@ndustrial.io) | Software Project Catalog |
-| [TUI Musement](https://www.musement.com/uk/) | [Simone Fumagalli](mailto:simone.fumagalli@musement.com) | We are importing our catalog into it to keep it under control. The next step is start using templates |
-| [Kambi AB](https://www.kambi.com) | [Martin Norum](mailto:martin.norum@kambi.com) | We want to kick ass at speed, so we're currently building up a catalog of our existing software, and looking into how Backstage can support us in our journey towards autonomous product teams. Both to improve speed to market and operational awareness. |
-| [ANZ](https://www.anz.com.au/personal/) | [Elliot Jackson](mailto:elliot.jackson@anz.com) | Catalog, tech docs and automation |
-| [Genie Solutions](https://www.geniesolutionssoftware.com.au) | [Zainab Bagasrawala](mailto:zainabbagasrawala@geniesolutions.com.au) | Developer Portal to track our projects, documentation, observability tools and more |
-| [MadeiraMadeira](https://www.madeiramadeira.com.br) | [Paulo Eduardo Peixoto](mailto:paulo.peixoto@madeiramadeira.com.br) | As a support tool for developers, following the principles of "Developer Experience". In order to make the developer's day to day more practical, efficient and, why not, happy. |
-| [Sonatype](https://www.sonatype.com) | [Srikar Ananthula](mailto:sananthula@sonatype.com) | Centralize services used internally with many plugins |
-| [CVS Health](https://www.cvshealth.com) | [Ari Ben-Elazar](mailto:abenelazar@gmail.com) | Cataloging and documenting our service offerings to offer our internal developers a better operational journey |
-| [Yatra.com](https://www.yatra.com) | [Matiur Rahman Maitur](mailto:arifrahman4u@gmail.com) | Easy to find out Project details, ownership, dependent services, Documentation, it is very useful for developer. |
-| [Yotpo](https://www.yotpo.com) | [Liran Yogev](mailto:lyogev@yotpo.com) | Services exploration, documentation and project generator |
-| [Mainsail Industries](https://www.mainsailindustries.com) | [Brad Sollar](mailto:brad@mainsailindustries.com) | Internal tool management and docs |
-| [Prisma](https://prismamp.com) | [Sebastian Gravina](mailto:sgravina@prismamp.com) | Is part of our IDP |
-| [Syndetic](https://syndetic.io) | [John Feminella](mailto:robots+swag@syndetic.io) | We're working with multiple F100 clients for digital transformation and Backstage is a key part of our landing and acceleration strategy. |
-| [Imagine Learning](https://www.imaginelearning.com/en/us) | [Jared Stehler](mailto:jared.stehler@imaginelearning.com) | Software catalog, product dependency visualization |
-| [Alef Education](https://www.alefeducation.com) | [Belal Juma](mailto:belal.juma@alefeducation.com) | We use backstage as a Service Catalog and rely on the TechDocs feature |
-| [Zego](https://www.zego.com) | [Sean Kenny](mailto:sean.kenny@zego.com) | Single pane of glass for organisational and operational information for all services across our systems. |
-| [Absa Group Limited](https://www.absa.africa/absaafrica/) | [Chris Kieser](mailto:chris.kieser@absa.africa) | Developer portal for all development needs - security, AWS, k8s, build and deployment pipelines and more |
-| [Nutrien Ag Solutions](https://www.nutrienagsolutions.com.au) | [Jan Quijano](mailto:jan.quijano@nutrien.com.au) | Software Project Catalog |
-| [Lendingkart](https://www.lendingkart.com/) | [Dinesh Rajpoot](mailto:dinesh.rajpoot@lendingkart.com) | Service catalog, Software templates to enforce best practices and tech insights to track mandates & migrations. |
-| [Meltwater](https://underthehood.meltwater.com) | [@spier](https://github.com/spier), [@remen](https://github.com/remen) | Improving developer experience by centralizing documentation and internal APIs. Goal: Foster InnerSource collaboration and speed up onboarding time in our 500+ people Product & Engineering org. |
-| [Doctolib](https://doctolib.engineering/) | [@djiit](https://github.com/djiit) | Rails modularization effort awareness, tech organization discoverability. Improving the daily workflows and collaboration processes of our engineers. |
-| [Twilio](https://www.twilio.com) | [Kyle Smith](https://github.com/knksmith57) | Developer portal, universal software catalog, and centralized taxonomy platform. |
-| [OVHcloud](https://www.ovhcloud.com/fr/) | [Jean-Philippe Blary](https://github.com/blaryjp), [Arnaud Bauer](mailto:arnaud.bauer@ovhcloud.com), [Flavien Chantelot](https://github.com/Dorn-) | We're providing Backstage to our collaborators to ease their daily jobs, and let them extends it using plugins. |
-| [Procter & Gamble](https://us.pg.com/) | [Binita Nayak](https://github.com/binitan), [Josh Rose](https://github.com/joshuarose), [RJ Winkler](https://github.com/rjwink) | P&G leverages Backstage to build internal developer portal to ensure developers' happiness. This developer portal shall act as single source of information needed by development teams to seamlessly create, find and maintain their software components/resources/documentation. |
-| [SANS Institute](https://www.sans.org) | [Christopher Klewin](mailto:cklewin@sans.org) | Developer portal for centralized visibility, reporting, and tooling across multiple organizations. |
-| [Okay](https://www.okayhq.com/) | [Tomas Barreto](mailto:tomas@okayhq.com) | Service catalog, developer portal, and technical documentation |
-| [Kaluza](https://www.kaluza.com) | [James Condren](mailto:james.condron@kaluza.com) | To provide an automated golden path to developers, with a focus on discovery and documentation |
-| [LinkedIn](https://linkedin.com) | [Joshua Lawrence](mailto:jlawrence@linkedin.com) | We are building a platform for internal web tools |
-| [Forto](https://forto.com) | [Rodolfo Matos](mailto:rodolfo.matos@forto.com) | Still in a experimental phase/assessing the organisational fit. We will be using it mostly a developer portal -- pretty standard use case. |
-| [BetterUp](https://betterup.com) | [Jordan Hochenbaum](mailto:jordan.hochenbaum@betterup.co) | We're starting to use Backstage as the central hub for service discovery, documentation, and develop experience. |
-| [warung pintar](https://warungpintar.co.id/) | [Muhammad Rafly Andrianza](mailto:rafly.andrianza@warungpintar.co) | Initial Work Developer Portal with TechRadar, Service Catalogue, TechDocs, anything about platform & infrastructure resources. |
-| [RD](https://rd.com.br/) | [Michael Silva](mailto:midsilva@rd.com.br) | We are building our developer portal. Software catalog, Tech Radar and Scaffolding are among the initial features. |
-| [AEB](https://www.aeb.com/) | [David Fankhänel](mailto:dfl@aeb.com) | Central developer platform for creating new apps via templates, getting an overview via software catalog, etc |
-| [SALTO Systems](https://saltosystems.com) | [Ian Cowley](mailto:i.cowley@saltosystems.com) | Currently using Backstage as an internal documentation portal. |
-| [Lummo](https://lummo.com) | [Anjul Sahu](mailto:anjul@lummo.com) | We are building the internal developer portal using Backstage and bringing up all integrations and service information at one place. |
-| [Frontside](https://frontside.com) | [Taras Mankovski](mailto:taras@frontside.com) | |
-| [Stepstone](https://www.stepstone.com/en/) | [Neil Kennedy](mailto:neil.kennedy@stepstone.com) | StepStone is using Backstage to solve problems around ownership and visibility of our applications. We have thousands of repos, multiple legacy systems and a growing platform that is hard to maintain. Backstage is forming the centre of our push to embrace the chaos. |
-| [idwall](https://idwall.co) | [Rodrigo Catão Araujo](mailto:rodrigo@idwall.co) | Developer Portal for internal engineers to access service catalog, documentation, observability, infrastructure and internal tooling. |
-| [Jaguar Land Rover](https://www.jaguarlandrover.com) | [Josh Walker](mailto:jwalke18@jaguarlandrover.com) | Users can request a Gitlab user, which creates a commit with the Terraform code. |
-| [Glovo](http://glovoapp.com/) | [Yaser Toutah](mailto:yaser.toutah@glovoapp.com) | Developer Portal to improve our Developer Experience, identify ownership and track metadata for our services and tools. It's our Service Catalog. In addition to that, we use it for Service Creation, and much more. |
-| [Dixa](https://dixa.com) | [Jens Møller](mailto:jsc@dixa.com) | We are in early stages, but using it to get overview of our repositories and ownership of these. We want among many things to use it for compliance and easier access to key metrics for our repos. |
-| [Notino](https://notino.com) | [Jan Remunda](mailto:jan.remunda@notino.com) | Backstage is our developer portal. We use it as service catalog and for technical documentation. |
-| [Polarpoint](https://polarpoint.io/) | [Surj Bains](https://github.com/polarpoint-io) | We are using Backstage as our Developer portal as well as for hosting our DevOps portal for software catalog. |
-| [Niche](https://niche.com) | [Zach Romitz](mailto:zach.romitz@niche.com) | We are using the Software Catalog, Software Templates, API documentation, and Techdocs to try and centralize service information. |
-| [Mercedes-Benz.io](https://www.mercedes-benz.io/) | [Manuel Santos](https://github.com/manusant) | At Mercedes-Benz we use it as a developer portal with software catalog, TechDocs, Scaffolding and custom plugins. It provides an overview of our tech ecosystem to our product development teams. The portal also serves as a way to foster collaboration among the numerous companies of the Mercedes-Benz Group. |
-| [Funding Circle](https://www.fundingcircle.com/) | [Ariel Pacciaroni](https://github.com/arielpacciaroni) | We are building the internal developer portal using Backstage project and centralizing all services information at one place. The portal helps us track down repositories ownership as well as direct access to key information on every component. |
-| [Clarivate](https://www.clarivate.com) | [Gabriele Carteni](mailto:gabriele.carteni@clarivate.com) | We are building our Developer Portal using Backstage to have a better control over our software ecosystem, integrate SDLC tools and promote best practices |
-| [Cho Tot](https://www.chotot.com) | [Chotot Team](mailto:sre@chotot.vn) | Internal developer portal, service catalog with CI/CD tools. |
-| [William Hill](https://www.williamhillgroup.com/) | [Pat Mills](mailto:pat.mills@williamhill.com), [Nathan Flynn](mailto:nflynn@williamhill.co.uk), and [Nishkarsh Raj](mailto:nishkarsh.raj@williamhill.co.uk) | William Hill are leveraging Backstage to build our Engineering Portal. Our mission is to centralize the software catalog inventory to enable service discoverability, reduce the onboarding time for new Engineers, provide a single pane of glass to accelerate Developer Productivity and Save Engineers time. Our aspiration is to create an InnerSource community focussed on organization-wide patterns that are re-usable and can be self-served with the Scaffolder. |
-| [Vodafone NewZealand Limited](https://vodafone.co.nz) | [Ankit Gupta](mailto:ankit.gupta@vodafone.nz), [DevOps COE](mailto:devopstooling@vodafone.nz) | Vodafone NZ are leveraging Backstage to build centralised and self service Engineering Portal. Our mission is to standardised Pipeline templates across the Engineering teams, One shop stop to create the pipelines and repository with a template approach which reduces creation part from days to minutes and no wait time for developers. A unified view for Azure DevOps pipeline, Azure Repo pull requests, Deployment status from Azure RedHat Openshift-ArgoCD and SonarQube Security and code quality scans report on a single pan to provide a streamlined view for all microservices across the app stack. |
-| [Coamo](http://www.coamo.com.br) | [@holiiveira](https://github.com/holiiveira), [@gpxlnx](https://github.com/gpxlnx) | We're starting to use it as the main tool of a DevOps platform. Our goal is to provide software templates, centralize our software catalog enabling efficient service discovery, and make it easy to manage the entire software ecosystem in one place.
- |
\ No newline at end of file
+| Organization | Contact | Description of Use |
+| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [Spotify](https://www.spotify.com) | [@leemills83](https://github.com/leemills83) | Main interface towards all of Spotify's infrastructure and technical documentation. |
+| [bol.com](https://www.bol.com) | [@sagacity](https://github.com/sagacity) | Initial work being done to unify platform tooling. |
+| [DFDS](https://www.dfds.com) | [@carlsendk](https://github.com/carlsendk) | V2 self-service platform. |
+| [Roadie](https://roadie.io) | [@dtuite](https://github.com/dtuite) | Hosted, managed Backstage with easy set-up |
+| [Roku](https://www.roku.com) | [@timurista](https://github.com/timurista) | Initial work on Cloud engineering service platform. |
+| [SDA SE](https://sda.se) | [@dschwank](https://github.com/dschwank), [@iammnils](https://github.com/iammnils) | Central place for developing and sharing services in our insurance ecosystem. |
+| [H-E-B](https://www.heb.com) | [@german-j-rodriguez](https://github.com/german-j-rodriguez) | Initial work on Engineering Portal service platform. |
+| [American Airlines](https://www.aa.com) | [@paulpach](https://github.com/paulpach) | Central place for developers to develop and maintain applications |
+| [Kiwi.com](https://kiwi.com) | [@aexvir](https://github.com/aexvir) | Replacing the frontend of [The Zoo](https://github.com/kiwicom/the-zoo), their service registry. |
+| [Voi](https://www.voiscooters.com/) | [@K-Phoen](https://github.com/K-Phoen) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. |
+| [Talkdesk](https://www.talkdesk.com) | [@jaime-talkdesk](https://github.com/jaime-talkdesk) | Initial work for Engineering Portal and Self Provisioning to R&D |
+| [Wealthsimple](https://www.wealthsimple.com) | [@andrewthauer](https://github.com/andrewthauer) | Developer portal, service catalog, documentation and tooling |
+| [Grab](https://www.grab.com) | [@althafh](https://github.com/althafh) | Initial work as a unified interface for all of Grab's internal tooling |
+| [Telenor Sweden](https://www.telenor.se) | [@O5ten](https://github.com/O5ten) | Building a developer portal for scaffolding projects towards our unified build environment and microservice stacks |
+| [Fiverr](https://www.fiverr.com) | [@nirga](https://github.com/nirga) | Unifying separate tools that developers are using today (i.e. monitoring, dead letter queues management, etc.) into a single platform. |
+| [Zalando SE](https://www.zalando.de) | [@leviferreira](https://github.com/leviferreira) | Building V2 of the Internal Development Portal. |
+| [LegalZoom](https://legalzoom.com) | [@backjo](https://github.com/backjo) | Developer portal - hub for all engineering projects and metadata. |
+| [Expedia Group](https://www.expediagroup.com) | [@guillermomanzo](https://github.com/guillermomanzo), [Sheena Sharma](mailto:shesharma@expediagroup.com), [@ajbw](https://github.com/ajbw) | EG Common Developer Toolkit |
+| [Paddle.com](https://paddle.com) | [Ioannis Georgoulas](https://github.com/geototti21) | Developer portal (Tech Docs, Service Catalog, Internal Tooling), we use vanilla Backstage FE and custom BE implementation in Go |
+| [Acast.com](https://acast.com) | [Olle Lundberg](https://github.com/lndbrg) | Developer portal with tech docs, service catalog and a bunch of other internal tooling |
+| [Lunar](https://lunar.app) | [Jacob Valdemar](https://github.com/JacobValdemar) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. |
+| [Trendyol](https://trendyol.com) | [Gamze Senturk](https://github.com/gmzsenturk), [Mert Can Bilgic](https://github.com/mertcb) | The Developer Portal has been called `Pandora`. Provides an overview of Trendyol tech ecosystem. TechDocs, Catalog, Custom Plugins and Theme. |
+| [Peloton](https://www.onepeloton.com/) | [Matt Waldron](https://github.com/daftgopher) | Creating our first developer portal and tech-docs. Exploring Service Catalog, Tech Insights and Cost Insights as well. |
+| [TELUS](https://telus.com) | [Seb Barre](https://github.com/sbarre) | The Go-to place to find answers about development and delivery at TELUS. |
+| [Brex](https://www.brex.com/) | [Vamsi Chitters](https://github.com/vamsikc) | A centralized UI to understand how a service fits in the whole Brex architecture and manage a team’s engineering dependencies. |
+| [Oriflame](https://www.oriflame.com/) | [Oriflame](https://github.com/oriflame) | Internal developer portal for services, single page apps and packages overview, API documentation, technical guides, tech-radar and more. |
+| [Booz Allen Hamilton](https://www.boozallen.com/) | [Jason Miller](https://github.com/JasonMiller-BAH) | Developer portal for a full-stack software development ecosystem that accelerates consistent and repeatable Modern Software Development practices for internal innovation and investments. |
+| [Netflix](https://www.netflix.com/) | [bleathem](https://github.com/bleathem) | Our Backstage implementation will be the front door to a unified experience connecting our internal platform products across important workflows with integrated knowledge and support. |
+| [b.well](https://www.icanbwell.com/) | [Jacob Rosales](https://github.com/jrosales) | Foundation for our engineering portal and cloud insights. |
+| [PagerDuty](https://www.pagerduty.com/) | [Mark Shaw](https://github.com/markshawtoronto) | Developer portal, initially focused on software templates and tech-docs. |
+| [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process 🌕🚀🧑🚀 |
+| [FundApps](https://www.fundapps.co/) | [Elliot Greenwood](https://github.com/egnwd) | Developer Portal - A place for us to keep track of our projects and documentation for all services and processes |
+| [DAZN](https://dazn.com/) | [David Rubio Vidal](https://github.com/davidrv87), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). |
+| [HelloFresh](https://www.hellofresh.de/) | [@iammuho](https://github.com/iammuho), [@ElenaForester](https://github.com/ElenaForester), [@diegomarangoni](https://github.com/diegomarangoni) | Our developer portal at HelloFresh - Spread across an organisation of 500+ engineers globally. |
+| [FactSet](https://www.factset.com/) | [@kuangp](https://github.com/kuangp) | Developer portal to provide discoverability to all internal components, APIs, documentation, and scaffold templates with integrations to our internal infrastructure tools. |
+| [Workrise](https://www.workrise.com/) | [Michael Rode](https://github.com/michaelrode) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. |
+| [RedVentures](https://www.redventures.com/) | [Chris Diaz](https://github.com/codingdiaz) | Developer portal that brings everything an engineer needs to provide value into a single pane of glass. |
+| [MavTek](https://www.mavtek.com/) | [@fgascon](https://github.com/fgascon) | Developer portal focused on standardizing practices, centralizing documentation and streamlining developer practices. |
+| [QuintoAndar](https://www.quintoandar.com.br/) | [@quintoandar](https://github.com/quintoandar) | Developer portal, services catalog and centralization of service metrics. |
+| [empathy.co](https://empathy.co/) | [@guillermotti](https://github.com/guillermotti) | Developer portal for tech docs, service catalog, plugin discovery and much more. |
+| [creditas.com](https://creditas.com/) | [@aureliosaraiva](https://github.com/aureliosaraiva) [@Creditas](https://github.com/creditas) | Centralization of all services, standards, documentation, etc. We started the deployment process. |
+| [Prisjakt](https://www.prisjakt.nu) / [PriceSpy](https://pricespy.co.uk) | [@kennylindahl](https://github.com/kennylindahl) | Internal developer portal - Documentation, scaffolding, software catalog, TechRadar, Gitlab org data integration |
+| [Powerspike](https://powerspike.tv/) | [@trelore](https://github.com/trelore) | Developer portal for documentation of core libraries and repositories. |
+| [2U](https://2u.com) | [@danielleEriksen](https://github.com/danielleEriksen), [@sbhatia](https://github.com/sbhatia) | Development team home-base, promoting service discoverability, resource dependencies, and tech radar |
+| [Taxfix](https://taxfix.de/) | [Sami Ur Rehman](https://github.com/samiurrehman92) | Developer's portal with software catalog at it's core. Hosts API Specs, Tech Docs, Tech Radar and some custom plugins. |
+| [Busuu](https://busuu.com/) | [Adam Tester](https://github.com/adamtester) | Developer portal with service catalog, API docs, Event docs, service templating, and cost insights. |
+| [Loadsmart](https://loadsmart.com/) | [Loadsmart](https://github.com/loadsmart) | Improve services visibility and operations for service owners and developers. |
+| [Monzo](https://monzo.com/) | [@WillSewell](https://github.com/WillSewell), [@joechrisellis](https://github.com/joechrisellis) | Developer portal showing metadata and docs for over 2000 microservices. We have built a number of plugins such as a UI for our system to measure [software excellence](https://monzo.com/blog/2021/09/15/how-we-measure-software-excellence), and a UI to show deployment and config change events. |
+| [Vaimo](https://www.vaimo.com) | [@vaimo-magnus](https://github.com/vaimo-magnus) | Developer Portal for our developers at Vaimo, currently docs and self-service towards our internal PaaS based on k8s. Plans to extend the catalog into Projects, Environments etc |
+| [Wayfair](https://www.wayfair.com) | [@fransan](https://github.com/fransan), [@errskipower](https://github.com/errskipower), [@hrrs](https://github.com/hrrs) | Developer portal for service catalog, technical documentation, and APIs. |
+| [CircleHD](https://www.circlehd.com) | [@circlehddev](https://github.com/circlehddev) | Developer Portal for internal dev team across the globe |
+| [CastDesk](https://castdesk.com) | [@circlehddev](https://github.com/circlehddev) | Developer Portal for internal dev team across the globe |
+| [Santagostino](https://santagostino.it) | [@santagostino](https://github.com/santagostino) | Developer portal, gateway to our infrastructure, documentation, service catalog and internal tooling. |
+| [Peak](https://peak.ai) | [Luke Beamish](https://github.com/lukebeamish-peak) | Developer portal for all internal engineers to access documentation and tooling. |
+| [Gelato](https://gelato.com/) | [Dmitry Makarenko](https://github.com/dmitry-makarenko-gelato) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal and third-party systems🚀. |
+| [GoCardless](https://gocardless.com/) | [James Turley](https://github.com/tragiclifestories) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal systems. |
+| [Box](https://www.box.com) | [@kielosz](https://github.com/kielosz), [@jluk-box](https://github.com/jluk-box), [@ptychu](https://github.com/ptychu), [@alexrybch](https://github.com/alexrybch), [@szubster](https://github.com/szubster) | Developer portal for service catalog, integration with internal systems, new service onboarding. |
+| [Bazaarvoice](https://www.bazaarvoice.com) | [@niallmccullagh](https://github.com/niallmccullagh) | Developer portal for service catalog and scaffolds, publishing Github docs and API documentation, visualising our internal tech radar and our product engineering org structure. |
+| [Krateo PlatformOps](https://www.krateo.io) | [@projectkerberus](https://github.com/projectkerberus) | A multi-cloud control plane to create, manage and deploy any kind of resource easily and centrally via a Developer Portal that centralizes via a self-service catalog the templating and ownership of services, the available documentation, the overview of the components that compose an entire domain and all the data of the service lifecycle. |
+| [Adevinta](https://www.adevinta.com) | [Ray Sinnema](https://github.com/RemonSinnema) | Showcase shared services to our internal customers. |
+| [Splunk](https://www.splunk.com) | [@tonytamsf](https://github.com/tonytamsf) | Developer portal as a centralized place to find people, services, documentation, escalation policies and give bravos. This portal is also being used as a centralized search engine for engineering specific documentation. |
+| [SoundCloud](https://www.soundcloud.com) | [Julio Zynger](https://github.com/julioz) | Developer portal as a [humane registry](https://martinfowler.com/bliki/HumaneRegistry.html) for the organization: catalog of people, services, documentation, feature toggles, escalation policies, etc. |
+| [Volvofinans Bank](https://www.volvofinans.se) | [Johan Hammar](https://github.com/johanhammar) | Developer portal enabling engineers to manage and explore software and documentation. |
+| [Palo Alto Networks](https://www.paloaltonetworks.com) | [Jeremy Guarini](https://github.com/jeremyguarini), [Brian Lomeland](https://github.com/bbbmmmlll), [Palo Alto Networks](https://github.com/PaloAltoNetworks) | Developer portal, service catalog, documentation and tooling |
+| [Signal Iduna Group](https://www.signal-iduna.de/) | [Jonas Thomsen](https://github.com/JoThomsen) | Developer Portal, documentation, monitoring, service catalog for our insurance ecosystem |
+| [Tradeshift](https://www.tradeshift.com/) | [Soren Mathiasen](https://github.com/sorenmat) | Developer Portal: documentation, monitoring, service templates, service catalog for our micro services |
+| [Unity](https://unity.com) | [Ted Cordery](https://github.com/TeddyBallGame) | A centralized service catalog with documentation for our service engineers. |
+| [PicPay](https://www.picpay.com) | [Luis Baroni](https://github.com/lcsbaroni), [Renata Poluceno](https://github.com/renatapoluceno), [PicPay](https://github.com/picpay) | Developer portal for building services through templates, service catalog with ownership of services, documentation and metrics providing autonomy and visibility for all. |
+| [Epic Games](https://www.epicgames.com) | [Brian Jung](https://github.com/brian-at-epic), [Jeff Goldian](https://github.com/jeffgoldian-Epic) | Developer Portal: Service Catalog, Documentation, Software Templates and more making our internal teams' lives easier! |
+| [Globo](https://globo.com) | [Carlos Gusmão](https://github.com/caeugusmao), [Guilherme Vierno](https://github.com/vierno), [Denis Aoki](https://github.com/dnsaoki2), [Maycon Dionisio](https://github.com/MayconDionisio), | Reduce the friction of accessing the information engineers need about Globo's digital services through a coherent and centralized experience. |
+| [QBE](https://www.qbe.com/) | [Daniel Steel](https://github.com/danielsteelqbe), [Pete Jespers](https://github.com/petejespersqbe) | Developer portal allowing our global teams to explore and create applications, documentation and cloud infrastructure easily and quickly 🚀 |
+| [GoTo](https://www.goto.com) | [Lorenzo Orsatti](https://github.com/lorsatti) | Improve onboarding experience of new developers. Discover faster and painlessly developer documentation, API definitions and team information. Provide useful dev metrics in a central place. Provide easy-to-use templates for new services. |
+| [Telstra](https://www.telstra.com.au) | [@kiranpatel11](https://github.com/kiranpatel11), [JasonC](https://github.com/JasonC17) | Primary usage: software catalog and templates Emerging usage : TechDocs, Explore Ecosystem, TechRadar, etc |
+| [Mosaico](https://www.mosaico.com.br/) | [Wédney Yuri](https://github.com/wedneyyuri),[@tino.milton](https://github.com/miltonjacomini) | A centralized service catalog of our documentation for our service engineers. |
+| [Mox Bank](https://www.mox.com/) | [Nick Laqua](https://github.com/nick-laqua-dragon) | "Single pane of glass" developer portal for providing a best-in-class developer experience to our product teams and making Mox the best tech environment in Hongkong 🥰🚀 |
+| [Keyloop](https://www.keyloop.com/) | [Andre Wanlin](https://github.com/awanlin) | Future-motive Developer Portal to help our teams create technology to make everything about buying and owning a car better. 🚗 |
+| [Simply Business](https://sbtech.simplybusiness.co.uk/) | [@addersuk](https://github.com/addersuk), [@LightningStairs](https://github.com/LightningStairs), [@punitcse](https://github.com/punitcse), [@moltenice](https://github.com/moltenice) | Central developer portal to access everything a developer needs such as docs, internal service catalog, and the ability to quickly create a new service from a template. Internally developed Backstage plugins allow us to customise the experience to how we work. |
+| [Overwolf](https://www.overwolf.com) | [@tomwolfgang](https://github.com/tomwolfgang) | Dev portal - software catalog, tech-docs, scaffolding |
+| [Hotmart](https://www.hotmart.com) | [@fabioviana-hotmart](https://github.com/fabioviana-hotmart) | The main Developers Portal to centralize docs, applications and technical metrics. |
+| [EF Education First](https://www.ef.com) | [Daan Boerlage](https://github.com/runebaas), [Rafał Nowosielski](https://github.com/rnowosielski) | Our developer portal - primarily used for cataloging and scaffolding with the ambition to expand with more feature adoptions over time |
+| [Power Home Remodeling](https://www.techatpower.com) | [Ben Langfeld](https://github.com/benlangfeld) | Developer portal to our internal services, build on open-source software (including Kubernetes) in our own datacenters. Our Portal allows our team members to navigate inherant complexity and standardise. |
+| [Livspace](https://www.livspace.com) | [Praveen Kumar](https://github.com/praveen-livspace) | Developer portal, service catalog, tech docs, API docs and plugins |
+| [Just Eat Takeaway](https://www.justeattakeaway.com) | [Kim Wilson](https://github.com/kwilson541) | Our developer portal which centralises applications, reduces cognitive load and provides teams insights. |
+| [Hopin](https://hopin.com) | [Vladimir Glafirov](https://github.com/vglafirov), [Chloe Lee](https://github.com/msfuko) | Developer portal to streamline the development practices. Integrated with service catalog, software templates, application monitoring, tech docs and plugins. |
+| [HBO Max](https://hbomax.com) | [@mdb](https://github.com/mdb), [@nesta219](https://github.com/nesta219), [@nmische](https://github.com/nmische), [@hbomark](https://github.com/hbomark) | Developer portal hosting service catalog and API documentation, as well as cloud infrastructure details, operational visibility tools, and a custom plugin for browsing notable platform change events, such as deployments and configuration updates. |
+| [RCHLO](https://www.riachuelo.com.br) & [MIDWAY](https://www.midway.com.br) | [@marcosborges](https://github.com/marcosborges), [@defaultbr](https://github.com/defaultbr) | Self-Service Platform |
+| [HP Inc](https://www.hp.com) | [Damon Kaswell](https://github.com/dekoding) | DevEx engagement hub (dev portal: docs, standards, Q&A) and extensive assets catalog (APIs, services, code, data, etc.) for the pan-HP internal developer community. |
+| [VMware](https://www.vmware.com) | [@mpriamo](https://github.com/mpriamo), [@krisapplegate](https://github.com/krisapplegate) | Part of [Tanzu Application Platform](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/index.html) offering; internal developer portal |
+| [Ualá](https://www.uala.com.ar/) | [Santiago Bernal](https://github.com/sabernal) | Initial work being done to centralize documentation for all our microservices and APIs, as well as scaffolding new services and tracking code quality |
+| [IKEA IT AB](https://www.ingka.com) | [@bjornramberg](https://github.com/bjornramberg), [@supriyachitale](https://github.com/supriyachitale) | Supporting engineers at scale with self serve access and connecting the dots of our engineering platform and services, enabling product teams to move faster and go further, and unleashing innovation, reuse and co-creation across the organisation. |
+| [Invitae](https://www.invitae.com/en) | [@ryan-hanchett](https://github.com/ryan-hanchett), [@gmandler42](https://github.com/gmandler42) | Centralized Developer Experience portal, putting all of our tooling behind a single pane of glass and creating a living service catalog. |
+| [Fortum](https://www.fortum.com/) | [@brunoamaroalmeida](https://github.com/brunoamaroalmeida), [@dhaval-vithalani](https://github.com/dhaval-vithalani), [@sunilkumarmohanty](https://github.com/sunilkumarmohanty) | A central portal containing information about our applications, services, processes and other software assets to be used by Fortum software engineering community. |
+| [Procore](https://www.procore.com/jobs/engineering) | [@shayon](https://github.com/Shayon), [@jamesdabbs-procore](https://github.com/jamesdabbs-procore) | Developer portal - centralized software catalog and templates to enable self serve and reduce cognitive load. |
+| [Bradesco](https://banco.bradesco/html/classic/sobre/index.shtm) | [@danilosoarescardoso](https://github.com/danilosoarescardoso) | Centralized developer portal with software catalog, software templates, techdocs and some plugins from community and by our own. |
+| [SeatGeek](https://seatgeek.com) | [@zhammer](https://github.com/zhammer) | Software catalog and documentation platform |
+| [Grupo Boticário](https://www.grupoboticario.com.br/) | [@chicoribas](https://github.com/chicoribas), [@fndiaz](https://github.com/fndiaz), [@digogid](https://github.com/digogid), [@manumbs](https://github.com/manumbs), [@haooliveira84](https://github.com/haooliveira84), [@Rhullyam](https://github.com/Rhullyam) | Centralized developer portal with catalog, documentation, and software templates to build a ready to go application, including pipelines (CI/CD) and cloud services provisioning |
+| [Snyk](https://snyk.io/) | [@robcresswell](https://github.com/robcresswell) | Developer portal for software discovery, API documentation and templating |
+| [Stilingue](https://www.stilingue.com.br/) | [@stilingue-inteligencia-artificial](https://github.com/Stilingue-IA), [@bbviana](https://github.com/bbviana) | Developer portal, services catalog and centralization of metrics from Grafana, Sentry and GCP. Furthermore, centralization of documentation and infra details like DNS, Network services, SSL and so on. |
+| [TUI Group](https://www.tuigroup.com/) | [Simon Stamm](https://github.com/simonstamm), [Christian Rudolph](https://github.com/ChrisRu82) | Developer portal for all engineer to provide discoverability to all internal components, APIs, documentation and to scaffold templates with integrations to our internal tools extended by plugins from our community. |
+| [Alliander](https://www.alliander.com/) | [@leon-vg](https://github.com/leon-vg), [@gieljl](https://github.com/gieljl), [@niekteg](https://github.com/niekteg) | Developer portal - software catalog, technical documentation, software templates, tech radar and exploration of used tools/services |
+| [VIA](https://www.via.com.br) | [@vagnerguedes](https://github.com/vagnerguedes) | Centralized Developer Experience portal - Software catalog and documentation platform, software templates, techdocs, scaffolding, self-service infrastructure |
+| [Surevine](https://www.surevine.com/) | [@DJDANNY123](https://github.com/djdanny123) | Developer portal for software catalog, discovery and a view of the technologies we are using across the organisation, we are looking to explore how we can enrich our entities in Backstage by integrating a software bill of materials. |
+| [Bonial International GmbH](https://www.bonial.com/) | [@pjungermann](https://github.com/pjungermann) | Centralized developer portal with software catalog, tech docs, templates, and more. |
+| [Beez Innovation Labs Pvt. Ltd](https://www.beezlabs.com/) | [Karthikeyan Venkatesan](https://github.com/karthikeyan23) | Developer portal with software catalog, scaffolding, tech docs, templates, and infra. |
+| [Agorapulse](https://www.agorapulse.com/) | [@jvdrean](https://github.com/jvdrean) | Developer portal with software catalog, documentation, monitoring, runbooks, tech radar and more. |
+| [Wistia](https://wistia.com/) | [@qrush](https://github.com/qrush), [@okize](https://github.com/okize) | Internal Developer Portal, service catalog, tech docs and more |
+| [SIX](https://www.six-group.com/) | [@jbadeau](https://github.com/jbadeau), [@tomassatka](https://github.com/tomassatka) | Internal DevOps portal hosting our software and dataset catalog, as well as custom plugins for observability, service virtualization, deployments, incident managment and quality metrics. |
+| [Raiffeisen Bank International](https://www.rbinternational.com/) | [Daniel Baumgartner](https://github.com/dabarbi) | From developers for developers: software catalog, techdocs and heavy use of scaffolder to drive reuse on engineering level forward. Part of inner source initiative. Multi national setup coming. |
+| [Spread Group](https://www.spreadgroup.com/) | [Luna Stadler](https://github.com/heyLu), [Iván González](https://github.com/ivangonzalezacuna) | Internal Developer Portal, an overview of all running software, architecture documentation and more; replacing and unifying a variety of internal tools. |
+| [RD Station](https://rdstation.com) | [Rogerio Angeliski](https://github.com/angeliski), [Paula Assis](https://github.com/paulassis), [Guilherme Eric](https://github.com/guilhermeeric), [Daniela Adamatti](https://github.com/daniadamatti), [Luana Negreiros](https://github.com/luananegreiros) | Developer portal, scaffolding, services catalog. We are looking to centralize automations and information for the whole engineering team . |
+| [Resuelve Tu Deuda](https://resuelve.mx) | [Iván Álvarez](https://github.com/ivanhoe), [Jorge Medina](https://github.com/jorgearma1982) | Internal developer portal, service catalog, tech docs, api doc |
+| [Pachama](https://pachama.com/) | [Aron Gates](https://github.com/agates4) | Internal Developer Portal, a catalog of all microservices, architecture documentation, and templates to generate developer resources. |
+| [SEEK](https://www.seek.com.au) | [Jahred Hope](https://github.com/jahredhope) | Developer portal for developer tooling and technical documentation. |
+| [Marks & Spencer](https://www.marksandspencer.com/) | [Kamal Cheriyath](https://github.com/kcheriyath) | Centralised discovery, adoption and devops automation hub for Engineering & Architecture. |
+| [McKesson](https://www.mckesson.com/) | [Agnel Antony](https://github.com/aantony2) | Internal Developer Platform for developer gated CI/CD templates, technical documentation, cloud automation service catalog, etc. |
+| [World Fuel Services](https://www.wfscorp.com/) | [Anirudh Kurapathi](https://github.com/anirudhkurapati), [Alex Kwon](https://github.com/alexkwon), [Lester Hernandez](https://github.com/lhernandez-wfscorp), [Avi Boru](https://github.com/aviboru), [Vardhan Annapureddy](https://github.com/harshaaws) | Internal Developer Portal, service catalog product, API's, Software Templates, tech docs and more. |
+| [leboncoin](https://www.leboncoin.fr/) | [Andy Ladjadj](https://github.com/aladjadj) | Centralize our multiple UI in a single portal. Simplify onbording, new features and harmonize how people search information. Core features (catalog,api,docs,scafolder) are good to start the adoption. status: internal beta. |
+| [Contentful](https://www.contentful.com) | [James Bourne](https://github.com/jamesmbourne) | Centralized documentation of service ownership, APIs, and documentation, and new service creation with a custom scaffolder - [full case study with Roadie](https://roadie.io/case-studies/maintaining-velocity-through-hypergrowth-contentful/). |
+| [Back Market](https://www.backmarket.com) | [Sami Farhat](https://github.com/skfarhat) | Internal Developer Portal featuring catalog, tech-radar, ownership management, component creation (scaffolder) and centralized infrastructure management -- probably more to come. |
+| [Avalia Systems](https://avalia.io) | [Olivier Liechti](https://github.com/wasadigi), [Fabio Velloso](https://github.com/fabiovelloso) | Innersource, software analytics, knowledge base for 360 software assessments, collaborative applications, hub for tracking and sharing IP assets. |
+| [Albert Heijn](https://ah.technology) | [Joost Hofman](https://github.com/joosthofman), [Reindrich Geerman](https://github.com/reinst) | Single point of entry for all our engineers (Developer portal), Tech radar, catalog, templates (paved roads) and tech documentation. |
+| [Wise, formerly TransferWise](https://wise.com) | [Andrew Beveridge](https://github.com/beveradb) | It's early days for us, we're trying to start small with catalog, tech docs and unified search. Future ambitious vision includes scaffolder for one-click component addition, building out integrations with CI/CD tooling, kubernetes clusters, monitoring/alerting tooling etc. and aiming for a frictionless "golden path" for engineers! 🚀 |
+| [Happy Money](http://happymoney.com/) | [Akshit Lomash](mailto:alomash@happymoney.com) | We are moving from a monolith to microservices-based architecture. We are developing a developer portal based on Backstage to create a service catalog for our new services. All the services created are onboarded Backstage and engineering teams are using a cookie-cutter-based template from backstage to initiate a new service. |
+| [Lightspeed](http://lightspeedhq.com/) | [Marcus Crane](mailto:marcus.crane@lightspeedhq.com) | We use it within our X-Series division (https://vendhq.com) to catalog ~100+ systems and ~350 components! |
+| [Siemens](https://www.siemens.com/global/en.html) | [Nizar Chaouch](mailto:nizar.chaouch@siemens.com) | We are using Backstage as our Developer portal |
+| [The Warehouse Group](https://www.thewarehouse.co.nz) | [Matt Law](mailto:matt.law@thewarehouse.co.nz) | Backstage enables us to bootstrap our middleware environment of new services for our Dev teams in a matter of seconds. CI, CD, testing, logging, deployments are all taken care of to get them up and running in less than 60 seconds. |
+| [Tink](https://tink.com/) | [Sebastian Olsson](https://github.com/Sebelino), [Błażej Szum](https://github.com/blazejszumtink), [Anders Eurenius Runvald](https://github.com/anders-er-at-tink) | Internal developer portal which provides templates for creating new Java or Go microservices seamlessly. Also includes a tech radar and a visualization of our CD pipeline. |
+| [Brandwatch](https://brandwatch.com) | [Stefan Buck](https://github.com/stefanbuck) | Our primary focus is on the service catalog. Backstage is replacing our homemade service catalog. The switch was quite simple due to the catalog processor API. |
+| [Laybuy](https://www.laybuy.com) | [Chris Simmons](https://github.com/contrarianchris) | Backstage is the heart of Laybuy’s new centralised Development Platform, bringing disparate development tools and experiences into a single easy-to-use portal. It simplifies software and API discovery, project scaffolding, and technical documentation, enabling us to embrace golden path development and automate software standards. |
+| [Sendinblue](https://engineering.sendinblue.com/) | [Tanguy Antoine](mailto:antoine.tanguy@sendinblue.com) | Helps us drive the change at scale. Puts light on services, resources, and dependencies. One tool that rules them all through plugins we created for that purpose. We are aiming to put Backstage at the center of every developer's work (Actionable items, Debugging, Monitoring, Provisioning, etc...) to improve their happiness |
+| [SafetyCulture](https://safetyculture.com/) | [@R-cen](https://github.com/R-cen), [@lachlancooper](https://github.com/lachlancooper), [@hkf57](https://github.com/hkf57) | Internal developer portal to provide a centralized place for engineers to see an overview of their team's services and information related to the service from other systems. Initially focused on the software catalog, techdocs and search. |
+| [Sana Life Science](https://sanalifescience.com) | [Joe Hillyard](mailto:joe@sanalifescience.com) | API Catalog, Tools Management & Control Hub |
+| [Ndustrial](https://ndustrial.io) | [Jonathan Skubic](mailto:jonathan@ndustrial.io) | Software Project Catalog |
+| [TUI Musement](https://www.musement.com/uk/) | [Simone Fumagalli](mailto:simone.fumagalli@musement.com) | We are importing our catalog into it to keep it under control. The next step is start using templates |
+| [Kambi AB](https://www.kambi.com) | [Martin Norum](mailto:martin.norum@kambi.com) | We want to kick ass at speed, so we're currently building up a catalog of our existing software, and looking into how Backstage can support us in our journey towards autonomous product teams. Both to improve speed to market and operational awareness. |
+| [ANZ](https://www.anz.com.au/personal/) | [Elliot Jackson](mailto:elliot.jackson@anz.com) | Catalog, tech docs and automation |
+| [Genie Solutions](https://www.geniesolutionssoftware.com.au) | [Zainab Bagasrawala](mailto:zainabbagasrawala@geniesolutions.com.au) | Developer Portal to track our projects, documentation, observability tools and more |
+| [MadeiraMadeira](https://www.madeiramadeira.com.br) | [Paulo Eduardo Peixoto](mailto:paulo.peixoto@madeiramadeira.com.br) | As a support tool for developers, following the principles of "Developer Experience". In order to make the developer's day to day more practical, efficient and, why not, happy. |
+| [Sonatype](https://www.sonatype.com) | [Srikar Ananthula](mailto:sananthula@sonatype.com) | Centralize services used internally with many plugins |
+| [CVS Health](https://www.cvshealth.com) | [Ari Ben-Elazar](mailto:abenelazar@gmail.com) | Cataloging and documenting our service offerings to offer our internal developers a better operational journey |
+| [Yatra.com](https://www.yatra.com) | [Matiur Rahman Maitur](mailto:arifrahman4u@gmail.com) | Easy to find out Project details, ownership, dependent services, Documentation, it is very useful for developer. |
+| [Yotpo](https://www.yotpo.com) | [Liran Yogev](mailto:lyogev@yotpo.com) | Services exploration, documentation and project generator |
+| [Mainsail Industries](https://www.mainsailindustries.com) | [Brad Sollar](mailto:brad@mainsailindustries.com) | Internal tool management and docs |
+| [Prisma](https://prismamp.com) | [Sebastian Gravina](mailto:sgravina@prismamp.com) | Is part of our IDP |
+| [Syndetic](https://syndetic.io) | [John Feminella](mailto:robots+swag@syndetic.io) | We're working with multiple F100 clients for digital transformation and Backstage is a key part of our landing and acceleration strategy. |
+| [Imagine Learning](https://www.imaginelearning.com/en/us) | [Jared Stehler](mailto:jared.stehler@imaginelearning.com) | Software catalog, product dependency visualization |
+| [Alef Education](https://www.alefeducation.com) | [Belal Juma](mailto:belal.juma@alefeducation.com) | We use backstage as a Service Catalog and rely on the TechDocs feature |
+| [Zego](https://www.zego.com) | [Sean Kenny](mailto:sean.kenny@zego.com) | Single pane of glass for organisational and operational information for all services across our systems. |
+| [Absa Group Limited](https://www.absa.africa/absaafrica/) | [Chris Kieser](mailto:chris.kieser@absa.africa) | Developer portal for all development needs - security, AWS, k8s, build and deployment pipelines and more |
+| [Nutrien Ag Solutions](https://www.nutrienagsolutions.com.au) | [Jan Quijano](mailto:jan.quijano@nutrien.com.au) | Software Project Catalog |
+| [Lendingkart](https://www.lendingkart.com/) | [Dinesh Rajpoot](mailto:dinesh.rajpoot@lendingkart.com) | Service catalog, Software templates to enforce best practices and tech insights to track mandates & migrations. |
+| [Meltwater](https://underthehood.meltwater.com) | [@spier](https://github.com/spier), [@remen](https://github.com/remen) | Improving developer experience by centralizing documentation and internal APIs. Goal: Foster InnerSource collaboration and speed up onboarding time in our 500+ people Product & Engineering org. |
+| [Doctolib](https://doctolib.engineering/) | [@djiit](https://github.com/djiit) | Rails modularization effort awareness, tech organization discoverability. Improving the daily workflows and collaboration processes of our engineers. |
+| [Twilio](https://www.twilio.com) | [Kyle Smith](https://github.com/knksmith57) | Developer portal, universal software catalog, and centralized taxonomy platform. |
+| [OVHcloud](https://www.ovhcloud.com/fr/) | [Jean-Philippe Blary](https://github.com/blaryjp), [Arnaud Bauer](mailto:arnaud.bauer@ovhcloud.com), [Flavien Chantelot](https://github.com/Dorn-) | We're providing Backstage to our collaborators to ease their daily jobs, and let them extends it using plugins. |
+| [Procter & Gamble](https://us.pg.com/) | [Binita Nayak](https://github.com/binitan), [Josh Rose](https://github.com/joshuarose), [RJ Winkler](https://github.com/rjwink) | P&G leverages Backstage to build internal developer portal to ensure developers' happiness. This developer portal shall act as single source of information needed by development teams to seamlessly create, find and maintain their software components/resources/documentation. |
+| [SANS Institute](https://www.sans.org) | [Christopher Klewin](mailto:cklewin@sans.org) | Developer portal for centralized visibility, reporting, and tooling across multiple organizations. |
+| [Okay](https://www.okayhq.com/) | [Tomas Barreto](mailto:tomas@okayhq.com) | Service catalog, developer portal, and technical documentation |
+| [Kaluza](https://www.kaluza.com) | [James Condren](mailto:james.condron@kaluza.com) | To provide an automated golden path to developers, with a focus on discovery and documentation |
+| [LinkedIn](https://linkedin.com) | [Joshua Lawrence](mailto:jlawrence@linkedin.com) | We are building a platform for internal web tools |
+| [Forto](https://forto.com) | [Rodolfo Matos](mailto:rodolfo.matos@forto.com) | Still in a experimental phase/assessing the organisational fit. We will be using it mostly a developer portal -- pretty standard use case. |
+| [BetterUp](https://betterup.com) | [Jordan Hochenbaum](mailto:jordan.hochenbaum@betterup.co) | We're starting to use Backstage as the central hub for service discovery, documentation, and develop experience. |
+| [warung pintar](https://warungpintar.co.id/) | [Muhammad Rafly Andrianza](mailto:rafly.andrianza@warungpintar.co) | Initial Work Developer Portal with TechRadar, Service Catalogue, TechDocs, anything about platform & infrastructure resources. |
+| [RD](https://rd.com.br/) | [Michael Silva](mailto:midsilva@rd.com.br) | We are building our developer portal. Software catalog, Tech Radar and Scaffolding are among the initial features. |
+| [AEB](https://www.aeb.com/) | [David Fankhänel](mailto:dfl@aeb.com) | Central developer platform for creating new apps via templates, getting an overview via software catalog, etc |
+| [SALTO Systems](https://saltosystems.com) | [Ian Cowley](mailto:i.cowley@saltosystems.com) | Currently using Backstage as an internal documentation portal. |
+| [Lummo](https://lummo.com) | [Anjul Sahu](mailto:anjul@lummo.com) | We are building the internal developer portal using Backstage and bringing up all integrations and service information at one place. |
+| [Frontside](https://frontside.com) | [Taras Mankovski](mailto:taras@frontside.com) | |
+| [Stepstone](https://www.stepstone.com/en/) | [Neil Kennedy](mailto:neil.kennedy@stepstone.com) | StepStone is using Backstage to solve problems around ownership and visibility of our applications. We have thousands of repos, multiple legacy systems and a growing platform that is hard to maintain. Backstage is forming the centre of our push to embrace the chaos. |
+| [idwall](https://idwall.co) | [Rodrigo Catão Araujo](mailto:rodrigo@idwall.co) | Developer Portal for internal engineers to access service catalog, documentation, observability, infrastructure and internal tooling. |
+| [Jaguar Land Rover](https://www.jaguarlandrover.com) | [Josh Walker](mailto:jwalke18@jaguarlandrover.com) | Users can request a Gitlab user, which creates a commit with the Terraform code. |
+| [Glovo](http://glovoapp.com/) | [Yaser Toutah](mailto:yaser.toutah@glovoapp.com) | Developer Portal to improve our Developer Experience, identify ownership and track metadata for our services and tools. It's our Service Catalog. In addition to that, we use it for Service Creation, and much more. |
+| [Dixa](https://dixa.com) | [Jens Møller](https://github.com/jensamoller) | We are in early stages, but using it to get overview of our repositories and ownership of these. We want among many things to use it for compliance and easier access to key metrics for our repos. |
+| [Notino](https://notino.com) | [Jan Remunda](mailto:jan.remunda@notino.com) | Backstage is our developer portal. We use it as service catalog and for technical documentation. |
+| [Polarpoint](https://polarpoint.io/) | [Surj Bains](https://github.com/polarpoint-io) | We are using Backstage as our Developer portal as well as for hosting our DevOps portal for software catalog. |
+| [Niche](https://niche.com) | [Zach Romitz](mailto:zach.romitz@niche.com) | We are using the Software Catalog, Software Templates, API documentation, and Techdocs to try and centralize service information. |
+| [Mercedes-Benz.io](https://www.mercedes-benz.io/) | [Manuel Santos](https://github.com/manusant) | At Mercedes-Benz we use it as a developer portal with software catalog, TechDocs, Scaffolding and custom plugins. It provides an overview of our tech ecosystem to our product development teams. The portal also serves as a way to foster collaboration among the numerous companies of the Mercedes-Benz Group. |
+| [Funding Circle](https://www.fundingcircle.com/) | [Ariel Pacciaroni](https://github.com/arielpacciaroni) | We are building the internal developer portal using Backstage project and centralizing all services information at one place. The portal helps us track down repositories ownership as well as direct access to key information on every component. |
+| [Clarivate](https://www.clarivate.com) | [Gabriele Carteni](mailto:gabriele.carteni@clarivate.com) | We are building our Developer Portal using Backstage to have a better control over our software ecosystem, integrate SDLC tools and promote best practices |
+| [Cho Tot](https://www.chotot.com) | [Chotot Team](mailto:sre@chotot.vn) | Internal developer portal, service catalog with CI/CD tools. |
+| [William Hill](https://www.williamhillgroup.com/) | [Pat Mills](mailto:pat.mills@williamhill.com), [Nathan Flynn](mailto:nflynn@williamhill.co.uk), and [Nishkarsh Raj](mailto:nishkarsh.raj@williamhill.co.uk) | William Hill are leveraging Backstage to build our Engineering Portal. Our mission is to centralize the software catalog inventory to enable service discoverability, reduce the onboarding time for new Engineers, provide a single pane of glass to accelerate Developer Productivity and Save Engineers time. Our aspiration is to create an InnerSource community focussed on organization-wide patterns that are re-usable and can be self-served with the Scaffolder. |
+| [Vodafone NewZealand Limited](https://vodafone.co.nz) | [Ankit Gupta](mailto:ankit.gupta@vodafone.nz), [DevOps COE](mailto:devopstooling@vodafone.nz) | Vodafone NZ are leveraging Backstage to build centralised and self service Engineering Portal. Our mission is to standardised Pipeline templates across the Engineering teams, One shop stop to create the pipelines and repository with a template approach which reduces creation part from days to minutes and no wait time for developers. A unified view for Azure DevOps pipeline, Azure Repo pull requests, Deployment status from Azure RedHat Openshift-ArgoCD and SonarQube Security and code quality scans report on a single pan to provide a streamlined view for all microservices across the app stack. |
+| [Coamo](http://www.coamo.com.br) | [@holiiveira](https://github.com/holiiveira), [@gpxlnx](https://github.com/gpxlnx) | We're starting to use it as the main tool of a DevOps platform. Our goal is to provide software templates, centralize our software catalog enabling efficient service discovery, and make it easy to manage the entire software ecosystem in one place. |
+| [Exclaimer](https://www.exclaimer.com/) | [Marley Powell](mailto:marley.powell@exclaimer.com) | Developer portal, service catalog and documentation |
+| [Edge Consulting](https://egde.no/) | [Øyvind Brekkhus Sandåker](mailto:oyvindbs@egde.no) | Using it as a Software Catalog to get an overview of our systems, for ourselves and our customers. |
+| [CRV](https://crv4all.com) | [Pepijn Schildkamp](mailto:pepijn.schildkamp@crv4all.com) |
+| [uisee.com](https://uisee.com) | [Haili Zhang](mailto:haili.zhang@uisee.com) | In PoC stage, planning to land it for cloud platform dev team. |
+| [Egencia](https://www.egencia.com) | [Micheal Gibbons](mailto:migibbons@egencia.com) | Developer Portal: Software Catalog, Software Templates and Techdocs. |
+| [Adaptavist](https://adaptavist.com) | [Lilly Holden](mailto:lholden@adaptavist.com) | Developer portal, service catalog, documentation and self-service platform |
+| [Shipshape](https://shipshape.io) | [Chuck Carpenter](mailto:chuck@shipshape.io) | We are a consultancy helping teams implement and customize Backstage. |
+| [Backbase](https://backbase.com) | [Nicolas Torres](mailto:ntorres.dev@gmail.com) | To catalog components and teams |
+| [https://www.clear.sale](https://www.clear.sale) | [Paulo Baima](mailto:paulo.filho@clear.sale) | Central Hub for all the company modules, enabling the track of ownership of components and resources and how they relate to each other. |
+| [www.leroymerlin.com.br](https://www.leroymerlin.com.br) | [Rodrigo Franzoni](mailto:rfranzoni@leroymerlin.com.br) | Our engineers use the Backstage to solve problems around ownership and visibility of our applications, access service catalog, documentation, observability and infrastructure. |
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index eb60bc48e0..1afbf072fc 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -58,9 +58,9 @@ If you are proposing a feature:
- Remember that this is a volunteer-driven project, and that contributions
are welcome :)
-### Add your company to ADOPTERS
+### Add your company to `ADOPTERS`
-Have you started using Backstage? Adding your company to [ADOPTERS](ADOPTERS.md) really helps the project.
+Have you started using Backstage? Adding your company to [ADOPTERS](ADOPTERS.md) really helps the project, you can do this by filling out this [Adopter form](https://form.typeform.com/to/zcOaKikB).
## Get Started!
diff --git a/app-config.yaml b/app-config.yaml
index a56a3df9d1..9a3206026e 100644
--- a/app-config.yaml
+++ b/app-config.yaml
@@ -234,16 +234,6 @@ catalog:
# dn: ou=access,ou=groups,ou=example,dc=example,dc=net
# options:
# filter: (&(objectClass=some-group-class)(!(groupType=email)))
- microsoftGraphOrg:
- ### Example for how to add your Microsoft Graph tenant
- #providers:
- # - target: https://graph.microsoft.com/v1.0
- # authority: https://login.microsoftonline.com
- # tenantId: ${MICROSOFT_GRAPH_TENANT_ID}
- # clientId: ${MICROSOFT_GRAPH_CLIENT_ID}
- # clientSecret: ${MICROSOFT_GRAPH_CLIENT_SECRET_TOKEN}
- # userFilter: accountEnabled eq true and userType eq 'member'
- # groupFilter: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified')
locations:
# Add a location here to ingest it, for example from a URL:
diff --git a/docs/auth/add-auth-provider.md b/docs/auth/add-auth-provider.md
index eb8973bec1..01c18f04cd 100644
--- a/docs/auth/add-auth-provider.md
+++ b/docs/auth/add-auth-provider.md
@@ -350,6 +350,7 @@ router.get('/auth/providerA/handler/frame');
router.post('/auth/providerA/handler/frame');
router.post('/auth/providerA/logout');
router.get('/auth/providerA/refresh'); // if supported
+router.post('/auth/providerA/refresh'); // if supported
```
As you can see each endpoint is prefixed with both `/auth` and its provider
diff --git a/docs/features/search/search-engines.md b/docs/features/search/search-engines.md
index a5ff780c8a..ecd8a85109 100644
--- a/docs/features/search/search-engines.md
+++ b/docs/features/search/search-engines.md
@@ -59,10 +59,38 @@ configured and make the following changes to your backend:
// Initialize a connection to a search engine.
const searchEngine = (await PgSearchEngine.supported(env.database))
- ? await PgSearchEngine.from({ database: env.database })
+ ? await PgSearchEngine.fromConfig(env.config, { database: env.database })
: new LunrSearchEngine({ logger: env.logger });
```
+## Optional Configuration
+
+The following is an example of the optional configuration that can be applied when using Postgres as the search backend. Currently this is mostly for just the highlight feature:
+
+```yaml
+search:
+ pg:
+ highlightOptions:
+ useHighlight: true # Used to enable to disable the highlight feature. The default value is true
+ maxWord: 35 # Used to set the longest headlines to output. The default value is 35.
+ minWord: 15 # Used to set the shortest headlines to output. The default value is 15.
+ shortWord: 3 # Words of this length or less will be dropped at the start and end of a headline, unless they are query terms. The default value of three (3) eliminates common English articles.
+ highlightAll: false # If true the whole document will be used as the headline, ignoring the preceding three parameters. The default is false.
+ maxFragments: 0 # Maximum number of text fragments to display. The default value of zero selects a non-fragment-based headline generation method. A value greater than zero selects fragment-based headline generation (see the linked documentation above for more details).
+ fragmentDelimiter: ' ... ' # Delimiter string used to concatenate fragments. Defaults to " ... ".
+```
+
+**Note:** the highlight search term feature uses `ts_headline` which has been known to potentially impact performance. You only need this minimal config to disable it should you have issues:
+
+```yaml
+search:
+ pg:
+ highlightOptions:
+ useHighlight: false
+```
+
+The Postgres documentation on [Highlighting Results](https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-HEADLINE) has more details.
+
## ElasticSearch
Backstage supports ElasticSearch search engine connections, indexing and
diff --git a/docs/features/software-catalog/well-known-annotations.md b/docs/features/software-catalog/well-known-annotations.md
index 24464dd700..46f28dcb01 100644
--- a/docs/features/software-catalog/well-known-annotations.md
+++ b/docs/features/software-catalog/well-known-annotations.md
@@ -242,13 +242,14 @@ that entity if the periskop plugin is installed.
# Example:
metadata:
annotations:
- sentry.io/project-slug: pump-station
+ sentry.io/project-slug: backstage/pump-station
```
The value of this annotation is the so-called slug (or alternatively, the ID) of
-a [Sentry](https://sentry.io) project within your organization. The organization
-slug is currently not configurable on a per-entity basis, but is assumed to be
-the same for all entities in the catalog.
+a [Sentry](https://sentry.io) project within your organization. The value can
+be the format of `[organization]/[project-slug]` or just `[project-slug]`. When
+the organization slug is omitted the `app-config.yaml` will be used as a
+fallback (`sentry.organization`).
Specifying this annotation may enable Sentry related features in Backstage for
that entity.
diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md
index 5725e67c7b..4f2c58bbec 100644
--- a/docs/integrations/github/github-apps.md
+++ b/docs/integrations/github/github-apps.md
@@ -79,7 +79,7 @@ privateKey: |
### Including in Integrations Config
Once the credentials are stored in a YAML file generated by `create-github-app`,
-or manually by following the [GitHub Enterprise](#gitHub-enterprise)
+or manually by following the [GitHub Enterprise](#github-enterprise)
instructions, they can be included in the `app-config.yaml` under the
`integrations` section.
diff --git a/docs/overview/architecture-overview.md b/docs/overview/architecture-overview.md
index 382399e603..3c9417268b 100644
--- a/docs/overview/architecture-overview.md
+++ b/docs/overview/architecture-overview.md
@@ -341,7 +341,8 @@ separate Docker images.
The backend container can be built by running the following command:
```bash
-yarn run docker-build
+yarn run build
+yarn run build-image
```
This will create a container called `example-backend`.
diff --git a/docs/overview/roadmap.md b/docs/overview/roadmap.md
index 727000728f..df242ed172 100644
--- a/docs/overview/roadmap.md
+++ b/docs/overview/roadmap.md
@@ -15,9 +15,9 @@ work"](#future-work). With "next" we mean features planned for release within
the ongoing quarter from April through June 2022. With "future" we mean
features on the radar, but not yet scheduled.
-| [What's next](#whats-next) | [Future work](#future-work) |
-| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
-| [Ease of onboarding](#ease-of-onboarding) [Backstage Search 1.0](#search-1.0) [TechDocs Addon Framework](#techdocs-addon-framework) [Backend Services (initial)](#backend-services-initial) [Backstage Security Audit](#backstage-security-audit) [SIGs for contributors](#sigs-for-contributors) | Security Plan (and Strategy) Composable Homepage 1.0 GraphQL Telemetry Improved UX design |
+| [What's next](#whats-next) | [Future work](#future-work) |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| [Backstage Search 1.0](#search-1.0) [Backend Services (MVP)](#backend-services-mvp) [Backstage Security Audit](#backstage-security-audit) [Backstage Threat Model](#backstage-threat-model) [TechDocs Addon Framework](#techdocs-addon-framework) [Software Catalog pagination](#software-catalog-pagination) [More SIGs](#more-sigs) | Ease of onboarding Composable Homepage 1.0 Creator experience GraphQL Telemetry |
The long-term roadmap (12 - 36 months) is not detailed in the public roadmap.
Third-party contributions are also not currently included in the roadmap. Let us
@@ -30,47 +30,22 @@ The feature set below is planned for the ongoing quarter, and grouped by theme.
The list order doesn't necessarily reflect priority, and the development/release
cycle will vary based on maintainer schedules.
-### Ease of onboarding
-
-A faster (with less development) and easier setup of a proof-of-concept
-deployment, as part of the onboarding experience, has been a common and loud
-suggestion from new adopters as well as analysts looking at Backstage.
-
-With this initiative we plan to start facing this important topic with the most
-commonly used and challenging tasks. More in particular we plan to reduce the
-effort required to go from zero to production in installing and customizing
-Backstage, as well as reducing the effort required to populate the Software
-Catalog.
-
-More iterations will be required in the following quarters, but this will be a
-good improvement in the onboarding experience, especially for the benefit of new
-adopters.
-
### Backstage Search 1.0
Fix the few remaining issues to get Backstage Search platform up to 1.0. For more information, see the [Backstage Search documentation and roadmap page](https://backstage.io/docs/features/search/search-overview).
-### TechDocs Addon Framework
-
-Addons are TechDocs features that are added on top of the base docs-like-code experience. An example would be a feature that showed comments on the page. We plan to add an Addon framework and open source a selection of the Addons that we use internally at Spotify. We encourage the Backstage community to add further Addons.
-
-For more information about the TechDocs Addon Framework, see the documentation page [here](https://backstage.io/docs/features/techdocs/addons)
-
-For general information about TechDocs including roadmap, see [here](https://backstage.io/docs/features/techdocs/techdocs-overview).
-
-### Backend Services (initial)
+### Backend Services (MVP)
To better scale and maintain the Backstage instances, a backend services system
is planned to be introduced as part of the software architecture. This layer of
backend services will help in decoupling the various modules (e.g. Catalog and
Scaffolder) from the frontend experience.
-In this quarter we plan to start designing the new architecture, together with
-the first experimentation and development of the software components.
+After the experimentation and design happened in the past quarter, soon we plan to release a first version to start providing the first benefits to adopters and developers.
### Backstage Security Audit
-This is the continuation of the initiative started in the previous quarter. This
+This is the continuation of the initiative started in the previous quarters. This
quarter will see the publication of the report describing the outcome of the
audit, together the first fixes and the development of some of the changes
required to address the vulnerabilities.
@@ -84,12 +59,34 @@ initiative.
This initiative is done together with, and with the support of, the [Cloud
Native Computing Foundation (CNCF)](https://www.cncf.io/).
-### SIGs for contributors
+### Backstage Threat Model
-The request to better coordinate the increasing number of contributions coming
-from the various adopters' developers is loud and clear. We think that the
-community is mature enough to start launching the SIGs (Special Interest Groups)
-following the successful model of Kubernetes.
+This is another (relevant) initiative planned to make Backstage a secure product for the adopters. The goals of this initiative are:
+
+1. Understand where security investment and attention is needed.
+2. Guide the upcoming security audit.
+3. Communicate expectations to Backstage adopters and inform and attract security researchers.
+
+The planned artifacts are:
+
+- Concise high level threat model that will be included as part of the Backstage security documentation.
+- Granular threat model created in conjunction with the security audit to inform further security investment areas for Backstage.
+
+### TechDocs Addon Framework
+
+Addons are TechDocs features that are added on top of the base docs-like-code experience. An example would be a feature that showed comments on the page. We plan to add an Addon framework and open source a selection of the Addons that we use internally at Spotify. We encourage the Backstage community to add further Addons.
+
+For more information about the TechDocs Addon Framework, see the documentation page [here](https://backstage.io/docs/features/techdocs/addons).
+
+For general information about TechDocs including roadmap, see [here](https://backstage.io/docs/features/techdocs/techdocs-overview).
+
+### Software Catalog pagination
+
+Today adopters with a big catalog (with several thousands of software components) might not have an ideal end-user experience when viewing the `/catalog` page. The issue is related to how the entities are fetched by the frontend. In order to provide a better end-user experience the pagination of the catalog’s entities needs to be enforced. Some experimentation is already completed but in this quarter we plan to continue, and hopefully complete, this relevant enhancement.
+
+### More SIGs
+
+In the last quarter we launched the [Catalog SIG (Special Interest Group)](https://github.com/backstage/community/tree/main/sigs/sig-catalog) to better coordinate the increasing number of contributions to the project. We think that this is the proper path to follow to engage more with the contributors. For this reason we will launch other SIGs dedicated to the most interesting topics for the community.
## Future work
@@ -97,18 +94,17 @@ The following feature list doesn't represent a commitment to develop, and the
list order doesn't reflect any priority or importance, but these features are on
the maintainers' radar, with clear interest expressed by the community.
-- **Security Plan (and Strategy):** The purpose of the Security Strategy is to
- move another step along the path to maturing the platform, setting the
- expectations of any adopters from a security standpoint.
+- **Ease of onboarding:** A faster (with less development) and easier setup of
+ Backstage and the most relevant/adopted plugins.
- **Composable Homepage 1.0:** Driving this to 1.0 by adding some composable
components.
+- **Creator experience:** Provide a better Backstage user experience through
+ visual guidelines and templates, especially navigation across plug-ins and
+ portal functionalities.
- **[GraphQL](https://graphql.org/) support:** Introduce the ability to query
Backstage backend services with a standard query language for APIs.
- **Telemetry:** To efficiently generate logging and metrics in such a way that
adopters can get insights so that Backstage can be monitored and improved.
-- **Improved UX design:** Provide a better Backstage user experience through
- visual guidelines and templates, especially navigation across plug-ins and
- portal functionalities.
## How to influence the roadmap
diff --git a/docs/overview/versioning-policy.md b/docs/overview/versioning-policy.md
index 282906c580..885a599ed8 100644
--- a/docs/overview/versioning-policy.md
+++ b/docs/overview/versioning-policy.md
@@ -49,7 +49,7 @@ functionality, breaking changes, and bug fixes, according the
[versioning policy](#release-versioning-policy).
Patch versions will only be released to address critical bug fixes. They are not
-bound to the regular cadence and are instead releases whenever needed.
+bound to the regular cadence and are instead released whenever needed.
## Next Release Line
diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
index e818557402..a76518b202 100644
--- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
+++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
@@ -160,12 +160,12 @@ Create a new `plugins/todo-list-backend/src/conditionExports.ts` file and add th
```typescript
import { TODO_LIST_RESOURCE_TYPE } from '@internal/plugin-todo-list-common';
import { createConditionExports } from '@backstage/plugin-permission-node';
-import { permissionRules } from './service/rules';
+import { rules } from './service/rules';
const { conditions, createConditionalDecision } = createConditionExports({
- pluginId: 'catalog',
- resourceType: RESOURCE_TYPE_CATALOG_ENTITY,
- rules: permissionRules,
+ pluginId: 'todolist',
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+ rules,
});
export const todoListConditions = conditions;
@@ -173,7 +173,12 @@ export const todoListConditions = conditions;
export const createTodoListConditionalDecision = createConditionalDecision;
```
-Make sure `todoListConditions` and `createTodoListConditionalDecision` are exported from the `todo-list-backend` package.
+Make sure `todoListConditions` and `createTodoListConditionalDecision` are exported from the `todo-list-backend` package by editing `plugins/todo-list-backend/src/index.ts`:
+
+```diff
+ export * from './service/router';
++ export * from './conditionExports';
+```
## Test the authorized update endpoint
diff --git a/docs/releases/v1.4.0-next.2-changelog.md b/docs/releases/v1.4.0-next.2-changelog.md
new file mode 100644
index 0000000000..fe00c648dd
--- /dev/null
+++ b/docs/releases/v1.4.0-next.2-changelog.md
@@ -0,0 +1,1308 @@
+# Release v1.4.0-next.2
+
+## @backstage/catalog-model@1.1.0-next.2
+
+### Minor Changes
+
+- 4cc81372f8: Introduced `GroupDefaultParentEntityPolicy` to set a default group entity parent.
+
+## @backstage/core-components@0.10.0-next.2
+
+### Minor Changes
+
+- 32204fa794: Add `transformLinkUri` and `transformImageUri` to `MarkdownContent`
+
+### Patch Changes
+
+- b4b711bcc2: Fix the EntityLayout header style so that EntityContextMenu button can display in correct shape when user hover on it
+- 15201b1032: Updated dependency `rc-progress` to `3.4.0`.
+- 385389d23c: Updated to remove usage of the `bursts` object in the theme palette
+- Updated dependencies
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-catalog@1.4.0-next.2
+
+### Minor Changes
+
+- a274fe38b9: Add hidden title column to catalog and API table to enable filtering by title.
+
+### Patch Changes
+
+- 258057a4b9: Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'.With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled.
+
+ The boolean input for "unregister entity" will be deprecated later in favour of the above three options.
+
+- 385389d23c: Updated to remove usage of the `bursts` object in the theme palette
+
+- be26d95141: Added new `EntityProcessingStatusPicker` that will filter for entities with orphans and/or errors.
+
+ If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this:
+
+ ```diff
+ ...
+ import {
+ CatalogFilterLayout,
+ EntityTypePicker,
+ UserListPicker,
+ EntityTagPicker
+ + EntityProcessingStatusPicker,
+ } from '@backstage/plugin-catalog-react';
+ ...
+ export const CustomCatalogPage = ({
+ columns,
+ actions,
+ initiallySelectedFilter = 'owned',
+ }: CatalogPageProps) => {
+ return (
+ ...
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ ...
+ };
+ ```
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.4.0-next.1
+
+### Minor Changes
+
+- a145672f0f: Align `msgraph` plugin's entity provider config with other providers. **Deprecated** entity processor as well as previous config.
+
+ You will see warning at the log output until you migrate to the new setup.
+ All deprecated parts will be removed eventually after giving some time to migrate.
+
+ Please find information on how to migrate your current setup to the new one below.
+
+ **Migration Guide:**
+
+ There were two different way on how to use the msgraph plugin: processor or provider.
+
+ Previous registration for the processor:
+
+ ```typescript
+ // packages/backend/src/plugins/catalog.ts
+ builder.addProcessor(
+ MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, {
+ logger: env.logger,
+ // [...]
+ }),
+ );
+ ```
+
+ Previous registration when using the provider:
+
+ ```typescript
+ // packages/backend/src/plugins/catalog.ts
+ builder.addEntityProvider(
+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, {
+ id: 'https://graph.microsoft.com/v1.0',
+ target: 'https://graph.microsoft.com/v1.0',
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
+ // [...]
+ }),
+ );
+ ```
+
+ Previous configuration as used for both:
+
+ ```yaml
+ # app-config.yaml
+ catalog:
+ processors:
+ microsoftGraphOrg:
+ providers:
+ - target: https://graph.microsoft.com/v1.0
+ # [...]
+ ```
+
+ **Replacement:**
+
+ Please check for the complete documentation of all configuration options (config as well as registration of the provider).
+
+ ```yaml
+ # app-config.yaml
+ catalog:
+ providers:
+ microsoftGraphOrg:
+ # In case you used the deprecated configuration with the entity provider
+ # using the value of `target` will keep the same location key for all
+ providerId: # some stable ID which will be used as part of the location key for all ingested data
+ target: https://graph.microsoft.com/v1.0
+ # [...]
+ ```
+
+ ```typescript
+ // packages/backend/src/plugins/catalog.ts
+ builder.addEntityProvider(
+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
+ // [...]
+ }),
+ );
+ ```
+
+ In case you've used multiple entity providers before
+ **and** you had different transformers for each of them
+ you can provide these directly at the one `fromConfig` call
+ by passing a Record with the provider ID as key.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-tasks@0.3.3-next.2
+ - @backstage/plugin-catalog-backend@1.2.1-next.2
+
+## @backstage/plugin-cost-insights-common@0.1.0-next.0
+
+### Minor Changes
+
+- 81dd5ea989: Introduces a new isomorphic @backstage/plugin-cost-insight-common package to contain shared types across all other cost insights packages and modules.
+
+## @backstage/plugin-scaffolder@1.4.0-next.2
+
+### Minor Changes
+
+- d8eb82f447: Add `allowedRepos` `ui:option` to `RepoUrlPicker` component, and move `repoName` field to own component
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- 14146703e5: Add `allowArbitraryValues` to `ui:options` in `OwnedEntityPicker`, similar to `allowArbitraryValues` in `EntityPicker`
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
+## @backstage/plugin-scaffolder-backend@1.4.0-next.2
+
+### Minor Changes
+
+- 4baf8a4ece: Update GitLab Merge Request Action to allow source branch to be deleted
+- 2db07887cb: Added two new scaffolder actions: `github:repo:create` and `github:repo:push`
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/plugin-catalog-backend@1.2.1-next.2
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/plugin-tech-insights-backend@0.5.0-next.2
+
+### Minor Changes
+
+- 818fa28d71: Allow FactRetrieverRegistry to be injected into buildTechInsightsContext so that we can override default registry implementation.
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/backend-tasks@0.3.3-next.2
+
+## @backstage/app-defaults@1.0.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/backend-common@0.14.1-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/backend-tasks@0.3.3-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.2
+
+## @backstage/backend-test-utils@0.1.26-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/cli@0.18.0-next.2
+
+## @backstage/cli@0.18.0-next.2
+
+### Patch Changes
+
+- f6b6fb7165: The `test` command now ensures that all IO is flushed before exiting when printing `--help`.
+
+## @backstage/create-app@0.4.29-next.2
+
+### Patch Changes
+
+- f281ad17c0: Adds the ability to define the Backstage app name using a `BACKSTAGE_APP_NAME`
+ environment variable when running `create-app`.
+
+## @backstage/dev-utils@1.0.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/app-defaults@1.0.4-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
+## @backstage/integration@1.2.2-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+## @backstage/integration-react@1.1.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/theme@0.2.16-next.1
+
+### Patch Changes
+
+- ff4f56eb49: **DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release
+
+ The `genPageTheme` function now includes an optional options object with an optional `fontColor` which defaults to white if not provided.
+
+## @backstage/plugin-adr@0.1.2-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
+## @backstage/plugin-airbrake@0.3.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/dev-utils@1.0.4-next.2
+
+## @backstage/plugin-allure@0.1.23-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-analytics-module-ga@0.1.18-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-apache-airflow@0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+
+## @backstage/plugin-api-docs@0.8.7-next.2
+
+### Patch Changes
+
+- a274fe38b9: Add hidden title column to catalog and API table to enable filtering by title.
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-app-backend@0.3.34-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.2
+
+## @backstage/plugin-auth-backend@0.15.0-next.2
+
+### Patch Changes
+
+- 8e03db907a: Auth provider now also export createAuthProviderIntegration
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+
+## @backstage/plugin-azure-devops@0.1.23-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-badges@0.2.31-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-badges-backend@0.1.28-next.2
+
+### Patch Changes
+
+- 58fd5ee9d5: Add missing installation instructions
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+
+## @backstage/plugin-bazaar@0.1.22-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/cli@0.18.0-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-bazaar-backend@0.1.18-next.1
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/backend-test-utils@0.1.26-next.2
+
+## @backstage/plugin-bitrise@0.1.34-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-catalog-backend@1.2.1-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/plugin-catalog-backend-module-openapi@0.1.0-next.1
+
+### Patch Changes
+
+- 4881dc4c84: Updated dependency `openapi-types` to `^12.0.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/plugin-catalog-backend@1.2.1-next.2
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/plugin-catalog-graph@0.2.19-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-catalog-import@0.8.10-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
+## @backstage/plugin-catalog-react@1.1.2-next.2
+
+### Patch Changes
+
+- be26d95141: Added new `EntityProcessingStatusPicker` that will filter for entities with orphans and/or errors.
+
+ If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this:
+
+ ```diff
+ ...
+ import {
+ CatalogFilterLayout,
+ EntityTypePicker,
+ UserListPicker,
+ EntityTagPicker
+ + EntityProcessingStatusPicker,
+ } from '@backstage/plugin-catalog-react';
+ ...
+ export const CustomCatalogPage = ({
+ columns,
+ actions,
+ initiallySelectedFilter = 'owned',
+ }: CatalogPageProps) => {
+ return (
+ ...
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ ...
+ };
+ ```
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/plugin-circleci@0.3.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-cloudbuild@0.3.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-code-climate@0.1.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-code-coverage@0.1.34-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-code-coverage-backend@0.1.32-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/plugin-codescene@0.1.2-next.2
+
+### Patch Changes
+
+- 15201b1032: Updated dependency `rc-progress` to `3.4.0`.
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-config-schema@0.1.30-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-cost-insights@0.11.29-next.2
+
+### Patch Changes
+
+- 3e032a5de2: Move cost-insights data specific API types (non react) into an @backstage/plugin-cost-insights-common
+ isomorphic package. This allows these types to be shared in any backend packages or other cost-insight
+ modules.
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/plugin-cost-insights-common@0.1.0-next.0
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-dynatrace@0.1.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-explore@0.3.38-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-firehydrant@0.1.24-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-fossa@0.2.39-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-gcalendar@0.3.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-gcp-projects@0.3.26-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-git-release-manager@0.3.20-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/plugin-github-actions@0.5.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-github-deployments@0.1.38-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
+## @backstage/plugin-github-pull-requests-board@0.1.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-gitops-profiles@0.3.25-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-gocd@0.1.13-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-graphiql@0.2.39-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-home@0.4.23-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/plugin-stack-overflow@0.1.3-next.2
+
+## @backstage/plugin-ilert@0.1.33-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-jenkins@0.7.6-next.2
+
+### Patch Changes
+
+- 8747824221: feature: added support for multiple branches to the `JenkinsApi`
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-jenkins-backend@0.1.24-next.2
+
+### Patch Changes
+
+- 8747824221: feature: added support for multiple branches to the `JenkinsApi`
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+
+## @backstage/plugin-kafka@0.3.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-kafka-backend@0.2.27-next.2
+
+### Patch Changes
+
+- 8751667541: Updated dependency `kafkajs` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+
+## @backstage/plugin-kubernetes@0.6.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/plugin-kubernetes-common@0.4.0-next.1
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-kubernetes-backend@0.7.0-next.2
+
+### Patch Changes
+
+- 60e5f9fe68: Fixed the lack of `limitranges` as part of the Default Objects to fetch from the kubernetes api
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.4.0-next.1
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+
+## @backstage/plugin-kubernetes-common@0.4.0-next.1
+
+### Patch Changes
+
+- 60e5f9fe68: Fixed the lack of `limitranges` as part of the Default Objects to fetch from the kubernetes api
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+
+## @backstage/plugin-lighthouse@0.3.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-newrelic@0.3.25-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-newrelic-dashboard@0.1.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-org@0.5.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-pagerduty@0.5.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-periskop@0.1.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-rollbar@0.4.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-search@0.9.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-search-backend-module-pg@0.3.5-next.2
+
+### Patch Changes
+
+- 423e3d8e95: **DEPRECATED**: `PgSearchEngine` static `from` has been deprecated and will be removed in a future release. Use static `fromConfig` method to instantiate.
+
+ Added support for highlighting matched terms in search result data
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.2
+
+## @backstage/plugin-search-react@0.2.2-next.2
+
+### Patch Changes
+
+- 60408ca9d4: Fix search pagination to reset page cursor also when a term is cleared.
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-sentry@0.3.45-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-shortcuts@0.2.8-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-sonarqube@0.3.7-next.2
+
+### Patch Changes
+
+- 15201b1032: Updated dependency `rc-progress` to `3.4.0`.
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-splunk-on-call@0.3.31-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-stack-overflow@0.1.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-home@0.4.23-next.2
+
+## @backstage/plugin-tech-insights@0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-tech-radar@0.5.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-techdocs@1.2.1-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- 7739141ab2: Fix: When docs are shown in an entity page under the docs tab the sidebars start overlapping with the header and tabs in the page when you scroll the documentation content.
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+ - @backstage/plugin-techdocs-react@1.0.2-next.1
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-techdocs@1.2.1-next.2
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/integration-react@1.1.2-next.2
+ - @backstage/plugin-techdocs-react@1.0.2-next.1
+
+## @backstage/plugin-techdocs-backend@1.2.0-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/plugin-techdocs-node@1.2.0-next.2
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+ - @backstage/plugin-techdocs-react@1.0.2-next.1
+
+## @backstage/plugin-techdocs-node@1.2.0-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/integration@1.2.2-next.2
+
+## @backstage/plugin-techdocs-react@1.0.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+
+## @backstage/plugin-todo@0.2.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-user-settings@0.4.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## @backstage/plugin-vault@0.1.1-next.2
+
+### Patch Changes
+
+- 7ee4abdcc9: Added a path notion in addition to secret name to allow to differentiate secrets in sub-paths
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
+## @backstage/plugin-vault-backend@0.2.0-next.2
+
+### Patch Changes
+
+- 7ee4abdcc9: Added a path notion in addition to secret name to allow to differentiate secrets in sub-paths
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/backend-tasks@0.3.3-next.2
+ - @backstage/backend-test-utils@0.1.26-next.2
+
+## @backstage/plugin-xcmetrics@0.2.27-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
+## example-app@0.2.73-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-cost-insights@0.11.29-next.2
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/plugin-scaffolder@1.4.0-next.2
+ - @backstage/plugin-jenkins@0.7.6-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-import@0.8.10-next.2
+ - @backstage/plugin-techdocs@1.2.1-next.2
+ - @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.2
+ - @backstage/plugin-api-docs@0.8.7-next.2
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/cli@0.18.0-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/app-defaults@1.0.4-next.2
+ - @backstage/integration-react@1.1.2-next.2
+ - @backstage/plugin-airbrake@0.3.7-next.2
+ - @backstage/plugin-apache-airflow@0.2.0-next.2
+ - @backstage/plugin-azure-devops@0.1.23-next.2
+ - @backstage/plugin-badges@0.2.31-next.2
+ - @backstage/plugin-catalog-graph@0.2.19-next.2
+ - @backstage/plugin-circleci@0.3.7-next.2
+ - @backstage/plugin-cloudbuild@0.3.7-next.2
+ - @backstage/plugin-code-coverage@0.1.34-next.2
+ - @backstage/plugin-dynatrace@0.1.1-next.2
+ - @backstage/plugin-explore@0.3.38-next.2
+ - @backstage/plugin-gcalendar@0.3.3-next.2
+ - @backstage/plugin-gcp-projects@0.3.26-next.2
+ - @backstage/plugin-github-actions@0.5.7-next.2
+ - @backstage/plugin-gocd@0.1.13-next.2
+ - @backstage/plugin-graphiql@0.2.39-next.2
+ - @backstage/plugin-home@0.4.23-next.2
+ - @backstage/plugin-kafka@0.3.7-next.2
+ - @backstage/plugin-kubernetes@0.6.7-next.2
+ - @backstage/plugin-lighthouse@0.3.7-next.2
+ - @backstage/plugin-newrelic@0.3.25-next.2
+ - @backstage/plugin-newrelic-dashboard@0.1.15-next.2
+ - @backstage/plugin-org@0.5.7-next.2
+ - @backstage/plugin-pagerduty@0.5.0-next.2
+ - @backstage/plugin-rollbar@0.4.7-next.2
+ - @backstage/plugin-search@0.9.1-next.2
+ - @backstage/plugin-sentry@0.3.45-next.2
+ - @backstage/plugin-shortcuts@0.2.8-next.2
+ - @backstage/plugin-stack-overflow@0.1.3-next.2
+ - @backstage/plugin-tech-insights@0.2.3-next.2
+ - @backstage/plugin-tech-radar@0.5.14-next.2
+ - @backstage/plugin-techdocs-react@1.0.2-next.1
+ - @backstage/plugin-todo@0.2.9-next.2
+ - @backstage/plugin-user-settings@0.4.6-next.2
+
+## example-backend@0.2.73-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-backend@0.7.0-next.2
+ - @backstage/plugin-tech-insights-backend@0.5.0-next.2
+ - @backstage/plugin-jenkins-backend@0.1.24-next.2
+ - @backstage/plugin-search-backend-module-pg@0.3.5-next.2
+ - @backstage/plugin-scaffolder-backend@1.4.0-next.2
+ - @backstage/plugin-auth-backend@0.15.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-kafka-backend@0.2.27-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/backend-tasks@0.3.3-next.2
+ - @backstage/plugin-app-backend@0.3.34-next.2
+ - @backstage/plugin-catalog-backend@1.2.1-next.2
+ - @backstage/plugin-code-coverage-backend@0.1.32-next.2
+ - @backstage/plugin-techdocs-backend@1.2.0-next.2
+ - @backstage/plugin-badges-backend@0.1.28-next.2
+ - @backstage/integration@1.2.2-next.2
+ - example-app@0.2.73-next.2
+
+## techdocs-cli-embedded-app@0.2.72-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-techdocs@1.2.1-next.2
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/cli@0.18.0-next.2
+ - @backstage/app-defaults@1.0.4-next.2
+ - @backstage/integration-react@1.1.2-next.2
+ - @backstage/plugin-techdocs-react@1.0.2-next.1
+
+## @internal/plugin-todo-list@1.0.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
diff --git a/microsite/data/on-demand/20211117-01.yaml b/microsite/data/on-demand/20211117-1.yaml
similarity index 100%
rename from microsite/data/on-demand/20211117-01.yaml
rename to microsite/data/on-demand/20211117-1.yaml
diff --git a/microsite/data/on-demand/20211118-01.yaml b/microsite/data/on-demand/20211118-1.yaml
similarity index 100%
rename from microsite/data/on-demand/20211118-01.yaml
rename to microsite/data/on-demand/20211118-1.yaml
diff --git a/microsite/data/on-demand/20211215-01.yaml b/microsite/data/on-demand/20211215-1.yaml
similarity index 100%
rename from microsite/data/on-demand/20211215-01.yaml
rename to microsite/data/on-demand/20211215-1.yaml
diff --git a/microsite/data/on-demand/20211216-01.yaml b/microsite/data/on-demand/20211216-1.yaml
similarity index 100%
rename from microsite/data/on-demand/20211216-01.yaml
rename to microsite/data/on-demand/20211216-1.yaml
diff --git a/microsite/data/on-demand/20220216-01.yaml b/microsite/data/on-demand/20220216-1.yaml
similarity index 100%
rename from microsite/data/on-demand/20220216-01.yaml
rename to microsite/data/on-demand/20220216-1.yaml
diff --git a/microsite/data/on-demand/20220223-01.yaml b/microsite/data/on-demand/20220223-1.yaml
similarity index 100%
rename from microsite/data/on-demand/20220223-01.yaml
rename to microsite/data/on-demand/20220223-1.yaml
diff --git a/microsite/data/on-demand/20220518-01.yaml b/microsite/data/on-demand/20220518-1.yaml
similarity index 100%
rename from microsite/data/on-demand/20220518-01.yaml
rename to microsite/data/on-demand/20220518-1.yaml
diff --git a/microsite/data/on-demand/20220525.yaml b/microsite/data/on-demand/20220525-1.yaml
similarity index 100%
rename from microsite/data/on-demand/20220525.yaml
rename to microsite/data/on-demand/20220525-1.yaml
diff --git a/microsite/data/on-demand/20220615-01.yaml b/microsite/data/on-demand/20220615-1.yaml
similarity index 97%
rename from microsite/data/on-demand/20220615-01.yaml
rename to microsite/data/on-demand/20220615-1.yaml
index 8ac660a71c..fb296dd6ce 100644
--- a/microsite/data/on-demand/20220615-01.yaml
+++ b/microsite/data/on-demand/20220615-1.yaml
@@ -1,7 +1,7 @@
---
title: Adopters Community Sessions
date: June 15, 2022
-category: Upcoming
+category: Meetup
description: Adopters Community Session ✨. It's the monthly meetup where we all come together to listen to the latest maintainer updates, learn from each other about adopting, share exciting new demos or discuss any relevant topic like developer effectiveness, developer experience, developer portals, etc.
youtubeUrl: https://youtu.be/aKZnjnE5Wy8
youtubeImgUrl: https://backstage.io/img/b-sessions.png
diff --git a/microsite/data/on-demand/20220622-1.yaml b/microsite/data/on-demand/20220622-1.yaml
index 0bbd53525a..27634609cb 100644
--- a/microsite/data/on-demand/20220622-1.yaml
+++ b/microsite/data/on-demand/20220622-1.yaml
@@ -1,9 +1,9 @@
---
title: Contributor Community Sessions
date: June 22, 2022
-category: Upcoming
+category: Meetup
description: Join the maintainers and contributors for the Contributor Community Sessions
-youtubeUrl: https://youtu.be/aKZnjnE5Wy8
+youtubeUrl: https://youtu.be/E-jWqWXBxUY
youtubeImgUrl: https://backstage.io/img/b-sessions.png
rsvpUrl: https://calendar.google.com/calendar/embed?src=c_qup9gbhn9sqpuao6trttd8mk5s@group.calendar.google.com
eventUrl: https://github.com/backstage/community/issues/49
diff --git a/microsite/data/on-demand/20220720-1.yaml b/microsite/data/on-demand/20220720-1.yaml
new file mode 100644
index 0000000000..a1f51859f4
--- /dev/null
+++ b/microsite/data/on-demand/20220720-1.yaml
@@ -0,0 +1,9 @@
+---
+title: Adopters Community Sessions
+date: July 20, 2022
+category: Upcoming
+description: Adopters Community Session ✨. It's the monthly meetup where we all come together to listen to the latest maintainer updates, learn from each other about adopting, share exciting new demos or discuss any relevant topic like developer effectiveness, developer experience, developer portals, etc.
+youtubeUrl: https://youtu.be/4VFNlPxWcx8
+youtubeImgUrl: https://backstage.io/img/b-sessions.png
+rsvpUrl: https://calendar.google.com/calendar/embed?src=c_qup9gbhn9sqpuao6trttd8mk5s@group.calendar.google.com
+eventUrl: https://github.com/backstage/community/issues/52
diff --git a/microsite/data/on-demand/20220727-1.yaml b/microsite/data/on-demand/20220727-1.yaml
new file mode 100644
index 0000000000..5f7712596f
--- /dev/null
+++ b/microsite/data/on-demand/20220727-1.yaml
@@ -0,0 +1,9 @@
+---
+title: Contributor Community Sessions
+date: July 27, 2022
+category: Upcoming
+description: Join the maintainers and contributors for the Contributor Community Sessions
+youtubeUrl: https://youtu.be/4VFNlPxWcx8
+youtubeImgUrl: https://backstage.io/img/b-sessions.png
+rsvpUrl: https://calendar.google.com/calendar/embed?src=c_qup9gbhn9sqpuao6trttd8mk5s@group.calendar.google.com
+eventUrl: https://github.com/backstage/community/issues/52
diff --git a/microsite/pages/en/live.js b/microsite/pages/en/live.js
index 062af419fc..f2ebd4bb1d 100644
--- a/microsite/pages/en/live.js
+++ b/microsite/pages/en/live.js
@@ -34,7 +34,7 @@ const Background = props => {
diff --git a/package.json b/package.json
index 89a49c11fd..9f219cfa11 100644
--- a/package.json
+++ b/package.json
@@ -49,7 +49,7 @@
"@types/react": "^17",
"@types/react-dom": "^17"
},
- "version": "1.4.0-next.1",
+ "version": "1.4.0-next.2",
"dependencies": {
"@manypkg/get-packages": "^1.1.3",
"@microsoft/api-documenter": "^7.17.11",
diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md
index 3da536ef7f..2786d4a5e4 100644
--- a/packages/app-defaults/CHANGELOG.md
+++ b/packages/app-defaults/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/app-defaults
+## 1.0.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
## 1.0.4-next.1
### Patch Changes
diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json
index 82534354a0..e67af42404 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.4-next.1",
+ "version": "1.0.4-next.2",
"private": false,
"publishConfig": {
"access": "public",
@@ -33,11 +33,11 @@
"start": "backstage-cli package start"
},
"dependencies": {
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
"@backstage/core-plugin-api": "^1.0.3",
"@backstage/plugin-permission-react": "^0.4.3-next.0",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"react-router-dom": "6.0.0-beta.0"
@@ -46,7 +46,7 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md
index a4cc7735dd..0f28d87448 100644
--- a/packages/app/CHANGELOG.md
+++ b/packages/app/CHANGELOG.md
@@ -1,5 +1,60 @@
# example-app
+## 0.2.73-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-cost-insights@0.11.29-next.2
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/plugin-scaffolder@1.4.0-next.2
+ - @backstage/plugin-jenkins@0.7.6-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-import@0.8.10-next.2
+ - @backstage/plugin-techdocs@1.2.1-next.2
+ - @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.2
+ - @backstage/plugin-api-docs@0.8.7-next.2
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/cli@0.18.0-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/app-defaults@1.0.4-next.2
+ - @backstage/integration-react@1.1.2-next.2
+ - @backstage/plugin-airbrake@0.3.7-next.2
+ - @backstage/plugin-apache-airflow@0.2.0-next.2
+ - @backstage/plugin-azure-devops@0.1.23-next.2
+ - @backstage/plugin-badges@0.2.31-next.2
+ - @backstage/plugin-catalog-graph@0.2.19-next.2
+ - @backstage/plugin-circleci@0.3.7-next.2
+ - @backstage/plugin-cloudbuild@0.3.7-next.2
+ - @backstage/plugin-code-coverage@0.1.34-next.2
+ - @backstage/plugin-dynatrace@0.1.1-next.2
+ - @backstage/plugin-explore@0.3.38-next.2
+ - @backstage/plugin-gcalendar@0.3.3-next.2
+ - @backstage/plugin-gcp-projects@0.3.26-next.2
+ - @backstage/plugin-github-actions@0.5.7-next.2
+ - @backstage/plugin-gocd@0.1.13-next.2
+ - @backstage/plugin-graphiql@0.2.39-next.2
+ - @backstage/plugin-home@0.4.23-next.2
+ - @backstage/plugin-kafka@0.3.7-next.2
+ - @backstage/plugin-kubernetes@0.6.7-next.2
+ - @backstage/plugin-lighthouse@0.3.7-next.2
+ - @backstage/plugin-newrelic@0.3.25-next.2
+ - @backstage/plugin-newrelic-dashboard@0.1.15-next.2
+ - @backstage/plugin-org@0.5.7-next.2
+ - @backstage/plugin-pagerduty@0.5.0-next.2
+ - @backstage/plugin-rollbar@0.4.7-next.2
+ - @backstage/plugin-search@0.9.1-next.2
+ - @backstage/plugin-sentry@0.3.45-next.2
+ - @backstage/plugin-shortcuts@0.2.8-next.2
+ - @backstage/plugin-stack-overflow@0.1.3-next.2
+ - @backstage/plugin-tech-insights@0.2.3-next.2
+ - @backstage/plugin-tech-radar@0.5.14-next.2
+ - @backstage/plugin-techdocs-react@1.0.2-next.1
+ - @backstage/plugin-todo@0.2.9-next.2
+ - @backstage/plugin-user-settings@0.4.6-next.2
+
## 0.2.73-next.1
### Patch Changes
diff --git a/packages/app/package.json b/packages/app/package.json
index 4ba50b13c7..c114d79250 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,67 +1,67 @@
{
"name": "example-app",
- "version": "0.2.73-next.1",
+ "version": "0.2.73-next.2",
"private": true,
"backstage": {
"role": "frontend"
},
"bundled": true,
"dependencies": {
- "@backstage/app-defaults": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/app-defaults": "^1.0.4-next.2",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/config": "^1.0.1",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/integration-react": "^1.1.2-next.1",
- "@backstage/plugin-airbrake": "^0.3.7-next.1",
- "@backstage/plugin-api-docs": "^0.8.7-next.1",
- "@backstage/plugin-azure-devops": "^0.1.23-next.1",
- "@backstage/plugin-apache-airflow": "^0.2.0-next.1",
- "@backstage/plugin-badges": "^0.2.31-next.1",
- "@backstage/plugin-catalog": "^1.3.1-next.1",
+ "@backstage/integration-react": "^1.1.2-next.2",
+ "@backstage/plugin-airbrake": "^0.3.7-next.2",
+ "@backstage/plugin-api-docs": "^0.8.7-next.2",
+ "@backstage/plugin-azure-devops": "^0.1.23-next.2",
+ "@backstage/plugin-apache-airflow": "^0.2.0-next.2",
+ "@backstage/plugin-badges": "^0.2.31-next.2",
+ "@backstage/plugin-catalog": "^1.4.0-next.2",
"@backstage/plugin-catalog-common": "^1.0.4-next.0",
- "@backstage/plugin-catalog-graph": "^0.2.19-next.1",
- "@backstage/plugin-catalog-import": "^0.8.10-next.1",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
- "@backstage/plugin-circleci": "^0.3.7-next.1",
- "@backstage/plugin-cloudbuild": "^0.3.7-next.1",
- "@backstage/plugin-code-coverage": "^0.1.34-next.1",
- "@backstage/plugin-cost-insights": "^0.11.29-next.1",
- "@backstage/plugin-dynatrace": "^0.1.1-next.1",
- "@backstage/plugin-explore": "^0.3.38-next.1",
- "@backstage/plugin-gcalendar": "^0.3.3-next.1",
- "@backstage/plugin-gcp-projects": "^0.3.26-next.1",
- "@backstage/plugin-github-actions": "^0.5.7-next.1",
- "@backstage/plugin-gocd": "^0.1.13-next.1",
- "@backstage/plugin-graphiql": "^0.2.39-next.1",
- "@backstage/plugin-home": "^0.4.23-next.1",
- "@backstage/plugin-jenkins": "^0.7.6-next.1",
- "@backstage/plugin-kafka": "^0.3.7-next.1",
- "@backstage/plugin-kubernetes": "^0.6.7-next.1",
- "@backstage/plugin-lighthouse": "^0.3.7-next.1",
- "@backstage/plugin-newrelic": "^0.3.25-next.1",
- "@backstage/plugin-newrelic-dashboard": "^0.1.15-next.1",
- "@backstage/plugin-org": "^0.5.7-next.1",
- "@backstage/plugin-pagerduty": "0.5.0-next.1",
+ "@backstage/plugin-catalog-graph": "^0.2.19-next.2",
+ "@backstage/plugin-catalog-import": "^0.8.10-next.2",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
+ "@backstage/plugin-circleci": "^0.3.7-next.2",
+ "@backstage/plugin-cloudbuild": "^0.3.7-next.2",
+ "@backstage/plugin-code-coverage": "^0.1.34-next.2",
+ "@backstage/plugin-cost-insights": "^0.11.29-next.2",
+ "@backstage/plugin-dynatrace": "^0.1.1-next.2",
+ "@backstage/plugin-explore": "^0.3.38-next.2",
+ "@backstage/plugin-gcalendar": "^0.3.3-next.2",
+ "@backstage/plugin-gcp-projects": "^0.3.26-next.2",
+ "@backstage/plugin-github-actions": "^0.5.7-next.2",
+ "@backstage/plugin-gocd": "^0.1.13-next.2",
+ "@backstage/plugin-graphiql": "^0.2.39-next.2",
+ "@backstage/plugin-home": "^0.4.23-next.2",
+ "@backstage/plugin-jenkins": "^0.7.6-next.2",
+ "@backstage/plugin-kafka": "^0.3.7-next.2",
+ "@backstage/plugin-kubernetes": "^0.6.7-next.2",
+ "@backstage/plugin-lighthouse": "^0.3.7-next.2",
+ "@backstage/plugin-newrelic": "^0.3.25-next.2",
+ "@backstage/plugin-newrelic-dashboard": "^0.1.15-next.2",
+ "@backstage/plugin-org": "^0.5.7-next.2",
+ "@backstage/plugin-pagerduty": "0.5.0-next.2",
"@backstage/plugin-permission-react": "^0.4.3-next.0",
- "@backstage/plugin-rollbar": "^0.4.7-next.1",
- "@backstage/plugin-scaffolder": "^1.4.0-next.1",
- "@backstage/plugin-search": "^0.9.1-next.1",
- "@backstage/plugin-search-react": "^0.2.2-next.1",
+ "@backstage/plugin-rollbar": "^0.4.7-next.2",
+ "@backstage/plugin-scaffolder": "^1.4.0-next.2",
+ "@backstage/plugin-search": "^0.9.1-next.2",
+ "@backstage/plugin-search-react": "^0.2.2-next.2",
"@backstage/plugin-search-common": "^0.3.6-next.0",
- "@backstage/plugin-sentry": "^0.3.45-next.1",
- "@backstage/plugin-shortcuts": "^0.2.8-next.1",
- "@backstage/plugin-stack-overflow": "^0.1.3-next.1",
- "@backstage/plugin-tech-radar": "^0.5.14-next.1",
- "@backstage/plugin-techdocs": "^1.2.1-next.1",
- "@backstage/plugin-techdocs-react": "^1.0.2-next.0",
- "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.2-next.1",
- "@backstage/plugin-todo": "^0.2.9-next.1",
- "@backstage/plugin-user-settings": "^0.4.6-next.1",
- "@backstage/plugin-tech-insights": "^0.2.3-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-sentry": "^0.3.45-next.2",
+ "@backstage/plugin-shortcuts": "^0.2.8-next.2",
+ "@backstage/plugin-stack-overflow": "^0.1.3-next.2",
+ "@backstage/plugin-tech-radar": "^0.5.14-next.2",
+ "@backstage/plugin-techdocs": "^1.2.1-next.2",
+ "@backstage/plugin-techdocs-react": "^1.0.2-next.1",
+ "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.2-next.2",
+ "@backstage/plugin-todo": "^0.2.9-next.2",
+ "@backstage/plugin-user-settings": "^0.4.6-next.2",
+ "@backstage/plugin-tech-insights": "^0.2.3-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx
index 1958aabd2e..155dc071ff 100644
--- a/packages/app/src/components/catalog/EntityPage.tsx
+++ b/packages/app/src/components/catalog/EntityPage.tsx
@@ -167,7 +167,12 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => {
return (
<>
-
+
{props.children}
{
+ const catalogApi = new CatalogClient({ discoveryApi: env.discovery });
const { router } = await KubernetesBuilder.createBuilder({
logger: env.logger,
config: env.config,
+ catalogApi,
}).build();
return router;
}
diff --git a/packages/backend/src/plugins/search.ts b/packages/backend/src/plugins/search.ts
index a0ea83ab61..c478ecdd05 100644
--- a/packages/backend/src/plugins/search.ts
+++ b/packages/backend/src/plugins/search.ts
@@ -39,7 +39,9 @@ async function createSearchEngine(
}
if (await PgSearchEngine.supported(env.database)) {
- return await PgSearchEngine.from({ database: env.database });
+ return await PgSearchEngine.fromConfig(env.config, {
+ database: env.database,
+ });
}
return new LunrSearchEngine({ logger: env.logger });
diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json
index 05075d14dc..3fbf662615 100644
--- a/packages/catalog-client/package.json
+++ b/packages/catalog-client/package.json
@@ -40,7 +40,7 @@
"devDependencies": {
"@backstage/cli": "^0.18.0-next.1",
"@types/jest": "^26.0.7",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md
index 78f7a1207c..910fc92cd2 100644
--- a/packages/catalog-model/CHANGELOG.md
+++ b/packages/catalog-model/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/catalog-model
+## 1.1.0-next.2
+
+### Minor Changes
+
+- 4cc81372f8: Introduced `GroupDefaultParentEntityPolicy` to set a default group entity parent.
+
## 1.1.0-next.1
### Patch Changes
diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json
index 91d3f74a66..a58fdcf4d5 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.0-next.1",
+ "version": "1.1.0-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -43,7 +43,7 @@
"uuid": "^8.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@types/jest": "^26.0.7",
"@types/json-schema": "^7.0.5",
"@types/lodash": "^4.14.151",
diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md
index 227ad4b772..b4dbb1cdc5 100644
--- a/packages/cli/CHANGELOG.md
+++ b/packages/cli/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/cli
+## 0.18.0-next.2
+
+### Patch Changes
+
+- f6b6fb7165: The `test` command now ensures that all IO is flushed before exiting when printing `--help`.
+
## 0.18.0-next.1
### Minor Changes
diff --git a/packages/cli/cli-report.md b/packages/cli/cli-report.md
new file mode 100644
index 0000000000..8c678d885e
--- /dev/null
+++ b/packages/cli/cli-report.md
@@ -0,0 +1,563 @@
+## CLI Report file for "@backstage/cli"
+
+> Do not edit this file. It is a report generated by `yarn build:api-reports`
+
+### `backstage-cli`
+
+```
+Usage: backstage-cli [options] [command]
+
+Options:
+ -V, --version
+ -h, --help
+
+Commands:
+ create [options]
+ create-plugin [options]
+ plugin:diff [options]
+ test
+ config:docs [options]
+ config:print [options]
+ config:check [options]
+ config:schema [options]
+ repo [command]
+ package [command]
+ migrate [command]
+ versions:bump [options]
+ versions:check [options]
+ clean
+ build-workspace [packages...]
+ create-github-app
+ info
+ help [command]
+```
+
+### `backstage-cli build-workspace`
+
+```
+Usage: backstage-cli build-workspace [options] [packages...]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli clean`
+
+```
+Usage: backstage-cli clean [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli config:check`
+
+```
+Usage: backstage-cli config:check [options]
+
+Options:
+ --package
+ --lax
+ --frontend
+ --deprecated
+ --config
+ -h, --help
+```
+
+### `backstage-cli config:docs`
+
+```
+Usage: backstage-cli config:docs [options]
+
+Options:
+ --package
+ -h, --help
+```
+
+### `backstage-cli config:print`
+
+```
+Usage: backstage-cli config:print [options]
+
+Options:
+ --package
+ --lax
+ --frontend
+ --with-secrets
+ --format
+ --config
+ -h, --help
+```
+
+### `backstage-cli config:schema`
+
+```
+Usage: backstage-cli config:schema [options]
+
+Options:
+ --package
+ --format
+ -h, --help
+```
+
+### `backstage-cli create`
+
+```
+Usage: backstage-cli create [options]
+
+Options:
+ --select
+ --option =
+ --scope
+ --npm-registry
+ --no-private
+ -h, --help
+```
+
+### `backstage-cli create-github-app`
+
+```
+Usage: backstage-cli create-github-app [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli create-plugin`
+
+```
+Usage: backstage-cli create-plugin [options]
+
+Options:
+ --backend
+ --scope
+ --npm-registry
+ --no-private
+ -h, --help
+```
+
+### `backstage-cli info`
+
+```
+Usage: backstage-cli info [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli migrate`
+
+```
+Usage: backstage-cli migrate [options] [command] [command]
+
+Options:
+ -h, --help
+
+Commands:
+ package-roles
+ package-scripts
+ package-lint-configs
+ help [command]
+```
+
+### `backstage-cli migrate package-lint-configs`
+
+```
+Usage: backstage-cli migrate package-lint-configs [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli migrate package-roles`
+
+```
+Usage: backstage-cli migrate package-roles [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli migrate package-scripts`
+
+```
+Usage: backstage-cli migrate package-scripts [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli package`
+
+```
+Usage: backstage-cli package [options] [command] [command]
+
+Options:
+ -h, --help
+
+Commands:
+ start [options]
+ build [options]
+ lint [options] [directories...]
+ test
+ clean
+ prepack
+ postpack
+ help [command]
+```
+
+### `backstage-cli package build`
+
+```
+Usage: backstage-cli package build [options]
+
+Options:
+ --role
+ --minify
+ --experimental-type-build
+ --skip-build-dependencies
+ --stats
+ --config
+ -h, --help
+```
+
+### `backstage-cli package clean`
+
+```
+Usage: backstage-cli package clean [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli package lint`
+
+```
+Usage: backstage-cli package lint [options] [directories...]
+
+Options:
+ --format
+ --fix
+ -h, --help
+```
+
+### `backstage-cli package postpack`
+
+```
+Usage: backstage-cli package postpack [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli package prepack`
+
+```
+Usage: backstage-cli package prepack [options]
+
+Options:
+ -h, --help
+```
+
+### `backstage-cli package start`
+
+```
+Usage: backstage-cli package start [options]
+
+Options:
+ --config
+ --role
+ --check
+ --inspect
+ --inspect-brk
+ -h, --help
+```
+
+### `backstage-cli package test`
+
+```
+Usage: backstage-cli [--config=] [TestPathPattern]
+
+Options:
+ -h, --help
+ -v, --version
+ --all
+ --automock
+ -b, --bail
+ --cache
+ --cacheDirectory
+ --changedFilesWithAncestor
+ --changedSince
+ --ci
+ --clearCache
+ --clearMocks
+ --collectCoverage
+ --collectCoverageFrom
+ --collectCoverageOnlyFrom
+ --color
+ --colors
+ -c, --config
+ --coverage
+ --coverageDirectory
+ --coveragePathIgnorePatterns
+ --coverageProvider
+ --coverageReporters
+ --coverageThreshold
+ --debug
+ --detectLeaks
+ --detectOpenHandles
+ --env
+ --errorOnDeprecated
+ -e, --expand
+ --filter
+ --findRelatedTests
+ --forceExit
+ --globalSetup
+ --globalTeardown
+ --globals
+ --haste
+ --init
+ --injectGlobals
+ --json
+ --lastCommit
+ --listTests
+ --logHeapUsage
+ --maxConcurrency
+ -w, --maxWorkers
+ --moduleDirectories
+ --moduleFileExtensions
+ --moduleNameMapper
+ --modulePathIgnorePatterns
+ --modulePaths
+ --noStackTrace
+ --notify
+ --notifyMode
+ -o, --onlyChanged
+ -f, --onlyFailures
+ --outputFile
+ --passWithNoTests
+ --preset
+ --prettierPath
+ --projects
+ --reporters
+ --resetMocks
+ --resetModules
+ --resolver
+ --restoreMocks
+ --rootDir
+ --roots
+ -i, --runInBand
+ --runTestsByPath
+ --runner
+ --selectProjects
+ --setupFiles
+ --setupFilesAfterEnv
+ --showConfig
+ --silent
+ --skipFilter
+ --snapshotSerializers
+ --testEnvironment
+ --testEnvironmentOptions
+ --testFailureExitCode
+ --testLocationInResults
+ --testMatch
+ -t, --testNamePattern
+ --testPathIgnorePatterns
+ --testPathPattern
+ --testRegex
+ --testResultsProcessor
+ --testRunner
+ --testSequencer
+ --testTimeout
+ --testURL
+ --timers
+ --transform
+ --transformIgnorePatterns
+ --unmockedModulePathPatterns
+ -u, --updateSnapshot
+ --useStderr
+ --verbose
+ --watch
+ --watchAll
+ --watchPathIgnorePatterns
+ --watchman
+```
+
+### `backstage-cli plugin:diff`
+
+```
+Usage: backstage-cli plugin:diff [options]
+
+Options:
+ --check
+ --yes
+ -h, --help
+```
+
+### `backstage-cli repo`
+
+```
+Usage: backstage-cli repo [options] [command] [command]
+
+Options:
+ -h, --help
+
+Commands:
+ build [options]
+ lint [options]
+ help [command]
+```
+
+### `backstage-cli repo build`
+
+```
+Usage: backstage-cli repo build [options]
+
+Options:
+ --all
+ --since
+ -h, --help
+```
+
+### `backstage-cli repo lint`
+
+```
+Usage: backstage-cli repo lint [options]
+
+Options:
+ --format
+ --since
+ --fix
+ -h, --help
+```
+
+### `backstage-cli test`
+
+```
+Usage: backstage-cli [--config=] [TestPathPattern]
+
+Options:
+ -h, --help
+ -v, --version
+ --all
+ --automock
+ -b, --bail
+ --cache
+ --cacheDirectory
+ --changedFilesWithAncestor
+ --changedSince
+ --ci
+ --clearCache
+ --clearMocks
+ --collectCoverage
+ --collectCoverageFrom
+ --collectCoverageOnlyFrom
+ --color
+ --colors
+ -c, --config
+ --coverage
+ --coverageDirectory
+ --coveragePathIgnorePatterns
+ --coverageProvider
+ --coverageReporters
+ --coverageThreshold
+ --debug
+ --detectLeaks
+ --detectOpenHandles
+ --env
+ --errorOnDeprecated
+ -e, --expand
+ --filter
+ --findRelatedTests
+ --forceExit
+ --globalSetup
+ --globalTeardown
+ --globals
+ --haste
+ --init
+ --injectGlobals
+ --json
+ --lastCommit
+ --listTests
+ --logHeapUsage
+ --maxConcurrency
+ -w, --maxWorkers
+ --moduleDirectories
+ --moduleFileExtensions
+ --moduleNameMapper
+ --modulePathIgnorePatterns
+ --modulePaths
+ --noStackTrace
+ --notify
+ --notifyMode
+ -o, --onlyChanged
+ -f, --onlyFailures
+ --outputFile
+ --passWithNoTests
+ --preset
+ --prettierPath
+ --projects
+ --reporters
+ --resetMocks
+ --resetModules
+ --resolver
+ --restoreMocks
+ --rootDir
+ --roots
+ -i, --runInBand
+ --runTestsByPath
+ --runner
+ --selectProjects
+ --setupFiles
+ --setupFilesAfterEnv
+ --showConfig
+ --silent
+ --skipFilter
+ --snapshotSerializers
+ --testEnvironment
+ --testEnvironmentOptions
+ --testFailureExitCode
+ --testLocationInResults
+ --testMatch
+ -t, --testNamePattern
+ --testPathIgnorePatterns
+ --testPathPattern
+ --testRegex
+ --testResultsProcessor
+ --testRunner
+ --testSequencer
+ --testTimeout
+ --testURL
+ --timers
+ --transform
+ --transformIgnorePatterns
+ --unmockedModulePathPatterns
+ -u, --updateSnapshot
+ --useStderr
+ --verbose
+ --watch
+ --watchAll
+ --watchPathIgnorePatterns
+ --watchman
+```
+
+### `backstage-cli versions:bump`
+
+```
+Usage: backstage-cli versions:bump [options]
+
+Options:
+ --pattern
+ --release
+ -h, --help
+```
+
+### `backstage-cli versions:check`
+
+```
+Usage: backstage-cli versions:check [options]
+
+Options:
+ --fix
+ -h, --help
+```
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 6653744a33..aead136ec6 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.18.0-next.1",
+ "version": "0.18.0-next.2",
"private": false,
"publishConfig": {
"access": "public"
@@ -126,14 +126,14 @@
"zod": "^3.11.6"
},
"devDependencies": {
- "@backstage/backend-common": "^0.14.1-next.1",
+ "@backstage/backend-common": "^0.14.1-next.2",
"@backstage/config": "^1.0.1",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/theme": "^0.2.16-next.1",
"@types/diff": "^5.0.0",
"@types/express": "^4.17.6",
"@types/fs-extra": "^9.0.1",
@@ -152,7 +152,7 @@
"@types/yarnpkg__lockfile": "^1.1.4",
"del": "^6.0.0",
"mock-fs": "^5.1.0",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"nodemon": "^2.0.2",
"ts-node": "^10.0.0"
},
diff --git a/packages/cli/src/commands/test.ts b/packages/cli/src/commands/test.ts
index f1bfcc356b..88769aec1a 100644
--- a/packages/cli/src/commands/test.ts
+++ b/packages/cli/src/commands/test.ts
@@ -78,6 +78,10 @@ export default async (_opts: OptionValues, cmd: Command) => {
process.env.TZ = 'UTC';
}
+ if (args.includes('--help')) {
+ (process.stdout as any)._handle.setBlocking(true);
+ }
+
// eslint-disable-next-line jest/no-jest-import
await require('jest').run(args);
};
diff --git a/packages/cli/templates/default-backend-plugin/package.json.hbs b/packages/cli/templates/default-backend-plugin/package.json.hbs
index 2416fd75cb..4e8ee254b9 100644
--- a/packages/cli/templates/default-backend-plugin/package.json.hbs
+++ b/packages/cli/templates/default-backend-plugin/package.json.hbs
@@ -41,7 +41,7 @@
"@backstage/cli": "{{versionQuery '@backstage/cli'}}",
"@types/supertest": "{{versionQuery '@types/supertest' '2.0.8'}}",
"supertest": "{{versionQuery 'supertest' '4.0.2'}}",
- "msw": "{{versionQuery 'msw' '0.42.0'}}"
+ "msw": "{{versionQuery 'msw' '0.43.0'}}"
},
"files": [
"dist"
diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs
index 34a0548b29..490f18d474 100644
--- a/packages/cli/templates/default-plugin/package.json.hbs
+++ b/packages/cli/templates/default-plugin/package.json.hbs
@@ -49,7 +49,7 @@
"@testing-library/user-event": "{{versionQuery '@testing-library/user-event' '14.0.0'}}",
"@types/jest": "{{versionQuery '@types/jest' '26.0.7'}}",
"@types/node": "{{versionQuery '@types/node' '16.11.26'}}",
- "msw": "{{versionQuery 'msw' '0.42.0'}}",
+ "msw": "{{versionQuery 'msw' '0.43.0'}}",
"cross-fetch": "{{versionQuery 'cross-fetch' '3.1.5'}}"
},
"files": [
diff --git a/packages/codemods/cli-report.md b/packages/codemods/cli-report.md
new file mode 100644
index 0000000000..57d2198141
--- /dev/null
+++ b/packages/codemods/cli-report.md
@@ -0,0 +1,61 @@
+## CLI Report file for "@backstage/codemods"
+
+> Do not edit this file. It is a report generated by `yarn build:api-reports`
+
+### `backstage-codemods`
+
+```
+Usage: backstage-codemods [options] [command]
+
+Options:
+ -V, --version
+ -h, --help
+
+Commands:
+ apply [target-dirs...]
+ list
+ help [command]
+```
+
+### `backstage-codemods apply`
+
+```
+Usage: backstage-codemods apply [options] [command] [target-dirs...]
+
+Options:
+ -h, --help
+
+Commands:
+ core-imports [options] [target-dirs...]
+ extension-names [options] [target-dirs...]
+ help [command]
+```
+
+### `backstage-codemods apply core-imports`
+
+```
+Usage: backstage-codemods apply core-imports [options] [target-dirs...]
+
+Options:
+ -d, --dry
+ -h, --help
+```
+
+### `backstage-codemods apply extension-names`
+
+```
+Usage: backstage-codemods apply extension-names [options] [target-dirs...]
+
+Options:
+ -d, --dry
+ -h, --help
+```
+
+### `backstage-codemods list`
+
+```
+Usage: backstage-codemods list [options]
+
+Options:
+ -h, --help
+```
diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json
index 3a02afde9b..3ca4b1455f 100644
--- a/packages/config-loader/package.json
+++ b/packages/config-loader/package.json
@@ -46,7 +46,7 @@
"json-schema-merge-allof": "^0.8.1",
"json-schema-traverse": "^1.0.0",
"node-fetch": "^2.6.7",
- "typescript-json-schema": "^0.53.0",
+ "typescript-json-schema": "^0.54.0",
"yaml": "^1.9.2",
"yup": "^0.32.9"
},
@@ -57,7 +57,7 @@
"@types/node": "^16.11.26",
"@types/yup": "^0.29.13",
"mock-fs": "^5.1.0",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json
index 624a9259e9..e7d530417a 100644
--- a/packages/core-app-api/package.json
+++ b/packages/core-app-api/package.json
@@ -59,7 +59,7 @@
"@types/node": "^16.11.26",
"@types/zen-observable": "^0.8.0",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md
index cf1c6305d4..46a44394b3 100644
--- a/packages/core-components/CHANGELOG.md
+++ b/packages/core-components/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/core-components
+## 0.10.0-next.2
+
+### Minor Changes
+
+- 32204fa794: Add `transformLinkUri` and `transformImageUri` to `MarkdownContent`
+
+### Patch Changes
+
+- b4b711bcc2: Fix the EntityLayout header style so that EntityContextMenu button can display in correct shape when user hover on it
+- 15201b1032: Updated dependency `rc-progress` to `3.4.0`.
+- 385389d23c: Updated to remove usage of the `bursts` object in the theme palette
+- Updated dependencies
+ - @backstage/theme@0.2.16-next.1
+
## 0.9.6-next.1
### Patch Changes
diff --git a/packages/core-components/package.json b/packages/core-components/package.json
index aeea26c17b..a6dff88333 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.9.6-next.1",
+ "version": "0.10.0-next.2",
"private": false,
"publishConfig": {
"access": "public",
@@ -36,7 +36,7 @@
"@backstage/config": "^1.0.1",
"@backstage/core-plugin-api": "^1.0.3",
"@backstage/errors": "^1.1.0-next.0",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/theme": "^0.2.16-next.1",
"@backstage/version-bridge": "^1.0.1",
"@material-table/core": "^3.1.0",
"@material-ui/core": "^4.12.2",
@@ -56,7 +56,7 @@
"pluralize": "^8.0.0",
"prop-types": "^15.7.2",
"qs": "^6.9.4",
- "rc-progress": "3.3.3",
+ "rc-progress": "3.4.0",
"react-helmet": "6.1.0",
"react-hook-form": "^7.12.2",
"react-markdown": "^8.0.0",
@@ -66,7 +66,7 @@
"react-syntax-highlighter": "^15.4.5",
"react-text-truncate": "^0.19.0",
"react-use": "^17.3.2",
- "@react-hookz/web": "^14.0.0",
+ "@react-hookz/web": "^15.0.0",
"react-virtualized-auto-sizer": "^1.0.6",
"react-window": "^1.8.6",
"remark-gfm": "^3.0.1",
@@ -80,7 +80,7 @@
},
"devDependencies": {
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -101,7 +101,7 @@
"@types/react-window": "^1.8.5",
"@types/zen-observable": "^0.8.0",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/packages/core-components/src/components/Link/Link.test.tsx b/packages/core-components/src/components/Link/Link.test.tsx
index 8c6ed54d76..5cfeaa4869 100644
--- a/packages/core-components/src/components/Link/Link.test.tsx
+++ b/packages/core-components/src/components/Link/Link.test.tsx
@@ -21,9 +21,11 @@ import {
TestApiProvider,
wrapInTestApp,
} from '@backstage/test-utils';
-import { analyticsApiRef } from '@backstage/core-plugin-api';
-import { isExternalUri, Link } from './Link';
+import { analyticsApiRef, configApiRef } from '@backstage/core-plugin-api';
+import { isExternalUri, Link, useResolvedPath } from './Link';
import { Route, Routes } from 'react-router';
+import { renderHook, WrapperComponent } from '@testing-library/react-hooks';
+import { ConfigReader } from '@backstage/config';
describe('', () => {
it('navigates using react-router', async () => {
@@ -103,6 +105,58 @@ describe('', () => {
});
});
+ describe('resolves a sub-path correctly', () => {
+ it('when it starts with base path', async () => {
+ const testString = 'This is test string';
+ const linkText = 'Navigate!';
+ const configApi = new ConfigReader({
+ app: { baseUrl: 'http://localhost:3000/example' },
+ });
+
+ const { getByText } = render(
+ wrapInTestApp(
+
+
+ {linkText}
+ {testString}
} />
+
+ ,
+ ),
+ );
+
+ expect(() => getByText(testString)).toThrow();
+ fireEvent.click(getByText(linkText));
+ await waitFor(() => {
+ expect(getByText(testString)).toBeInTheDocument();
+ });
+ });
+
+ it('when it does not start with base path', async () => {
+ const testString = 'This is test string';
+ const linkText = 'Navigate!';
+ const configApi = new ConfigReader({
+ app: { baseUrl: 'http://localhost:3000/example' },
+ });
+
+ const { getByText } = render(
+ wrapInTestApp(
+
+
+ {linkText}
+ {testString}} />
+
+ ,
+ ),
+ );
+
+ expect(() => getByText(testString)).toThrow();
+ fireEvent.click(getByText(linkText));
+ await waitFor(() => {
+ expect(getByText(testString)).toBeInTheDocument();
+ });
+ });
+ });
+
describe('isExternalUri', () => {
it.each([
[true, 'http://'],
@@ -128,4 +182,45 @@ describe('', () => {
expect(isExternalUri(uri)).toBe(expected);
});
});
+
+ describe('useResolvedPath', () => {
+ const wrapper: WrapperComponent<{}> = ({ children }) => {
+ const configApi = new ConfigReader({
+ app: { baseUrl: 'http://localhost:3000/example' },
+ });
+ return (
+
+ {children}
+
+ );
+ };
+
+ describe('concatenate base path', () => {
+ it('when uri is internal and does not start with base path', () => {
+ const path = '/catalog/default/component/artist-lookup';
+ const { result } = renderHook(() => useResolvedPath(path), {
+ wrapper,
+ });
+ expect(result.current).toBe('/example'.concat(path));
+ });
+ });
+
+ describe('does not concatenate base path', () => {
+ it('when uri is external', () => {
+ const path = 'https://stackoverflow.com/questions/1/example';
+ const { result } = renderHook(() => useResolvedPath(path), {
+ wrapper,
+ });
+ expect(result.current).toBe(path);
+ });
+
+ it('when uri already starts with base path', () => {
+ const path = '/example/catalog/default/component/artist-lookup';
+ const { result } = renderHook(() => useResolvedPath(path), {
+ wrapper,
+ });
+ expect(result.current).toBe(path);
+ });
+ });
+ });
});
diff --git a/packages/core-components/src/components/Link/Link.tsx b/packages/core-components/src/components/Link/Link.tsx
index 5809990b92..22b203d157 100644
--- a/packages/core-components/src/components/Link/Link.tsx
+++ b/packages/core-components/src/components/Link/Link.tsx
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-import { useAnalytics } from '@backstage/core-plugin-api';
+import { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api';
import classnames from 'classnames';
import MaterialLink, {
LinkProps as MaterialLinkProps,
@@ -25,6 +25,7 @@ import {
Link as RouterLink,
LinkProps as RouterLinkProps,
} from 'react-router-dom';
+import { trimEnd } from 'lodash';
const useStyles = makeStyles(
{
@@ -52,6 +53,45 @@ export type LinkProps = MaterialLinkProps &
noTrack?: boolean;
};
+/**
+ * Returns the app base url that could be empty if the Config API is not properly implemented.
+ * The only cases there would be no Config API are in tests and in storybook stories, and in those cases, it's unlikely that callers would rely on this subpath behavior.
+ */
+const useBaseUrl = () => {
+ try {
+ const config = useApi(configApiRef);
+ return config.getOptionalString('app.baseUrl');
+ } catch {
+ return undefined;
+ }
+};
+
+/**
+ * Get the app base path from the configured app baseUrl.
+ * The returned path does not have a trailing slash.
+ */
+const useBasePath = () => {
+ // baseUrl can be specified as just a path
+ const base = 'http://dummy.dev';
+ const url = useBaseUrl() ?? '/';
+ const { pathname } = new URL(url, base);
+ return trimEnd(pathname, '/');
+};
+
+export const useResolvedPath = (uri: LinkProps['to']) => {
+ let resolvedPath = String(uri);
+
+ const basePath = useBasePath();
+ const external = isExternalUri(resolvedPath);
+ const startsWithBasePath = resolvedPath.startsWith(basePath);
+
+ if (!external && !startsWithBasePath) {
+ resolvedPath = basePath.concat(resolvedPath);
+ }
+
+ return resolvedPath;
+};
+
/**
* Given a react node, try to retrieve its text content.
*/
@@ -84,7 +124,7 @@ export const Link = React.forwardRef(
({ onClick, noTrack, ...props }, ref) => {
const classes = useStyles();
const analytics = useAnalytics();
- const to = String(props.to);
+ const to = useResolvedPath(props.to);
const linkText = getNodeText(props.children) || to;
const external = isExternalUri(to);
const newWindow = external && !!/^https?:/.exec(to);
@@ -99,11 +139,11 @@ export const Link = React.forwardRef(
return external ? (
// External links
{props.children}
@@ -112,10 +152,11 @@ export const Link = React.forwardRef(
) : (
// Interact with React Router for internal links
);
},
diff --git a/packages/core-components/src/layout/Header/Header.tsx b/packages/core-components/src/layout/Header/Header.tsx
index bb4d19b949..1badb4eb98 100644
--- a/packages/core-components/src/layout/Header/Header.tsx
+++ b/packages/core-components/src/layout/Header/Header.tsx
@@ -63,15 +63,16 @@ const useStyles = makeStyles(
},
rightItemsBox: {
width: 'auto',
+ alignItems: 'center',
},
title: {
- color: theme.palette.bursts.fontColor,
+ color: theme.page.fontColor,
wordBreak: 'break-word',
fontSize: theme.typography.h3.fontSize,
marginBottom: 0,
},
subtitle: {
- color: theme.palette.bursts.fontColor,
+ color: theme.page.fontColor,
opacity: 0.8,
display: 'inline-block', // prevents margin collapse of adjacent siblings
marginTop: theme.spacing(1),
@@ -82,10 +83,10 @@ const useStyles = makeStyles(
fontSize: 11,
opacity: 0.8,
marginBottom: theme.spacing(1),
- color: theme.palette.bursts.fontColor,
+ color: theme.page.fontColor,
},
breadcrumb: {
- color: theme.palette.bursts.fontColor,
+ color: theme.page.fontColor,
},
breadcrumbType: {
fontSize: 'inherit',
diff --git a/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx b/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx
index a34d773ce3..d9443ffc9a 100644
--- a/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx
+++ b/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx
@@ -27,7 +27,7 @@ const styles = (theme: BackstageTheme) =>
root: {
color: theme.palette.common.white,
padding: theme.spacing(2, 2, 3),
- backgroundImage: theme.palette.bursts.gradient.linear,
+ backgroundImage: theme.getPageTheme({ themeId: 'card' }).backgroundImage,
backgroundPosition: 0,
backgroundSize: 'inherit',
},
diff --git a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx
index b51e3cbc0d..c85e6d11f2 100644
--- a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx
+++ b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx
@@ -85,14 +85,14 @@ const useStyles = makeStyles(
overlayHeader: {
display: 'flex',
- color: theme.palette.bursts.fontColor,
+ color: theme.palette.text.primary,
alignItems: 'center',
justifyContent: 'space-between',
padding: theme.spacing(2, 3),
},
overlayHeaderClose: {
- color: theme.palette.bursts.fontColor,
+ color: theme.palette.text.primary,
},
marginMobileSidebar: props => ({
diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json
index eb17f75285..37b69d74f7 100644
--- a/packages/core-plugin-api/package.json
+++ b/packages/core-plugin-api/package.json
@@ -58,7 +58,7 @@
"@types/prop-types": "^15.7.3",
"@types/zen-observable": "^0.8.0",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md
index 9ec1859289..7f2fa483f0 100644
--- a/packages/create-app/CHANGELOG.md
+++ b/packages/create-app/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/create-app
+## 0.4.29-next.2
+
+### Patch Changes
+
+- f281ad17c0: Adds the ability to define the Backstage app name using a `BACKSTAGE_APP_NAME`
+ environment variable when running `create-app`.
+
## 0.4.29-next.1
### Patch Changes
diff --git a/packages/create-app/cli-report.md b/packages/create-app/cli-report.md
new file mode 100644
index 0000000000..1244432c6a
--- /dev/null
+++ b/packages/create-app/cli-report.md
@@ -0,0 +1,15 @@
+## CLI Report file for "@backstage/create-app"
+
+> Do not edit this file. It is a report generated by `yarn build:api-reports`
+
+### `backstage-create-app`
+
+```
+Usage: backstage-create-app [options]
+
+Options:
+ -V, --version
+ --path [directory]
+ --skip-install
+ -h, --help
+```
diff --git a/packages/create-app/package.json b/packages/create-app/package.json
index 381e975729..1fc0d17285 100644
--- a/packages/create-app/package.json
+++ b/packages/create-app/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/create-app",
"description": "A CLI that helps you create your own Backstage app",
- "version": "0.4.29-next.1",
+ "version": "0.4.29-next.2",
"private": false,
"publishConfig": {
"access": "public"
diff --git a/packages/create-app/src/createApp.ts b/packages/create-app/src/createApp.ts
index 824d1d967e..7cf589e5f8 100644
--- a/packages/create-app/src/createApp.ts
+++ b/packages/create-app/src/createApp.ts
@@ -49,6 +49,14 @@ export default async (opts: OptionValues): Promise => {
}
return true;
},
+ when: (a: Answers) => {
+ const envName = process.env.BACKSTAGE_APP_NAME;
+ if (envName) {
+ a.name = envName;
+ return false;
+ }
+ return true;
+ },
},
]);
diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md
index 907c9f757d..b748970b06 100644
--- a/packages/dev-utils/CHANGELOG.md
+++ b/packages/dev-utils/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/dev-utils
+## 1.0.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/app-defaults@1.0.4-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
## 1.0.4-next.1
### Patch Changes
diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json
index c15e60d423..8d19bf9cb3 100644
--- a/packages/dev-utils/package.json
+++ b/packages/dev-utils/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/dev-utils",
"description": "Utilities for developing Backstage plugins.",
- "version": "1.0.4-next.1",
+ "version": "1.0.4-next.2",
"private": false,
"publishConfig": {
"access": "public",
@@ -33,15 +33,15 @@
"start": "backstage-cli package start"
},
"dependencies": {
- "@backstage/app-defaults": "^1.0.4-next.1",
+ "@backstage/app-defaults": "^1.0.4-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/integration-react": "^1.1.2-next.1",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/integration-react": "^1.1.2-next.2",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@testing-library/jest-dom": "^5.10.1",
@@ -59,7 +59,7 @@
"react-dom": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@types/jest": "^26.0.7",
"@types/node": "^16.0.0"
},
diff --git a/packages/e2e-test/cli-report.md b/packages/e2e-test/cli-report.md
new file mode 100644
index 0000000000..3a3912b8fc
--- /dev/null
+++ b/packages/e2e-test/cli-report.md
@@ -0,0 +1,26 @@
+## CLI Report file for "e2e-test"
+
+> Do not edit this file. It is a report generated by `yarn build:api-reports`
+
+### `e2e-test`
+
+```
+Usage: e2e-test [options] [command]
+
+Options:
+ -V, --version
+ -h, --help
+
+Commands:
+ run
+ help [command]
+```
+
+### `e2e-test run`
+
+```
+Usage: e2e-test run [options]
+
+Options:
+ -h, --help
+```
diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json
index 09ed0c3a48..333ac09b23 100644
--- a/packages/e2e-test/package.json
+++ b/packages/e2e-test/package.json
@@ -40,7 +40,7 @@
"fs-extra": "10.1.0",
"handlebars": "^4.7.3",
"pgtools": "^0.3.0",
- "puppeteer": "^14.0.0",
+ "puppeteer": "^15.0.0",
"tree-kill": "^1.2.2",
"ts-node": "^10.0.0"
},
diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md
index 102fc3ea75..644d6f7cc4 100644
--- a/packages/integration-react/CHANGELOG.md
+++ b/packages/integration-react/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/integration-react
+## 1.1.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+
## 1.1.2-next.1
### Patch Changes
diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json
index 6a0cfe3041..bf0a3e471c 100644
--- a/packages/integration-react/package.json
+++ b/packages/integration-react/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/integration-react",
"description": "Frontend package for managing integrations towards external systems",
- "version": "1.1.2-next.1",
+ "version": "1.1.2-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -25,10 +25,10 @@
},
"dependencies": {
"@backstage/config": "^1.0.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/integration": "^1.2.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/integration": "^1.2.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -38,15 +38,15 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
"@testing-library/user-event": "^14.0.0",
"@types/jest": "^26.0.7",
"@types/node": "^16.11.26",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"cross-fetch": "^3.1.5"
},
"files": [
diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md
index 3db1b7c7b9..bf352f168f 100644
--- a/packages/integration/CHANGELOG.md
+++ b/packages/integration/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/integration
+## 1.2.2-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
## 1.2.2-next.1
### Patch Changes
diff --git a/packages/integration/package.json b/packages/integration/package.json
index 190031e473..532797aee8 100644
--- a/packages/integration/package.json
+++ b/packages/integration/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/integration",
"description": "Helpers for managing integrations towards external systems",
- "version": "1.2.2-next.1",
+ "version": "1.2.2-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -36,19 +36,19 @@
"@backstage/config": "^1.0.1",
"@backstage/errors": "^1.1.0-next.0",
"cross-fetch": "^3.1.5",
- "git-url-parse": "^11.6.0",
+ "git-url-parse": "^12.0.0",
"@octokit/rest": "^18.5.3",
"@octokit/auth-app": "^3.4.0",
"luxon": "^2.0.2",
"lodash": "^4.17.21"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/config-loader": "^1.1.3-next.0",
"@backstage/test-utils": "^1.1.2-next.1",
"@types/jest": "^26.0.7",
"@types/luxon": "^2.0.4",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/packages/integration/src/bitbucketServer/core.test.ts b/packages/integration/src/bitbucketServer/core.test.ts
index 1c8f5d259c..076a2c7a4f 100644
--- a/packages/integration/src/bitbucketServer/core.test.ts
+++ b/packages/integration/src/bitbucketServer/core.test.ts
@@ -108,6 +108,20 @@ describe('bitbucketServer core', () => {
);
});
+ it('does not double encode the filepath', async () => {
+ const config: BitbucketServerIntegrationConfig = {
+ host: 'bitbucket.mycompany.net',
+ apiBaseUrl: 'https://api.bitbucket.mycompany.net/rest/api/1.0',
+ };
+ const result = await getBitbucketServerDownloadUrl(
+ 'https://bitbucket.mycompany.net/projects/backstage/repos/mock/browse/%2Fdocs?at=some-branch',
+ config,
+ );
+ expect(result).toEqual(
+ 'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/archive?format=tgz&at=some-branch&prefix=backstage-mock&path=%2Fdocs',
+ );
+ });
+
it('do not add path param if no path is specified for Bitbucket Server', async () => {
const defaultBranchResponse = {
displayId: 'main',
diff --git a/packages/integration/src/bitbucketServer/core.ts b/packages/integration/src/bitbucketServer/core.ts
index 80dbc0443f..0c57b0d3ed 100644
--- a/packages/integration/src/bitbucketServer/core.ts
+++ b/packages/integration/src/bitbucketServer/core.ts
@@ -83,7 +83,9 @@ export async function getBitbucketServerDownloadUrl(
// path will limit the downloaded content
// /docs will only download the docs folder and everything below it
// /docs/index.md will download the docs folder and everything below it
- const path = filepath ? `&path=${encodeURIComponent(filepath)}` : '';
+ const path = filepath
+ ? `&path=${encodeURIComponent(decodeURIComponent(filepath))}`
+ : '';
return `${config.apiBaseUrl}/projects/${project}/repos/${repoName}/archive?format=tgz&at=${branch}&prefix=${project}-${repoName}${path}`;
}
diff --git a/packages/release-manifests/package.json b/packages/release-manifests/package.json
index 822c3c1a52..3309b1b9f1 100644
--- a/packages/release-manifests/package.json
+++ b/packages/release-manifests/package.json
@@ -37,7 +37,7 @@
},
"devDependencies": {
"@backstage/test-utils": "^1.1.2-next.0",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"@types/jest": "^26.0.7",
"@types/node": "^16.0.0"
},
diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md
index 29a53625fc..af9f0ad09c 100644
--- a/packages/techdocs-cli-embedded-app/CHANGELOG.md
+++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md
@@ -1,5 +1,20 @@
# techdocs-cli-embedded-app
+## 0.2.72-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-techdocs@1.2.1-next.2
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/cli@0.18.0-next.2
+ - @backstage/app-defaults@1.0.4-next.2
+ - @backstage/integration-react@1.1.2-next.2
+ - @backstage/plugin-techdocs-react@1.0.2-next.1
+
## 0.2.72-next.1
### Patch Changes
diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json
index fa4ec8a38c..60389b6596 100644
--- a/packages/techdocs-cli-embedded-app/package.json
+++ b/packages/techdocs-cli-embedded-app/package.json
@@ -1,25 +1,25 @@
{
"name": "techdocs-cli-embedded-app",
- "version": "0.2.72-next.1",
+ "version": "0.2.72-next.2",
"private": true,
"backstage": {
"role": "frontend"
},
"bundled": true,
"dependencies": {
- "@backstage/app-defaults": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/app-defaults": "^1.0.4-next.2",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/config": "^1.0.1",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/integration-react": "^1.1.2-next.1",
- "@backstage/plugin-catalog": "^1.3.1-next.1",
- "@backstage/plugin-techdocs": "^1.2.1-next.1",
- "@backstage/plugin-techdocs-react": "^1.0.2-next.0",
+ "@backstage/integration-react": "^1.1.2-next.2",
+ "@backstage/plugin-catalog": "^1.4.0-next.2",
+ "@backstage/plugin-techdocs": "^1.2.1-next.2",
+ "@backstage/plugin-techdocs-react": "^1.0.2-next.1",
"@backstage/test-utils": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"history": "^5.0.0",
@@ -30,7 +30,7 @@
"react-use": "^17.2.4"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
"@testing-library/user-event": "^14.0.0",
diff --git a/packages/techdocs-cli/cli-report.md b/packages/techdocs-cli/cli-report.md
new file mode 100644
index 0000000000..64b5e9c090
--- /dev/null
+++ b/packages/techdocs-cli/cli-report.md
@@ -0,0 +1,117 @@
+## CLI Report file for "@techdocs/cli"
+
+> Do not edit this file. It is a report generated by `yarn build:api-reports`
+
+### `techdocs-cli`
+
+```
+Usage: techdocs-cli [options] [command]
+
+Options:
+ -V, --version
+ -h, --help
+
+Commands:
+ generate|build [options]
+ migrate [options]
+ publish [options]
+ serve:mkdocs [options]
+ serve [options]
+ help [command]
+```
+
+### `techdocs-cli generate`
+
+```
+Usage: techdocs-cli generate|build [options]
+
+Options:
+ --source-dir
+ --output-dir
+ --docker-image
+ --no-pull
+ --no-docker
+ --techdocs-ref
+ --etag
+ -v --verbose
+ --omitTechdocsCoreMkdocsPlugin
+ --legacyCopyReadmeMdToIndexMd
+ -h, --help
+```
+
+### `techdocs-cli migrate`
+
+```
+Usage: techdocs-cli migrate [options]
+
+Options:
+ --publisher-type
+ --storage-name
+ --azureAccountName
+ --azureAccountKey
+ --awsRoleArn
+ --awsEndpoint
+ --awsS3ForcePathStyle
+ --awsBucketRootPath
+ --osCredentialId
+ --osSecret
+ --osAuthUrl
+ --osSwiftUrl
+ --removeOriginal
+ --concurrency
+ -v --verbose
+ -h, --help
+```
+
+### `techdocs-cli publish`
+
+```
+Usage: techdocs-cli publish [options]
+
+Options:
+ --publisher-type
+ --storage-name
+ --entity
+ --legacyUseCaseSensitiveTripletPaths
+ --azureAccountName
+ --azureAccountKey
+ --awsRoleArn
+ --awsEndpoint
+ --awsS3sse
+ --awsS3ForcePathStyle
+ --osCredentialId
+ --osSecret
+ --osAuthUrl
+ --osSwiftUrl
+ --gcsBucketRootPath
+ --directory
+ -h, --help
+```
+
+### `techdocs-cli serve`
+
+```
+Usage: techdocs-cli serve [options]
+
+Options:
+ -i, --docker-image
+ --docker-entrypoint
+ --no-docker
+ --mkdocs-port
+ -v --verbose
+ -h, --help
+```
+
+### `techdocs-cli serve:mkdocs`
+
+```
+Usage: techdocs-cli serve:mkdocs [options]
+
+Options:
+ -i, --docker-image
+ --docker-entrypoint
+ --no-docker
+ -p, --port
+ -v --verbose
+ -h, --help
+```
diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json
index 1dfa7faf43..0918dcaaac 100644
--- a/packages/test-utils/package.json
+++ b/packages/test-utils/package.json
@@ -58,7 +58,7 @@
"@backstage/cli": "^0.18.0-next.1",
"@types/jest": "^26.0.7",
"@types/node": "^16.11.26",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md
index 15e9eb68cd..93b79b0721 100644
--- a/packages/theme/CHANGELOG.md
+++ b/packages/theme/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/theme
+## 0.2.16-next.1
+
+### Patch Changes
+
+- ff4f56eb49: **DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release
+
+ The `genPageTheme` function now includes an optional options object with an optional `fontColor` which defaults to white if not provided.
+
## 0.2.16-next.0
### Patch Changes
diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md
index 772e868635..92958c9c7e 100644
--- a/packages/theme/api-report.md
+++ b/packages/theme/api-report.md
@@ -116,7 +116,13 @@ export function createThemeOverrides(theme: BackstageTheme): Overrides;
export const darkTheme: BackstageTheme;
// @public
-export function genPageTheme(colors: string[], shape: string): PageTheme;
+export function genPageTheme(props: {
+ colors: string[];
+ shape: string;
+ options?: {
+ fontColor?: string;
+ };
+}): PageTheme;
// @public
export const lightTheme: BackstageTheme;
@@ -126,6 +132,7 @@ export type PageTheme = {
colors: string[];
shape: string;
backgroundImage: string;
+ fontColor: string;
};
// @public
diff --git a/packages/theme/package.json b/packages/theme/package.json
index a3ff37538c..4cbd4d2205 100644
--- a/packages/theme/package.json
+++ b/packages/theme/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/theme",
"description": "material-ui theme for use with Backstage.",
- "version": "0.2.16-next.0",
+ "version": "0.2.16-next.1",
"private": false,
"publishConfig": {
"access": "public",
@@ -36,7 +36,7 @@
"@material-ui/core": "^4.12.2"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1"
+ "@backstage/cli": "^0.18.0-next.2"
},
"files": [
"dist"
diff --git a/packages/theme/src/pageTheme.ts b/packages/theme/src/pageTheme.ts
index ae81dc8534..5b5eb24be9 100644
--- a/packages/theme/src/pageTheme.ts
+++ b/packages/theme/src/pageTheme.ts
@@ -52,6 +52,7 @@ export const colorVariants: Record = {
eveningSea: ['#00FFF2', '#035355'],
teal: ['#005B4B'],
pinkSea: ['#C8077A', '#C2297D'],
+ greens: ['#4BB8A5', '#187656'],
};
/**
@@ -63,12 +64,25 @@ export const colorVariants: Record = {
* As the background shapes and colors are decorative, we place them onto the
* page as a css background-image instead of an html element of its own.
*/
-export function genPageTheme(colors: string[], shape: string): PageTheme {
+export function genPageTheme(props: {
+ colors: string[];
+ shape: string;
+ options?: {
+ fontColor?: string;
+ };
+}): PageTheme {
+ const { colors, shape, options } = props;
const gradientColors = colors.length === 1 ? [colors[0], colors[0]] : colors;
const gradient = `linear-gradient(90deg, ${gradientColors.join(', ')})`;
const backgroundImage = `${shape}, ${gradient}`;
+ const fontColor = options?.fontColor ?? '#FFFFFF';
- return { colors, shape, backgroundImage };
+ return {
+ colors: colors,
+ shape: shape,
+ backgroundImage: backgroundImage,
+ fontColor: fontColor,
+ };
}
/**
@@ -77,13 +91,20 @@ export function genPageTheme(colors: string[], shape: string): PageTheme {
* @public
*/
export const pageTheme: Record = {
- home: genPageTheme(colorVariants.teal, shapes.wave),
- documentation: genPageTheme(colorVariants.pinkSea, shapes.wave2),
- tool: genPageTheme(colorVariants.purpleSky, shapes.round),
- service: genPageTheme(colorVariants.marineBlue, shapes.wave),
- website: genPageTheme(colorVariants.veryBlue, shapes.wave),
- library: genPageTheme(colorVariants.rubyRed, shapes.wave),
- other: genPageTheme(colorVariants.darkGrey, shapes.wave),
- app: genPageTheme(colorVariants.toastyOrange, shapes.wave),
- apis: genPageTheme(colorVariants.teal, shapes.wave2),
+ home: genPageTheme({ colors: colorVariants.teal, shape: shapes.wave }),
+ documentation: genPageTheme({
+ colors: colorVariants.pinkSea,
+ shape: shapes.wave2,
+ }),
+ tool: genPageTheme({ colors: colorVariants.purpleSky, shape: shapes.round }),
+ service: genPageTheme({
+ colors: colorVariants.marineBlue,
+ shape: shapes.wave,
+ }),
+ website: genPageTheme({ colors: colorVariants.veryBlue, shape: shapes.wave }),
+ library: genPageTheme({ colors: colorVariants.rubyRed, shape: shapes.wave }),
+ other: genPageTheme({ colors: colorVariants.darkGrey, shape: shapes.wave }),
+ app: genPageTheme({ colors: colorVariants.toastyOrange, shape: shapes.wave }),
+ apis: genPageTheme({ colors: colorVariants.teal, shape: shapes.wave2 }),
+ card: genPageTheme({ colors: colorVariants.greens, shape: shapes.wave }),
};
diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts
index b921154005..96b7c54f9b 100644
--- a/packages/theme/src/types.ts
+++ b/packages/theme/src/types.ts
@@ -63,6 +63,9 @@ export type BackstagePaletteAdditions = {
tabbar: {
indicator: string;
};
+ /**
+ * @deprecated The entire `bursts` section will be removed in a future release
+ */
bursts: {
fontColor: string;
slackChannelText: string;
@@ -161,4 +164,5 @@ export type PageTheme = {
colors: string[];
shape: string;
backgroundImage: string;
+ fontColor: string;
};
diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json
index 1a42f7ff03..be04a712cc 100644
--- a/plugins/adr-backend/package.json
+++ b/plugins/adr-backend/package.json
@@ -48,7 +48,7 @@
"@types/marked": "^4.0.0",
"@types/supertest": "^2.0.8",
"supertest": "^6.1.3",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md
index fc8b859ec5..efad1034a8 100644
--- a/plugins/adr/CHANGELOG.md
+++ b/plugins/adr/CHANGELOG.md
@@ -1,5 +1,25 @@
# @backstage/plugin-adr
+## 0.1.2-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
## 0.1.2-next.1
### Patch Changes
diff --git a/plugins/adr/package.json b/plugins/adr/package.json
index 60a3c594e5..80d24e7223 100644
--- a/plugins/adr/package.json
+++ b/plugins/adr/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-adr",
- "version": "0.1.2-next.1",
+ "version": "0.1.2-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -22,18 +22,18 @@
"postpack": "backstage-cli package postpack"
},
"dependencies": {
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/integration-react": "^1.1.2-next.1",
+ "@backstage/integration-react": "^1.1.2-next.2",
"@backstage/plugin-adr-common": "^0.1.2-next.1",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
"@backstage/plugin-search-common": "^0.3.6-next.0",
- "@backstage/plugin-search-react": "^0.2.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-search-react": "^0.2.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
- "git-url-parse": "^11.6.0",
+ "git-url-parse": "^12.0.0",
"octokit": "^1.7.1",
"react-markdown": "^8.0.0",
"react-router-dom": "6.0.0-beta.0",
@@ -44,9 +44,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -55,7 +55,7 @@
"@types/jest": "*",
"@types/node": "*",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json
index da6cdcbfef..900161364c 100644
--- a/plugins/airbrake-backend/package.json
+++ b/plugins/airbrake-backend/package.json
@@ -37,7 +37,7 @@
"@types/http-proxy-middleware": "^0.19.3",
"@types/supertest": "^2.0.8",
"supertest": "^6.1.6",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md
index f8b683bf5a..0be1badd9e 100644
--- a/plugins/airbrake/CHANGELOG.md
+++ b/plugins/airbrake/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-airbrake
+## 0.3.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/dev-utils@1.0.4-next.2
+
## 0.3.7-next.1
### Patch Changes
diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json
index 00554efeee..2f93d533cc 100644
--- a/plugins/airbrake/package.json
+++ b/plugins/airbrake/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-airbrake",
- "version": "0.3.7-next.1",
+ "version": "0.3.7-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -23,13 +23,13 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/dev-utils": "^1.0.4-next.1",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -40,9 +40,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/app-defaults": "^1.0.4-next.1",
- "@backstage/cli": "^0.18.0-next.1",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/app-defaults": "^1.0.4-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -51,7 +51,7 @@
"@types/node": "^16.11.26",
"@types/object-hash": "^2.2.1",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"react-router": "6.0.0-beta.0"
},
"files": [
diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md
index d1cce9b7ef..8f09da737c 100644
--- a/plugins/allure/CHANGELOG.md
+++ b/plugins/allure/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-allure
+## 0.1.23-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
## 0.1.23-next.1
### Patch Changes
diff --git a/plugins/allure/package.json b/plugins/allure/package.json
index a576aa8f9b..c98b8b7d63 100644
--- a/plugins/allure/package.json
+++ b/plugins/allure/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-allure",
"description": "A Backstage plugin that integrates with Allure",
- "version": "0.1.23-next.1",
+ "version": "0.1.23-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -25,11 +25,11 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -40,9 +40,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -50,7 +50,7 @@
"@types/jest": "^26.0.7",
"@types/node": "^16.11.26",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md
index 23f583473d..edbc67981a 100644
--- a/plugins/analytics-module-ga/CHANGELOG.md
+++ b/plugins/analytics-module-ga/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-analytics-module-ga
+## 0.1.18-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/theme@0.2.16-next.1
+
## 0.1.18-next.1
### Patch Changes
diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json
index e7bae29f51..23532af5fa 100644
--- a/plugins/analytics-module-ga/package.json
+++ b/plugins/analytics-module-ga/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-analytics-module-ga",
- "version": "0.1.18-next.1",
+ "version": "0.1.18-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -25,9 +25,9 @@
},
"dependencies": {
"@backstage/config": "^1.0.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -38,9 +38,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -48,7 +48,7 @@
"@types/jest": "^26.0.7",
"@types/node": "^16.11.26",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md
index a27c58192e..920dcf5686 100644
--- a/plugins/apache-airflow/CHANGELOG.md
+++ b/plugins/apache-airflow/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-apache-airflow
+## 0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+
## 0.2.0-next.1
### Minor Changes
diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json
index a880942750..657ecc7ad6 100644
--- a/plugins/apache-airflow/package.json
+++ b/plugins/apache-airflow/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-apache-airflow",
- "version": "0.2.0-next.1",
+ "version": "0.2.0-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -23,7 +23,7 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
@@ -36,16 +36,16 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
"@testing-library/user-event": "^14.0.0",
"@types/jest": "^26.0.7",
"@types/node": "^16.11.26",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md
index b4ebf48607..6b2e54f018 100644
--- a/plugins/api-docs/CHANGELOG.md
+++ b/plugins/api-docs/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-api-docs
+## 0.8.7-next.2
+
+### Patch Changes
+
+- a274fe38b9: Add hidden title column to catalog and API table to enable filtering by title.
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
## 0.8.7-next.1
### Patch Changes
diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json
index 8b4f80fa3f..b6d54ab952 100644
--- a/plugins/api-docs/package.json
+++ b/plugins/api-docs/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-api-docs",
"description": "A Backstage plugin that helps represent API entities in the frontend",
- "version": "0.8.7-next.1",
+ "version": "0.8.7-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -33,13 +33,13 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@asyncapi/react-component": "1.0.0-next.38",
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@asyncapi/react-component": "1.0.0-next.39",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/plugin-catalog": "^1.3.1-next.1",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-catalog": "^1.4.0-next.2",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -57,9 +57,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -68,7 +68,7 @@
"@types/node": "^16.11.26",
"@types/swagger-ui-react": "^4.1.1",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx b/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx
index 9fc6b2c3c2..b0acd3567c 100644
--- a/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx
+++ b/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx
@@ -40,6 +40,7 @@ import React from 'react';
import { registerComponentRouteRef } from '../../routes';
const defaultColumns: TableColumn[] = [
+ CatalogTable.columns.createTitleColumn({ hidden: true }),
CatalogTable.columns.createNameColumn({ defaultKind: 'API' }),
CatalogTable.columns.createSystemColumn(),
CatalogTable.columns.createOwnerColumn(),
diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md
index cf84f54fb0..0282527437 100644
--- a/plugins/app-backend/CHANGELOG.md
+++ b/plugins/app-backend/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-app-backend
+## 0.3.34-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.2
+
## 0.3.34-next.1
### Patch Changes
diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json
index b76c4c00dd..b25a162f4a 100644
--- a/plugins/app-backend/package.json
+++ b/plugins/app-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-app-backend",
"description": "A Backstage backend plugin that serves the Backstage frontend app",
- "version": "0.3.34-next.1",
+ "version": "0.3.34-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -33,7 +33,7 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/backend-common": "^0.14.1-next.1",
+ "@backstage/backend-common": "^0.14.1-next.2",
"@backstage/config-loader": "^1.1.3-next.0",
"@backstage/config": "^1.0.1",
"@backstage/types": "^1.0.0",
@@ -50,12 +50,12 @@
"yn": "^4.0.0"
},
"devDependencies": {
- "@backstage/backend-test-utils": "^0.1.26-next.1",
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/backend-test-utils": "^0.1.26-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/types": "^1.0.0",
"@types/supertest": "^2.0.8",
"mock-fs": "^5.1.0",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"supertest": "^6.1.3"
},
"files": [
diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md
index 4b0da94dad..8e6e79d97e 100644
--- a/plugins/auth-backend/CHANGELOG.md
+++ b/plugins/auth-backend/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend
+## 0.15.0-next.2
+
+### Patch Changes
+
+- 8e03db907a: Auth provider now also export createAuthProviderIntegration
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+
## 0.15.0-next.1
### Minor Changes
diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md
index d216545bd4..8c9ec14c9e 100644
--- a/plugins/auth-backend/api-report.md
+++ b/plugins/auth-backend/api-report.md
@@ -181,6 +181,22 @@ export type CookieConfigurer = (ctx: {
secure: boolean;
};
+// Warning: (ae-missing-release-tag) "createAuthProviderIntegration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
+//
+// @public
+export function createAuthProviderIntegration<
+ TCreateOptions extends unknown[],
+ TResolvers extends {
+ [name in string]: (...args: any[]) => SignInResolver;
+ },
+>(config: {
+ create: (...args: TCreateOptions) => AuthProviderFactory;
+ resolvers?: TResolvers;
+}): Readonly<{
+ create: (...args: TCreateOptions) => AuthProviderFactory;
+ resolvers: Readonly;
+}>;
+
// Warning: (ae-missing-release-tag) "createOriginFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json
index 624899c38f..d6b027e6ea 100644
--- a/plugins/auth-backend/package.json
+++ b/plugins/auth-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-auth-backend",
"description": "A Backstage backend plugin that handles authentication",
- "version": "0.15.0-next.1",
+ "version": "0.15.0-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,9 +34,9 @@
},
"dependencies": {
"@backstage/plugin-auth-node": "^0.2.3-next.1",
- "@backstage/backend-common": "^0.14.1-next.1",
+ "@backstage/backend-common": "^0.14.1-next.2",
"@backstage/catalog-client": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
"@backstage/config": "^1.0.1",
"@backstage/errors": "^1.1.0-next.0",
"@backstage/types": "^1.0.0",
@@ -76,8 +76,8 @@
"yn": "^4.0.0"
},
"devDependencies": {
- "@backstage/backend-test-utils": "^0.1.26-next.1",
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/backend-test-utils": "^0.1.26-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
"@types/body-parser": "^1.19.0",
"@types/cookie-parser": "^1.4.2",
"@types/express-session": "^1.17.2",
@@ -88,7 +88,7 @@
"@types/passport-saml": "^1.1.3",
"@types/passport-strategy": "^0.2.35",
"@types/xml2js": "^0.4.7",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"supertest": "^6.1.3"
},
"files": [
diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts
index de410a9407..41ee44beae 100644
--- a/plugins/auth-backend/src/providers/index.ts
+++ b/plugins/auth-backend/src/providers/index.ts
@@ -28,6 +28,8 @@ export type { GcpIapResult, GcpIapTokenInfo } from './gcp-iap';
export { providers, defaultAuthProviderFactories } from './providers';
+export { createAuthProviderIntegration } from './createAuthProviderIntegration';
+
export type {
AuthProviderConfig,
AuthProviderRouteHandlers,
diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts
index 2232eeaa81..e4fa5eeea4 100644
--- a/plugins/auth-backend/src/service/router.ts
+++ b/plugins/auth-backend/src/service/router.ts
@@ -140,6 +140,7 @@ export async function createRouter(
}
if (provider.refresh) {
r.get('/refresh', provider.refresh.bind(provider));
+ r.post('/refresh', provider.refresh.bind(provider));
}
router.use(`/${providerId}`, r);
diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json
index ad67eefefc..011aade178 100644
--- a/plugins/auth-node/package.json
+++ b/plugins/auth-node/package.json
@@ -33,7 +33,7 @@
"devDependencies": {
"@backstage/cli": "^0.18.0-next.1",
"lodash": "^4.17.21",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"uuid": "^8.0.0"
},
"files": [
diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json
index 2126bfced7..cff9eaf07e 100644
--- a/plugins/azure-devops-backend/package.json
+++ b/plugins/azure-devops-backend/package.json
@@ -38,7 +38,7 @@
"@backstage/cli": "^0.18.0-next.1",
"@types/supertest": "^2.0.8",
"supertest": "^6.1.6",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md
index 32b7ee5a25..79a58574f3 100644
--- a/plugins/azure-devops/CHANGELOG.md
+++ b/plugins/azure-devops/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-azure-devops
+## 0.1.23-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
## 0.1.23-next.1
### Patch Changes
diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json
index d96ccbea29..6ab9760f66 100644
--- a/plugins/azure-devops/package.json
+++ b/plugins/azure-devops/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-azure-devops",
- "version": "0.1.23-next.1",
+ "version": "0.1.23-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -30,13 +30,13 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
"@backstage/errors": "^1.1.0-next.0",
"@backstage/plugin-azure-devops-common": "^0.2.3",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -49,9 +49,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -59,7 +59,7 @@
"@types/jest": "^26.0.7",
"@types/node": "^16.11.26",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md
index 02729eb7c8..779625184e 100644
--- a/plugins/badges-backend/CHANGELOG.md
+++ b/plugins/badges-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-badges-backend
+## 0.1.28-next.2
+
+### Patch Changes
+
+- 58fd5ee9d5: Add missing installation instructions
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+
## 0.1.28-next.1
### Patch Changes
diff --git a/plugins/badges-backend/README.md b/plugins/badges-backend/README.md
index bdbfac3fa5..63e43c6692 100644
--- a/plugins/badges-backend/README.md
+++ b/plugins/badges-backend/README.md
@@ -11,8 +11,14 @@ endpoint.
## Installation
-Install the `@backstage/plugin-badges-backend` package in your backend package,
-and then integrate the plugin using the following default setup for
+Install the `@backstage/plugin-badges-backend` package in your backend package:
+
+```bash
+# From your Backstage root directory
+yarn add --cwd packages/backend @backstage/plugin-badges-backend
+```
+
+Add the plugin using the following default setup for
`src/plugins/badges.ts`:
```ts
@@ -39,6 +45,34 @@ the badges-backend `createRouter()` to forward to the default badge builder. To
customize the available badges, provide a custom set of badge factories. See
further down for an example of a custom badge factories function.
+Finally, you have to make the following changes in `src/index.ts`:
+
+```ts
+// 1. import the plugin
+import badges from './plugins/badges';
+
+...
+
+const config = await loadBackendConfig({
+ argv: process.argv,
+ logger: rootLogger,
+});
+const createEnv = makeCreateEnv(config);
+
+ ...
+ // 2. Create a PluginEnvironment for the Badges plugin
+ const badgesEnv = useHotMemoize(module, () => createEnv('badges'));
+
+ ...
+
+ const apiRouter = Router();
+ ...
+ // 3. Register the badges plugin in the router
+ apiRouter.use('/badges', await badges(badgesEnv));
+ ...
+ apiRouter.use(notFoundHandler());
+```
+
## Badge builder
Badges are created by classes implementing the `BadgeBuilder` type. The default
diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json
index 26a11c98b1..1e0bc62b15 100644
--- a/plugins/badges-backend/package.json
+++ b/plugins/badges-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-badges-backend",
"description": "A Backstage backend plugin that generates README badges for your entities",
- "version": "0.1.28-next.1",
+ "version": "0.1.28-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,9 +34,9 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/backend-common": "^0.14.1-next.1",
+ "@backstage/backend-common": "^0.14.1-next.2",
"@backstage/catalog-client": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
"@backstage/config": "^1.0.1",
"@backstage/errors": "^1.1.0-next.0",
"@types/express": "^4.17.6",
@@ -48,7 +48,7 @@
"yn": "^4.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@types/supertest": "^2.0.8",
"supertest": "^6.1.3"
},
diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md
index 41d41c9855..b6fc662c3a 100644
--- a/plugins/badges/CHANGELOG.md
+++ b/plugins/badges/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-badges
+## 0.2.31-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
## 0.2.31-next.1
### Patch Changes
diff --git a/plugins/badges/package.json b/plugins/badges/package.json
index 2b58487932..6972ba80ae 100644
--- a/plugins/badges/package.json
+++ b/plugins/badges/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-badges",
"description": "A Backstage plugin that generates README badges for your entities",
- "version": "0.2.31-next.1",
+ "version": "0.2.31-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -30,12 +30,12 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
"@backstage/errors": "^1.1.0-next.0",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -46,9 +46,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -56,7 +56,7 @@
"@types/jest": "^26.0.7",
"@types/node": "^16.11.26",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md
index cfc222eb55..81358cfc7f 100644
--- a/plugins/bazaar-backend/CHANGELOG.md
+++ b/plugins/bazaar-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-bazaar-backend
+## 0.1.18-next.1
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/backend-test-utils@0.1.26-next.2
+
## 0.1.18-next.0
### Patch Changes
diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json
index 08e39852f5..351535e544 100644
--- a/plugins/bazaar-backend/package.json
+++ b/plugins/bazaar-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-bazaar-backend",
- "version": "0.1.18-next.0",
+ "version": "0.1.18-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -23,8 +23,8 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/backend-common": "^0.14.1-next.1",
- "@backstage/backend-test-utils": "^0.1.26-next.1",
+ "@backstage/backend-common": "^0.14.1-next.2",
+ "@backstage/backend-test-utils": "^0.1.26-next.2",
"@backstage/config": "^1.0.1",
"@types/express": "^4.17.6",
"express": "^4.17.1",
@@ -34,7 +34,7 @@
"yn": "^4.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1"
+ "@backstage/cli": "^0.18.0-next.2"
},
"files": [
"dist",
diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md
index 864a5eb017..e70e0db58b 100644
--- a/plugins/bazaar/CHANGELOG.md
+++ b/plugins/bazaar/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-bazaar
+## 0.1.22-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-catalog@1.4.0-next.2
+ - @backstage/cli@0.18.0-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
## 0.1.22-next.1
### Patch Changes
diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json
index bbc5919e12..aa44986a79 100644
--- a/plugins/bazaar/package.json
+++ b/plugins/bazaar/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-bazaar",
- "version": "0.1.22-next.1",
+ "version": "0.1.22-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -25,12 +25,12 @@
},
"dependencies": {
"@backstage/catalog-client": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/cli": "^0.18.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/plugin-catalog": "^1.3.1-next.1",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
+ "@backstage/plugin-catalog": "^1.4.0-next.2",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
"@date-io/luxon": "1.x",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
@@ -47,8 +47,8 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@testing-library/jest-dom": "^5.10.1",
"cross-fetch": "^3.1.5"
},
diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json
index c84303fece..d5a686a1cd 100644
--- a/plugins/bitbucket-cloud-common/package.json
+++ b/plugins/bitbucket-cloud-common/package.json
@@ -34,7 +34,7 @@
"devDependencies": {
"@backstage/cli": "^0.18.0-next.1",
"@openapitools/openapi-generator-cli": "^2.4.26",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"ts-morph": "^15.0.0"
},
"files": [
diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md
index 0ef9d10bea..9058f5c15a 100644
--- a/plugins/bitrise/CHANGELOG.md
+++ b/plugins/bitrise/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-bitrise
+## 0.1.34-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
## 0.1.34-next.1
### Patch Changes
diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json
index f8f96be603..07ac2ca46e 100644
--- a/plugins/bitrise/package.json
+++ b/plugins/bitrise/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-bitrise",
"description": "A Backstage plugin that integrates towards Bitrise",
- "version": "0.1.34-next.1",
+ "version": "0.1.34-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -24,11 +24,11 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -43,9 +43,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -53,7 +53,7 @@
"@types/jest": "^26.0.7",
"@types/node": "^16.11.26",
"@types/recharts": "^1.8.15",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json
index 4cb1639a36..6256a01a72 100644
--- a/plugins/catalog-backend-module-azure/package.json
+++ b/plugins/catalog-backend-module-azure/package.json
@@ -42,7 +42,7 @@
"@backstage/plugin-catalog-backend": "^1.2.1-next.1",
"@backstage/types": "^1.0.0",
"lodash": "^4.17.21",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"uuid": "^8.0.0",
"node-fetch": "^2.6.7",
"winston": "^3.2.1"
diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json
index 663c0b37fe..b272cb8c29 100644
--- a/plugins/catalog-backend-module-bitbucket-cloud/package.json
+++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json
@@ -45,7 +45,7 @@
"@backstage/backend-common": "^0.14.1-next.1",
"@backstage/backend-test-utils": "^0.1.26-next.1",
"@backstage/cli": "^0.18.0-next.1",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json
index 56b0c16eec..4eb2a85e0e 100644
--- a/plugins/catalog-backend-module-bitbucket/package.json
+++ b/plugins/catalog-backend-module-bitbucket/package.json
@@ -42,7 +42,7 @@
"@backstage/plugin-catalog-backend": "^1.2.1-next.1",
"@backstage/types": "^1.0.0",
"lodash": "^4.17.21",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"node-fetch": "^2.6.7",
"winston": "^3.2.1"
},
diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json
index dd4c07c044..6c4bd63659 100644
--- a/plugins/catalog-backend-module-gerrit/package.json
+++ b/plugins/catalog-backend-module-gerrit/package.json
@@ -36,7 +36,7 @@
"@backstage/integration": "^1.2.2-next.1",
"@backstage/plugin-catalog-backend": "^1.2.1-next.1",
"fs-extra": "10.1.0",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"node-fetch": "^2.6.7",
"uuid": "^8.0.0",
"winston": "^3.2.1"
diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json
index ffe8e38e32..eae503c507 100644
--- a/plugins/catalog-backend-module-github/package.json
+++ b/plugins/catalog-backend-module-github/package.json
@@ -43,7 +43,7 @@
"@backstage/types": "^1.0.0",
"@octokit/graphql": "^4.5.8",
"lodash": "^4.17.21",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"node-fetch": "^2.6.7",
"uuid": "^8.0.0",
"winston": "^3.2.1"
diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json
index a4240119e3..47f48af481 100644
--- a/plugins/catalog-backend-module-gitlab/package.json
+++ b/plugins/catalog-backend-module-gitlab/package.json
@@ -42,7 +42,7 @@
"@backstage/plugin-catalog-backend": "^1.2.1-next.1",
"@backstage/types": "^1.0.0",
"lodash": "^4.17.21",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"node-fetch": "^2.6.7",
"winston": "^3.2.1",
"uuid": "^8.0.0"
diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md
index d50e93edcc..a86663d6d1 100644
--- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md
+++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md
@@ -1,5 +1,104 @@
# @backstage/plugin-catalog-backend-module-msgraph
+## 0.4.0-next.1
+
+### Minor Changes
+
+- a145672f0f: Align `msgraph` plugin's entity provider config with other providers. **Deprecated** entity processor as well as previous config.
+
+ You will see warning at the log output until you migrate to the new setup.
+ All deprecated parts will be removed eventually after giving some time to migrate.
+
+ Please find information on how to migrate your current setup to the new one below.
+
+ **Migration Guide:**
+
+ There were two different way on how to use the msgraph plugin: processor or provider.
+
+ Previous registration for the processor:
+
+ ```typescript
+ // packages/backend/src/plugins/catalog.ts
+ builder.addProcessor(
+ MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, {
+ logger: env.logger,
+ // [...]
+ }),
+ );
+ ```
+
+ Previous registration when using the provider:
+
+ ```typescript
+ // packages/backend/src/plugins/catalog.ts
+ builder.addEntityProvider(
+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, {
+ id: 'https://graph.microsoft.com/v1.0',
+ target: 'https://graph.microsoft.com/v1.0',
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
+ // [...]
+ }),
+ );
+ ```
+
+ Previous configuration as used for both:
+
+ ```yaml
+ # app-config.yaml
+ catalog:
+ processors:
+ microsoftGraphOrg:
+ providers:
+ - target: https://graph.microsoft.com/v1.0
+ # [...]
+ ```
+
+ **Replacement:**
+
+ Please check https://github.com/backstage/backstage/blob/master/plugins/catalog-backend-module-msgraph/README.md for the complete documentation of all configuration options (config as well as registration of the provider).
+
+ ```yaml
+ # app-config.yaml
+ catalog:
+ providers:
+ microsoftGraphOrg:
+ # In case you used the deprecated configuration with the entity provider
+ # using the value of `target` will keep the same location key for all
+ providerId: # some stable ID which will be used as part of the location key for all ingested data
+ target: https://graph.microsoft.com/v1.0
+ # [...]
+ ```
+
+ ```typescript
+ // packages/backend/src/plugins/catalog.ts
+ builder.addEntityProvider(
+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
+ // [...]
+ }),
+ );
+ ```
+
+ In case you've used multiple entity providers before
+ **and** you had different transformers for each of them
+ you can provide these directly at the one `fromConfig` call
+ by passing a Record with the provider ID as key.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-tasks@0.3.3-next.2
+ - @backstage/plugin-catalog-backend@1.2.1-next.2
+
## 0.3.4-next.0
### Patch Changes
diff --git a/plugins/catalog-backend-module-msgraph/README.md b/plugins/catalog-backend-module-msgraph/README.md
index e6429152e4..6132d5abc6 100644
--- a/plugins/catalog-backend-module-msgraph/README.md
+++ b/plugins/catalog-backend-module-msgraph/README.md
@@ -1,85 +1,86 @@
# Catalog Backend Module for Microsoft Graph
-This is an extension module to the `plugin-catalog-backend` plugin, providing a
-`MicrosoftGraphOrgReaderProcessor` and a `MicrosoftGraphOrgEntityProvider` that
-can be used to ingest organization data from the Microsoft Graph API. This
-processor is useful if you want to import users and groups from Azure Active
-Directory or Office 365.
+This is an extension module to the `plugin-catalog-backend` plugin, providing a `MicrosoftGraphOrgEntityProvider`
+that can be used to ingest organization data from the Microsoft Graph API.
+This provider is useful if you want to import users and groups from Azure Active Directory or Office 365.
## Getting Started
-First you need to decide whether you want to use an [entity provider or a processor](https://backstage.io/docs/features/software-catalog/life-of-an-entity#stitching) to ingest the organization data.
-If you want groups and users deleted from the source to be automatically deleted
-from Backstage, choose the entity provider.
-
1. Create or use an existing App registration in the [Microsoft Azure Portal](https://portal.azure.com/).
The App registration requires at least the API permissions `Group.Read.All`,
`GroupMember.Read.All`, `User.Read` and `User.Read.All` for Microsoft Graph
(if you still run into errors about insufficient privileges, add
`Team.ReadBasic.All` and `TeamMember.Read.All` too).
-2. Configure the processor or entity provider:
+2. Configure the entity provider:
```yaml
# app-config.yaml
catalog:
- processors:
+ providers:
microsoftGraphOrg:
- providers:
- - target: https://graph.microsoft.com/v1.0
- authority: https://login.microsoftonline.com
- # If you don't know you tenantId, you can use Microsoft Graph Explorer
- # to query it
- tenantId: ${MICROSOFT_GRAPH_TENANT_ID}
- # Client Id and Secret can be created under Certificates & secrets in
- # the App registration in the Microsoft Azure Portal.
- clientId: ${MICROSOFT_GRAPH_CLIENT_ID}
- clientSecret: ${MICROSOFT_GRAPH_CLIENT_SECRET_TOKEN}
- # Optional mode for querying which defaults to "basic".
- # By default, the Microsoft Graph API only provides the basic feature set
- # for querying. Certain features are limited to advanced querying capabilities.
- # (See https://docs.microsoft.com/en-us/graph/aad-advanced-queries)
- queryMode: basic # basic | advanced
+ providerId:
+ target: https://graph.microsoft.com/v1.0
+ authority: https://login.microsoftonline.com
+ # If you don't know you tenantId, you can use Microsoft Graph Explorer
+ # to query it
+ tenantId: ${MICROSOFT_GRAPH_TENANT_ID}
+ # Client Id and Secret can be created under Certificates & secrets in
+ # the App registration in the Microsoft Azure Portal.
+ clientId: ${MICROSOFT_GRAPH_CLIENT_ID}
+ clientSecret: ${MICROSOFT_GRAPH_CLIENT_SECRET_TOKEN}
+ # Optional mode for querying which defaults to "basic".
+ # By default, the Microsoft Graph API only provides the basic feature set
+ # for querying. Certain features are limited to advanced querying capabilities.
+ # (See https://docs.microsoft.com/en-us/graph/aad-advanced-queries)
+ queryMode: basic # basic | advanced
+ # Optional configuration block
+ user:
# Optional parameter to include the expanded resource or collection referenced
# by a single relationship (navigation property) in your results.
# Only one relationship can be expanded in a single request.
# See https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter
# Can be combined with userGroupMember[...] instead of userFilter.
- userExpand: manager
+ expand: manager
# Optional filter for user, see Microsoft Graph API for the syntax
# See https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties
# and for the syntax https://docs.microsoft.com/en-us/graph/query-parameters#filter-parameter
# This and userGroupMemberFilter are mutually exclusive, only one can be specified
- userFilter: accountEnabled eq true and userType eq 'member'
+ filter: accountEnabled eq true and userType eq 'member'
+ # Optional configuration block
+ userGroupMember:
# Optional filter for users, use group membership to get users.
# (Filtered groups and fetch their members.)
# This and userFilter are mutually exclusive, only one can be specified
# See https://docs.microsoft.com/en-us/graph/search-query-parameter
- userGroupMemberFilter: "displayName eq 'Backstage Users'"
+ filter: "displayName eq 'Backstage Users'"
+ # Optional search for users, use group membership to get users.
+ # (Search for groups and fetch their members.)
+ # This and userFilter are mutually exclusive, only one can be specified
+ search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
+ # Optional configuration block
+ group:
# Optional parameter to include the expanded resource or collection referenced
# by a single relationship (navigation property) in your results.
# Only one relationship can be expanded in a single request.
# See https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter
# Can be combined with userGroupMember[...] instead of userFilter.
- groupExpand: member
- # Optional search for users, use group membership to get users.
- # (Search for groups and fetch their members.)
- # This and userFilter are mutually exclusive, only one can be specified
- userGroupMemberSearch: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
+ expand: member
# Optional filter for group, see Microsoft Graph API for the syntax
# See https://docs.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0#properties
- groupFilter: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified')
+ filter: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified')
# Optional search for groups, see Microsoft Graph API for the syntax
# See https://docs.microsoft.com/en-us/graph/search-query-parameter
- groupSearch: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
- # Optional select for groups, this will allow you work with schemaExtensions in order to add extra information to your groups that can be used on you custom groupTransformers
+ search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
+ # Optional select for groups, this will allow you work with schemaExtensions
+ # in order to add extra information to your groups that can be used on you custom groupTransformers
# See https://docs.microsoft.com/en-us/graph/api/resources/schemaextension?view=graph-rest-1.0
- groupSelect: ['id', 'displayName', 'description']
+ select: ['id', 'displayName', 'description']
```
-`userFilter` and `userGroupMemberFilter` are mutually exclusive, only one can be provided. If both are provided, an error will be thrown.
+`user.filter` and `userGroupMember.filter` are mutually exclusive, only one can be provided. If both are provided, an error will be thrown.
-By default, all users are loaded. If you want to filter users based on their attributes, use `userFilter`. `userGroupMemberFilter` can be used if you want to load users based on their group membership.
+By default, all users are loaded. If you want to filter users based on their attributes, use `user.filter`. `userGroupMember.filter` can be used if you want to load users based on their group membership.
3. The package is not installed by default, therefore you have to add a
dependency to `@backstage/plugin-catalog-backend-module-msgraph` to your
@@ -90,15 +91,12 @@ By default, all users are loaded. If you want to filter users based on their att
yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-msgraph
```
-### Using the Entity Provider
-
4. The `MicrosoftGraphOrgEntityProvider` is not registered by default, so you
have to register it in the catalog plugin. Pass the target to reference a
provider from the configuration.
```diff
// packages/backend/src/plugins/catalog.ts
-+import { Duration } from 'luxon';
+import { MicrosoftGraphOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-msgraph';
export default async function createPlugin(
@@ -106,53 +104,21 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-msgraph
): Promise {
const builder = await CatalogBuilder.create(env);
-+ // The target parameter below needs to match one of the providers' target
-+ // value specified in your app-config (see above).
+ builder.addEntityProvider(
+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, {
-+ id: 'production',
-+ target: 'https://graph.microsoft.com/v1.0',
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
-+ frequency: Duration.fromObject({ minutes: 5 }),
-+ timeout: Duration.fromObject({ minutes: 3 }),
++ frequency: { minutes: 5 },
++ timeout: { minutes: 3 },
+ }),
+ }),
+ );
```
-### Using the Processor
-
-4. The `MicrosoftGraphOrgReaderProcessor` is not registered by default, so you
- have to register it in the catalog plugin:
-
-```typescript
-// packages/backend/src/plugins/catalog.ts
-builder.addProcessor(
- MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, {
- logger: env.logger,
- }),
-);
-```
-
-5. Add a location that ingests from Microsoft Graph:
-
-```yaml
-# app-config.yaml
-catalog:
- locations:
- - type: microsoft-graph-org
- target: https://graph.microsoft.com/v1.0
- rules:
- - allow: [Group, User]
- …
-```
-
## Customize the Processor or Entity Provider
-In case you want to customize the ingested entities, both the `MicrosoftGraphOrgReaderProcessor`
-and the `MicrosoftGraphOrgEntityProvider` allows to pass transformers for users,
-groups and the organization.
+In case you want to customize the ingested entities, the `MicrosoftGraphOrgEntityProvider`
+allows to pass transformers for users, groups and the organization.
1. Create a transformer:
@@ -179,13 +145,17 @@ export async function myGroupTransformer(
}
```
-2. Configure the processor with the transformer:
+2. Add the transformer:
-```ts
-builder.addProcessor(
- MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, {
- logger: env.logger,
- groupTransformer: myGroupTransformer,
- }),
-);
+```diff
+ builder.addEntityProvider(
+ MicrosoftGraphOrgEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 5 },
+ timeout: { minutes: 3 },
+ }),
++ groupTransformer: myGroupTransformer,
+ }),
+ );
```
diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md
index 31a22b0bc4..a4083b1d9e 100644
--- a/plugins/catalog-backend-module-msgraph/api-report.md
+++ b/plugins/catalog-backend-module-msgraph/api-report.md
@@ -125,14 +125,14 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider {
static fromConfig(
configRoot: Config,
options: MicrosoftGraphOrgEntityProviderOptions,
- ): MicrosoftGraphOrgEntityProvider;
+ ): MicrosoftGraphOrgEntityProvider[];
// (undocumented)
getProviderName(): string;
read(options?: { logger?: Logger }): Promise;
}
-// @public
-export interface MicrosoftGraphOrgEntityProviderOptions {
+// @public @deprecated
+export interface MicrosoftGraphOrgEntityProviderLegacyOptions {
groupTransformer?: GroupTransformer;
id: string;
logger: Logger;
@@ -143,6 +143,19 @@ export interface MicrosoftGraphOrgEntityProviderOptions {
}
// @public
+export type MicrosoftGraphOrgEntityProviderOptions =
+ | MicrosoftGraphOrgEntityProviderLegacyOptions
+ | {
+ logger: Logger;
+ schedule: 'manual' | TaskRunner;
+ userTransformer?: UserTransformer | Record;
+ groupTransformer?: GroupTransformer | Record;
+ organizationTransformer?:
+ | OrganizationTransformer
+ | Record;
+ };
+
+// @public @deprecated
export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor {
constructor(options: {
providers: MicrosoftGraphProviderConfig[];
@@ -173,6 +186,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor {
// @public
export type MicrosoftGraphProviderConfig = {
+ id: string;
target: string;
authority?: string;
tenantId: string;
@@ -206,7 +220,7 @@ export type OrganizationTransformer = (
organization: MicrosoftGraph.Organization,
) => Promise;
-// @public
+// @public @deprecated
export function readMicrosoftGraphConfig(
config: Config,
): MicrosoftGraphProviderConfig[];
diff --git a/plugins/catalog-backend-module-msgraph/config.d.ts b/plugins/catalog-backend-module-msgraph/config.d.ts
index cf00713e72..564ccbb10a 100644
--- a/plugins/catalog-backend-module-msgraph/config.d.ts
+++ b/plugins/catalog-backend-module-msgraph/config.d.ts
@@ -25,6 +25,7 @@ export interface Config {
processors?: {
/**
* MicrosoftGraphOrgReaderProcessor configuration
+ * @deprecated Use `catalog.providers.microsoftGraphOrg` instead.
*/
microsoftGraphOrg?: {
/**
@@ -102,5 +103,173 @@ export interface Config {
}>;
};
};
+ /**
+ * List of provider-specific options and attributes
+ */
+ providers?: {
+ /**
+ * MicrosoftGraphOrgEntityProvider configuration.
+ */
+ microsoftGraphOrg?:
+ | {
+ /**
+ * The prefix of the target that this matches on, e.g.
+ * "https://graph.microsoft.com/v1.0", with no trailing slash.
+ */
+ target: string;
+ /**
+ * The auth authority used.
+ *
+ * Default value "https://login.microsoftonline.com"
+ */
+ authority?: string;
+ /**
+ * The tenant whose org data we are interested in.
+ */
+ tenantId: string;
+ /**
+ * The OAuth client ID to use for authenticating requests.
+ */
+ clientId: string;
+ /**
+ * The OAuth client secret to use for authenticating requests.
+ *
+ * @visibility secret
+ */
+ clientSecret: string;
+
+ user?: {
+ /**
+ * The "expand" argument to apply to users.
+ *
+ * E.g. "manager".
+ */
+ expand?: string;
+ /**
+ * The filter to apply to extract users.
+ *
+ * E.g. "accountEnabled eq true and userType eq 'member'"
+ */
+ filter?: string;
+ };
+
+ group?: {
+ /**
+ * The "expand" argument to apply to groups.
+ *
+ * E.g. "member".
+ */
+ expand?: string;
+ /**
+ * The filter to apply to extract groups.
+ *
+ * E.g. "securityEnabled eq false and mailEnabled eq true"
+ */
+ filter?: string;
+ /**
+ * The search criteria to apply to extract users by groups memberships.
+ *
+ * E.g. "\"displayName:-team\"" would only match groups which contain '-team'
+ */
+ search?: string;
+ /**
+ * The fields to be fetched on query.
+ *
+ * E.g. ["id", "displayName", "description"]
+ */
+ select?: string[];
+ };
+
+ userGroupMember?: {
+ /**
+ * The filter to apply to extract users by groups memberships.
+ *
+ * E.g. "displayName eq 'Backstage Users'"
+ */
+ filter?: string;
+ /**
+ * The search criteria to apply to extract groups.
+ *
+ * E.g. "\"displayName:-team\"" would only match groups which contain '-team'
+ */
+ search?: string;
+ };
+ }
+ | Record<
+ string,
+ {
+ /**
+ * The prefix of the target that this matches on, e.g.
+ * "https://graph.microsoft.com/v1.0", with no trailing slash.
+ */
+ target: string;
+ /**
+ * The auth authority used.
+ *
+ * Default value "https://login.microsoftonline.com"
+ */
+ authority?: string;
+ /**
+ * The tenant whose org data we are interested in.
+ */
+ tenantId: string;
+ /**
+ * The OAuth client ID to use for authenticating requests.
+ */
+ clientId: string;
+ /**
+ * The OAuth client secret to use for authenticating requests.
+ *
+ * @visibility secret
+ */
+ clientSecret: string;
+
+ user?: {
+ /**
+ * The filter to apply to extract users.
+ *
+ * E.g. "accountEnabled eq true and userType eq 'member'"
+ */
+ filter?: string;
+ };
+
+ group?: {
+ /**
+ * The filter to apply to extract groups.
+ *
+ * E.g. "securityEnabled eq false and mailEnabled eq true"
+ */
+ filter?: string;
+ /**
+ * The search criteria to apply to extract users by groups memberships.
+ *
+ * E.g. "\"displayName:-team\"" would only match groups which contain '-team'
+ */
+ search?: string;
+ /**
+ * The fields to be fetched on query.
+ *
+ * E.g. ["id", "displayName", "description"]
+ */
+ select?: string[];
+ };
+
+ userGroupMember?: {
+ /**
+ * The filter to apply to extract users by groups memberships.
+ *
+ * E.g. "displayName eq 'Backstage Users'"
+ */
+ filter?: string;
+ /**
+ * The search criteria to apply to extract groups.
+ *
+ * E.g. "\"displayName:-team\"" would only match groups which contain '-team'
+ */
+ search?: string;
+ };
+ }
+ >;
+ };
};
}
diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json
index cf777d982c..921d198b8b 100644
--- a/plugins/catalog-backend-module-msgraph/package.json
+++ b/plugins/catalog-backend-module-msgraph/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-msgraph",
"description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph",
- "version": "0.3.4-next.0",
+ "version": "0.4.0-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,10 +34,10 @@
},
"dependencies": {
"@azure/msal-node": "^1.1.0",
- "@backstage/backend-tasks": "^0.3.3-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
+ "@backstage/backend-tasks": "^0.3.3-next.2",
+ "@backstage/catalog-model": "^1.1.0-next.2",
"@backstage/config": "^1.0.1",
- "@backstage/plugin-catalog-backend": "^1.2.1-next.1",
+ "@backstage/plugin-catalog-backend": "^1.2.1-next.2",
"@microsoft/microsoft-graph-types": "^2.6.0",
"@types/node-fetch": "^2.5.12",
"lodash": "^4.17.21",
@@ -48,11 +48,11 @@
"qs": "^6.9.4"
},
"devDependencies": {
- "@backstage/backend-common": "^0.14.1-next.1",
- "@backstage/backend-test-utils": "^0.1.26-next.1",
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/backend-common": "^0.14.1-next.2",
+ "@backstage/backend-test-utils": "^0.1.26-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
"@types/lodash": "^4.14.151",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts
index e310fa544f..8239090249 100644
--- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts
+++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts
@@ -15,13 +15,14 @@
*/
import { ConfigReader } from '@backstage/config';
-import { readMicrosoftGraphConfig } from './config';
+import { readMicrosoftGraphConfig, readProviderConfigs } from './config';
describe('readMicrosoftGraphConfig', () => {
it('applies all of the defaults', () => {
const config = {
providers: [
{
+ id: 'target',
target: 'target',
tenantId: 'tenantId',
clientId: 'clientId',
@@ -32,6 +33,7 @@ describe('readMicrosoftGraphConfig', () => {
const actual = readMicrosoftGraphConfig(new ConfigReader(config));
const expected = [
{
+ id: 'target',
target: 'target',
tenantId: 'tenantId',
clientId: 'clientId',
@@ -48,6 +50,7 @@ describe('readMicrosoftGraphConfig', () => {
const config = {
providers: [
{
+ id: 'target',
target: 'target',
tenantId: 'tenantId',
clientId: 'clientId',
@@ -64,6 +67,7 @@ describe('readMicrosoftGraphConfig', () => {
const actual = readMicrosoftGraphConfig(new ConfigReader(config));
const expected = [
{
+ id: 'target',
target: 'target',
tenantId: 'tenantId',
clientId: 'clientId',
@@ -83,6 +87,7 @@ describe('readMicrosoftGraphConfig', () => {
const config = {
providers: [
{
+ id: 'target',
target: 'target',
tenantId: 'tenantId',
clientId: 'clientId',
@@ -100,6 +105,7 @@ describe('readMicrosoftGraphConfig', () => {
const config = {
providers: [
{
+ id: 'target',
target: 'target',
tenantId: 'tenantId',
clientId: 'clientId',
@@ -113,3 +119,128 @@ describe('readMicrosoftGraphConfig', () => {
expect(() => readMicrosoftGraphConfig(new ConfigReader(config))).toThrow();
});
});
+
+describe('readProviderConfigs', () => {
+ it('applies all of the defaults', () => {
+ const config = {
+ catalog: {
+ providers: {
+ microsoftGraphOrg: {
+ customProviderId: {
+ target: 'target',
+ tenantId: 'tenantId',
+ clientId: 'clientId',
+ clientSecret: 'clientSecret',
+ },
+ },
+ },
+ },
+ };
+ const actual = readProviderConfigs(new ConfigReader(config));
+ const expected = [
+ {
+ id: 'customProviderId',
+ target: 'target',
+ tenantId: 'tenantId',
+ clientId: 'clientId',
+ clientSecret: 'clientSecret',
+ authority: 'https://login.microsoftonline.com',
+ },
+ ];
+ expect(actual).toEqual(expected);
+ });
+
+ it('reads all the values', () => {
+ const config = {
+ catalog: {
+ providers: {
+ microsoftGraphOrg: {
+ customProviderId: {
+ target: 'target',
+ tenantId: 'tenantId',
+ clientId: 'clientId',
+ clientSecret: 'clientSecret',
+ authority: 'https://login.example.com/',
+ user: {
+ expand: 'manager',
+ filter: 'accountEnabled eq true',
+ },
+ group: {
+ expand: 'member',
+ filter: 'securityEnabled eq false',
+ select: ['id', 'displayName', 'description'],
+ },
+ },
+ },
+ },
+ },
+ };
+ const actual = readProviderConfigs(new ConfigReader(config));
+ const expected = [
+ {
+ id: 'customProviderId',
+ target: 'target',
+ tenantId: 'tenantId',
+ clientId: 'clientId',
+ clientSecret: 'clientSecret',
+ authority: 'https://login.example.com',
+ userExpand: 'manager',
+ userFilter: 'accountEnabled eq true',
+ groupExpand: 'member',
+ groupSelect: ['id', 'displayName', 'description'],
+ groupFilter: 'securityEnabled eq false',
+ },
+ ];
+ expect(actual).toEqual(expected);
+ });
+
+ it('should fail if both userFilter and userGroupMemberFilter are set', () => {
+ const config = {
+ catalog: {
+ providers: {
+ microsoftGraphOrg: {
+ customProviderId: {
+ target: 'target',
+ tenantId: 'tenantId',
+ clientId: 'clientId',
+ clientSecret: 'clientSecret',
+ authority: 'https://login.example.com/',
+ user: {
+ filter: 'accountEnabled eq true',
+ },
+ userGroupMember: {
+ filter: 'any',
+ },
+ },
+ },
+ },
+ },
+ };
+ expect(() => readProviderConfigs(new ConfigReader(config))).toThrow();
+ });
+
+ it('should fail if both userFilter and userGroupMemberSearch are set', () => {
+ const config = {
+ catalog: {
+ providers: {
+ microsoftGraphOrg: {
+ customProviderId: {
+ target: 'target',
+ tenantId: 'tenantId',
+ clientId: 'clientId',
+ clientSecret: 'clientSecret',
+ authority: 'https://login.example.com/',
+ user: {
+ filter: 'accountEnabled eq true',
+ },
+ userGroupMember: {
+ search: 'any',
+ },
+ },
+ },
+ },
+ },
+ };
+ expect(() => readProviderConfigs(new ConfigReader(config))).toThrow();
+ });
+});
diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts
index aa2f2d6ee2..30e3a9a4d2 100644
--- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts
+++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts
@@ -17,12 +17,21 @@
import { Config } from '@backstage/config';
import { trimEnd } from 'lodash';
+const DEFAULT_AUTHORITY = 'https://login.microsoftonline.com';
+const DEFAULT_PROVIDER_ID = 'default';
+const DEFAULT_TARGET = 'https://graph.microsoft.com/v1.0';
+
/**
* The configuration parameters for a single Microsoft Graph provider.
*
* @public
*/
export type MicrosoftGraphProviderConfig = {
+ /**
+ * Identifier of the provider which will be used i.e. at the location key for ingested entities.
+ */
+ id: string;
+
/**
* The prefix of the target that this matches on, e.g.
* "https://graph.microsoft.com/v1.0", with no trailing slash.
@@ -55,7 +64,7 @@ export type MicrosoftGraphProviderConfig = {
/**
* The "expand" argument to apply to users.
*
- * E.g. "manager"
+ * E.g. "manager".
*/
userExpand?: string;
/**
@@ -73,7 +82,7 @@ export type MicrosoftGraphProviderConfig = {
/**
* The "expand" argument to apply to groups.
*
- * E.g. "member"
+ * E.g. "member".
*/
groupExpand?: string;
/**
@@ -113,6 +122,7 @@ export type MicrosoftGraphProviderConfig = {
* @param config - The root of the msgraph config hierarchy
*
* @public
+ * @deprecated Replaced by not exported `readProviderConfigs` and kept for backwards compatibility only.
*/
export function readMicrosoftGraphConfig(
config: Config,
@@ -125,7 +135,7 @@ export function readMicrosoftGraphConfig(
const authority = providerConfig.getOptionalString('authority')
? trimEnd(providerConfig.getOptionalString('authority'), '/')
- : 'https://login.microsoftonline.com';
+ : DEFAULT_AUTHORITY;
const tenantId = providerConfig.getString('tenantId');
const clientId = providerConfig.getString('clientId');
const clientSecret = providerConfig.getString('clientSecret');
@@ -164,6 +174,7 @@ export function readMicrosoftGraphConfig(
}
providers.push({
+ id: target,
target,
authority,
tenantId,
@@ -183,3 +194,86 @@ export function readMicrosoftGraphConfig(
return providers;
}
+
+export function readProviderConfigs(
+ config: Config,
+): MicrosoftGraphProviderConfig[] {
+ const providersConfig = config.getOptionalConfig(
+ 'catalog.providers.microsoftGraphOrg',
+ );
+ if (!providersConfig) {
+ return [];
+ }
+
+ if (providersConfig.has('clientId')) {
+ // simple/single config variant
+ return [readProviderConfig(DEFAULT_PROVIDER_ID, providersConfig)];
+ }
+
+ return providersConfig.keys().map(id => {
+ const providerConfig = providersConfig.getConfig(id);
+
+ return readProviderConfig(id, providerConfig);
+ });
+}
+
+export function readProviderConfig(
+ id: string,
+ config: Config,
+): MicrosoftGraphProviderConfig {
+ const target = trimEnd(
+ config.getOptionalString('target') ?? DEFAULT_TARGET,
+ '/',
+ );
+ const authority = trimEnd(
+ config.getOptionalString('authority') ?? DEFAULT_AUTHORITY,
+ '/',
+ );
+
+ const clientId = config.getString('clientId');
+ const clientSecret = config.getString('clientSecret');
+ const tenantId = config.getString('tenantId');
+
+ const userExpand = config.getOptionalString('user.expand');
+ const userFilter = config.getOptionalString('user.filter');
+
+ const groupExpand = config.getOptionalString('group.expand');
+ const groupFilter = config.getOptionalString('group.filter');
+ const groupSearch = config.getOptionalString('group.search');
+ const groupSelect = config.getOptionalStringArray('group.select');
+
+ const userGroupMemberFilter = config.getOptionalString(
+ 'userGroupMember.filter',
+ );
+ const userGroupMemberSearch = config.getOptionalString(
+ 'userGroupMember.search',
+ );
+
+ if (userFilter && userGroupMemberFilter) {
+ throw new Error(
+ `userFilter and userGroupMemberFilter are mutually exclusive, only one can be specified.`,
+ );
+ }
+ if (userFilter && userGroupMemberSearch) {
+ throw new Error(
+ `userGroupMemberSearch cannot be specified when userFilter is defined.`,
+ );
+ }
+
+ return {
+ id,
+ target,
+ authority,
+ clientId,
+ clientSecret,
+ tenantId,
+ userExpand,
+ userFilter,
+ groupExpand,
+ groupFilter,
+ groupSearch,
+ groupSelect,
+ userGroupMemberFilter,
+ userGroupMemberSearch,
+ };
+}
diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts
index 456afda550..26b4f80765 100644
--- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts
+++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts
@@ -14,6 +14,7 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
+import { ConfigReader } from '@backstage/config';
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
@@ -78,19 +79,30 @@ describe('MicrosoftGraphOrgEntityProvider', () => {
],
});
+ const config = {
+ catalog: {
+ providers: {
+ microsoftGraphOrg: {
+ customProviderId: {
+ target: 'target',
+ tenantId: 'tenantId',
+ clientId: 'clientId',
+ clientSecret: 'clientSecret',
+ },
+ },
+ },
+ },
+ };
const entityProviderConnection: EntityProviderConnection = {
applyMutation: jest.fn(),
};
- const provider = new MicrosoftGraphOrgEntityProvider({
- id: 'test',
- logger: getVoidLogger(),
- provider: {
- target: 'https://example.com',
- tenantId: 'tenant',
- clientId: 'clientid',
- clientSecret: 'clientsecret',
+ const provider = MicrosoftGraphOrgEntityProvider.fromConfig(
+ new ConfigReader(config),
+ {
+ logger: getVoidLogger(),
+ schedule: 'manual',
},
- });
+ )[0];
provider.connect(entityProviderConnection);
@@ -104,8 +116,10 @@ describe('MicrosoftGraphOrgEntityProvider', () => {
kind: 'User',
metadata: {
annotations: {
- 'backstage.io/managed-by-location': 'msgraph:test/u1',
- 'backstage.io/managed-by-origin-location': 'msgraph:test/u1',
+ 'backstage.io/managed-by-location':
+ 'msgraph:customProviderId/u1',
+ 'backstage.io/managed-by-origin-location':
+ 'msgraph:customProviderId/u1',
},
name: 'u1',
},
@@ -113,7 +127,7 @@ describe('MicrosoftGraphOrgEntityProvider', () => {
memberOf: [],
},
},
- locationKey: 'msgraph-org-provider:test',
+ locationKey: 'msgraph-org-provider:customProviderId',
},
{
entity: {
@@ -121,8 +135,10 @@ describe('MicrosoftGraphOrgEntityProvider', () => {
kind: 'Group',
metadata: {
annotations: {
- 'backstage.io/managed-by-location': 'msgraph:test/g1',
- 'backstage.io/managed-by-origin-location': 'msgraph:test/g1',
+ 'backstage.io/managed-by-location':
+ 'msgraph:customProviderId/g1',
+ 'backstage.io/managed-by-origin-location':
+ 'msgraph:customProviderId/g1',
},
name: 'g1',
},
@@ -131,7 +147,7 @@ describe('MicrosoftGraphOrgEntityProvider', () => {
type: 'team',
},
},
- locationKey: 'msgraph-org-provider:test',
+ locationKey: 'msgraph-org-provider:customProviderId',
},
],
type: 'full',
diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts
index d96faf8e03..4a52ddc665 100644
--- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts
+++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts
@@ -40,13 +40,64 @@ import {
readMicrosoftGraphOrg,
UserTransformer,
} from '../microsoftGraph';
+import { readProviderConfigs } from '../microsoftGraph/config';
/**
* Options for {@link MicrosoftGraphOrgEntityProvider}.
*
* @public
*/
-export interface MicrosoftGraphOrgEntityProviderOptions {
+export type MicrosoftGraphOrgEntityProviderOptions =
+ | MicrosoftGraphOrgEntityProviderLegacyOptions
+ | {
+ /**
+ * The logger to use.
+ */
+ logger: Logger;
+
+ /**
+ * The refresh schedule to use.
+ *
+ * @remarks
+ *
+ * If you pass in 'manual', you are responsible for calling the `read` method
+ * manually at some interval.
+ *
+ * But more commonly you will pass in the result of
+ * {@link @backstage/backend-tasks#PluginTaskScheduler.createScheduledTaskRunner}
+ * to enable automatic scheduling of tasks.
+ */
+ schedule: 'manual' | TaskRunner;
+
+ /**
+ * The function that transforms a user entry in msgraph to an entity.
+ * Optionally, you can pass separate transformers per provider ID.
+ */
+ userTransformer?: UserTransformer | Record;
+
+ /**
+ * The function that transforms a group entry in msgraph to an entity.
+ * Optionally, you can pass separate transformers per provider ID.
+ */
+ groupTransformer?: GroupTransformer | Record;
+
+ /**
+ * The function that transforms an organization entry in msgraph to an entity.
+ * Optionally, you can pass separate transformers per provider ID.
+ */
+ organizationTransformer?:
+ | OrganizationTransformer
+ | Record;
+ };
+
+/**
+ * Legacy options for {@link MicrosoftGraphOrgEntityProvider}
+ * based on `catalog.processors.microsoftGraphOrg`.
+ *
+ * @public
+ * @deprecated This interface exists for backwards compatibility only and will be removed in the future.
+ */
+export interface MicrosoftGraphOrgEntityProviderLegacyOptions {
/**
* A unique, stable identifier for this provider.
*
@@ -57,7 +108,7 @@ export interface MicrosoftGraphOrgEntityProviderOptions {
/**
* The target that this provider should consume.
*
- * Should exactly match the "target" field of one of the providers
+ * Should exactly match the "target" field of one of the provider
* configuration entries.
*/
target: string;
@@ -110,7 +161,58 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider {
static fromConfig(
configRoot: Config,
options: MicrosoftGraphOrgEntityProviderOptions,
- ) {
+ ): MicrosoftGraphOrgEntityProvider[] {
+ if ('id' in options) {
+ return [
+ MicrosoftGraphOrgEntityProvider.fromLegacyConfig(configRoot, options),
+ ];
+ }
+
+ function getTransformer(
+ id: string,
+ transformers?: T | Record,
+ ): T | undefined {
+ if (['undefined', 'function'].includes(typeof transformers)) {
+ return transformers as T;
+ }
+
+ return (transformers as Record)[id];
+ }
+
+ return readProviderConfigs(configRoot).map(providerConfig => {
+ const provider = new MicrosoftGraphOrgEntityProvider({
+ id: providerConfig.id,
+ provider: providerConfig,
+ logger: options.logger,
+ userTransformer: getTransformer(
+ providerConfig.id,
+ options.userTransformer,
+ ),
+ groupTransformer: getTransformer(
+ providerConfig.id,
+ options.groupTransformer,
+ ),
+ organizationTransformer: getTransformer(
+ providerConfig.id,
+ options.organizationTransformer,
+ ),
+ });
+ provider.schedule(options.schedule);
+
+ return provider;
+ });
+ }
+
+ /**
+ * @deprecated Exists for backwards compatibility only and will be removed in the future.
+ */
+ private static fromLegacyConfig(
+ configRoot: Config,
+ options: MicrosoftGraphOrgEntityProviderLegacyOptions,
+ ): MicrosoftGraphOrgEntityProvider {
+ options.logger.warn(
+ 'Deprecated msgraph config "catalog.processors.microsoftGraphOrg" used. Use "catalog.providers.microsoftGraphOrg" instead. More info at https://github.com/backstage/backstage/blob/master/.changeset/long-bananas-rescue.md',
+ );
const config = configRoot.getOptionalConfig(
'catalog.processors.microsoftGraphOrg',
);
diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.test.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.test.ts
index 8236dc52e1..bcf76e9482 100644
--- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.test.ts
+++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.test.ts
@@ -38,6 +38,7 @@ describe('MicrosoftGraphOrgReaderProcessor', () => {
processor = new MicrosoftGraphOrgReaderProcessor({
providers: [
{
+ id: 'https://example.com',
target: 'https://example.com',
tenantId: 'tenant',
clientId: 'clientid',
diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts
index 5d0e6b2ec7..decd84ec1f 100644
--- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts
+++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts
@@ -33,9 +33,10 @@ import {
} from '../microsoftGraph';
/**
- * Extracts teams and users out of a the Microsoft Graph API.
+ * Extracts teams and users out of the Microsoft Graph API.
*
* @public
+ * @deprecated Use the MicrosoftGraphOrgEntityProvider instead.
*/
export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor {
private readonly providers: MicrosoftGraphProviderConfig[];
@@ -67,6 +68,9 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor {
groupTransformer?: GroupTransformer;
organizationTransformer?: OrganizationTransformer;
}) {
+ options.logger.warn(
+ 'MicrosoftGraphOrgReaderProcessor is deprecated. Please use MicrosoftGraphOrgEntityProvider instead. More info at https://github.com/backstage/backstage/blob/master/.changeset/long-bananas-rescue.md',
+ );
this.providers = options.providers;
this.logger = options.logger;
this.userTransformer = options.userTransformer;
diff --git a/plugins/catalog-backend-module-msgraph/src/processors/index.ts b/plugins/catalog-backend-module-msgraph/src/processors/index.ts
index 7bc3559c8b..7e74ca1d8b 100644
--- a/plugins/catalog-backend-module-msgraph/src/processors/index.ts
+++ b/plugins/catalog-backend-module-msgraph/src/processors/index.ts
@@ -15,5 +15,8 @@
*/
export { MicrosoftGraphOrgEntityProvider } from './MicrosoftGraphOrgEntityProvider';
-export type { MicrosoftGraphOrgEntityProviderOptions } from './MicrosoftGraphOrgEntityProvider';
+export type {
+ MicrosoftGraphOrgEntityProviderOptions,
+ MicrosoftGraphOrgEntityProviderLegacyOptions,
+} from './MicrosoftGraphOrgEntityProvider';
export { MicrosoftGraphOrgReaderProcessor } from './MicrosoftGraphOrgReaderProcessor';
diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md
index d98f5a95d0..657238efda 100644
--- a/plugins/catalog-backend-module-openapi/CHANGELOG.md
+++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-openapi
+## 0.1.0-next.1
+
+### Patch Changes
+
+- 4881dc4c84: Updated dependency `openapi-types` to `^12.0.0`.
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/plugin-catalog-backend@1.2.1-next.2
+ - @backstage/integration@1.2.2-next.2
+
## 0.1.0-next.0
### Minor Changes
diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json
index e2b3407bc0..0b9c24369c 100644
--- a/plugins/catalog-backend-module-openapi/package.json
+++ b/plugins/catalog-backend-module-openapi/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-openapi",
"description": "A Backstage catalog backend module that helps with OpenAPI specifications",
- "version": "0.1.0-next.0",
+ "version": "0.1.0-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,18 +34,18 @@
},
"dependencies": {
"@apidevtools/swagger-parser": "^10.1.0",
- "@backstage/backend-common": "^0.14.1-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
+ "@backstage/backend-common": "^0.14.1-next.2",
+ "@backstage/catalog-model": "^1.1.0-next.2",
"@backstage/config": "^1.0.1",
- "@backstage/integration": "^1.2.2-next.1",
- "@backstage/plugin-catalog-backend": "^1.2.1-next.1",
+ "@backstage/integration": "^1.2.2-next.2",
+ "@backstage/plugin-catalog-backend": "^1.2.1-next.2",
"winston": "^3.2.1",
"yaml": "^2.1.1"
},
"devDependencies": {
- "@backstage/backend-test-utils": "^0.1.26-next.1",
- "@backstage/cli": "^0.18.0-next.1",
- "openapi-types": "^11.0.1"
+ "@backstage/backend-test-utils": "^0.1.26-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
+ "openapi-types": "^12.0.0"
},
"files": [
"dist"
diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md
index 7d58cfda6e..a228308681 100644
--- a/plugins/catalog-backend/CHANGELOG.md
+++ b/plugins/catalog-backend/CHANGELOG.md
@@ -1,5 +1,24 @@
# @backstage/plugin-catalog-backend
+## 1.2.1-next.2
+
+### Patch Changes
+
+- 679b32172e: Updated dependency `knex` to `^2.0.0`.
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/backend-common@0.14.1-next.2
+ - @backstage/integration@1.2.2-next.2
+
## 1.2.1-next.1
### Patch Changes
diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json
index fa2d84e57e..ebed76ca90 100644
--- a/plugins/catalog-backend/package.json
+++ b/plugins/catalog-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend",
"description": "The Backstage backend plugin that provides the Backstage catalog",
- "version": "1.2.1-next.1",
+ "version": "1.2.1-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,12 +34,12 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
- "@backstage/backend-common": "^0.14.1-next.1",
+ "@backstage/backend-common": "^0.14.1-next.2",
"@backstage/catalog-client": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
"@backstage/config": "^1.0.1",
"@backstage/errors": "^1.1.0-next.0",
- "@backstage/integration": "^1.2.2-next.1",
+ "@backstage/integration": "^1.2.2-next.2",
"@backstage/plugin-catalog-common": "^1.0.4-next.0",
"@backstage/plugin-permission-common": "^0.6.3-next.0",
"@backstage/plugin-permission-node": "^0.6.3-next.1",
@@ -53,7 +53,7 @@
"express-promise-router": "^4.1.0",
"fast-json-stable-stringify": "^2.1.0",
"fs-extra": "10.1.0",
- "git-url-parse": "^11.6.0",
+ "git-url-parse": "^12.0.0",
"glob": "^7.1.6",
"knex": "^2.0.0",
"lodash": "^4.17.21",
@@ -68,8 +68,8 @@
"zod": "^3.11.6"
},
"devDependencies": {
- "@backstage/backend-test-utils": "^0.1.26-next.1",
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/backend-test-utils": "^0.1.26-next.2",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/plugin-permission-common": "^0.6.3-next.0",
"@backstage/plugin-search-backend-node": "0.6.3-next.1",
"@types/core-js": "^2.5.4",
@@ -78,7 +78,7 @@
"@types/supertest": "^2.0.8",
"@types/uuid": "^8.0.0",
"better-sqlite3": "^7.5.0",
- "msw": "^0.42.0",
+ "msw": "^0.43.0",
"supertest": "^6.1.3",
"wait-for-expect": "^3.0.2",
"luxon": "^2.0.2"
diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md
index 235434ff66..f497b35628 100644
--- a/plugins/catalog-graph/CHANGELOG.md
+++ b/plugins/catalog-graph/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-catalog-graph
+## 0.2.19-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+
## 0.2.19-next.1
### Patch Changes
diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json
index e2d8af6f46..c61d388f0b 100644
--- a/plugins/catalog-graph/package.json
+++ b/plugins/catalog-graph/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-graph",
- "version": "0.2.19-next.1",
+ "version": "0.2.19-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -25,11 +25,11 @@
},
"dependencies": {
"@backstage/catalog-client": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
@@ -45,10 +45,10 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
- "@backstage/plugin-catalog": "^1.3.1-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
+ "@backstage/plugin-catalog": "^1.4.0-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@backstage/types": "^1.0.0",
"@testing-library/jest-dom": "^5.10.1",
diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json
index c1ca2f9fa6..81b31ffe51 100644
--- a/plugins/catalog-graphql/package.json
+++ b/plugins/catalog-graphql/package.json
@@ -53,7 +53,7 @@
"@graphql-codegen/typescript": "^2.4.2",
"@graphql-codegen/typescript-resolvers": "^2.4.3",
"@graphql-tools/schema": "^8.3.1",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist"
diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md
index 6c306635e1..7de1bd72d0 100644
--- a/plugins/catalog-import/CHANGELOG.md
+++ b/plugins/catalog-import/CHANGELOG.md
@@ -1,5 +1,25 @@
# @backstage/plugin-catalog-import
+## 0.8.10-next.2
+
+### Patch Changes
+
+- e2d7b76f43: Upgrade git-url-parse to 12.0.0.
+
+ Motivation for upgrade is transitively upgrading parse-url which is vulnerable
+ to several CVEs detected by Snyk.
+
+ - SNYK-JS-PARSEURL-2935944
+ - SNYK-JS-PARSEURL-2935947
+ - SNYK-JS-PARSEURL-2936249
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/integration@1.2.2-next.2
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
## 0.8.10-next.1
### Patch Changes
diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json
index d170bf54f2..042e85f792 100644
--- a/plugins/catalog-import/package.json
+++ b/plugins/catalog-import/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-import",
"description": "A Backstage plugin the helps you import entities into your catalog",
- "version": "0.8.10-next.1",
+ "version": "0.8.10-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -35,19 +35,19 @@
},
"dependencies": {
"@backstage/catalog-client": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
"@backstage/config": "^1.0.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
"@backstage/errors": "^1.1.0-next.0",
- "@backstage/integration": "^1.2.2-next.1",
- "@backstage/integration-react": "^1.1.2-next.1",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
+ "@backstage/integration": "^1.2.2-next.2",
+ "@backstage/integration-react": "^1.1.2-next.2",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
"@octokit/rest": "^18.5.3",
- "git-url-parse": "^11.6.0",
+ "git-url-parse": "^12.0.0",
"js-base64": "^3.6.0",
"lodash": "^4.17.21",
"react-hook-form": "^7.12.2",
@@ -60,9 +60,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -70,7 +70,7 @@
"@testing-library/user-event": "^14.0.0",
"@types/jest": "^26.0.7",
"cross-fetch": "^3.1.5",
- "msw": "^0.42.0"
+ "msw": "^0.43.0"
},
"files": [
"dist",
diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md
index fb5bcc81c3..0df99a1bb9 100644
--- a/plugins/catalog-react/CHANGELOG.md
+++ b/plugins/catalog-react/CHANGELOG.md
@@ -1,5 +1,54 @@
# @backstage/plugin-catalog-react
+## 1.1.2-next.2
+
+### Patch Changes
+
+- be26d95141: Added new `EntityProcessingStatusPicker` that will filter for entities with orphans and/or errors.
+
+ If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this:
+
+ ```diff
+ ...
+ import {
+ CatalogFilterLayout,
+ EntityTypePicker,
+ UserListPicker,
+ EntityTagPicker
+ + EntityProcessingStatusPicker,
+ } from '@backstage/plugin-catalog-react';
+ ...
+ export const CustomCatalogPage = ({
+ columns,
+ actions,
+ initiallySelectedFilter = 'owned',
+ }: CatalogPageProps) => {
+ return (
+ ...
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ ...
+ };
+ ```
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/integration@1.2.2-next.2
+
## 1.1.2-next.1
### Patch Changes
diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json
index a28b8219be..3f3ee5f402 100644
--- a/plugins/catalog-react/package.json
+++ b/plugins/catalog-react/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-react",
"description": "A frontend library that helps other Backstage plugins interact with the catalog",
- "version": "1.1.2-next.1",
+ "version": "1.1.2-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -35,15 +35,15 @@
},
"dependencies": {
"@backstage/catalog-client": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
"@backstage/errors": "^1.1.0-next.0",
- "@backstage/integration": "^1.2.2-next.1",
+ "@backstage/integration": "^1.2.2-next.2",
"@backstage/plugin-catalog-common": "^1.0.4-next.0",
"@backstage/plugin-permission-common": "^0.6.3-next.0",
"@backstage/plugin-permission-react": "^0.4.3-next.0",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/theme": "^0.2.16-next.1",
"@backstage/types": "^1.0.0",
"@backstage/version-bridge": "^1.0.1",
"@material-ui/core": "^4.12.2",
@@ -63,7 +63,7 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
"@backstage/plugin-catalog-common": "^1.0.4-next.0",
"@backstage/plugin-scaffolder-common": "^1.1.2-next.0",
diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md
index 21e30517e2..5e00cd2661 100644
--- a/plugins/catalog/CHANGELOG.md
+++ b/plugins/catalog/CHANGELOG.md
@@ -1,5 +1,65 @@
# @backstage/plugin-catalog
+## 1.4.0-next.2
+
+### Minor Changes
+
+- a274fe38b9: Add hidden title column to catalog and API table to enable filtering by title.
+
+### Patch Changes
+
+- 258057a4b9: Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'.With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled.
+
+ The boolean input for "unregister entity" will be deprecated later in favour of the above three options.
+
+- 385389d23c: Updated to remove usage of the `bursts` object in the theme palette
+- be26d95141: Added new `EntityProcessingStatusPicker` that will filter for entities with orphans and/or errors.
+
+ If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this:
+
+ ```diff
+ ...
+ import {
+ CatalogFilterLayout,
+ EntityTypePicker,
+ UserListPicker,
+ EntityTagPicker
+ + EntityProcessingStatusPicker,
+ } from '@backstage/plugin-catalog-react';
+ ...
+ export const CustomCatalogPage = ({
+ columns,
+ actions,
+ initiallySelectedFilter = 'owned',
+ }: CatalogPageProps) => {
+ return (
+ ...
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ ...
+ };
+ ```
+
+- Updated dependencies
+ - @backstage/core-components@0.10.0-next.2
+ - @backstage/catalog-model@1.1.0-next.2
+ - @backstage/plugin-search-react@0.2.2-next.2
+ - @backstage/theme@0.2.16-next.1
+ - @backstage/plugin-catalog-react@1.1.2-next.2
+ - @backstage/integration-react@1.1.2-next.2
+
## 1.3.1-next.1
### Patch Changes
diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md
index 0d2d611412..bfdf62bdb0 100644
--- a/plugins/catalog/api-report.md
+++ b/plugins/catalog/api-report.md
@@ -136,6 +136,13 @@ export const CatalogTable: {
createSpecLifecycleColumn(): TableColumn;
createMetadataDescriptionColumn(): TableColumn;
createTagsColumn(): TableColumn;
+ createTitleColumn(
+ options?:
+ | {
+ hidden?: boolean | undefined;
+ }
+ | undefined,
+ ): TableColumn;
}>;
};
@@ -259,10 +266,10 @@ export interface EntityLayoutProps {
children?: React_2.ReactNode;
// (undocumented)
NotFoundComponent?: React_2.ReactNode;
- // Warning: (ae-forgotten-export) The symbol "contextMenuOptions" needs to be exported by the entry point index.d.ts
+ // Warning: (ae-forgotten-export) The symbol "EntityContextMenuOptions" needs to be exported by the entry point index.d.ts
//
// (undocumented)
- UNSTABLE_contextMenuOptions?: contextMenuOptions;
+ UNSTABLE_contextMenuOptions?: EntityContextMenuOptions;
// Warning: (ae-forgotten-export) The symbol "ExtraContextMenuItem" needs to be exported by the entry point index.d.ts
//
// (undocumented)
diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json
index 0dd7836c02..a294e64d29 100644
--- a/plugins/catalog/package.json
+++ b/plugins/catalog/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog",
"description": "The Backstage plugin for browsing the Backstage catalog",
- "version": "1.3.1-next.1",
+ "version": "1.4.0-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -35,16 +35,16 @@
},
"dependencies": {
"@backstage/catalog-client": "^1.0.4-next.1",
- "@backstage/catalog-model": "^1.1.0-next.1",
- "@backstage/core-components": "^0.9.6-next.1",
+ "@backstage/catalog-model": "^1.1.0-next.2",
+ "@backstage/core-components": "^0.10.0-next.2",
"@backstage/core-plugin-api": "^1.0.3",
"@backstage/errors": "^1.1.0-next.0",
- "@backstage/integration-react": "^1.1.2-next.1",
+ "@backstage/integration-react": "^1.1.2-next.2",
"@backstage/plugin-catalog-common": "^1.0.4-next.0",
- "@backstage/plugin-catalog-react": "^1.1.2-next.1",
+ "@backstage/plugin-catalog-react": "^1.1.2-next.2",
"@backstage/plugin-search-common": "^0.3.6-next.0",
- "@backstage/plugin-search-react": "^0.2.2-next.1",
- "@backstage/theme": "^0.2.16-next.0",
+ "@backstage/plugin-search-react": "^0.2.2-next.2",
+ "@backstage/theme": "^0.2.16-next.1",
"@backstage/types": "^1.0.0",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
@@ -61,9 +61,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
- "@backstage/cli": "^0.18.0-next.1",
+ "@backstage/cli": "^0.18.0-next.2",
"@backstage/core-app-api": "^1.0.4-next.0",
- "@backstage/dev-utils": "^1.0.4-next.1",
+ "@backstage/dev-utils": "^1.0.4-next.2",
"@backstage/plugin-permission-react": "^0.4.3-next.0",
"@backstage/test-utils": "^1.1.2-next.1",
"@testing-library/jest-dom": "^5.10.1",
diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx
index 94ae7c47f4..96937c52c2 100644
--- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx
+++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx
@@ -68,6 +68,7 @@ export const CatalogTable = (props: CatalogTableProps) => {
const defaultColumns: TableColumn[] = useMemo(() => {
return [
+ columnFactories.createTitleColumn({ hidden: true }),
columnFactories.createNameColumn({ defaultKind: filters.kind?.value }),
...createEntitySpecificColumns(),
columnFactories.createMetadataDescriptionColumn(),
diff --git a/plugins/catalog/src/components/CatalogTable/columns.tsx b/plugins/catalog/src/components/CatalogTable/columns.tsx
index 0fb91d4f3f..d8b52e276e 100644
--- a/plugins/catalog/src/components/CatalogTable/columns.tsx
+++ b/plugins/catalog/src/components/CatalogTable/columns.tsx
@@ -131,4 +131,14 @@ export const columnFactories = Object.freeze({
),
};
},
+ createTitleColumn(options?: {
+ hidden?: boolean;
+ }): TableColumn {
+ return {
+ title: 'Title',
+ field: 'entity.metadata.title',
+ hidden: options?.hidden,
+ searchable: true,
+ };
+ },
});
diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx
index eb920aaa20..0e981bb1fc 100644
--- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx
+++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx
@@ -42,7 +42,6 @@ function render(children: React.ReactNode) {
describe('ComponentContextMenu', () => {
it('should call onUnregisterEntity on button click', async () => {
const mockCallback = jest.fn();
-
await render(
{
expect(mockCallback).toBeCalled();
});
+ it('check Unregister entity button is disabled', async () => {
+ const mockCallback = jest.fn();
+
+ const { getByText } = await render(
+ {}}
+ />,
+ );
+
+ const button = await screen.findByTestId('menu-button');
+ expect(button).toBeInTheDocument();
+ fireEvent.click(button);
+
+ const unregister = await screen.getByText('Unregister entity');
+ expect(unregister).toBeInTheDocument();
+
+ const unregisterSpanItem = getByText(/Unregister entity/);
+ const unregisterMenuListItem =
+ unregisterSpanItem?.parentElement?.parentElement;
+ expect(unregisterMenuListItem).toHaveAttribute('aria-disabled');
+ });
+
it('should call onInspectEntity on button click', async () => {
const mockCallback = jest.fn();
diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx
index db50eeab84..41610ed13c 100644
--- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx
+++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx
@@ -24,7 +24,6 @@ import {
Popover,
} from '@material-ui/core';
import { makeStyles } from '@material-ui/core/styles';
-import CancelIcon from '@material-ui/icons/Cancel';
import BugReportIcon from '@material-ui/icons/BugReport';
import MoreVert from '@material-ui/icons/MoreVert';
import React, { useState } from 'react';
@@ -32,6 +31,7 @@ import { IconComponent } from '@backstage/core-plugin-api';
import { useEntityPermission } from '@backstage/plugin-catalog-react';
import { catalogEntityDeletePermission } from '@backstage/plugin-catalog-common';
import { BackstageTheme } from '@backstage/theme';
+import { UnregisterEntity, UnregisterEntityOptions } from './UnregisterEntity';
/** @public */
export type EntityContextMenuClassKey = 'button';
@@ -40,7 +40,7 @@ const useStyles = makeStyles(
(theme: BackstageTheme) => {
return {
button: {
- color: theme.palette.bursts.fontColor,
+ color: theme.page.fontColor,
},
};
},
@@ -55,14 +55,9 @@ interface ExtraContextMenuItem {
onClick: () => void;
}
-// unstable context menu option, eg: disable the unregister entity menu
-interface contextMenuOptions {
- disableUnregister: boolean;
-}
-
interface EntityContextMenuProps {
UNSTABLE_extraContextMenuItems?: ExtraContextMenuItem[];
- UNSTABLE_contextMenuOptions?: contextMenuOptions;
+ UNSTABLE_contextMenuOptions?: UnregisterEntityOptions;
onUnregisterEntity: () => void;
onInspectEntity: () => void;
}
@@ -79,6 +74,7 @@ export function EntityContextMenu(props: EntityContextMenuProps) {
const unregisterPermission = useEntityPermission(
catalogEntityDeletePermission,
);
+ const isAllowed = unregisterPermission.allowed;
const onOpen = (event: React.SyntheticEvent) => {
setAnchorEl(event.currentTarget);
@@ -106,11 +102,6 @@ export function EntityContextMenu(props: EntityContextMenuProps) {
,
];
- const disableUnregister =
- (!unregisterPermission.allowed ||
- UNSTABLE_contextMenuOptions?.disableUnregister) ??
- false;
-
return (
<>
{extraItems}
-
+