diff --git a/.changeset/pre.json b/.changeset/pre.json index 83983c7741..26f1c07c0b 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -230,25 +230,38 @@ "add-missing-transitive-deps", "add-no-self-package-imports-lint-rule", "add-service-unavailable-error-name", + "app-routes-param-redirect-substitution", + "aws-wif-token-file", + "backend-test-utils-tracing-service-mock", + "backend-tracing-and-stuff", + "bitter-files-flash", + "brave-foxes-dance", "brave-groups-learn", "bui-bg-inherit-css-var", + "catalog-metrics-cache", "chubby-candies-cry", "clamp-react-aria-deps", "core-header-marker", "create-app-1777391535", "create-app-1777992972", + "create-app-pin-jest-30-3", "deduplicate-joinpaths-routing", "delegate-attach-mock-api-factory", "devtools-refresh-after-scheduled-task-action", "eager-wolves-enjoy", + "entities-order-driver", + "entity-tab-not-found", "extension-point-middleware-backend-app-api", "extension-point-middleware-backend-defaults", + "facets-count-optimization", + "facets-inner-join", "fancy-parents-sit", "feature-flag-invalid-warning", "fifty-clubs-play", "fix-alter-target-nullability", "fix-card-scroll-shadow", "fix-cardbody-min-height", + "fix-catalog-mcp-action-schemas", "fix-circular-self-imports", "fix-dialog-dark-theme-selector", "fix-embedded-postgres-config-paths", @@ -257,6 +270,7 @@ "fix-lockfile-removal-detection", "fix-scheduler-sleep-overflow", "fix-tabs-active-indicator-disappearing", + "fix-typos-internal-code", "fix-widget-resize-after-edit", "fluffy-brooms-sniff", "free-ways-flow", @@ -267,11 +281,13 @@ "gold-friends-end", "header-improvements", "header-sticky-prop", + "hot-socks-cross", "isolate-invalid-feature-flags", "kind-files-press", "lazy-rings-end", "limit-remix-icon-version", "link-focus-visible", + "many-tools-take", "mean-monkeys-create", "move-registermswtesthooks-to-test-utils", "msgraph-incremental-initial", @@ -279,21 +295,33 @@ "plugin-header-spacing", "preserve-external-hrefs-useDefinition", "purple-insects-cross", + "query-entities-inner-join", "remove-duplicate-deps", "remove-portable-schema-deprecated-prop", "remove-unused-deps", "remove-unused-getgithubintegrationconfig", "remove-uuid-dependency", "replace-duplicate-error-utilities", + "scaffolder-backend-form-decorators", + "scaffolder-common-form-decorators", + "scaffolder-form-decorator-api-public", + "scaffolder-form-decorator-input-schema", + "scaffolder-form-decorators", + "scaffolder-react-form-decorator-public", + "scaffolder-react-template-card-swappable", + "scaffolder-template-groups-config", + "search-indices-and-dedup", "shy-ways-lay", "slack-scope-message-updates", "swappable-notification-description", "tough-pots-dream", + "ui-date-picker", "ui-date-range-picker", "unprocessed-entities-read-auth-check", "unprocessed-entities-read-permission", "upgrade-module-federation-v2", "usetable-complete-debounce", + "warm-pumas-beam", "whole-bees-wave", "zod-v3-config-schema-docs", "zod-v4-dep-bump" diff --git a/docs/releases/v1.51.0-next.3-changelog.md b/docs/releases/v1.51.0-next.3-changelog.md new file mode 100644 index 0000000000..29e8fe94be --- /dev/null +++ b/docs/releases/v1.51.0-next.3-changelog.md @@ -0,0 +1,444 @@ +# Release v1.51.0-next.3 + +Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.51.0-next.3](https://backstage.github.io/upgrade-helper/?to=1.51.0-next.3) + +## @backstage/plugin-scaffolder-backend@4.0.0-next.2 + +### Major Changes + +- c78b3b6: Add explicit memory management to SecureTemplater usage + +### Minor Changes + +- 8006acf: The template parameter schema response now exposes a `formDecorators` field + instead of `EXPERIMENTAL_formDecorators`. Templates that still declare + `spec.EXPERIMENTAL_formDecorators` are read transparently and surfaced under + the new field. + +### Patch Changes + +- 1ecc3ca: Fixed spelling mistakes in internal code +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + - @backstage/plugin-scaffolder-node@0.13.3-next.2 + +## @backstage/integration-aws-node@0.2.0-next.1 + +### Minor Changes + +- 8df06ec: Added `webIdentityTokenFile` to `AwsIntegrationAccountConfig` and + `AwsIntegrationDefaultAccountConfig`. When set along with a `roleName`, + `DefaultAwsCredentialsManager` retrieves credentials by calling + `AssumeRoleWithWebIdentity` (via `fromTokenFile`) using the file's + contents as the web identity token. The file is re-read on each + credential refresh. + + The validator rejects combining `webIdentityTokenFile` with + `accessKeyId`/`secretAccessKey`, `profile`, or `externalId`, and + rejects setting it without a `roleName`. + +## @backstage/plugin-catalog-backend@3.7.0-next.2 + +### Minor Changes + +- c2de113: **BREAKING**: When paginating entities with an order field via `/entities/by-query`, entities that lack the order field are now excluded from both the result set and the `totalItems` count. Previously these entities appeared at the end of the sorted result via `NULLS LAST`, but cursor-based pagination could not actually reach them past the first page — the count over-reported the number of navigable entities. The new behavior aligns the count with what is actually returned. + + This also removes the `DISTINCT` deduplication from the sort-field CTE, which is a prerequisite for the planner to use the `(key, value, entity_id)` index in sort order and short-circuit on `LIMIT`. Installations with duplicate search rows should land the search-table deduplication migration before adopting this change. + +### Patch Changes + +- ccbad9d: Improved the performance of the `catalog_entities_count` metric. + + The legacy Prometheus and OpenTelemetry observable gauges previously each ran their own copy of the per-kind count query against the `search` table on every metrics scrape. On large catalogs this could pile up faster than the queries completed, contending for buffers and stalling the database. + + The two callbacks now share a single query result with a short in-process TTL cache, and the underlying query reads from `final_entities` instead of `search`, avoiding the bitmap heap scans that dominated the previous form. The emitted labels and values are unchanged. + +- add5d1a: Restructured the entity listing endpoint so that, when a sort field is specified, the search-by-key index drives the query rather than being side-joined onto `final_entities`. This lets PostgreSQL walk the `(key, value, entity_id)` index in already-sorted order and short-circuit on `LIMIT`, reducing typical broad-filter paginated list times from seconds to milliseconds. Entities that lack the sort field still appear at the end of sorted results (NULLS LAST semantics preserved), ordered by `entity_id`. + +- 387ea7d: Simplified the entity facets aggregation from `COUNT(DISTINCT entity_id)` to `COUNT(*)`. The unique constraint on `(entity_id, key, value)` guarantees each entity appears at most once per search row group, making the `DISTINCT` unnecessary. This allows the database to use a simpler aggregation plan. + +- 3f55b73: Improved the performance of the entity facets endpoint when filters are applied. The filtered entity set is now combined with the search table through an inner join rather than a `WHERE entity_id IN (subquery)`. Results are unchanged; on large catalogs the query planner is able to choose dramatically cheaper plans, with measured improvements ranging from roughly 1.2× on already-fast cases to 7× or more on high-cardinality facets. + +- cde3643: Added missing description to the `type` parameter on the `unregister-entity` MCP action. + +- 7445f0f: Added a migration that removes duplicate rows from the `search` table, creates covering indices for improved query performance, and adds a `UNIQUE` constraint on `(entity_id, key, value)`. + + This is a long-running migration on large catalogs. On PostgreSQL with millions of search rows, the index creation may take 5-15 minutes per index. During this time, other pods running the previous version will continue to serve traffic normally — the index creation does not block reads or writes. However, if a Kubernetes liveness probe kills the pod before the index build completes, the build is lost and the next startup will start over. On large tables this can repeat indefinitely. + + **For large installations**, it is recommended to run the following SQL commands against your PostgreSQL database **before deploying** this version. Each index build takes a few minutes but does not block reads or writes. If these have already completed, the migration will detect the existing indices and skip all work — startup will be instant. + + ```sql + -- Step 1: Remove duplicate search rows + WITH cte AS ( + SELECT ctid, row_number() OVER (PARTITION BY entity_id, key, value) AS rn + FROM search + ) + DELETE FROM search USING cte WHERE search.ctid = cte.ctid AND cte.rn > 1; + + -- Step 2: Create new indices (run each separately) + CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS + search_entity_key_value_idx ON search (entity_id, key, value); + CREATE INDEX CONCURRENTLY IF NOT EXISTS + search_key_value_entity_idx ON search (key, value, entity_id); + CREATE INDEX CONCURRENTLY IF NOT EXISTS + search_facets_covering_idx ON search (key, original_value, entity_id) + WHERE original_value IS NOT NULL; + + -- Step 3: Drop old indices that are no longer needed + DROP INDEX CONCURRENTLY IF EXISTS search_key_value_idx; + DROP INDEX CONCURRENTLY IF EXISTS search_key_original_value_idx; + ``` + + Also fixed `buildEntitySearch` to remove duplicate output for entities with duplicate array values, and added `ON CONFLICT DO UPDATE` to `syncSearchRows` so that concurrent stitching races are handled gracefully. + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + +## @backstage/plugin-scaffolder@1.37.0-next.2 + +### Minor Changes + +- dbeb7aa: Added experimental BUI (Backstage UI) form theme for scaffolder forms. All default field extensions render BUI variants when enabled. + + **Extension config:** + + ```yaml + app: + extensions: + - sub-page:scaffolder/templates: + config: + enableBackstageUi: true + ``` + + **JSX props:** + + ```tsx + + ``` + +- 8006acf: Promoted `formDecoratorsApiRef`, `ScaffolderFormDecoratorsApi`, + `DefaultScaffolderFormDecoratorsApi`, and `formDecoratorsApi` from `@alpha` + to `@public`. + +- d09c21c: The `sub-page:scaffolder/templates` extension now accepts a `groups` config + field that lets you define template groups on the template list page. Each group + has a `title` and a `filter` predicate. Templates not matched by any + configured group fall into an automatically appended "Other Templates" group. + With no groups configured, the page renders a single "Templates" group as + before. + + Example: + + ```yaml + app: + extensions: + - sub-page:scaffolder/templates: + config: + groups: + - title: Recommended Services + filter: + spec.type: service + - title: Documentation + filter: + spec.type: documentation + ``` + +### Patch Changes + +- 1ecc3ca: Fixed spelling mistakes in internal code +- 8006acf: Form decorator input is now parsed against the zod schema configured on the + decorator before the decorator runs, so defaults declared via `.default()` + are applied and invalid input is reported through the error API instead of + silently passing through. +- 8006acf: The template wizard now reads form decorators from the new + `spec.formDecorators` field on a template, falling back to the deprecated + `spec.EXPERIMENTAL_formDecorators` for templates that have not been migrated. +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.21.0-next.1 + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + - @backstage/plugin-catalog-react@2.1.5-next.1 + +## @backstage/plugin-scaffolder-common@2.2.0-next.1 + +### Minor Changes + +- 8006acf: Promote the `formDecorators` field on the `Template` spec out of experimental. + The previous `EXPERIMENTAL_formDecorators` field continues to work and is + kept as a deprecated alias. + +## @backstage/plugin-scaffolder-react@1.21.0-next.1 + +### Minor Changes + +- dbeb7aa: Added experimental BUI (Backstage UI) form theme for scaffolder forms. All default field extensions render BUI variants when enabled. + + **Extension config:** + + ```yaml + app: + extensions: + - sub-page:scaffolder/templates: + config: + enableBackstageUi: true + ``` + + **JSX props:** + + ```tsx + + ``` + +- 8006acf: Promoted `FormDecoratorBlueprint` and `ScaffolderFormDecorator` from `@alpha` + to `@public`. + +- d09c21c: The `TemplateCard` component is now a swappable component. Apps using the new + frontend system can replace it by registering a `SwappableComponentBlueprint` + that targets `TemplateCard`. Components used as the swappable implementation + receive `TemplateCardComponentProps`, where `onSelected` is a zero-argument + callback bound to the rendered template. Existing usage continues to work + unchanged. + +### Patch Changes + +- Updated dependencies + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + - @backstage/plugin-catalog-react@2.1.5-next.1 + +## @backstage/backend-defaults@0.17.1-next.2 + +### Patch Changes + +- 90b572e: Adds an alpha `TracingService` to provide a unified interface for emitting trace spans across Backstage plugins. +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + +## @backstage/backend-dynamic-feature-service@0.8.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + - @backstage/plugin-catalog-backend@3.7.0-next.2 + - @backstage/plugin-scaffolder-node@0.13.3-next.2 + +## @backstage/backend-plugin-api@1.9.1-next.1 + +### Patch Changes + +- 90b572e: Adds an alpha `TracingService` to provide a unified interface for emitting trace spans across Backstage plugins. + +## @backstage/backend-test-utils@1.11.3-next.2 + +### Patch Changes + +- 7fb12b8: Added a new tracing service mock to be leveraged in tests +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + +## @backstage/create-app@0.8.3-next.3 + +### Patch Changes + +- 14e2056: Pinned the Jest version range in app templates to `~30.2.0` to prevent automatic upgrades to Jest 30.4.x, which requires Node.js v24.9+ and breaks tests on Node 22. + +## @backstage/ui@0.15.0-next.3 + +### Patch Changes + +- 4bb649d: Fixed Table with row selection creating phantom scroll height on ancestor elements by establishing a containing block for visually-hidden checkbox inputs. + + **Affected components:** Table, TableRoot + +- d726bcd: Added new `DatePicker` component — combines a date field and a calendar popover for selecting a date, built on React Aria with full keyboard and screen reader accessibility. Uses BUI design tokens throughout, including auto-incremented backgrounds via the bg consumer pattern. + + **Affected components:** DatePicker + +## @backstage/plugin-app@0.4.6-next.2 + +### Patch Changes + +- a345820: The `app/routes` redirect config now supports path parameter substitution in the `to` target. Named params (`:userId`) and splat params (`*`) captured by the `from` path are replaced in the `to` string before navigating, making it possible to express redirects like: + + ```yaml + app: + extensions: + - app/routes: + config: + redirects: + - from: /users/:userId + to: /profile/:userId + - from: /old-docs + to: /docs/* + ``` + +- Updated dependencies + - @backstage/ui@0.15.0-next.3 + +## @backstage/plugin-auth@0.1.8-next.2 + +### Patch Changes + +- 4f62755: Improved the OAuth consent dialog for MCP authorization by showing more client details, including the client metadata host for CIMD clients, the metadata URL, callback URL, and requested scopes. +- Updated dependencies + - @backstage/ui@0.15.0-next.3 + +## @backstage/plugin-auth-backend@0.28.1-next.2 + +### Patch Changes + +- 4f62755: Improved the OAuth consent dialog for MCP authorization by showing more client details, including the client metadata host for CIMD clients, the metadata URL, callback URL, and requested scopes. +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + +## @backstage/plugin-catalog@2.0.5-next.1 + +### Patch Changes + +- 728629c: Fixed an issue where navigating to an unknown sub-path on an entity page (for example `/catalog/default/component/foo/blob`) would silently render the first available route. Unknown paths now show the standard not-found page instead. +- Updated dependencies + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + - @backstage/plugin-catalog-react@2.1.5-next.1 + +## @backstage/plugin-catalog-backend-module-aws@0.4.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + +## @backstage/plugin-catalog-backend-module-gitlab@0.8.3-next.2 + +### Patch Changes + +- 1ecc3ca: Fixed spelling mistakes in internal code +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.7.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + - @backstage/plugin-catalog-backend@3.7.0-next.2 + +## @backstage/plugin-catalog-backend-module-logs@0.1.22-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/plugin-catalog-backend@3.7.0-next.2 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + +## @backstage/plugin-kubernetes-backend@0.21.4-next.1 + +### Patch Changes + +- 1ecc3ca: Fixed spelling mistakes in internal code +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + +## @backstage/plugin-kubernetes-react@0.5.19-next.1 + +### Patch Changes + +- e68cb8a: Added optional clustersCacheTtlMs option to KubernetesBackendClient that caches getClusters() responses for the specified duration, avoiding repeated /clusters requests when multiple proxy calls resolve cluster auth in quick succession. + +## @backstage/plugin-notifications-backend-module-email@0.3.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + +## @backstage/plugin-scaffolder-node@0.13.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-test-utils@1.11.3-next.2 + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + +## @backstage/plugin-search-backend-module-elasticsearch@1.8.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + +## @backstage/plugin-techdocs-node@1.15.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + +## example-app@0.0.35-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-app@0.4.6-next.2 + - @backstage/plugin-scaffolder-react@1.21.0-next.1 + - @backstage/plugin-scaffolder@1.37.0-next.2 + - @backstage/plugin-catalog@2.0.5-next.1 + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-auth@0.1.8-next.2 + - @backstage/plugin-catalog-react@2.1.5-next.1 + +## example-app-legacy@0.2.121-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.21.0-next.1 + - @backstage/plugin-scaffolder@1.37.0-next.2 + - @backstage/plugin-catalog@2.0.5-next.1 + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-catalog-react@2.1.5-next.1 + +## example-backend@0.0.50-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + - @backstage/plugin-scaffolder-backend@4.0.0-next.2 + - @backstage/plugin-catalog-backend@3.7.0-next.2 + - @backstage/plugin-kubernetes-backend@0.21.4-next.1 + - @backstage/plugin-auth-backend@0.28.1-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.8.3-next.2 + - @backstage/plugin-catalog-backend-module-logs@0.1.22-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.20-next.1 + +## @internal/scaffolder@0.0.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.21.0-next.1 diff --git a/package.json b/package.json index ff247ce01f..1600433fb3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "root", - "version": "1.51.0-next.2", + "version": "1.51.0-next.3", "backstage": { "cli": { "new": { diff --git a/packages/app-legacy/CHANGELOG.md b/packages/app-legacy/CHANGELOG.md index 312b6d06bf..0c2b57afe9 100644 --- a/packages/app-legacy/CHANGELOG.md +++ b/packages/app-legacy/CHANGELOG.md @@ -1,5 +1,16 @@ # example-app-legacy +## 0.2.121-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.21.0-next.1 + - @backstage/plugin-scaffolder@1.37.0-next.2 + - @backstage/plugin-catalog@2.0.5-next.1 + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-catalog-react@2.1.5-next.1 + ## 0.2.121-next.0 ### Patch Changes diff --git a/packages/app-legacy/package.json b/packages/app-legacy/package.json index b908be897c..bbffeacc3c 100644 --- a/packages/app-legacy/package.json +++ b/packages/app-legacy/package.json @@ -1,6 +1,6 @@ { "name": "example-app-legacy", - "version": "0.2.121-next.0", + "version": "0.2.121-next.1", "backstage": { "role": "frontend" }, diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index ac9fdf7c77..33f5fab7c1 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,18 @@ # example-app +## 0.0.35-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-app@0.4.6-next.2 + - @backstage/plugin-scaffolder-react@1.21.0-next.1 + - @backstage/plugin-scaffolder@1.37.0-next.2 + - @backstage/plugin-catalog@2.0.5-next.1 + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-auth@0.1.8-next.2 + - @backstage/plugin-catalog-react@2.1.5-next.1 + ## 0.0.35-next.0 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 7406c051bd..2b844fb223 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.0.35-next.0", + "version": "0.0.35-next.1", "backstage": { "role": "frontend" }, diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 35a5bc5d2f..79dac05c48 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.17.1-next.2 + +### Patch Changes + +- 90b572e: Adds an alpha `TracingService` to provide a unified interface for emitting trace spans across Backstage plugins. +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + ## 0.17.1-next.1 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index db6f075aac..9894ce5704 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-defaults", - "version": "0.17.1-next.1", + "version": "0.17.1-next.2", "description": "Backend defaults used by Backstage backend apps", "backstage": { "role": "node-library" diff --git a/packages/backend-dynamic-feature-service/CHANGELOG.md b/packages/backend-dynamic-feature-service/CHANGELOG.md index 3a9a4f7d10..1aabecead9 100644 --- a/packages/backend-dynamic-feature-service/CHANGELOG.md +++ b/packages/backend-dynamic-feature-service/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/backend-dynamic-feature-service +## 0.8.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + - @backstage/plugin-catalog-backend@3.7.0-next.2 + - @backstage/plugin-scaffolder-node@0.13.3-next.2 + ## 0.8.2-next.0 ### Patch Changes diff --git a/packages/backend-dynamic-feature-service/package.json b/packages/backend-dynamic-feature-service/package.json index 381a9525d6..6cfa1deb5b 100644 --- a/packages/backend-dynamic-feature-service/package.json +++ b/packages/backend-dynamic-feature-service/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-dynamic-feature-service", - "version": "0.8.2-next.0", + "version": "0.8.2-next.1", "description": "Backstage dynamic feature service", "backstage": { "role": "node-library" diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 78ea0628af..f54b84b204 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/backend-plugin-api +## 1.9.1-next.1 + +### Patch Changes + +- 90b572e: Adds an alpha `TracingService` to provide a unified interface for emitting trace spans across Backstage plugins. + ## 1.9.1-next.0 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index c6c8eb2a40..3944e4d195 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-plugin-api", - "version": "1.9.1-next.0", + "version": "1.9.1-next.1", "description": "Core API used by Backstage backend plugins", "backstage": { "role": "node-library" diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index beb06f083b..6ad2c6a574 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-test-utils +## 1.11.3-next.2 + +### Patch Changes + +- 7fb12b8: Added a new tracing service mock to be leveraged in tests +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + ## 1.11.3-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index 0256992ba2..06abbeae85 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-test-utils", - "version": "1.11.3-next.1", + "version": "1.11.3-next.2", "description": "Test helpers library for Backstage backends", "backstage": { "role": "node-library" diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index e14a65b6ab..141479820c 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,20 @@ # example-backend +## 0.0.50-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + - @backstage/plugin-scaffolder-backend@4.0.0-next.2 + - @backstage/plugin-catalog-backend@3.7.0-next.2 + - @backstage/plugin-kubernetes-backend@0.21.4-next.1 + - @backstage/plugin-auth-backend@0.28.1-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.8.3-next.2 + - @backstage/plugin-catalog-backend-module-logs@0.1.22-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.20-next.1 + ## 0.0.50-next.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index f36ffaacc3..a7fc1b37e9 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.0.50-next.2", + "version": "0.0.50-next.3", "backstage": { "role": "backend" }, diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 472170f770..7a0a255ceb 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/create-app +## 0.8.3-next.3 + +### Patch Changes + +- 14e2056: Pinned the Jest version range in app templates to `~30.2.0` to prevent automatic upgrades to Jest 30.4.x, which requires Node.js v24.9+ and breaks tests on Node 22. + ## 0.8.3-next.2 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index ad81c91f11..097bce6a9e 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/create-app", - "version": "0.8.3-next.2", + "version": "0.8.3-next.3", "description": "A CLI that helps you create your own Backstage app", "backstage": { "role": "cli" diff --git a/packages/integration-aws-node/CHANGELOG.md b/packages/integration-aws-node/CHANGELOG.md index faf5838d00..15d4399233 100644 --- a/packages/integration-aws-node/CHANGELOG.md +++ b/packages/integration-aws-node/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/integration-aws-node +## 0.2.0-next.1 + +### Minor Changes + +- 8df06ec: Added `webIdentityTokenFile` to `AwsIntegrationAccountConfig` and + `AwsIntegrationDefaultAccountConfig`. When set along with a `roleName`, + `DefaultAwsCredentialsManager` retrieves credentials by calling + `AssumeRoleWithWebIdentity` (via `fromTokenFile`) using the file's + contents as the web identity token. The file is re-read on each + credential refresh. + + The validator rejects combining `webIdentityTokenFile` with + `accessKeyId`/`secretAccessKey`, `profile`, or `externalId`, and + rejects setting it without a `roleName`. + ## 0.1.22-next.0 ### Patch Changes diff --git a/packages/integration-aws-node/package.json b/packages/integration-aws-node/package.json index 5ef8687a09..9eca829a27 100644 --- a/packages/integration-aws-node/package.json +++ b/packages/integration-aws-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/integration-aws-node", - "version": "0.1.22-next.0", + "version": "0.2.0-next.1", "description": "Helpers for fetching AWS account credentials", "backstage": { "role": "node-library" diff --git a/packages/scaffolder-internal/CHANGELOG.md b/packages/scaffolder-internal/CHANGELOG.md index 2c50e6e6f5..f614ea1468 100644 --- a/packages/scaffolder-internal/CHANGELOG.md +++ b/packages/scaffolder-internal/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/scaffolder +## 0.0.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.21.0-next.1 + ## 0.0.21-next.0 ### Patch Changes diff --git a/packages/scaffolder-internal/package.json b/packages/scaffolder-internal/package.json index 083ed71cce..47b45e3720 100644 --- a/packages/scaffolder-internal/package.json +++ b/packages/scaffolder-internal/package.json @@ -1,6 +1,6 @@ { "name": "@internal/scaffolder", - "version": "0.0.21-next.0", + "version": "0.0.21-next.1", "backstage": { "role": "web-library", "inline": true diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 4776fbb952..771f4f866d 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/ui +## 0.15.0-next.3 + +### Patch Changes + +- 4bb649d: Fixed Table with row selection creating phantom scroll height on ancestor elements by establishing a containing block for visually-hidden checkbox inputs. + + **Affected components:** Table, TableRoot + +- d726bcd: Added new `DatePicker` component — combines a date field and a calendar popover for selecting a date, built on React Aria with full keyboard and screen reader accessibility. Uses BUI design tokens throughout, including auto-incremented backgrounds via the bg consumer pattern. + + **Affected components:** DatePicker + ## 0.15.0-next.2 ### Patch Changes diff --git a/packages/ui/package.json b/packages/ui/package.json index 764a552480..793aff9c32 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/ui", - "version": "0.15.0-next.2", + "version": "0.15.0-next.3", "backstage": { "role": "web-library" }, diff --git a/plugins/app/CHANGELOG.md b/plugins/app/CHANGELOG.md index 0aea83e87e..6ada61acdf 100644 --- a/plugins/app/CHANGELOG.md +++ b/plugins/app/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-app +## 0.4.6-next.2 + +### Patch Changes + +- a345820: The `app/routes` redirect config now supports path parameter substitution in the `to` target. Named params (`:userId`) and splat params (`*`) captured by the `from` path are replaced in the `to` string before navigating, making it possible to express redirects like: + + ```yaml + app: + extensions: + - app/routes: + config: + redirects: + - from: /users/:userId + to: /profile/:userId + - from: /old-docs + to: /docs/* + ``` + +- Updated dependencies + - @backstage/ui@0.15.0-next.3 + ## 0.4.6-next.1 ### Patch Changes diff --git a/plugins/app/package.json b/plugins/app/package.json index 316e5bf328..05be546fe3 100644 --- a/plugins/app/package.json +++ b/plugins/app/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-app", - "version": "0.4.6-next.1", + "version": "0.4.6-next.2", "backstage": { "role": "frontend-plugin", "pluginId": "app", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 1b79aa388b..605e47dc6a 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth-backend +## 0.28.1-next.2 + +### Patch Changes + +- 4f62755: Improved the OAuth consent dialog for MCP authorization by showing more client details, including the client metadata host for CIMD clients, the metadata URL, callback URL, and requested scopes. +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + ## 0.28.1-next.1 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index c89e26f5a8..b40a7391f7 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend", - "version": "0.28.1-next.1", + "version": "0.28.1-next.2", "description": "A Backstage backend plugin that handles authentication", "backstage": { "role": "backend-plugin", diff --git a/plugins/auth/CHANGELOG.md b/plugins/auth/CHANGELOG.md index 33a0c3b974..445a6a9ce7 100644 --- a/plugins/auth/CHANGELOG.md +++ b/plugins/auth/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-auth +## 0.1.8-next.2 + +### Patch Changes + +- 4f62755: Improved the OAuth consent dialog for MCP authorization by showing more client details, including the client metadata host for CIMD clients, the metadata URL, callback URL, and requested scopes. +- Updated dependencies + - @backstage/ui@0.15.0-next.3 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/auth/package.json b/plugins/auth/package.json index abee5738fd..55aeece724 100644 --- a/plugins/auth/package.json +++ b/plugins/auth/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "backstage": { "role": "frontend-plugin", "pluginId": "auth", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index f4e90f36ca..d297ad7161 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.4.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + ## 0.4.23-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 1db24e7df7..4526a3b7f0 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", - "version": "0.4.23-next.1", + "version": "0.4.23-next.2", "description": "A Backstage catalog backend module that helps integrate towards AWS", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 36c635b1f6..40d5ebd48d 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.8.3-next.2 + +### Patch Changes + +- 1ecc3ca: Fixed spelling mistakes in internal code +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + ## 0.8.3-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 019fc6cd9d..30bba0d2df 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", - "version": "0.8.3-next.1", + "version": "0.8.3-next.2", "description": "A Backstage catalog backend module that helps integrate towards GitLab", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index f7cec306ad..dca9115343 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.7.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/backend-defaults@0.17.1-next.2 + - @backstage/plugin-catalog-backend@3.7.0-next.2 + ## 0.7.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 37e43159ab..bff4518604 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", - "version": "0.7.12-next.1", + "version": "0.7.12-next.2", "description": "An entity provider for streaming large asset sources into the catalog", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-logs/CHANGELOG.md b/plugins/catalog-backend-module-logs/CHANGELOG.md index de76c82602..b52c8b778d 100644 --- a/plugins/catalog-backend-module-logs/CHANGELOG.md +++ b/plugins/catalog-backend-module-logs/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-catalog-backend-module-logs +## 0.1.22-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/plugin-catalog-backend@3.7.0-next.2 + ## 0.1.22-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-logs/package.json b/plugins/catalog-backend-module-logs/package.json index e0c4f3067e..815cd8667f 100644 --- a/plugins/catalog-backend-module-logs/package.json +++ b/plugins/catalog-backend-module-logs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-logs", - "version": "0.1.22-next.0", + "version": "0.1.22-next.1", "description": "A module that subscribes to catalog related events and logs them.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md index 674c6d1097..306f7d6eec 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md +++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-catalog-backend-module-scaffolder-entity-model +## 0.2.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + ## 0.2.20-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json index 102a846b70..b5a59aa75d 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json +++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model", - "version": "0.2.20-next.0", + "version": "0.2.20-next.1", "description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 537d6ec2b9..77a94341c4 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,58 @@ # @backstage/plugin-catalog-backend +## 3.7.0-next.2 + +### Minor Changes + +- c2de113: **BREAKING**: When paginating entities with an order field via `/entities/by-query`, entities that lack the order field are now excluded from both the result set and the `totalItems` count. Previously these entities appeared at the end of the sorted result via `NULLS LAST`, but cursor-based pagination could not actually reach them past the first page — the count over-reported the number of navigable entities. The new behavior aligns the count with what is actually returned. + + This also removes the `DISTINCT` deduplication from the sort-field CTE, which is a prerequisite for the planner to use the `(key, value, entity_id)` index in sort order and short-circuit on `LIMIT`. Installations with duplicate search rows should land the search-table deduplication migration before adopting this change. + +### Patch Changes + +- ccbad9d: Improved the performance of the `catalog_entities_count` metric. + + The legacy Prometheus and OpenTelemetry observable gauges previously each ran their own copy of the per-kind count query against the `search` table on every metrics scrape. On large catalogs this could pile up faster than the queries completed, contending for buffers and stalling the database. + + The two callbacks now share a single query result with a short in-process TTL cache, and the underlying query reads from `final_entities` instead of `search`, avoiding the bitmap heap scans that dominated the previous form. The emitted labels and values are unchanged. + +- add5d1a: Restructured the entity listing endpoint so that, when a sort field is specified, the search-by-key index drives the query rather than being side-joined onto `final_entities`. This lets PostgreSQL walk the `(key, value, entity_id)` index in already-sorted order and short-circuit on `LIMIT`, reducing typical broad-filter paginated list times from seconds to milliseconds. Entities that lack the sort field still appear at the end of sorted results (NULLS LAST semantics preserved), ordered by `entity_id`. +- 387ea7d: Simplified the entity facets aggregation from `COUNT(DISTINCT entity_id)` to `COUNT(*)`. The unique constraint on `(entity_id, key, value)` guarantees each entity appears at most once per search row group, making the `DISTINCT` unnecessary. This allows the database to use a simpler aggregation plan. +- 3f55b73: Improved the performance of the entity facets endpoint when filters are applied. The filtered entity set is now combined with the search table through an inner join rather than a `WHERE entity_id IN (subquery)`. Results are unchanged; on large catalogs the query planner is able to choose dramatically cheaper plans, with measured improvements ranging from roughly 1.2× on already-fast cases to 7× or more on high-cardinality facets. +- cde3643: Added missing description to the `type` parameter on the `unregister-entity` MCP action. +- 7445f0f: Added a migration that removes duplicate rows from the `search` table, creates covering indices for improved query performance, and adds a `UNIQUE` constraint on `(entity_id, key, value)`. + + This is a long-running migration on large catalogs. On PostgreSQL with millions of search rows, the index creation may take 5-15 minutes per index. During this time, other pods running the previous version will continue to serve traffic normally — the index creation does not block reads or writes. However, if a Kubernetes liveness probe kills the pod before the index build completes, the build is lost and the next startup will start over. On large tables this can repeat indefinitely. + + **For large installations**, it is recommended to run the following SQL commands against your PostgreSQL database **before deploying** this version. Each index build takes a few minutes but does not block reads or writes. If these have already completed, the migration will detect the existing indices and skip all work — startup will be instant. + + ```sql + -- Step 1: Remove duplicate search rows + WITH cte AS ( + SELECT ctid, row_number() OVER (PARTITION BY entity_id, key, value) AS rn + FROM search + ) + DELETE FROM search USING cte WHERE search.ctid = cte.ctid AND cte.rn > 1; + + -- Step 2: Create new indices (run each separately) + CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS + search_entity_key_value_idx ON search (entity_id, key, value); + CREATE INDEX CONCURRENTLY IF NOT EXISTS + search_key_value_entity_idx ON search (key, value, entity_id); + CREATE INDEX CONCURRENTLY IF NOT EXISTS + search_facets_covering_idx ON search (key, original_value, entity_id) + WHERE original_value IS NOT NULL; + + -- Step 3: Drop old indices that are no longer needed + DROP INDEX CONCURRENTLY IF EXISTS search_key_value_idx; + DROP INDEX CONCURRENTLY IF EXISTS search_key_original_value_idx; + ``` + + Also fixed `buildEntitySearch` to remove duplicate output for entities with duplicate array values, and added `ON CONFLICT DO UPDATE` to `syncSearchRows` so that concurrent stitching races are handled gracefully. + +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + ## 3.6.2-next.1 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 919257999c..758dad046d 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend", - "version": "3.6.2-next.1", + "version": "3.7.0-next.2", "description": "The Backstage backend plugin that provides the Backstage catalog", "backstage": { "role": "backend-plugin", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 6812040268..02f2ad4ee1 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog +## 2.0.5-next.1 + +### Patch Changes + +- 728629c: Fixed an issue where navigating to an unknown sub-path on an entity page (for example `/catalog/default/component/foo/blob`) would silently render the first available route. Unknown paths now show the standard not-found page instead. +- Updated dependencies + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + - @backstage/plugin-catalog-react@2.1.5-next.1 + ## 2.0.5-next.0 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index c9671dd645..1ae48e29ff 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog", - "version": "2.0.5-next.0", + "version": "2.0.5-next.1", "description": "The Backstage plugin for browsing the Backstage catalog", "backstage": { "role": "frontend-plugin", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index cd25bb90f8..d078f9121d 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-kubernetes-backend +## 0.21.4-next.1 + +### Patch Changes + +- 1ecc3ca: Fixed spelling mistakes in internal code +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + ## 0.21.4-next.0 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index c07de9cf25..b6096b4550 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-backend", - "version": "0.21.4-next.0", + "version": "0.21.4-next.1", "description": "A Backstage backend plugin that integrates towards Kubernetes", "backstage": { "role": "backend-plugin", diff --git a/plugins/kubernetes-react/CHANGELOG.md b/plugins/kubernetes-react/CHANGELOG.md index 7c0dc9e35c..52cb0adfc6 100644 --- a/plugins/kubernetes-react/CHANGELOG.md +++ b/plugins/kubernetes-react/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-kubernetes-react +## 0.5.19-next.1 + +### Patch Changes + +- e68cb8a: Added optional clustersCacheTtlMs option to KubernetesBackendClient that caches getClusters() responses for the specified duration, avoiding repeated /clusters requests when multiple proxy calls resolve cluster auth in quick succession. + ## 0.5.19-next.0 ### Patch Changes diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json index 889119b7bc..3e73698c74 100644 --- a/plugins/kubernetes-react/package.json +++ b/plugins/kubernetes-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-react", - "version": "0.5.19-next.0", + "version": "0.5.19-next.1", "description": "Web library for the kubernetes-react plugin", "backstage": { "role": "web-library", diff --git a/plugins/notifications-backend-module-email/CHANGELOG.md b/plugins/notifications-backend-module-email/CHANGELOG.md index 8c5740218a..ac12a85725 100644 --- a/plugins/notifications-backend-module-email/CHANGELOG.md +++ b/plugins/notifications-backend-module-email/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-notifications-backend-module-email +## 0.3.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + ## 0.3.21-next.0 ### Patch Changes diff --git a/plugins/notifications-backend-module-email/package.json b/plugins/notifications-backend-module-email/package.json index e481e41de1..2f8b73c4d2 100644 --- a/plugins/notifications-backend-module-email/package.json +++ b/plugins/notifications-backend-module-email/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-notifications-backend-module-email", - "version": "0.3.21-next.0", + "version": "0.3.21-next.1", "description": "The email backend module for the notifications plugin.", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 55a65c58ae..8061350ccb 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-scaffolder-backend +## 4.0.0-next.2 + +### Major Changes + +- c78b3b6: Add explicit memory management to SecureTemplater usage + +### Minor Changes + +- 8006acf: The template parameter schema response now exposes a `formDecorators` field + instead of `EXPERIMENTAL_formDecorators`. Templates that still declare + `spec.EXPERIMENTAL_formDecorators` are read transparently and surfaced under + the new field. + +### Patch Changes + +- 1ecc3ca: Fixed spelling mistakes in internal code +- Updated dependencies + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + - @backstage/plugin-scaffolder-node@0.13.3-next.2 + ## 3.5.0-next.1 ### Minor Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 8ebdc05af1..02cb4c3d2b 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend", - "version": "3.5.0-next.1", + "version": "4.0.0-next.2", "description": "The Backstage backend plugin that helps you create new things", "backstage": { "role": "backend-plugin", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index 908acb4138..7a4fc5e4df 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-scaffolder-common +## 2.2.0-next.1 + +### Minor Changes + +- 8006acf: Promote the `formDecorators` field on the `Template` spec out of experimental. + The previous `EXPERIMENTAL_formDecorators` field continues to work and is + kept as a deprecated alias. + ## 2.1.1-next.0 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index 2f18cef0f9..e6082dd5f7 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-common", - "version": "2.1.1-next.0", + "version": "2.2.0-next.1", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", "backstage": { "role": "common-library", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index ffa12bbfeb..1b75178350 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-node +## 0.13.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-test-utils@1.11.3-next.2 + - @backstage/backend-plugin-api@1.9.1-next.1 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + ## 0.13.3-next.1 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index a39c8636c5..aae95f224c 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-node", - "version": "0.13.3-next.1", + "version": "0.13.3-next.2", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", "backstage": { "role": "node-library", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index 77643bf431..590b5abf7d 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,43 @@ # @backstage/plugin-scaffolder-react +## 1.21.0-next.1 + +### Minor Changes + +- dbeb7aa: Added experimental BUI (Backstage UI) form theme for scaffolder forms. All default field extensions render BUI variants when enabled. + + **Extension config:** + + ```yaml + app: + extensions: + - sub-page:scaffolder/templates: + config: + enableBackstageUi: true + ``` + + **JSX props:** + + ```tsx + + ``` + +- 8006acf: Promoted `FormDecoratorBlueprint` and `ScaffolderFormDecorator` from `@alpha` + to `@public`. +- d09c21c: The `TemplateCard` component is now a swappable component. Apps using the new + frontend system can replace it by registering a `SwappableComponentBlueprint` + that targets `TemplateCard`. Components used as the swappable implementation + receive `TemplateCardComponentProps`, where `onSelected` is a zero-argument + callback bound to the rendered template. Existing usage continues to work + unchanged. + +### Patch Changes + +- Updated dependencies + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + - @backstage/plugin-catalog-react@2.1.5-next.1 + ## 1.20.2-next.0 ### Patch Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index f24bed8c73..a34f25cb2b 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-react", - "version": "1.20.2-next.0", + "version": "1.21.0-next.1", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", "backstage": { "role": "web-library", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 19853aa839..c0ef0e3ee5 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,69 @@ # @backstage/plugin-scaffolder +## 1.37.0-next.2 + +### Minor Changes + +- dbeb7aa: Added experimental BUI (Backstage UI) form theme for scaffolder forms. All default field extensions render BUI variants when enabled. + + **Extension config:** + + ```yaml + app: + extensions: + - sub-page:scaffolder/templates: + config: + enableBackstageUi: true + ``` + + **JSX props:** + + ```tsx + + ``` + +- 8006acf: Promoted `formDecoratorsApiRef`, `ScaffolderFormDecoratorsApi`, + `DefaultScaffolderFormDecoratorsApi`, and `formDecoratorsApi` from `@alpha` + to `@public`. +- d09c21c: The `sub-page:scaffolder/templates` extension now accepts a `groups` config + field that lets you define template groups on the template list page. Each group + has a `title` and a `filter` predicate. Templates not matched by any + configured group fall into an automatically appended "Other Templates" group. + With no groups configured, the page renders a single "Templates" group as + before. + + Example: + + ```yaml + app: + extensions: + - sub-page:scaffolder/templates: + config: + groups: + - title: Recommended Services + filter: + spec.type: service + - title: Documentation + filter: + spec.type: documentation + ``` + +### Patch Changes + +- 1ecc3ca: Fixed spelling mistakes in internal code +- 8006acf: Form decorator input is now parsed against the zod schema configured on the + decorator before the decorator runs, so defaults declared via `.default()` + are applied and invalid input is reported through the error API instead of + silently passing through. +- 8006acf: The template wizard now reads form decorators from the new + `spec.formDecorators` field on a template, falling back to the deprecated + `spec.EXPERIMENTAL_formDecorators` for templates that have not been migrated. +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.21.0-next.1 + - @backstage/ui@0.15.0-next.3 + - @backstage/plugin-scaffolder-common@2.2.0-next.1 + - @backstage/plugin-catalog-react@2.1.5-next.1 + ## 1.36.3-next.1 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 91960324d4..061c942fa9 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder", - "version": "1.36.3-next.1", + "version": "1.37.0-next.2", "description": "The Backstage plugin that helps you create new things", "backstage": { "role": "frontend-plugin", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 6e9928a539..ce0325becc 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.8.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + ## 1.8.3-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index a20bf4eff6..0e3dc14a34 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", - "version": "1.8.3-next.1", + "version": "1.8.3-next.2", "description": "A module for the search backend that implements search using ElasticSearch", "backstage": { "role": "backend-plugin-module", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index e7dcfe6f58..9b147fd441 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-techdocs-node +## 1.15.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.2.0-next.1 + - @backstage/backend-plugin-api@1.9.1-next.1 + ## 1.15.0-next.1 ### Minor Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index a212c1289d..6a80a859ab 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-node", - "version": "1.15.0-next.1", + "version": "1.15.0-next.2", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", "backstage": { "role": "node-library",