19202 Commits

Author SHA1 Message Date
Johan Persson feaf3d1ade fix(ui): fix HeaderNav hover indicator covering tab text
Add `position: relative` and `z-index: 2` to nav items so they
paint above the hover/active indicator, matching the Tabs pattern.
This fixes themes with opaque `--bui-bg-neutral-2` values obscuring
tab labels on hover.

Also fix `--bui-font-family` (non-existent) to `--bui-font-regular`.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-31 13:43:25 +02:00
Patrik Oldsberg 9bfa74bbb5 Merge pull request #33446 from Sarabadu/patch-2
Rename frontend-plugin to legacy-frontend-plugin
2026-03-31 10:30:13 +02:00
Fredrik Adelöw 2e5c5f85b2 Bump glob to v13 and rollup to v4.59+ to fix security vulnerabilities
Addresses the high severity rollup path traversal vulnerability
(GHSA-mw96-cpmx-2vgc) and the glob security advisory by upgrading
all instances across the monorepo. Updates code that used the legacy
callback-based glob API to use the modern promise/sync API.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-30 23:13:08 +02:00
Fredrik Adelöw 0419acede2 Revert "Bump glob to v13 and rollup to v4.59+ to fix security vulnerabilities"
This reverts commit 6d76b1729b.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-30 23:11:17 +02:00
Fredrik Adelöw 6d76b1729b Bump glob to v13 and rollup to v4.59+ to fix security vulnerabilities
Addresses the high severity rollup path traversal vulnerability
(GHSA-mw96-cpmx-2vgc) and the glob security advisory by upgrading
all instances across the monorepo. Updates code that used the legacy
callback-based glob API to use the modern promise/sync API.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-30 23:10:09 +02:00
Fredrik Adelöw d06ba3a58e Revert "Bump glob to v13 and rollup to v4.59+ to fix security vulnerabilities"
This reverts commit 91b359ee5f.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-30 23:05:11 +02:00
Fredrik Adelöw 91b359ee5f Bump glob to v13 and rollup to v4.59+ to fix security vulnerabilities
Addresses the high severity rollup path traversal vulnerability
(GHSA-mw96-cpmx-2vgc) and the glob security advisory by upgrading
all instances across the monorepo. Updates code that used the legacy
callback-based glob API to use the modern promise/sync API.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-30 23:02:37 +02:00
Vincenzo Scamporlino d96b7281dc Make owner parameter optional in getAppToken and getInstallationCredentials methods
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
2026-03-30 21:59:27 +02:00
Vincenzo Scamporlino d1124998ca Fix SingleInstanceGithubCredentialsProvider to return app credentials for bare host URLs
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
2026-03-30 21:35:40 +02:00
Patrik Oldsberg 96657b9812 Merge pull request #33549 from backstage/rugvip/hide-compat-wrapper-headers
core-compat-api: hide page header for compat-wrapped legacy pages
2026-03-30 21:22:19 +02:00
Patrik Oldsberg cd0a7b58cc Merge pull request #33581 from backstage/rugvip/dual-frontend-system-support
plugins: add title and icon to NFS plugin definitions
2026-03-30 17:26:05 +02:00
Fredrik Adelöw aa8c802cf2 Merge pull request #33672 from backstage/freben/kebabs
remove some cli deprecation warnings
2026-03-30 13:42:46 +02:00
renovate[bot] c368cf3db7 chore(deps): update dependency @types/use-sync-external-store to v1
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-30 10:43:01 +00:00
MT Lewis c16c5084d0 cli-module-build: pack packages in batches inside createDistWorkspace
When passing --always-yarn-pack, we previously
packed all packages in parallel. Since
package.json files are rewritten during packing,
this could cause intermittent "No local workspace
found for this range" failures.

