diff --git a/.changeset/afraid-experts-explain.md b/.changeset/afraid-experts-explain.md new file mode 100644 index 0000000000..38eb3709d0 --- /dev/null +++ b/.changeset/afraid-experts-explain.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli-node': patch +--- + +Added `type` field to `BackstagePackageJson` type. diff --git a/.changeset/afraid-kids-jog.md b/.changeset/afraid-kids-jog.md new file mode 100644 index 0000000000..39e4e5c5a1 --- /dev/null +++ b/.changeset/afraid-kids-jog.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-permission-node': patch +--- + +The returned router from `createPermissionIntegrationRouter` is now mutable, allowing for permissions and resources to be added after creation of the router. diff --git a/.changeset/beige-dingos-destroy.md b/.changeset/beige-dingos-destroy.md new file mode 100644 index 0000000000..325c150119 --- /dev/null +++ b/.changeset/beige-dingos-destroy.md @@ -0,0 +1,18 @@ +--- +'@backstage/cli': minor +--- + +**BREAKING**: Add support for native ESM in Node.js code. This changes the behavior of dynamic import expressions in Node.js code. Typically this can be fixed by replacing `import(...)` with `require(...)`, with an `as typeof import(...)` cast if needed for types. This is because dynamic imports will no longer be transformed to `require(...)` calls, but instead be left as-is. This in turn allows you to load ESM modules from CommonJS code using `import(...)`. + +This change adds support for the following in Node.js packages, across type checking, package builds, runtime transforms and Jest tests: + +- Dynamic imports that load ESM modules from CommonJS code. +- Both `.mjs` and `.mts` files as explicit ESM files, as well as `.cjs` and `.cts` as explicit CommonJS files. +- Support for the `"type": "module"` field in `package.json` to indicate that the package is an ESM package. + +There are a few caveats to be aware of: + +- To enable support for native ESM in tests, you need to run the tests with the `--experimental-vm-modules` flag enabled, typically via `NODE_OPTIONS='--experimental-vm-modules'`. +- Declaring a package as `"type": "module"` in `package.json` is supported, but in tests it will cause all local transitive dependencies to also be treated as ESM, regardless of whether they declare `"type": "module"` or not. +- Node.js has an [ESM interoperability layer with CommonJS](https://nodejs.org/docs/latest-v22.x/api/esm.html#interoperability-with-commonjs) that allows for imports from ESM to identify named exports in CommonJS packages. This interoperability layer is **only** enabled when importing packages with a `.cts` or `.cjs` extension. This is because the interoperability layer is not fully compatible with the NPM ecosystem, and would break package if it was enabled for `.js` files. +- Dynamic imports of CommonJS packages will vary in shape depending on the runtime, i.e. test vs local development, etc. It is therefore recommended to avoid dynamic imports of CommonJS packages and instead use `require`, or to use the explicit CommonJS extensions as mentioned above. If you do need to dynamically import CommonJS packages, avoid using `default` exports, as the shape of them vary across different environments and you would otherwise need to manually unwrap the import based on the shape of the module object. diff --git a/.changeset/big-seals-drum.md b/.changeset/big-seals-drum.md deleted file mode 100644 index 9b4ab16701..0000000000 --- a/.changeset/big-seals-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Exported `QuickStartCard` component. diff --git a/.changeset/bigint-convert.md b/.changeset/bigint-convert.md new file mode 100644 index 0000000000..fed91ad2c1 --- /dev/null +++ b/.changeset/bigint-convert.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-react': patch +--- + +Fixed bug in string-to-integer conversion to properly handle decimal values with BigInt. diff --git a/.changeset/calm-tigers-boil.md b/.changeset/calm-tigers-boil.md deleted file mode 100644 index 0e19371805..0000000000 --- a/.changeset/calm-tigers-boil.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Fixed incompatible `@typescript-eslint` versions with current `eslint@8.x.x` diff --git a/.changeset/clean-squids-build.md b/.changeset/clean-squids-build.md new file mode 100644 index 0000000000..3c1e0b56a7 --- /dev/null +++ b/.changeset/clean-squids-build.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-notifications-backend': patch +'@backstage/plugin-notifications': patch +--- + +added topic filter for notifications diff --git a/.changeset/create-app-1735034814.md b/.changeset/create-app-1737468383.md similarity index 100% rename from .changeset/create-app-1735034814.md rename to .changeset/create-app-1737468383.md diff --git a/.changeset/curly-humans-prove.md b/.changeset/curly-humans-prove.md new file mode 100644 index 0000000000..4e0ca9c90e --- /dev/null +++ b/.changeset/curly-humans-prove.md @@ -0,0 +1,7 @@ +--- +'@backstage/backend-test-utils': patch +'@backstage/backend-defaults': patch +'@backstage/config-loader': patch +--- + +Internal refactor to use explicit `require` for lazy-loading dependency. diff --git a/.changeset/curvy-ways-play.md b/.changeset/curvy-ways-play.md new file mode 100644 index 0000000000..c69b855098 --- /dev/null +++ b/.changeset/curvy-ways-play.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': minor +--- + +Added mocks for the new `PermissionsRegistryService`. diff --git a/.changeset/cyan-frogs-count.md b/.changeset/cyan-frogs-count.md deleted file mode 100644 index b06a07468a..0000000000 --- a/.changeset/cyan-frogs-count.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch -'@backstage/plugin-devtools-backend': patch ---- - -Remove the error handler middleware, since that is now provided by the framework diff --git a/.changeset/cyan-grapes-confess.md b/.changeset/cyan-grapes-confess.md new file mode 100644 index 0000000000..a113f91fd9 --- /dev/null +++ b/.changeset/cyan-grapes-confess.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +The `api-reports` command is now also able to generate SQL reports, enabled by the `--sql-reports` flag. diff --git a/.changeset/dry-flies-rhyme.md b/.changeset/dry-flies-rhyme.md new file mode 100644 index 0000000000..4257b7c2c5 --- /dev/null +++ b/.changeset/dry-flies-rhyme.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-search-react': patch +'@backstage/plugin-search': patch +--- + +Added new extension points to extend search filters `SearchFilterBlueprint` and `SearchFilterResultTypeBlueprint` diff --git a/.changeset/dry-horses-report.md b/.changeset/dry-horses-report.md new file mode 100644 index 0000000000..b7a0b4cd46 --- /dev/null +++ b/.changeset/dry-horses-report.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': patch +--- + +Sync feature installation compatibility logic with `@backstage/backend-app-api`. diff --git a/.changeset/dry-hounds-study.md b/.changeset/dry-hounds-study.md deleted file mode 100644 index 0d58431439..0000000000 --- a/.changeset/dry-hounds-study.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-signals-backend': minor ---- - -Removed support for the old backend system. If you were using the old `createRouter` export, please migrate to [the new backend system](https://backstage.io/docs/backend-system/). diff --git a/.changeset/eleven-mice-sleep.md b/.changeset/eleven-mice-sleep.md new file mode 100644 index 0000000000..d1b14aa098 --- /dev/null +++ b/.changeset/eleven-mice-sleep.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Ignore benign database conflict errors during stitching, now logged with debug level instead. diff --git a/.changeset/fair-mangos-sleep.md b/.changeset/fair-mangos-sleep.md new file mode 100644 index 0000000000..8f0a6371c3 --- /dev/null +++ b/.changeset/fair-mangos-sleep.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Cleanup `refresh_state_references` for entity processors and providers that are no longer in control of a `refresh_state` row for entity diff --git a/.changeset/famous-balloons-punch.md b/.changeset/famous-balloons-punch.md deleted file mode 100644 index a6e7072974..0000000000 --- a/.changeset/famous-balloons-punch.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch -'@backstage/backend-defaults': patch ---- - -Go back to using `node-fetch` for gitlab diff --git a/.changeset/famous-dryers-protect.md b/.changeset/famous-dryers-protect.md deleted file mode 100644 index b015a562aa..0000000000 --- a/.changeset/famous-dryers-protect.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor -'@backstage/plugin-scaffolder-node': patch ---- - -Added the ability to use `${{ context.task.id }}` in nunjucks templating, as well as `ctx.task.id` in actions to get the current task ID. diff --git a/.changeset/few-shrimps-kiss.md b/.changeset/few-shrimps-kiss.md new file mode 100644 index 0000000000..8135ade1b7 --- /dev/null +++ b/.changeset/few-shrimps-kiss.md @@ -0,0 +1,5 @@ +--- +'@backstage/canon': minor +--- + +This is the first alpha release for Canon. As part of this release we are introducing 5 layout components and 7 components. All theming is done through CSS variables. diff --git a/.changeset/fifty-turtles-count.md b/.changeset/fifty-turtles-count.md new file mode 100644 index 0000000000..76bea0dcaa --- /dev/null +++ b/.changeset/fifty-turtles-count.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Add missing route ref to the `/alpha` entity content extension. diff --git a/.changeset/gentle-actors-sleep.md b/.changeset/gentle-actors-sleep.md new file mode 100644 index 0000000000..8ecea3e367 --- /dev/null +++ b/.changeset/gentle-actors-sleep.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +'@backstage/plugin-kubernetes-common': patch +'@backstage/plugin-kubernetes-node': patch +--- + +Fixed the lack of `secrets` to fetch from the kubernetes api by adding option to specify additional Objects which are not part of Default Objects diff --git a/.changeset/gorgeous-zebras-tan.md b/.changeset/gorgeous-zebras-tan.md deleted file mode 100644 index 7a71d9c724..0000000000 --- a/.changeset/gorgeous-zebras-tan.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-notifications-backend-module-email': patch ---- - -Added more examples of the plugin configuration diff --git a/.changeset/green-jokes-provide.md b/.changeset/green-jokes-provide.md new file mode 100644 index 0000000000..f9fb78252f --- /dev/null +++ b/.changeset/green-jokes-provide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-unprocessed': patch +--- + +Use new `PermissionsRegistryService` instead of the deprecated `catalogPermissionExtensionPoint`. diff --git a/.changeset/grumpy-crews-sneeze.md b/.changeset/grumpy-crews-sneeze.md new file mode 100644 index 0000000000..92aeff14a8 --- /dev/null +++ b/.changeset/grumpy-crews-sneeze.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +The log message written when plugins fail to initialize now includes the error that caused the plugin startup to fail. diff --git a/.changeset/hungry-mirrors-sniff.md b/.changeset/hungry-mirrors-sniff.md new file mode 100644 index 0000000000..f855c1e1a9 --- /dev/null +++ b/.changeset/hungry-mirrors-sniff.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Added default implementation for the new `PermissionsRegistryService`. diff --git a/.changeset/khaki-fireants-begin.md b/.changeset/khaki-fireants-begin.md deleted file mode 100644 index 6b9b5257f0..0000000000 --- a/.changeset/khaki-fireants-begin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-catalog': patch ---- - -Internal refactor to use cursor based pagination diff --git a/.changeset/lemon-students-care.md b/.changeset/lemon-students-care.md deleted file mode 100644 index 951430f06a..0000000000 --- a/.changeset/lemon-students-care.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Corrected spelling mistake in error message diff --git a/.changeset/loud-walls-build.md b/.changeset/loud-walls-build.md new file mode 100644 index 0000000000..0ddad96f2f --- /dev/null +++ b/.changeset/loud-walls-build.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +The catalog backend now supports the new `PermissionsRegistryService`, which can be used to add custom permission rules. diff --git a/.changeset/metal-ravens-hammer.md b/.changeset/metal-ravens-hammer.md deleted file mode 100644 index e8a97f412c..0000000000 --- a/.changeset/metal-ravens-hammer.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/config-loader': patch -'@backstage/backend-defaults': patch ---- - -Exclude `@backstage/backend-common` from schema collection if `@backstage/backend-defaults` is present diff --git a/.changeset/nasty-pears-taste.md b/.changeset/nasty-pears-taste.md deleted file mode 100644 index 667e85d9d4..0000000000 --- a/.changeset/nasty-pears-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Fixed an issue where the `` in `offset` mode would unnecessarily re-fetch data when the filter didn't change, causing a flicker effect. diff --git a/.changeset/neat-singers-rhyme.md b/.changeset/neat-singers-rhyme.md new file mode 100644 index 0000000000..5c12339d84 --- /dev/null +++ b/.changeset/neat-singers-rhyme.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Fixed the file path pattern of many static assets output as part of the frontend build process, where there was an extra `.` before the extension, leading to names like `image-af7946b..png`. diff --git a/.changeset/nervous-bottles-occur.md b/.changeset/nervous-bottles-occur.md deleted file mode 100644 index c489661645..0000000000 --- a/.changeset/nervous-bottles-occur.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab-org': patch -'@backstage/plugin-permission-backend': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-permission-node': patch -'@backstage/plugin-events-backend': patch -'@backstage/plugin-app-backend': patch -'@backstage/plugin-auth-node': patch ---- - -Remove some internal usages of the backend-common package diff --git a/.changeset/nice-waves-count.md b/.changeset/nice-waves-count.md deleted file mode 100644 index 37d9a739b3..0000000000 --- a/.changeset/nice-waves-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-notifications-backend': patch ---- - -Remove `@backstage/backend-common` dependency diff --git a/.changeset/old-moons-end.md b/.changeset/old-moons-end.md new file mode 100644 index 0000000000..d550ae6325 --- /dev/null +++ b/.changeset/old-moons-end.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': patch +--- + +Deprecated the alpha `catalogPermissionExtensionPoint` and related types, since the same functionality is now available via the new `PermissionsRegistryService`. diff --git a/.changeset/old-phones-rest.md b/.changeset/old-phones-rest.md new file mode 100644 index 0000000000..20edd78d8d --- /dev/null +++ b/.changeset/old-phones-rest.md @@ -0,0 +1,6 @@ +--- +'@techdocs/cli': minor +'@backstage/plugin-techdocs-node': minor +--- + +Allow configurable optional retries for publisher AWS S3 operations. diff --git a/.changeset/olive-boxes-hide-backend-defaults.md b/.changeset/olive-boxes-hide-backend-defaults.md new file mode 100644 index 0000000000..9d4ff05f17 --- /dev/null +++ b/.changeset/olive-boxes-hide-backend-defaults.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': minor +--- + +This change introduces the `auditor` service implementation details. diff --git a/.changeset/olive-boxes-hide-backend-plugin-api.md b/.changeset/olive-boxes-hide-backend-plugin-api.md new file mode 100644 index 0000000000..32e4d41813 --- /dev/null +++ b/.changeset/olive-boxes-hide-backend-plugin-api.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': minor +--- + +This change introduces the `auditor` service definition. diff --git a/.changeset/olive-boxes-hide-backend-test-utils.md b/.changeset/olive-boxes-hide-backend-test-utils.md new file mode 100644 index 0000000000..41b2016f5d --- /dev/null +++ b/.changeset/olive-boxes-hide-backend-test-utils.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': minor +--- + +This change introduces mocks for the `auditor` service. diff --git a/.changeset/olive-boxes-hide-catalog-backend.md b/.changeset/olive-boxes-hide-catalog-backend.md new file mode 100644 index 0000000000..09d88bf6e2 --- /dev/null +++ b/.changeset/olive-boxes-hide-catalog-backend.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +This change integrates the `auditor` service into the Catalog plugin. diff --git a/.changeset/olive-boxes-hide-scaffolder-backend.md b/.changeset/olive-boxes-hide-scaffolder-backend.md new file mode 100644 index 0000000000..be67064091 --- /dev/null +++ b/.changeset/olive-boxes-hide-scaffolder-backend.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +This change integrates the `auditor` service into the Scaffolder plugin. diff --git a/.changeset/olive-boxes-hide-scaffolder-node.md b/.changeset/olive-boxes-hide-scaffolder-node.md new file mode 100644 index 0000000000..f3c18f0991 --- /dev/null +++ b/.changeset/olive-boxes-hide-scaffolder-node.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-node': minor +--- + +This change introduces an optional `taskId` property to `TaskContext`. diff --git a/.changeset/cuddly-lions-knock.md b/.changeset/orange-brooms-lick.md similarity index 52% rename from .changeset/cuddly-lions-knock.md rename to .changeset/orange-brooms-lick.md index dd5a6b31e7..17a8ef7476 100644 --- a/.changeset/cuddly-lions-knock.md +++ b/.changeset/orange-brooms-lick.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-backend-module-openapi': patch --- -Refactor to no longer use backend-common +Fix `resolveUrl` for split openapi definition relative path diff --git a/.changeset/orange-icons-sell.md b/.changeset/orange-icons-sell.md deleted file mode 100644 index e1f663a9ae..0000000000 --- a/.changeset/orange-icons-sell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Added `-j 2` to `dev` script to help cases where the backend does not start up during local development diff --git a/.changeset/pre.json b/.changeset/pre.json index 8b34ae5dae..46e41b0c24 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -2,222 +2,239 @@ "mode": "pre", "tag": "next", "initialVersions": { - "example-app": "0.2.104", - "@backstage/app-defaults": "1.5.15", - "example-app-next": "0.0.18", - "app-next-example-plugin": "0.0.18", - "example-backend": "0.0.33", - "@backstage/backend-app-api": "1.1.0", - "@backstage/backend-defaults": "0.6.0", + "example-app": "0.2.105", + "@backstage/app-defaults": "1.5.16", + "example-app-next": "0.0.19", + "app-next-example-plugin": "0.0.19", + "example-backend": "0.0.34", + "@backstage/backend-app-api": "1.1.1", + "@backstage/backend-defaults": "0.7.0", "@backstage/backend-dev-utils": "0.1.5", - "@backstage/backend-dynamic-feature-service": "0.5.2", - "example-backend-legacy": "0.2.105", - "@backstage/backend-openapi-utils": "0.4.0", - "@backstage/backend-plugin-api": "1.1.0", - "@backstage/backend-test-utils": "1.2.0", + "@backstage/backend-dynamic-feature-service": "0.5.3", + "example-backend-legacy": "0.2.106", + "@backstage/backend-openapi-utils": "0.4.1", + "@backstage/backend-plugin-api": "1.1.1", + "@backstage/backend-test-utils": "1.2.1", "@backstage/canon": "0.0.0", - "@backstage/catalog-client": "1.9.0", - "@backstage/catalog-model": "1.7.2", - "@backstage/cli": "0.29.4", + "@backstage/catalog-client": "1.9.1", + "@backstage/catalog-model": "1.7.3", + "@backstage/cli": "0.29.5", "@backstage/cli-common": "0.1.15", - "@backstage/cli-node": "0.2.11", + "@backstage/cli-node": "0.2.12", "@backstage/codemods": "0.1.52", - "@backstage/config": "1.3.1", - "@backstage/config-loader": "1.9.3", - "@backstage/core-app-api": "1.15.3", - "@backstage/core-compat-api": "0.3.4", - "@backstage/core-components": "0.16.2", - "@backstage/core-plugin-api": "1.10.2", - "@backstage/create-app": "0.5.23", - "@backstage/dev-utils": "1.1.5", - "e2e-test": "0.2.23", + "@backstage/config": "1.3.2", + "@backstage/config-loader": "1.9.5", + "@backstage/core-app-api": "1.15.4", + "@backstage/core-compat-api": "0.3.5", + "@backstage/core-components": "0.16.3", + "@backstage/core-plugin-api": "1.10.3", + "@backstage/create-app": "0.5.24", + "@backstage/dev-utils": "1.1.6", + "e2e-test": "0.2.24", "@backstage/e2e-test-utils": "0.1.1", - "@backstage/errors": "1.2.6", + "@backstage/errors": "1.2.7", "@backstage/eslint-plugin": "0.1.10", - "@backstage/frontend-app-api": "0.10.3", - "@backstage/frontend-defaults": "0.1.4", - "@internal/frontend": "0.0.4", - "@backstage/frontend-plugin-api": "0.9.3", - "@backstage/frontend-test-utils": "0.2.4", - "@backstage/integration": "1.16.0", - "@backstage/integration-aws-node": "0.1.14", - "@backstage/integration-react": "1.2.2", + "@backstage/frontend-app-api": "0.10.4", + "@backstage/frontend-defaults": "0.1.5", + "@internal/frontend": "0.0.5", + "@backstage/frontend-plugin-api": "0.9.4", + "@backstage/frontend-test-utils": "0.2.5", + "@backstage/integration": "1.16.1", + "@backstage/integration-aws-node": "0.1.15", + "@backstage/integration-react": "1.2.3", "@internal/opaque": "0.0.1", "@backstage/release-manifests": "0.0.12", - "@backstage/repo-tools": "0.12.0", - "@internal/scaffolder": "0.0.4", - "@techdocs/cli": "1.8.24", - "techdocs-cli-embedded-app": "0.2.103", - "@backstage/test-utils": "1.7.3", + "@backstage/repo-tools": "0.12.1", + "@internal/scaffolder": "0.0.5", + "@techdocs/cli": "1.8.25", + "techdocs-cli-embedded-app": "0.2.104", + "@backstage/test-utils": "1.7.4", "@backstage/theme": "0.6.3", - "@backstage/types": "1.2.0", + "@backstage/types": "1.2.1", "@backstage/version-bridge": "1.0.10", "yarn-plugin-backstage": "0.0.4", - "@backstage/plugin-api-docs": "0.12.2", + "@backstage/plugin-api-docs": "0.12.3", "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.8", - "@backstage/plugin-app": "0.1.4", - "@backstage/plugin-app-backend": "0.4.3", - "@backstage/plugin-app-node": "0.1.28", - "@backstage/plugin-app-visualizer": "0.1.14", - "@backstage/plugin-auth-backend": "0.24.1", - "@backstage/plugin-auth-backend-module-atlassian-provider": "0.3.3", - "@backstage/plugin-auth-backend-module-auth0-provider": "0.1.3", - "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.3.1", - "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.1.3", - "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.3.3", - "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.3.3", - "@backstage/plugin-auth-backend-module-github-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-gitlab-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-google-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-guest-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-microsoft-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-oauth2-provider": "0.3.3", - "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-oidc-provider": "0.3.3", - "@backstage/plugin-auth-backend-module-okta-provider": "0.1.3", - "@backstage/plugin-auth-backend-module-onelogin-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-pinniped-provider": "0.2.3", - "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.4.2", - "@backstage/plugin-auth-node": "0.5.5", - "@backstage/plugin-auth-react": "0.1.10", - "@backstage/plugin-bitbucket-cloud-common": "0.2.26", - "@backstage/plugin-catalog": "1.26.0", - "@backstage/plugin-catalog-backend": "1.29.0", - "@backstage/plugin-catalog-backend-module-aws": "0.4.6", - "@backstage/plugin-catalog-backend-module-azure": "0.3.0", - "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.4.3", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.4.3", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.3.0", - "@backstage/plugin-catalog-backend-module-gcp": "0.3.3", - "@backstage/plugin-catalog-backend-module-gerrit": "0.2.5", - "@backstage/plugin-catalog-backend-module-github": "0.7.8", - "@backstage/plugin-catalog-backend-module-github-org": "0.3.5", - "@backstage/plugin-catalog-backend-module-gitlab": "0.6.0", - "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.4", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.6.1", - "@backstage/plugin-catalog-backend-module-ldap": "0.11.0", - "@backstage/plugin-catalog-backend-module-logs": "0.1.5", - "@backstage/plugin-catalog-backend-module-msgraph": "0.6.5", - "@backstage/plugin-catalog-backend-module-openapi": "0.2.5", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.5", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.3", - "@backstage/plugin-catalog-backend-module-unprocessed": "0.5.3", - "@backstage/plugin-catalog-common": "1.1.2", - "@backstage/plugin-catalog-graph": "0.4.14", - "@backstage/plugin-catalog-import": "0.12.8", - "@backstage/plugin-catalog-node": "1.15.0", - "@backstage/plugin-catalog-react": "1.15.0", - "@backstage/plugin-catalog-unprocessed-entities": "0.2.12", - "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.6", - "@backstage/plugin-config-schema": "0.1.63", - "@backstage/plugin-devtools": "0.1.22", - "@backstage/plugin-devtools-backend": "0.5.0", - "@backstage/plugin-devtools-common": "0.1.14", - "@backstage/plugin-events-backend": "0.4.0", - "@backstage/plugin-events-backend-module-aws-sqs": "0.4.6", - "@backstage/plugin-events-backend-module-azure": "0.2.15", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.15", - "@backstage/plugin-events-backend-module-gerrit": "0.2.15", - "@backstage/plugin-events-backend-module-github": "0.2.15", - "@backstage/plugin-events-backend-module-gitlab": "0.2.15", - "@backstage/plugin-events-backend-test-utils": "0.1.39", - "@backstage/plugin-events-node": "0.4.6", - "@internal/plugin-todo-list": "1.0.34", - "@internal/plugin-todo-list-backend": "1.0.34", - "@internal/plugin-todo-list-common": "1.0.23", - "@backstage/plugin-home": "0.8.3", - "@backstage/plugin-home-react": "0.1.21", - "@backstage/plugin-kubernetes": "0.12.2", - "@backstage/plugin-kubernetes-backend": "0.19.1", - "@backstage/plugin-kubernetes-cluster": "0.0.20", - "@backstage/plugin-kubernetes-common": "0.9.1", - "@backstage/plugin-kubernetes-node": "0.2.1", - "@backstage/plugin-kubernetes-react": "0.5.2", - "@backstage/plugin-notifications": "0.5.0", - "@backstage/plugin-notifications-backend": "0.5.0", - "@backstage/plugin-notifications-backend-module-email": "0.3.4", - "@backstage/plugin-notifications-common": "0.0.7", - "@backstage/plugin-notifications-node": "0.2.10", - "@backstage/plugin-org": "0.6.34", - "@backstage/plugin-org-react": "0.1.33", - "@backstage/plugin-permission-backend": "0.5.52", - "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.3", - "@backstage/plugin-permission-common": "0.8.3", - "@backstage/plugin-permission-node": "0.8.6", - "@backstage/plugin-permission-react": "0.4.29", - "@backstage/plugin-proxy-backend": "0.5.9", - "@backstage/plugin-scaffolder": "1.27.2", - "@backstage/plugin-scaffolder-backend": "1.28.0", - "@backstage/plugin-scaffolder-backend-module-azure": "0.2.4", - "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.5", - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.4", - "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.4", - "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.4", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.5", - "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.4", - "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.4", - "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.4", - "@backstage/plugin-scaffolder-backend-module-github": "0.5.4", - "@backstage/plugin-scaffolder-backend-module-gitlab": "0.7.0", - "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.5", - "@backstage/plugin-scaffolder-backend-module-rails": "0.5.4", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.4", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.5", - "@backstage/plugin-scaffolder-common": "1.5.8", - "@backstage/plugin-scaffolder-node": "0.6.2", - "@backstage/plugin-scaffolder-node-test-utils": "0.1.17", - "@backstage/plugin-scaffolder-react": "1.14.2", - "@backstage/plugin-search": "1.4.21", - "@backstage/plugin-search-backend": "1.8.0", - "@backstage/plugin-search-backend-module-catalog": "0.2.6", - "@backstage/plugin-search-backend-module-elasticsearch": "1.6.3", - "@backstage/plugin-search-backend-module-explore": "0.2.6", - "@backstage/plugin-search-backend-module-pg": "0.5.39", - "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.4", - "@backstage/plugin-search-backend-module-techdocs": "0.3.4", - "@backstage/plugin-search-backend-node": "1.3.6", - "@backstage/plugin-search-common": "1.2.16", - "@backstage/plugin-search-react": "1.8.4", - "@backstage/plugin-signals": "0.0.14", - "@backstage/plugin-signals-backend": "0.2.4", - "@backstage/plugin-signals-node": "0.1.15", - "@backstage/plugin-signals-react": "0.0.8", - "@backstage/plugin-techdocs": "1.12.0", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.43", - "@backstage/plugin-techdocs-backend": "1.11.4", + "@backstage/plugin-app": "0.1.5", + "@backstage/plugin-app-backend": "0.4.4", + "@backstage/plugin-app-node": "0.1.29", + "@backstage/plugin-app-visualizer": "0.1.15", + "@backstage/plugin-auth-backend": "0.24.2", + "@backstage/plugin-auth-backend-module-atlassian-provider": "0.3.4", + "@backstage/plugin-auth-backend-module-auth0-provider": "0.1.4", + "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.1.4", + "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.3.4", + "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.3.4", + "@backstage/plugin-auth-backend-module-github-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-gitlab-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-google-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-guest-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-microsoft-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-oauth2-provider": "0.3.4", + "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-oidc-provider": "0.3.4", + "@backstage/plugin-auth-backend-module-okta-provider": "0.1.4", + "@backstage/plugin-auth-backend-module-onelogin-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-pinniped-provider": "0.2.4", + "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.4.3", + "@backstage/plugin-auth-node": "0.5.6", + "@backstage/plugin-auth-react": "0.1.11", + "@backstage/plugin-bitbucket-cloud-common": "0.2.27", + "@backstage/plugin-catalog": "1.26.1", + "@backstage/plugin-catalog-backend": "1.30.0", + "@backstage/plugin-catalog-backend-module-aws": "0.4.7", + "@backstage/plugin-catalog-backend-module-azure": "0.3.1", + "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.4.4", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.4.4", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.3.1", + "@backstage/plugin-catalog-backend-module-gcp": "0.3.4", + "@backstage/plugin-catalog-backend-module-gerrit": "0.2.6", + "@backstage/plugin-catalog-backend-module-github": "0.7.9", + "@backstage/plugin-catalog-backend-module-github-org": "0.3.6", + "@backstage/plugin-catalog-backend-module-gitlab": "0.6.2", + "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.5", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.6.2", + "@backstage/plugin-catalog-backend-module-ldap": "0.11.1", + "@backstage/plugin-catalog-backend-module-logs": "0.1.6", + "@backstage/plugin-catalog-backend-module-msgraph": "0.6.6", + "@backstage/plugin-catalog-backend-module-openapi": "0.2.6", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.6", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.4", + "@backstage/plugin-catalog-backend-module-unprocessed": "0.5.4", + "@backstage/plugin-catalog-common": "1.1.3", + "@backstage/plugin-catalog-graph": "0.4.15", + "@backstage/plugin-catalog-import": "0.12.9", + "@backstage/plugin-catalog-node": "1.15.1", + "@backstage/plugin-catalog-react": "1.15.1", + "@backstage/plugin-catalog-unprocessed-entities": "0.2.13", + "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.7", + "@backstage/plugin-config-schema": "0.1.64", + "@backstage/plugin-devtools": "0.1.23", + "@backstage/plugin-devtools-backend": "0.5.1", + "@backstage/plugin-devtools-common": "0.1.15", + "@backstage/plugin-events-backend": "0.4.1", + "@backstage/plugin-events-backend-module-aws-sqs": "0.4.7", + "@backstage/plugin-events-backend-module-azure": "0.2.16", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.16", + "@backstage/plugin-events-backend-module-gerrit": "0.2.16", + "@backstage/plugin-events-backend-module-github": "0.2.16", + "@backstage/plugin-events-backend-module-gitlab": "0.2.16", + "@backstage/plugin-events-backend-test-utils": "0.1.40", + "@backstage/plugin-events-node": "0.4.7", + "@internal/plugin-todo-list": "1.0.35", + "@internal/plugin-todo-list-backend": "1.0.35", + "@internal/plugin-todo-list-common": "1.0.24", + "@backstage/plugin-home": "0.8.4", + "@backstage/plugin-home-react": "0.1.22", + "@backstage/plugin-kubernetes": "0.12.3", + "@backstage/plugin-kubernetes-backend": "0.19.2", + "@backstage/plugin-kubernetes-cluster": "0.0.21", + "@backstage/plugin-kubernetes-common": "0.9.2", + "@backstage/plugin-kubernetes-node": "0.2.2", + "@backstage/plugin-kubernetes-react": "0.5.3", + "@backstage/plugin-notifications": "0.5.1", + "@backstage/plugin-notifications-backend": "0.5.1", + "@backstage/plugin-notifications-backend-module-email": "0.3.5", + "@backstage/plugin-notifications-common": "0.0.8", + "@backstage/plugin-notifications-node": "0.2.11", + "@backstage/plugin-org": "0.6.35", + "@backstage/plugin-org-react": "0.1.34", + "@backstage/plugin-permission-backend": "0.5.53", + "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.4", + "@backstage/plugin-permission-common": "0.8.4", + "@backstage/plugin-permission-node": "0.8.7", + "@backstage/plugin-permission-react": "0.4.30", + "@backstage/plugin-proxy-backend": "0.5.10", + "@backstage/plugin-proxy-node": "0.1.0", + "@backstage/plugin-scaffolder": "1.27.4", + "@backstage/plugin-scaffolder-backend": "1.29.0", + "@backstage/plugin-scaffolder-backend-module-azure": "0.2.5", + "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.6", + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.5", + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.5", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.5", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.6", + "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.5", + "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.5", + "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.5", + "@backstage/plugin-scaffolder-backend-module-github": "0.5.5", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.7.1", + "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.6", + "@backstage/plugin-scaffolder-backend-module-rails": "0.5.5", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.5", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.6", + "@backstage/plugin-scaffolder-common": "1.5.9", + "@backstage/plugin-scaffolder-node": "0.6.3", + "@backstage/plugin-scaffolder-node-test-utils": "0.1.18", + "@backstage/plugin-scaffolder-react": "1.14.3", + "@backstage/plugin-search": "1.4.22", + "@backstage/plugin-search-backend": "1.8.1", + "@backstage/plugin-search-backend-module-catalog": "0.3.0", + "@backstage/plugin-search-backend-module-elasticsearch": "1.6.4", + "@backstage/plugin-search-backend-module-explore": "0.2.7", + "@backstage/plugin-search-backend-module-pg": "0.5.40", + "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.5", + "@backstage/plugin-search-backend-module-techdocs": "0.3.5", + "@backstage/plugin-search-backend-node": "1.3.7", + "@backstage/plugin-search-common": "1.2.17", + "@backstage/plugin-search-react": "1.8.5", + "@backstage/plugin-signals": "0.0.15", + "@backstage/plugin-signals-backend": "0.3.0", + "@backstage/plugin-signals-node": "0.1.16", + "@backstage/plugin-signals-react": "0.0.9", + "@backstage/plugin-techdocs": "1.12.1", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.44", + "@backstage/plugin-techdocs-backend": "1.11.5", "@backstage/plugin-techdocs-common": "0.1.0", - "@backstage/plugin-techdocs-module-addons-contrib": "1.1.19", - "@backstage/plugin-techdocs-node": "1.12.15", - "@backstage/plugin-techdocs-react": "1.2.12", - "@backstage/plugin-user-settings": "0.8.17", - "@backstage/plugin-user-settings-backend": "0.2.28", + "@backstage/plugin-techdocs-module-addons-contrib": "1.1.20", + "@backstage/plugin-techdocs-node": "1.12.16", + "@backstage/plugin-techdocs-react": "1.2.13", + "@backstage/plugin-user-settings": "0.8.18", + "@backstage/plugin-user-settings-backend": "0.2.29", "@backstage/plugin-user-settings-common": "0.0.1" }, "changesets": [ - "big-seals-drum", - "calm-tigers-boil", - "create-app-1735034814", - "cuddly-lions-knock", - "cyan-frogs-count", - "famous-balloons-punch", - "famous-dryers-protect", - "gorgeous-zebras-tan", - "khaki-fireants-begin", - "lemon-students-care", - "metal-ravens-hammer", - "nervous-bottles-occur", - "nice-waves-count", - "quick-poems-cover", - "rich-penguins-stare", - "rich-vans-hope", - "shiny-walls-press", - "silly-bottles-raise", - "spicy-tomatoes-hammer", - "strong-students-beg", - "tall-actors-clap", - "twenty-laws-tie", - "two-wasps-mix" + "afraid-experts-explain", + "afraid-kids-jog", + "beige-dingos-destroy", + "bigint-convert", + "clean-squids-build", + "create-app-1737468383", + "curly-humans-prove", + "curvy-ways-play", + "cyan-grapes-confess", + "dry-flies-rhyme", + "dry-horses-report", + "eleven-mice-sleep", + "fair-mangos-sleep", + "few-shrimps-kiss", + "gentle-actors-sleep", + "green-jokes-provide", + "hungry-mirrors-sniff", + "loud-walls-build", + "old-moons-end", + "old-phones-rest", + "olive-boxes-hide-backend-defaults", + "olive-boxes-hide-backend-plugin-api", + "olive-boxes-hide-backend-test-utils", + "olive-boxes-hide-catalog-backend", + "olive-boxes-hide-scaffolder-backend", + "olive-boxes-hide-scaffolder-node", + "orange-brooms-lick", + "proud-dryers-act", + "proud-hornets-cheer", + "quiet-phones-sell", + "sharp-vans-protect", + "sharp-years-drive", + "short-vans-reflect", + "soft-planets-mate", + "tall-scissors-sip", + "tame-hats-shout", + "twelve-eyes-stare", + "warm-masks-ring", + "wise-apes-juggle" ] } diff --git a/.changeset/proud-dryers-act.md b/.changeset/proud-dryers-act.md new file mode 100644 index 0000000000..4bc7a98fdb --- /dev/null +++ b/.changeset/proud-dryers-act.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Changed the base URL in addLinkClickListener from window.location.origin to app.baseUrl for improved path handling. This fixes an issue where Backstage, when running on a subpath, was unable to handle non-Backstage URLs of the same origin correctly. diff --git a/.changeset/proud-hornets-cheer.md b/.changeset/proud-hornets-cheer.md new file mode 100644 index 0000000000..6ac0a7846b --- /dev/null +++ b/.changeset/proud-hornets-cheer.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Fixed a bug in the BitbucketRepoBranchPicker component that crashed the scaffolder diff --git a/.changeset/quick-poems-cover.md b/.changeset/quick-poems-cover.md deleted file mode 100644 index 099bb550fb..0000000000 --- a/.changeset/quick-poems-cover.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-catalog': minor ---- - -**BREAKING**: Removed support for the old backend system. Please [migrate to the new backend system](https://backstage.io/docs/backend-system/) and enable [the catalog collator](https://backstage.io/docs/features/search/collators#catalog) there. - -As part of this, the `/alpha` export path is gone too. Just import the module from the root of the package as usual instead. diff --git a/.changeset/quiet-phones-sell.md b/.changeset/quiet-phones-sell.md new file mode 100644 index 0000000000..f41f5d685e --- /dev/null +++ b/.changeset/quiet-phones-sell.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Internal refactor to support native ESM. diff --git a/.changeset/rich-penguins-stare.md b/.changeset/rich-penguins-stare.md deleted file mode 100644 index 0993b0fb55..0000000000 --- a/.changeset/rich-penguins-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Fixed scaffolder form fields not resolving correctly in the `useCustomFieldExtensions` hook. diff --git a/.changeset/rich-vans-hope.md b/.changeset/rich-vans-hope.md deleted file mode 100644 index 3e219a13b6..0000000000 --- a/.changeset/rich-vans-hope.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@backstage/backend-dynamic-feature-service': patch -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/backend-defaults': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-auth-backend': patch -'@backstage/plugin-app-backend': patch -'@backstage/plugin-auth-node': patch ---- - -Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types diff --git a/.changeset/sharp-vans-protect.md b/.changeset/sharp-vans-protect.md new file mode 100644 index 0000000000..651c38be8b --- /dev/null +++ b/.changeset/sharp-vans-protect.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +Added new `PermissionsRegistryService` that is used by plugins to register permissions, resource types, and rules into the permission system. This replaces the existing `createPermissionIntegrationRouter` from `@backstage/plugin-permission-node`. diff --git a/.changeset/sharp-years-drive.md b/.changeset/sharp-years-drive.md new file mode 100644 index 0000000000..92ade2b972 --- /dev/null +++ b/.changeset/sharp-years-drive.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-catalog': patch +--- + +Modified the logic for generating the location URL by encoding the entity property values with `encodeURIComponent`. This enhancement improves the safety and reliability of the URL. diff --git a/.changeset/shiny-walls-press.md b/.changeset/shiny-walls-press.md deleted file mode 100644 index 29fe54afa2..0000000000 --- a/.changeset/shiny-walls-press.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/backend-defaults': minor ---- - -Ensure that an error handler middleware exists at the end of each plugin `httpRouter` handler chain. This makes it so that exceptions thrown by plugin routes are caught and encoded in the standard error format. - -If you were using the standard `MiddlewareFactory` just to put an `error` middleware in you router, you can now remove that at your earliest convenience since it's redundant. If you have custom error handlers in your plugin router, those will continue to function as previously. If you were relying on thrown errors propagating all the way down to the root HTTP router, you will find that they no longer do that, and may want to hoist your error handling up to the plugin level instead. diff --git a/.changeset/short-vans-reflect.md b/.changeset/short-vans-reflect.md new file mode 100644 index 0000000000..a0290c7c27 --- /dev/null +++ b/.changeset/short-vans-reflect.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Internal refactor of API report generation. diff --git a/.changeset/silly-bottles-raise.md b/.changeset/silly-bottles-raise.md deleted file mode 100644 index 880d976680..0000000000 --- a/.changeset/silly-bottles-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Improved concurrency of the `entities` endpoint when using the streamed query mode behind the `catalog.disableRelationsCompatibility` flag. diff --git a/.changeset/soft-planets-mate.md b/.changeset/soft-planets-mate.md new file mode 100644 index 0000000000..94dd790f4b --- /dev/null +++ b/.changeset/soft-planets-mate.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-scaffolder-react': patch +--- + +Add schema output return type to the `makeFieldSchema` function return diff --git a/.changeset/spicy-tomatoes-hammer.md b/.changeset/spicy-tomatoes-hammer.md deleted file mode 100644 index 20564b9a05..0000000000 --- a/.changeset/spicy-tomatoes-hammer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor ---- - -Removed the long-deprecated `DefaultCatalogCollatorFactory` and `DefaultCatalogCollatorFactoryOptions` exports, which now no longer exist in the search plugin's offerings. If you were using these, you want to migrate to [the new backend system](https://backstage.io/docs/backend-system/) and use the [catalog collator](https://backstage.io/docs/features/search/collators#catalog) directly. diff --git a/.changeset/strong-students-beg.md b/.changeset/strong-students-beg.md deleted file mode 100644 index 5b3653d389..0000000000 --- a/.changeset/strong-students-beg.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-node': patch ---- - -Deprecate the `logStream` option in `executeShellCommand`, replacing it with a logger instance. diff --git a/.changeset/tall-actors-clap.md b/.changeset/tall-actors-clap.md deleted file mode 100644 index 594918a362..0000000000 --- a/.changeset/tall-actors-clap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Fix issue with `secrets` not being forwarded properly to the backend when creating a task diff --git a/.changeset/tall-scissors-sip.md b/.changeset/tall-scissors-sip.md new file mode 100644 index 0000000000..7d4cdc7059 --- /dev/null +++ b/.changeset/tall-scissors-sip.md @@ -0,0 +1,5 @@ +--- +'@techdocs/cli': patch +--- + +Internal update to work with dynamic imports. diff --git a/.changeset/tame-hats-shout.md b/.changeset/tame-hats-shout.md new file mode 100644 index 0000000000..1576463c85 --- /dev/null +++ b/.changeset/tame-hats-shout.md @@ -0,0 +1,6 @@ +--- +'@backstage/frontend-plugin-api': patch +'@backstage/frontend-app-api': patch +--- + +Added `getNodesByRoutePath` method to the `AppTreeApi`. diff --git a/.changeset/twelve-eyes-stare.md b/.changeset/twelve-eyes-stare.md new file mode 100644 index 0000000000..bd2db50c9b --- /dev/null +++ b/.changeset/twelve-eyes-stare.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-dynamic-feature-service': patch +--- + +Make sure changes are successfully tracked before starting up scanner. diff --git a/.changeset/twenty-laws-tie.md b/.changeset/twenty-laws-tie.md deleted file mode 100644 index 02e6fca70c..0000000000 --- a/.changeset/twenty-laws-tie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Updated condition in `resolveCodeOwner` to fix a bug where `normalizeCodeOwner` could potentially be called with an invalid argument causing an error in `CodeOwnersProcessor` diff --git a/.changeset/two-wasps-mix.md b/.changeset/two-wasps-mix.md deleted file mode 100644 index 47d8a8a89b..0000000000 --- a/.changeset/two-wasps-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-module-addons-contrib': patch ---- - -Internal refactor for safer handling of possible null value. diff --git a/.changeset/warm-masks-ring.md b/.changeset/warm-masks-ring.md new file mode 100644 index 0000000000..bfb521a005 --- /dev/null +++ b/.changeset/warm-masks-ring.md @@ -0,0 +1,114 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Add optional props to `TechDocCustomHome` to allow for more flexibility: + +```tsx +import { TechDocsCustomHome } from '@backstage/plugin-techdocs'; +//... + +const options = { emptyRowsWhenPaging: false }; +const linkDestination = (entity: Entity): string | undefined => { + return entity.metadata.annotations?.['external-docs']; +}; +const techDocsTabsConfig = [ + { + label: 'Recommended Documentation', + panels: [ + { + title: 'Golden Path', + description: 'Documentation about standards to follow', + panelType: 'DocsCardGrid', + panelProps: { CustomHeader: () => }, + filterPredicate: entity => + entity?.metadata?.tags?.includes('golden-path') ?? false, + }, + { + title: 'Recommended', + description: 'Useful documentation', + panelType: 'InfoCardGrid', + panelProps: { + CustomHeader: () => + linkDestination: linkDestination, + }, + filterPredicate: entity => + entity?.metadata?.tags?.includes('recommended') ?? false, + }, + ], + }, + { + label: 'Browse All', + panels: [ + { + description: 'Browse all docs', + filterPredicate: filterEntity, + panelType: 'TechDocsIndexPage', + title: 'All', + panelProps: { PageWrapper: React.Fragment, CustomHeader: React.Fragment, options: options }, + }, + ], + }, +]; + +const AppRoutes = () => { + + ) => ({children})} + /> + } + /> + ; +}; +``` + +Add new Grid option called `InfoCardGrid` which is a more customizable card option for the Docs grid. + +```tsx + entity.metadata['external-docs']} +/> +``` + +Expose existing `CustomDocsPanel` so that it can be used independently if desired. + +```tsx +const panels: PanelConfig[] = [ + { + description: '', + filterPredicate: entity => {}, + panelType: 'InfoCardGrid', + title: 'Standards', + panelProps: { + CustomHeader: () => + linkDestination: linkDestination, + }, + }, + { + description: '', + filterPredicate: entity => {}, + panelType: 'DocsCardGrid', + title: 'Contribute', + }, +]; +{ + panels.map((config, index) => ( + + )); +} +``` diff --git a/.changeset/wise-apes-juggle.md b/.changeset/wise-apes-juggle.md new file mode 100644 index 0000000000..1b027771f9 --- /dev/null +++ b/.changeset/wise-apes-juggle.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Ensure that both global-agent and undici agents are enabled when proxying is enabled. 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/.github/vale/config/vocabularies/Backstage/accept.txt b/.github/vale/config/vocabularies/Backstage/accept.txt index 091b999dd7..9de05aab88 100644 --- a/.github/vale/config/vocabularies/Backstage/accept.txt +++ b/.github/vale/config/vocabularies/Backstage/accept.txt @@ -228,6 +228,7 @@ LocalStack lockdown lockfile lookbehind +lowercased lunr Luxon magiclink @@ -276,6 +277,7 @@ nohoist nonces noop npm +nullable nunjucks nvarchar nvm @@ -467,6 +469,7 @@ typeahead ui unbreak Unconference +undici unicode unmanaged unmount diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml index 1210db0ccf..be66d93fbb 100644 --- a/.github/workflows/api-breaking-changes-comment.yml +++ b/.github/workflows/api-breaking-changes-comment.yml @@ -22,7 +22,7 @@ jobs: action: ${{ steps.event.outputs.ACTION }} steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: disable-sudo: true egress-policy: block diff --git a/.github/workflows/api-breaking-changes.yml b/.github/workflows/api-breaking-changes.yml index dbb5096839..e9d321d6e5 100644 --- a/.github/workflows/api-breaking-changes.yml +++ b/.github/workflows/api-breaking-changes.yml @@ -14,7 +14,7 @@ jobs: if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/automate_area-labels.yml b/.github/workflows/automate_area-labels.yml index 4529b54c16..45125e74d3 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index 8c46ed2984..4380b900a4 100644 --- a/.github/workflows/automate_changeset_feedback.yml +++ b/.github/workflows/automate_changeset_feedback.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 7923496b3f..11e7d6ef47 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml index e61ca20620..453f976ca0 100644 --- a/.github/workflows/automate_stale.yml +++ b/.github/workflows/automate_stale.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/ci-noop.yml b/.github/workflows/ci-noop.yml index a769ce7d50..d51b67d1f9 100644 --- a/.github/workflows/ci-noop.yml +++ b/.github/workflows/ci-noop.yml @@ -40,7 +40,7 @@ jobs: name: Test ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8bf57cc95..bcf5ed94a0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: name: Install ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit @@ -64,7 +64,7 @@ jobs: name: Verify ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit @@ -202,7 +202,7 @@ jobs: env: CI: true - NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot + 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 }} diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 3e944a3795..d47e78f537 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -10,7 +10,7 @@ jobs: timeout-minutes: 10 steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index a1764b976a..0cbba0d30d 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit @@ -59,10 +59,10 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1 + uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 - name: Build and push - uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.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 dc85f23e50..2f9510c0cd 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit @@ -91,7 +91,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit @@ -158,7 +158,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index d1d7d3fd7c..d59bb189d0 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -61,7 +61,7 @@ jobs: env: CI: true - NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot + 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 }} @@ -147,7 +147,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index c10f248f6d..71fb301aad 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml index b5027d78be..a9653fe65e 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit @@ -30,7 +30,7 @@ jobs: run: | mkdir -p ./pr echo $PR_NUMBER > ./pr/pr_number - - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + - uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 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 447b6e1e13..c6fd02dd2f 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 186c011797..08694ee095 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -18,7 +18,7 @@ jobs: if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index db060a70d4..acad33eb2f 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -29,7 +29,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit @@ -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@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/sync_canon.yml b/.github/workflows/sync_canon.yml index 29a0ae2ce4..d3593fc017 100644 --- a/.github/workflows/sync_canon.yml +++ b/.github/workflows/sync_canon.yml @@ -1,14 +1,14 @@ -name: Sync Canon Storybook +name: Sync Canon Docs on: push: branches: [master] jobs: - sync-canon-storybook: + sync-canon-docs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit @@ -26,31 +26,36 @@ jobs: with: cache-prefix: ${{ runner.os }}-v20.x - - name: Checkout backstage/canon-storybook + - name: Checkout backstage/canon-docs uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - repository: backstage/canon-storybook - path: canon-storybook + 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 Storybook workflow' + git config --global user.name 'Github Canon Docs workflow' - - name: Build Canon Storybook + - name: Install dependencies + working-directory: canon-docs + run: yarn install + + - name: Build Canon Docs + working-directory: canon-docs run: | - yarn workspace @backstage/canon run build-storybook + yarn build - - name: Replace contents of canon-storybook repo with Storybook build output - working-directory: canon-storybook + - name: Replace contents of canon-external-docs repo with docs build output + working-directory: canon-external-docs run: | git rm -rf . - cp -R ../packages/canon/storybook-static/. . + cp -R ../canon-docs/dist/. . - name: Commit to canon-storybook repo - working-directory: canon-storybook + working-directory: canon-external-docs run: | git add . - git commit -am "Canon Storybook build for backstage/backstage@${{ github.sha }}" + 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 7516b3cfe0..d7d4616202 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index 2c2d5a51d0..e357c2b0d0 100644 --- a/.github/workflows/sync_dependabot-changesets.yml +++ b/.github/workflows/sync_dependabot-changesets.yml @@ -11,7 +11,7 @@ jobs: if: github.actor == 'dependabot[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index 436db10e9c..52594d58e6 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index e4d60777cd..b87b4c4752 100644 --- a/.github/workflows/sync_renovate-changesets.yml +++ b/.github/workflows/sync_renovate-changesets.yml @@ -11,7 +11,7 @@ jobs: if: github.actor == 'renovate[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index bbdde7e9d6..2252aa0ddb 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index ef7ad65b37..c21b0bbff1 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index 479f65a53a..a2faaa10a3 100644 --- a/.github/workflows/sync_version-packages.yml +++ b/.github/workflows/sync_version-packages.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility-noop.yml b/.github/workflows/verify_accessibility-noop.yml index 9af85ec2d1..d637788814 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index 9803616b53..b9eb7f1bec 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index 6720e4d852..5b3aa7479a 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -42,7 +42,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml index 9a93be4090..dab2f421b5 100644 --- a/.github/workflows/verify_docs-quality.yml +++ b/.github/workflows/verify_docs-quality.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux-noop.yml b/.github/workflows/verify_e2e-linux-noop.yml index 4e3eeb2a8c..94ad720d51 100644 --- a/.github/workflows/verify_e2e-linux-noop.yml +++ b/.github/workflows/verify_e2e-linux-noop.yml @@ -29,7 +29,7 @@ jobs: name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 30887980a4..69d1d2eb4b 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -38,12 +38,12 @@ jobs: env: CI: true - NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot + 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index 454c4c011e..4d4b32eaef 100644 --- a/.github/workflows/verify_e2e-techdocs.yml +++ b/.github/workflows/verify_e2e-techdocs.yml @@ -27,12 +27,12 @@ jobs: 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows-noop.yml b/.github/workflows/verify_e2e-windows-noop.yml index 78d4c1e37f..269e70d8b4 100644 --- a/.github/workflows/verify_e2e-windows-noop.yml +++ b/.github/workflows/verify_e2e-windows-noop.yml @@ -25,7 +25,7 @@ jobs: name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index 3ce85f371b..b9d76da02a 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -28,12 +28,12 @@ jobs: env: CI: true - NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot + 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml index 126d70b9c8..1b85a9469b 100644 --- a/.github/workflows/verify_fossa.yml +++ b/.github/workflows/verify_fossa.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite-noop.yml b/.github/workflows/verify_microsite-noop.yml index 85cb1e3fee..63e759f0ba 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 2507428ec8..c4a2934c57 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -24,7 +24,7 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite_accessibility-noop.yml b/.github/workflows/verify_microsite_accessibility-noop.yml index 7d4028e2dd..2640c215a1 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite_accessibility.yml b/.github/workflows/verify_microsite_accessibility.yml index e22241b3e3..008895357f 100644 --- a/.github/workflows/verify_microsite_accessibility.yml +++ b/.github/workflows/verify_microsite_accessibility.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_storybook-noop.yml b/.github/workflows/verify_storybook-noop.yml index 5b41d76e4c..4bb54136ab 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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index b919db658d..c43ed0c622 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -28,7 +28,7 @@ jobs: name: Storybook steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index e3f6959929..1eee6e61f3 100644 --- a/.github/workflows/verify_windows.yml +++ b/.github/workflows/verify_windows.yml @@ -21,7 +21,7 @@ jobs: env: CI: true - NODE_OPTIONS: --max-old-space-size=8192 --no-node-snapshot + 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,7 +29,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@c95a14d0e5bab51a9f56296a4eb0e416910cd350 # v2.10.3 with: egress-policy: audit diff --git a/.prettierignore b/.prettierignore index c7a16065e5..cb744faa4c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,9 @@ .yarn dist microsite +canon-docs/.next +canon-docs/public +canon-docs/out coverage *.hbs templates diff --git a/ADOPTERS.md b/ADOPTERS.md index b31e621938..1eacd4c104 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -280,3 +280,6 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [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 | + diff --git a/OWNERS.md b/OWNERS.md index 0932d3386b..335ab60ad7 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -132,6 +132,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` | +| Kashish Mittal | Red Hat | [04kash](https://github.com/04kash) | `kashh._.` | | Nick Boldt | Red Hat | [nickboldt](https://github.com/nickboldt) | `nboldt` | | Vincenzo Scamporlino | Spotify | [vinzscam](https://github.com/vinzscam) | `vinzscam` | @@ -163,7 +164,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 @@ -184,7 +185,7 @@ 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 @@ -203,16 +204,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` | 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..3ab78ff7ec --- /dev/null +++ b/canon-docs/package.json @@ -0,0 +1,37 @@ +{ + "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": "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", + "next": "14.2.23", + "react": "^18", + "react-dom": "^18", + "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", + "@types/react-dom": "^18", + "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..be85164347 --- /dev/null +++ b/canon-docs/scripts/build-css.js @@ -0,0 +1,45 @@ +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`); +const source3 = path.join( + __dirname, + `../../packages/canon/.storybook/themes/backstage.css`, +); +const destination3 = path.join(__dirname, `${destination}/backstage.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), + bundleAndCopyFile(source3, destination3), +]) + .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..c35c4888f3 --- /dev/null +++ b/canon-docs/src/app/(docs)/components/button/page.mdx @@ -0,0 +1,175 @@ +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'; + +# 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 `