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/breezy-coats-sort.md b/.changeset/breezy-coats-sort.md deleted file mode 100644 index 862d60e4fc..0000000000 --- a/.changeset/breezy-coats-sort.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-github': patch ---- - -Updates to allow users to subscribe to the newly created repository within GitHub to mimic similar functionality found within the GitHub UI. diff --git a/.changeset/bright-carrots-care.md b/.changeset/bright-carrots-care.md new file mode 100644 index 0000000000..7f43aa4b75 --- /dev/null +++ b/.changeset/bright-carrots-care.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Reverted the validation in dependencies in scaffolder 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/cli-melancholy-in-advance.md b/.changeset/cli-melancholy-in-advance.md new file mode 100644 index 0000000000..7a2c6f8658 --- /dev/null +++ b/.changeset/cli-melancholy-in-advance.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +The packing process when running `build-workspace` with the `--alwaysYarnPack` flag now respects the `BACKSTAGE_CLI_BUILD_PARALLEL` environment variable, defaulting parallel work limits based on CPU availability. diff --git a/.changeset/cool-pants-boil.md b/.changeset/cool-pants-boil.md new file mode 100644 index 0000000000..792fb57195 --- /dev/null +++ b/.changeset/cool-pants-boil.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Improve knip reports by using a single workspace-based config 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/create-app-1738069526.md b/.changeset/create-app-1738069526.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1738069526.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Bumped create-app version. 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/dependabot-f80f563.md b/.changeset/dependabot-f80f563.md new file mode 100644 index 0000000000..6da2296b31 --- /dev/null +++ b/.changeset/dependabot-f80f563.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +build(deps): bump `immer` from 8.0.4 to 9.0.6 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/early-peaches-allow.md b/.changeset/early-peaches-allow.md new file mode 100644 index 0000000000..b1ea2c5880 --- /dev/null +++ b/.changeset/early-peaches-allow.md @@ -0,0 +1,5 @@ +--- +'@backstage/canon': minor +--- + +**BREAKING**: Merged the Stack and Inline component into a single component called Flex. diff --git a/.changeset/eight-cougars-collect-due.md b/.changeset/eight-cougars-collect-due.md new file mode 100644 index 0000000000..ff997f876a --- /dev/null +++ b/.changeset/eight-cougars-collect-due.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-kubernetes-cluster': patch +'@backstage/plugin-kubernetes-react': patch +--- + +Improved rendering of Kubernetes resources' metadata. diff --git a/.changeset/eight-cougars-collect.md b/.changeset/eight-cougars-collect.md new file mode 100644 index 0000000000..edaa18d826 --- /dev/null +++ b/.changeset/eight-cougars-collect.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Added `nestedValuesAsYaml` option to `StructuredMetadataTable` to render data as yaml. diff --git a/.changeset/eleven-goats-yell.md b/.changeset/eleven-goats-yell.md new file mode 100644 index 0000000000..212b35497f --- /dev/null +++ b/.changeset/eleven-goats-yell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': minor +--- + +Support empty repository creation in gitlab without workspace pushing and conditionally skip if the repository already exists. 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/fair-rocks-dream.md b/.changeset/fair-rocks-dream.md new file mode 100644 index 0000000000..d1f7f3f0f7 --- /dev/null +++ b/.changeset/fair-rocks-dream.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Fixed an issue where invalid expressions or non-object values in `step.each` caused an error. 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-humans-repair.md b/.changeset/fifty-humans-repair.md new file mode 100644 index 0000000000..28db460d63 --- /dev/null +++ b/.changeset/fifty-humans-repair.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Added support for emitting entities with an explicit location key during processing. diff --git a/.changeset/fifty-pandas-destroy.md b/.changeset/fifty-pandas-destroy.md new file mode 100644 index 0000000000..c07eb89b35 --- /dev/null +++ b/.changeset/fifty-pandas-destroy.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-techdocs': patch +--- + +Use the custom error page if provided for displaying errors instead of the default error page diff --git a/.changeset/fifty-trains-attend.md b/.changeset/fifty-trains-attend.md new file mode 100644 index 0000000000..04318409fd --- /dev/null +++ b/.changeset/fifty-trains-attend.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Treat static file assets as always being free from side effects in package builds. 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/gold-cameras-battle.md b/.changeset/gold-cameras-battle.md new file mode 100644 index 0000000000..6dddcd5143 --- /dev/null +++ b/.changeset/gold-cameras-battle.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-search-backend-module-catalog': patch +'@backstage/plugin-search-backend-module-pg': patch +'@backstage/plugin-search-backend-node': patch +'@backstage/plugin-auth-node': patch +--- + +Removed unused dependencies 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/hip-hotels-type.md b/.changeset/hip-hotels-type.md new file mode 100644 index 0000000000..6c2d1dddb9 --- /dev/null +++ b/.changeset/hip-hotels-type.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Fixed an bug in the entity processing caching that would prevent entities that were emitted during processing to be restored after being overridden. 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/hungry-rings-live.md b/.changeset/hungry-rings-live.md new file mode 100644 index 0000000000..b1c94af784 --- /dev/null +++ b/.changeset/hungry-rings-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/canon': patch +--- + +Removed client directive as they are not needed in React 18. 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/light-wasps-unite.md b/.changeset/light-wasps-unite.md deleted file mode 100644 index 1075633f04..0000000000 --- a/.changeset/light-wasps-unite.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-msgraph': patch -'@backstage/plugin-techdocs-backend': patch ---- - -fix(config): add missing parameters in config schema diff --git a/.changeset/long-parrots-hide.md b/.changeset/long-parrots-hide.md deleted file mode 100644 index ac6c08b809..0000000000 --- a/.changeset/long-parrots-hide.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch -'@backstage/core-plugin-api': patch -'@backstage/types': patch ---- - -Move `Expand` and `ExpandRecursive` to `@backstage/types` diff --git a/.changeset/loud-baboons-relate.md b/.changeset/loud-baboons-relate.md new file mode 100644 index 0000000000..8f719861e1 --- /dev/null +++ b/.changeset/loud-baboons-relate.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-scaffolder': minor +--- + +Updating the `TaskLogStream` to take up all space in a running task, and also show the last line of the log by default 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/metal-worms-live.md b/.changeset/metal-worms-live.md new file mode 100644 index 0000000000..accb4d7a13 --- /dev/null +++ b/.changeset/metal-worms-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Added missing `ajv` and `immer` dependencies to `@backstage/plugin-scaffolder-react` 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/nine-ears-destroy.md b/.changeset/nine-ears-destroy.md new file mode 100644 index 0000000000..c987fd80ff --- /dev/null +++ b/.changeset/nine-ears-destroy.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': minor +--- + +Added the `locationKey` option to `processingResult.entity(...)`. diff --git a/.changeset/odd-countries-vanish.md b/.changeset/odd-countries-vanish.md new file mode 100644 index 0000000000..4d56b1fdeb --- /dev/null +++ b/.changeset/odd-countries-vanish.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-ldap': patch +--- + +Make `ldapOrg` config key optional 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/plenty-bobcats-drum.md b/.changeset/plenty-bobcats-drum.md new file mode 100644 index 0000000000..f4312401f5 --- /dev/null +++ b/.changeset/plenty-bobcats-drum.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Do not send `etag` or `If-Modified-Since` headers for gitlab artifact urls diff --git a/.changeset/polite-apricots-exercise.md b/.changeset/polite-apricots-exercise.md new file mode 100644 index 0000000000..975ddbbc9c --- /dev/null +++ b/.changeset/polite-apricots-exercise.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-home': patch +--- + +Enable collision prevention by default in custom home page. + +This change ensures that items in the home page will not collide with each other +making the user experience better. diff --git a/.changeset/pre.json b/.changeset/pre.json index c0b7dd097a..b99716f276 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -2,228 +2,260 @@ "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", - "breezy-coats-sort", - "calm-tigers-boil", - "create-app-1735034814", - "cuddly-lions-knock", - "cyan-frogs-count", - "dry-hounds-study", - "famous-balloons-punch", - "famous-dryers-protect", - "gorgeous-zebras-tan", - "khaki-fireants-begin", - "lemon-students-care", - "light-wasps-unite", - "metal-ravens-hammer", - "nasty-pears-taste", - "nervous-bottles-occur", - "nice-waves-count", - "orange-icons-sell", - "quick-poems-cover", - "renovate-dcf1169", - "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", + "create-app-1738069526", + "curly-humans-prove", + "curvy-ways-play", + "cyan-grapes-confess", + "dry-flies-rhyme", + "dry-horses-report", + "early-peaches-allow", + "eight-cougars-collect-due", + "eight-cougars-collect", + "eleven-goats-yell", + "eleven-mice-sleep", + "fair-mangos-sleep", + "fair-rocks-dream", + "few-shrimps-kiss", + "fifty-humans-repair", + "fifty-turtles-count", + "gentle-actors-sleep", + "green-jokes-provide", + "grumpy-crews-sneeze", + "hip-hotels-type", + "hungry-mirrors-sniff", + "hungry-rings-live", + "loud-baboons-relate", + "loud-walls-build", + "neat-singers-rhyme", + "nine-ears-destroy", + "odd-countries-vanish", + "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", + "polite-apricots-exercise", + "proud-dryers-act", + "proud-hornets-cheer", + "purple-years-cross", + "quiet-phones-sell", + "selfish-dodos-hear", + "sharp-vans-protect", + "sharp-years-drive", + "short-vans-reflect", + "soft-planets-mate", + "tall-scissors-sip", + "tame-hats-shout", + "thirty-dancers-cheat", + "twelve-eyes-stare", + "warm-masks-ring", + "wise-apes-juggle", + "witty-clocks-thank", + "witty-pets-march" ] } 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/purple-years-cross.md b/.changeset/purple-years-cross.md new file mode 100644 index 0000000000..e617e95204 --- /dev/null +++ b/.changeset/purple-years-cross.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-org': patch +--- + +Added support for `spec.profile.displayName` to be used in the `MyGroupsSidebarItem` component via the `EntityDisplayName` component when you are a member of multiple Groups. 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/renovate-dcf1169.md b/.changeset/renovate-dcf1169.md deleted file mode 100644 index b23fd46c77..0000000000 --- a/.changeset/renovate-dcf1169.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-home-react': patch -'@backstage/plugin-home': patch -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-scaffolder': patch ---- - -Updated dependency `@rjsf/utils` to `5.23.2`. -Updated dependency `@rjsf/core` to `5.23.2`. -Updated dependency `@rjsf/material-ui` to `5.23.2`. -Updated dependency `@rjsf/validator-ajv8` to `5.23.2`. 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/selfish-dodos-hear.md b/.changeset/selfish-dodos-hear.md new file mode 100644 index 0000000000..8754f6859d --- /dev/null +++ b/.changeset/selfish-dodos-hear.md @@ -0,0 +1,5 @@ +--- +'@backstage/canon': minor +--- + +**BREAKING**: Fixing css structure and making sure that props are applying the correct styles for all responsive values. 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-keys-heal.md b/.changeset/short-keys-heal.md new file mode 100644 index 0000000000..0c8b26055f --- /dev/null +++ b/.changeset/short-keys-heal.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-graph': patch +--- + +Fixed an issue causing the `CatalogGraphCard` to redraw its content whenever the parent component re-renders, resulting in flickering. 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/silly-vans-shop.md b/.changeset/silly-vans-shop.md new file mode 100644 index 0000000000..7af818650b --- /dev/null +++ b/.changeset/silly-vans-shop.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-catalog': minor +--- + +The Entity Page now retains the visibility of the Inspect Dialog after a reload. This allows sharing the URL with the dialog open. diff --git a/.changeset/smart-plants-sip.md b/.changeset/smart-plants-sip.md deleted file mode 100644 index 1a5d456a9b..0000000000 --- a/.changeset/smart-plants-sip.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Fix typo in default path of api docs definition route 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/thirty-dancers-cheat.md b/.changeset/thirty-dancers-cheat.md new file mode 100644 index 0000000000..083b3febbb --- /dev/null +++ b/.changeset/thirty-dancers-cheat.md @@ -0,0 +1,17 @@ +--- +'@backstage/backend-openapi-utils': minor +--- + +**BREAKING**: The `wrapInOpenApiTestServer` and `wrapServer` functions are now exported via `/testUtils` subpath. If you were importing these functions directly from the root of the package, you will need to update your imports to use the `/testUtils` subpath: + +```diff +- import { wrapInOpenApiTestServer } from '@backstage/backend-openapi-utils'; ++ import { wrapInOpenApiTestServer } from '@backstage/backend-openapi-utils/testUtils'; +``` + +or + +```diff +- import { wrapServer } from '@backstage/backend-openapi-utils'; ++ import { wrapServer } from '@backstage/backend-openapi-utils/testUtils'; +``` 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/weak-frogs-nail.md b/.changeset/weak-frogs-nail.md deleted file mode 100644 index cf6c5d3048..0000000000 --- a/.changeset/weak-frogs-nail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Fixes an issue in `GithubMultiOrgEntityProvider` that caused an error when processing teams without a parent. 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/.changeset/witty-clocks-thank.md b/.changeset/witty-clocks-thank.md new file mode 100644 index 0000000000..12fb64b56e --- /dev/null +++ b/.changeset/witty-clocks-thank.md @@ -0,0 +1,53 @@ +--- +'@backstage/plugin-api-docs-module-protoc-gen-doc': patch +'@backstage/plugin-techdocs-module-addons-contrib': patch +'@backstage/plugin-catalog-unprocessed-entities': patch +'@backstage/plugin-scaffolder-node-test-utils': patch +'@backstage/plugin-techdocs-addons-test-utils': patch +'@backstage/frontend-plugin-api': patch +'@backstage/frontend-test-utils': patch +'@backstage/frontend-defaults': patch +'@backstage/integration-react': patch +'@backstage/plugin-kubernetes-cluster': patch +'@backstage/frontend-app-api': patch +'@backstage/core-compat-api': patch +'@backstage/core-components': patch +'@backstage/core-plugin-api': patch +'@backstage/plugin-kubernetes-react': patch +'@backstage/plugin-permission-react': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/version-bridge': patch +'@backstage/plugin-app-visualizer': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-techdocs-react': patch +'@backstage/app-defaults': patch +'@backstage/core-app-api': patch +'@backstage/plugin-catalog-graph': patch +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-config-schema': patch +'@backstage/plugin-notifications': patch +'@backstage/plugin-signals-react': patch +'@backstage/plugin-user-settings': patch +'@backstage/plugin-search-react': patch +'@backstage/repo-tools': patch +'@backstage/test-utils': patch +'@backstage/dev-utils': patch +'@backstage/plugin-auth-react': patch +'@backstage/plugin-home-react': patch +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-org-react': patch +'@backstage/plugin-api-docs': patch +'@backstage/plugin-devtools': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-catalog': patch +'@backstage/plugin-signals': patch +'@backstage/canon': patch +'@backstage/theme': patch +'@backstage/plugin-search': patch +'@backstage/plugin-home': patch +'@backstage/plugin-app': patch +'@backstage/plugin-org': patch +--- + +Removed older versions of React packages as a preparatory step for upgrading to React 19. This commit does not introduce any functional changes, but removes dependencies on previous React versions, allowing for a cleaner upgrade path in subsequent commits. diff --git a/.changeset/witty-pets-march.md b/.changeset/witty-pets-march.md new file mode 100644 index 0000000000..163d146027 --- /dev/null +++ b/.changeset/witty-pets-march.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-plugin-api': patch +--- + +Allow route references to be installed in multiple app instances as long as their name is the same. 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..936b0ec8b6 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 @@ -511,3 +514,4 @@ zoomable zsh scrollable severities +intellij diff --git a/.github/workflows/api-breaking-changes-comment.yml b/.github/workflows/api-breaking-changes-comment.yml index 1210db0ccf..1593417e5d 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 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..b5d1284a67 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/automate_area-labels.yml b/.github/workflows/automate_area-labels.yml index 4529b54c16..ec6dd0c85c 100644 --- a/.github/workflows/automate_area-labels.yml +++ b/.github/workflows/automate_area-labels.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index 8c46ed2984..c1245c59b9 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 7923496b3f..ebe2ef739d 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml index e61ca20620..70e4f0061f 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/ci-noop.yml b/.github/workflows/ci-noop.yml index a769ce7d50..472a7a4e72 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8bf57cc95..b0074192df 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit @@ -127,6 +127,10 @@ jobs: - name: build all packages run: yarn backstage-cli repo build --all + # For now canon has a custom build script and needs to be built separately + - name: build canon + run: yarn --cwd packages/canon build + - name: verify type dependencies run: yarn lint:type-deps @@ -202,7 +206,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..b48bd2683d 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index a1764b976a..bd936961ec 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 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..8809bf7fc1 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index d1d7d3fd7c..82a28ff47d 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 }} @@ -110,6 +110,10 @@ jobs: - name: build run: yarn backstage-cli repo build --all + # For now canon has a custom build script and needs to be built separately + - name: build canon + run: yarn --cwd packages/canon build + - name: verify type dependencies run: yarn lint:type-deps @@ -147,7 +151,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index c10f248f6d..8e30170aca 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -16,7 +16,7 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml index 344425ca52..b8fbd01431 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit @@ -30,7 +30,7 @@ jobs: run: | mkdir -p ./pr echo $PR_NUMBER > ./pr/pr_number - - uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.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..e108f3a4d7 100644 --- a/.github/workflows/pr-review-comment.yaml +++ b/.github/workflows/pr-review-comment.yaml @@ -17,7 +17,7 @@ jobs: steps: # Inspired by https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 186c011797..ab2630c2d9 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index fc5323af63..6bae9157e3 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/sync_canon.yml b/.github/workflows/sync_canon.yml index 29a0ae2ce4..a8d2f32866 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 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..34c0ab7241 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index 2c2d5a51d0..42efaa1142 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index 436db10e9c..ca7454eaf0 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index e4d60777cd..2eb8f13dbc 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index bbdde7e9d6..5c94458e1d 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index ef7ad65b37..b965654fb9 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index 479f65a53a..36e31565b9 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility-noop.yml b/.github/workflows/verify_accessibility-noop.yml index 9af85ec2d1..c33acfd86d 100644 --- a/.github/workflows/verify_accessibility-noop.yml +++ b/.github/workflows/verify_accessibility-noop.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index 9803616b53..01c833e743 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index 6720e4d852..8e6df410ae 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml index 9a93be4090..a3b80f498a 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux-noop.yml b/.github/workflows/verify_e2e-linux-noop.yml index 4e3eeb2a8c..65fc6eccc9 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 30887980a4..69d16c1878 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index 454c4c011e..3d95749ff9 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows-noop.yml b/.github/workflows/verify_e2e-windows-noop.yml index 78d4c1e37f..e713f33ed6 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index 3ce85f371b..e656ea390c 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml index 126d70b9c8..7bc612bf64 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite-noop.yml b/.github/workflows/verify_microsite-noop.yml index 85cb1e3fee..da4bc6ba25 100644 --- a/.github/workflows/verify_microsite-noop.yml +++ b/.github/workflows/verify_microsite-noop.yml @@ -21,7 +21,7 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 2507428ec8..4cbff13185 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite_accessibility-noop.yml b/.github/workflows/verify_microsite_accessibility-noop.yml index 7d4028e2dd..d6f9d24b5e 100644 --- a/.github/workflows/verify_microsite_accessibility-noop.yml +++ b/.github/workflows/verify_microsite_accessibility-noop.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite_accessibility.yml b/.github/workflows/verify_microsite_accessibility.yml index e22241b3e3..0cdf9c040e 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_storybook-noop.yml b/.github/workflows/verify_storybook-noop.yml index 5b41d76e4c..392a218a83 100644 --- a/.github/workflows/verify_storybook-noop.yml +++ b/.github/workflows/verify_storybook-noop.yml @@ -28,7 +28,7 @@ jobs: name: Storybook steps: - name: Harden Runner - uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2 + uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index b919db658d..9bd6c891c9 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 with: egress-policy: audit diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index e3f6959929..c0fb3c1ef2 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@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4 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 4ab88c398a..1eacd4c104 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -281,4 +281,5 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [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..8f42a23db0 --- /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.0.2", + "react-dom": "^18.0.2", + "react-frame-component": "^5.2.7", + "shiki": "^1.26.1", + "storybook": "^8.4.7" + }, + "devDependencies": { + "@types/mdx": "^2.0.13", + "@types/node": "^20", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", + "eslint": "^8", + "eslint-config-next": "14.2.23", + "lightningcss": "^1.28.2", + "typescript": "^5" + } +} diff --git a/canon-docs/public/.nojekyll b/canon-docs/public/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/canon-docs/public/CNAME b/canon-docs/public/CNAME new file mode 100644 index 0000000000..01f6d196cc --- /dev/null +++ b/canon-docs/public/CNAME @@ -0,0 +1 @@ +canon.backstage.io \ No newline at end of file diff --git a/canon-docs/public/header.png b/canon-docs/public/header.png new file mode 100644 index 0000000000..507bd05ca7 Binary files /dev/null and b/canon-docs/public/header.png differ diff --git a/canon-docs/scripts/build-css.js b/canon-docs/scripts/build-css.js new file mode 100644 index 0000000000..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..b1276157b6 --- /dev/null +++ b/canon-docs/src/app/(docs)/components/button/page.mdx @@ -0,0 +1,173 @@ +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 `