Merge branch 'master' into fix/issue-25890

This commit is contained in:
Mahendra Suthar
2024-08-16 14:43:40 +05:30
985 changed files with 33100 additions and 7628 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-defaults': patch
---
Add access restrictions to the JWKS external access method config schema
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog': patch
---
Export `RelatedEntitiesCard` presets to be reused.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Add an extra bit of height to the EntityPicker dropdown to make it clear there are more options to select from, and to remove the scroll bar when there is less than 10 options
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Fixing issue with extension blueprints `inputs` merging.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-react': patch
---
Fixed a bug in `DefaultTableOutputs` where output elements overlapped on smaller screen sizes
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog': patch
---
The entity relation cards available for the new frontend system via `/alpha` now have more accurate and granular default filters.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-app-api': minor
---
**BREAKING**: Removed several deprecated service factories. These can instead be imported from `@backstage/backend-defaults` package.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-plugin-api': patch
---
Added `createBackendFeatureLoader`, which can be used to create an installable backend feature that can in turn load in additional backend features in a dynamic way.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Added support for using the `params` in other properties of the `createExtensionBlueprint` options by providing a callback.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Renamed `createPlugin` to `createFrontendPlugin`. The old symbol is still exported but deprecated.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-notifications': patch
---
Fixed issue with notification reloading on page change
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-catalog-backend': patch
---
`ProcessorOutputCollector` returns an error when receiving deferred entities that have an invalid `metadata.annotations` format.
This allows to return an error on an actual validation issue instead of reporting that the location annotations are missing afterwards, which is misleading for the users.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-catalog-react': patch
'@backstage/plugin-search-react': patch
'@backstage/plugin-catalog': patch
---
Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Correct the `TConfig` type of data references to only contain config
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-app-api': patch
---
Added support for the latest version of `BackendFeature`s from `@backstage/backend-plugin-api`, including feature loaders.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-test-utils': patch
---
Internal updates to support latest version of `BackendFeauture`s from `@backstage/backend-plugin-api`.
+16
View File
@@ -0,0 +1,16 @@
---
'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
'@backstage/backend-dynamic-feature-service': patch
'@backstage/plugin-scaffolder-backend-module-rails': patch
'@backstage/plugin-catalog-backend-module-openapi': patch
'@backstage/plugin-catalog-backend-module-aws': patch
'@backstage/plugin-search-backend-node': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-scaffolder-node': patch
'@backstage/plugin-techdocs-node': patch
---
Update deprecated url-reader-related imports.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-react': patch
---
`Liveness Probe` added in ContainerCard Component of PodDrawer
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-scaffolder-node': patch
---
Add support for status filtering in scaffolder tasks endpoint
+15
View File
@@ -0,0 +1,15 @@
---
'@backstage/backend-plugin-api': minor
---
**BREAKING** Deleted the following deprecated `UrlReader` exports
- ReadUrlOptions: Use `UrlReaderServiceReadUrlOptions` instead;
- ReadUrlResponse: Use `UrlReaderServiceReadUrlResponse` instead;
- ReadTreeOptions: Use `UrlReaderServiceReadTreeOptions` instead;
- ReadTreeResponse: Use `UrlReaderServiceReadTreeResponse` instead;
- ReadTreeResponseFile: Use `UrlReaderServiceReadTreeResponseFile` instead;
- ReadTreeResponseDirOptions: Use `UrlReaderServiceReadTreeResponseDirOptions` instead;
- SearchOptions: Use `UrlReaderServiceSearchOptions` instead;
- SearchResponse: Use `UrlReaderServiceSearchResponse` instead;
- SearchResponseFile: Use `UrlReaderServiceSearchResponseFile` instead.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
---
Added autocompletion support for resource `branches`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
---
Add ability to set the initial commit message when initializing a repository using the scaffolder action.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-notifications-backend-module-email': patch
'@backstage/plugin-notifications-backend': patch
---
Avoid sending broadcast emails as a fallback in case the entity-typed notification user can not be resolved.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-azure': patch
---
Added examples for publish:azure action and updated its test cases
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-api-docs': patch
---
`ConsumingComponentsCard` and `ProvidingComponentsCard` will now optionally accept `columns` to override which table columns are displayed
+10
View File
@@ -0,0 +1,10 @@
---
'@backstage/backend-test-utils': patch
'@backstage/plugin-kubernetes-node': patch
'@backstage/plugin-kubernetes-backend': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-proxy-backend': patch
'@backstage/backend-dynamic-feature-service': patch
---
Update internal imports
+20
View File
@@ -0,0 +1,20 @@
---
'@backstage/frontend-plugin-api': patch
---
Support overriding of plugin extensions using the new `plugin.withOverrides` method.
```tsx
import homePlugin from '@backstage/plugin-home';
export default homePlugin.withOverrides({
extensions: [
homePage.getExtension('page:home').override({
*factory(originalFactory) {
yield* originalFactory();
yield coreExtensionData.reactElement(<h1>My custom home page</h1>);
},
}),
],
});
```
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/frontend-test-utils': patch
'@backstage/frontend-app-api': patch
'@backstage/core-compat-api': patch
'@backstage/plugin-app-visualizer': patch
---
Updated usage of `useRouteRef`, which can now always return `undefined`.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/backend-defaults': patch
---
Added deprecation warning to urge users to perform the auth service migration or implement their own token manager service.
See https://backstage.io/docs/tutorials/auth-service-migration for more information.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Switched the `process` polyfill to use `require.resolve` for greater compatability.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-defaults': patch
---
update the `morgan` middleware to use a custom format to prevent PII from being logged
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
---
Added test cases for gitlab:issues:create examples
+14
View File
@@ -0,0 +1,14 @@
---
'@backstage/plugin-app-visualizer': patch
'@backstage/plugin-catalog-graph': patch
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-catalog': patch
'@backstage/plugin-devtools': patch
'@backstage/plugin-org': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-search': patch
'@backstage/plugin-techdocs': patch
'@backstage/plugin-user-settings': patch
---
Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-app-api': minor
---
Remove deprecated `urlReaderServiceFactory`, please import from `@backstage/backend-defaults/urlReader` instead.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
Allow for more granular control of TechDocsReaderPage styling. Theme overrides can now be provided to TechDocs without affecting the theme in other areas of Backstage.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/backend-plugin-api': patch
'@backstage/backend-defaults': patch
---
The `SchedulerService` now allows tasks with `frequency: { trigger: 'manual' }`. This means that the task will not be scheduled, but rather run only when manually triggered with `SchedulerService.triggerTask`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-github': patch
---
Added examples for github:repo:create action and improved test cases
+26
View File
@@ -0,0 +1,26 @@
---
'@backstage/backend-plugin-api': patch
---
Added `createBackendFeatureLoader`, which can be used to programmatically select and install backend features.
A feature loader can return an list of features to be installed, for example in the form on an `Array` or other for of iterable, which allows for the loader to be defined as a generator function. Both synchronous and asynchronous loaders are supported.
Additionally, a loader can depend on services in its implementation, with the restriction that it can only depend on root-scoped services, and it may not override services that have already been instantiated.
```ts
const searchLoader = createBackendFeatureLoader({
deps: {
config: coreServices.rootConfig,
},
*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');
}
},
});
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
Added OpenTelemetry support to Scaffolder metrics
+12
View File
@@ -0,0 +1,12 @@
---
'@backstage/backend-test-utils': minor
---
**BREAKING**: Removed these deprecated helpers:
- `setupRequestMockHandlers` Use `CreateMockDirectoryOptions` instead.
- `CreateMockDirectoryOptions` Use `registerMswTestHooks` instead.
Stopped exporting the deprecated and internal `isDockerDisabledForTests` helper.
Removed `get` method from `ServiceFactoryTester` which is replaced by `getSubject`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-notifications-backend': patch
---
fix: consider broadcast union with user
+36
View File
@@ -0,0 +1,36 @@
---
'@backstage/backend-common': minor
---
**BREAKING**: Removed the following `Url Reader` deprecated exports:
- UrlReader: Use `UrlReaderService` from `@backstage/backend-plugin-api` instead;
- AzureUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- BitbucketUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- BitbucketCloudUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- BitbucketServerUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- GithubUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- GitlabUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- GerritUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- GiteaUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- HarnessUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- AwsS3UrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- FetchUrlReader: Import from `@backstage/backend-defaults/urlReader` instead;
- UrlReaders: Import from `@backstage/backend-defaults/urlReader` instead;
- UrlReadersOptions: Import from `@backstage/backend-defaults/urlReader` instead;
- UrlReaderPredicateTuple: Import from `@backstage/backend-defaults/urlReader` instead;
- FromReadableArrayOptions: Import from `@backstage/backend-defaults/urlReader` instead;
- ReaderFactory: Import from `@backstage/backend-defaults/urlReader` instead;
- ReadUrlOptions:Use `UrlReaderServiceReadUrlOptions` from `@backstage/backend-plugin-api` instead;
- ReadUrlResponse: Use `UrlReaderServiceReadUrlResponse` from `@backstage/backend-plugin-api` instead;
- ReadUrlResponseFactory: Import from `@backstage/backend-defaults/urlReader` instead;
- ReadUrlResponseFactoryFromStreamOptions: Import from `@backstage/backend-defaults/urlReader` instead;
- ReadTreeOptions: Use `UrlReaderServiceReadTreeOptions` from `@backstage/backend-plugin-api` instead;
- ReadTreeResponse: Use `UrlReaderServiceReadTreeResponse` from `@backstage/backend-plugin-api` instead;
- ReadTreeResponseFile: Use `UrlReaderServiceReadTreeResponseFile` from `@backstage/backend-plugin-api` instead;
- ReadTreeResponseDirOptions: Use `UrlReaderServiceReadTreeResponseDirOptions` from `@backstage/backend-plugin-api` instead;
- ReadTreeResponseFactory: Import from `@backstage/backend-defaults/urlReader` instead;
- ReadTreeResponseFactoryOptions: Import from `@backstage/backend-defaults/urlReader` instead;
- SearchOptions: Use `UrlReaderServiceSearchOptions` from `@backstage/backend-plugin-api` instead;
- SearchResponse: Use `UrlReaderServiceSearchResponse` from `@backstage/backend-plugin-api` instead;
- SearchResponseFile: Use `UrlReaderServiceSearchResponseFile` from `@backstage/backend-plugin-api` instead.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-tasks': patch
---
The `PluginTaskScheduler` now allows tasks with `frequency: { trigger: 'manual' }`. This means that the task will not be scheduled, but rather run only when manually triggered with `PluginTaskScheduler.triggerTask`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-app-api': patch
---
Update the `ServiceRegister` implementation to enable registering multiple service implementations for a given service ref.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-backend': patch
---
Added back `type: 'local'` to TechDocs config schema for `publisher`
+10
View File
@@ -0,0 +1,10 @@
---
'@backstage/core-compat-api': patch
'@backstage/frontend-app-api': patch
'@backstage/frontend-test-utils': patch
'@backstage/plugin-api-docs': patch
'@backstage/plugin-home': patch
'@backstage/plugin-kubernetes': patch
---
Migrating usages of the deprecated `createExtension` `v1` format to the newer `v2` format, and old `create*Extension` extension creators to blueprints.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-notifications-backend': patch
---
Allow using notifications without users in the catalog
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-node': minor
---
**BREAKING**: Sign-in resolvers configured via `.signIn.resolvers` now take precedence over sign-in resolvers passed to `signInResolver` option of `createOAuthProviderFactory`. This effectively makes sign-in resolvers passed via the `signInResolver` the default one, which you can then override through configuration.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-dev-utils': patch
---
Fix `EventEmitter` memory leak in the development utilities
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Add support for accessing extensions definitions provided by a plugin via `plugin.getExtension(...)`. For this to work the extensions must be defined using the v2 format, typically using an extension blueprint.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': minor
---
Changed the way to display entities in `MyGroupsPicker` to use `entityPresentationApi` and make it consistent across scaffolder pickers
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
Refactor TechDocs' mkdocs-redirects support.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
TechDocs redirect feature now includes a notification to the user before they are redirected.
+72 -1
View File
@@ -1,5 +1,5 @@
{
"mode": "pre",
"mode": "exit",
"tag": "next",
"initialVersions": {
"example-app": "0.2.99",
@@ -190,41 +190,73 @@
"@backstage/plugin-techdocs-common": "0.0.0"
},
"changesets": [
"angry-dolphins-camp",
"big-countries-wait",
"big-eagles-grab",
"blue-pumas-cheer",
"breezy-cats-kiss",
"breezy-jeans-tie",
"breezy-rings-fly",
"bright-donkeys-buy",
"bright-trainers-brake",
"calm-crabs-drop",
"chilly-days-peel",
"chilly-trains-sleep",
"clean-kids-applaud",
"clever-pans-brake",
"cool-insects-remember",
"cool-schools-vanish",
"create-app-1722413762",
"cuddly-zebras-crash",
"curvy-pillows-joke",
"cyan-shrimps-push",
"dry-squids-tap",
"dull-ghosts-double",
"early-trees-dance",
"eighty-emus-leave",
"eighty-jokes-deny",
"eighty-mirrors-flow",
"fair-hairs-mix",
"fair-pumas-hang",
"fast-bulldogs-relax",
"few-wasps-hug",
"five-mangos-agree",
"flat-papayas-push",
"flat-plums-grow",
"forty-ties-agree",
"forty-ties-disagree",
"fresh-timers-walk",
"friendly-cherries-applaud",
"friendly-chicken-cry",
"friendly-feet-refuse",
"funny-bears-sort",
"funny-wolves-learn",
"gentle-dryers-smile",
"good-steaks-report",
"green-planets-reflect",
"grumpy-owls-suffer",
"healthy-fireants-jump",
"healthy-timers-divide",
"heavy-numbers-love",
"hip-fishes-guess",
"hip-hairs-exist",
"itchy-experts-tie",
"khaki-lamps-peel",
"late-games-protect",
"light-pianos-exercise",
"little-bulldogs-guess",
"little-suns-fly",
"mean-apricots-perform",
"metal-planes-nail",
"metal-rice-call",
"mighty-apricots-taste",
"mighty-dolls-retire",
"mighty-geckos-kiss",
"modern-parrots-protect",
"modern-poems-mate",
"neat-bears-divide",
"neat-gifts-join",
"neat-socks-cheer",
"new-scissors-try",
"nice-peas-retire",
"nine-cherries-decide",
@@ -232,20 +264,41 @@
"nine-seahorses-relate",
"ninety-icons-smile",
"odd-books-share",
"old-tools-smell",
"olive-books-sort",
"orange-gifts-protect",
"perfect-cars-jam",
"pink-gorillas-brake",
"plenty-tools-exist",
"popular-panthers-hear",
"purple-carrots-crash",
"quick-roses-juggle",
"rare-foxes-compete",
"real-lizards-sit",
"red-radios-promise",
"renovate-147ac48",
"renovate-f04beb1",
"rich-mugs-dress",
"selfish-bees-think",
"seven-days-film",
"seven-eggs-admire",
"shaggy-dodos-applaud",
"shaggy-mugs-return",
"shy-games-poke",
"shy-waves-share",
"silly-candles-sin",
"silly-cycles-tan",
"silly-scissors-turn",
"silver-pillows-begin",
"six-mails-smell",
"six-rats-kick",
"sixty-kiwis-poke",
"slow-ducks-rush",
"slow-ligers-drum",
"slow-rocks-end",
"slow-toes-jog",
"small-bottles-cough",
"small-ears-poke",
"small-spoons-shout",
"smooth-countries-relate",
"soft-gorillas-refuse",
@@ -253,20 +306,38 @@
"spicy-planets-provide",
"spotty-planets-accept",
"strange-papayas-beg",
"strong-chicken-kiss",
"strong-otters-compete",
"stupid-dots-relate",
"sweet-oranges-buy",
"swift-kings-sparkle",
"tall-snakes-fix",
"tasty-ads-rescue",
"ten-penguins-roll",
"thick-hotels-know",
"thick-squids-drive",
"thin-carrots-eat",
"thirty-adults-grab",
"thirty-paws-hope",
"tiny-dodos-prove-2",
"tiny-dodos-prove",
"tiny-oranges-pretend",
"tough-goats-hang",
"tough-lies-repair",
"tricky-ducks-juggle",
"tricky-rules-destroy",
"two-emus-work",
"violet-jokes-wave",
"warm-monkeys-marry",
"weak-jobs-joke",
"wicked-bobcats-teach",
"wild-eggs-exist",
"wise-spiders-walk",
"witty-bears-behave",
"witty-geese-battle",
"witty-queens-run",
"witty-timers-marry",
"young-birds-push",
"young-games-visit",
"young-peaches-shake"
]
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-test-utils': patch
---
Update the `ServiceFactoryTester` to be able to test services that enables multi implementation installation.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-auth-backend-module-gcp-iap-provider': patch
'@backstage/core-components': patch
---
Corrected the documentation for the GCP IAP auth module and updated the configuration to follow proxy configuration conventions by ignoring authEnv
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Fix undefined in the title of Scaffolder Runs on the page load
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-api-docs': patch
---
Updated dependency `@graphiql/react` to `^0.23.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-plugin-api': patch
---
Fixed a type issue where plugin and modules depending on multiton services would not receive the correct type.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-backend': patch
---
Update configuration schema to match actual behavior
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-notifications-backend-module-email': patch
---
Add support for stream transport for debugging purposes
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-defaults': patch
---
Update the `UrlReader` service to depends on multiple instances of `UrlReaderFactoryProvider` service.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
TechDocs now supports the `mkdocs-redirects` plugin. Redirects defined using the `mkdocs-redirect` plugin will be handled automatically in TechDocs. Redirecting to external urls is not supported. In the case that an external redirect url is provided, TechDocs will redirect to the current documentation site home.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Included permission config and enabled it out of the box
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
Internal type refactor.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Support merging of `inputs` in extension blueprints, but stop merging `output`. In addition, the original factory in extension blueprints now returns a data container that both provides access to the returned data, but can also be forwarded as output.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-defaults': patch
---
use formatted query to prevent chance of SQL-injection
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-compat-api': patch
---
Both `compatWrapper` and `convertLegacyRouteRef` now support converting from the new system to the old.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Updated dependency `@module-federation/enhanced` to `0.3.1`
+58
View File
@@ -0,0 +1,58 @@
---
'@backstage/backend-plugin-api': minor
---
The `createServiceRef` function now accepts a new boolean `multiple` option. The `multiple` option defaults to `false` and when set to `true`, it enables that multiple implementation are installed for the created service ref.
We're looking for ways to make it possible to augment services without the need to replace the entire service.
Typical example of that being the ability to install support for additional targets for the `UrlReader` service without replacing the service itself. This achieves that by allowing us to define services that can have multiple simultaneous implementation, allowing the `UrlReader` implementation to depend on such a service to collect all possible implementation of support for external targets:
```diff
// @backstage/backend-defaults
+ export const urlReaderFactoriesServiceRef = createServiceRef<ReaderFactory>({
+ id: 'core.urlReader.factories',
+ scope: 'plugin',
+ multiton: true,
+ });
...
export const urlReaderServiceFactory = createServiceFactory({
service: coreServices.urlReader,
deps: {
config: coreServices.rootConfig,
logger: coreServices.logger,
+ factories: urlReaderFactoriesServiceRef,
},
- async factory({ config, logger }) {
+ async factory({ config, logger, factories }) {
return UrlReaders.default({
config,
logger,
+ factories,
});
},
});
```
With that, you can then add more custom `UrlReader` factories by installing more implementations of the `urlReaderFactoriesServiceRef` in your backend instance. Something like:
```ts
// packages/backend/index.ts
import { createServiceFactory } from '@backstage/backend-plugin-api';
import { urlReaderFactoriesServiceRef } from '@backstage/backend-defaults';
...
backend.add(createServiceFactory({
service: urlReaderFactoriesServiceRef,
deps: {},
async factory() {
return CustomUrlReader.factory;
},
}));
...
```
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/frontend-plugin-api': minor
---
**BREAKING**: All types of route refs are always considered optional by `useRouteRef`, which means the caller must always handle a potential `undefined` return value. Related to this change, the `optional` option from `createExternalRouteRef` has been removed, since it is no longer necessary.
This is released as an immediate breaking change as we expect the usage of the new route refs to be extremely low or zero, since plugins that support the new system will still use route refs and `useRouteRef` from `@backstage/core-plugin-api` in combination with `convertLegacyRouteRef` from `@backstage/core-compat-api`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend-module-cloudflare-access-provider': minor
---
Support for Cloudflare Custom Headers and Custom Cookie Auth Name
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-defaults': patch
---
Avoid excessive numbers of error listeners on cache clients
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-notifications': minor
---
By default, set notification as read when opening snackbar or web notification link
+34
View File
@@ -0,0 +1,34 @@
---
'@backstage/frontend-plugin-api': patch
'@backstage/frontend-test-utils': patch
---
Added support for being able to override extension definitions.
```tsx
const TestCard = EntityCardBlueprint.make({
...
});
TestCard.override({
// override attachment points
attachTo: { id: 'something-else', input: 'overridden' },
// extend the config schema
config: {
schema: {
newConfig: z => z.string().optional(),
}
},
// override factory
*factory(originalFactory, { inputs, config }){
const originalOutput = originalFactory();
yield coreExentsionData.reactElement(
<Wrapping>
{originalOutput.get(coreExentsionData.reactElement)}
</Wrapping>
);
}
});
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-github': patch
---
Added examples for action github:pages and improved its test cases
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-search-backend-node': patch
'@backstage/plugin-catalog-node': patch
---
Explicit declare if the service ref accepts `single` or `multiple` implementations.
+19
View File
@@ -0,0 +1,19 @@
---
'@backstage/frontend-test-utils': patch
---
Deprecate the `.render` method of the `createExtensionTester` in favour of using `renderInTestApp` directly.
```tsx
import {
renderInTestApp,
createExtensionTester,
} from '@backstage/frontend-test-utils';
const tester = createExtensionTester(extension);
const { getByTestId } = renderInTestApp(tester.reactElement());
// or if you're not using `coreExtensionData.reactElement` as the output ref
const { getByTestId } = renderInTestApp(tester.get(myComponentRef));
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
export `createConfigSecretEnumerator` from `@backstage/backend-common` instead of `@backstage/backend-app-api`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-test-utils': patch
---
Deprecate existing `ExtensionCreators` in favour of their new Blueprint counterparts.
+9
View File
@@ -0,0 +1,9 @@
---
'@backstage/frontend-test-utils': patch
---
Refactor `.make` method on Blueprints into two different methods, `.make` and `.makeWithOverrides`.
When using `createExtensionBlueprint` you can define parameters for the factory function, if you wish to take advantage of these parameters you should use `.make` when creating an extension instance of a Blueprint. If you wish to override more things other than the standard `attachTo`, `name`, `namespace` then you should use `.makeWithOverrides` instead.
`.make` is reserved for simple creation of extension instances from Blueprints using higher level parameters, whereas `.makeWithOverrides` is lower level and you have more control over the final extension.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': minor
---
Added field extension `RepoBranchPicker` that supports autocompletion for Bitbucket
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-node': patch
---
Fix TechDocs Edit URL for nested docs
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/plugin-catalog-backend-module-github': patch
---
Fix GitHub `repository` event support.
- `$.repository.organization` is only provided for `push` events. Switched to `$.organization.login` instead.
- `$.repository.url` is not always returning the expected and required value. Use `$.repository.html_url` instead.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-sentry': patch
---
Added test cases for sentry:project:create examples
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-api-docs': patch
'@backstage/plugin-catalog': patch
---
Add `tableOptions` to all tables and additionally `title` to API tables.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Entity page extensions created for the new frontend system via the `/alpha` exports will now be enabled by default.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-notifications-backend-module-email': patch
---
Notification email processor supports allowing or denying specific email addresses from receiving notifications
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-bitbucket-cloud-common': patch
---
Added method `listBranchesByRepository` to `BitbucketCloudClient`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/catalog-model': minor
---
Introduce an optional spec.type attribute on the Domain and System entity kinds
@@ -243,8 +243,10 @@ Mkdocs
monorepo
Monorepo
monorepos
morgan
msgraph
msw
multiton
mutex
mutexes
mysql
+1 -1
View File
@@ -51,7 +51,7 @@ jobs:
- run: yarn build-storybook
- uses: chromaui/action@5991575112b472a4fa85429f29cc17e2fb83a2a2 # v11
- uses: chromaui/action@fdbe7756d4dbf493e2fbb822df73be7accd07e1c # v11
with:
token: ${{ secrets.GITHUB_TOKEN }}
# projectToken intentionally shared to allow collaborators to run Chromatic on forks
@@ -0,0 +1,223 @@
---
title: Supporting templating syntax in `parameters` schema
status: provisional
authors:
- '@benjdlambert'
owners:
- '@benjdlambert'
- '@backstage/scaffolder-maintainers'
project-areas:
- scaffolder
creation-date: 2024-03-26
---
<!--
**Note:** When your BEP is complete, all these pre-existing comments should be removed
When editing BEPs, aim for tightly-scoped, single-topic PRs to keep discussions focused. If you disagree with what is already in a document, open a new PR with suggested changes.
-->
# BEP: Supporting templating syntax in `parameters` schema
<!-- Before merging the initial BEP PR, create a feature issue and update the below link. You can wait with this step until the BEP is ready to be merged. -->
[**Discussion Issue**](https://github.com/backstage/backstage/issues/16275)
- [Summary](#summary)
- [Motivation](#motivation)
- [Goals](#goals)
- [Non-Goals](#non-goals)
- [Proposal](#proposal)
- [Design Details](#design-details)
- [Release Plan](#release-plan)
- [Dependencies](#dependencies)
- [Alternatives](#alternatives)
## Summary
<!--
The summary of the BEP is a few paragraphs long and give a high-level overview of the features to be implemented. It should be possible to read *only* the summary and understand what the BEP is proposing to accomplish and what impact it has for users.
-->
This BEP proposes to add support for templating syntax in the `parameters` schema of a scaffolder template.
This will allow users to define properties in the JSON Schema which are templated from current values that have been collected from the user already.
This can be useful when you want to use a value that has already been collected as a default value in another field.
For example:
```yaml
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: my-template
spec:
parameters:
- title: Some input
description: Get some info from the user
properties:
name:
type: string
default: Test
description:
type: string
default: ${{ parameters.name or "unknown" }}-description
```
## Motivation
<!--
This section is for explicitly listing the motivation, goals, and non-goals of
this BEP. Describe why the change is important and the benefits to users.
-->
Inclusive of the initial RFC there's been a swarm of issues that are requesting this feature, and we want to align on the implementation and design of this feature.
See the following:
- https://github.com/backstage/backstage/issues/16275
- https://github.com/backstage/backstage/pull/23283
- https://github.com/backstage/backstage/issues/19597
- https://github.com/backstage/backstage/issues/20533
- https://github.com/backstage/backstage/pull/17746
There's some ideas for introducing a templating syntax for both templating into the `parameters` schema, and also being able to pass through some templating strings to underlying field extensions that can use those templating strings.
We want to align here so that we're not going to have those conflict or compete, and create a standard for how to achieve templating in both circumstances.
### Goals
<!--
List the specific goals of the BEP. What is it trying to achieve? How will we
know that this has succeeded?
-->
- This BEP will settle the implementation for the templating of fields into the JSON Schema in the `parameters` section in the scaffolder templates.
- This BEP will settle how to pass through templating strings to underlying field extensions in a non-conflicting way.
### Non-Goals
<!--
What is out of scope for this BEP? Listing non-goals helps to focus discussion
and make progress.
-->
## Proposal
The proposal is to be able to decorate the template schema server side with a context and use that to drive the form rendering client side.
We can extend the `/parameter-schema` endpoint to accept a `formData` context query parameter which will be a JSON object of the current `formData` state. This in turn allows the scaffolder frontend to repeatedly call the endpoint to get the updated rendered parameter schema. We'll need to turn the endpoint into a `POST` endpoint to accept the form data, but will retain the `GET` version for backwards compatibility.
## Design Details
### Example implementation of the `/parameter-schema` endpoint
```diff
export interface ScaffolderApi {
getTemplateParameterSchema(
templateRef: string,
+ formData?: JsonObject,
): Promise<TemplateParameterSchema>;
}
```
```diff
router
- .get(
+ .post(
'/v2/templates/:namespace/:kind/:name/parameter-schema',
async (req, res) => {
const credentials = await httpAuth.credentials(req);
const { token } = await auth.getPluginRequestToken({
onBehalfOf: credentials,
targetPluginId: 'catalog',
});
const template = await authorizeTemplate(
req.params,
token,
credentials,
);
const parameters = [template.spec.parameters ?? []].flat();
+ const secureTemplater = await SecureTemplater.loadRenderer({
+ templateFilters: {
+ ...createDefaultFilters({ integrations }),
+ ...additionalTemplateFilters,
+ },
+ templateGlobals: additionalTemplateGlobals,
+ });
+
+ const templatedParameters = parameters.map(parameter =>
+ renderTemplateString(
+ parameter,
+ {
+ parameters: req.body.formData,
+ },
+ secureTemplater,
+ logger,
+ ),
+ );
```
You can see a quick implementation of this in this [branch](https://github.com/backstage/backstage/compare/master...blam/templating-in-parameters)
### Workaround for the `default` field
There's a slight issue with the implementation of the `react-jsonschema-form`, which makes things like live updating on things like the `default` field slightly more difficult.
Currently, on first render, the default value is populated and then stored in the `formData` object or the current state, and the default value is never re-evaluated again at a later stage.
This means that if end users are wanting to set default values with `${{ parameters.myOtherProperty }}`, then they would need to ensure that they are on different steps in the form
as the form would need to be re-rendered, and for performance reasons, we don't want to re-render the form on every `formData` update.
We could fix this, by implementing custom logic for when the `parameter-schema` is updated, if the updated field is in a `default: *` field, then we replace the previous value with the new value in the `formData` automatically.
This is a pretty ugly workaround, but maybe the only option we have. Also at this point, pretty unsure if this affects any other parts of the `JSONSchema`, and we would also have to implement it for those fields if they exist.
### Templated error messages
Templating for `errorMessages` has been solved by using the `ajv-errors` library https://github.com/backstage/backstage/pull/25624, you can see more about [`backrefs` and pointers here](https://ajv.js.org/packages/ajv-errors.html). Any other template strings that will be passed through the underlying components and to be left untemplated should be encapsulated with options instead of passing through raw strings. The below example illustrates an `entityAndName` format, which under the hood, might do something like `${{ parameters.entity }} - ${{ parameters.name }}`, but this implementation never leaks out to the templating language.
```yaml
parameters:
properties:
...
description:
type: string
default: Test-description
ui:field: CustomDisplayField
ui:options:
format: entityAndName
```
## Release Plan
<!--
This section should describe the rollout process for any new features. It must take our version policies into account and plan for a phased rollout if this change affects any existing stable APIs.
If there is any particular feedback to be gathered during the rollout, this should be described here as well.
-->
This change is backwards compatible, and can be released in a minor release. There's no breaking changes to worry about here.
## Dependencies
<!--
List any dependencies that this work has on other BEPs or features.
-->
## Alternatives
<!--
What other approaches did you consider, and why did you rule them out? These do
not need to be as detailed as the proposal, but should include enough
information to express the idea and why it was not acceptable.
-->
### Templating client side
- This could lead to confusion as `filters` such as `parseRepoUrl` and `pick` and any custom filters which you define in the backend would not be available in the client side.
- Also with the limitations of the `default` value being updated only on first render and never re-evaluated, there's no performance benefit of doing things client side anymore.
### Accept limitation of the `default` field
Rather than using a workaround to support re-evaluating the `default` field, we could instead accept it as a limitation, and document it as such.
This is not desirable, as it is likely a very common use-case to want to template the `default` field, leading to a poor template creation experience.
@@ -9,53 +9,79 @@
#
# Once the commands have been run, you can build the image using `yarn docker-build`
FROM cgr.dev/chainguard/wolfi-base:latest
# syntax = docker/dockerfile:1.4
ENV NODE_VERSION 18=~18.19
ENV PYTHON_VERSION 3.12=~3.12
# Build Python environment in a separate builder stage
FROM cgr.dev/chainguard/python:latest-dev as python-builder
RUN apk add nodejs-$NODE_VERSION yarn
ENV PATH=/venv/bin:$PATH
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
# Additionally, we install dependencies for `techdocs.generator.runIn: local`.
# https://backstage.io/docs/features/techdocs/getting-started#disabling-docker-in-docker-situation-optional
RUN --mount=type=cache,target=/var/cache/apk,sharing=locked \
--mount=type=cache,target=/var/lib/apk,sharing=locked \
apk update && \
apk add sqlite-dev python-$PYTHON_VERSION py3-pip python-3-dev py3-setuptools build-base gcc libffi-dev glibc-dev openssl-dev brotli-dev c-ares-dev nghttp2-dev icu-dev zlib-dev gcc-12 libuv-dev && \
yarn config set python /usr/bin/python3
RUN --mount=type=cache,target=/home/nonroot/.cache/pip,uid=65532,gid=65532 \
python3 -m venv /home/nonroot/venv && \
/home/nonroot/venv/bin/pip install mkdocs-techdocs-core==1.3.3
# Set up a virtual environment for mkdocs-techdocs-core.
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# Build Node environment in a separate builder stage
FROM cgr.dev/chainguard/wolfi-base:latest as node-builder
RUN pip3 install mkdocs-techdocs-core==1.3.3
# From here on we use the least-privileged `node` user to run the backend.
WORKDIR /app
RUN chown nonroot:nonroot /app
USER nonroot
# This switches many Node.js dependencies to production mode.
ENV NODE_VERSION 20=~20.11
ENV NODE_ENV production
# Copy over Yarn 3 configuration, release, and plugins
COPY --chown=nonroot:nonroot .yarn ./.yarn
COPY --chown=nonroot:nonroot .yarnrc.yml ./
RUN --mount=type=cache,target=/var/cache/apk,sharing=locked,uid=65532,gid=65532 \
--mount=type=cache,target=/var/lib/apk,sharing=locked,uid=65532,gid=65532 \
apk update && \
apk add nodejs-$NODE_VERSION yarn \
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
openssl-dev brotli-dev c-ares-dev nghttp2-dev icu-dev zlib-dev gcc-12 libuv-dev build-base
# Copy repo skeleton first, to avoid unnecessary docker cache invalidation.
# The skeleton contains the package.json of each package in the monorepo,
# and along with yarn.lock and the root package.json, that's enough to run yarn install.
COPY --chown=nonroot:nonroot yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
WORKDIR /app
RUN chown -R nonroot:nonroot /app
RUN mkdir -p /home/nonroot/.yarn/berry && chown -R 65532:65532 /home/nonroot/.yarn/berry
USER nonroot
COPY --chown=65532:65532 .yarn ./.yarn
COPY --chown=65532:65532 .yarnrc.yml ./
COPY --chown=65532:65532 yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,sharing=locked,uid=1000,gid=1000 \
yarn workspaces focus --all --production
RUN --mount=type=cache,target=/home/nonroot/.yarn/berry/cache,sharing=locked,uid=65532,gid=65532 \
yarn workspaces focus --all --production && yarn cache clean --all
# Then copy the rest of the backend bundle, along with any other files we might want.
COPY --chown=nonroot:nonroot packages/backend/dist/bundle.tar.gz app-config*.yaml ./
RUN tar xzf bundle.tar.gz && rm bundle.tar.gz
# Final stage to build the application image
FROM cgr.dev/chainguard/wolfi-base:latest
ENV PYTHON_VERSION 3.12=~3.12
ENV NODE_VERSION 20=~20.14
ENV NODE_ENV production
RUN --mount=type=cache,target=/var/cache/apk,sharing=locked,uid=65532,gid=65532 \
--mount=type=cache,target=/var/lib/apk,sharing=locked,uid=65532,gid=65532 \
apk update && \
apk add \
# add node for backstage
nodejs-$NODE_VERSION \
# add python for backstage techdocs
python-$PYTHON_VERSION \
# add tini for init process
tini
WORKDIR /app
COPY package.json app-config.yaml ./
ADD packages/backend/dist/skeleton.tar.gz packages/backend/dist/bundle.tar.gz ./
RUN chown -R 65532:65532 /app
RUN chown -R 65532:65532 /tmp
USER 65532:65532
COPY --from=node-builder --chown=65532:65532 /app/node_modules ./node_modules
COPY --from=python-builder --chown=65532:65532 /home/nonroot/venv /home/nonroot/venv
ENV PATH=/home/nonroot/venv/bin:$PATH
ENV NODE_OPTIONS="--no-node-snapshot"
ENV GIT_PYTHON_REFRESH="quiet"
ENTRYPOINT ["tini", "--"]
CMD ["node", "packages/backend", "--config", "app-config.yaml"]
@@ -4,6 +4,19 @@ DockerHub images in general did not seem ideal for Backstage as the number of vu
The `Dockerfile` in this directory uses a [wolfi-base](https://github.com/wolfi-dev) image from Chainguard Images. This improves the security of the application and reduces false positives in scanners.
## Steps taken
When converting, I utilized the upstream Dockerfile as a starting point.
- Multi-stage build - The Dockerfile has been split up into a multistage build which reduces the files, packages, executables, and directories in the final image.
- Size savings = ~900mb
- Reduced attack surface
- Base Image - Swap to [wolfi-base](https://github.com/wolfi-dev) image from Chainguard Images
- Vulnerability Savings = ~239 at the time of updating this README
- Entrypoint - Swap from `node` to `tini` as entrypoint to ensure that the default signal handlers work and zombie processes are handled properly
- Use `ADD` instead of `COPY` in dockerfile to reduce copied compressed files
- When a `rm` is used to remove a compressed file it still makes its way into the final image. Using `ADD` is safe with local files.
## Pinning Digest
To reduce maintenance, the digest of the image has been removed from the `./Dockerfile` file. A complete example with the digest would be `cgr.dev/chainguard/wolfi-base:latest@sha256:3d6dece13cdb5546cd03b20e14f9af354bc1a56ab5a7b47dca3e6c1557211fcf` and it is suggested to update the `FROM` line in the `Dockerfile` to use a digest.
@@ -1,5 +1,8 @@
# Prometheus
> [!NOTE]
> The Prometheus metrics have been marked as deprecated and will be removed at a later point. The recommendation is to use the OpenTelemetry metrics by following the [Setup OpenTelemetry](https://backstage.io/docs/tutorials/setup-opentelemetry) documentation
## Overview
This is a small tutorial that goes over how to setup your Backstage instance to output metrics in a format that can be pulled in by Prometheus.
+6
View File
@@ -32,6 +32,12 @@ auth:
serviceTokens:
- token: '1uh2fh19efvfh129f1f919u21f2f19jf2.access'
subject: 'bot-user@your-company.com'
# You can customize the header name that contains the jwt token, by default
# cf-access-jwt-assertion is used
jwtHeaderName: <my-header>
# You can customize the authorization cookie name, by default
# CF_Authorization is used
authorizationCookieName: <MY_CAUTHORIZATION_COOKIE_NAME>
# This picks what sign in resolver(s) you want to use.
signIn:
resolvers:
+2 -2
View File
@@ -24,7 +24,7 @@ Let's start by adding the following `auth` configuration in your
```yaml
auth:
providers:
gcp-iap:
gcpIap:
audience: '/projects/<project number>/global/backendServices/<backend service id>'
jwtHeader: x-custom-header # Optional: Only if you are using a custom header for the IAP JWT
signIn:
@@ -77,6 +77,6 @@ backend.add(import('@backstage/plugin-auth-backend-module-gcp-iap-provider'));
## Adding the provider to the Backstage frontend
See [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) for pointers on how to set up the sign-in page, and to also make it work smoothly for local development. You'll use `gcp-iap` as the provider name.
See [Sign-In with Proxy Providers](../index.md#sign-in-with-proxy-providers) for pointers on how to set up the sign-in page, and to also make it work smoothly for local development. You'll use `gcpIap` as the provider name.
If you [provide a custom sign in resolver](https://backstage.io/docs/auth/identity-resolver#building-custom-resolvers), you can skip the `signIn` block entirely.
+1 -1
View File
@@ -193,7 +193,7 @@ backend.add(import('@backstage/plugin-auth-backend-module-github-provider'));
backend.add(customAuth);
```
Check out [the naming patterns article](../backend-system/architecture/07-naming-patterns.md) for what rules
Check out [the naming patterns article](../backend-system/architecture/08-naming-patterns.md) for what rules
apply regarding how to form valid IDs. In this example we also put the module
declaration directly in `packages/backend/src/index.ts` but that's just for
simplicity. You can place it anywhere you like, including in other packages, and
+54 -6
View File
@@ -112,9 +112,16 @@ const app = createApp({
});
```
You can also use the `providers` prop to enable multiple sign-in methods, for example
:::note Note
- allowing guest access:
You can configure sign-in to use a redirect flow with no pop-up by adding
`enableExperimentalRedirectFlow: true` to the root of your `app-config.yaml`
:::
### Using Multiple Providers
You can also use the `providers` prop to enable multiple sign-in methods, for example to allow guest access:
```tsx title="packages/app/src/App.tsx"
const app = createApp({
@@ -140,12 +147,53 @@ const app = createApp({
});
```
:::note Note
### Conditionally Render Sign In Provider
You can configure sign-in to use a redirect flow with no pop-up by adding
`enableExperimentalRedirectFlow: true` to the root of your `app-config.yaml`
In the above example you have both Guest and GitHub sign-in options, this is helpful for non-production but in Production you will most likely not want to offer Guest access. You can easily use information from your config to help conditionally render the provider:
:::
```tsx title="packages/app/src/App.tsx"
import {
configApiRef,
githubAuthApiRef,
useApi,
} from '@backstage/core-plugin-api';
const app = createApp({
components: {
SignInPage: props => {
const configApi = useApi(configApiRef);
if (configApi.getString('auth.environment') === 'development') {
return (
<SignInPage
{...props}
providers={[
'guest',
{
id: 'github-auth-provider',
title: 'GitHub',
message: 'Sign in using GitHub',
apiRef: githubAuthApiRef,
},
]}
/>
);
}
return (
<SignInPage
{...props}
provider={{
id: 'google-auth-provider',
title: 'Google',
message: 'Sign In using Google',
apiRef: googleAuthApiRef,
}}
/>
);
},
},
// ..
});
```
## Sign-In with Proxy Providers

Some files were not shown because too many files have changed in this diff Show More