diff --git a/.changeset/afraid-boxes-rhyme.md b/.changeset/afraid-boxes-rhyme.md deleted file mode 100644 index 328a589f7e..0000000000 --- a/.changeset/afraid-boxes-rhyme.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-home': patch ---- - -Add `FavoriteToggle` in `core-components` to standardise favorite marking diff --git a/.changeset/afraid-fans-cross.md b/.changeset/afraid-fans-cross.md deleted file mode 100644 index 1901d8ce0f..0000000000 --- a/.changeset/afraid-fans-cross.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/create-app': patch -'@backstage/cli': patch ---- - -Add `config.d.ts` files to the list of included file in `tsconfig.json`. - -This allows ESLint to detect issues or deprecations in those files. diff --git a/.changeset/angry-hotels-warn.md b/.changeset/angry-hotels-warn.md deleted file mode 100644 index 07caaba574..0000000000 --- a/.changeset/angry-hotels-warn.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/backend-defaults': minor -'@backstage/backend-common': minor ---- - -**BREAKING**: You can no longer supply a `basePath` option to the host discovery implementation. In the new backend system, the ability to choose this path has been removed anyway at the plugin router level. diff --git a/.changeset/beige-jobs-begin.md b/.changeset/beige-jobs-begin.md deleted file mode 100644 index f93e534857..0000000000 --- a/.changeset/beige-jobs-begin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Remove direct `vite` dependency diff --git a/.changeset/big-spies-stare.md b/.changeset/big-spies-stare.md deleted file mode 100644 index bab1643284..0000000000 --- a/.changeset/big-spies-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-backend': patch ---- - -Dedicated token for techdocs cache sync diff --git a/.changeset/blue-forks-cry.md b/.changeset/blue-forks-cry.md deleted file mode 100644 index 1bcc1d0b59..0000000000 --- a/.changeset/blue-forks-cry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-aws-alb-provider': patch ---- - -Fix a bug where the signer was checked from the payload instead of the header diff --git a/.changeset/breezy-flowers-dance.md b/.changeset/breezy-flowers-dance.md deleted file mode 100644 index faa9fd0697..0000000000 --- a/.changeset/breezy-flowers-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Deprecate the `featureDiscoveryServiceFactory` in favor of using `@backstage/backend-defaults#discoveryFeatureLoader` instead. diff --git a/.changeset/brown-actors-clap.md b/.changeset/brown-actors-clap.md deleted file mode 100644 index af25a6e87f..0000000000 --- a/.changeset/brown-actors-clap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': minor ---- - -**BREAKING**: The deprecated identity and token manager services have been removed. This means that `coreServices.identity` and `coreServices.tokenManager` are gone, along with related types and utilities in other packages. diff --git a/.changeset/brown-boxes-arrive.md b/.changeset/brown-boxes-arrive.md deleted file mode 100644 index edefc0dcaf..0000000000 --- a/.changeset/brown-boxes-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-plugin-api': minor ---- - -**BREAKING**: Removed support for "v1" extensions. This means that it is no longer possible to declare inputs and outputs as objects when using `createExtension`. In addition, all extension creators except for `createComponentExtension` have been removed, use the equivalent blueprint instead. See the [1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations/#130) for more information on this change. diff --git a/.changeset/brown-worms-sneeze.md b/.changeset/brown-worms-sneeze.md deleted file mode 100644 index 51359dd384..0000000000 --- a/.changeset/brown-worms-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-react': patch ---- - -Fixed issue in useShadowRootElements which could lead to unlimited render loops diff --git a/.changeset/calm-brooms-fail.md b/.changeset/calm-brooms-fail.md deleted file mode 100644 index a87b5ad38c..0000000000 --- a/.changeset/calm-brooms-fail.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -'@backstage/backend-dynamic-feature-service': patch ---- - -Deprecate the `dynamicPluginsServiceRef`, `dynamicPluginsServiceFactory` and `dynamicPluginsServiceFactoryWithOptions` in favor of using the `dynamicPluginsFeatureDiscoveryLoader` to discover dynamic features in a new backend system. - -See usage examples below: - -Example using the `dynamicPluginsFeatureDiscoveryLoader` loader in a backend instance: - -```ts -import { createBackend } from '@backstage/backend-defaults'; -import { dynamicPluginsFeatureDiscoveryLoader } from '@backstage/backend-dynamic-feature-service'; -//... - -const backend = createBackend(); -backend.add(dynamicPluginsFeatureDiscoveryLoader); -//... -backend.start(); -``` - -Passing options to the `dynamicPluginsFeatureDiscoveryLoader` loader in a backend instance: - -```ts -import { createBackend } from '@backstage/backend-defaults'; -import { dynamicPluginsFeatureDiscoveryLoader } from '@backstage/backend-dynamic-feature-service'; -import { myCustomModuleLoader } from './myCustomModuleLoader'; -//... - -const backend = createBackend(); -backend.add( - dynamicPluginsFeatureDiscoveryLoader({ - moduleLoader: myCustomModuleLoader, - }), -); -//... -backend.start(); -``` diff --git a/.changeset/calm-toes-melt.md b/.changeset/calm-toes-melt.md deleted file mode 100644 index b8a7b12c46..0000000000 --- a/.changeset/calm-toes-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -The `defaultConfigLoader` now also reads configuration from scripts tags with `type="backstage.io/config"`. The tag is expected to contain a JSON-serialized array of `AppConfig` objects. If any of these script tags are present, the injected runtime configuration in the static assets will no longer be used. diff --git a/.changeset/chilled-cameras-change.md b/.changeset/chilled-cameras-change.md deleted file mode 100644 index 8491761594..0000000000 --- a/.changeset/chilled-cameras-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Internal update to use the new cache manager diff --git a/.changeset/chilly-birds-shout.md b/.changeset/chilly-birds-shout.md deleted file mode 100644 index dfa99b6f5d..0000000000 --- a/.changeset/chilly-birds-shout.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/backend-common': minor ---- - -**BREAKING**: Simplifications and cleanup as part of the Backend System 1.0 work. - -- The deprecated `dropDatabase` function has now been removed, without replacement. diff --git a/.changeset/cold-ways-protect.md b/.changeset/cold-ways-protect.md deleted file mode 100644 index 26b693fcc6..0000000000 --- a/.changeset/cold-ways-protect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-dynamic-feature-service': patch ---- - -Relax type check for a plugin's default export to also accept a BackendFeature defined as a function instead of an object diff --git a/.changeset/cool-actors-sin.md b/.changeset/cool-actors-sin.md deleted file mode 100644 index 4d5b2589c5..0000000000 --- a/.changeset/cool-actors-sin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-aws-alb-provider': patch ---- - -Throw correct error when email is missing from the claims diff --git a/.changeset/cool-melons-check.md b/.changeset/cool-melons-check.md deleted file mode 100644 index 462a023dca..0000000000 --- a/.changeset/cool-melons-check.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@backstage/frontend-test-utils': patch -'@backstage/frontend-app-api': patch -'@backstage/core-compat-api': patch -'@backstage/plugin-catalog-import': patch -'@backstage/plugin-catalog-graph': patch -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-user-settings': patch -'@backstage/plugin-search-react': patch -'@backstage/plugin-kubernetes': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-api-docs': patch -'@backstage/plugin-devtools': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-search': patch -'@backstage/plugin-home': patch -'@backstage/plugin-org': patch ---- - -Updated exports to use the new type parameters for extensions and extension blueprints. diff --git a/.changeset/cool-poems-hammer.md b/.changeset/cool-poems-hammer.md deleted file mode 100644 index fd5897343e..0000000000 --- a/.changeset/cool-poems-hammer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -Slight type tweak to match newer React versions better diff --git a/.changeset/cuddly-rocks-invent.md b/.changeset/cuddly-rocks-invent.md deleted file mode 100644 index c4ce8ebdb9..0000000000 --- a/.changeset/cuddly-rocks-invent.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-dynamic-feature-service': minor ---- - -**BREAKING**: `dynamicPluginsServiceFactory` is no longer callable as a function. If you need to provide options to make a custom factory, use `dynamicPluginsSchemasServiceFactoryWithOptions` instead. diff --git a/.changeset/curly-brooms-raise.md b/.changeset/curly-brooms-raise.md deleted file mode 100644 index 84c8892f7c..0000000000 --- a/.changeset/curly-brooms-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend': patch ---- - -Deprecate create router as the legacy backend system will no longer be supported. diff --git a/.changeset/dry-beers-shake.md b/.changeset/dry-beers-shake.md deleted file mode 100644 index 59ff5ead54..0000000000 --- a/.changeset/dry-beers-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-defaults': minor ---- - -Initial release of this package, which provides a default app setup through the `createApp` function. This replaces the existing `createApp` method from `@backstage/frontend-app-api`. diff --git a/.changeset/dry-glasses-push.md b/.changeset/dry-glasses-push.md deleted file mode 100644 index 31a04db24a..0000000000 --- a/.changeset/dry-glasses-push.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-node': patch ---- - -Extend the "unable to resolve user identity" message diff --git a/.changeset/dry-monkeys-mate.md b/.changeset/dry-monkeys-mate.md deleted file mode 100644 index 51883ddefa..0000000000 --- a/.changeset/dry-monkeys-mate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -The `KubernetesBuilder` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system. diff --git a/.changeset/early-swans-grab.md b/.changeset/early-swans-grab.md deleted file mode 100644 index 4526067275..0000000000 --- a/.changeset/early-swans-grab.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@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-sentry': patch -'@backstage/plugin-scaffolder-backend-module-yeoman': patch -'@backstage/plugin-scaffolder-backend-module-rails': patch -'@backstage/plugin-user-settings-backend': patch -'@backstage/plugin-devtools-backend': patch ---- - -Update README installation instructions diff --git a/.changeset/eighty-tables-hope.md b/.changeset/eighty-tables-hope.md deleted file mode 100644 index 203cc8bb65..0000000000 --- a/.changeset/eighty-tables-hope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-test-utils': patch ---- - -Internal update to add support for passing an `ApiRegistry` when creating the node tree diff --git a/.changeset/empty-coats-sparkle.md b/.changeset/empty-coats-sparkle.md deleted file mode 100644 index 7e3b791c6b..0000000000 --- a/.changeset/empty-coats-sparkle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-test-utils': minor ---- - -Removed support for testing "v1" extensions, where outputs are defined as an object rather than an array. diff --git a/.changeset/famous-badgers-drop.md b/.changeset/famous-badgers-drop.md deleted file mode 100644 index af519cf964..0000000000 --- a/.changeset/famous-badgers-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Added missing service mock for `mockServices.rootConfig.mock`, and fixed the definition of `mockServices.rootHttpRouter.factory` to not have a duplicate callback. diff --git a/.changeset/five-tigers-share.md b/.changeset/five-tigers-share.md deleted file mode 100644 index 507614c8b8..0000000000 --- a/.changeset/five-tigers-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Found the issue during testing the clean up of the workspace for the database implementation. diff --git a/.changeset/flat-kangaroos-push.md b/.changeset/flat-kangaroos-push.md deleted file mode 100644 index b046beeeb1..0000000000 --- a/.changeset/flat-kangaroos-push.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -'@backstage/frontend-plugin-api': minor ---- - -**BREAKING**: Updated the type parameters for `ExtensionDefinition` and `ExtensionBlueprint` to only have a single object parameter. The base type parameter is exported as `ExtensionDefinitionParameters` and `ExtensionBlueprintParameters` respectively. This is shipped as an immediate breaking change as we expect usage of these types to be rare, and it does not affect the runtime behavior of the API. - -This is a breaking change as it changes the type parameters. Existing usage can generally be updated as follows: - -- `ExtensionDefinition` -> `ExtensionDefinition` -- `ExtensionDefinition` -> `ExtensionDefinition` -- `ExtensionDefinition` -> `ExtensionDefinition<{ config: TConfig }>` -- `ExtensionDefinition` -> `ExtensionDefinition<{ config: TConfig, configInput: TConfigInput }>` - -If you need to infer the parameter you can use `ExtensionDefinitionParameters`, for example: - -```ts -import { - ExtensionDefinition, - ExtensionDefinitionParameters, -} from '@backstage/frontend-plugin-api'; - -function myUtility( - ext: ExtensionDefinition, -): T['config'] { - // ... -} -``` - -The same patterns apply to `ExtensionBlueprint`. - -This change is made to improve the readability of API references and ability to evolve the type parameters in the future. diff --git a/.changeset/forty-eyes-return.md b/.changeset/forty-eyes-return.md deleted file mode 100644 index b3d8355702..0000000000 --- a/.changeset/forty-eyes-return.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Update Scaffolder module template to add itself to the backend diff --git a/.changeset/forty-toes-float.md b/.changeset/forty-toes-float.md deleted file mode 100644 index b6ca5139ea..0000000000 --- a/.changeset/forty-toes-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-test-utils': minor ---- - -**BREAKING**: The deprecated `.render()` method has been removed from the extension tester. diff --git a/.changeset/four-parents-buy.md b/.changeset/four-parents-buy.md deleted file mode 100644 index ac216c3c08..0000000000 --- a/.changeset/four-parents-buy.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/frontend-app-api': minor ---- - -**BREAKING**: The `createSpecializedApp` function now creates a bare-bones app without any of the default app structure or APIs. To re-introduce this functionality if you need to use `createSpecializedApp` you can install the `app` plugin from `@backstage/plugin-app`. - -In addition, the `createApp` and `CreateAppFeatureLoader` exports are now deprecated as they are being moved to `@backstage/frontend-defaults`, which should be used instead. diff --git a/.changeset/four-ties-raise.md b/.changeset/four-ties-raise.md deleted file mode 100644 index 163443afff..0000000000 --- a/.changeset/four-ties-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': minor ---- - -Add `ui:backstage.review.name` option for custom item names on scaffolder review page, and also add support for rendering the `title` property instead of the key name. diff --git a/.changeset/fresh-apes-dress.md b/.changeset/fresh-apes-dress.md deleted file mode 100644 index 6e20e53bcd..0000000000 --- a/.changeset/fresh-apes-dress.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch -'@backstage/frontend-test-utils': patch -'@backstage/frontend-app-api': patch -'@backstage/plugin-app': minor ---- - -Introduce the `@backstage/plugin-app` package to hold all of the built-in extensions for easy consumption and overriding. diff --git a/.changeset/fresh-bears-prove.md b/.changeset/fresh-bears-prove.md deleted file mode 100644 index a4098a4b18..0000000000 --- a/.changeset/fresh-bears-prove.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/cli': patch -'@backstage/create-app': patch ---- - -Update templates to not refer to backend-common diff --git a/.changeset/fresh-pumas-clean.md b/.changeset/fresh-pumas-clean.md deleted file mode 100644 index 2140f62651..0000000000 --- a/.changeset/fresh-pumas-clean.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-app-backend': patch -'@backstage/plugin-app-node': patch ---- - -Fixing dependency metadata with the new `@backstage/plugin-app` package diff --git a/.changeset/friendly-days-march.md b/.changeset/friendly-days-march.md deleted file mode 100644 index a190c50a43..0000000000 --- a/.changeset/friendly-days-march.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch ---- - -Added `createFrontendModule` as a replacement for `createExtensionOverrides`, which is now deprecated. - -Deprecated the `BackstagePlugin` and `FrontendFeature` type in favor of `FrontendPlugin` and `FrontendFeature` from `@backstage/frontend-app-api` respectively. diff --git a/.changeset/friendly-months-march.md b/.changeset/friendly-months-march.md deleted file mode 100644 index 0bb9cd7cf0..0000000000 --- a/.changeset/friendly-months-march.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/frontend-app-api': patch -'@backstage/core-compat-api': patch ---- - -Added support for new `FrontendPlugin` and `FrontendModule` types. diff --git a/.changeset/funny-houses-rest.md b/.changeset/funny-houses-rest.md deleted file mode 100644 index 21efce8c19..0000000000 --- a/.changeset/funny-houses-rest.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-backend': patch ---- - -The `createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system. diff --git a/.changeset/funny-rocks-pull.md b/.changeset/funny-rocks-pull.md deleted file mode 100644 index 9145464137..0000000000 --- a/.changeset/funny-rocks-pull.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': minor -'@backstage/plugin-scaffolder': minor ---- - -Added support for `omitExtraData` and `liveOmit` for rjsf in the scaffolder diff --git a/.changeset/fuzzy-feet-exist.md b/.changeset/fuzzy-feet-exist.md deleted file mode 100644 index 35ef1e58fd..0000000000 --- a/.changeset/fuzzy-feet-exist.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch -'@backstage/plugin-app': patch ---- - -Deprecated the `namespace` option for `createExtensionBlueprint` and `createExtension`, these are no longer required and will default to the `pluginId` instead. - -You can migrate some of your extensions that use `createExtensionOverrides` to using `createFrontendModule` instead and providing a `pluginId` there. - -```ts -// Before -createExtensionOverrides({ - extensions: [ - createExtension({ - name: 'my-extension', - namespace: 'my-namespace', - kind: 'test', - ... - }) - ], -}); - -// After -createFrontendModule({ - pluginId: 'my-namespace', - extensions: [ - createExtension({ - name: 'my-extension', - kind: 'test', - ... - }) - ], -}); -``` diff --git a/.changeset/fuzzy-mails-walk.md b/.changeset/fuzzy-mails-walk.md deleted file mode 100644 index b46fbd59c4..0000000000 --- a/.changeset/fuzzy-mails-walk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': patch ---- - -Deprecate the `featureDiscoveryServiceRef` in favor of using the new `discoveryFeatureLoader` instead. diff --git a/.changeset/fuzzy-spies-share.md b/.changeset/fuzzy-spies-share.md deleted file mode 100644 index 99108b81a0..0000000000 --- a/.changeset/fuzzy-spies-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-signals-backend': patch ---- - -The `createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system. diff --git a/.changeset/gentle-hats-act.md b/.changeset/gentle-hats-act.md deleted file mode 100644 index e78076c9c5..0000000000 --- a/.changeset/gentle-hats-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-defaults': patch ---- - -Added a new `CreateAppOptions` type for the `createApp` options. diff --git a/.changeset/giant-jars-mix.md b/.changeset/giant-jars-mix.md deleted file mode 100644 index 652e23a280..0000000000 --- a/.changeset/giant-jars-mix.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/create-app': patch -'@backstage/plugin-devtools': patch ---- - -Minor dockerfile syntax update diff --git a/.changeset/gorgeous-scissors-wave.md b/.changeset/gorgeous-scissors-wave.md deleted file mode 100644 index 1db406b940..0000000000 --- a/.changeset/gorgeous-scissors-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Updated the error message for missing service dependencies to include the plugin and module IDs. diff --git a/.changeset/great-zebras-hunt.md b/.changeset/great-zebras-hunt.md deleted file mode 100644 index 252f270092..0000000000 --- a/.changeset/great-zebras-hunt.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/cli': patch ---- - -The app build process now outputs an additional `index.html.tmpl` file. This is an non-templated version of the `index.html` file, which can be used to delay templating until runtime. - -The new `index.html.tmpl` file also sets a `backstage-public-path` meta tag to be templated at runtime. The meta tag is in turn picked up by the new `@backstage/cli/config/webpack-public-path.js` entry point script, which uses it to set the runtime public path of the Webpack bundle. diff --git a/.changeset/green-worms-rescue.md b/.changeset/green-worms-rescue.md deleted file mode 100644 index 992012ad7d..0000000000 --- a/.changeset/green-worms-rescue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Add `checks: 'read'` for default GitHub app permissions diff --git a/.changeset/healthy-moons-drum.md b/.changeset/healthy-moons-drum.md deleted file mode 100644 index 0f61d0b141..0000000000 --- a/.changeset/healthy-moons-drum.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/backend-plugin-api': minor ---- - -Removed the following deprecated exports - -- `BackendPluginConfig` use `CreateBackendPluginOptions` -- `BackendModuleConfig` use `CreateBackendModuleOptions` -- `ExtensionPointConfig` use `CreateExtensionPointOptions` diff --git a/.changeset/heavy-suits-judge.md b/.changeset/heavy-suits-judge.md deleted file mode 100644 index d5c00184c7..0000000000 --- a/.changeset/heavy-suits-judge.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings-backend': patch ---- - -In preparation to stop supporting to the legacy backend system, the `createRouter` function is now deprecated and we strongly recommend you [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) your backend to the new system. diff --git a/.changeset/hip-pandas-think.md b/.changeset/hip-pandas-think.md deleted file mode 100644 index a43349db63..0000000000 --- a/.changeset/hip-pandas-think.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-node': patch ---- - -Fix typo and unify TechDocs casing in doc strings diff --git a/.changeset/khaki-clocks-own.md b/.changeset/khaki-clocks-own.md deleted file mode 100644 index b60de7a1ba..0000000000 --- a/.changeset/khaki-clocks-own.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Make MySQL pool settings a bit more lax diff --git a/.changeset/khaki-crews-rule.md b/.changeset/khaki-crews-rule.md deleted file mode 100644 index 4d8eb32083..0000000000 --- a/.changeset/khaki-crews-rule.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-app-backend': patch ---- - -**BREAKING**: The app backend now supports the new `index.html.tmpl` output from `@backstage/cli`. If available, the `index.html` will be templated at runtime with the current configuration of the app backend. - -This is marked as a breaking change because you must now supply the app build-time configuration to the backend. This change also affects the public path behavior, where it is no longer necessary to build the app with the correct public path upfront. You now only need to supply a correct `app.baseUrl` to the app backend plugin at runtime. - -An effect that this change has is that the `index.html` will now contain and present the frontend configuration in an easily readable way, which can aid in debugging. This data was always available in the frontend, but it was injected and hidden in the static bundle. - -This templating behavior is enabled by default, but it can be disabled by setting the `app.disableConfigInjection` configuration option to `true`. diff --git a/.changeset/kind-moose-learn.md b/.changeset/kind-moose-learn.md deleted file mode 100644 index 810064b1a1..0000000000 --- a/.changeset/kind-moose-learn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': minor ---- - -**BREAKING**: The deprecated `identityServiceFactory` and `tokenManagerServiceFactory` have been removed. diff --git a/.changeset/kind-walls-speak.md b/.changeset/kind-walls-speak.md deleted file mode 100644 index 441e247dea..0000000000 --- a/.changeset/kind-walls-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': minor ---- - -**BREAKING**: The backwards compatibility with plugins using legacy auth through the token manager service has been removed. This means that instead of falling back to using the old token manager, requests towards plugins that don't support the new auth system will simply fail. Please make sure that all plugins in your deployment are hosted within a backend instance from the new backend system. diff --git a/.changeset/large-poets-check.md b/.changeset/large-poets-check.md deleted file mode 100644 index 393d26ac9b..0000000000 --- a/.changeset/large-poets-check.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch -'@backstage/plugin-search-backend-module-techdocs': patch -'@backstage/plugin-search-backend-module-catalog': patch -'@backstage/plugin-search-backend-module-explore': patch -'@backstage/plugin-permission-node': patch -'@backstage/plugin-signals-backend': patch -'@backstage/plugin-auth-backend': patch ---- - -Internal refactor to remove dependencies on the identity and token manager services, which have been removed. Public APIs no longer require the identity service or token manager to be provided. diff --git a/.changeset/loud-brooms-pull.md b/.changeset/loud-brooms-pull.md deleted file mode 100644 index 8ed3e22c5b..0000000000 --- a/.changeset/loud-brooms-pull.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/catalog-client': patch -'@backstage/plugin-catalog-backend': patch ---- - -Moved `getEntities` ordering to utilize database instead of having it inside catalog client - -Please note that the latest version of `@backstage/catalog-client` will not order the entities in the same way as before. This is because the ordering is now done in the database query instead of in the client. If you rely on the ordering of the entities, you may need to update your backend plugin or code to handle this change. diff --git a/.changeset/lucky-sheep-cover.md b/.changeset/lucky-sheep-cover.md deleted file mode 100644 index 9b9420a73a..0000000000 --- a/.changeset/lucky-sheep-cover.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -The `legacyPlugin` and `makeLegacyPlugin` helpers now provide their own shim implementation of the identity and token manager services, as these services are being removed from the new backend system. diff --git a/.changeset/metal-garlics-fetch.md b/.changeset/metal-garlics-fetch.md deleted file mode 100644 index 076b5f34a5..0000000000 --- a/.changeset/metal-garlics-fetch.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch -'@backstage/frontend-app-api': patch ---- - -Moved several implementations of built-in APIs from being hardcoded in the app to instead be provided as API extensions. This moves all API-related inputs from the `app` extension to the respective API extensions. For example, extensions created with `ThemeBlueprint` are now attached to the `themes` input of `api:app-theme` rather than the `app` extension. diff --git a/.changeset/metal-rivers-grin.md b/.changeset/metal-rivers-grin.md deleted file mode 100644 index b70750c98d..0000000000 --- a/.changeset/metal-rivers-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -There is a new `mockErrorHandler` utility to help in mocking the error middleware in tests. diff --git a/.changeset/mighty-cheetahs-call.md b/.changeset/mighty-cheetahs-call.md deleted file mode 100644 index f5d17d8b20..0000000000 --- a/.changeset/mighty-cheetahs-call.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Move down the discovery config to be in the root diff --git a/.changeset/mighty-days-kiss.md b/.changeset/mighty-days-kiss.md deleted file mode 100644 index f78e602e25..0000000000 --- a/.changeset/mighty-days-kiss.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/backend-defaults': patch -'@backstage/backend-app-api': patch ---- - -`auth.externalAccess` should be optional in the config schema diff --git a/.changeset/nasty-tigers-knock.md b/.changeset/nasty-tigers-knock.md deleted file mode 100644 index c48d725779..0000000000 --- a/.changeset/nasty-tigers-knock.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -'@backstage/backend-common': patch -'@backstage/backend-dynamic-feature-service': patch -'@backstage/plugin-app-backend': patch -'@backstage/plugin-catalog-backend-module-aws': patch -'@backstage/plugin-catalog-backend-module-azure': patch -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch -'@backstage/plugin-catalog-backend-module-bitbucket-server': patch -'@backstage/plugin-catalog-backend-module-gerrit': patch -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-catalog-backend-module-gitlab': patch -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch -'@backstage/plugin-catalog-backend-module-msgraph': patch -'@backstage/plugin-catalog-backend-module-puppetdb': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-events-backend-module-aws-sqs': patch -'@backstage/plugin-events-backend-module-azure': patch -'@backstage/plugin-events-backend-module-bitbucket-cloud': patch -'@backstage/plugin-events-backend-module-gerrit': patch -'@backstage/plugin-events-backend-module-github': patch -'@backstage/plugin-events-backend-module-gitlab': patch -'@backstage/plugin-events-backend': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-permission-backend': patch -'@backstage/plugin-proxy-backend': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-search-backend-module-catalog': patch -'@backstage/plugin-search-backend-module-elasticsearch': patch -'@backstage/plugin-search-backend-module-explore': patch -'@backstage/plugin-search-backend-module-pg': patch -'@backstage/plugin-search-backend-module-techdocs': patch -'@backstage/plugin-search-backend': patch -'@backstage/plugin-techdocs-backend': patch -'@backstage/plugin-user-settings-backend': patch ---- - -Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature. diff --git a/.changeset/new-poets-unite.md b/.changeset/new-poets-unite.md deleted file mode 100644 index 83172ffd66..0000000000 --- a/.changeset/new-poets-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Make k8s entity content appear on components & resources only by default in new FE system diff --git a/.changeset/ninety-mayflies-raise.md b/.changeset/ninety-mayflies-raise.md deleted file mode 100644 index 62042c2615..0000000000 --- a/.changeset/ninety-mayflies-raise.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-elasticsearch': patch -'@backstage/plugin-search-backend-module-pg': patch ---- - -Internal refactor to use `LoggerService` and `DatabaseService` instead of the legacy `Logger` and `PluginDatabaseManager` types. diff --git a/.changeset/odd-goats-kiss.md b/.changeset/odd-goats-kiss.md deleted file mode 100644 index 0f199c1a1e..0000000000 --- a/.changeset/odd-goats-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Added `titleComponent` prop to `SignInPage` component to allow further customization of the title using `ReactNode` diff --git a/.changeset/olive-phones-sniff.md b/.changeset/olive-phones-sniff.md deleted file mode 100644 index d70953435c..0000000000 --- a/.changeset/olive-phones-sniff.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Add `pg-format` as a dependency diff --git a/.changeset/orange-shrimps-pull.md b/.changeset/orange-shrimps-pull.md deleted file mode 100644 index 7d509a0e5d..0000000000 --- a/.changeset/orange-shrimps-pull.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-notifications-backend': patch -'@backstage/plugin-notifications': patch ---- - -Implement icon in backend and show icon in table if available. diff --git a/.changeset/plenty-dragons-know.md b/.changeset/plenty-dragons-know.md deleted file mode 100644 index 2aa8458011..0000000000 --- a/.changeset/plenty-dragons-know.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-defaults': patch ---- - -Added `createPublicSignInApp`, used to creating apps for the public entry point. diff --git a/.changeset/plenty-hounds-poke.md b/.changeset/plenty-hounds-poke.md deleted file mode 100644 index 3d308d763a..0000000000 --- a/.changeset/plenty-hounds-poke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-github': patch ---- - -Added the ability for the actions `publish:github` and `github:repo:create` to take inputs for 'custom properties' for organization repositories. diff --git a/.changeset/popular-cooks-camp.md b/.changeset/popular-cooks-camp.md deleted file mode 100644 index 4049825efd..0000000000 --- a/.changeset/popular-cooks-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': minor ---- - -**BREAKING**: Removed service mocks for the identity and token manager services, which have been removed from `@backstage/backend-plugin-api`. diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index 0266c977a1..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "mode": "pre", - "tag": "next", - "initialVersions": { - "example-app": "0.2.100", - "@backstage/app-defaults": "1.5.10", - "example-app-next": "0.0.14", - "app-next-example-plugin": "0.0.14", - "example-backend": "0.0.29", - "@backstage/backend-app-api": "0.9.0", - "@backstage/backend-common": "0.24.0", - "@backstage/backend-defaults": "0.4.2", - "@backstage/backend-dev-utils": "0.1.5", - "@backstage/backend-dynamic-feature-service": "0.3.0", - "example-backend-legacy": "0.2.101", - "@backstage/backend-openapi-utils": "0.1.16", - "@backstage/backend-plugin-api": "0.8.0", - "@backstage/backend-test-utils": "0.5.0", - "@backstage/catalog-client": "1.6.6", - "@backstage/catalog-model": "1.6.0", - "@backstage/cli": "0.27.0", - "@backstage/cli-common": "0.1.14", - "@backstage/cli-node": "0.2.7", - "@backstage/codemods": "0.1.49", - "@backstage/config": "1.2.0", - "@backstage/config-loader": "1.9.0", - "@backstage/core-app-api": "1.14.2", - "@backstage/core-compat-api": "0.2.8", - "@backstage/core-components": "0.14.10", - "@backstage/core-plugin-api": "1.9.3", - "@backstage/create-app": "0.5.18", - "@backstage/dev-utils": "1.0.37", - "e2e-test": "0.2.19", - "@backstage/e2e-test-utils": "0.1.1", - "@backstage/errors": "1.2.4", - "@backstage/eslint-plugin": "0.1.8", - "@backstage/frontend-app-api": "0.8.0", - "@backstage/frontend-plugin-api": "0.7.0", - "@backstage/frontend-test-utils": "0.1.12", - "@backstage/integration": "1.14.0", - "@backstage/integration-aws-node": "0.1.12", - "@backstage/integration-react": "1.1.30", - "@backstage/release-manifests": "0.0.11", - "@backstage/repo-tools": "0.9.5", - "@techdocs/cli": "1.8.17", - "techdocs-cli-embedded-app": "0.2.99", - "@backstage/test-utils": "1.5.10", - "@backstage/theme": "0.5.6", - "@backstage/types": "1.1.1", - "@backstage/version-bridge": "1.0.8", - "yarn-plugin-backstage": "0.0.1", - "@backstage/plugin-api-docs": "0.11.8", - "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.7", - "@backstage/plugin-app-backend": "0.3.72", - "@backstage/plugin-app-node": "0.1.23", - "@backstage/plugin-app-visualizer": "0.1.9", - "@backstage/plugin-auth-backend": "0.22.10", - "@backstage/plugin-auth-backend-module-atlassian-provider": "0.2.4", - "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.1.15", - "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.1.6", - "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.1.6", - "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.2.0", - "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.2.18", - "@backstage/plugin-auth-backend-module-github-provider": "0.1.20", - "@backstage/plugin-auth-backend-module-gitlab-provider": "0.1.20", - "@backstage/plugin-auth-backend-module-google-provider": "0.1.20", - "@backstage/plugin-auth-backend-module-guest-provider": "0.1.9", - "@backstage/plugin-auth-backend-module-microsoft-provider": "0.1.18", - "@backstage/plugin-auth-backend-module-oauth2-provider": "0.2.4", - "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.1.16", - "@backstage/plugin-auth-backend-module-oidc-provider": "0.2.4", - "@backstage/plugin-auth-backend-module-okta-provider": "0.0.16", - "@backstage/plugin-auth-backend-module-onelogin-provider": "0.1.4", - "@backstage/plugin-auth-backend-module-pinniped-provider": "0.1.17", - "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.2.4", - "@backstage/plugin-auth-node": "0.5.0", - "@backstage/plugin-auth-react": "0.1.5", - "@backstage/plugin-bitbucket-cloud-common": "0.2.22", - "@backstage/plugin-catalog": "1.22.0", - "@backstage/plugin-catalog-backend": "1.25.0", - "@backstage/plugin-catalog-backend-module-aws": "0.4.0", - "@backstage/plugin-catalog-backend-module-azure": "0.2.0", - "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.3.0", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.3.0", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.2.0", - "@backstage/plugin-catalog-backend-module-gcp": "0.2.0", - "@backstage/plugin-catalog-backend-module-gerrit": "0.2.0", - "@backstage/plugin-catalog-backend-module-github": "0.7.0", - "@backstage/plugin-catalog-backend-module-github-org": "0.2.0", - "@backstage/plugin-catalog-backend-module-gitlab": "0.4.0", - "@backstage/plugin-catalog-backend-module-gitlab-org": "0.1.0", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.5.0", - "@backstage/plugin-catalog-backend-module-ldap": "0.8.0", - "@backstage/plugin-catalog-backend-module-logs": "0.0.2", - "@backstage/plugin-catalog-backend-module-msgraph": "0.6.0", - "@backstage/plugin-catalog-backend-module-openapi": "0.1.41", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.0", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.1.21", - "@backstage/plugin-catalog-backend-module-unprocessed": "0.4.10", - "@backstage/plugin-catalog-common": "1.0.26", - "@backstage/plugin-catalog-graph": "0.4.8", - "@backstage/plugin-catalog-import": "0.12.2", - "@backstage/plugin-catalog-node": "1.12.5", - "@backstage/plugin-catalog-react": "1.12.3", - "@backstage/plugin-catalog-unprocessed-entities": "0.2.7", - "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.4", - "@backstage/plugin-config-schema": "0.1.58", - "@backstage/plugin-devtools": "0.1.17", - "@backstage/plugin-devtools-backend": "0.3.9", - "@backstage/plugin-devtools-common": "0.1.12", - "@backstage/plugin-events-backend": "0.3.10", - "@backstage/plugin-events-backend-module-aws-sqs": "0.4.0", - "@backstage/plugin-events-backend-module-azure": "0.2.9", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.9", - "@backstage/plugin-events-backend-module-gerrit": "0.2.9", - "@backstage/plugin-events-backend-module-github": "0.2.9", - "@backstage/plugin-events-backend-module-gitlab": "0.2.9", - "@backstage/plugin-events-backend-test-utils": "0.1.33", - "@backstage/plugin-events-node": "0.3.9", - "@internal/plugin-todo-list": "1.0.30", - "@internal/plugin-todo-list-backend": "1.0.30", - "@internal/plugin-todo-list-common": "1.0.21", - "@backstage/plugin-home": "0.7.9", - "@backstage/plugin-home-react": "0.1.16", - "@backstage/plugin-kubernetes": "0.11.13", - "@backstage/plugin-kubernetes-backend": "0.18.4", - "@backstage/plugin-kubernetes-cluster": "0.0.14", - "@backstage/plugin-kubernetes-common": "0.8.2", - "@backstage/plugin-kubernetes-node": "0.1.17", - "@backstage/plugin-kubernetes-react": "0.4.2", - "@backstage/plugin-notifications": "0.3.0", - "@backstage/plugin-notifications-backend": "0.3.4", - "@backstage/plugin-notifications-backend-module-email": "0.2.0", - "@backstage/plugin-notifications-common": "0.0.5", - "@backstage/plugin-notifications-node": "0.2.4", - "@backstage/plugin-org": "0.6.28", - "@backstage/plugin-org-react": "0.1.27", - "@backstage/plugin-permission-backend": "0.5.47", - "@backstage/plugin-permission-backend-module-allow-all-policy": "0.1.20", - "@backstage/plugin-permission-common": "0.8.1", - "@backstage/plugin-permission-node": "0.8.1", - "@backstage/plugin-permission-react": "0.4.25", - "@backstage/plugin-proxy-backend": "0.5.4", - "@backstage/plugin-scaffolder": "1.24.0", - "@backstage/plugin-scaffolder-backend": "1.24.0", - "@backstage/plugin-scaffolder-backend-module-azure": "0.1.15", - "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.2.13", - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.1.13", - "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.1.13", - "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.2.24", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.47", - "@backstage/plugin-scaffolder-backend-module-gcp": "0.1.1", - "@backstage/plugin-scaffolder-backend-module-gerrit": "0.1.15", - "@backstage/plugin-scaffolder-backend-module-gitea": "0.1.13", - "@backstage/plugin-scaffolder-backend-module-github": "0.4.1", - "@backstage/plugin-scaffolder-backend-module-gitlab": "0.4.5", - "@backstage/plugin-scaffolder-backend-module-notifications": "0.0.6", - "@backstage/plugin-scaffolder-backend-module-rails": "0.4.40", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.31", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.3.7", - "@backstage/plugin-scaffolder-common": "1.5.5", - "@backstage/plugin-scaffolder-node": "0.4.9", - "@backstage/plugin-scaffolder-node-test-utils": "0.1.10", - "@backstage/plugin-scaffolder-react": "1.11.0", - "@backstage/plugin-search": "1.4.15", - "@backstage/plugin-search-backend": "1.5.15", - "@backstage/plugin-search-backend-module-catalog": "0.2.0", - "@backstage/plugin-search-backend-module-elasticsearch": "1.5.4", - "@backstage/plugin-search-backend-module-explore": "0.2.0", - "@backstage/plugin-search-backend-module-pg": "0.5.33", - "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.2.0", - "@backstage/plugin-search-backend-module-techdocs": "0.2.0", - "@backstage/plugin-search-backend-node": "1.3.0", - "@backstage/plugin-search-common": "1.2.14", - "@backstage/plugin-search-react": "1.7.14", - "@backstage/plugin-signals": "0.0.9", - "@backstage/plugin-signals-backend": "0.1.9", - "@backstage/plugin-signals-node": "0.1.9", - "@backstage/plugin-signals-react": "0.0.4", - "@backstage/plugin-techdocs": "1.10.8", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.37", - "@backstage/plugin-techdocs-backend": "1.10.10", - "@backstage/plugin-techdocs-common": "0.1.0", - "@backstage/plugin-techdocs-module-addons-contrib": "1.1.13", - "@backstage/plugin-techdocs-node": "1.12.9", - "@backstage/plugin-techdocs-react": "1.2.7", - "@backstage/plugin-user-settings": "0.8.11", - "@backstage/plugin-user-settings-backend": "0.2.22", - "@backstage/plugin-user-settings-common": "0.0.1", - "@backstage/plugin-app": "0.0.0", - "@backstage/frontend-defaults": "0.0.0" - }, - "changesets": [ - "afraid-fans-cross", - "angry-hotels-warn", - "big-spies-stare", - "blue-forks-cry", - "breezy-flowers-dance", - "brown-actors-clap", - "brown-boxes-arrive", - "brown-worms-sneeze", - "calm-brooms-fail", - "chilled-cameras-change", - "chilly-birds-shout", - "cold-ways-protect", - "cool-actors-sin", - "cool-melons-check", - "cool-poems-hammer", - "cuddly-rocks-invent", - "curly-brooms-raise", - "dry-beers-shake", - "dry-glasses-push", - "dry-monkeys-mate", - "eighty-tables-hope", - "empty-coats-sparkle", - "famous-badgers-drop", - "five-tigers-share", - "flat-kangaroos-push", - "forty-toes-float", - "four-parents-buy", - "four-ties-raise", - "fresh-apes-dress", - "fresh-bears-prove", - "fresh-pumas-clean", - "friendly-days-march", - "friendly-months-march", - "funny-houses-rest", - "fuzzy-feet-exist", - "fuzzy-mails-walk", - "fuzzy-spies-share", - "gentle-hats-act", - "giant-jars-mix", - "gorgeous-scissors-wave", - "green-worms-rescue", - "healthy-moons-drum", - "heavy-suits-judge", - "hip-pandas-think", - "kind-moose-learn", - "kind-walls-speak", - "large-poets-check", - "loud-brooms-pull", - "lucky-sheep-cover", - "metal-garlics-fetch", - "metal-rivers-grin", - "mighty-cheetahs-call", - "mighty-days-kiss", - "nasty-tigers-knock", - "new-poets-unite", - "ninety-mayflies-raise", - "odd-goats-kiss", - "olive-phones-sniff", - "plenty-dragons-know", - "popular-cooks-camp", - "purple-cows-sing", - "purple-glasses-tease", - "quick-suns-swim", - "quiet-spies-clean", - "rare-feet-melt", - "real-pants-rule", - "renovate-53b7d25", - "renovate-546c524", - "renovate-93d032c", - "renovate-b8911c2", - "rich-bees-tickle", - "rotten-crabs-hear", - "serious-cheetahs-help", - "serious-spies-knock", - "sharp-fans-tan", - "sharp-items-study", - "sharp-mayflies-beg", - "shiny-carpets-worried", - "shiny-carpets-worry", - "shiny-zoos-film", - "short-moles-brush", - "silent-eyes-lie", - "six-goats-sort", - "six-humans-guess", - "sixty-rabbits-cheat", - "slimy-chefs-think", - "smart-gifts-report", - "smart-owls-sell", - "spicy-poems-hammer", - "spicy-vans-eat", - "sweet-cows-clean", - "swift-fishes-rush", - "swift-garlics-mix", - "swift-radios-enjoy", - "swift-seahorses-share", - "tall-camels-march", - "tame-hornets-shake", - "tasty-pigs-vanish", - "thick-walls-share", - "tiny-icons-sit", - "tiny-waves-provide", - "tough-peaches-kneel", - "tricky-apricots-film", - "twenty-clouds-melt", - "twenty-queens-grow", - "unlucky-cycles-clean", - "violet-apricots-smoke", - "violet-jokes-tap", - "warm-boxes-grab-2", - "warm-boxes-grab", - "wild-buses-notice", - "wise-forks-play", - "wise-scissors-help", - "witty-years-cry", - "yellow-bees-hope" - ] -} diff --git a/.changeset/proud-forks-buy.md b/.changeset/proud-forks-buy.md deleted file mode 100644 index 558d5d9078..0000000000 --- a/.changeset/proud-forks-buy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -The `ui:options` for `OwnedEntityPicker` field are now passed to `EntityPicker`. This allows you to use any `ui:options` which `EntityPicker` accepts in the `OwnedEntityPicker` field including `allowArbitraryValues` and `defaultNamespace`. diff --git a/.changeset/purple-cows-sing.md b/.changeset/purple-cows-sing.md deleted file mode 100644 index 3391ced648..0000000000 --- a/.changeset/purple-cows-sing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': minor ---- - -Removed deprecated `ServiceFactoryOrFunction` type. diff --git a/.changeset/purple-glasses-tease.md b/.changeset/purple-glasses-tease.md deleted file mode 100644 index 5a107c1a2b..0000000000 --- a/.changeset/purple-glasses-tease.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-techdocs': patch -'@backstage/plugin-search-backend-module-catalog': patch -'@backstage/plugin-search-backend-module-explore': patch ---- - -The following collator factories are deprecated, please [migrate](https://backstage.io/docs/backend-system/building-backends/migrating) to the new backend system and follow the instructions below to install collators via module: - -- `DefaultCatalogCollatorFactory`: https://github.com/backstage/backstage/blob/nbs10/search-deprecate-create-router/plugins/search-backend-module-catalog/README.md#installation; -- `ToolDocumentCollatorFactory`: https://github.com/backstage/backstage/blob/nbs10/search-deprecate-create-router/plugins/search-backend-module-explore/README.md#installation; -- `DefaultTechDocsCollatorFactory`: https://github.com/backstage/backstage/blob/nbs10/search-deprecate-create-router/plugins/search-backend-module-techdocs/README.md#installation. diff --git a/.changeset/quick-poets-relax.md b/.changeset/quick-poets-relax.md deleted file mode 100644 index 159744233b..0000000000 --- a/.changeset/quick-poets-relax.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-search-react': patch ---- - -Internal update to match recent React types diff --git a/.changeset/quick-suns-swim.md b/.changeset/quick-suns-swim.md deleted file mode 100644 index 6113253e22..0000000000 --- a/.changeset/quick-suns-swim.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Accept `ConfigService` instead of `Config` in constructors/factories diff --git a/.changeset/quiet-spies-clean.md b/.changeset/quiet-spies-clean.md deleted file mode 100644 index ba277f4021..0000000000 --- a/.changeset/quiet-spies-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-graph': patch ---- - -Fixed a bug in the `CatalogGraphPage` component where, after clicking on some nodes, clicking the back button would break the navigation. This issue caused the entire navigation to fail and behaved differently across various browsers. diff --git a/.changeset/rare-feet-melt.md b/.changeset/rare-feet-melt.md deleted file mode 100644 index b28b09a29d..0000000000 --- a/.changeset/rare-feet-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings-backend': patch ---- - -Replaced usage of the deprecated identity service with the new HTTP auth service for the new backend system. diff --git a/.changeset/real-pants-rule.md b/.changeset/real-pants-rule.md deleted file mode 100644 index 8d6d3dc708..0000000000 --- a/.changeset/real-pants-rule.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-microsoft-provider': patch -'@backstage/plugin-auth-backend': patch -'@backstage/plugin-catalog-backend-module-msgraph': patch ---- - -Allow users without defined email to be ingested by the `msgraph` catalog plugin and add `userIdMatchingUserEntityAnnotation` sign-in resolver for the Microsoft auth provider to support sign-in for users without defined email. diff --git a/.changeset/red-squids-own.md b/.changeset/red-squids-own.md deleted file mode 100644 index 4f6a1635d6..0000000000 --- a/.changeset/red-squids-own.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/integration': minor ---- - -The Gerrit integration can now resolve Gitiles urls that point to the following -refs: - -- HEAD -- A SHA -- Tag -- Branch diff --git a/.changeset/renovate-2a3da15.md b/.changeset/renovate-2a3da15.md deleted file mode 100644 index 3f612a07ae..0000000000 --- a/.changeset/renovate-2a3da15.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/config-loader': patch ---- - -Updated dependency `typescript-json-schema` to `^0.65.0`. diff --git a/.changeset/renovate-53b7d25.md b/.changeset/renovate-53b7d25.md deleted file mode 100644 index 0c4f7255d3..0000000000 --- a/.changeset/renovate-53b7d25.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/cli': patch -'@backstage/plugin-scaffolder-backend': patch ---- - -Updated dependency `esbuild` to `^0.23.0`. diff --git a/.changeset/renovate-546c524.md b/.changeset/renovate-546c524.md deleted file mode 100644 index bbe6d8afc5..0000000000 --- a/.changeset/renovate-546c524.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': patch ---- - -Updated dependency `@useoptic/openapi-utilities` to `^0.55.0`. diff --git a/.changeset/renovate-6d3e04e.md b/.changeset/renovate-6d3e04e.md deleted file mode 100644 index 558c0e78cd..0000000000 --- a/.changeset/renovate-6d3e04e.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Updated dependency `@node-saml/passport-saml` to `^5.0.0`. diff --git a/.changeset/renovate-93d032c.md b/.changeset/renovate-93d032c.md deleted file mode 100644 index b34e5a2e23..0000000000 --- a/.changeset/renovate-93d032c.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/codemods': patch ---- - -Updated dependency `jscodeshift` to `^0.16.0`. diff --git a/.changeset/renovate-94fd31b.md b/.changeset/renovate-94fd31b.md deleted file mode 100644 index 6c6883c0d6..0000000000 --- a/.changeset/renovate-94fd31b.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -'@backstage/backend-app-api': patch -'@backstage/backend-common': patch -'@backstage/backend-defaults': patch -'@backstage/backend-openapi-utils': patch -'@backstage/backend-test-utils': patch -'@backstage/plugin-app-backend': patch -'@backstage/plugin-auth-backend-module-atlassian-provider': patch -'@backstage/plugin-auth-backend-module-bitbucket-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-microsoft-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 -'@backstage/plugin-auth-backend-module-onelogin-provider': patch -'@backstage/plugin-auth-backend-module-pinniped-provider': patch -'@backstage/plugin-auth-backend-module-vmware-cloud-provider': patch -'@backstage/plugin-auth-backend': patch -'@backstage/plugin-auth-node': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-devtools-backend': patch -'@backstage/plugin-events-backend': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-kubernetes-node': patch -'@backstage/plugin-notifications-backend': patch -'@backstage/plugin-permission-backend': patch -'@backstage/plugin-permission-node': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-search-backend': patch -'@backstage/plugin-signals-backend': patch -'@backstage/plugin-techdocs-backend': patch -'@backstage/plugin-techdocs-node': patch -'@backstage/plugin-user-settings-backend': patch ---- - -Updated dependency `supertest` to `^7.0.0`. diff --git a/.changeset/renovate-a674163.md b/.changeset/renovate-a674163.md deleted file mode 100644 index 396139042a..0000000000 --- a/.changeset/renovate-a674163.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-home-react': patch -'@backstage/plugin-home': patch -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-scaffolder': patch ---- - -Updated dependency `@rjsf/utils` to `5.20.1`. -Updated dependency `@rjsf/core` to `5.20.1`. -Updated dependency `@rjsf/material-ui` to `5.20.1`. -Updated dependency `@rjsf/validator-ajv8` to `5.20.1`. diff --git a/.changeset/renovate-b8911c2.md b/.changeset/renovate-b8911c2.md deleted file mode 100644 index 9f93a13254..0000000000 --- a/.changeset/renovate-b8911c2.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Updated dependency `use-immer` to `^0.10.0`. diff --git a/.changeset/renovate-c59c91d.md b/.changeset/renovate-c59c91d.md deleted file mode 100644 index eede7c81c2..0000000000 --- a/.changeset/renovate-c59c91d.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-explore': patch ---- - -Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.5`. diff --git a/.changeset/rich-bees-tickle.md b/.changeset/rich-bees-tickle.md deleted file mode 100644 index a2af89c867..0000000000 --- a/.changeset/rich-bees-tickle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Wrap scheduled tasks from the scheduler core service now in OpenTelemetry spans diff --git a/.changeset/rich-cheetahs-vanish.md b/.changeset/rich-cheetahs-vanish.md deleted file mode 100644 index 26cc55b917..0000000000 --- a/.changeset/rich-cheetahs-vanish.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/backend-common': patch -'@backstage/plugin-techdocs-node': patch ---- - -Internal fixes to match `testcontainers` update diff --git a/.changeset/rotten-crabs-hear.md b/.changeset/rotten-crabs-hear.md deleted file mode 100644 index 69148c59c1..0000000000 --- a/.changeset/rotten-crabs-hear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-notifications-backend': patch ---- - -Validate notification link when new notification is created diff --git a/.changeset/rude-fireants-accept.md b/.changeset/rude-fireants-accept.md deleted file mode 100644 index 0b543eddb2..0000000000 --- a/.changeset/rude-fireants-accept.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': patch ---- - -Add a `toJSON` on refs so that they can appear in expectations in jest tests diff --git a/.changeset/serious-cheetahs-help.md b/.changeset/serious-cheetahs-help.md deleted file mode 100644 index 88bad696c5..0000000000 --- a/.changeset/serious-cheetahs-help.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-search-react': patch -'@backstage/plugin-catalog': patch ---- - -The `/alpha` export no longer export extension creators for the new frontend system, existing usage should be switched to use the equivalent extension blueprint instead. For more information see the [new frontend system 1.30 migration documentation](https://backstage.io/docs/frontend-system/architecture/migrations#130). diff --git a/.changeset/serious-spies-knock.md b/.changeset/serious-spies-knock.md deleted file mode 100644 index 1484753019..0000000000 --- a/.changeset/serious-spies-knock.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Skip start without proper config diff --git a/.changeset/seven-beds-deliver.md b/.changeset/seven-beds-deliver.md deleted file mode 100644 index dcc74fb889..0000000000 --- a/.changeset/seven-beds-deliver.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch ---- - -Update README to clarify location of additional tabs example diff --git a/.changeset/sharp-fans-tan.md b/.changeset/sharp-fans-tan.md deleted file mode 100644 index add4a85758..0000000000 --- a/.changeset/sharp-fans-tan.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -- Fix secret widget field not displaying as required. -- Fix secret widget not able to be required inside nested objects. -- Fix secret widget not able to be disabled. -- Support `minLength` and `maxLength` properties for secret widget. diff --git a/.changeset/sharp-items-study.md b/.changeset/sharp-items-study.md deleted file mode 100644 index 61e8af54b6..0000000000 --- a/.changeset/sharp-items-study.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Exports the `discoveryFeatureLoader` as a replacement for the deprecated `featureDiscoveryService`. -The `discoveryFeatureLoader` is a new backend system [feature loader](https://backstage.io/docs/backend-system/architecture/feature-loaders/) that discovers backend features from the current `package.json` and its dependencies. -Here is an example using the `discoveryFeatureLoader` loader in a new backend instance: - -```ts -import { createBackend } from '@backstage/backend-defaults'; -import { discoveryFeatureLoader } from '@backstage/backend-defaults'; -//... - -const backend = createBackend(); -//... -backend.add(discoveryFeatureLoader); -//... -backend.start(); -``` diff --git a/.changeset/sharp-mayflies-beg.md b/.changeset/sharp-mayflies-beg.md deleted file mode 100644 index c78335c187..0000000000 --- a/.changeset/sharp-mayflies-beg.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -Internal refactor following removal of v1 extension support. The app implementation itself still supports v1 extensions at runtime. diff --git a/.changeset/shiny-carpets-worried.md b/.changeset/shiny-carpets-worried.md deleted file mode 100644 index c0093b49aa..0000000000 --- a/.changeset/shiny-carpets-worried.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-compat-api': minor ---- - -**BREAKING**: The `namespace` parameter for API's is now defaulted to the `pluginId` which was discovered. This means that if you're overriding API's by using ID's directly, they might have changed to include the plugin ID too. diff --git a/.changeset/shiny-carpets-worry.md b/.changeset/shiny-carpets-worry.md deleted file mode 100644 index 53688df920..0000000000 --- a/.changeset/shiny-carpets-worry.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch -'@backstage/frontend-test-utils': patch -'@backstage/frontend-app-api': patch ---- - -Removing deprecated `namespace` parameter in favour of `pluginId` instead diff --git a/.changeset/shiny-zoos-film.md b/.changeset/shiny-zoos-film.md deleted file mode 100644 index f9fb8cdce5..0000000000 --- a/.changeset/shiny-zoos-film.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@backstage/plugin-signals': patch ---- - -Added a `SignalsDisplay` extension to allows the signals plugin to be installed in an app as follows: - -```tsx -export default app.createRoot( - <> - - - - - - {routes} - - , -); -``` - -With this in place you can remove the explicit installation via the `plugins` option for `createApp`. diff --git a/.changeset/short-moles-brush.md b/.changeset/short-moles-brush.md deleted file mode 100644 index 033805c2b5..0000000000 --- a/.changeset/short-moles-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -`createRouter` and its related types has been marked as deprecared. This backend should instead be initialized using the new backend system. diff --git a/.changeset/silent-eyes-lie.md b/.changeset/silent-eyes-lie.md deleted file mode 100644 index e9da3d2685..0000000000 --- a/.changeset/silent-eyes-lie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/test-utils': minor ---- - -Added the icons option to the renderInTestApp function's TestAppOptions to be forwarded to the icons option of `createApp`. diff --git a/.changeset/six-goats-sort.md b/.changeset/six-goats-sort.md deleted file mode 100644 index 5df8924066..0000000000 --- a/.changeset/six-goats-sort.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Remove dependency on backend-common diff --git a/.changeset/six-humans-guess.md b/.changeset/six-humans-guess.md deleted file mode 100644 index 60845257c8..0000000000 --- a/.changeset/six-humans-guess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-proxy-backend': patch ---- - -Deprecated `createRouter` and its router options in favour of the new backend system. diff --git a/.changeset/sixty-rabbits-cheat.md b/.changeset/sixty-rabbits-cheat.md deleted file mode 100644 index 0161e272ed..0000000000 --- a/.changeset/sixty-rabbits-cheat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': minor ---- - -Make use of the `useApp` hook to retrieve the specified search icon in the SearchBar diff --git a/.changeset/slimy-chefs-think.md b/.changeset/slimy-chefs-think.md deleted file mode 100644 index 7fa546a399..0000000000 --- a/.changeset/slimy-chefs-think.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-notifications-backend-module-email': patch -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-notifications-backend': patch -'@backstage/plugin-techdocs-backend': patch ---- - -Refactor to use injected catalog client in the new backend system diff --git a/.changeset/smart-gifts-report.md b/.changeset/smart-gifts-report.md deleted file mode 100644 index fa3c8d96e9..0000000000 --- a/.changeset/smart-gifts-report.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-catalog-unprocessed-entities': patch ---- - -Show additional info on DevTools unprocessed entities table - -- Location path (so that it's easier to search the failed entity from the YAML URL) -- Time info of last discovery and next refresh time so that users can be aware of it and can sort the errors based on the time. diff --git a/.changeset/smart-owls-sell.md b/.changeset/smart-owls-sell.md deleted file mode 100644 index 0a2b555a20..0000000000 --- a/.changeset/smart-owls-sell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Properly indent the config schema diff --git a/.changeset/spicy-poems-hammer.md b/.changeset/spicy-poems-hammer.md deleted file mode 100644 index 23e86e178e..0000000000 --- a/.changeset/spicy-poems-hammer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-node': patch ---- - -As the `@backstage/backend-common` package is deprecated, we have updated the `techdocs-node` package to stop depending on it. diff --git a/.changeset/spicy-vans-eat.md b/.changeset/spicy-vans-eat.md deleted file mode 100644 index 037a5f18e0..0000000000 --- a/.changeset/spicy-vans-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Fix feature loaders in CJS double-default nested builds diff --git a/.changeset/sweet-cows-clean.md b/.changeset/sweet-cows-clean.md deleted file mode 100644 index fa2004186e..0000000000 --- a/.changeset/sweet-cows-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-test-utils': patch ---- - -Added the ability to provide additional `extensions` and `features` to `renderInTestApp` diff --git a/.changeset/swift-fishes-rush.md b/.changeset/swift-fishes-rush.md deleted file mode 100644 index ccfa3a0e40..0000000000 --- a/.changeset/swift-fishes-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Fixed an issue where published frontend packages would end up with an invalid import structure if a single module imported both `.css` and `.svg` files. diff --git a/.changeset/swift-garlics-mix.md b/.changeset/swift-garlics-mix.md deleted file mode 100644 index fc0993be3f..0000000000 --- a/.changeset/swift-garlics-mix.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -'@backstage/backend-app-api': minor -'@backstage/backend-common': minor -'@backstage/backend-defaults': minor -'@backstage/backend-plugin-api': minor -'@backstage/backend-test-utils': minor -'@backstage/plugin-auth-backend-module-atlassian-provider': minor -'@backstage/plugin-auth-backend-module-aws-alb-provider': minor -'@backstage/plugin-auth-backend-module-azure-easyauth-provider': minor -'@backstage/plugin-auth-backend-module-bitbucket-provider': minor -'@backstage/plugin-auth-backend-module-cloudflare-access-provider': minor -'@backstage/plugin-auth-backend-module-gcp-iap-provider': minor -'@backstage/plugin-auth-backend-module-github-provider': minor -'@backstage/plugin-auth-backend-module-gitlab-provider': minor -'@backstage/plugin-auth-backend-module-google-provider': minor -'@backstage/plugin-auth-backend-module-guest-provider': minor -'@backstage/plugin-auth-backend-module-microsoft-provider': minor -'@backstage/plugin-auth-backend-module-oauth2-provider': minor -'@backstage/plugin-auth-backend-module-oauth2-proxy-provider': minor -'@backstage/plugin-auth-backend-module-oidc-provider': minor -'@backstage/plugin-auth-backend-module-okta-provider': minor -'@backstage/plugin-auth-backend-module-onelogin-provider': minor -'@backstage/plugin-auth-backend-module-pinniped-provider': minor -'@backstage/plugin-auth-backend-module-vmware-cloud-provider': minor -'@backstage/plugin-auth-backend': minor -'@backstage/plugin-catalog-backend-module-backstage-openapi': minor -'@backstage/plugin-catalog-backend-module-gcp': minor -'@backstage/plugin-catalog-backend-module-github-org': minor -'@backstage/plugin-catalog-backend-module-gitlab-org': minor -'@backstage/plugin-catalog-backend-module-ldap': minor -'@backstage/plugin-catalog-backend-module-logs': minor -'@backstage/plugin-catalog-backend-module-openapi': minor -'@backstage/plugin-catalog-backend-module-scaffolder-entity-model': minor -'@backstage/plugin-catalog-backend-module-unprocessed': minor -'@backstage/plugin-devtools-backend': minor -'@backstage/plugin-events-node': minor -'@backstage/plugin-notifications-backend-module-email': minor -'@backstage/plugin-notifications-backend': minor -'@backstage/plugin-permission-backend-module-allow-all-policy': minor -'@backstage/plugin-scaffolder-backend-module-azure': minor -'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': minor -'@backstage/plugin-scaffolder-backend-module-bitbucket-server': minor -'@backstage/plugin-scaffolder-backend-module-bitbucket': minor -'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': minor -'@backstage/plugin-scaffolder-backend-module-cookiecutter': minor -'@backstage/plugin-scaffolder-backend-module-gcp': minor -'@backstage/plugin-scaffolder-backend-module-gerrit': minor -'@backstage/plugin-scaffolder-backend-module-gitea': minor -'@backstage/plugin-scaffolder-backend-module-github': minor -'@backstage/plugin-scaffolder-backend-module-gitlab': minor -'@backstage/plugin-scaffolder-backend-module-notifications': minor -'@backstage/plugin-scaffolder-backend-module-rails': minor -'@backstage/plugin-scaffolder-backend-module-sentry': minor -'@backstage/plugin-scaffolder-backend-module-yeoman': minor -'@backstage/plugin-search-backend-module-stack-overflow-collator': minor -'@backstage/plugin-signals-backend': minor ---- - -**BREAKING**: The return values from `createBackendPlugin`, `createBackendModule`, and `createServiceFactory` are now simply `BackendFeature` and `ServiceFactory`, instead of the previously deprecated form of a function that returns them. For this reason, `createServiceFactory` also no longer accepts the callback form where you provide direct options to the service. This also affects all `coreServices.*` service refs. - -This may in particular affect tests; if you were effectively doing `createBackendModule({...})()` (note the parentheses), you can now remove those extra parentheses at the end. You may encounter cases of this in your `packages/backend/src/index.ts` too, where you add plugins, modules, and services. If you were using `createServiceFactory` with a function as its argument for the purpose of passing in options, this pattern has been deprecated for a while and is no longer supported. You may want to explore the new multiton patterns to achieve your goals, or moving settings to app-config. - -As part of this change, the `IdentityFactoryOptions` type was removed, and can no longer be used to tweak that service. The identity service was also deprecated some time ago, and you will want to [migrate to the new auth system](https://backstage.io/docs/tutorials/auth-service-migration) if you still rely on it. diff --git a/.changeset/swift-radios-enjoy.md b/.changeset/swift-radios-enjoy.md deleted file mode 100644 index 495117e3c6..0000000000 --- a/.changeset/swift-radios-enjoy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Internal refactor to re-declare the token manager service which was removed from `@backstage/backend-plugin-api`, but is still supported in this package for backwards compatibility. diff --git a/.changeset/swift-seahorses-share.md b/.changeset/swift-seahorses-share.md deleted file mode 100644 index deaf2ab042..0000000000 --- a/.changeset/swift-seahorses-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch ---- - -Updated the README to include documentation for the new backend support diff --git a/.changeset/tall-camels-march.md b/.changeset/tall-camels-march.md deleted file mode 100644 index 892a8f19af..0000000000 --- a/.changeset/tall-camels-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-signals': patch ---- - -Put a name on the `SignalsDisplay` component extension diff --git a/.changeset/tame-hornets-shake.md b/.changeset/tame-hornets-shake.md deleted file mode 100644 index bf96193b55..0000000000 --- a/.changeset/tame-hornets-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Fix an issue where keys with duplicate final key parts are not all displayed in the `ReviewState`. Change the way the keys are formatted to include the full schema path, separated by `>`. diff --git a/.changeset/tasty-pigs-vanish.md b/.changeset/tasty-pigs-vanish.md deleted file mode 100644 index 73556c70d5..0000000000 --- a/.changeset/tasty-pigs-vanish.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Entity presentation api now only fetches fields that are required to display entity title diff --git a/.changeset/thick-walls-share.md b/.changeset/thick-walls-share.md deleted file mode 100644 index 798b1561b4..0000000000 --- a/.changeset/thick-walls-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gerrit': patch ---- - -Added test cases for publish:gerrit action examples diff --git a/.changeset/tiny-icons-sit.md b/.changeset/tiny-icons-sit.md deleted file mode 100644 index 7dc35a46fd..0000000000 --- a/.changeset/tiny-icons-sit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Small internal fix to better work with recent `lodash` versions diff --git a/.changeset/tiny-waves-provide.md b/.changeset/tiny-waves-provide.md deleted file mode 100644 index aabafcfd6b..0000000000 --- a/.changeset/tiny-waves-provide.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/backend-plugin-api': patch -'@backstage/backend-defaults': patch -'@backstage/backend-common': patch ---- - -Allow the cache service to accept the human duration format for TTL diff --git a/.changeset/tough-peaches-kneel.md b/.changeset/tough-peaches-kneel.md deleted file mode 100644 index 7674da8879..0000000000 --- a/.changeset/tough-peaches-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Fixed an issue with the by-query call, where ordering by a field that does not exist on all entities led to not all results being returned diff --git a/.changeset/tricky-apricots-film.md b/.changeset/tricky-apricots-film.md deleted file mode 100644 index 7b1c28fdb9..0000000000 --- a/.changeset/tricky-apricots-film.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-signals-react': patch ---- - -Fix for `useSignal` returning the inverse value for `isSignalsAvailable`. diff --git a/.changeset/twenty-clouds-melt.md b/.changeset/twenty-clouds-melt.md deleted file mode 100644 index dee2b0f8ef..0000000000 --- a/.changeset/twenty-clouds-melt.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -'@backstage/backend-defaults': minor ---- - -**BREAKING**: The default backend instance no longer provides implementations for the identity and token manager services, which have been removed from `@backstage/backend-plugin-api`. - -If you rely on plugins that still require these services, you can add them to your own backend by re-creating the service reference and factory. - -The following can be used to implement the identity service: - -```ts -import { - coreServices, - createServiceFactory, - createServiceRef, -} from '@backstage/backend-plugin-api'; -import { - DefaultIdentityClient, - IdentityApi, -} from '@backstage/plugin-auth-node'; - -backend.add( - createServiceFactory({ - service: createServiceRef({ id: 'core.identity' }), - deps: { - discovery: coreServices.discovery, - }, - async factory({ discovery }) { - return DefaultIdentityClient.create({ discovery }); - }, - }), -); -``` - -The following can be used to implement the token manager service: - -```ts -import { ServerTokenManager, TokenManager } from '@backstage/backend-common'; -import { createBackend } from '@backstage/backend-defaults'; -import { - coreServices, - createServiceFactory, - createServiceRef, -} from '@backstage/backend-plugin-api'; - -backend.add( - createServiceFactory({ - service: createServiceRef({ id: 'core.tokenManager' }), - deps: { - config: coreServices.rootConfig, - logger: coreServices.rootLogger, - }, - createRootContext({ config, logger }) { - return ServerTokenManager.fromConfig(config, { - logger, - allowDisabledTokenManager: true, - }); - }, - async factory(_deps, tokenManager) { - return tokenManager; - }, - }), -); -``` diff --git a/.changeset/twenty-jobs-repeat.md b/.changeset/twenty-jobs-repeat.md deleted file mode 100644 index 1ea98319d7..0000000000 --- a/.changeset/twenty-jobs-repeat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Enhanced the table hover effect with a lighter color and updated the border radius to align with Backstage's theme styling diff --git a/.changeset/twenty-queens-grow.md b/.changeset/twenty-queens-grow.md deleted file mode 100644 index 1236488dbe..0000000000 --- a/.changeset/twenty-queens-grow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': minor ---- - -Added EntityOwnerPicker component to the TemplateListPage to allow filtering on owner diff --git a/.changeset/unlucky-cycles-clean.md b/.changeset/unlucky-cycles-clean.md deleted file mode 100644 index 5b582dec59..0000000000 --- a/.changeset/unlucky-cycles-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Scaffolder review page shows static amount of asterisks for secret fields. diff --git a/.changeset/violet-apricots-smoke.md b/.changeset/violet-apricots-smoke.md deleted file mode 100644 index 80caf466eb..0000000000 --- a/.changeset/violet-apricots-smoke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Remove references to the `@backstage/backend-tasks` in versions of the `create-app` package, as it has been deprecated. diff --git a/.changeset/violet-jokes-tap.md b/.changeset/violet-jokes-tap.md deleted file mode 100644 index 5b79ced6cd..0000000000 --- a/.changeset/violet-jokes-tap.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch -'@backstage/frontend-app-api': patch ---- - -Added support for defining `replaces` in `createExtensionInput` which will allow extensions to redirect missing `attachTo` points to an input of the created extension. - -```ts -export const AppThemeApi = ApiBlueprint.makeWithOverrides({ - name: 'app-theme', - inputs: { - themes: createExtensionInput([ThemeBlueprint.dataRefs.theme], { - // attachTo: { id: 'app', input: 'themes'} will be redirected to this input instead - replaces: [{ id: 'app', input: 'themes' }], - }), - }, - factory: () { - ... - } -}); -``` diff --git a/.changeset/warm-boxes-grab-2.md b/.changeset/warm-boxes-grab-2.md deleted file mode 100644 index f1928c8be7..0000000000 --- a/.changeset/warm-boxes-grab-2.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch ---- - -A new `apis` parameter has been added to `factory` for extensions. This is a way to access utility APIs without being coupled to the React context. diff --git a/.changeset/warm-boxes-grab.md b/.changeset/warm-boxes-grab.md deleted file mode 100644 index e10dbe086c..0000000000 --- a/.changeset/warm-boxes-grab.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -Added the `root` extension the replace the `app` extension as the root of the app. diff --git a/.changeset/wild-buses-notice.md b/.changeset/wild-buses-notice.md deleted file mode 100644 index 3620786aa8..0000000000 --- a/.changeset/wild-buses-notice.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Added the option to skip database migrations by setting `skipMigrations: true` in config. This can be done globally in the database config or by plugin id. diff --git a/.changeset/wise-forks-play.md b/.changeset/wise-forks-play.md deleted file mode 100644 index 1c8be76d19..0000000000 --- a/.changeset/wise-forks-play.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/backend-defaults': minor ---- - -**BREAKING**: Simplifications and cleanup as part of the Backend System 1.0 work. - -For the `/database` subpath exports: - -- The deprecated `dropDatabase` function has now been removed, without replacement. -- The deprecated `LegacyRootDatabaseService` type has now been removed. -- The return type from `DatabaseManager.forPlugin` is now directly a `DatabaseService`, as arguably expected. -- `DatabaseManager.forPlugin` now requires the `deps` argument, with the logger and lifecycle services. - -For the `/cache` subpath exports: - -- The `PluginCacheManager` type has been removed. You can still import it from `@backstage/backend-common`, but it's deprecated there, and you should move off of that package by migrating fully to the new backend system. -- Accordingly, `CacheManager.forPlugin` immediately returns a `CacheService` instead of a `PluginCacheManager`. The outcome of this is that you no longer need to make the extra `.getClient()` call. The old `CacheManager` with the old behavior still exists on `@backstage/backend-common`, but the above recommendations apply. diff --git a/.changeset/wise-scissors-help.md b/.changeset/wise-scissors-help.md deleted file mode 100644 index c8fd2d4c44..0000000000 --- a/.changeset/wise-scissors-help.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/backend-defaults': patch -'@backstage/backend-app-api': patch -'@backstage/backend-common': patch -'@backstage/backend-plugin-api': patch ---- - -Updates to the config schema to match reality diff --git a/.changeset/witty-years-cry.md b/.changeset/witty-years-cry.md deleted file mode 100644 index 48c566730b..0000000000 --- a/.changeset/witty-years-cry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-permission-backend': patch ---- - -Deprecated `createRouter` and its router options in favour of the new backend system. diff --git a/.changeset/yellow-bees-hope.md b/.changeset/yellow-bees-hope.md deleted file mode 100644 index 1ea8690c20..0000000000 --- a/.changeset/yellow-bees-hope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': minor ---- - -Removed deprecated `icons` property passing to `createApp` and `createSpecializedApp`. Use `IconBundleBlueprint.make` to create extensions instead and include them in the app. diff --git a/.eslintignore b/.eslintignore index 5ccd2d1ba0..ea8f6760c7 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,6 +7,7 @@ **/.git/** **/public/** **/microsite/** +**/canon-docs/** **/templates/** **/sample-templates/** playwright.config.ts diff --git a/.eslintrc.js b/.eslintrc.js index 01cad187be..eb2a07b3b0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -263,4 +263,7 @@ module.exports = { }, }, ], + settings: { + 'testing-library/custom-queries': 'off', + }, }; diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a0c83a42bd..76a6afe4d6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -9,23 +9,19 @@ yarn.lock @backstage/maintainers @backst */yarn.lock @backstage/maintainers @backstage-service /.changeset/*.md /beps/0001-notifications-system @backstage/maintainers @backstage/notifications-maintainers +/docs @backstage/maintainers @backstage/documentation-maintainers /docs/assets/search @backstage/search-maintainers /docs/features/search @backstage/search-maintainers +/docs/dls @backstage/design-system-maintainers /docs/features/techdocs @backstage/techdocs-maintainers /docs/plugins/integrating-search-into-plugins.md @backstage/search-maintainers /packages/cli/src/commands/onboard @backstage/sharks /packages/backend-openapi-utils @backstage/maintainers @backstage/reviewers @backstage/openapi-tooling-maintainers +/packages/canon @backstage/design-system-maintainers /packages/techdocs-cli @backstage/techdocs-maintainers /packages/techdocs-cli-embedded-app @backstage/techdocs-maintainers -/plugins/adr @backstage/maintainers @backstage/reviewers @kuangp -/plugins/adr-* @backstage/maintainers @backstage/reviewers @kuangp /plugins/api-docs @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/azure-devops @backstage/maintainers @backstage/reviewers @awanlin -/plugins/azure-devops-backend @backstage/maintainers @backstage/reviewers @awanlin -/plugins/azure-devops-common @backstage/maintainers @backstage/reviewers @awanlin -/plugins/analytics-module-newrelic-browser @backstage/maintainers @backstage/reviewers @jmezach /plugins/bitbucket-cloud-common @backstage/maintainers @backstage/reviewers @pjungermann -/plugins/bitrise @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers /plugins/catalog @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers /plugins/catalog-* @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers /plugins/catalog-backend-module-aws @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers @pjungermann @@ -34,53 +30,31 @@ yarn.lock @backstage/maintainers @backst /plugins/catalog-backend-module-msgraph @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers @pjungermann /plugins/catalog-backend-module-puppetdb @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers /plugins/catalog-graph @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers @backstage/sda-se-reviewers -/plugins/cicd-statistics @backstage/sharks -/plugins/circleci @backstage/maintainers @backstage/reviewers @adamdmharvey -/plugins/code-coverage @backstage/maintainers @backstage/reviewers @alde -/plugins/code-coverage-backend @backstage/maintainers @backstage/reviewers @alde -/plugins/cost-insights @backstage/maintainers @backstage/reviewers @backstage/silver-lining -/plugins/cost-insights-* @backstage/maintainers @backstage/reviewers @backstage/silver-lining /plugins/devtools @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-backend @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-common @backstage/maintainers @backstage/reviewers @awanlin -/plugins/entity-feedback @backstage/maintainers @backstage/reviewers @kuangp -/plugins/entity-feedback-* @backstage/maintainers @backstage/reviewers @kuangp /plugins/events-* @backstage/maintainers @backstage/reviewers @backstage/events-maintainers -/plugins/explore @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/explore-react @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/fossa @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/git-release-manager @backstage/maintainers @backstage/reviewers @erikengervall /plugins/home @backstage/home-maintainers /plugins/home-* @backstage/home-maintainers -/plugins/kafka @backstage/maintainers @backstage/reviewers @andrewthauer -/plugins/kafka-backend @backstage/maintainers @backstage/reviewers @andrewthauer /plugins/kubernetes @backstage/kubernetes-maintainers /plugins/kubernetes-* @backstage/kubernetes-maintainers -/plugins/linguist @backstage/maintainers @backstage/reviewers @awanlin -/plugins/linguist-backend @backstage/maintainers @backstage/reviewers @awanlin -/plugins/linguist-common @backstage/maintainers @backstage/reviewers @awanlin /plugins/notifications @backstage/maintainers @backstage/notifications-maintainers /plugins/notifications-* @backstage/maintainers @backstage/notifications-maintainers /plugins/scaffolder-backend-module-notifications @backstage/maintainers @backstage/notifications-maintainers -/plugins/octopus-deploy @backstage/maintainers @backstage/reviewers @jmezach /plugins/permission-* @backstage/permission-maintainers -/plugins/playlist @backstage/maintainers @backstage/reviewers @kuangp -/plugins/playlist-* @backstage/maintainers @backstage/reviewers @kuangp -/plugins/rollbar @backstage/maintainers @backstage/reviewers @andrewthauer -/plugins/rollbar-backend @backstage/maintainers @backstage/reviewers @andrewthauer /plugins/scaffolder @backstage/maintainers @backstage/reviewers @backstage/scaffolder-maintainers /plugins/scaffolder-* @backstage/maintainers @backstage/reviewers @backstage/scaffolder-maintainers /plugins/search @backstage/search-maintainers /plugins/search-* @backstage/search-maintainers /plugins/signals @backstage/maintainers @backstage/notifications-maintainers /plugins/signals-* @backstage/maintainers @backstage/notifications-maintainers -/plugins/sonarqube @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers /plugins/techdocs @backstage/techdocs-maintainers /plugins/techdocs-* @backstage/techdocs-maintainers +/plugins/user-settings @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers /plugins/user-settings-backend @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -/plugins/tech-insights-backend @backstage/maintainers @backstage/reviewers @xantier -/plugins/tech-insights-backend-module-jsonfc @backstage/maintainers @backstage/reviewers @xantier -/plugins/tech-insights-tech-insights-common @backstage/maintainers @backstage/reviewers @xantier -/plugins/tech-insights-tech-insights-node @backstage/maintainers @backstage/reviewers @xantier +/plugins/user-settings-common @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers -knip-report.md +/packages/backend-plugin-api/src/services/definitions/AuditorService.ts @backstage/maintainers @backstage/auditor-maintainers +/packages/backend-defaults/src/entrypoints/auditor @backstage/maintainers @backstage/auditor-maintainers +/packages/backend-defaults/report-auditor.api.md @backstage/maintainers @backstage/auditor-maintainers +/docs/backend-system/core-services/auditor.md @backstage/maintainers @backstage/auditor-maintainers @backstage/documentation-maintainers diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 37f54997c6..77faa9354f 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -40,6 +40,11 @@ matchSourceUrls: ['https://github.com/yarnpkg/berry'], enabled: false, }, + // https://github.com/backstage/backstage/issues/27123 + { + matchPackageNames: ['browser-actions/setup-chrome'], + enabled: false, + }, // ESM only majors, that we're not ready for yet { matchPackageNames: ['node-fetch'], diff --git a/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt index 320bb2e0ce..7a83dc6e92 100644 --- a/.github/vale/config/vocabularies/Backstage/accept.txt +++ b/.github/vale/config/vocabularies/Backstage/accept.txt @@ -14,6 +14,8 @@ allowlisted Anddddd Apdex api +apis +approvers asciidoc async Atlassian @@ -39,6 +41,8 @@ Brex broadcasted bugfixes builtins +bundler +bundlers callout CDNs Chai @@ -70,19 +74,24 @@ config Config configmaps configs +configurability +conformant const cookiecutter +corepack Corti cron cronjobs crontab css +cve +CVEs daemonsets Datadog dataflow dayjs debounce -Debounce +debounces debuggability declaratively deduplicate @@ -92,13 +101,19 @@ deliverables denormalized dependabot deps +deserialization destructured destructuring Deutsche dev +devcontainer +devcontainers devops devs +dequeue +dequeueing dialogs +disambiguator discoverability Discoverability dls @@ -112,6 +127,7 @@ DOMPurify don'ts dynatrace Dynatrace +dyno ecco elasticsearch Entra @@ -126,6 +142,7 @@ Expedia facto failover Fargate +featureful Figma firehydrant FireHydrant @@ -147,6 +164,7 @@ Gitiles gitlab GitLab globals +globbing Gource Grafana graphql @@ -163,6 +181,7 @@ Heroku hoc horizontalpodautoscalers Hostname +hotspot hotspots howto http @@ -172,14 +191,17 @@ idempotency Iglesias iLert img +impactful incentivised Indal indexable ingestors inlined +inlining inlinehilite integrator's interop +interoperate iterable JaCoCo JavaScript @@ -199,6 +221,7 @@ Knex knip Koyeb KPIs +kroki Kuang kubectl kubernetes @@ -208,13 +231,16 @@ learnings Leasot lerna Lerna +Levenshtein lightbox Lightsail limitranges LocalStack lockdown lockfile +lockfiles lookbehind +lowercased lunr Luxon magiclink @@ -240,6 +266,7 @@ misconfiguration misconfigured mkdocs Mkdocs +modularization monorepo Monorepo monorepos @@ -259,10 +286,12 @@ neuro newrelic nginx nodegit +nodejs nohoist nonces noop npm +nullable nunjucks nvarchar nvm @@ -279,6 +308,8 @@ OpenSearch OpenShift openssl orgs +Overridable +overridable padding paddings pagerduty @@ -308,9 +339,11 @@ PR pre prebaked preconfigured +prefilled prepack Preprarer productional +projectSlug Protobuf proxied proxying @@ -322,12 +355,14 @@ pygments pymdownx rankdir readme -Readme +readmes readonly rebase rebasing Recharts Redash +redis +reimplement renderer renderers replicasets @@ -361,14 +396,18 @@ scaffolded scaffolder Scaffolder scrollbar +SCM +SCMs sdks seb semlas semver +sendmail serializable Serverless shoutout SIG +signoff SIGs siloed Sinon @@ -389,6 +428,7 @@ src statefulsets stdout storable +storages stringified stringify subcommand @@ -402,6 +442,7 @@ subheaders subkey subpath subroutes +substring subtree superfences Superfences @@ -446,12 +487,15 @@ typeahead ui unbreak Unconference +undici unicode unmanaged unmount unregister unregistering unregistration +unstarred +untemplated untracked upsert upstreams @@ -489,3 +533,4 @@ zoomable zsh scrollable severities +intellij diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml index abb98c03e1..91c0a43447 100644 --- a/.github/workflows/api-breaking-changes-comment.yml +++ b/.github/workflows/api-breaking-changes-comment.yml @@ -20,9 +20,10 @@ jobs: git-ref: ${{ steps.event.outputs.GIT_REF }} pr-number: ${{ steps.event.outputs.PR_NUMBER }} action: ${{ steps.event.outputs.ACTION }} + comment-cache-key: ${{ steps.hash.outputs.COMMENT_FILE_HASH }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: disable-sudo: true egress-policy: block @@ -64,21 +65,29 @@ jobs: echo ACTION=$(jq --raw-output '.action | tostring | [scan("\\w+")][0]' < event.json) >> $GITHUB_OUTPUT echo GIT_REF=$(jq --raw-output '.pull_request.head.sha | tostring | [scan("\\w+")][0]' < event.json) >> $GITHUB_OUTPUT + - name: Fetch Command and Calculate Hash + id: hash + run: | + unzip preview-spec.zip comment.md + ls + echo "COMMENT_FILE_HASH=$(md5sum comment.md | awk '{ print $1 }')" >> $GITHUB_OUTPUT + + - name: Cache Comment + if: ${{ steps.event.outputs.ACTION != 'closed' }} + uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2 + with: + path: comment.md + key: ${{ steps.hash.outputs.COMMENT_FILE_HASH }} + - name: DEBUG - Print Job Outputs if: ${{ runner.debug }} run: | echo "PR number: ${{ steps.event.outputs.PR_NUMBER }}" echo "Git Ref: ${{ steps.event.outputs.GIT_REF }}" echo "Action: ${{ steps.event.outputs.ACTION }}" + echo "Hash: ${{ steps.hash.outputs.COMMENT_FILE_HASH }}" cat event.json - - name: Get Comment - id: get-comment - run: | - unzip preview-spec.zip comment.md - ls - grep - add-comment: name: Write comment about issues needs: @@ -90,7 +99,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + + - name: Fetch cached Manifests File + id: cache + uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4 + with: + path: comment.md + key: ${{ needs.setup.outputs.comment-cache-key }} # 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 12d33b450e..281507f99b 100644 --- a/.github/workflows/api-breaking-changes.yml +++ b/.github/workflows/api-breaking-changes.yml @@ -14,11 +14,11 @@ jobs: if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 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 @@ -27,15 +27,15 @@ jobs: run: git fetch --depth 1 origin ${{ github.base_ref }} - name: setup-node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: - cache-prefix: linux-v18 + cache-prefix: linux-v20 - name: breaking changes check run: | @@ -46,7 +46,7 @@ jobs: cat ${{ github.event_path }} > event.json - name: Upload Artifacts - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4 with: name: preview-spec path: | diff --git a/.github/workflows/automate_area-labels.yml b/.github/workflows/automate_area-labels.yml index fcff8bc11a..ec6dd0c85c 100644 --- a/.github/workflows/automate_area-labels.yml +++ b/.github/workflows/automate_area-labels.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index 1d8e29fab0..c1245c59b9 100644 --- a/.github/workflows/automate_changeset_feedback.yml +++ b/.github/workflows/automate_changeset_feedback.yml @@ -23,18 +23,18 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 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 ref: 'refs/pull/${{ github.event.pull_request.number }}/merge' - name: fetch base run: git fetch --depth 1 origin ${{ github.base_ref }} - - uses: backstage/actions/changeset-feedback@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + - uses: backstage/actions/changeset-feedback@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 name: Generate feedback with: diff-ref: 'origin/master' diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 2bc7940971..ebe2ef739d 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -24,11 +24,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: '${{ github.event.pull_request.merge_commit_sha }}' diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml index 1ffeac1cc0..c34c1312b1 100644 --- a/.github/workflows/automate_stale.yml +++ b/.github/workflows/automate_stale.yml @@ -15,11 +15,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0 + - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 id: stale with: stale-issue-message: > diff --git a/.github/workflows/ci-noop.yml b/.github/workflows/ci-noop.yml index 9b54e6fe6f..472a7a4e72 100644 --- a/.github/workflows/ci-noop.yml +++ b/.github/workflows/ci-noop.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: Verify ${{ matrix.node-version }} steps: @@ -35,12 +35,12 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: Test ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5cbe2e15a3..d1b5df56ef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true @@ -28,20 +28,20 @@ jobs: name: Install ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -55,7 +55,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true @@ -64,20 +64,20 @@ jobs: name: Verify ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -90,6 +90,9 @@ jobs: - name: verify local dependency ranges run: node scripts/verify-local-dependencies.js + - name: verify peer dependency ranges + run: yarn lint:peer-deps + - name: check for missing repo fixes run: yarn fix --check @@ -124,6 +127,10 @@ jobs: - name: build all packages run: yarn backstage-cli repo build --all + # For now canon has a custom build script and needs to be built separately + - name: build canon + run: yarn --cwd packages/canon build + - name: verify type dependencies run: yarn lint:type-deps @@ -150,12 +157,12 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: Test ${{ matrix.node-version }} services: - postgres16: - image: postgres:16 + postgres17: + image: postgres:17 env: POSTGRES_PASSWORD: postgres options: >- @@ -165,8 +172,8 @@ jobs: --health-retries 5 ports: - 5432/tcp - postgres12: - image: postgres:12 + postgres13: + image: postgres:13 env: POSTGRES_PASSWORD: postgres options: >- @@ -199,14 +206,14 @@ jobs: env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot --experimental-vm-modules INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }} INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }} INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }} INTEGRATION_TEST_AZURE_TOKEN: ${{ secrets.INTEGRATION_TEST_AZURE_TOKEN }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: fetch master branch run: git fetch origin master @@ -216,13 +223,13 @@ jobs: run: git fetch origin ${{ github.event.pull_request.base.ref }} - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -230,18 +237,35 @@ 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@d4323d4df104b026a6aa633fdb11d772146be0bf # 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 + 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] }} - BACKSTAGE_TEST_DATABASE_POSTGRES12_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres12.ports[5432] }} + BACKSTAGE_TEST_DATABASE_POSTGRES17_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres17.ports[5432] }} + BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres13.ports[5432] }} 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@d4323d4df104b026a6aa633fdb11d772146be0bf # 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/cron.yml b/.github/workflows/cron.yml index 2ac5434f72..b48bd2683d 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -10,11 +10,11 @@ jobs: timeout-minutes: 10 steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: backstage/actions/cron@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + - uses: backstage/actions/cron@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index 9da484a497..555cc351c8 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -16,28 +16,28 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x] + node-version: [20.x] steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: path: backstage ref: ${{ github.event.client_payload.version && env.RELEASE_VERSION || github.ref }} - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -45,6 +45,7 @@ jobs: run: npx @backstage/create-app env: BACKSTAGE_APP_NAME: example-app + YARN_ENABLE_IMMUTABLE_INSTALLS: false - name: yarn build run: yarn build:backend @@ -58,10 +59,10 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 - name: Build and push - uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v6.7.0 + uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6.12.0 with: context: './example-app' file: ./example-app/packages/backend/Dockerfile diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index f07cf21784..1620197cb8 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit @@ -54,32 +54,49 @@ jobs: result-encoding: string - name: checkout latest release - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: refs/tags/${{ steps.find-release.outputs.result }} - - name: use node.js 18.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: build API reference run: yarn build:api-docs - name: upload API reference - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4 with: name: stable-reference path: docs/reference/ if-no-files-found: error retention-days: 1 + - name: microsite yarn install + run: yarn install --immutable + working-directory: microsite + + # TODO: Enable after 1.37 is released + # - name: build OpenAPI API docs + # working-directory: microsite + # run: yarn docusaurus gen-api-docs all + + # - name: upload OpenAPI API docs + # uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 + # with: + # name: stable-openapi-docs + # path: docs/**/*.api.mdx + # if-no-files-found: error + # retention-days: 1 + next: runs-on: ubuntu-latest concurrency: @@ -91,29 +108,29 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: checkout master - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: use node.js 18.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: build API reference run: yarn build:api-docs - name: upload API reference - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4 with: name: next-reference path: docs/reference/ @@ -130,13 +147,29 @@ jobs: working-directory: storybook - name: storybook upload - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4 + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4 with: name: storybook path: storybook/dist/ if-no-files-found: error retention-days: 1 + - name: microsite yarn install + run: yarn install --immutable + working-directory: microsite + + - name: build OpenAPI API docs + working-directory: microsite + run: yarn docusaurus gen-api-docs all + + - name: upload OpenAPI API docs + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4 + with: + name: next-openapi-docs + path: docs/**/*.api.mdx + if-no-files-found: error + retention-days: 1 + deploy-microsite-and-storybook: permissions: contents: write # for JamesIves/github-pages-deploy-action to push changes in repo @@ -158,19 +191,19 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - name: use node.js 18.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth # Stable docs - name: checkout latest release - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: refs/tags/${{ needs.stable.outputs.release }} @@ -179,11 +212,23 @@ jobs: working-directory: microsite - name: download stable reference - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4 with: name: stable-reference path: docs/reference + # TODO: Enable after 1.37 is released + # - name: download stable OpenAPI API docs + # uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 + # with: + # name: stable-openapi-docs + # path: docs/**/*.api.mdx + + - name: grab lastest releases docs + run: | + git fetch origin master --depth 1 + git checkout FETCH_HEAD -- docs/releases + - name: generate stable docs run: yarn docusaurus docs:version stable working-directory: microsite @@ -191,9 +236,12 @@ jobs: - name: clear API reference run: rm -r docs/reference + - name: clear OpenAPI reference + run: find . -name '*.api.mdx' -delete + # Next docs - name: checkout master - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: clean: false @@ -202,16 +250,22 @@ jobs: working-directory: microsite - name: download next reference - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4 with: name: next-reference path: docs/reference + - name: download next OpenAPI API docs + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4 + with: + name: next-openapi-docs + path: docs/**/*.api.mdx + - name: build microsite run: yarn build working-directory: microsite - - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 + - uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4 with: name: storybook path: microsite/build/storybook @@ -220,7 +274,7 @@ jobs: run: ls microsite/build && ls microsite/build/storybook - name: Deploy both microsite and storybook to gh-pages - uses: JamesIves/github-pages-deploy-action@920cbb300dcd3f0568dbc42700c61e2fd9e6139c # v4.6.4 + uses: JamesIves/github-pages-deploy-action@62fec3add6773ec5dbbf18d2ee4260911aa35cf4 # v4.6.9 with: branch: gh-pages folder: microsite/build diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index f86c1db4fa..0387de0d97 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -13,11 +13,11 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] services: - postgres16: - image: postgres:16 + postgres17: + image: postgres:17 env: POSTGRES_PASSWORD: postgres options: >- @@ -27,8 +27,8 @@ jobs: --health-retries 5 ports: - 5432/tcp - postgres12: - image: postgres:12 + postgres13: + image: postgres:13 env: POSTGRES_PASSWORD: postgres options: >- @@ -61,22 +61,22 @@ jobs: env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot --experimental-vm-modules INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }} INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }} INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }} INTEGRATION_TEST_AZURE_TOKEN: ${{ secrets.INTEGRATION_TEST_AZURE_TOKEN }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -93,8 +93,16 @@ jobs: - name: validate config run: yarn backstage-cli config:check --lax + - name: backstage-cli cache + uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # 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 + run: yarn backstage-cli repo lint --successCache --successCacheDir .cache/backstage-cli - name: type checking and declarations run: yarn tsc:full @@ -102,21 +110,20 @@ jobs: - name: build run: yarn backstage-cli repo build --all + # For now canon has a custom build script and needs to be built separately + - name: build canon + run: yarn --cwd packages/canon build + - name: verify type dependencies run: yarn lint:type-deps - 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] }} - BACKSTAGE_TEST_DATABASE_POSTGRES12_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres12.ports[5432] }} + BACKSTAGE_TEST_DATABASE_POSTGRES17_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres17.ports[5432] }} + BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres13.ports[5432] }} 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] }} @@ -140,11 +147,11 @@ jobs: strategy: matrix: - node-version: [18.x] + node-version: [20.x] steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index c8793d3ab0..8e30170aca 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -16,7 +16,7 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml index 62bf70187b..61252e7567 100644 --- a/.github/workflows/pr-review-comment-trigger.yaml +++ b/.github/workflows/pr-review-comment-trigger.yaml @@ -20,7 +20,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit @@ -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@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 with: name: pr_number-${{ github.event.pull_request.number }} path: pr/ diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml index 6133fdef8a..e108f3a4d7 100644 --- a/.github/workflows/pr-review-comment.yaml +++ b/.github/workflows/pr-review-comment.yaml @@ -17,7 +17,7 @@ jobs: steps: # Inspired by https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit @@ -40,7 +40,7 @@ jobs: const prNumber = artifact.name.slice('pr_number-'.length) core.setOutput('pr-number', prNumber); - - uses: backstage/actions/re-review@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + - uses: backstage/actions/re-review@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 510d5242f4..ab2630c2d9 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -18,12 +18,12 @@ jobs: if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: PR sync - uses: backstage/actions/pr-sync@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/pr-sync@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 8196e61bb9..4a5707087e 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -29,12 +29,12 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: 'Checkout code' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 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@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 with: name: SARIF file path: results.sarif @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/upload-sarif@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11 with: sarif_file: results.sarif diff --git a/.github/workflows/sync_canon.yml b/.github/workflows/sync_canon.yml new file mode 100644 index 0000000000..a23e039b06 --- /dev/null +++ b/.github/workflows/sync_canon.yml @@ -0,0 +1,61 @@ +name: Sync Canon Docs +on: + push: + branches: [master] + +jobs: + sync-canon-docs: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 + with: + egress-policy: audit + + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 + with: + node-version: 20.x + registry-url: https://registry.npmjs.org/ # Needed for auth + + - name: yarn install + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 + with: + cache-prefix: ${{ runner.os }}-v20.x + + - name: Checkout backstage/canon-docs + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + repository: backstage/canon-docs + path: canon-external-docs + token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} + + - name: Configure Git + run: | + git config --global user.email noreply@backstage.io + git config --global user.name 'Github Canon Docs workflow' + + - name: Install dependencies + working-directory: canon-docs + run: yarn install + + - name: Build Canon Docs + working-directory: canon-docs + run: | + yarn build + + - name: Replace contents of canon-external-docs repo with docs build output + working-directory: canon-external-docs + run: | + git rm -rf . + cp -R ../canon-docs/dist/. . + + - name: Commit to canon-storybook repo + working-directory: canon-external-docs + run: | + git add . + git commit -am "Canon Docs build for backstage/backstage@${{ github.sha }}" + git push diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index 859f077095..90a3f62aba 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -10,22 +10,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: # Fetch changes to previous commit - required for 'only_changed' in Prettier action fetch-depth: 0 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index 357b7f5cd9..42efaa1142 100644 --- a/.github/workflows/sync_dependabot-changesets.yml +++ b/.github/workflows/sync_dependabot-changesets.yml @@ -11,12 +11,12 @@ jobs: if: github.actor == 'dependabot[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 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 898aaa74c7..1a47978b8c 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -8,26 +8,26 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: # 'v' prefix is added here for the tag, we keep it out of the manifest logic ref: v${{ github.event.client_payload.version }} - - name: use node.js 18.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: Build yarn plugin working-directory: packages/yarn-plugin @@ -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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: repository: backstage/versions path: versions diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index 19072a443b..2eb8f13dbc 100644 --- a/.github/workflows/sync_renovate-changesets.yml +++ b/.github/workflows/sync_renovate-changesets.yml @@ -11,12 +11,12 @@ jobs: if: github.actor == 'renovate[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 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 0369f89648..f9e202e3e0 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -12,24 +12,24 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: use node.js 18.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x + node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: Create Snyk report - uses: snyk/actions/node@9213221444c2dc9e8b2502c1e857c26d851e84a7 # master + uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master continue-on-error: true # Snyk CLI exits with error when vulnerabilities are found with: args: > diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index da13ec653f..aec03d09ee 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -25,13 +25,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Monitor and Synchronize Snyk Policies - uses: snyk/actions/node@9213221444c2dc9e8b2502c1e857c26d851e84a7 # master + uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master with: command: monitor args: > @@ -46,7 +46,7 @@ jobs: # Above we run the `monitor` command, this runs the `test` command which is # the one that generates the SARIF report that we can upload to GitHub. - name: Create Snyk report - uses: snyk/actions/node@9213221444c2dc9e8b2502c1e857c26d851e84a7 # master + uses: snyk/actions/node@cdb760004ba9ea4d525f2e043745dfe85bb9077e # master continue-on-error: true # To make sure that SARIF upload gets called with: args: > @@ -58,6 +58,6 @@ jobs: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} NODE_OPTIONS: --max-old-space-size=7168 - name: Upload Snyk report - uses: github/codeql-action/upload-sarif@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/upload-sarif@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11 with: sarif_file: snyk.sarif diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index 3a29ba3c79..4a33b2241e 100644 --- a/.github/workflows/sync_version-packages.yml +++ b/.github/workflows/sync_version-packages.yml @@ -14,15 +14,19 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 20000 fetch-tags: true token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} + + - name: Fetch tags # See https://github.com/actions/checkout/issues/2041 + run: git fetch --tags + - name: Install Dependencies run: yarn --immutable - name: Create Release Pull Request diff --git a/.github/workflows/verify_accessibility-noop.yml b/.github/workflows/verify_accessibility-noop.yml index 8d8cb30789..c33acfd86d 100644 --- a/.github/workflows/verify_accessibility-noop.yml +++ b/.github/workflows/verify_accessibility-noop.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index fd86075ea0..b1ed9448c0 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -20,19 +20,19 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - name: Use Node.js 18.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x + node-version: 20.x - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: - cache-prefix: ${{ runner.os }}-v18.x + cache-prefix: ${{ runner.os }}-v20.x - name: run Lighthouse CI run: | yarn dlx @lhci/cli@0.11.x autorun diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index 177348c30f..d028be98d8 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -42,12 +42,12 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. @@ -55,7 +55,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/init@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -66,7 +66,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/autobuild@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -80,4 +80,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/analyze@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11 diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml index 8e1a91d850..a3b80f498a 100644 --- a/.github/workflows/verify_docs-quality.yml +++ b/.github/workflows/verify_docs-quality.yml @@ -12,11 +12,11 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # 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 @@ -26,7 +26,7 @@ jobs: run: echo "args=$(node scripts/check-docs-quality.js --ci-args)" >> $GITHUB_OUTPUT - name: documentation quality check - uses: errata-ai/vale-action@38bf078c328061f59879b347ca344a718a736018 # v2.1.0 + uses: errata-ai/vale-action@d89dee975228ae261d22c15adcd03578634d429c # v2.1.1 with: # This also contains --config=.github/vale/config.ini ... :/ files: '${{ steps.generate.outputs.args }}' diff --git a/.github/workflows/verify_e2e-kubernetes-noop.yml b/.github/workflows/verify_e2e-kubernetes-noop.yml deleted file mode 100644 index 544c4e6186..0000000000 --- a/.github/workflows/verify_e2e-kubernetes-noop.yml +++ /dev/null @@ -1,30 +0,0 @@ -# NO-OP placeholder that always passes for other paths -# This is here so that we're able to set the status check as required - -name: E2E Kubernetes Void -on: - pull_request: - paths-ignore: - - 'yarn.lock' - - '.github/workflows/verify_e2e-kubernetes.yml' - - 'packages/backend-common/src/**' - -permissions: - contents: read - -jobs: - verify: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [18.x, 20.x] - - name: Kubernetes ${{ matrix.node-version }} - steps: - - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 - with: - egress-policy: audit - - - run: echo NOOP diff --git a/.github/workflows/verify_e2e-kubernetes.yml b/.github/workflows/verify_e2e-kubernetes.yml deleted file mode 100644 index 18eee7e3f2..0000000000 --- a/.github/workflows/verify_e2e-kubernetes.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: E2E Kubernetes -on: - # NOTE: If you change these you must update verify_kubernetes-noop.yml as well - pull_request: - paths: - - 'yarn.lock' - - '.github/workflows/verify_e2e-kubernetes.yml' - - 'packages/backend-common/src/**' - -jobs: - verify: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [18.x, 20.x] - - env: - CI: true - KUBERNETES_TESTS: true - - name: Kubernetes ${{ matrix.node-version }} - steps: - - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 - with: - egress-policy: audit - - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: ${{ matrix.node-version }} - registry-url: https://registry.npmjs.org/ # Needed for auth - - - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 - with: - cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - - - name: bootstrap kind - uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 - - - name: kubernetes test - working-directory: packages/backend-common - run: yarn test:kubernetes diff --git a/.github/workflows/verify_e2e-linux-noop.yml b/.github/workflows/verify_e2e-linux-noop.yml index 024f288255..65fc6eccc9 100644 --- a/.github/workflows/verify_e2e-linux-noop.yml +++ b/.github/workflows/verify_e2e-linux-noop.yml @@ -24,12 +24,12 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 1c1ed7a3eb..7ae7e298e7 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -8,6 +8,8 @@ on: - 'docs/**' - 'microsite/**' - 'beps/**' + push: + branches: [master] concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -19,7 +21,7 @@ jobs: services: postgres: - image: postgres:12 + image: postgres:13 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres @@ -32,20 +34,20 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot --experimental-vm-modules name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Configure Git run: | @@ -53,12 +55,12 @@ jobs: git config --global user.name 'GitHub e2e user' - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index e2788e2d47..e5fe78cd8e 100644 --- a/.github/workflows/verify_e2e-techdocs.yml +++ b/.github/workflows/verify_e2e-techdocs.yml @@ -7,6 +7,8 @@ on: - 'packages/techdocs-cli/**' - 'packages/techdocs-cli-embedded-app/**' - 'plugins/techdocs/**' + push: + branches: [master] concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -21,21 +23,21 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true - NODE_OPTIONS: --max-old-space-size=4096 + NODE_OPTIONS: --max-old-space-size=4096 --experimental-vm-modules name: Techdocs steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: '3.9' diff --git a/.github/workflows/verify_e2e-windows-noop.yml b/.github/workflows/verify_e2e-windows-noop.yml index 5244a78919..e713f33ed6 100644 --- a/.github/workflows/verify_e2e-windows-noop.yml +++ b/.github/workflows/verify_e2e-windows-noop.yml @@ -20,12 +20,12 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index 8663e420eb..6a27f119e3 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -11,6 +11,8 @@ on: - 'packages/cli/**' - 'packages/e2e-test/**' - 'packages/create-app/**' + push: + branches: [master] concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -22,16 +24,16 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot --experimental-vm-modules name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit @@ -42,7 +44,7 @@ jobs: git config --global core.autocrlf false git config --global core.eol lf - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Configure Git run: | @@ -50,13 +52,13 @@ jobs: git config --global user.name 'GitHub e2e user' - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: setup python - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: '3.10' @@ -78,7 +80,7 @@ jobs: uses: browser-actions/setup-chrome@803ef6dfb4fdf22089c9563225d95e4a515820a0 # latest - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml index 3a5899d3cf..7bc612bf64 100644 --- a/.github/workflows/verify_fossa.yml +++ b/.github/workflows/verify_fossa.yml @@ -14,12 +14,12 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - 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-noop.yml b/.github/workflows/verify_microsite-noop.yml index daec683da6..da4bc6ba25 100644 --- a/.github/workflows/verify_microsite-noop.yml +++ b/.github/workflows/verify_microsite-noop.yml @@ -21,7 +21,7 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index a290b221b2..c46ba57e97 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -24,17 +24,17 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: use node.js 18.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5 + node-version: 20.x + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5 with: python-version: '3.9' diff --git a/.github/workflows/verify_microsite_accessibility-noop.yml b/.github/workflows/verify_microsite_accessibility-noop.yml index a3e8e7fdec..d6f9d24b5e 100644 --- a/.github/workflows/verify_microsite_accessibility-noop.yml +++ b/.github/workflows/verify_microsite_accessibility-noop.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite_accessibility.yml b/.github/workflows/verify_microsite_accessibility.yml index b2c98c1e58..fc461965a3 100644 --- a/.github/workflows/verify_microsite_accessibility.yml +++ b/.github/workflows/verify_microsite_accessibility.yml @@ -15,16 +15,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Use Node.js 18.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + - name: Use Node.js 20.x + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: - node-version: 18.x + node-version: 20.x - name: top-level install run: yarn install --immutable diff --git a/.github/workflows/verify_storybook-noop.yml b/.github/workflows/verify_storybook-noop.yml index 1f9ded9587..392a218a83 100644 --- a/.github/workflows/verify_storybook-noop.yml +++ b/.github/workflows/verify_storybook-noop.yml @@ -28,7 +28,7 @@ jobs: name: Storybook steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 9bea2f3dc9..1181273bb0 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -23,39 +23,42 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [18.x] + node-version: [20.x] name: Storybook steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 # Required to retrieve git history - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@3c138326f7fcbf253b88170c1f29bae8e975d47c # v0.6.14 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install run: yarn install --immutable working-directory: storybook + # Only for verification, the canon one is what we upload to Chromatic - run: yarn build-storybook - - uses: chromaui/action@b984808b772126a9f44b2b7737b131b68a2ede32 # v11 + - run: yarn --cwd packages/canon build-storybook + + - uses: chromaui/action@c93e0bc3a63aa176e14a75b61a31847cbfdd341c # v11 with: token: ${{ secrets.GITHUB_TOKEN }} # projectToken intentionally shared to allow collaborators to run Chromatic on forks # https://www.chromatic.com/docs/custom-ci-provider#run-chromatic-on-external-forks-of-open-source-projects - projectToken: 9tzak77m9nj - workingDir: storybook - storybookBuildDir: dist + projectToken: chpt_dab72dc0f97d55b + workingDir: packages/canon + storybookBuildDir: storybook-static diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index feb209dc2b..0ee95463d8 100644 --- a/.github/workflows/verify_windows.yml +++ b/.github/workflows/verify_windows.yml @@ -17,11 +17,11 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] env: CI: true - NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }} + NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot --experimental-vm-modules INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }} INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }} INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }} @@ -29,14 +29,14 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@5c7944e73c4c2a096b17a9cb74d65b6c2bbafbde # v2.9.1 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth @@ -46,7 +46,7 @@ jobs: run: yarn install --immutable - name: lint - run: yarn backstage-cli repo lint + run: yarn backstage-cli repo lint --successCache - name: type checking and declarations run: yarn tsc:full @@ -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/.gitignore b/.gitignore index 865918c1f7..25280b40b0 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,11 @@ bower_components # Documentation reference, generated by build:api-docs docs/reference +# OpenAPI auto-generated API documentation. +docs/**/*.api.mdx +docs/**/*.info.mdx +docs/**/sidebar.ts + # node-waf configuration .lock-wscript @@ -174,3 +179,8 @@ knip.json # Schemathesis temporary files .hypothesis/ .cassettes/ + +# Typedocs temporary files +type-docs +docs.json +tsconfig.typedoc.tmp.json \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 3a16bd1388..04ca7d780d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,11 +1,20 @@ .yarn dist microsite +canon-docs/.next +canon-docs/public +canon-docs/out +packages/canon/css coverage *.hbs templates +# old reports api-report.md api-report-*.md +# new reports +report.api.md +report-*.api.md + knip-report.md cli-report.md plugins/scaffolder-backend/sample-templates diff --git a/.yarn/patches/ast-types-npm-0.14.2-43c4ac4b0d.patch b/.yarn/patches/ast-types-npm-0.14.2-43c4ac4b0d.patch new file mode 100644 index 0000000000..add3e4c556 --- /dev/null +++ b/.yarn/patches/ast-types-npm-0.14.2-43c4ac4b0d.patch @@ -0,0 +1,15 @@ +diff --git a/main.d.ts b/main.d.ts +index 6b9a8d05d61821a7e7dc831a52a9f7b505bfee42..1010bb5352d975a171a4019768ff6f6f2967c301 100644 +--- a/main.d.ts ++++ b/main.d.ts +@@ -1,7 +1,7 @@ +-import { ASTNode, Type, AnyType, Field } from "./lib/types"; +-import { NodePath } from "./lib/node-path"; ++import { ASTNode, type Type, AnyType, Field } from "./lib/types"; ++import { type NodePath } from "./lib/node-path"; + import { namedTypes } from "./gen/namedTypes"; +-import { builders } from "./gen/builders"; ++import { type builders } from "./gen/builders"; + import { Visitor } from "./gen/visitor"; + declare const astNodesAreEquivalent: { + (a: any, b: any, problemPath?: any): boolean; diff --git a/ADOPTERS.md b/ADOPTERS.md index 76114b6965..3d6ef63267 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -274,3 +274,12 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [DPG Media](https://www.dpgmediagroup.com) | [@benjidotsh](https://github.com/benjidotsh), [@lvstb](https://github.com/lvstb), [@ssliman](https://github.com/ssliman), [@edewel-beep](https://github.com/edewel-beep) | Access to infrastructure, documentation and internal tooling | | [Baloise](https://www.baloise.ch) | [@dweber019](https://github.com/dweber019), [@mikevader](https://github.com/mikevader) | We are using Backstage as internal developer protal for use cases like software catalog, documentation, infrastructure. | | [Cigna](https://www.cigna.com/) / [Evernorth](https://www.evernorth.com/) | [@raphtalia](https://github.com/raphtalia), [Devon Paluso](mailto:Devon.Paluso@evernorth.com), [Bryan Rego](mailto:Bryan.Rego@evernorth.com), [Ian Skillings](mailto:Ian.Skillings@evernorth.com) | Internal developer portal providing TechDocs, software templates, centralized secret management, with information consolidation from ServiceNow, Okta, GitHub, GitLab, and WebEx. | +| [Infobip](https://www.infobip.com/) | [Antonio Ereiz](https://github.com/SonilPro) | Visual representation of all our entities registered within an existing internal catalog, along with a UI for editing their manifests. It serves as the go-to place for new internal tools that require a user interface and provides standardization of new components using Software Templates. +| [CloudScript](https://www.cloudscript.com.br/) | [Helias Rodrigues](https://github.com/xcloudscript) | We use it to centralize and organize the components of our internal development platform. In addition, it provides an integrated experience for developers by using all the core modules and some plugins. +| [Alauda](https://www.alauda.io/) | [Mario](https://github.com/mario-mui) | We use it to centralize and organize the components of our internal development platform. In addition, it provides environment templates for developers to create development testing or others environments +| [New10](https://www.new10.com/) | [Cleber Gasparoto](https://github.com/chgasparoto) | We use Backstage as our internal developer portal to catalog services across teams, implement custom Tech Insights for ensuring service standards adoption, and centralize API specifications to streamline development processes and cross-team collaboration. +| [Tele2 Kazakhstan](https://tele2.kz/) / [Altel Digital](https://digital.altel.kz/) | [Kuanysh Bekkulov](https://www.linkedin.com/in/kuanysh-bekkulov/), [Alexandr Puzeyev](https://www.linkedin.com/in/alexandr-puzeyev/) | Developer portal: services, components, APIs, and resources; includes documentation (Docs-as-Code), service templates, and plugins for integration with internal systems and tools. +| [Axelerant](https://www.axelerant.com/) | [Zeshan Ziya](https://github.com/zeshanziya) | Developer portal, main gateway to infrastructure, documentation, internal tooling, and service catalog with a focus on project visibility. +| [KnowBe4](https://www.knowbe4.com) | [Brandon Vicinus](https://www.linkedin.com/in/bvicinus/) | Internal Developer Portal managed by the Developer Experience Team. IDP hosts many different internal tools as plugins created by multiple teams, many of which are directly integrated with the Service Catalog. | +| [Scalepoint](https://scalepoint.com) | [Yuriy Ostapenko](https://github.com/yuriyostapenko), [Dmytro Pasko](https://github.com/dimapasko), [Yuri Sedykh ](https://github.com/yuiri-sedykh), [Bartosz Wisniewski](https://github.com/Epgor) | Internal Developer Portal: Software Catalog with infrastructure resources and dependencies, Software Templates, TechDocs, Tech Radar, Kubernetes and Observability, as well as custom CI/CD components | +| [VR](https://www.vr.com.br) | [Felipe Gomes](https://www.linkedin.com/in/felipe-gomes-da-silva), [Tiago Garcia](https://www.linkedin.com/in/tiago-garcia-6301a925) | Internal portal for development squads, service catalog, documentation hub, and application mapping for the entire company ecosystem, simplifying cloud infrastructure construction through templates. | diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c1a0283f09..58f894447b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -135,13 +135,14 @@ yarn build:backend # Build the backend package, depends on tsc yarn build:all # Build published versions of packages, depends on tsc yarn build:api-reports # Build API Reports used for documentation -yarn lint # lint packages that have changed since later commit on origin/master -yarn lint:all # lint all packages -yarn lint:docs # lint all the Markdown files -yarn lint:type-deps # verify that @types/* dependencies are placed correctly in packages +yarn lint # Lint packages that have changed since later commit on origin/master +yarn lint:all # Lint all packages +yarn lint:docs # Lint all the Markdown files +yarn lint:type-deps # Verify that @types/* dependencies are placed correctly in packages -yarn test # test packages that have changed since later commit on origin/master -yarn test:all # test all packages +yarn test # Test packages that have changed since later commit on origin/master +yarn test --no-watch # Test packages and include unchanged ones +yarn test:all # Test all packages yarn clean # Remove all output folders and @backstage/cli cache diff --git a/OWNERS.md b/OWNERS.md index b145205539..8190e31bfd 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -10,7 +10,6 @@ Team: @backstage/maintainers | Patrik Oldsberg | Spotify | [Rugvip](https://github.com/Rugvip) | `Rugvip#0019` | | Fredrik Adelöw | Spotify | [freben](https://github.com/freben) | `freben#3926` | | Ben Lambert | Spotify | [benjdlambert](https://github.com/benjdlambert) | `blam#2159` | -| Johan Haals | Spotify | [jhaals](https://github.com/jhaals) | `Johan#0679` | ## Project Areas @@ -27,11 +26,21 @@ Scope: The catalog plugin and catalog model | Ben Lambert | Spotify | Cubic Belugas | [benjdlambert](https://github.com/benjdlambert) | `blam#2159` | | Camila Loiola | Spotify | Cubic Belugas | [camilaibs](http://github.com/camilaibs) | `camilal#0226` | | Fredrik Adelöw | Spotify | Cubic Belugas | [freben](https://github.com/freben) | `freben#3926` | -| Johan Haals | Spotify | Cubic Belugas | [jhaals](https://github.com/jhaals) | `Johan#0679` | | Mihai Tabara | Spotify | Cubic Belugas | [MihaiTabara](http://github.com/MihaiTabara) | `mihait#3107` | | Patrik Oldsberg | Spotify | Cubic Belugas | [Rugvip](https://github.com/Rugvip) | `Rugvip#0019` | | Vincenzo Scamporlino | Spotify | Cubic Belugas | [vinzscam](http://github.com/vinzscam) | `vinzscam#6944` | +### Design System + +Team: @backstage/design-system-maintainers + +Scope: The Backstage design system, component library, as well as surrounding tooling such as Storybook. + +| Name | Organization | Team | GitHub | Discord | +| ------------------- | ------------ | ------------- | --------------------------------------------- | ------------- | +| Charles de Dreuille | Spotify | | [cdedreuille](https://github.com/cdedreuille) | `cdedreuille` | +| Patrik Oldsberg | Spotify | Cubic Belugas | [Rugvip](https://github.com/Rugvip) | `Rugvip` | + ### Home Team: @backstage/home-maintainers @@ -44,7 +53,6 @@ Scope: The Backstage home page and information architecture | Emma Indal | Spotify | Infinite Buck$ | [emmaindal](http://github.com/emmaindal) | emmaindal#7503 | | Djamaile Rahamat | Spotify | Infinite Buck$ | [djamaile](http://github.com/djamaile) | dyoqi | | Raghunandan Balachandran | Spotify | Infinite Buck$ | [soapraj](http://github.com/soapraj) | raghunandanb#1114 | -| Bailey Brooks | Spotify | Infinite Buck$ | [bailey](http://github.com/bailey) | \_bailey4 | ### Search @@ -52,11 +60,11 @@ Team: @backstage/search-maintainers Scope: The Backstage Search plugin -| Name | Organization | Team | GitHub | Discord | -| ------------------------ | ------------ | -------------- | --------------------------------------------- | ----------------- | -| Emma Indal | Spotify | Infinite Buck$ | [emmaindal](http://github.com/emmaindal) | emmaindal#7503 | -| Raghunandan Balachandran | Spotify | Infinite Buck$ | [soapraj](http://github.com/soapraj) | raghunandanb#1114 | -| Alex Lorenzi | Spotify | ProTean | [AlexLorenzi](https://github.com/AlexLorenzi) | alexlorenzi | +| Name | Organization | Team | GitHub | Discord | +| --------------- | ------------ | ------- | ------------------------------------------------- | ---------------- | +| Alex Lorenzi | Spotify | ProTean | [AlexLorenzi](https://github.com/AlexLorenzi) | alexlorenzi | +| John Philip | Spotify | ProTean | [johnphilip283](https://github.com/johnphilip283) | john_philip#2399 | +| Morgan Da Costa | Spotify | ProTean | [morgandc](https://github.com/morgandc) | - | ### Helm Charts @@ -91,7 +99,6 @@ Scope: The Permission Framework and plugins integrating with the permission fram | Ben Lambert | Spotify | Cubic Belugas | [benjdlambert](https://github.com/benjdlambert) | `blam#2159` | | Camila Loiola | Spotify | Cubic Belugas | [camilaibs](http://github.com/camilaibs) | `camilal#0226` | | Fredrik Adelöw | Spotify | Cubic Belugas | [freben](https://github.com/freben) | `freben#3926` | -| Johan Haals | Spotify | Cubic Belugas | [jhaals](https://github.com/jhaals) | `Johan#0679` | | Mihai Tabara | Spotify | Cubic Belugas | [MihaiTabara](http://github.com/MihaiTabara) | `mihait#3107` | | Patrik Oldsberg | Spotify | Cubic Belugas | [Rugvip](https://github.com/Rugvip) | `Rugvip#0019` | | Vincenzo Scamporlino | Spotify | Cubic Belugas | [vinzscam](http://github.com/vinzscam) | `vinzscam#6944` | @@ -102,17 +109,13 @@ Team: @backstage/techdocs-maintainers Scope: The TechDocs plugin and related tooling -| Name | Organization | Team | GitHub | Discord | -| ------------------------ | ------------ | ------- | ------------------------------------------------- | ------------------- | -| Alex Lorenzi | Spotify | ProTean | [AlexLorenzi](https://github.com/AlexLorenzi) | `alexlorenzi` | -| Bond Yan | Spotify | ProTean | [byan1197](https://github.com/byan1197) | `bondify` | -| Daniel Lochrie | Spotify | ProTean | [dlochrie](https://github.com/dlochrie) | - | -| Jackson Chen | Spotify | ProTean | [PeaWarrior](https://github.com/PeaWarrior) | `jacksonc#3322` | -| John Philip | Spotify | ProTean | [johnphilip283](https://github.com/johnphilip283) | `john_philip#2399` | -| Morgan Bentell | Spotify | ProTean | [agentbellnorm](http://github.com/agentbellnorm) | `morganbentell` | -| Raghunandan Balachandran | Spotify | BUX | [soapraj](http://github.com/soapraj) | `raghunandanb#1114` | -| Sydney Achinger | Spotify | ProTean | [squid-ney](https://github.com/squid-ney) | - | -| Vojta Burian | Spotify | ProTean | [sankaritan](https://github.com/sankaritan) | `vojtabu` | +| Name | Organization | Team | GitHub | Discord | +| --------------- | ------------ | ------- | ------------------------------------------------- | ------------------ | +| Alex Lorenzi | Spotify | ProTean | [AlexLorenzi](https://github.com/AlexLorenzi) | `alexlorenzi` | +| Bond Yan | Spotify | ProTean | [byan1197](https://github.com/byan1197) | `bondify` | +| Jackson Chen | Spotify | ProTean | [PeaWarrior](https://github.com/PeaWarrior) | `jacksonc#3322` | +| John Philip | Spotify | ProTean | [johnphilip283](https://github.com/johnphilip283) | `john_philip#2399` | +| Sydney Achinger | Spotify | ProTean | [squid-ney](https://github.com/squid-ney) | - | ## Incubating Project Areas @@ -128,7 +131,7 @@ Scope: Tooling and Community Repo Maintainers for the Backstage [Community Plugi | -------------------- | ------------ | ------------------------------------------- | ------------ | | André Wanlin | Spotify | [awanlin](https://github.com/awanlin) | `ahhhndre` | | Bethany Griggs | Red Hat | [BethGriggs](https://github.com/BethGriggs) | `bethgriggs` | -| Nick Boldt | Red Hat | [nickboldt](https://github.com/nickboldt) | `nboldt` | +| Kashish Mittal | Red Hat | [04kash](https://github.com/04kash) | `kashh._.` | | Vincenzo Scamporlino | Spotify | [vinzscam](https://github.com/vinzscam) | `vinzscam` | ### Events @@ -159,7 +162,7 @@ Scope: Tooling for frontend and backend schema-first OpenAPI development. | Name | Organization | GitHub | Discord | | -------------- | ------------ | ----------------------------------------------------- | ------------- | -| Aramis Sennyey | | [aramissennyeydd](https://github.com/aramissennyeydd) | `Aramis#7984` | +| Aramis Sennyey | DoorDash | [aramissennyeydd](https://github.com/aramissennyeydd) | `Aramis#7984` | ### Scaffolder @@ -171,6 +174,16 @@ Scope: The Scaffolder frontend and backend plugins, and related tooling. | ------------------- | ------------ | ------------------------------------- | ---------------- | | Bogdan Nechyporenko | Bol.com | [acierto](https://github.com/acierto) | `bogdan_haarlem` | +### Auditor + +Team: @backstage/auditor-maintainers + +Scope: The auditor core service, along with auditor usage in the main repository + +| Name | Organization | GitHub | Discord | +| ------------ | ------------ | ----------------------------------------------- | -------------- | +| Paul Schultz | Red Hat | [schultzp2020](https://github.com/schultzp2020) | `schultzp2020` | + ### Documentation Team: @backstage/documentation-maintainers @@ -180,16 +193,16 @@ Scope: The Backstage Documentation | Name | Organization | GitHub | Discord | | --------------- | ------------- | ----------------------------------------------------- | ------------- | | Andre Wanlin | Spotify | [awanlin](https://github.com/awanlin) | `ahhhndre` | -| Aramis Sennyey | | [aramissennyeydd](https://github.com/aramissennyeydd) | `Aramis#7984` | +| Aramis Sennyey | DoorDash | [aramissennyeydd](https://github.com/aramissennyeydd) | `Aramis#7984` | | Peter Macdonald | VodafoneZiggo | [Parsifal-M](https://github.com/Parsifal-M) | `parsifal` | ## Sponsors -| Name | Organization | GitHub | Email | -| ----------------- | ------------ | ------------------------------------------- | ------------------ | -| Niklas Gustavsson | Spotify | [protocol7](https://github.com/protocol7) | ngn@spotify.com | -| Dave Zolotusky | Spotify | [dzolotusky](https://github.com/dzolotusky) | dzolo@spotify.com | -| Helen Greul | Spotify | [helengreul](https://github.com/helengreul) | heleng@spotify.com | +| Name | Organization | GitHub | Email | +| ----------------- | ------------ | ------------------------------------------- | ------------------- | +| Niklas Gustavsson | Spotify | [protocol7](https://github.com/protocol7) | | +| Dave Zolotusky | Spotify | [dzolotusky](https://github.com/dzolotusky) | | +| Pia Nilsson | Spotify | [pianilsson](https://github.com/pianilsson) | | ## Organization Members @@ -199,15 +212,18 @@ Scope: The Backstage Documentation | Alex Crome | | [afscrome](https://github.com/afscrome) | `afscrome` | | Andre Wanlin | Spotify | [awanlin](https://github.com/awanlin) | `ahhhndre` | | Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | -| Aramis Sennyey | | [aramissennyeydd](https://github.com/aramissennyeydd) | `Aramis#7984` | +| Aramis Sennyey | DoorDash | [aramissennyeydd](https://github.com/aramissennyeydd) | `Aramis#7984` | | Brian Fletcher | Roadie.io | [punkle](https://github.com/punkle) | `Brian Fletcher#7051` | | Carlos Esteban Lopez Jaramillo | VMWare | [luchillo17](https://github.com/luchillo17) | `luchillo17#8777` | | David Tuite | Roadie.io | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | | Deepankumar Loganathan | | [deepan10](https://github.com/deepan10) | `deepan10` | +| Heikki Hellgren | OP Financial Group | [drodil](https://github.com/drodil) | `deathammer` | | Himanshu Mishra | Harness.io | [OrkoHunter](https://github.com/OrkoHunter) | `OrkoHunter#1520` | | Irma Solakovic | Roadie.io | [Irma12](https://github.com/Irma12) | `Irma#7629` | | Jorge Lainfiesta | Roadie.io | [jorgelainfiesta](https://github.com/jorgelainfiesta) | `jorgel#8733` | | Jussi Hallila | Roadie.io | [Xantier](https://github.com/Xantier) | `Xantier#0086` | +| Kashish Mittal | Red Hat | [04kash](https://github.com/04kash) | `kashh._.` | +| Kurt King | Procore | [kurtaking](https://github.com/kurtaking) | `mrking2you` | | Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` | | Miklós Kiss | Roadie.io | [kissmikijr](https://github.com/kissmikijr) | `Miklos#7416` | | Patrick Jungermann | Bonial International GmbH | [pjungermann](https://github.com/pjungermann) | `pjungermann#6933` | @@ -221,12 +237,14 @@ Scope: The Backstage Documentation | Maintainer | Organization | GitHub | Discord | | ------------ | ------------ | --------------------------------------------- | -------------- | | Stefan Ålund | Spotify | [stefanalund](https://github.com/stefanalund) | `stalund#9602` | +| Johan Haals | Spotify | [jhaals](https://github.com/jhaals) | `Johan#0679` | ## Emeritus End User Sponsors -| Name | Organization | GitHub | Discord | -| --------- | ------------ | ------------------------------------------- | -------------- | -| Lee Mills | Spotify | [leemills83](https://github.com/leemills83) | `.binarypoint` | +| Name | Organization | GitHub | Discord | +| ----------- | ------------ | ------------------------------------------- | -------------- | +| Lee Mills | Spotify | [leemills83](https://github.com/leemills83) | `.binarypoint` | +| Helen Greul | Spotify | [helengreul](https://github.com/helengreul) | `helen_greul` | ## Emeritus Project Area Maintainers diff --git a/README-fr_FR.md b/README-fr_FR.md index e0cffaa5c5..a54e9c8c49 100644 --- a/README-fr_FR.md +++ b/README-fr_FR.md @@ -66,7 +66,7 @@ Si vous voulez contribuer et vous impliquer dans notre communauté, voici les re ## Licence -Copyright 2020-2024 © Les auteurs de Backstage. Tous droits réservés. La Linux Foundation détient des marques déposées et utilise des marques commerciales. Pour une liste des marques de commerce de la Linux Foundation, veuillez consulter notre page d'utilisation des marques: https://www.linuxfoundation.org/trademark-usage +Copyright 2020-2025 © Les auteurs de Backstage. Tous droits réservés. La Linux Foundation détient des marques déposées et utilise des marques commerciales. Pour une liste des marques de commerce de la Linux Foundation, veuillez consulter notre page d'utilisation des marques: https://www.linuxfoundation.org/trademark-usage Sous licence Apache, version 2.0: http://www.apache.org/licenses/LICENSE-2.0 diff --git a/README-ko_kr.md b/README-ko_kr.md index b2bba41567..e43aa60c43 100644 --- a/README-ko_kr.md +++ b/README-ko_kr.md @@ -65,7 +65,7 @@ Backstage의 문서는 다음을 포함합니다: ## License -Copyright 2020-2024 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage +Copyright 2020-2025 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 diff --git a/README-zh_Hans.md b/README-zh_Hans.md index 129c7e7aa4..4661564725 100644 --- a/README-zh_Hans.md +++ b/README-zh_Hans.md @@ -65,7 +65,7 @@ Backstage 的文档包括: ## 许可 -版权所有 2020-2024 © Backstage 作者。版权所有。Linux 基金会已注册商标并使用商标。有关 Linux 基金会的商标列表,请参阅我们的商标使用页面:https://www.linuxfoundation.org/trademark-usage +版权所有 2020-2025 © Backstage 作者。版权所有。Linux 基金会已注册商标并使用商标。有关 Linux 基金会的商标列表,请参阅我们的商标使用页面:https://www.linuxfoundation.org/trademark-usage 采用 Apache v2.0 许可:http://www.apache.org/licenses/LICENSE-2.0 diff --git a/README.md b/README.md index 4cba1082b0..e3e9bd77dd 100644 --- a/README.md +++ b/README.md @@ -63,9 +63,13 @@ To engage with our community, you can use the following resources: - [Backstage Community Sessions](https://github.com/backstage/community) - Join monthly meetups and explore Backstage community - Give us a star ⭐️ - If you are using Backstage or think it is an interesting project, we would love a star ❤️ +## Governance + +See the [GOVERNANCE.md](https://github.com/backstage/community/blob/main/GOVERNANCE.md) document in the [backstage/community](https://github.com/backstage/community) repository. + ## License -Copyright 2020-2024 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage +Copyright 2020-2025 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 diff --git a/REVIEWING.md b/REVIEWING.md index c443c15d77..66af880f43 100644 --- a/REVIEWING.md +++ b/REVIEWING.md @@ -68,7 +68,7 @@ In general our changeset feedback bot will take care of informing whether a chan Changes that do NOT need a new changeset: -- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `api-report.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc. +- Changes to any test, storybook, or other local development files, for example, `MyComponent.test.tsx`, `MyComponent.stories.tsx`, `**mocks**/MyMock.ts`, `.eslintrc.js`, `setupTests.ts`, or `report.api.md`. Explained differently, it is only files that affect the published package that need changesets, such as source files and additional resources like `package.json`, `README.md`, `config.d.ts`, etc. - When tweaking a change that has not yet been released, you can rely on and potentially modify the existing changeset instead. - Changes that do not belong to a published packages, either because it's not a package at all, such as `docs/`, or because the package is private, such as `packages/app`. - Changes that do not end up having an effect on the published package, such as whitespace fixes or code formatting changes. Although it's also fine to have a short changeset for these kind of changes too. @@ -168,7 +168,7 @@ In this section we will be talking about changed "types", but by that we mean an #### API Reports -We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `api-report.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request. +We generate API Reports using the [API Extractor](https://api-extractor.com/) tool. These reports are generated for most packages in the Backstage repository, and are stored in the `report.api.md` file of each package. For CLI package we use custom tooling, and instead store the result in `cli-report.md`. Whenever the public API of a package changes, the API Report needs to be updated to reflect the new state of the API. Our CI checks will fail if the API reports are not up to date in a pull request. Each API report contains a list of all the exported types of each package. As long as the API report does not have any warnings it will contain the full publicly facing API of the package, meaning you do not need to consider any other changes to the package from the point of view of TypeScript API stability. diff --git a/app-config.yaml b/app-config.yaml index cb70170541..89e417fad3 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -221,6 +221,17 @@ integrations: # apiBaseUrl: server.bitbucket.com # username: ${BITBUCKET_SERVER_USERNAME} # appPassword: ${BITBUCKET_SERVER_APP_PASSWORD} + + # azureBlobStorage: + # - accountName: ${ACCOUNT_NAME} # required + # endpoint: ${CUSTOM_ENDPOINT} # custom endpoint will require either aadCredentials or sasToken + # sasToken: ${SAS_TOKEN} + # aadCredential: + # clientId: ${CLIENT_ID} + # tenantId: ${TENANT_ID} + # clientSecret: ${CLIENT_SECRET} + # accountKey: ${ACCOUNT_KEY} + azure: - host: dev.azure.com token: ${AZURE_TOKEN} @@ -233,6 +244,7 @@ integrations: secretAccessKey: ${AWS_SECRET_ACCESS_KEY} catalog: + useUrlReadersSearch: true import: entityFilename: catalog-info.yaml pullRequestBranchName: backstage-integration @@ -245,6 +257,14 @@ catalog: - Domain - Location providers: + azureBlob: + accountName: ${ACCOUNT_NAME} + containerName: ${CONTAINER_NAME} + schedule: # same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } backstageOpenapi: plugins: - catalog diff --git a/beps/0001-notifications-system/README.md b/beps/0001-notifications-system/README.md index 541e75e555..91c1a81fe1 100644 --- a/beps/0001-notifications-system/README.md +++ b/beps/0001-notifications-system/README.md @@ -74,7 +74,7 @@ The `signal` plugin provides the following: ### Signals Plugin -In the backend the signal plugin implements a general purpose message bus for sending signals from backend plugins to connected users. It relies on the `EventBroker` from the [events plugin](https://github.com/backstage/backstage/blob/master/plugins/events-backend/README.md) for the actual message passing in the backend. In order to support scaled deployments, each signal backend instance has a separate subscription to the event broker so that each instance receives all events. It is then up to each backend instance to filter out events that are not relevant to it. For this reason, signals should be kept lightweight and not contain unnecessary data. +In the backend the signal plugin implements a general purpose message bus for sending signals from backend plugins to connected users. It relies on the `EventsService` from the [events plugin](https://github.com/backstage/backstage/blob/master/plugins/events-node/README.md) for the actual message passing in the backend. In order to support scaled deployments, each signal backend instance has a separate subscription to the events service so that each instance receives all events. It is then up to each backend instance to filter out events that are not relevant to it. For this reason, signals should be kept lightweight and not contain unnecessary data. In the frontend the signal plugin has a persistent connection to the signal backend. This is initially implemented as a WebSocket connection, but could in the future also receive fallback mechanisms such as Server Sent Events or long polling. It is important that this connection is authenticated as we will be routing signals to specific users. The exact implementation of the authentication is not part of this proposal, but it should use whatever the outcome of the discussion in issue [#19581](https://github.com/backstage/backstage/issues/19581) is. @@ -427,22 +427,22 @@ The notification and signal plugins are released as two new plugins in the Backs For the notification plugin to reach a stable release we much reach the following: -- A stable notifications payload format. -- A stable notifications recipient filter format. -- The event broker must have at least one implementation that supports scaled deployments. +- [ ] A stable notifications payload format. +- [ ] A stable notifications recipient filter format. +- [x] The events service must have at least one implementation that supports scaled deployments. Done in #24916. For the signal plugin to reach a stable release we much reach the following: -- A stable signal recipient filter format. -- A stable signal channel API in the frontend. +- [ ] A stable signal recipient filter format. +- [ ] A stable signal channel API in the frontend. If any changes are required to the frontend framework to facilitate the implementation of notifications or signals, these will be released as experimental alpha features. They will stay in alpha until they are deemed stable enough, which must happen before a stable release of the notifications system. ## Dependencies -Since the signal plugin relies on the event broker for communication, it is a dependency for the notifications system as a whole. The event broker does not currently implement any transport for scaled deployments, which is a requirement for scaled deployments of the notification system. +~Since the signal plugin relies on the events service for communication, it is a dependency for the notifications system as a whole. The events service does not currently implement any transport for scaled deployments, which is a requirement for scaled deployments of the notification system. -Alternatively the notifications can work without the signals, but in this case the notifications are updated only during page refresh. +Alternatively the notifications can work without the signals, but in this case the notifications are updated only during page refresh.~ ## Alternatives diff --git a/beps/0001-notifications-system/notifications-architecture.drawio.svg b/beps/0001-notifications-system/notifications-architecture.drawio.svg index 9f8194b499..9c6bb00119 100644 --- a/beps/0001-notifications-system/notifications-architecture.drawio.svg +++ b/beps/0001-notifications-system/notifications-architecture.drawio.svg @@ -1,4 +1,4 @@ - + @@ -133,13 +133,13 @@
- Event Broker + EventsService
- Event Broker + EventsService diff --git a/beps/0002-dynamic-frontend-plugins/README.md b/beps/0002-dynamic-frontend-plugins/README.md index db223c959d..1007732eec 100644 --- a/beps/0002-dynamic-frontend-plugins/README.md +++ b/beps/0002-dynamic-frontend-plugins/README.md @@ -595,7 +595,7 @@ Singleton "might have to" list: > NOTE: Can leverage [Generate module sharing map](#generate-module-sharing-map). -Component libraries are usually large (thousands of svg icons in @mui/icons) and it is inefficient to share them as a whole. **Tree shaking is disabled for shared modules**. That means sharing large packages in multiple versions will result in a bloated JS in browsers. +Component libraries are usually large (thousands of SVG icons in `@mui/icons`) and it is inefficient to share them as a whole. **Tree shaking is disabled for shared modules**. That means sharing large packages in multiple versions will result in a bloated JS in browsers. Sharing components like these can be done on module level. Instead of sharing the entire package, share its individual components: @@ -625,7 +625,7 @@ There is also a conflict with the chunk splitting currently used in the Backstag #### Webpack chunk optimization -Custom webpack chunk splitting configuration can be problematic, especially when modifying runtime and vendor chunks. Module federation creates its own chunks. Shared modules that are not set up to be eagerly loaded (using the `eager` configuration) **cannot be included inside the entry script**. With a custom chunk splitting setup, they can potentially be forced into the entry script, causing runtime errors. On the other hand, some critical runtime code that has to be in the entry script, cna be forced out of it. This is particularly problematic for the "shell" application. +Custom webpack chunk splitting configuration can be problematic, especially when modifying runtime and vendor chunks. Module federation creates its own chunks. Shared modules that are not set up to be eagerly loaded (using the `eager` configuration) **cannot be included inside the entry script**. With a custom chunk splitting setup, they can potentially be forced into the entry script, causing runtime errors. On the other hand, some critical runtime code that has to be in the entry script, can be forced out of it. This is particularly problematic for the "shell" application. Chunk optimization should be disabled for the initial implementation. diff --git a/beps/0004-scaffolder-task-idempotency/README.md b/beps/0004-scaffolder-task-idempotency/README.md index 208446158e..e23cc519d1 100644 --- a/beps/0004-scaffolder-task-idempotency/README.md +++ b/beps/0004-scaffolder-task-idempotency/README.md @@ -154,30 +154,36 @@ export function createGithubRepoCreateAction(options: { username: owner, }); - await ctx.checkpoint('repo.creation', async () => { - const repoCreationPromise = - user.data.type === 'Organization' - ? client.rest.repos.createInOrg({ - name: repo, - org: owner, - }) - : client.rest.repos.createForAuthenticatedUser({ - name: repo, - }); - const { repoUrl } = await repoCreationPromise; - return { repoUrl }; + await ctx.checkpoint({ + key: 'repo.creation.v1', + fn: async () => { + const repoCreationPromise = + user.data.type === 'Organization' + ? client.rest.repos.createInOrg({ + name: repo, + org: owner, + }) + : client.rest.repos.createForAuthenticatedUser({ + name: repo, + }); + const { repoUrl } = await repoCreationPromise; + return { repoUrl }; + }, }); if (secrets) { - await ctx.checkpoint('repo.create.variables', async () => { - for (const [key, value] of Object.entries(repoVariables ?? {})) { - await client.rest.actions.createRepoVariable({ - owner, - repo, - name: key, - value: value, - }); - } + await ctx.checkpoint({ + key: 'repo.create.variables', + fn: async () => { + for (const [key, value] of Object.entries(repoVariables ?? {})) { + await client.rest.actions.createRepoVariable({ + owner, + repo, + name: key, + value: value, + }); + } + }, }); } @@ -202,9 +208,12 @@ Checkpoints will allow action authors to create actions where code paths are ign This will be provided on a context object and action of author provide a key and a callback. ```typescript -await ctx.checkpoint('repo.creation', async () => { - const { repoUrl } = await client.rest.Repository.create({}); - return { repoUrl }; +await ctx.checkpoint({ + key: 'repo.creation', + fn: async () => { + const { repoUrl } = await client.rest.Repository.create({}); + return { repoUrl }; + }, }); ``` diff --git a/beps/NNNN-template/README.md b/beps/NNNN-template/README.md index 3ecb1ffb4e..2fce6ecd95 100644 --- a/beps/NNNN-template/README.md +++ b/beps/NNNN-template/README.md @@ -1,6 +1,6 @@ --- title: BEP Title -status: provisional +status: implementable authors: - '@ghost' owners: @@ -13,16 +13,10 @@ creation-date: yyyy-mm-dd # BEP: - - -[**Discussion Issue**](https://github.com/backstage/backstage/issues/NNNNN) - - [Summary](#summary) - [Motivation](#motivation) - [Goals](#goals) diff --git a/beps/README.md b/beps/README.md index 531bd15f50..84bf967b5c 100644 --- a/beps/README.md +++ b/beps/README.md @@ -4,19 +4,18 @@ A Backstage Enhancement Proposal (BEP) is a way to propose, communicate and coor ## Quick start for the BEP process -1. Discuss the idea with the community and maintainers. Either here on GitHub, Discord, or during community sessions or SIG meetings. - Make sure that others think the work is worth taking up and will help review the BEP and any code changes required. +1. Discuss the idea with the community and maintainers. Either here on GitHub, Discord, or during community sessions or SIG meetings. Make sure that others think the work is worth taking up and will help review the BEP and any code changes required. 1. Make a copy of the [BEP template](./NNNN-template/) directory as `beps/NNNN-short-descriptive-title`, where `NNNN` is the next available number padded with leading zeroes. 1. Fill out as much of the YAML metadata as you can. 1. Fill out the template as best you can. 1. If you want the BEP to be owned by a particular project area, add an entry for the BEP folder to [CODEOWNERS](../.github/CODEOWNERS). -1. Create a PR for the BEP. Title it "BEP: <title>". Aim to get the high level goals clarified and avoid getting hung up on specific details. The PR can be merged early and iterated on. -1. Once the BEP is ready to be merged, create a [feature issue](https://github.com/backstage/backstage/issues/new?template=feature.yaml) titled "BEP: <title>". Use the summary of the BEP as description and link to the BEP PR in the context section. Once the PR is merged, the issue should be updated to link to the BEP folder instead. This issue will serve as a general discussion issue for the BEP. -1. Once the initial BEP is merged you should keep iterating on it until it is ready to leave that `provisional` state. Leaving the `provisional` state is a decision made by the project area maintainers. +1. Create a PR for the BEP. Title it "BEP: <title>". Aim to get the high level goals clarified and avoid getting hung up on specific details. The PR can be iterated on until the BEP is ready to be merged. +1. The relevant maintainers will review the BEP and provide feedback. It can also be useful to join relevant SIG meetings to discuss the BEP, to help drive it forward faster. +1. Let the maintainers know when you think the BEP is ready to be merged. At this point the BEP should be fully filled out and ready for implementation, along with a clear owner for the work. -Just because a BEP is merged does not mean it is complete or approved for implementation. Any BEP marked as `provisional` is a working document and subject to change. +The merging of a BEP means that it is approved for implementation and has an owner that is responsible for said implementation. Up until that point, the author(s) of the BEP are responsible for driving the BEP forward. -The authors of the BEP are also responsible for driving the BEP forward all the way to implementation. The approval of a BEP is not a commitment to implement it. +While the BEP PR is open the owner can open separate PRs to ship experimental features in support of the BEP to help drive the design forward, and these may be merged pending usual PR review. If the BEP is withdrawn or rejected these features should generally be removed. ## FAQs @@ -38,7 +37,7 @@ No, except for plugins that implement core features of Backstage. The BEP proces ### Can I update an existing BEP? -Yes! As long as the BEP is still in the `provisional` state you should keep iterating on it. Please keep each PR focused on a single topic and avoid long-running and overly broad PRs. +Yes! As long as the BEP is in the `implementable` state. Updates should however only be done based on new discoveries during the implementation phase. If you want to make a significant change to a BEP that has already been approved, you should open a new BEP to replace the old one. ### Can I update a BEP that was submitted by someone else? @@ -48,6 +47,10 @@ Yes! BEPs are living documents and anyone can suggest changes to them. We encour Architecture Decision Records (ADRs) are used to document decisions made for development within the Backstage project. They are not intended to be used for proposing new features or changes to Backstage. +### What's does it mean for a BEP to be in "provisional" state? + +This is a state from an older version of the BEP process, and means that it has been approved as work to be done but the exact design is not yet agreed upon. BEPs in this state need to be moved to the `implementable` state before they can be implemented. + ### My FAQ isn't answered here! The BEP process is still evolving! @@ -72,13 +75,10 @@ At the start of each BEP is a YAML document that contains metadata about the BEP The BEP Status is critical to clearly communicate the status of each BEP. Each BEP must have its status field set to one of the following values: -- `provisional`: The BEP has been proposed and is actively being defined. The BEP as been approved by the owning project area maintainers as work to be done. -- `implementable`: The approvers have approved this BEP for implementation. -- `implemented`: The BEP has been implemented and is no longer actively changed. -- `deferred`: The BEP is proposed but not actively being worked on. -- `rejected`: The approvers and authors have decided that this BEP is not moving forward. - The BEP is kept around as a historical document. -- `withdrawn`: The authors have withdrawn the BEP. +- `implementable`: The BEP has been approved for implementation by the owning project area maintainers. +- `implemented`: The BEP has been implemented. +- `deferred`: The BEP was approved but is no longer being actively worked on. If anyone wishes to pick up the work they can move it back to the `implementable` state. +- `rejected`: The approvers and authors have decided that this BEP is not moving forward. The BEP is kept around as a historical document. - `replaced`: The BEP has been replaced by a new BEP. ### Prior Art diff --git a/canon-docs/.eslintrc.json b/canon-docs/.eslintrc.json new file mode 100644 index 0000000000..be99640f75 --- /dev/null +++ b/canon-docs/.eslintrc.json @@ -0,0 +1,8 @@ +{ + "extends": ["next/core-web-vitals", "next/typescript"], + "rules": { + "notice/notice": "off", + "react/forbid-elements": "off", + "jsx-a11y/alt-text": "off" + } +} diff --git a/canon-docs/.gitignore b/canon-docs/.gitignore new file mode 100644 index 0000000000..41244c667c --- /dev/null +++ b/canon-docs/.gitignore @@ -0,0 +1,9 @@ +# next.js +/.next/ +/dist/ +next-env.d.ts + +# css +/public/core.css +/public/components.css +/public/backstage.css diff --git a/canon-docs/README.md b/canon-docs/README.md new file mode 100644 index 0000000000..d91076c4cd --- /dev/null +++ b/canon-docs/README.md @@ -0,0 +1,15 @@ +# Canon Docs + +Canon is our internal UI library built for Backstage. We built this website to document the library and its components. You can view this website [here](https://canon.backstage.io). + +## How to run locally + +This website is built with Next.js and it is hosted on Github pages. To run it locally, you can run the following command: + +```bash +yarn start +``` + +## Deployment + +Deployments are done automatically when a PR is merged into the `master` branch. We host the website using Github pages. diff --git a/canon-docs/next.config.mjs b/canon-docs/next.config.mjs new file mode 100644 index 0000000000..ca221d9a8c --- /dev/null +++ b/canon-docs/next.config.mjs @@ -0,0 +1,15 @@ +import createMDX from '@next/mdx'; + +const nextConfig = { + pageExtensions: ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx'], + output: 'export', + assetPrefix: '/', + distDir: 'dist', + images: { + unoptimized: true, + }, +}; + +const withMDX = createMDX({}); + +export default withMDX(nextConfig); diff --git a/canon-docs/package.json b/canon-docs/package.json new file mode 100644 index 0000000000..8558fac8e3 --- /dev/null +++ b/canon-docs/package.json @@ -0,0 +1,38 @@ +{ + "name": "canon-docs", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "npm run build:css && next build", + "build:css": "node scripts/build-css.js", + "lint": "next lint", + "start": "npm run build:css && next dev" + }, + "dependencies": { + "@codemirror/lang-sass": "^6.0.2", + "@lezer/highlight": "^1.2.1", + "@mdx-js/loader": "^3.1.0", + "@mdx-js/react": "^3.1.0", + "@next/mdx": "^15.1.4", + "@storybook/react": "^8.4.7", + "@uiw/codemirror-themes": "^4.23.7", + "@uiw/react-codemirror": "^4.23.7", + "motion": "^12.4.1", + "next": "14.2.23", + "react": "^18.0.2", + "react-dom": "^18.0.2", + "react-frame-component": "^5.2.7", + "shiki": "^1.26.1", + "storybook": "^8.4.7" + }, + "devDependencies": { + "@types/mdx": "^2.0.13", + "@types/node": "^20", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", + "eslint": "^8", + "eslint-config-next": "14.2.23", + "lightningcss": "^1.28.2", + "typescript": "^5" + } +} diff --git a/canon-docs/public/.nojekyll b/canon-docs/public/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/canon-docs/public/CNAME b/canon-docs/public/CNAME new file mode 100644 index 0000000000..01f6d196cc --- /dev/null +++ b/canon-docs/public/CNAME @@ -0,0 +1 @@ +canon.backstage.io \ No newline at end of file diff --git a/canon-docs/public/header.png b/canon-docs/public/header.png new file mode 100644 index 0000000000..507bd05ca7 Binary files /dev/null and b/canon-docs/public/header.png differ diff --git a/canon-docs/scripts/build-css.js b/canon-docs/scripts/build-css.js new file mode 100644 index 0000000000..dd9775150f --- /dev/null +++ b/canon-docs/scripts/build-css.js @@ -0,0 +1,39 @@ +const fs = require('fs'); +const path = require('path'); +const { bundle } = require('lightningcss'); + +const source = '../../packages/canon/src/css'; +const destination = '../public'; + +const source1 = path.join(__dirname, `${source}/core.css`); +const destination1 = path.join(__dirname, `${destination}/core.css`); +const source2 = path.join(__dirname, `${source}/components.css`); +const destination2 = path.join(__dirname, `${destination}/components.css`); + +// Function to bundle and copy the CSS file +const bundleAndCopyFile = async (source, destination) => { + try { + const result = await bundle({ + filename: source, + minify: true, + }); + + fs.writeFileSync(destination, result.code); + console.log('File bundled and copied successfully!'); + } catch (err) { + console.error('Error bundling file:', err); + } +}; + +// Initial bundle and copy +Promise.all([ + bundleAndCopyFile(source1, destination1), + bundleAndCopyFile(source2, destination2), +]) + .then(() => { + // Add an empty line after all operations are complete - It looks better in the terminal :) + console.log(''); + }) + .catch(err => { + console.error('Error in processing files:', err); + }); diff --git a/canon-docs/src/app/(docs)/about/page.mdx b/canon-docs/src/app/(docs)/about/page.mdx new file mode 100644 index 0000000000..a4c16ee79e --- /dev/null +++ b/canon-docs/src/app/(docs)/about/page.mdx @@ -0,0 +1,32 @@ +# About Canon + +Canon is a design system created specifically for Backstage, built with React, TypeScript, and vanilla CSS. +This open-source library is hosted in the Backstage monorepo. While it can be used in other projects, Canon +is designed to deliver a consistent, accessible, and extensible experience tailored to Backstage users. + +## Philosophy + +Backstage empowers product teams to build software faster and with greater quality. Its extensibility, +however, required us to rethink how to deliver a consistent and accessible user experience. Our goal is +to enable plugin creators to design plugins that seamlessly integrate with Backstage's look and feel while +still allowing customization to match individual brands. + +Instead of reinventing the wheel, we chose to focus on layout and styling while leveraging existing headless +component libraries for functionality. This approach allows us to dedicate our efforts to creating a cohesive +and flexible theming system. + +## Team + +Canon is designed and maintained primarily by Spotify's Backstage team, leveraging Spotify's expertise in +crafting high-quality design and technology. Drawing from our experience in building reliable and intuitive +user experiences for the music industry, we've created a design system that looks great and works seamlessly. + +## Community + +Canon is an open-source project and we welcome contributions from the community. If you are interested in +contributing to Canon, please read our [contributing guide](https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md) +and our [code of conduct](https://github.com/backstage/backstage/blob/master/CODE_OF_CONDUCT.md). + +## License + +Canon is licensed under the Apache 2.0 license. See the [LICENSE](https://github.com/backstage/backstage/blob/master/LICENSE) file for more details. diff --git a/canon-docs/src/app/(docs)/components/box/page.mdx b/canon-docs/src/app/(docs)/components/box/page.mdx new file mode 100644 index 0000000000..2e1d00a274 --- /dev/null +++ b/canon-docs/src/app/(docs)/components/box/page.mdx @@ -0,0 +1,112 @@ +import { CodeBlock } from '@/components/CodeBlock'; +import { PropsTable } from '@/components/PropsTable'; +import { spacePropsList } from '@/utils/spaceProps'; +import { Tabs } from '@/components/Tabs'; +import { Snippet } from '@/components/Snippet'; +import { BoxPreview } from '@/snippets/box'; + +# Box + +Box is the lowest-level component in Canon. It provides a consistent API for styling and layout. + +} + code={` + +`} + align="center" +/> + + + + Usage + + + `} /> + + + +## API reference + +### Box + +This is the Box component, our lowest-level component. Here are all the +available properties. + + + +Padding and margin are used to create space around your component using our +predefined spacing tokens. We would recommend to use padding over margin to +avoid collapsing margins but both are available. + + + +## Examples + +### Simple example + +A simple example of how to use the Box component. + +Hello World`} /> + +### Responsive + +Here's a view when buttons are responsive. + + + Hello World + `} +/> diff --git a/canon-docs/src/app/(docs)/components/button/page.mdx b/canon-docs/src/app/(docs)/components/button/page.mdx new file mode 100644 index 0000000000..c92b5b9921 --- /dev/null +++ b/canon-docs/src/app/(docs)/components/button/page.mdx @@ -0,0 +1,147 @@ +import { PropsTable } from '@/components/PropsTable'; +import { Snippet } from '@/components/Snippet'; +import { Tabs } from '@/components/Tabs'; +import { CodeBlock } from '@/components/CodeBlock'; +import { + ButtonPreview, + ButtonSizes, + ButtonWithIcons, + ButtonFullWidth, + ButtonDisabled, + ButtonResponsive, +} from '@/snippets/button'; +import { buttonVariants } from '@/snippets/_snippets'; +import { buttonPropDefs } from '../../../../../../packages/canon/src/components/Button/Button.props'; + +# Button + +A button component that can be used to trigger actions. + +} + code={` + + + +`} +/> + + + + Usage + Theming + + + +`} + /> + + + We recommend starting with our [global tokens](/theme/theming) to customize the library and align it with + your brand. For additional flexibility, you can use the provided class names for each element listed below. + `} + /> + + + + +## API reference + + + +## Examples + +### Variants + +Here's a view when buttons have different variants. + +} + code={buttonVariants} +/> + +### Sizes + +Here's a view when buttons have different sizes. + +} + code={` + + +`} +/> + +### With Icons + +Here's a view when buttons have icons. + +} + code={` + + + +`} +/> + +### Full width + +Here's a view when buttons are full width. + +} + code={` + +`} +/> + +### Disabled + +Here's a view when buttons are disabled. + +} + code={``} +/> + +### Responsive + +Here's a view when buttons are responsive. + +} + code={``} +/> diff --git a/canon-docs/src/app/(docs)/components/checkbox/page.mdx b/canon-docs/src/app/(docs)/components/checkbox/page.mdx new file mode 100644 index 0000000000..26a5d0f955 --- /dev/null +++ b/canon-docs/src/app/(docs)/components/checkbox/page.mdx @@ -0,0 +1,107 @@ +import { PropsTable } from '@/components/PropsTable'; +import { CheckboxPreview, CheckboxAllVariants } from '@/snippets/checkbox'; +import { Snippet } from '@/components/Snippet'; +import { Tabs } from '@/components/Tabs'; +import { CodeBlock } from '@/components/CodeBlock'; +import { BaseUI } from '@/components/HeadlessBanners/BaseUI'; + +# Checkbox + +A checkbox component that can be used to trigger actions. + +} + code={``} +/> + + + + Usage + Theming + + + +`} + /> + + + We recommend starting with our [global tokens](/theme/theming) to customize the library and align it with + your brand. For additional flexibility, you can use the provided class names for each element listed below. + `} + /> + + + + +## API reference + + + + void", + responsive: false, + }, + disabled: { + type: 'boolean', + responsive: false, + }, + required: { + type: 'boolean', + responsive: false, + }, + name: { + type: 'string', + responsive: false, + }, + value: { + type: 'string', + responsive: false, + }, + className: { + type: 'string', + responsive: false, + }, + style: { + type: 'CSSProperties', + responsive: false, + }, + }} +/> + +## Examples + +### All variants + +Here's a view when checkboxes have different variants. + +} + code={` + + + + + `} +/> diff --git a/canon-docs/src/app/(docs)/components/container/page.mdx b/canon-docs/src/app/(docs)/components/container/page.mdx new file mode 100644 index 0000000000..ace3bdcaeb --- /dev/null +++ b/canon-docs/src/app/(docs)/components/container/page.mdx @@ -0,0 +1,101 @@ +import { CodeBlock } from '@/components/CodeBlock'; +import { PropsTable } from '@/components/PropsTable'; +import { spacePropsList } from '@/utils/spaceProps'; +import { Tabs } from '@/components/Tabs'; +import { Snippet } from '@/components/Snippet'; +import { ContainerPreview } from '@/snippets/container'; + +# Container + +The container component let you use our default max-width and center the +content on the page. + +} + code={` + +`} +/> + + + + Usage + + + Hello World! +`} /> + + + +## API reference + + + +## Examples + +### Simple + +A simple example of how to use the Container component. + + + Hello World + Hello World + Hello World +`} +/> + +### Responsive padding & margin + +The Container component also supports responsive values, making it easy to +create responsive designs. + + + Hello World + Hello World + Hello World +`} +/> diff --git a/canon-docs/src/app/(docs)/components/field/page.mdx b/canon-docs/src/app/(docs)/components/field/page.mdx new file mode 100644 index 0000000000..83029be506 --- /dev/null +++ b/canon-docs/src/app/(docs)/components/field/page.mdx @@ -0,0 +1,176 @@ +import { PropsTable } from '@/components/PropsTable'; +import { Snippet } from '@/components/Snippet'; +import { Tabs } from '@/components/Tabs'; +import { CodeBlock } from '@/components/CodeBlock'; +import { FieldPreview } from '@/snippets/field'; +import { BaseUI } from '@/components/HeadlessBanners/BaseUI'; + +# Field + +A wrapper around `Input` or `Select` component to add label, description and error messages.. + +} code={``} /> + + + + Usage + Theming + + + + Name + + Visible on your profile + +`} + /> + + + We recommend starting with our [global tokens](/theme/theming) to customize the library and align it with + your brand. For additional flexibility, you can use the provided class names for each element listed below. + + + + +`} + /> + + + +## API reference + + + +### Field.Root + +Groups all parts of the field. Renders a `
` element. + + string | string[] | null | Promise', + responsive: false, + }, + validationMode: { + type: ['onBlur', 'onChange'], + responsive: false, + }, + validationDebounceTime: { + type: 'number', + responsive: false, + }, + className: { + type: 'string', + responsive: false, + }, + style: { + type: 'CSSProperties', + responsive: false, + }, + }} +/> + +### Field.Label + +An accessible label that is automatically associated with the field control. Renders a `