diff --git a/.changeset/beige-ghosts-enjoy.md b/.changeset/beige-ghosts-enjoy.md new file mode 100644 index 0000000000..49ae916939 --- /dev/null +++ b/.changeset/beige-ghosts-enjoy.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': minor +--- + +The `repo test` command will no longer default to watch mode if the `--since` flag is provided. diff --git a/.changeset/breezy-berries-yawn.md b/.changeset/breezy-berries-yawn.md new file mode 100644 index 0000000000..0ef4fa68e7 --- /dev/null +++ b/.changeset/breezy-berries-yawn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Add `overridableComponent` `BackstageTemplateStepperClassKey` to template stepper to enable custom styling diff --git a/.changeset/bright-mails-compare.md b/.changeset/bright-mails-compare.md new file mode 100644 index 0000000000..61d049576c --- /dev/null +++ b/.changeset/bright-mails-compare.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-search-backend-module-catalog': patch +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-search-backend-module-techdocs': patch +--- + +Remove extension points from `/alpha` export, they're available from the main package already diff --git a/.changeset/brown-hotels-move.md b/.changeset/brown-hotels-move.md new file mode 100644 index 0000000000..511ea9ee10 --- /dev/null +++ b/.changeset/brown-hotels-move.md @@ -0,0 +1,7 @@ +--- +'@backstage/backend-defaults': patch +'@backstage/plugin-catalog-backend-module-puppetdb': patch +'@backstage/plugin-scaffolder-react': patch +--- + +Small tweaks to API reports to make them valid diff --git a/.changeset/chilly-meals-sniff.md b/.changeset/chilly-meals-sniff.md new file mode 100644 index 0000000000..6776f93154 --- /dev/null +++ b/.changeset/chilly-meals-sniff.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-test-utils': patch +--- + +Disable the built-in `SignInPage` in `createExtensionTester` in order to not mess with existing tests diff --git a/.changeset/clever-rats-rush.md b/.changeset/clever-rats-rush.md new file mode 100644 index 0000000000..c34427f8f5 --- /dev/null +++ b/.changeset/clever-rats-rush.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Sensitive internal fields on `BackstageCredentials` objects are now defined as read-only properties in order to minimize risk of leakage. diff --git a/.changeset/crash-loop-baby.md b/.changeset/crash-loop-baby.md new file mode 100644 index 0000000000..4f629c7f92 --- /dev/null +++ b/.changeset/crash-loop-baby.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-app-api': patch +'@backstage/backend-defaults': patch +--- + +Plugin lifecycle shutdown hooks are now performed before root lifecycle shutdown hooks. diff --git a/.changeset/crash-loop-honey.md b/.changeset/crash-loop-honey.md new file mode 100644 index 0000000000..60f9f04600 --- /dev/null +++ b/.changeset/crash-loop-honey.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +The database manager now attempts to close any database connections in a root lifecycle shutdown hook. diff --git a/.changeset/crash-loop-yeah.md b/.changeset/crash-loop-yeah.md new file mode 100644 index 0000000000..098bc01bae --- /dev/null +++ b/.changeset/crash-loop-yeah.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +The task scheduler now attempts to abort any tasks if it detects that Backstage is being shut down. diff --git a/.changeset/create-app-1728387650.md b/.changeset/create-app-1728387650.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1728387650.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Bumped create-app version. diff --git a/.changeset/cuddly-stingrays-smell.md b/.changeset/cuddly-stingrays-smell.md new file mode 100644 index 0000000000..5a8a8ac236 --- /dev/null +++ b/.changeset/cuddly-stingrays-smell.md @@ -0,0 +1,18 @@ +--- +'@backstage/plugin-auth-backend-module-cloudflare-access-provider': patch +'@backstage/plugin-auth-backend-module-vmware-cloud-provider': patch +'@backstage/plugin-auth-backend-module-atlassian-provider': patch +'@backstage/plugin-auth-backend-module-bitbucket-provider': patch +'@backstage/plugin-auth-backend-module-microsoft-provider': patch +'@backstage/plugin-auth-backend-module-onelogin-provider': patch +'@backstage/plugin-auth-backend-module-aws-alb-provider': patch +'@backstage/plugin-auth-backend-module-gcp-iap-provider': patch +'@backstage/plugin-auth-backend-module-github-provider': patch +'@backstage/plugin-auth-backend-module-gitlab-provider': patch +'@backstage/plugin-auth-backend-module-google-provider': patch +'@backstage/plugin-auth-backend-module-oauth2-provider': patch +'@backstage/plugin-auth-backend-module-oidc-provider': patch +'@backstage/plugin-auth-backend-module-okta-provider': patch +--- + +Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. diff --git a/.changeset/curly-tomatoes-reply.md b/.changeset/curly-tomatoes-reply.md new file mode 100644 index 0000000000..386e2b6109 --- /dev/null +++ b/.changeset/curly-tomatoes-reply.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +handle step.if: false diff --git a/.changeset/cyan-suits-battle.md b/.changeset/cyan-suits-battle.md new file mode 100644 index 0000000000..ac8b9eb811 --- /dev/null +++ b/.changeset/cyan-suits-battle.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +The `scaffolder-module` template has been updated to use a more modern layout and new testing utilities for scaffolder actions. diff --git a/.changeset/dependabot-a3fd85a.md b/.changeset/dependabot-a3fd85a.md new file mode 100644 index 0000000000..8ff0c9dfa2 --- /dev/null +++ b/.changeset/dependabot-a3fd85a.md @@ -0,0 +1,7 @@ +--- +'@backstage/backend-app-api': patch +'@backstage/backend-defaults': patch +'@backstage/backend-test-utils': patch +--- + +build(deps): bump `cookie` from 0.6.0 to 0.7.0 diff --git a/.changeset/eighty-mice-turn.md b/.changeset/eighty-mice-turn.md new file mode 100644 index 0000000000..cec3835641 --- /dev/null +++ b/.changeset/eighty-mice-turn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Add tests for the `TemplateEditorToolbarTemplatesMenu` component. diff --git a/.changeset/eleven-beds-play.md b/.changeset/eleven-beds-play.md new file mode 100644 index 0000000000..fd51922cb4 --- /dev/null +++ b/.changeset/eleven-beds-play.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend': patch +--- + +Fix to schema to allow arbitrary query parameters. diff --git a/.changeset/few-hairs-compare.md b/.changeset/few-hairs-compare.md new file mode 100644 index 0000000000..48cd7b7f25 --- /dev/null +++ b/.changeset/few-hairs-compare.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': patch +--- + +GitLab MR: introduce 'skip' commit action. diff --git a/.changeset/flat-seals-type.md b/.changeset/flat-seals-type.md new file mode 100644 index 0000000000..9574c74fc9 --- /dev/null +++ b/.changeset/flat-seals-type.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-node': patch +--- + +Added a new `allowedDomains` option for the common `emailLocalPartMatchingUserEntityName` sign-in resolver. diff --git a/.changeset/fluffy-dogs-mate.md b/.changeset/fluffy-dogs-mate.md new file mode 100644 index 0000000000..cb7a78d0fb --- /dev/null +++ b/.changeset/fluffy-dogs-mate.md @@ -0,0 +1,8 @@ +--- +'@backstage/backend-dynamic-feature-service': patch +--- + +Enhance and simplify the activation of the dynamic plugins feature: + +- The dynamic plugins service (which implements the `DynamicPluginsProvider`) is restored, since it is required for plugins to depend on it in order to get the details of loaded dynamic plugins (possibly with loading errors to be surfaced in some UI). +- A new all-in-one feature loader (`dynamicPluginsFeatureLoader`) is provided that allows a 1-liner activation of both the dynamic features and additional services or plugins required to have the dynamic plugins work correctly with dynamic plugins config schemas. Previous service factories or feature loaders are deprecated. diff --git a/.changeset/fluffy-dolphins-battle.md b/.changeset/fluffy-dolphins-battle.md new file mode 100644 index 0000000000..b247d549e5 --- /dev/null +++ b/.changeset/fluffy-dolphins-battle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Add tests for the new pages header navigation. diff --git a/.changeset/funny-dancers-drum.md b/.changeset/funny-dancers-drum.md new file mode 100644 index 0000000000..3f57244a1a --- /dev/null +++ b/.changeset/funny-dancers-drum.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-techdocs': minor +--- + +Refactor TechDocs collator, enable clients to override the mkdocs search index transformer, so that per document properties (like tags) can be added to Backstage search index. diff --git a/.changeset/good-eels-drive.md b/.changeset/good-eels-drive.md new file mode 100644 index 0000000000..c90a1263ec --- /dev/null +++ b/.changeset/good-eels-drive.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +It is possible to define a custom error element to be shown when sign in fails diff --git a/.changeset/good-trainers-appear.md b/.changeset/good-trainers-appear.md new file mode 100644 index 0000000000..3bce8c86bd --- /dev/null +++ b/.changeset/good-trainers-appear.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +The check for `react-dom/client` will now properly always run from the target directory. diff --git a/.changeset/gorgeous-months-fix.md b/.changeset/gorgeous-months-fix.md new file mode 100644 index 0000000000..f248afad46 --- /dev/null +++ b/.changeset/gorgeous-months-fix.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Fix behavior of scaffolder entity pickers (EntityPicker, MultiEntityPicker, MyGroupsPicker) to not auto-fill and disable the field if there is only a single value option and the field is not required. diff --git a/.changeset/green-berries-wave.md b/.changeset/green-berries-wave.md new file mode 100644 index 0000000000..574d329488 --- /dev/null +++ b/.changeset/green-berries-wave.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +feat: experimentally support using rspack instead under `EXPERIMENTAL_RSPACK` env flag diff --git a/.changeset/kind-avocados-speak.md b/.changeset/kind-avocados-speak.md new file mode 100644 index 0000000000..b57d271907 --- /dev/null +++ b/.changeset/kind-avocados-speak.md @@ -0,0 +1,8 @@ +--- +'@backstage/backend-dynamic-feature-service': patch +--- + +Enhance the API of the `DynamicPluginProvider` (available as a service) to: + +- expose the new `getScannedPackage()` method that returns the `ScannedPluginPackage` from which a given plugin has been loaded, +- add an optional `includeFailed` argument in the plugins list retrieval methods, to include the plugins that could be successfully loaded (`false` by default). diff --git a/.changeset/lemon-badgers-share.md b/.changeset/lemon-badgers-share.md new file mode 100644 index 0000000000..c00b43c403 --- /dev/null +++ b/.changeset/lemon-badgers-share.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-dynamic-feature-service': patch +--- + +Allow passing an async module loader in the `DynamicPluginsFeatureLoaderOptions`. diff --git a/.changeset/lemon-pumpkins-lick.md b/.changeset/lemon-pumpkins-lick.md new file mode 100644 index 0000000000..361c5769e3 --- /dev/null +++ b/.changeset/lemon-pumpkins-lick.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch +'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch +'@backstage/plugin-scaffolder-backend-module-gitlab': patch +'@backstage/plugin-scaffolder-backend-module-rails': patch +'@backstage/plugin-scaffolder-backend-module-sentry': patch +'@backstage/plugin-scaffolder-backend-module-yeoman': patch +'@backstage/plugin-search-backend-module-stack-overflow-collator': patch +--- + +Updated installation instructions in README to not include `/alpha`. diff --git a/.changeset/lovely-jokes-breathe.md b/.changeset/lovely-jokes-breathe.md new file mode 100644 index 0000000000..f5782832eb --- /dev/null +++ b/.changeset/lovely-jokes-breathe.md @@ -0,0 +1,32 @@ +--- +'@backstage/plugin-search-backend-module-elasticsearch': minor +'@backstage/plugin-scaffolder-backend': minor +'@backstage/plugin-techdocs-backend': minor +'@backstage/plugin-catalog-backend': minor +'@backstage/plugin-search-backend': minor +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +'@backstage/plugin-events-backend-module-bitbucket-cloud': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-search-backend-module-techdocs': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-events-backend-module-aws-sqs': patch +'@backstage/plugin-search-backend-module-catalog': patch +'@backstage/plugin-search-backend-module-explore': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-events-backend-module-gerrit': patch +'@backstage/plugin-events-backend-module-azure': patch +'@backstage/plugin-catalog-backend-module-aws': patch +'@backstage/plugin-search-backend-module-pg': patch +'@backstage/plugin-user-settings-backend': patch +'@backstage/plugin-kubernetes-backend': patch +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-events-backend': patch +'@backstage/plugin-proxy-backend': patch +'@backstage/plugin-app-backend': patch +--- + +The export for the new backend system at the `/alpha` export is now also available via the main entry point, which means that you can remove the `/alpha` suffix from the import. diff --git a/.changeset/lucky-mugs-drive.md b/.changeset/lucky-mugs-drive.md new file mode 100644 index 0000000000..f3253d834a --- /dev/null +++ b/.changeset/lucky-mugs-drive.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Remove some dependencies that aren't required anymore diff --git a/.changeset/mighty-forks-exercise.md b/.changeset/mighty-forks-exercise.md new file mode 100644 index 0000000000..2ec5b90fa2 --- /dev/null +++ b/.changeset/mighty-forks-exercise.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Added migration `20241003170511_alter_target_in_locations.js` to change the target column in the `locations` table to TEXT type. +Added a hash for the key column in the `refresh_keys` table. diff --git a/.changeset/mighty-terms-peel.md b/.changeset/mighty-terms-peel.md new file mode 100644 index 0000000000..8804ee4556 --- /dev/null +++ b/.changeset/mighty-terms-peel.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +The backend plugin template for the `new` command has been updated to provide more guidance and use a more modern structure. diff --git a/.changeset/nasty-geese-repeat.md b/.changeset/nasty-geese-repeat.md new file mode 100644 index 0000000000..b000231057 --- /dev/null +++ b/.changeset/nasty-geese-repeat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Turn down the logging level on most "all is well" type log messages diff --git a/.changeset/neat-geckos-end.md b/.changeset/neat-geckos-end.md new file mode 100644 index 0000000000..02a281b447 --- /dev/null +++ b/.changeset/neat-geckos-end.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Tweaked the new package feature detection to not be active when building backend packages. diff --git a/.changeset/olive-walls-wave.md b/.changeset/olive-walls-wave.md new file mode 100644 index 0000000000..f7dc5434a6 --- /dev/null +++ b/.changeset/olive-walls-wave.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-home': minor +--- + +**BREAKING** Implement usage of unused `limit` query parameter in visits API `.list()` function diff --git a/.changeset/pink-sheep-dress.md b/.changeset/pink-sheep-dress.md new file mode 100644 index 0000000000..a4182efde2 --- /dev/null +++ b/.changeset/pink-sheep-dress.md @@ -0,0 +1,8 @@ +--- +'@backstage/repo-tools': patch +--- + +Fix issues with warnings in API reports not being checked or reported. + +Due to the recent version bump of API Extractor you may now see a lot of `ae-undocumented` warnings, +these can be ignored using the `-o` option, for example, `backstage-repo-tools api-reports -o ae-undocumented,ae-wrong-input-file-type`. diff --git a/.changeset/popular-items-retire.md b/.changeset/popular-items-retire.md new file mode 100644 index 0000000000..2b737d9710 --- /dev/null +++ b/.changeset/popular-items-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': patch +--- + +The `createMockDirectory` cleanup strategy has been changed, no longer requiring it to be called outside individual tests. diff --git a/.changeset/pre.json b/.changeset/pre.json index 1d47683d1b..7444e718da 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -1,5 +1,5 @@ { - "mode": "pre", + "mode": "exit", "tag": "next", "initialVersions": { "example-app": "0.2.101", @@ -195,24 +195,37 @@ "@internal/scaffolder": "0.0.1" }, "changesets": [ + "angry-cycles-call", "angry-mayflies-collect", "angry-windows-decide", "big-rules-nail", "breezy-bulldogs-smell", "brown-frogs-walk", + "calm-owls-move", "chair-fairs-drive", "chilled-dolphins-join", + "chilled-melons-smash", "clever-paws-stare", "cold-nails-rescue", + "crash-loop-baby", + "crash-loop-honey", + "crash-loop-yeah", "create-app-1727774359", + "create-app-1728387650", + "cuddly-stingrays-smell", "curly-foxes-brake", + "curly-tomatoes-reply", "cyan-cooks-sing", "cyan-peaches-lay", "cyan-vans-study", + "dependabot-a3fd85a", "dry-frogs-drum", "early-drinks-kneel", "early-sloths-cross", + "eight-clocks-complain", "eight-steaks-chew", + "eighty-mice-turn", + "eleven-beds-play", "eleven-pugs-hear", "fair-chairs-drive", "famous-bobcats-remain", @@ -220,15 +233,23 @@ "five-gorillas-pay", "five-turkeys-taste", "flat-eels-exist", + "flat-seals-type", + "fluffy-dolphins-battle", "fluffy-pears-cry", "four-moons-watch", + "friendly-coins-approve", "friendly-cougars-return", "funny-rocks-train", "fuzzy-elephants-tease", "giant-kiwis-retire", "gold-pots-end", + "great-eagles-repair", "green-bottles-live", + "green-cooks-sort", "happy-ligers-think", + "healthy-shoes-judge", + "healthy-years-search", + "heavy-ties-tell", "honest-impalas-rescue", "hungry-buckets-repair", "large-hats-reply", @@ -236,27 +257,57 @@ "light-rats-travel", "long-humans-hunt", "loud-hotels-tan", + "lovely-bees-walk", "nasty-lamps-greet", + "neat-geckos-end", "nice-badgers-travel", + "olive-walls-wave", "polite-days-flash", + "poor-dodos-wait", + "pretty-buses-repair", "pretty-plants-hammer", + "purple-toys-heal", "quiet-dingos-bathe", + "quiet-needles-impress", + "rare-crabs-cheat", + "rare-rabbits-flow", "renovate-156753b", + "renovate-7874fad", + "renovate-85a184e", + "renovate-87a3bd2", + "renovate-9f7136b", + "renovate-f88b005", "rich-deers-attend", "rich-needles-collect", + "rotten-camels-deny", "rude-apricots-eat", + "sharp-lamps-fix", "shy-olives-swim", + "shy-plants-retire", + "silly-geckos-learn", + "silly-readers-build", + "slimy-ravens-end", "slow-gorillas-thank", "slow-trees-compare", + "small-donkeys-attack", + "smart-jobs-sit", "sour-grapes-trade", "sour-phones-fix", + "stale-ravens-clap", "stale-roses-serve", "strange-bees-attack", "strong-monkeys-melt", "sweet-chicken-smash", + "ten-apes-turn", + "ten-rings-look", + "thick-tables-give", "thirty-pets-fry", + "thirty-pianos-mix", "tiny-pugs-kick", + "tough-fireants-itch", "tough-pillows-sip", + "tricky-shoes-lie", + "twenty-cups-knock", "two-plums-fail", "weak-bottles-cross" ] diff --git a/.changeset/pretty-pans-exist.md b/.changeset/pretty-pans-exist.md new file mode 100644 index 0000000000..e9ccdda0e0 --- /dev/null +++ b/.changeset/pretty-pans-exist.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-app': patch +--- + +Added missing default `SignInPageExtension` which by default uses guest auth, missing `ApiExtensions` for `scmAuth` diff --git a/.changeset/purple-toys-heal.md b/.changeset/purple-toys-heal.md new file mode 100644 index 0000000000..4a57dca64f --- /dev/null +++ b/.changeset/purple-toys-heal.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-vmware-cloud-provider': minor +--- + +**BREAKING**: The `profileEmailMatchingUserEntityEmail` sign-in resolver has been removed as it was using an insecure fallback for resolving user identities. See https://backstage.io/docs/auth/identity-resolver#sign-in-without-users-in-the-catalog for how to create a custom sign-in resolver if needed as a replacement. diff --git a/.changeset/quiet-islands-learn.md b/.changeset/quiet-islands-learn.md new file mode 100644 index 0000000000..7e2ad6bdf1 --- /dev/null +++ b/.changeset/quiet-islands-learn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Add configuration parameters for deferred stitcher diff --git a/.changeset/quiet-lions-lie.md b/.changeset/quiet-lions-lie.md new file mode 100644 index 0000000000..4aa6567005 --- /dev/null +++ b/.changeset/quiet-lions-lie.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Scaffolder task routes require read permission to access. The tasks list option in the scaffolder page context menu only shows with permission. diff --git a/.changeset/quiet-needles-impress.md b/.changeset/quiet-needles-impress.md new file mode 100644 index 0000000000..a79fe97b91 --- /dev/null +++ b/.changeset/quiet-needles-impress.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': minor +--- + +declare correct type (number) for publish:gitlab output.projectId diff --git a/.changeset/real-rockets-divide.md b/.changeset/real-rockets-divide.md new file mode 100644 index 0000000000..2506a89f22 --- /dev/null +++ b/.changeset/real-rockets-divide.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': patch +--- + +Minor doc string changes diff --git a/.changeset/real-tigers-punch.md b/.changeset/real-tigers-punch.md new file mode 100644 index 0000000000..c5597e50da --- /dev/null +++ b/.changeset/real-tigers-punch.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Updated the Vite implementation behind the `EXPERIMENTAL_VITE` flag to work with more recent versions of Backstage. diff --git a/.changeset/renovate-6eaf36e.md b/.changeset/renovate-6eaf36e.md new file mode 100644 index 0000000000..e4533da674 --- /dev/null +++ b/.changeset/renovate-6eaf36e.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-home-react': patch +'@backstage/plugin-home': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Updated dependency `@rjsf/utils` to `5.21.2`. +Updated dependency `@rjsf/core` to `5.21.2`. +Updated dependency `@rjsf/material-ui` to `5.21.2`. +Updated dependency `@rjsf/validator-ajv8` to `5.21.2`. diff --git a/.changeset/renovate-85a184e.md b/.changeset/renovate-85a184e.md new file mode 100644 index 0000000000..91b575e6db --- /dev/null +++ b/.changeset/renovate-85a184e.md @@ -0,0 +1,15 @@ +--- +'@backstage/backend-defaults': patch +'@backstage/cli': patch +'@backstage/integration': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-techdocs-module-addons-contrib': patch +'@backstage/plugin-techdocs-node': patch +'@backstage/plugin-techdocs': patch +--- + +Updated dependency `git-url-parse` to `^15.0.0`. diff --git a/.changeset/renovate-966d123.md b/.changeset/renovate-966d123.md new file mode 100644 index 0000000000..c3f868cee9 --- /dev/null +++ b/.changeset/renovate-966d123.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Updated dependency `@useoptic/optic` to `^1.0.0`. diff --git a/.changeset/renovate-9f7136b.md b/.changeset/renovate-9f7136b.md new file mode 100644 index 0000000000..a1efc81de7 --- /dev/null +++ b/.changeset/renovate-9f7136b.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-explore': patch +--- + +Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.6`. diff --git a/.changeset/renovate-cc4bfa7.md b/.changeset/renovate-cc4bfa7.md new file mode 100644 index 0000000000..b3434c8127 --- /dev/null +++ b/.changeset/renovate-cc4bfa7.md @@ -0,0 +1,5 @@ +--- +'@backstage/codemods': patch +--- + +Updated dependency `@types/jscodeshift` to `^0.12.0`. diff --git a/.changeset/renovate-d7e90e4.md b/.changeset/renovate-d7e90e4.md new file mode 100644 index 0000000000..58c24b2ddf --- /dev/null +++ b/.changeset/renovate-d7e90e4.md @@ -0,0 +1,6 @@ +--- +'@backstage/cli': patch +'@backstage/plugin-scaffolder-backend': patch +--- + +Updated dependency `esbuild` to `^0.24.0`. diff --git a/.changeset/renovate-f88b005.md b/.changeset/renovate-f88b005.md new file mode 100644 index 0000000000..b62080e8da --- /dev/null +++ b/.changeset/renovate-f88b005.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-kubernetes-cluster': patch +'@backstage/plugin-kubernetes-react': patch +'@backstage/plugin-kubernetes': patch +--- + +Updated dependency `@kubernetes-models/apimachinery` to `^2.0.0`. diff --git a/.changeset/rotten-rockets-deny.md b/.changeset/rotten-rockets-deny.md new file mode 100644 index 0000000000..58dec57c32 --- /dev/null +++ b/.changeset/rotten-rockets-deny.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Running `repo lint` with the `--successCache` flag now respects `.gitinore`, and it ignores projects without a `lint` script. diff --git a/.changeset/shaggy-weeks-hunt.md b/.changeset/shaggy-weeks-hunt.md new file mode 100644 index 0000000000..2b007f6944 --- /dev/null +++ b/.changeset/shaggy-weeks-hunt.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Tweak `Dockerfile` to fix deprecated syntax. diff --git a/.changeset/silly-geckos-learn.md b/.changeset/silly-geckos-learn.md new file mode 100644 index 0000000000..53d4301b5c --- /dev/null +++ b/.changeset/silly-geckos-learn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-user-settings': patch +--- + +`useUserProfile` will now use the user's picture stored in the catalog as a fallback if the identity provider doesn't return a picture. diff --git a/.changeset/silly-ligers-tan.md b/.changeset/silly-ligers-tan.md new file mode 100644 index 0000000000..6b9097497d --- /dev/null +++ b/.changeset/silly-ligers-tan.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Adds the ability to disable catalog processing `catalog.processingInterval: false` in `app-config` diff --git a/.changeset/silver-comics-attend.md b/.changeset/silver-comics-attend.md new file mode 100644 index 0000000000..f13553b53f --- /dev/null +++ b/.changeset/silver-comics-attend.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Fix for backend shutdown hanging during local development due to SQLite connection shutdown never resolving. diff --git a/.changeset/slimy-ravens-end.md b/.changeset/slimy-ravens-end.md new file mode 100644 index 0000000000..65e02079b1 --- /dev/null +++ b/.changeset/slimy-ravens-end.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-techdocs': minor +'@backstage/theme': minor +--- + +Adds support for custom background colors in code blocks and inline code within TechDocs. diff --git a/.changeset/slow-walls-report.md b/.changeset/slow-walls-report.md new file mode 100644 index 0000000000..e5ab380006 --- /dev/null +++ b/.changeset/slow-walls-report.md @@ -0,0 +1,13 @@ +--- +'@backstage/backend-defaults': patch +--- + +The default root HTTP service implementation will now pretty-print JSON responses in development. + +If you are overriding the `rootHttpRouterServiceFactory` with a `configure` function that doesn't call `applyDefaults`, you can introduce this functionality by adding the following snippet inside `configure`: + +```ts +if (process.env.NODE_ENV === 'development') { + app.set('json spaces', 2); +} +``` diff --git a/.changeset/small-donkeys-attack.md b/.changeset/small-donkeys-attack.md index 116cc611b5..ecfc969452 100644 --- a/.changeset/small-donkeys-attack.md +++ b/.changeset/small-donkeys-attack.md @@ -2,6 +2,6 @@ '@backstage/cli': patch --- -Added a new `--successCache` option to the `backstage-cli repo lint` command. The cache keeps track of successful lint runs and avoids re-running linting of individual packages if they haven't changed. This option is primarily intended to be used in CI. +Added a new `--successCache` option to the `backstage-cli repo test` and `backstage-cli repo lint` commands. The cache keeps track of successful runs and avoids re-running for individual packages if they haven't changed. This option is intended only to be used in CI. -In addition a `--successCacheDir` option has also been added to be able to override the default cache directory. +In addition a `--successCacheDir ` option has also been added to be able to override the default cache directory. diff --git a/.changeset/smart-jobs-sit.md b/.changeset/smart-jobs-sit.md new file mode 100644 index 0000000000..edd21e67b5 --- /dev/null +++ b/.changeset/smart-jobs-sit.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-openapi-utils': minor +--- + +Improved support for OpenAPI validation during Jest tests. Now, OpenAPI validation can happen as you are writing your Jest tests - you no longer have to run `repo schema openapi test`. diff --git a/.changeset/stale-ravens-clap.md b/.changeset/stale-ravens-clap.md new file mode 100644 index 0000000000..3abb16a04d --- /dev/null +++ b/.changeset/stale-ravens-clap.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Update catalog search table in transaction diff --git a/.changeset/ten-apes-turn.md b/.changeset/ten-apes-turn.md new file mode 100644 index 0000000000..750f48beba --- /dev/null +++ b/.changeset/ten-apes-turn.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Disabled parsing of input source maps in the SWC transform for Jest. diff --git a/.changeset/ten-rings-look.md b/.changeset/ten-rings-look.md new file mode 100644 index 0000000000..d3f6e059bd --- /dev/null +++ b/.changeset/ten-rings-look.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-client': patch +--- + +Add missing doc string to API diff --git a/.changeset/thin-chairs-ring.md b/.changeset/thin-chairs-ring.md new file mode 100644 index 0000000000..104c78a96d --- /dev/null +++ b/.changeset/thin-chairs-ring.md @@ -0,0 +1,14 @@ +--- +'@backstage/test-utils': minor +'@backstage/frontend-test-utils': patch +--- + +Added a `mockApis` export, which will replace the `MockX` API implementation classes and their related types. This is analogous with the backend's `mockServices`. + +**DEPRECATED** several old helpers: + +- Deprecated `MockAnalyticsApi`, please use `mockApis.analytics` instead. +- Deprecated `MockConfigApi`, please use `mockApis.config` instead. +- Deprecated `MockPermissionApi`, please use `mockApis.permission` instead. +- Deprecated `MockStorageApi`, please use `mockApis.storage` instead. +- Deprecated `MockTranslationApi`, please use `mockApis.translation` instead. diff --git a/.changeset/thin-doors-rule.md b/.changeset/thin-doors-rule.md new file mode 100644 index 0000000000..20823bb79f --- /dev/null +++ b/.changeset/thin-doors-rule.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-plugin-api': patch +--- + +Fixing issue with types for `ParamKeys` leading to type mismatches across versions diff --git a/.changeset/violet-beds-promise.md b/.changeset/violet-beds-promise.md new file mode 100644 index 0000000000..b5369d4c56 --- /dev/null +++ b/.changeset/violet-beds-promise.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-auth-node': patch +--- + +Fix authentication error handling using redirect flow via `enableExperimentalRedirectFlow` config. If an error is caught during authentication, the user is redirected back to app origin with `error` query parameter containing the error message. diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml index e28f147706..038061adac 100644 --- a/.github/workflows/api-breaking-changes-comment.yml +++ b/.github/workflows/api-breaking-changes-comment.yml @@ -90,7 +90,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4 # Identify comment to be updated - name: Find comment for API Changes diff --git a/.github/workflows/api-breaking-changes.yml b/.github/workflows/api-breaking-changes.yml index 3e27955f8a..62195b155e 100644 --- a/.github/workflows/api-breaking-changes.yml +++ b/.github/workflows/api-breaking-changes.yml @@ -18,7 +18,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: # Fetch the commit that's merged into the base rather than the target ref # This will let us diff only the contents of the PR, without fetching more history @@ -46,7 +46,7 @@ jobs: cat ${{ github.event_path }} > event.json - name: Upload Artifacts - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 with: name: preview-spec path: | diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index 1f07a848fb..a0c0e44902 100644 --- a/.github/workflows/automate_changeset_feedback.yml +++ b/.github/workflows/automate_changeset_feedback.yml @@ -27,7 +27,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: # Fetch the commit that's merged into the base rather than the target ref # This will let us diff only the contents of the PR, without fetching more history diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 4ab75b816f..4b388d7850 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -28,7 +28,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: '${{ github.event.pull_request.merge_commit_sha }}' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index abe36f40de..a50be35023 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 @@ -68,7 +68,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 @@ -209,7 +209,7 @@ jobs: INTEGRATION_TEST_AZURE_TOKEN: ${{ secrets.INTEGRATION_TEST_AZURE_TOKEN }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: fetch master branch run: git fetch origin master @@ -233,11 +233,20 @@ jobs: - name: verify release run: node scripts/verify-release.js + # Use the lower-level cache actions for the success cache, so that we can store the cache even on failed builds + - name: restore backstage-cli cache + uses: actions/cache/restore@v4 + with: + path: .cache/backstage-cli + key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }} + restore-keys: | + ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli- + - name: lint changed packages - run: yarn backstage-cli repo lint --since origin/master --successCache + run: yarn backstage-cli repo lint --since origin/master --successCache --successCacheDir .cache/backstage-cli - name: test changed packages - run: yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --since origin/master + run: yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --since origin/master --successCache --successCacheDir .cache/backstage-cli env: BACKSTAGE_TEST_DISABLE_DOCKER: 1 BACKSTAGE_TEST_DATABASE_POSTGRES16_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres16.ports[5432] }} @@ -245,6 +254,14 @@ jobs: BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING: mysql://root:root@localhost:${{ job.services.mysql8.ports[3306] }}/ignored BACKSTAGE_TEST_CACHE_REDIS7_CONNECTION_STRING: redis://localhost:${{ job.services.redis.ports[6379] }} + # Always save success cache even if there were failures, that way it can be used in re-triggered builds + - name: save backstage-cli cache + uses: actions/cache/save@v4 + if: always() + with: + path: .cache/backstage-cli + key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }} + # We run the test cases before verifying the specs to prevent any failing tests from causing errors. - name: verify openapi specs against test cases run: yarn backstage-repo-tools repo schema openapi test diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index a45c9c35bd..d5934e8ad8 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -25,7 +25,7 @@ jobs: egress-policy: audit - name: checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: path: backstage ref: ${{ github.event.client_payload.version && env.RELEASE_VERSION || github.ref }} diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index 6bf1b74f50..92c5f28498 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -54,7 +54,7 @@ jobs: result-encoding: string - name: checkout latest release - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: refs/tags/${{ steps.find-release.outputs.result }} @@ -73,7 +73,7 @@ jobs: run: yarn build:api-docs - name: upload API reference - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 with: name: stable-reference path: docs/reference/ @@ -96,7 +96,7 @@ jobs: egress-policy: audit - name: checkout master - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: use node.js 18.x uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 @@ -113,7 +113,7 @@ jobs: run: yarn build:api-docs - name: upload API reference - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 with: name: next-reference path: docs/reference/ @@ -130,7 +130,7 @@ jobs: working-directory: storybook - name: storybook upload - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 with: name: storybook path: storybook/dist/ @@ -170,7 +170,7 @@ jobs: # Stable docs - name: checkout latest release - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: ref: refs/tags/${{ needs.stable.outputs.release }} @@ -198,7 +198,7 @@ jobs: # Next docs - name: checkout master - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: clean: false diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 073f210384..bd00c2055d 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -68,7 +68,7 @@ jobs: INTEGRATION_TEST_AZURE_TOKEN: ${{ secrets.INTEGRATION_TEST_AZURE_TOKEN }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 @@ -93,8 +93,16 @@ jobs: - name: validate config run: yarn backstage-cli config:check --lax + - name: backstage-cli cache + uses: actions/cache@v4 + with: + path: .cache/backstage-cli + key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }} + restore-keys: | + ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli- + - name: lint - run: yarn backstage-cli repo lint --successCache + run: yarn backstage-cli repo lint --successCache --successCacheDir .cache/backstage-cli - name: type checking and declarations run: yarn tsc:full @@ -107,12 +115,7 @@ jobs: - name: test (and upload coverage) run: | - yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --coverage - # bash <(curl -s https://codecov.io/bash) - # Upload code coverage for some specific flags. Also see .codecov.yml - # bash <(curl -s https://codecov.io/bash) -f packages/core-app-api/coverage/* -F core-app-api - # bash <(curl -s https://codecov.io/bash) -f packages/core-components/coverage/* -F core-components - # bash <(curl -s https://codecov.io/bash) -f packages/core-plugin-api/coverage/* -F core-plugin-api + yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --coverage --successCache --successCacheDir .cache/backstage-cli env: BACKSTAGE_TEST_DISABLE_DOCKER: 1 BACKSTAGE_TEST_DATABASE_POSTGRES16_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres16.ports[5432] }} diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml index 7e3faaebc5..9ebfbee3b0 100644 --- a/.github/workflows/pr-review-comment-trigger.yaml +++ b/.github/workflows/pr-review-comment-trigger.yaml @@ -30,7 +30,7 @@ jobs: run: | mkdir -p ./pr echo $PR_NUMBER > ./pr/pr_number - - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: pr_number-${{ github.event.pull_request.number }} path: pr/ diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 53489d8c0e..23799a9a6b 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -34,7 +34,7 @@ jobs: egress-policy: audit - name: 'Checkout code' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: persist-credentials: false @@ -58,7 +58,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: 'Upload artifact' - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index f59eb048e0..2aa84bb208 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -14,7 +14,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: # Fetch changes to previous commit - required for 'only_changed' in Prettier action fetch-depth: 0 diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index adf39be8df..a89ab7629a 100644 --- a/.github/workflows/sync_dependabot-changesets.yml +++ b/.github/workflows/sync_dependabot-changesets.yml @@ -16,7 +16,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 2 ref: ${{ github.head_ref }} diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index 87a8837c48..4b209739c7 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -13,7 +13,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: # 'v' prefix is added here for the tag, we keep it out of the manifest logic ref: v${{ github.event.client_payload.version }} @@ -35,7 +35,7 @@ jobs: # Checkout backstage/versions into /backstage/versions, which is where store the output - name: Checkout versions - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: repository: backstage/versions path: versions diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index 200bc6eaaa..1c9b4a6186 100644 --- a/.github/workflows/sync_renovate-changesets.yml +++ b/.github/workflows/sync_renovate-changesets.yml @@ -16,7 +16,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 2 ref: ${{ github.head_ref }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 9c709508b3..1390b4ec61 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -16,7 +16,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: use node.js 18.x uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index 1b48930410..f746a8c339 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -29,7 +29,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Monitor and Synchronize Snyk Policies uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master with: diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index aac606ae90..77fb5f951e 100644 --- a/.github/workflows/sync_version-packages.yml +++ b/.github/workflows/sync_version-packages.yml @@ -18,7 +18,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 20000 fetch-tags: true diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index cfeb8ba51f..29ff740f68 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -24,7 +24,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Use Node.js 18.x uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index 63ba85906e..c77b65929b 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -47,7 +47,7 @@ jobs: egress-policy: audit - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml index 8e2ae20596..176136f821 100644 --- a/.github/workflows/verify_docs-quality.yml +++ b/.github/workflows/verify_docs-quality.yml @@ -16,7 +16,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 # Vale does not support file excludes, so we use the script to generate a list of files instead # The action also does not allow args or a local config file to be passed in, so the files array diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 69a92abb9a..0c487429e9 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -45,7 +45,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Configure Git run: | diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index 15bb9b3479..f6b300af7e 100644 --- a/.github/workflows/verify_e2e-techdocs.yml +++ b/.github/workflows/verify_e2e-techdocs.yml @@ -34,7 +34,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 with: python-version: '3.9' diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index 911698867c..b6bfef51e5 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -42,7 +42,7 @@ jobs: git config --global core.autocrlf false git config --global core.eol lf - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Configure Git run: | diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml index 8b3bfc9b13..5deaeafeaf 100644 --- a/.github/workflows/verify_fossa.yml +++ b/.github/workflows/verify_fossa.yml @@ -19,7 +19,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Install Fossa run: "curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | bash" diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 5527953767..1d6aac21ca 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -28,7 +28,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: use node.js 18.x uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 diff --git a/.github/workflows/verify_microsite_accessibility.yml b/.github/workflows/verify_microsite_accessibility.yml index 350c46309e..6626f4def9 100644 --- a/.github/workflows/verify_microsite_accessibility.yml +++ b/.github/workflows/verify_microsite_accessibility.yml @@ -19,7 +19,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Use Node.js 18.x uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 458ef69690..3f7b2e4a5b 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -32,7 +32,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: fetch-depth: 0 # Required to retrieve git history @@ -51,7 +51,7 @@ jobs: - run: yarn build-storybook - - uses: chromaui/action@f4e60a7072abcac4203f4ca50613f28e199a52ba # v11 + - uses: chromaui/action@bbbf288765438d5fd2be13e1d80d542a39e74108 # v11 with: token: ${{ secrets.GITHUB_TOKEN }} # projectToken intentionally shared to allow collaborators to run Chromatic on forks diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index 80db28c2e1..d184bdca08 100644 --- a/.github/workflows/verify_windows.yml +++ b/.github/workflows/verify_windows.yml @@ -33,7 +33,7 @@ jobs: with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 @@ -55,7 +55,7 @@ jobs: run: yarn lint:type-deps - name: test - run: yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M + run: yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --successCache env: BACKSTAGE_TEST_DISABLE_DOCKER: 1 diff --git a/docs/accessibility/index.md b/docs/accessibility/index.md index 021c8309be..4073afcf4c 100644 --- a/docs/accessibility/index.md +++ b/docs/accessibility/index.md @@ -58,6 +58,6 @@ If your Backstage plugin lives outside of the [Backstage main repository](https: ### Report identified issues -It’s important to remember that automated checks can only catch a small number of accessibility issues, therefore we also encourage you to conduct manual testing of your plugins using Assistive technology (screen readers, alternative navigation, and screen magnifiers are a few examples). +It’s important to remember that automated checks can only catch a small number of accessibility issues, therefore, we also encourage you to conduct manual testing of your plugins using Assistive technology (screen readers, alternative navigation, and screen magnifiers are a few examples). If you have identified accessibility issues and don’t have time to contribute a fix, please open an issue over at [Backstage Issues](https://github.com/backstage/backstage/issues) to let us know. diff --git a/docs/auth/atlassian/provider.md b/docs/auth/atlassian/provider.md index 96271f04a0..f4793d4f51 100644 --- a/docs/auth/atlassian/provider.md +++ b/docs/auth/atlassian/provider.md @@ -49,9 +49,7 @@ auth: scope: ${AUTH_ATLASSIAN_SCOPES} signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/atlassian/provider#resolvers for more resolvers - resolver: usernameMatchingUserEntityName ``` diff --git a/docs/auth/aws-alb/provider.md b/docs/auth/aws-alb/provider.md index a3974c895e..8ce1eba5ab 100644 --- a/docs/auth/aws-alb/provider.md +++ b/docs/auth/aws-alb/provider.md @@ -25,9 +25,8 @@ auth: region: 'us-west-2' signIn: resolvers: - # typically you would pick one of these + # See https://backstage.io/docs/auth/aws-alb/provider#resolvers for more resolvers - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName ``` Ensure that you have set the signer correctly. It is also recommended that you restrict your target groups' security policy to only accept connections from that ALB. diff --git a/docs/auth/bitbucket/provider.md b/docs/auth/bitbucket/provider.md index 1ca35437ba..e58ad622fc 100644 --- a/docs/auth/bitbucket/provider.md +++ b/docs/auth/bitbucket/provider.md @@ -39,11 +39,8 @@ auth: clientSecret: ${AUTH_BITBUCKET_CLIENT_SECRET} signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/bitbucket/provider#resolvers for more resolvers - resolver: userIdMatchingUserEntityAnnotation - - resolver: usernameMatchingUserEntityAnnotation ``` The Bitbucket provider is a structure with two configuration keys: diff --git a/docs/auth/cloudflare/provider.md b/docs/auth/cloudflare/provider.md index a1946580a7..224a64f056 100644 --- a/docs/auth/cloudflare/provider.md +++ b/docs/auth/cloudflare/provider.md @@ -41,8 +41,8 @@ auth: # This picks what sign in resolver(s) you want to use. signIn: resolvers: + # See https://backstage.io/docs/auth/cloudflare/provider#resolvers for more resolvers - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName ``` This config section must be in place for the provider to load at all. diff --git a/docs/auth/github/provider.md b/docs/auth/github/provider.md index 76b63c6617..3b61815017 100644 --- a/docs/auth/github/provider.md +++ b/docs/auth/github/provider.md @@ -51,8 +51,7 @@ auth: # enterpriseInstanceUrl: ${AUTH_GITHUB_ENTERPRISE_INSTANCE_URL} signIn: resolvers: - # Matches the GitHub username with the Backstage user entity name. - # See https://backstage.io/docs/auth/github/provider#resolvers for more resolvers. + # See https://backstage.io/docs/auth/github/provider#resolvers for more resolvers - resolver: usernameMatchingUserEntityName ``` diff --git a/docs/auth/gitlab/provider.md b/docs/auth/gitlab/provider.md index 4f5339f5b9..5241481463 100644 --- a/docs/auth/gitlab/provider.md +++ b/docs/auth/gitlab/provider.md @@ -46,9 +46,7 @@ auth: # callbackUrl: https://${BASE_URL}/api/auth/gitlab/handler/frame signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/gitlab/provider#resolvers for more resolvers - resolver: usernameMatchingUserEntityName ``` diff --git a/docs/auth/google/gcp-iap-auth.md b/docs/auth/google/gcp-iap-auth.md index 298f212399..6fe8b56d9e 100644 --- a/docs/auth/google/gcp-iap-auth.md +++ b/docs/auth/google/gcp-iap-auth.md @@ -29,9 +29,7 @@ auth: jwtHeader: x-custom-header # Optional: Only if you are using a custom header for the IAP JWT signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/google/gcp-iap-auth#resolvers for more resolvers - resolver: emailMatchingUserEntityAnnotation ``` diff --git a/docs/auth/google/provider.md b/docs/auth/google/provider.md index b19d21d63f..109c2ddd9f 100644 --- a/docs/auth/google/provider.md +++ b/docs/auth/google/provider.md @@ -44,9 +44,7 @@ auth: clientSecret: ${AUTH_GOOGLE_CLIENT_SECRET} signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/google/provider#resolvers for more resolvers - resolver: emailMatchingUserEntityAnnotation ``` diff --git a/docs/auth/identity-resolver.md b/docs/auth/identity-resolver.md index d6b377d990..293300f429 100644 --- a/docs/auth/identity-resolver.md +++ b/docs/auth/identity-resolver.md @@ -70,6 +70,14 @@ always be full entity references, as opposed to shorthands like just `jane` or ## Sign-in Resolvers +:::warning +Be careful when configuring Sign-in resolvers, as they are part of determining who +has access to your Backstage instance, and with what identity. Always only configure +**a single sign-in resolver for one of your auth providers**. The only reason to have +more sign-in resolvers is if you want to allow your users to sign in to Backstage in +multiple ways, but it increases the risk of account hijacking. +::: + Signing in a user into Backstage requires a mapping of the user identity from the third-party auth provider to a Backstage user identity. This mapping can vary quite a lot between different organizations and auth providers, and because of that there's @@ -112,19 +120,38 @@ auth: signIn: resolvers: - resolver: usernameMatchingUserEntityName - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName ``` -Note that in this instance it lists several resolvers, which means that the -framework will try them one by one until one succeeds. If none of them do, the -sign in attempt is rejected. - The list of available resolvers is different for each provider, since they often depend on the information model returned from the upstream provider service. Consult the documentation of the respective provider to find the list. -In the example above `emailMatchingUserEntityProfileEmail` and `emailLocalPartMatchingUserEntityName` are common to all auth providers and `usernameMatchingUserEntityName` is specific to GitHub. +In the example above, the `usernameMatchingUserEntityName` is specific to the +GitHub provider, but you could also choose to use the +`emailMatchingUserEntityProfileEmail` or `emailLocalPartMatchingUserEntityName` +resolvers, which are common to all auth providers. + +:::warning +When using the `emailLocalPartMatchingUserEntityName` resolver it is strongly +recommended to set the `allowedDomains` option to ensure that only authorized users +are able to sign-in. +::: + +If you are using the `emailLocalPartMatchingUserEntityName` resolver, it is +recommended to also set the `allowedDomains` option, for example: + +```yaml title="Within the provider configuration" +auth: + providers: + github: + development: + ... + signIn: + resolvers: + - resolver: emailLocalPartMatchingUserEntityName + allowedDomains: + - acme.org +``` ### Building Custom Resolvers @@ -160,8 +187,6 @@ auth: signIn: resolvers: - resolver: usernameMatchingUserEntityName - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName /* highlight-remove-end */ ``` @@ -318,6 +343,12 @@ async signInResolver({ profile: { email} }, ctx) { ### Sign-In without Users in the Catalog +:::warning +Signing in users without verifying that they exist in the catalog can be +dangerous. Take care to ensure that your custom resolvers only allow expected +users to sign in, for example by checking email domains. +::: + While populating the catalog with organizational data unlocks more powerful ways to browse your software ecosystem, it might not always be a viable or prioritized option. However, even if you do not have user entities populated in your catalog, you diff --git a/docs/auth/microsoft/azure-easyauth.md b/docs/auth/microsoft/azure-easyauth.md index c2a6eab218..52c61a0d86 100644 --- a/docs/auth/microsoft/azure-easyauth.md +++ b/docs/auth/microsoft/azure-easyauth.md @@ -66,9 +66,7 @@ auth: azureEasyAuth: signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/microsoft/easy-auth#resolvers for more resolvers - resolver: idMatchingUserEntityAnnotation ``` diff --git a/docs/auth/microsoft/provider.md b/docs/auth/microsoft/provider.md index f20e17ea6c..74416f853e 100644 --- a/docs/auth/microsoft/provider.md +++ b/docs/auth/microsoft/provider.md @@ -69,10 +69,7 @@ auth: domainHint: ${AZURE_TENANT_ID} signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName - - resolver: emailMatchingUserEntityAnnotation + # See https://backstage.io/docs/auth/microsoft/provider#resolvers for more resolvers - resolver: userIdMatchingUserEntityAnnotation ``` diff --git a/docs/auth/oauth2-proxy/provider.md b/docs/auth/oauth2-proxy/provider.md index 84e2b307e6..2fa027e0ad 100644 --- a/docs/auth/oauth2-proxy/provider.md +++ b/docs/auth/oauth2-proxy/provider.md @@ -31,9 +31,7 @@ auth: oauth2Proxy: signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/oauth2-proxy/provider#resolvers for more resolvers - resolver: forwardedUserMatchingUserEntityName ``` diff --git a/docs/auth/oidc.md b/docs/auth/oidc.md index 4040a272b4..6d2a937320 100644 --- a/docs/auth/oidc.md +++ b/docs/auth/oidc.md @@ -156,8 +156,6 @@ auth: # ... signIn: resolvers: - # typically you would pick one of these - - resolver: emailLocalPartMatchingUserEntityName - resolver: emailMatchingUserEntityProfileEmail ``` diff --git a/docs/auth/okta/provider.md b/docs/auth/okta/provider.md index 83352aaa0d..abc6231839 100644 --- a/docs/auth/okta/provider.md +++ b/docs/auth/okta/provider.md @@ -49,9 +49,7 @@ auth: additionalScopes: ${AUTH_OKTA_ADDITIONAL_SCOPES} # Optional signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/okta/provider#resolvers for more resolvers - resolver: emailMatchingUserEntityAnnotation ``` diff --git a/docs/auth/onelogin/provider.md b/docs/auth/onelogin/provider.md index 002445a9d1..edceb1de62 100644 --- a/docs/auth/onelogin/provider.md +++ b/docs/auth/onelogin/provider.md @@ -40,9 +40,7 @@ auth: issuer: https://.onelogin.com/oidc/2 signIn: resolvers: - # typically you would pick one of these - - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName + # See https://backstage.io/docs/auth/onelogin/provider#resolvers for more resolvers - resolver: usernameMatchingUserEntityName ``` diff --git a/docs/auth/vmware-cloud/provider.md b/docs/auth/vmware-cloud/provider.md index ac2cf3ee92..d654331178 100644 --- a/docs/auth/vmware-cloud/provider.md +++ b/docs/auth/vmware-cloud/provider.md @@ -49,10 +49,8 @@ auth: organizationId: ${ORG_ID} signIn: resolvers: - # typically you would pick one of these + # See https://backstage.io/docs/auth/vmware-cloud/provider#resolvers for more resolvers - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName - - resolver: vmwareCloudSignInResolvers ``` Where `APP_ID` refers to the ID retrieved when creating the OAuth App, and @@ -76,7 +74,6 @@ This provider includes several resolvers out of the box that you can use: - `emailMatchingUserEntityProfileEmail`: Matches the email address from the auth provider with the User entity that has a matching `spec.profile.email`. If no match is found it will throw a `NotFoundError`. - `emailLocalPartMatchingUserEntityName`: Matches the [local part](https://en.wikipedia.org/wiki/Email_address#Local-part) of the email address from the auth provider with the User entity that has a matching `name`. If no match is found it will throw a `NotFoundError`. -- `vmwareCloudSignInResolvers`: Matches the email address from the auth provider with the User entity that has a matching `spec.profile.email`. If no match is found it will sign in the user without associating with a catalog user. :::note Note diff --git a/docs/backend-system/architecture/02-backends.md b/docs/backend-system/architecture/02-backends.md index 4afdeea560..1310453a3f 100644 --- a/docs/backend-system/architecture/02-backends.md +++ b/docs/backend-system/architecture/02-backends.md @@ -21,7 +21,7 @@ import scaffolderPlugin from '@backstage/plugin-scaffolder-backend'; const backend = createBackend(); // Install desired features -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); // Features can also be installed using an explicit reference backend.add(scaffolderPlugin); diff --git a/docs/backend-system/architecture/07-feature-loaders.md b/docs/backend-system/architecture/07-feature-loaders.md index cf52a1feb3..43954ec443 100644 --- a/docs/backend-system/architecture/07-feature-loaders.md +++ b/docs/backend-system/architecture/07-feature-loaders.md @@ -24,10 +24,10 @@ A feature loader can simply return a list of features to be installed: export default createBackendFeatureLoader({ loader() { return [ - import('@backstage/plugin-search-backend/alpha'), - import('@backstage/plugin-search-backend-module-catalog/alpha'), - import('@backstage/plugin-search-backend-module-explore/alpha'), - import('@backstage/plugin-search-backend-module-techdocs/alpha'), + import('@backstage/plugin-search-backend'), + import('@backstage/plugin-search-backend-module-catalog'), + import('@backstage/plugin-search-backend-module-explore'), + import('@backstage/plugin-search-backend-module-techdocs'), ]; }, }); @@ -64,10 +64,10 @@ export default createBackendFeatureLoader({ *loader({ config }) { // Example of a custom config flag to enable search if (config.getOptionalString('customFeatureToggle.search')) { - yield import('@backstage/plugin-search-backend/alpha'); - yield import('@backstage/plugin-search-backend-module-catalog/alpha'); - yield import('@backstage/plugin-search-backend-module-explore/alpha'); - yield import('@backstage/plugin-search-backend-module-techdocs/alpha'); + yield import('@backstage/plugin-search-backend'); + yield import('@backstage/plugin-search-backend-module-catalog'); + yield import('@backstage/plugin-search-backend-module-explore'); + yield import('@backstage/plugin-search-backend-module-techdocs'); } }, }); @@ -84,16 +84,16 @@ export default createBackendFeatureLoader({ const localMetadata = await readMetadataFromDisk(); if (localMetadata.enableSearch) { - yield import('@backstage/plugin-search-backend/alpha'); - yield import('@backstage/plugin-search-backend-module-catalog/alpha'); + yield import('@backstage/plugin-search-backend'); + yield import('@backstage/plugin-search-backend-module-catalog'); const remoteMetadata = await fetchMetadata(); if (remoteMetadata.enableExplore) { - yield import('@backstage/plugin-search-backend-module-explore/alpha'); + yield import('@backstage/plugin-search-backend-module-explore'); } if (remoteMetadata.enableTechDocs) { - yield import('@backstage/plugin-search-backend-module-techdocs/alpha'); + yield import('@backstage/plugin-search-backend-module-techdocs'); } } }, diff --git a/docs/backend-system/building-backends/01-index.md b/docs/backend-system/building-backends/01-index.md index 2fb89e45af..ec95e57973 100644 --- a/docs/backend-system/building-backends/01-index.md +++ b/docs/backend-system/building-backends/01-index.md @@ -26,9 +26,9 @@ import { createBackend } from '@backstage/backend-defaults'; // Omitted in the e const backend = createBackend(); -backend.add(import('@backstage/plugin-app-backend/alpha')); -backend.add(import('@backstage/plugin-catalog-backend/alpha')); -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-app-backend')); +backend.add(import('@backstage/plugin-catalog-backend')); +backend.add(import('@backstage/plugin-scaffolder-backend')); backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); @@ -126,8 +126,8 @@ You can now trim down the `src/index.ts` files to only include the plugins and m ```ts const backend = createBackend(); -backend.add(import('@backstage/plugin-app-backend/alpha')); -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-app-backend')); +backend.add(import('@backstage/plugin-catalog-backend')); backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); @@ -139,7 +139,7 @@ And `backend-b`, don't forget to clean up dependencies in `package.json` as well ```ts const backend = createBackend(); -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-scaffolder-backend')); backend.start(); ``` diff --git a/docs/backend-system/building-backends/08-migrating.md b/docs/backend-system/building-backends/08-migrating.md index 188cd4f26f..71cccab784 100644 --- a/docs/backend-system/building-backends/08-migrating.md +++ b/docs/backend-system/building-backends/08-migrating.md @@ -237,7 +237,7 @@ be used in its new form. ```ts title="packages/backend/src/index.ts" const backend = createBackend(); /* highlight-add-next-line */ -backend.add(import('@backstage/plugin-app-backend/alpha')); +backend.add(import('@backstage/plugin-app-backend')); ``` If you need to override the app package name, which otherwise defaults to `"app"`, @@ -252,7 +252,7 @@ A basic installation of the catalog plugin looks as follows. ```ts title="packages/backend/src/index.ts" const backend = createBackend(); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); @@ -277,9 +277,9 @@ For `AwsS3DiscoveryProcessor`, first migrate to `AwsS3EntityProvider`. To migrate `AwsS3EntityProvider` to the new backend system, add a reference to the `@backstage/plugin-catalog-backend-module-aws` module. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-aws/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-aws')); /* highlight-add-end */ ``` @@ -306,9 +306,9 @@ For `AzureDevOpsDiscoveryProcessor`, first migrate to `AzureDevOpsEntityProvider To migrate `AzureDevOpsEntityProvider` to the new backend system, add a reference to the `@backstage/plugin-catalog-backend-module-azure` module. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-azure/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-azure')); /* highlight-add-end */ ``` @@ -340,11 +340,9 @@ For `BitbucketDiscoveryProcessor`, migrate to `BitbucketCloudEntityProvider` or To migrate `BitbucketCloudEntityProvider` to the new backend system, add a reference to the `@backstage/plugin-catalog-backend-module-bitbucket-cloud` module. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add( - import('@backstage/plugin-catalog-backend-module-bitbucket-cloud/alpha'), -); +backend.add(import('@backstage/plugin-catalog-backend-module-bitbucket-cloud')); /* highlight-add-end */ ``` @@ -367,10 +365,10 @@ catalog: To migrate `BitbucketServerEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-bitbucket-server`. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ backend.add( - import('@backstage/plugin-catalog-backend-module-bitbucket-server/alpha'), + import('@backstage/plugin-catalog-backend-module-bitbucket-server'), ); /* highlight-add-end */ ``` @@ -396,7 +394,7 @@ catalog: To migrate `GkeEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-gcp`. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ backend.add(import('@backstage/plugin-catalog-backend-module-gcp')); /* highlight-add-end */ @@ -409,9 +407,9 @@ Configuration in app-config.yaml remains the same. To migrate `GerritEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-gerrit`. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-gerrit/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-gerrit')); /* highlight-add-end */ ``` @@ -438,9 +436,9 @@ For `GithubDiscoveryProcessor`, `GithubMultiOrgReaderProcessor` and `GithubOrgRe To migrate `GithubEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-github`. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-github/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-github')); /* highlight-add-end */ ``` @@ -463,7 +461,7 @@ catalog: To migrate `GithubMultiOrgEntityProvider` or `GithubOrgEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-github-org`. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ backend.add(import('@backstage/plugin-catalog-backend-module-github-org')); /* highlight-add-end */ @@ -581,9 +579,9 @@ For `MicrosoftGraphOrgReaderProcessor`, first migrate to `MicrosoftGraphOrgEntit To migrate `MicrosoftGraphOrgEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-msgraph`. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-msgraph/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-msgraph')); /* highlight-add-end */ ``` @@ -670,7 +668,7 @@ const catalogModuleCustomExtensions = createBackendModule({ /* highlight-add-end */ const backend = createBackend(); -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); @@ -699,7 +697,7 @@ A basic installation of the events plugin looks as follows. ```ts title="packages/backend/src/index.ts" const backend = createBackend(); /* highlight-add-next-line */ -backend.add(import('@backstage/plugin-events-backend/alpha')); +backend.add(import('@backstage/plugin-events-backend')); ``` If you have other customizations made to `plugins/events.ts`, such as adding @@ -760,7 +758,7 @@ const otherPluginModuleCustomExtensions = createBackendModule({ /* highlight-add-end */ const backend = createBackend(); -backend.add(import('@backstage/plugin-events-backend/alpha')); +backend.add(import('@backstage/plugin-events-backend')); /* highlight-add-next-line */ backend.add(eventsModuleCustomExtensions); /* highlight-add-next-line */ @@ -780,7 +778,7 @@ A basic installation of the scaffolder plugin looks as follows. ```ts title="packages/backend/src/index.ts" const backend = createBackend(); /* highlight-add-next-line */ -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-scaffolder-backend')); ``` With the new Backend System version of the Scaffolder plugin, any provider specific actions will need to be installed separately. @@ -788,7 +786,7 @@ For example - GitHub actions are now collected under the `@backstage/plugin-scaf ```ts title="packages/backend/src/index.ts" const backend = createBackend(); -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-scaffolder-backend')); /* highlight-add-next-line */ backend.add(import('@backstage/plugin-scaffolder-backend-module-github')); @@ -839,7 +837,7 @@ const scaffolderModuleCustomExtensions = createBackendModule({ /* highlight-add-end */ const backend = createBackend(); -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-scaffolder-backend')); /* highlight-add-next-line */ backend.add(scaffolderModuleCustomExtensions); ``` @@ -884,8 +882,6 @@ auth: signIn: resolvers: - resolver: emailMatchingUserEntityProfileEmail - - resolver: emailLocalPartMatchingUserEntityName - - resolver: emailMatchingUserEntityAnnotation ``` :::note Note @@ -1145,7 +1141,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend')); /* highlight-add-end */ ``` @@ -1169,8 +1165,8 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend/alpha')); -backend.add(import('@backstage/plugin-search-backend-module-pg/alpha')); +backend.add(import('@backstage/plugin-search-backend')); +backend.add(import('@backstage/plugin-search-backend-module-pg')); /* highlight-add-end */ ``` @@ -1184,10 +1180,8 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend/alpha')); -backend.add( - import('@backstage/plugin-search-backend-module-elasticsearch/alpha'), -); +backend.add(import('@backstage/plugin-search-backend')); +backend.add(import('@backstage/plugin-search-backend-module-elasticsearch')); /* highlight-add-end */ ``` @@ -1205,8 +1199,8 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend/alpha')); -backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha')); +backend.add(import('@backstage/plugin-search-backend')); +backend.add(import('@backstage/plugin-search-backend-module-catalog')); /* highlight-add-end */ ``` @@ -1220,8 +1214,8 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend/alpha')); -backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha')); +backend.add(import('@backstage/plugin-search-backend')); +backend.add(import('@backstage/plugin-search-backend-module-techdocs')); /* highlight-add-end */ ``` @@ -1235,7 +1229,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-permission-backend/alpha')); +backend.add(import('@backstage/plugin-permission-backend')); backend.add( import('@backstage/plugin-permission-backend-module-allow-all-policy'), ); @@ -1296,7 +1290,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-permission-backend/alpha')); +backend.add(import('@backstage/plugin-permission-backend')); backend.add(customPermissionBackendModule); /* highlight-add-end */ ``` @@ -1311,7 +1305,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-techdocs-backend/alpha')); +backend.add(import('@backstage/plugin-techdocs-backend')); /* highlight-add-end */ ``` @@ -1325,7 +1319,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-kubernetes-backend/alpha')); +backend.add(import('@backstage/plugin-kubernetes-backend')); /* highlight-add-end */ ``` diff --git a/docs/backend-system/core-services/root-http-router.md b/docs/backend-system/core-services/root-http-router.md index 88a10455f5..a2316b957b 100644 --- a/docs/backend-system/core-services/root-http-router.md +++ b/docs/backend-system/core-services/root-http-router.md @@ -59,7 +59,7 @@ const backend = createBackend(); backend.add( rootHttpRouterServiceFactory({ - configure: ({ app, middleware, routes, config, logger, lifecycle }) => { + configure: ({ app, middleware, routes, config, logger, healthRouter }) => { // Refer to https://expressjs.com/en/guide/writing-middleware.html on how to write express middleware const customMiddleware = { logging(): RequestHandler { @@ -88,11 +88,18 @@ backend.add( }, }; + // The default implementation pretty-prints JSON responses in development + if (process.env.NODE_ENV === 'development') { + app.set('json spaces', 2); + } + // the built in middleware is provided through an option in the configure function app.use(middleware.helmet()); app.use(middleware.cors()); app.use(middleware.compression()); + app.use(healthRouter); + // you can add you your own middleware in here app.use(customMiddleware.logging()); diff --git a/docs/contribute/index.md b/docs/contribute/index.md index 34ed1561cb..627a2ff0d0 100644 --- a/docs/contribute/index.md +++ b/docs/contribute/index.md @@ -5,9 +5,9 @@ title: Contributors description: Documentation on how to get set up for doing development on the Backstage repository --- -Our vision for Backstage is for it to become the trusted standard toolbox (read: UX layer) for the open source infrastructure landscape. Think of it like Kubernetes for developer experience. We realize this is an ambitious goal. We can’t do it alone. +Our vision for Backstage is for it to become the trusted standard toolbox (read: UX layer) for the open source infrastructure landscape. Think of it like Kubernetes for developer experience. We realize this is an ambitious goal and we can’t do it alone. -Therefore we want to create a strong community of contributors -- all working together to create the kind of delightful experience that our developers deserve. +Therefore, we want to create a strong community of contributors — all working together to create the kind of delightful experience that our developers deserve. Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. ❤️ diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md index 1017684595..afab8ef54d 100644 --- a/docs/deployment/docker.md +++ b/docs/deployment/docker.md @@ -90,7 +90,7 @@ COPY --chown=node:node .yarnrc.yml ./ ENV NODE_ENV=production # This disables node snapshot for Node 20 to work with the Scaffolder -ENV NODE_OPTIONS "--no-node-snapshot" +ENV NODE_OPTIONS="--no-node-snapshot" # Copy repo skeleton first, to avoid unnecessary docker cache invalidation. # The skeleton contains the package.json of each package in the monorepo, @@ -287,7 +287,7 @@ COPY --chown=node:node examples ./examples ENV NODE_ENV=production # This disables node snapshot for Node 20 to work with the Scaffolder -ENV NODE_OPTIONS "--no-node-snapshot" +ENV NODE_OPTIONS="--no-node-snapshot" CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"] ``` @@ -349,7 +349,7 @@ package, which is done as follows: 2. Remove the following line from `packages/backend/src/index.ts`: ```ts - backend.add(import('@backstage/plugin-app-backend/alpha')); + backend.add(import('@backstage/plugin-app-backend')); ``` 3. Remove the `@backstage/plugin-app-backend` and the app package dependency diff --git a/docs/features/kubernetes/installation.md b/docs/features/kubernetes/installation.md index bd6a15a542..aca4c19ac1 100644 --- a/docs/features/kubernetes/installation.md +++ b/docs/features/kubernetes/installation.md @@ -120,7 +120,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-kubernetes-backend/alpha')); +backend.add(import('@backstage/plugin-kubernetes-backend')); /* highlight-add-end */ backend.start(); @@ -228,7 +228,7 @@ export const kubernetesModuleCustomClusterDiscovery = createBackendModule({ }); // Other plugins... -backend.add(import('@backstage/plugin-kubernetes-backend/alpha')); +backend.add(import('@backstage/plugin-kubernetes-backend')); backend.add(kubernetesModuleCustomClusterDiscovery); backend.start(); diff --git a/docs/features/search/collators.md b/docs/features/search/collators.md index 27860bfd64..0282bc845e 100644 --- a/docs/features/search/collators.md +++ b/docs/features/search/collators.md @@ -24,10 +24,10 @@ const backend = createBackend(); // Other plugins... // search plugin -backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha')); +backend.add(import('@backstage/plugin-search-backend-module-catalog')); /* highlight-add-end */ backend.start(); @@ -68,10 +68,10 @@ const backend = createBackend(); // Other plugins... // search plugin -backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha')); +backend.add(import('@backstage/plugin-search-backend-module-techdocs')); /* highlight-add-end */ backend.start(); diff --git a/docs/features/search/getting-started.md b/docs/features/search/getting-started.md index 362b7fc46d..a4b5348dbb 100644 --- a/docs/features/search/getting-started.md +++ b/docs/features/search/getting-started.md @@ -145,14 +145,14 @@ const backend = createBackend(); /* highlight-add-start */ // search plugin -backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend')); // search engines -backend.add(import('@backstage/plugin-search-backend-module-pg/alpha')); +backend.add(import('@backstage/plugin-search-backend-module-pg')); // search collators -backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha')); -backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha')); +backend.add(import('@backstage/plugin-search-backend-module-catalog')); +backend.add(import('@backstage/plugin-search-backend-module-techdocs')); /* highlight-add-end */ backend.start(); diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index 7cbb5c3bb8..007b108df5 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -86,17 +86,27 @@ const techDocsEntityTransformer: TechDocsCollatorEntityTransformer = ( ) => { return { // add more fields to the index - ...defaultTechDocsCollatorEntityTransformer(entity), tags: entity.metadata.tags, }; }; +const techDocsDocumentTransformer: TechDocsCollatorDocumentTransformer = ( + doc: MkSearchIndexDoc, +) => { + return { + // add more fields to the index + bost: doc.boost, + }; +}; + indexBuilder.addCollator({ collator: DefaultTechDocsCollatorFactory.fromConfig(env.config, { discovery: env.discovery, tokenManager: env.tokenManager, /* highlight-add-next-line */ entityTransformer: techDocsEntityTransformer, + /* highlight-add-next-line */ + documentTransformer: techDocsDocumentTransformer, }), }); ``` diff --git a/docs/features/search/search-engines.md b/docs/features/search/search-engines.md index f768a9bde8..8209ae951d 100644 --- a/docs/features/search/search-engines.md +++ b/docs/features/search/search-engines.md @@ -25,7 +25,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend')); /* highlight-add-end */ backend.start(); @@ -65,10 +65,10 @@ const backend = createBackend(); // Other plugins... // search plugin -backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-search-backend-module-pg/alpha')); +backend.add(import('@backstage/plugin-search-backend-module-pg')); /* highlight-add-end */ backend.start(); @@ -124,12 +124,10 @@ const backend = createBackend(); // Other plugins... // search plugin -backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend')); /* highlight-add-start */ -backend.add( - import('@backstage/plugin-search-backend-module-elasticsearch/alpha'), -); +backend.add(import('@backstage/plugin-search-backend-module-elasticsearch')); /* highlight-add-end */ backend.start(); diff --git a/docs/features/software-catalog/configuration.md b/docs/features/software-catalog/configuration.md index dff09a9397..2d86811b14 100644 --- a/docs/features/software-catalog/configuration.md +++ b/docs/features/software-catalog/configuration.md @@ -165,7 +165,7 @@ catalog: ## Processing Interval -The [processing loop](https://backstage.io/docs/features/software-catalog/life-of-an-entity) is +The [processing loop](./life-of-an-entity.md#processing) is responsible for running your registered processors on all entities, on a certain interval. That interval can be configured with the `processingInterval` app-config parameter. @@ -192,20 +192,50 @@ Setting this value too low risks exhausting rate limits on external systems that are queried by processors, such as version control systems housing catalog-info files. +## Stitching strategy + +[Stitching](./life-of-an-entity.md#stitching) finalizes the entity. It can be run in +two modes: + +- `immediate` - performs stitching in-band immediately when needed +- `deferred` - performs the stitching asynchronously + +It can be configured with the `stitchingStrategy` app-config parameter. + +```yaml title="app-config.yaml" +catalog: + stitchingStrategy: immediate +``` + +For the `deferred` mode you can set up additional parameters to further tune the process, +by setting the following parameters: + +- `pollingInterval` - the interval between polling for entities that need stitching +- `stitchTimeout` - the maximum time to wait for an entity to be stitched + +These parameters accept a duration object, similar to the `processingInterval` parameter. + +```yaml title="app-config.yaml" +catalog: + stitchingStrategy: deferred + pollingInterval: { seconds: 1 } + stitchTimeout: { minutes: 1 }; +``` + ## Subscribing to Catalog Errors Catalog errors are published to the [events plugin](https://github.com/backstage/backstage/tree/master/plugins/events-node): `@backstage/plugin-events-node`. You can subscribe to events and respond to errors, for example you may wish to log them. The first step is to add the events backend plugin to your Backstage application. Navigate to your Backstage application directory and add the plugin package. -```ts title="From your Backstage root directory" +```bash title="From your Backstage root directory" yarn --cwd packages/backend add @backstage/plugin-events-backend ``` Now you can install the events backend plugin in your backend. ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-events-backend/alpha')); +backend.add(import('@backstage/plugin-events-backend')); ``` ### Logging Errors @@ -214,7 +244,7 @@ If you want to log catalog errors you can install the `@backstage/plugin-catalog Install the catalog logs module. -```ts title="From your Backstage root directory" +```bash title="From your Backstage root directory" yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-logs ``` diff --git a/docs/features/software-catalog/external-integrations.md b/docs/features/software-catalog/external-integrations.md index ff6853e1e7..f721c50ec2 100644 --- a/docs/features/software-catalog/external-integrations.md +++ b/docs/features/software-catalog/external-integrations.md @@ -326,7 +326,7 @@ export const catalogModuleFrobsProvider = createBackendModule({ const backend = createBackend(); -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); backend.add(catalogModuleFrobsProvider); // Other plugins ... @@ -764,7 +764,7 @@ export const catalogModuleSystemXReaderProcessor = createBackendModule({ const backend = createBackend(); -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); backend.add(catalogModuleSystemXReaderProcessor); // Other plugins ... @@ -1025,7 +1025,7 @@ export const catalogModuleCustomDataParser = createBackendModule({ const backend = createBackend(); -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); backend.add(catalogModuleCustomDataParser); // Other plugins ... diff --git a/docs/features/software-catalog/faq.md b/docs/features/software-catalog/faq.md index d44414c1a7..a8a1a30379 100644 --- a/docs/features/software-catalog/faq.md +++ b/docs/features/software-catalog/faq.md @@ -24,3 +24,21 @@ Doing on-demand user creation _is_ technically possible by writing custom [entit On the technical side, this is unwanted complexity. You need to implement and maintain a custom provider, instead of what usually amounts to a very easily set-up batch ingestion schedule with providers that come out of the box. Also even if you do this, the catalog is an eventually consistent engine. The user that the provider feeds into the system is not guaranteed to appear immediately. Your experience will likely be only partially functional at bootstrapping time which may have unwanted side effects. On the user experience side, a Backstage experience without complete organizational data is a serious hindrance to getting the full power out of the tool. Your users won't be able to click on owners and seeing who they are and what teams they belong to. They won't be able to find out what the communications paths are when they need to reach you or your managers when something goes wrong or they have a feature request. They can't get an overview of what teams own and how they relate to each other. It will be a much more barren experience. Organizational data is highly valuable to have centrally available, complete and correct. + +## Can I call the catalog itself from inside a processor / provider? + +Any backend module, including those that provide processors and entity providers to the catalog, are technically able to get hold of a catalog client via the `catalogServiceRef` from `@backstage/plugin-catalog-node`. However, it is almost never the right thing to do - especially from processors - and we strongly discourage from doing so. + +The catalog processing loop is a very high-speed system where your entire catalog cluster collaborates to race through all entities at the highest possible rate. The ideal processor does an absolute minimum of work, and immediately relinquishes control back. Performing asynchronous requests to external systems - including the catalog - from processors, can quickly become overwhelming for that external system and starve their resources if they aren't prepared to deal with very high rates of small requests. It also significantly slows down the procesing loop, when each step needs to wait for responses. This can lead to work "piling up" in the catalog and delays in seeing entities get updated. The [life of an entity](./life-of-an-entity.md) article shows the sequence of events that happen when an entity goes from original ingestion, through processing, and to becoming final entities. + +See also [the related validation topic](#can-i-validate-relations-in-processors). + +## Can I validate relations in processors? + +Processors are responsible for generating relations from the entity body - see the [life of an entity](./life-of-an-entity.md) article for more details. It's tempting to put rules in your processors that mark entities as invalid if they have a relation to some other entity that does not exist. For example, a `Component` entity that declares a `spec.owner` to a team that has been disbanded. We strongly discourage from doing this type of "hard" validation in processors, for two reasons. + +First, performance. As is described [here](#can-i-call-the-catalog-itself-from-inside-a-processor--provider), you should avoid calling out to the catalog for any reason in processors, including for checking whether a target entity exists. Besides the performance issues, it can also lead to data races where hidden dependencies between entities lead to them never properly settling, or flickering back and forth between states for hard-to-debug reasons. + +Second, user experience. The catalog is an eventually consistent system that constantly tries to mirror external realities. Users make changes in catalog-info files, or things update in external systems, and those changes get streamed in and settle over time inside the catalog. But throwing an error in a processor, instantly aborts processing of that entity and stops its ingestion. Now imagine being a large organization where these changes happen maybe hundreds of times per day. Owners of catalog-info files will constantly be surprised by their files "breaking" in ingestion, maybe a very long time after they were initially created - they were valid at their time of creation and haven't been touched since! This is very frustrating and slows down your users because things break silently for reasons out of your control. + +There are cases where it's fine to throw hard validation errors in processors. Notably, when it doesn't pass a schema test at all and readers of the catalog data will break if the data was let through. Setting the owner to be a number instead of a string could be such an example. diff --git a/docs/features/software-templates/authorizing-scaffolder-template-details.md b/docs/features/software-templates/authorizing-scaffolder-template-details.md index 942431c993..d4798b2540 100644 --- a/docs/features/software-templates/authorizing-scaffolder-template-details.md +++ b/docs/features/software-templates/authorizing-scaffolder-template-details.md @@ -281,7 +281,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-permission-backend/alpha')); +backend.add(import('@backstage/plugin-permission-backend')); backend.add(customPermissionBackendModule); /* highlight-add-end */ ``` diff --git a/docs/features/software-templates/builtin-actions.md b/docs/features/software-templates/builtin-actions.md index 5bfc038c1d..bf6875764e 100644 --- a/docs/features/software-templates/builtin-actions.md +++ b/docs/features/software-templates/builtin-actions.md @@ -35,16 +35,16 @@ import { createBackend } from '@backstage/backend-defaults'; const backend = createBackend(); -backend.add(import('@backstage/plugin-app-backend/alpha')); +backend.add(import('@backstage/plugin-app-backend')); // catalog plugin -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); // scaffolder plugin -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-scaffolder-backend')); /* highlight-add-next-line */ backend.add(import('@backstage/plugin-scaffolder-backend-module-github')); diff --git a/docs/features/software-templates/writing-custom-actions.md b/docs/features/software-templates/writing-custom-actions.md index e5a82c09a9..00a171523c 100644 --- a/docs/features/software-templates/writing-custom-actions.md +++ b/docs/features/software-templates/writing-custom-actions.md @@ -195,7 +195,7 @@ const scaffolderModuleCustomExtensions = createBackendModule({ /* highlight-add-end */ const backend = createBackend(); -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-scaffolder-backend')); /* highlight-add-next-line */ backend.add(scaffolderModuleCustomExtensions); ``` diff --git a/docs/features/software-templates/writing-templates.md b/docs/features/software-templates/writing-templates.md index 71ca0c56ae..e5cd7d13b7 100644 --- a/docs/features/software-templates/writing-templates.md +++ b/docs/features/software-templates/writing-templates.md @@ -801,34 +801,33 @@ The `projectSlug` filter generates a project slug from a repository URL - **Input**: `github.com?repo=backstage&org=backstage` - **Output**: `backstage/backstage` -## Custom Filters +## Custom Filters and Globals -Whenever it is needed to extend the built-in filters with yours `${{ parameters.name | my-filter1 | my-filter2 | etc }}`, then you can add them -using the property `additionalTemplateFilters`. +You may wish to extend the filters and globals with your own custom ones. For example `${{ myGlobal | myFilter | myOtherFilter }}` or `${{ myFunctionGlobal(1,2) | myFilter }}`. +This can be achieved using the `additionalTemplateFilters` and `additionalTemplateGlobals` properties respectively. -The `additionalTemplateFilters` property accepts as type a `Record` +These properties accept a `Record` -```ts title="plugins/scaffolder-backend/src/service/Router.ts" +```ts title="plugins/scaffolder-backend/src/service/router.ts" additionalTemplateFilters?: Record; + additionalTemplateGlobals?: Record; ``` -where the first parameter is the name of the filter and the second receives a list of `JSON value` arguments. The `templateFilter()` function must return a JsonValue which is either a Json array, object or primitive. +where the first parameter is the identifier of the filter or global and the second is a `TemplateFilter` or a `TemplateGlobal` respectively. +A `TemplateFilter` is a function which will be called using the previous `JsonValue` objects and may return a `JsonValue` object. +A `TemplateGlobal` can either be a function which will be called using the passed `JsonValue` objects and may return a `JsonValue` object or it can be a `JsonValue` object itself. ```ts title="plugins/scaffolder-node/src/types.ts" export type TemplateFilter = (...args: JsonValue[]) => JsonValue | undefined; + +export type TemplateGlobal = + | ((...args: JsonValue[]) => JsonValue | undefined) + | JsonValue; ``` -From a practical coding point of view, you will translate that into the following snippet code handling 2 filters: +**Usage Example** -```ts" -... -additionalTemplateFilters: { - base64: (...args: JsonValue[]) => btoa(args.join("")), - betterFilter: (...args: JsonValue[]) => { return `This is a much better string than "${args}", don't you think?` } -} -``` - -And within your template, you will be able to use the filters using a parameter and the filter passed using the pipe symbol +Given you want to have the following filters and globals available in you template: ```yaml apiVersion: scaffolder.backstage.io/v1beta3 @@ -840,22 +839,21 @@ spec: owner: user:guest type: service - parameters: - - title: Test custom filters - properties: - userName: - title: Name of the user - type: string - steps: - - id: debug - name: debug + - id: debug1 + name: debug1 action: debug:log input: - message: ${{ parameters.userName | betterFilter | base64 }} + message: ${{ myGlobal | myFilter | myOtherFilter }} + + - id: debug2 + name: debug2 + action: debug:log + input: + message: ${{ myFunctionGlobal(1,2) | myFilter }} ``` -Next, you will have to register the property `addTemplateFilters` using the `scaffolderTemplatingExtensionPoint` of a new `BackendModule` [created](../../backend-system/architecture/06-modules.md). +You will have to create a new [`BackendModule`](../../backend-system/architecture/06-modules.md) using the `scaffolderTemplatingExtensionPoint`. Here is a very simplified example of how to do that: @@ -876,11 +874,13 @@ const scaffolderModuleCustomFilters = createBackendModule({ // ... and other dependencies as needed }, async init({ scaffolder /* ..., other dependencies */ }) { + scaffolder.addTemplateGlobals({ + myGlobal: () => 'myGlobal', + myFunctionGlobal: (...args: JsonValue[]) => args[0] + args[1], + }); scaffolder.addTemplateFilters({ - base64: (...args: JsonValue[]) => btoa(args.join('')), - betterFilter: (...args: JsonValue[]) => { - return `This is a much better string than "${args}", don't you think?`; - }, + myFilter: () => 'the value is this now', + myOtherFilter: (...args: JsonValue[]) => args.join(''), }); }, }); @@ -889,7 +889,7 @@ const scaffolderModuleCustomFilters = createBackendModule({ /* highlight-add-end */ const backend = createBackend(); -backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); +backend.add(import('@backstage/plugin-scaffolder-backend')); /* highlight-add-next-line */ backend.add(scaffolderModuleCustomFilters); ``` @@ -908,10 +908,16 @@ export default async function createPlugin({ additionalTemplateFilters: { - } + }, + additionalTemplateGlobals: { + + }, }); +} ``` +Note that additional template global functions are currently not supported in `fetch:template` (see #25445). + ## Template Editor Writing template is most of the times an iterative process. You will need to test your template to make sure it has a good user experience and that it works as expected. To help on this process the scaffolder comes with a build in template editor that allows you to test your template in a real environment for querying data and execute the actions on dry-run mode to see the results of those one. diff --git a/docs/features/techdocs/getting-started.md b/docs/features/techdocs/getting-started.md index a157d29c0d..66772c861d 100644 --- a/docs/features/techdocs/getting-started.md +++ b/docs/features/techdocs/getting-started.md @@ -209,7 +209,7 @@ const backend = createBackend(); // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-techdocs-backend/alpha')); +backend.add(import('@backstage/plugin-techdocs-backend')); /* highlight-add-end */ backend.start(); diff --git a/docs/features/techdocs/how-to-guides.md b/docs/features/techdocs/how-to-guides.md index 7712d675f5..fd4d208b74 100644 --- a/docs/features/techdocs/how-to-guides.md +++ b/docs/features/techdocs/how-to-guides.md @@ -799,7 +799,7 @@ const techdocsCustomBuildStrategy = createBackendModule({ // Other plugins... /* highlight-add-start */ -backend.add(import('@backstage/plugin-techdocs-backend/alpha')); +backend.add(import('@backstage/plugin-techdocs-backend')); backend.add(techdocsCustomBuildStrategy); /* highlight-add-end */ diff --git a/docs/integrations/aws-s3/discovery.md b/docs/integrations/aws-s3/discovery.md index 4cca448cf2..f4d18015a2 100644 --- a/docs/integrations/aws-s3/discovery.md +++ b/docs/integrations/aws-s3/discovery.md @@ -73,8 +73,8 @@ yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-aws Then update your backend by adding the following line: ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-aws/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-aws')); /* highlight-add-end */ ``` diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index 357df7d553..e64bf42636 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -109,8 +109,8 @@ yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-azure Then updated your backend by adding the following line: ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-azure/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-azure')); /* highlight-add-end */ ``` diff --git a/docs/integrations/azure/org.md b/docs/integrations/azure/org.md index 1868188cdf..e6fb69a520 100644 --- a/docs/integrations/azure/org.md +++ b/docs/integrations/azure/org.md @@ -49,9 +49,9 @@ For large organizations, this plugin can take a long time, so be careful setting Finally, updated your backend by adding the following line: ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-msgraph/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-msgraph')); /* highlight-add-end */ ``` diff --git a/docs/integrations/bitbucketCloud/discovery.md b/docs/integrations/bitbucketCloud/discovery.md index 102feb46d7..b000a45ccd 100644 --- a/docs/integrations/bitbucketCloud/discovery.md +++ b/docs/integrations/bitbucketCloud/discovery.md @@ -27,15 +27,11 @@ yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-bitbuck ```ts // optional if you want HTTP endpoints to receive external events -// backend.add(import('@backstage/plugin-events-backend/alpha')); +// backend.add(import('@backstage/plugin-events-backend')); // optional if you want to use AWS SQS instead of HTTP endpoints to receive external events -// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs/alpha')); -backend.add( - import('@backstage/plugin-events-backend-module-bitbucket-cloud/alpha'), -); -backend.add( - import('@backstage/plugin-catalog-backend-module-bitbucket-cloud/alpha'), -); +// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs')); +backend.add(import('@backstage/plugin-events-backend-module-bitbucket-cloud')); +backend.add(import('@backstage/plugin-catalog-backend-module-bitbucket-cloud')); ``` You need to decide how you want to receive events from external sources like diff --git a/docs/integrations/bitbucketServer/discovery.md b/docs/integrations/bitbucketServer/discovery.md index 3bc37e4cb5..9ba6c7a96d 100644 --- a/docs/integrations/bitbucketServer/discovery.md +++ b/docs/integrations/bitbucketServer/discovery.md @@ -29,10 +29,10 @@ yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-bitbuck And update your backend by adding the following line: ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ backend.add( - import('@backstage/plugin-catalog-backend-module-bitbucket-server/alpha'), + import('@backstage/plugin-catalog-backend-module-bitbucket-server'), ); /* highlight-add-end */ ``` diff --git a/docs/integrations/gerrit/discovery.md b/docs/integrations/gerrit/discovery.md index eca0417871..4ae1eb2344 100644 --- a/docs/integrations/gerrit/discovery.md +++ b/docs/integrations/gerrit/discovery.md @@ -27,9 +27,9 @@ yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-gerrit Then update your backend by adding the following line: ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-gerrit/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-gerrit')); /* highlight-add-end */ ``` diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md index b2e998813d..4da7287383 100644 --- a/docs/integrations/github/discovery.md +++ b/docs/integrations/github/discovery.md @@ -31,9 +31,9 @@ yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-github And then update your backend by adding the following line: ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ -backend.add(import('@backstage/plugin-catalog-backend-module-github/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-github')); ``` ## Events Support diff --git a/docs/integrations/github/org.md b/docs/integrations/github/org.md index 22b55fee98..7f0ee1a71f 100644 --- a/docs/integrations/github/org.md +++ b/docs/integrations/github/org.md @@ -60,7 +60,7 @@ catalog: Finally, update your backend by adding the following line: ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ backend.add(import('@backstage/plugin-catalog-backend-module-github-org')); ``` @@ -167,7 +167,7 @@ const backend = createBackend(); // Other items -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); backend.add(githubOrgModule); diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md index 10746aff88..eab590ff11 100644 --- a/docs/integrations/gitlab/discovery.md +++ b/docs/integrations/gitlab/discovery.md @@ -30,14 +30,14 @@ Then add the following to your backend initialization: ```ts title="packages/backend/src/index.ts // optional if you want HTTP endpoints to receive external events -// backend.add(import('@backstage/plugin-events-backend/alpha')); +// backend.add(import('@backstage/plugin-events-backend')); // optional if you want to use AWS SQS instead of HTTP endpoints to receive external events -// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs/alpha')); +// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs')); // optional - event router for gitlab. See.: https://github.com/backstage/backstage/blob/master/plugins/events-backend-module-gitlab/README.md // backend.add(eventsModuleGitlabEventRouter); // optional - token validator for the gitlab topic // backend.add(eventsModuleGitlabWebhook); -backend.add(import('@backstage/plugin-catalog-backend-module-gitlab/alpha')); +backend.add(import('@backstage/plugin-catalog-backend-module-gitlab')); ``` You need to decide how you want to receive events from external sources like diff --git a/docs/integrations/gitlab/org.md b/docs/integrations/gitlab/org.md index c13db4401b..66ce117aa0 100644 --- a/docs/integrations/gitlab/org.md +++ b/docs/integrations/gitlab/org.md @@ -35,9 +35,9 @@ Then add the following to your backend initialization: ```ts title="packages/backend/src/index.ts // optional if you want HTTP endpoints to receive external events -// backend.add(import('@backstage/plugin-events-backend/alpha')); +// backend.add(import('@backstage/plugin-events-backend')); // optional if you want to use AWS SQS instead of HTTP endpoints to receive external events -// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs/alpha')); +// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs')); // optional - event router for gitlab. See.: https://github.com/backstage/backstage/blob/master/plugins/events-backend-module-gitlab/README.md // backend.add(eventsModuleGitlabEventRouter); // optional - token validator for the gitlab topic diff --git a/docs/integrations/ldap/org.md b/docs/integrations/ldap/org.md index b1aa460bd6..50cf74ffb6 100644 --- a/docs/integrations/ldap/org.md +++ b/docs/integrations/ldap/org.md @@ -44,7 +44,7 @@ catalog: Finally, updated your backend by adding the following line: ```ts title="packages/backend/src/index.ts" -backend.add(import('@backstage/plugin-catalog-backend/alpha')); +backend.add(import('@backstage/plugin-catalog-backend')); /* highlight-add-start */ backend.add(import('@backstage/plugin-catalog-backend-module-ldap')); /* highlight-add-end */ diff --git a/docs/openapi/01-getting-started.md b/docs/openapi/01-getting-started.md index a9c70c61f8..156df9bd17 100644 --- a/docs/openapi/01-getting-started.md +++ b/docs/openapi/01-getting-started.md @@ -14,8 +14,8 @@ Difficulty: Medium The goal of this tutorial is to give you exposure to tools that more tightly couple your OpenAPI specification and plugin lifecycle. The tools we'll be presenting were created by the OpenAPI tooling project area and allow you to create, -1. A typed `express` router that provides strong guardrails during development for input and output values. Support for query, path parameters and request body, as well as experimental support for headers and cookies. -2. An auto-generated client to interact with your plugin's backend. Support for all request types, parameters and body, as well as return types. Provides a low-level interface to allow more customization by higher level libraries. +1. A typed `express` router that provides strong guardrails during development for input and output values. Support for query, path parameters, and request body, as well as experimental support for headers and cookies. +2. An auto-generated client to interact with your plugin's backend. Support for all request types, parameters, and body, as well as return types. Provides a low-level interface to allow more customization by higher-level libraries. 3. Validation and verification tooling to ensure your API and specification stay in sync. Includes testing against your unit tests. ## Prerequisites @@ -32,8 +32,8 @@ This tutorial assumes that you're already familiar with the following, There are two required npm packages before we start, -1. `@backstage/repo-tools`, this package contains all OpenAPI related commands for your plugins. We will be using this throughout the tutorial. -2. `@useoptic/optic`, this package is a dependency of `@backstage/repo-tools` but is only required for OpenAPI related commands. +1. `@backstage/repo-tools`, this package contains all OpenAPI-related commands for your plugins. We will be using this throughout the tutorial. +2. `@useoptic/optic`, this package is a dependency of `@backstage/repo-tools` but is only required for OpenAPI-related commands. Further, for generating the client a `java` binary has to be available on your PATH. @@ -47,7 +47,7 @@ You should create a new folder, `src/schema` in your backend plugin to store you ## Generating a typed express router from a spec -Run `yarn backstage-repo-tools package schema openapi generate --server` from the directory with your plugin. This will create an `openapi.generated.ts` file in the `src/schema` directory that contains the OpenAPI schema as well as a generated express router with types. You should add this command to your `package.json` for future use and you can combine both the server generation and the client generation below like so, `yarn backstage-repo-tools package schema openapi generate --server --client-package ` +Run `yarn backstage-repo-tools package schema openapi generate --server` from the directory with your plugin. This will create an `openapi.generated.ts` file in the `src/schema` directory that contains the OpenAPI schema as well as a generated express router with types. You should add this command to your `package.json` for future use, and you can combine both the server generation and the client generation below, like so, `yarn backstage-repo-tools package schema openapi generate --server --client-package ` Use it like so, update your `router.ts` or `createRouter.ts` file with the following content, @@ -86,7 +86,7 @@ export class CatalogClient implements CatalogApi { usage of the types will depend on your type names. -You should be able to use the generated `DefaultApi.client.ts` file out of the box for your API needs. For full customization, you can use a wrapper around the generated client to adjust the flavor of your clients. +You should be able to use the generated `DefaultApi.client.ts` file out of the box for your API needs. For full customization, you can use a wrapper around the generated client to adjust the flavour of your clients. For more information, see [the docs](./generate-client.md). diff --git a/docs/overview/threat-model.md b/docs/overview/threat-model.md index 2b78d022f9..2461f002c8 100644 --- a/docs/overview/threat-model.md +++ b/docs/overview/threat-model.md @@ -53,11 +53,11 @@ Note that the `UrlReaderService` system operates with a service context and is n Backstage provides authentication of users through the `auth` plugin, which primarily acts as an authorization server for different OAuth 2.0 provider integrations. These integrations can both serve the purpose of signing users into Backstage, as well as providing delegated access to external resources, and are all subject to the common concerns of implementing secure OAuth 2.0 authorization servers. All auth provider integrations are disabled by default, and need to be enabled through configuration in order to be used. For each Backstage installation it is recommended to only enable the minimal set of providers that are in use by that instance. -In order to use an auth provider to sign in users into Backstage, it needs to be configured with an [Identity resolver](https://backstage.io/docs/auth/identity-resolver), which is a custom callback implemented in code. The identity resolver is a sensitive part of configuring Backstage and it is important that it always resolves user identities correctly, based on information provided by the authentication provider. There are a number of built-in identity resolvers that can simplify configuration, and it is important that these all resolve users in a secure way, regardless of how they are used. +In order to use an auth provider to sign in users into Backstage, it needs to be configured with a [sign-in resolver](https://backstage.io/docs/auth/identity-resolver). The sign-in resolver is a sensitive part of configuring Backstage and it is important that it always resolves user identities correctly, and rejects unauthorized users. There are a number of built-in sign-in resolvers that can simplify configuration, or you can implement your own custom sign-in resolver in code, either way it is very important that these resolvers map user identities correctly. You should **always use the minimum number of sign-in resolvers necessary** to avoid risk of account hijacking. Backstage also supports authentication through an authenticating reverse proxy such as [AWS ALB](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/), where the user identity is read from the incoming proxied decorated request. The following proxy auth providers verify the signature of incoming requests, and are therefore safe to deploy with direct access by users: `awsAlb`, `cfAccess`, and `gcpIap`. Providers like `oauth2Proxy` do not verify the incoming request and can therefore be spoofed by a malicious internal user to supply the `auth` backend with forged identity information. It’s therefore highly recommended to restrict access to the `oauth2Proxy` endpoints, or use a different provider. -As part of signing in with an identity resolver, a Backstage Token is issued containing the resolved user identity. The tokens are asymmetrically signed JSON Web Tokens, with the public keys available to any service that wishes to verify a token. The signing keys are rotated continuously and are unique to each installation of Backstage, meaning that Backstage Tokens are not shared across installations. The token contains claims for the user identity and ownership information, which can be used to determine what Backstage resources are owned by that user or group. It is important that this token can not be forged outside of the `auth` plugin, with the exception of other plugins deployed in the same backend service or sharing the same database. For a high-security deployment, the `auth` backend should therefore be deployed in a separate service with its own database. +As part of signing in with a sign-in resolver, a Backstage Token is issued containing the resolved user identity. The tokens are asymmetrically signed JSON Web Tokens, with the public keys available to any service that wishes to verify a token. The signing keys are rotated continuously and are unique to each installation of Backstage, meaning that Backstage Tokens are not shared across installations. The token contains claims for the user identity and ownership information, which can be used to determine what Backstage resources are owned by that user or group. It is important that this token can not be forged outside of the `auth` plugin, with the exception of other plugins deployed in the same backend service or sharing the same database. For a high-security deployment, the `auth` backend should therefore be deployed in a separate service with its own database. The token is used to prove the identity of the user within the Backstage system, and is used throughout Backstage plugins to control access. It is important that the ownership resolution logic is consistent across the entire Backstage ecosystem, with no possibility of misinterpreting the ownership information. diff --git a/docs/permissions/custom-rules.md b/docs/permissions/custom-rules.md index 9642f80215..00f4d81939 100644 --- a/docs/permissions/custom-rules.md +++ b/docs/permissions/custom-rules.md @@ -173,7 +173,7 @@ The api for providing custom rules may differ between plugins, but there should ```ts title="packages/backend/src/index.ts" // catalog plugin - backend.add(import('@backstage/plugin-catalog-backend/alpha')); + backend.add(import('@backstage/plugin-catalog-backend')); backend.add( import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), ); diff --git a/docs/permissions/getting-started.md b/docs/permissions/getting-started.md index 118282bbd4..14058bccb0 100644 --- a/docs/permissions/getting-started.md +++ b/docs/permissions/getting-started.md @@ -34,7 +34,7 @@ To help validate the permission framework is setup we'll create a Test Permissio ```ts title="packages/backend/src/index.ts" // permission plugin - backend.add(import('@backstage/plugin-permission-backend/alpha')); + backend.add(import('@backstage/plugin-permission-backend')); /* highlight-remove-start */ backend.add( import('@backstage/plugin-permission-backend-module-allow-all-policy'), @@ -85,7 +85,7 @@ To help validate the permission framework is setup we'll create a Test Permissio ```ts title="packages/backend/src/index.ts" // permission plugin - backend.add(import('@backstage/plugin-permission-backend/alpha')); + backend.add(import('@backstage/plugin-permission-backend')); /* highlight-add-next-line */ backend.add(import('./extensions/permissionsPolicyExtension')); ``` diff --git a/docs/permissions/plugin-authors/01-setup.md b/docs/permissions/plugin-authors/01-setup.md index f3c361e8b5..6ece0b0b69 100644 --- a/docs/permissions/plugin-authors/01-setup.md +++ b/docs/permissions/plugin-authors/01-setup.md @@ -14,7 +14,9 @@ The rest of this page is focused on adding the `todo-list` and `todo-list-backen ## Setup for the Tutorial -We will use a "Todo list" feature, composed of the `todo-list` and `todo-list-backend` plugins, as well as their dependency, `todo-list-common`. +**Note**: We will be updating files created as part of the [Getting Started](../getting-started.md) documentation, this tutorial assumes you have already viewed and gone through those steps! + +We are going to make a "Todo list" feature, composed of the `todo-list` and `todo-list-backend` plugins, as well as their dependency, `todo-list-common`. The source code is available here: @@ -59,7 +61,7 @@ The source code is available here: //... /* highlight-add-start */ // Installing the permission plugin - backend.add(import('@backstage/plugin-permission-backend/alpha')); + backend.add(import('@backstage/plugin-permission-backend')); // Installing the allow all permission policy module backend.add( import('@backstage/plugin-permission-backend-module-allow-all-policy'), diff --git a/docs/plugins/analytics.md b/docs/plugins/analytics.md index 10a7421057..a936a0f399 100644 --- a/docs/plugins/analytics.md +++ b/docs/plugins/analytics.md @@ -41,6 +41,7 @@ choice below. | [New Relic Browser][newrelic-browser] | Community ✅ | | [Matomo][matomo] | Community ✅ | | [Quantum Metric][qm] | Community ✅ | +| [Generic HTTP][generic-http] | Community ✅ | To suggest an integration, please [open an issue][add-tool] for the analytics tool your organization uses. Or jump to [Writing Integrations][int-howto] to diff --git a/docs/plugins/integrating-search-into-plugins.md b/docs/plugins/integrating-search-into-plugins.md index 62b3942537..05d07feb08 100644 --- a/docs/plugins/integrating-search-into-plugins.md +++ b/docs/plugins/integrating-search-into-plugins.md @@ -227,7 +227,7 @@ import { createBackend } from '@backstage/backend-defaults'; //... const backend = createBackend(); // Installing the search backend plugin -backend.add(import('@backstage/plugin-search-backend/alpha')); +backend.add(import('@backstage/plugin-search-backend')); // Installing the newly created faq snippets collator module backend.add( import( diff --git a/docs/plugins/proxying.md b/docs/plugins/proxying.md index 0b64c6eb37..09afa3f519 100644 --- a/docs/plugins/proxying.md +++ b/docs/plugins/proxying.md @@ -20,7 +20,7 @@ The plugin is already added to a default Backstage project. To add it to a project, add the following line in `packages/backend/src/index.ts`: ```ts -backend.add(import('@backstage/plugin-proxy-backend/alpha')); +backend.add(import('@backstage/plugin-proxy-backend')); ``` ### Old Backend @@ -28,7 +28,7 @@ backend.add(import('@backstage/plugin-proxy-backend/alpha')); In `packages/backend/src/index.ts`: ```ts -backend.add(import('@backstage/plugin-proxy-backend/alpha')); +backend.add(import('@backstage/plugin-proxy-backend')); ``` ## Configuration diff --git a/docs/releases/v1.32.0-next.2-changelog.md b/docs/releases/v1.32.0-next.2-changelog.md new file mode 100644 index 0000000000..6d6ce1e4fd --- /dev/null +++ b/docs/releases/v1.32.0-next.2-changelog.md @@ -0,0 +1,2207 @@ +# Release v1.32.0-next.2 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.32.0-next.2](https://backstage.github.io/upgrade-helper/?to=1.32.0-next.2) + +## @backstage/backend-openapi-utils@0.2.0-next.1 + +### Minor Changes + +- 66af016: Improved support for OpenAPI validation during Jest tests. Now, OpenAPI validation can happen as you are writing your Jest tests - you no longer have to run `repo schema openapi test`. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/theme@0.6.0-next.1 + +### Minor Changes + +- e77ff3d: Adds support for custom background colors in code blocks and inline code within TechDocs. + +## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.0-next.1 + +### Minor Changes + +- d0edfec: **BREAKING**: The `profileEmailMatchingUserEntityEmail` sign-in resolver has been removed as it was using an insecure fallback for resolving user identities. See for how to create a custom sign-in resolver if needed as a replacement. + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + +## @backstage/plugin-catalog@1.24.0-next.2 + +### Minor Changes + +- cec8e8c: Adding negation keyword for entity filtering + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.0-next.2 + - @backstage/catalog-client@1.7.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.1-next.2 + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/integration-react@1.2.0-next.2 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.1 + - @backstage/plugin-scaffolder-common@1.5.6 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.1-next.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.0-next.2 + +### Minor Changes + +- 6343c8d: Fixes the event-based updates at `BitbucketCloudEntityProvider`. + + Previously, this entity provider had optional event support for legacy backends + that could be enabled by passing `catalogApi`, `events`, and `tokenManager`. + + For the new/current backend system, the `catalogModuleBitbucketCloudEntityProvider` + (`catalog.bitbucket-cloud-entity-provider`), event support was enabled by default. + + A recent change removed `tokenManager` as a dependency from the module as well as removed it as input. + While this didn't break the instantiation of the module, it broke the event-based updates, + and led to a runtime misbehavior, accompanied by an info log message. + + This change will replace the use of `tokenManager` with the use of `auth` (`AuthService`). + + Additionally, to simplify, it will make `catalogApi` and `events` required dependencies. + For the current backend system, this change is transparent and doesn't require any action. + For the legacy backend system, this change will require you to pass those dependencies + if you didn't do it already. + + BREAKING CHANGES: + + _(For legacy backend users only.)_ + + Previously optional `catalogApi`, and `events` are required now. + A new required dependency `auth` was added. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/catalog-client@1.7.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.24-next.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-events-node@0.4.1-next.1 + +## @backstage/plugin-catalog-react@1.14.0-next.2 + +### Minor Changes + +- 0801db6: Add catalog service mocks under the `/testUtils` subpath export. + + You can now use e.g. `const catalog = catalogApiMock.mock()` in your test and then do assertions on `catalog.getEntities` without awkward type casting. + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-test-utils@0.2.1-next.2 + - @backstage/catalog-client@1.7.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.1-next.2 + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/integration-react@1.2.0-next.2 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10-next.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.1 + +## @backstage/plugin-home@0.8.0-next.2 + +### Minor Changes + +- 9893bb5: **BREAKING** Implement usage of unused `limit` query parameter in visits API `.list()` function + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.0-next.2 + - @backstage/theme@0.6.0-next.1 + - @backstage/catalog-client@1.7.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.1 + - @backstage/core-compat-api@0.3.1-next.2 + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/plugin-home-react@0.1.18-next.2 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.6.0-next.2 + +### Minor Changes + +- 73f2ccf: declare correct type (number) for publish:gitlab output.projectId + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.15.1-next.1 + - @backstage/plugin-scaffolder-node@0.5.0-next.2 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-techdocs@1.11.0-next.2 + +### Minor Changes + +- e77ff3d: Adds support for custom background colors in code blocks and inline code within TechDocs. + +### Patch Changes + +- e918061: Add support for mkdocs material palette conditional hashes. +- 720a2f9: Updated dependency `git-url-parse` to `^15.0.0`. +- e8b4966: Use more of the available space for the navigation sidebar. +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.0-next.2 + - @backstage/integration@1.15.1-next.1 + - @backstage/theme@0.6.0-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/core-compat-api@0.3.1-next.2 + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/errors@1.2.4 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/integration-react@1.2.0-next.2 + - @backstage/plugin-auth-react@0.1.7-next.2 + - @backstage/plugin-search-common@1.2.14 + - @backstage/plugin-search-react@1.8.1-next.2 + - @backstage/plugin-techdocs-common@0.1.0 + - @backstage/plugin-techdocs-react@1.2.9-next.2 + +## @backstage/app-defaults@1.5.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.0-next.1 + - @backstage/core-app-api@1.15.1-next.1 + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/plugin-permission-react@0.4.27-next.1 + +## @backstage/backend-app-api@1.0.1-next.1 + +### Patch Changes + +- ffd1f4a: Plugin lifecycle shutdown hooks are now performed before root lifecycle shutdown hooks. +- fd6e6f4: build(deps): bump `cookie` from 0.6.0 to 0.7.0 +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-node@0.8.4-next.1 + +## @backstage/backend-defaults@0.5.1-next.2 + +### Patch Changes + +- ffd1f4a: Plugin lifecycle shutdown hooks are now performed before root lifecycle shutdown hooks. +- ffd1f4a: The database manager now attempts to close any database connections in a root lifecycle shutdown hook. +- e36d12f: The task scheduler now attempts to abort any tasks if it detects that Backstage is being shut down. +- fd6e6f4: build(deps): bump `cookie` from 0.6.0 to 0.7.0 +- 720a2f9: Updated dependency `git-url-parse` to `^15.0.0`. +- Updated dependencies + - @backstage/cli-node@0.2.9-next.0 + - @backstage/backend-app-api@1.0.1-next.1 + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/backend-dev-utils@0.1.5 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.4.1-next.1 + - @backstage/plugin-permission-node@0.8.4-next.1 + +## @backstage/backend-dynamic-feature-service@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-node@0.2.9-next.0 + - @backstage/backend-app-api@1.0.1-next.1 + - @backstage/backend-defaults@0.5.1-next.2 + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/plugin-catalog-backend@1.26.2-next.2 + - @backstage/plugin-scaffolder-node@0.5.0-next.2 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.1 + - @backstage/plugin-events-backend@0.3.13-next.1 + - @backstage/plugin-events-node@0.4.1-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.4-next.1 + - @backstage/plugin-search-backend-node@1.3.3-next.2 + - @backstage/plugin-search-common@1.2.14 + +## @backstage/backend-plugin-api@1.0.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/backend-test-utils@1.0.1-next.2 + +### Patch Changes + +- fd6e6f4: build(deps): bump `cookie` from 0.6.0 to 0.7.0 +- Updated dependencies + - @backstage/backend-app-api@1.0.1-next.1 + - @backstage/backend-defaults@0.5.1-next.2 + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.4.1-next.1 + +## @backstage/catalog-client@1.7.1-next.0 + +### Patch Changes + +- 0040632: Add missing doc string to API +- Updated dependencies + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/cli@0.28.0-next.2 + +### Patch Changes + +- ea16633: Preserve directory structure for CommonJS build output, just like ESM. This makes the build output more stable and easier to browse, and allows for more effective tree shaking and lazy imports. + +- 7955f9b: Tweaked the new package feature detection to not be active when building backend packages. + +- 720a2f9: Updated dependency `git-url-parse` to `^15.0.0`. + +- 2c5ecf5: Support `--max-warnings` flag for package linting + +- 8fe740d: Added a new `--successCache` option to the `backstage-cli repo test` and `backstage-cli repo lint` commands. The cache keeps track of successful runs and avoids re-running for individual packages if they haven't changed. This option is intended only to be used in CI. + + In addition a `--successCacheDir ` option has also been added to be able to override the default cache directory. + +- f0514c7: Disabled parsing of input source maps in the SWC transform for Jest. + +- Updated dependencies + - @backstage/cli-node@0.2.9-next.0 + - @backstage/eslint-plugin@0.1.10-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## @backstage/cli-node@0.2.9-next.0 + +### Patch Changes + +- fec7278: Added new `lockfile.getDependencyTreeHash(name)` utility. +- Updated dependencies + - @backstage/cli-common@0.1.14 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/core-compat-api@0.3.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/version-bridge@1.0.10-next.0 + +## @backstage/core-components@0.15.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.0-next.1 + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/errors@1.2.4 + - @backstage/version-bridge@1.0.10-next.0 + +## @backstage/create-app@0.5.21-next.2 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.14 + +## @backstage/dev-utils@1.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.14.0-next.2 + - @backstage/theme@0.6.0-next.1 + - @backstage/app-defaults@1.5.12-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-app-api@1.15.1-next.1 + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/integration-react@1.2.0-next.2 + +## @backstage/eslint-plugin@0.1.10-next.1 + +### Patch Changes + +- b1c2a2d: Exclude `@material-ui/data-grid` + +## @backstage/frontend-app-api@0.10.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.1 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/errors@1.2.4 + - @backstage/frontend-defaults@0.1.1-next.2 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10-next.0 + +## @backstage/frontend-defaults@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/frontend-app-api@0.10.0-next.2 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/plugin-app@0.1.1-next.2 + +## @backstage/frontend-plugin-api@0.9.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10-next.0 + +## @backstage/frontend-test-utils@0.2.1-next.2 + +### Patch Changes + +- 0801db6: Added an `ApiMock`, analogous to `ServiceMock` from the backend test utils. +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/frontend-app-api@0.10.0-next.2 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/test-utils@1.6.1-next.2 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.10-next.0 + - @backstage/plugin-app@0.1.1-next.2 + +## @backstage/integration@1.15.1-next.1 + +### Patch Changes + +- 720a2f9: Updated dependency `git-url-parse` to `^15.0.0`. +- Updated dependencies + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/integration-react@1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.15.1-next.1 + - @backstage/config@1.2.0 + - @backstage/core-plugin-api@1.10.0-next.1 + +## @backstage/repo-tools@0.10.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-node@0.2.9-next.0 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + +## @techdocs/cli@1.8.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.2 + - @backstage/plugin-techdocs-node@1.12.12-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/cli-common@0.1.14 + - @backstage/config@1.2.0 + +## @backstage/test-utils@1.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.0-next.1 + - @backstage/config@1.2.0 + - @backstage/core-app-api@1.15.1-next.1 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-react@0.4.27-next.1 + +## @backstage/plugin-api-docs@0.11.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.24.0-next.2 + - @backstage/plugin-catalog-react@1.14.0-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/core-compat-api@0.3.1-next.2 + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-permission-react@0.4.27-next.1 + +## @backstage/plugin-app@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.6.0-next.1 + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/frontend-plugin-api@0.9.0-next.2 + - @backstage/plugin-permission-react@0.4.27-next.1 + +## @backstage/plugin-app-backend@0.3.76-next.1 + +### Patch Changes + +- 2c4ee26: Fixed unexpected behaviour where configuration supplied with `APP_CONFIG_*` environment variables where not filtered by the configuration schema. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + - @backstage/config-loader@1.9.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.26-next.1 + +## @backstage/plugin-app-node@0.1.26-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config-loader@1.9.1 + +## @backstage/plugin-app-visualizer@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/frontend-plugin-api@0.9.0-next.2 + +## @backstage/plugin-auth-backend@0.23.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.1 + - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.1 + - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.1 + - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.1 + - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.1 + - @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.1 + - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.1 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.1 + - @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.1 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.1 + - @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.1 + - @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.1 + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/catalog-client@1.7.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.1 + - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.1 + - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.1 + - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.1 + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-auth0-provider@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-aws-alb-provider@0.2.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/errors@1.2.4 + - @backstage/plugin-auth-backend@0.23.1-next.1 + +## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-google-provider@0.2.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- daa02d6: Add `skipUserProfile` config flag to Microsoft authenticator +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/errors@1.2.4 + +## @backstage/plugin-auth-backend-module-oidc-provider@0.3.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/plugin-auth-backend@0.23.1-next.1 + +## @backstage/plugin-auth-backend-module-okta-provider@0.1.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.1-next.1 + +### Patch Changes + +- 217458a: Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + +## @backstage/plugin-auth-node@0.5.3-next.1 + +### Patch Changes + +- 217458a: Added a new `allowedDomains` option for the common `emailLocalPartMatchingUserEntityName` sign-in resolver. +- Updated dependencies + - @backstage/catalog-client@1.7.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-react@0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.15.1-next.2 + - @backstage/core-plugin-api@1.10.0-next.1 + - @backstage/errors@1.2.4 + +## @backstage/plugin-bitbucket-cloud-common@0.2.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.15.1-next.1 + +## @backstage/plugin-catalog-backend@1.26.2-next.2 + +### Patch Changes + +- 720a2f9: Updated dependency `git-url-parse` to `^15.0.0`. +- f1cab41: Update catalog search table in transaction +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/backend-openapi-utils@0.2.0-next.1 + - @backstage/catalog-client@1.7.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-events-node@0.4.1-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.4-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.2 + +## @backstage/plugin-catalog-backend-module-aws@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.2 + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration-aws-node@0.1.12 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-catalog-backend-module-azure@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/backend-openapi-utils@0.2.0-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-backend-module-gcp@0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-kubernetes-common@0.8.3 + +## @backstage/plugin-catalog-backend-module-gerrit@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## @backstage/plugin-catalog-backend-module-github@0.7.5-next.2 + +### Patch Changes + +- 720a2f9: Updated dependency `git-url-parse` to `^15.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/plugin-catalog-backend@1.26.2-next.2 + - @backstage/catalog-client@1.7.1-next.0 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-events-node@0.4.1-next.1 + +## @backstage/plugin-catalog-backend-module-github-org@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/plugin-catalog-backend-module-github@0.7.5-next.2 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/config@1.2.0 + - @backstage/plugin-events-node@0.4.1-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.1-next.2 + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-events-node@0.4.1-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/plugin-catalog-backend-module-gitlab@0.4.3-next.2 + - @backstage/plugin-events-node@0.4.1-next.1 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.5.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/plugin-catalog-backend@1.26.2-next.2 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-events-node@0.4.1-next.1 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.9.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-logs@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.26.2-next.2 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/plugin-events-node@0.4.1-next.1 + +## @backstage/plugin-catalog-backend-module-msgraph@0.6.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/integration@1.15.1-next.1 + - @backstage/plugin-catalog-backend@1.26.2-next.2 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.1.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-common@1.1.0 + - @backstage/plugin-scaffolder-common@1.5.6 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/plugin-catalog-node@1.13.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-catalog-unprocessed-entities-common@0.0.4 + - @backstage/plugin-permission-common@0.8.1 + +## @backstage/plugin-catalog-graph@0.4.11-next.2 + +### Patch Changes + +- 4d9f39e: Added InfoCard `action` attribute for CatalogGraphCard + + ```tsx + const action =