To fix this, we now pack packages in batches,
starting with the ones that have no workspace
dependencies and expanding out to include packages
whose dependencies have already been packed.

Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>
2026-03-30 11:38:25 +01:00
Charles de Dreuille 6d120233a2 Update Table.tsx
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-30 11:19:43 +01:00
Charles de Dreuille dd880df9f0 Update report.api.md
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-30 11:18:03 +01:00
Charles de Dreuille dc009ed8a9 Improve BUI manifest
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-30 11:02:31 +01:00
Fredrik Adelöw e7f90f47a8 Update packages/cli-module-test-jest/src/commands/repo/test.test.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-03-30 11:53:54 +02:00
Fredrik Adelöw 6cc48113fc remove some cli deprecation warnings
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-30 09:44:30 +02:00
Fredrik Adelöw 0336f92de8 Merge pull request #33658 from backstage/freben/clarify-fetch-failures
Add FetchMiddlewares.clarifyFailures and improve permission error handling
2026-03-29 12:51:04 +02:00
Fredrik Adelöw d19e32ccad Use duck-typing for Request check and make clarification best-effort
Replace instanceof Request with a duck-type isRequestLike helper to
avoid cross-realm issues, and wrap the clarification logic in a
try/catch so it can never mask the original error.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-29 10:30:22 +02:00
Fredrik Adelöw 8278540c60 Fix pLimit type and remove trailing comma in error message
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 18:27:53 +01:00
Fredrik Adelöw 8e9679b3eb Parallelize CLI report generation in repo-tools
Converts createBinRunner from spawnSync to async spawn, and processes
all CLI packages concurrently with a shared p-limit limiter bounded
by CPU count. Reduces wall-clock time from ~50s to ~12s.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 17:48:33 +01:00
Fredrik Adelöw c38610bd9d Address review feedback: add cast rationale, drop redundant assertError
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 17:07:00 +01:00
Fredrik Adelöw cba19b13de Avoid new Request() in catch to prevent disturbed body errors
Extracts method/url directly from the input instead of constructing
a new Request in the catch block, which could fail if the body was
already consumed. Also adds a test with Request object input.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 17:04:02 +01:00
Fredrik Adelöw 18c3dbadd6 Update packages/core-app-api/src/apis/implementations/FetchApi/ClarifyFailuresFetchMiddleware.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-03-28 17:01:07 +01:00
Fredrik Adelöw 9f1ac04765 Update packages/core-app-api/src/apis/implementations/FetchApi/ClarifyFailuresFetchMiddleware.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-03-28 17:00:56 +01:00
Fredrik Adelöw 400aa2313a Add FetchMiddlewares.clarifyFailures and improve permission error handling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 16:55:33 +01:00
Fredrik Adelöw 54f9639f3b Merge pull request #33650 from backstage/freben/simplify-create-route-ref-types
Simplify createRouteRef type signature
2026-03-28 11:20:45 +01:00
Fredrik Adelöw 49397c16e0 Simplify createRouteRef type signature
Replace dual TParams/TParamKeys type parameters with a single TParamKey,
removing unnecessary complexity while preserving runtime behavior.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 10:58:37 +01:00
Jon Koops 5cd814f541 refactor(backend-defaults): migrate internal Zod usage from v3 to v4
The auditor's severity log level mappings previously used a `zod/v3`
`z.record()` schema with manual fallbacks for defaults and relied on
casting into Zod error internals (`.received`, `.options`) that changed
between v3 and v4. This replaces it with a `z.object()` schema using
`.default()` so that Zod owns the default values and type inference,
and derives the valid values and received input without reaching into
undocumented error properties.

This does not migrate all `zod/v3` imports in the package, as the
remaining usages are tied to public API types (e.g. `AnyZodObject`
from `@backstage/backend-plugin-api`).

Signed-off-by: Jon Koops <jonkoops@gmail.com>
2026-03-27 17:48:23 +01:00
Johan Persson 3bc23a5587 feat(ui): support disabling pagination in useTable complete mode
Add `CompletePaginationOptions` type extending `PaginationOptions`
with a `type` field supporting `'page'` (default) and `'none'`.
When using `mode: 'complete'` with `type: 'none'`, `useTable` skips
data slicing and produces `pagination: { type: 'none' }` in
`tableProps` directly.

Also sync `pageSize` state when `paginationOptions.pageSize` changes
dynamically, fixing cases where the initial value became stale.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-27 12:36:03 +01:00
Fredrik Adelöw 654d993c1b Merge pull request #33612 from wtravO/AWSS3UrlReader-fix-for-region-url-matching
fix: treat any url ending with amazonaws.com(.cn) as Amazon Hosted
2026-03-27 11:41:39 +01:00
Fredrik Adelöw 94c64ee33d Merge pull request #33596 from jonkoops/dom-asynciterable-types
chore: add `DOM.AsyncIterable` lib and use standard filesystem types
2026-03-27 11:31:37 +01:00
Travis O'Neal ac7c3a21d2 fix: added dot boundary to amazonaws.com endsWith checks to ensure url authenticity
Signed-off-by: Travis O'Neal <wtravisoneal@gmail.com>
2026-03-26 22:28:32 -04:00
Travis O'Neal 6e2aaabdf3 fix: treat any url ending with amazonaws.com or amazonaws.com.cn as Amazon hosted
Signed-off-by: Travis O'Neal <wtravisoneal@gmail.com>
2026-03-26 22:17:51 -04:00
Charles de Dreuille 66a75bd7d5 Merge pull request #33597 from backstage/bui-fix-relative-links
fix(ui): resolve relative hrefs to absolute paths before navigation
2026-03-26 17:24:44 +00:00
Johan Persson d840ba9053 fix(ui): resolve relative hrefs to absolute paths before navigation
BUI link components with relative hrefs (e.g. `../other`) would
navigate to the wrong URL because React Aria's navigate callback
receives the raw href string and cannot resolve it correctly from
where it is called in Backstage's routing setup.

This adds a `resolveHref` flag to the component definition system.
When enabled, `useDefinition` calls `useHref()` to turn relative
hrefs into absolute paths before they reach the React Aria layer.
A compile-time type guard ensures components with `href` in their
props cannot omit the flag.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-26 17:26:34 +01:00
Fredrik Adelöw 3f8060c460 Merge pull request #33536 from jonkoops/fix/zod-schema-first-generics
fix: use schema-first generic pattern for Zod type compatibility
2026-03-26 17:16:51 +01:00
Jon Koops fa550786b0 fix: use schema-first generic pattern for Zod type compatibility
Refactor `SignInResolverFactoryOptions` and `createSchemaFromZod` to use
`TSchema extends ZodType` instead of `ZodSchema<Output, Def, Input>`,
avoiding "excessively deep" TypeScript inference errors when multiple
Zod copies are resolved in a project.

Signed-off-by: Jon Koops <jonkoops@gmail.com>
2026-03-26 16:31:41 +01:00
Jon Koops a7a14b78c1 chore: add DOM.AsyncIterable lib and use standard filesystem types
Add `DOM.AsyncIterable` to the shared TypeScript configuration in
`@backstage/cli`, making standard async iteration methods available on
DOM APIs like `FileSystemDirectoryHandle`. This aligns behavior with
TypeScript 6.0, where this lib is included in `DOM` by default.

With the async iterable types now available, replace the custom
`IterableDirectoryHandle` and `WritableFileHandle` types in the scaffolder
plugin with the standard `FileSystemDirectoryHandle` and
`FileSystemFileHandle` DOM types. Add type guard functions for
`FileSystemHandle` since it is not a discriminated union.

Signed-off-by: Jon Koops <jonkoops@gmail.com>
2026-03-26 16:23:46 +01:00
Charles de Dreuille 73cdfb0e8e Merge pull request #33112 from AmbrishRamachandiran/range-slider-component
BUI - Add new range slider component
2026-03-26 14:37:00 +00:00
Johan Persson 5081bcc4fa fix(ui): prevent Avatar from shrinking in flex layouts
Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-26 14:49:13 +01:00
Jon Koops df43b0e149 fix(eslint-plugin): fix TypeScript 6.0 type errors in no-mixed-plugin-imports
TypeScript 6.0 no longer applies bivariant checking to method-shorthand
functions that don't reference `this`. This causes the `fix` callbacks in
suggestion descriptors to fail type checking when they return `void`
instead of a valid `Fix | null` value.

- Return `null` from non-fixable suggestion `fix` handlers
- Add explicit `SuggestionReportDescriptor[]` type annotation to `suggest`
- Remove redundant `@param` JSDoc annotations now covered by the array type

Signed-off-by: Jon Koops <jonkoops@gmail.com>
2026-03-26 12:31:11 +01:00
Patrik Oldsberg daaaa72ebb e2e: use exact name matching for sidebar link assertions
New plugin nav items like "Catalog Graph" cause Playwright's
substring-based getByRole name matching to find multiple elements
when searching for "Catalog". Switch to exact: true.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-25 22:53:03 +01:00
Jonathan Roebuck d0f055f949 feat(ui): add showPaginationLabel prop to TablePagination (#33552)
* feat(ui): add showPaginationLabel to type definitions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>

* feat(ui): wire showPaginationLabel through useTable and Table

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>

* feat(ui): conditionally render pagination label based on showPaginationLabel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>

* chore(ui): add changeset and update API reports for showPaginationLabel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>

* Update .changeset/show-pagination-label.md

Co-authored-by: Johan Persson <johanopersson@gmail.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>

* docs(ui): document showPaginationLabel prop in docs-ui

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>

* fix(ui): wrap component names in backticks in changeset

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>

* fix(ui): move pagination display options to inner useMemo dependency array

Move showPageSizeOptions, getLabel, and showPaginationLabel from the
outer useMemo dependency array to the inner pagination useMemo
dependency array so that changes to these options correctly trigger
a new pagination object reference.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>

* chore(ui): remove backticks from changeset

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* Revert "chore(ui): remove backticks from changeset"

This reverts commit 9b7f8bb6e83c28587219b7734676b1c062661a8a.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

---------

Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
Signed-off-by: Johan Persson <johanopersson@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Johan Persson <johanopersson@gmail.com>
2026-03-25 09:21:55 +00:00
Fredrik Adelöw 7a39b2c4ea fix: change unreachable branch to never in FlattenedMessages
The last branch of the conditional is unreachable since TMessages[TKey]
is constrained to string | AnyNestedMessages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-24 22:54:11 +01:00
Fredrik Adelöw ddc5247f67 fix(frontend-plugin-api): fix FlattenedMessages type depth for TypeScript 6
Restructure the FlattenedMessages conditional type to check
`TMessages[TKey] extends string` directly instead of using an
intermediate `infer TValue` pattern, which caused excessive type
instantiation depth in TypeScript 6.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-24 22:30:56 +01:00
Ben Lambert 4559806b96 feat(actionsRegistry): Adding support for examples (#33551)
* feat(backend-plugin-api): add typed examples to actions registry

Signed-off-by: benjdlambert <ben@blam.sh>

* fix: address review feedback for actions registry examples

Signed-off-by: benjdlambert <ben@blam.sh>

* fix: remove empty examples from scaffolder action bridge

Signed-off-by: benjdlambert <ben@blam.sh>

* chore: add changeset for scaffolder-backend

Signed-off-by: benjdlambert <ben@blam.sh>

* fix: update router test to match removed examples field

Signed-off-by: benjdlambert <ben@blam.sh>

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-24 18:16:23 +01:00
github-actions[bot] c1b510cabb Version Packages (next) 2026-03-24 14:54:00 +00:00