19202 Commits

Author SHA1 Message Date
Johan Persson 1f709a386b fix(ui): preserve Header breadcrumb typography
Increase the specificity of Header breadcrumb styles so that Link defaults do not override contextual typography when stylesheets are loaded in a different order.

Add a patch changeset for @backstage/ui.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-06-01 11:32:46 +02:00
Fredrik Adelöw 496982782b fix: fix CI-flaky database test timing
DatabaseEventBusStore: 500ms → 2000ms for the performance threshold
when cleaning 100k rows — this is intentionally a perf test so a real
time assertion is correct, it just needs more headroom for CI.

DatabaseKeyStore: replace fixed 500ms sleep with waitForExpect polling
so the test adapts to however long the async deletion actually takes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-29 16:56:21 +02:00
Charles de Dreuille c2f9d8c25d Merge pull request #34400 from backstage/feat/bui-token-redesign
feat(ui): introduce semantic color token families and deprecate legacy tokens
2026-05-29 15:40:20 +01:00
Charles de Dreuille a4f2c56110 Bring back correct neutral tokens
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-29 15:59:39 +02:00
Fredrik Adelöw 4857351bf3 Merge pull request #34415 from stijnbrouwers/bugfix/gitlab-archive-fetch 2026-05-28 17:52:36 +02:00
Stijn Brouwers 3692a346a5 chore(gitlabUrlReader): Add comment and patch file
Signed-off-by: Stijn Brouwers <stijn@bdcommit.com>
2026-05-28 09:26:05 +02:00
Stijn Brouwers 05d4126db0 chore(code-review): Use single quote instead of ticks
Signed-off-by: Stijn Brouwers <stijn@bdcommit.com>
2026-05-28 09:13:38 +02:00
Fredrik Adelöw 2a85164e49 Use cheaper auth plugin and skip binlog for test MySQL containers
Switch the dockerized MySQL container to mysql_native_password (single
challenge-response) instead of the default caching_sha2_password
(extra RSA key exchange round-trip on non-TLS connections). Also
disable binary logging since tests don't need replication. Both
reduce per-connection overhead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-27 22:36:57 +02:00
Fredrik Adelöw 6fe88aabb3 fix(backend-test-utils): increase MySQL connect and pool timeouts
The mysql2 driver defaults to a 10-second connect timeout, which is
too short when many test suites share a single MySQL container under
CI load. Increase the connect timeout to 30 seconds and add pool
acquire/create timeouts of 30 seconds to reduce flaky ETIMEDOUT
failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-27 22:35:31 +02:00
James Brooks b33bb24b5a Add NumberField component to @backstage/ui (#34264)
* Add NumberField component to @backstage/ui

Signed-off-by: James Brooks <jamesbrooks@spotify.com>

* Address review feedback on NumberField

Signed-off-by: James Brooks <jamesbrooks@spotify.com>

* Fix NumberField CSS formatting

Signed-off-by: James Brooks <jamesbrooks@spotify.com>

* Add increment/decrement buttons to NumberField

Signed-off-by: James Brooks <jamesbrooks@spotify.com>

* Fix NumberField looking disabled at min/max bounds

Signed-off-by: James Brooks <jamesbrooks@spotify.com>

---------

Signed-off-by: James Brooks <jamesbrooks@spotify.com>
2026-05-27 17:20:27 +02:00
Fredrik Adelöw 58fb313f22 Merge pull request #34398 from robingileborg/master
Bitbucket username should not be treated as a secret
2026-05-27 16:29:50 +02:00
Fredrik Adelöw 5aa867c86f Merge pull request #34416 from backstage/freben/fix-missing-runtime-deps
fix: restore runtime dependencies incorrectly demoted to devDependencies
2026-05-27 15:30:53 +02:00
Fredrik Adelöw 150f290178 Merge pull request #31613 from backstage/renovate/azure-sdk-for-js-monorepo
chore(deps): update azure-sdk-for-js monorepo
2026-05-27 14:55:44 +02:00
Fredrik Adelöw 378784ebf0 fix: restore runtime dependencies incorrectly demoted to devDependencies
PR #33936 removed duplicate dependency entries, but in two cases moved
deps from dependencies to devDependencies that are still re-exported in
the published API reports:

- @backstage/catalog-client: @backstage/plugin-catalog-common
  (AnalyzeLocationRequest/AnalyzeLocationResponse types)
- @backstage/frontend-plugin-api: @backstage/config (Config type)

These need to be runtime dependencies so consumers can resolve the
types at build time.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-27 14:51:28 +02:00
Stijn Brouwers 70fc9e0370 bugfix(gitlabUrlReader): Fix issue with repository archive retrieval
Signed-off-by: Stijn Brouwers <stijn@bdcommit.com>
2026-05-27 14:29:41 +02:00
Charles de Dreuille 9f1dd4ae9b docs(ui): expand neutral background migration notes
Add full shift mapping (old --bui-bg-neutral-1..4 → new --bui-bg-neutral-2..5)
to the changeset, ESLint rule docs, and PR description so adopters
understand the complete renaming of the neutral background scale.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-27 13:14:30 +02:00
Charles de Dreuille 657aad6cf0 refactor(ui): rename surface tokens to neutral background tokens
Replace --bui-surface-1..5 with --bui-bg-neutral-1..5 for both light
and dark themes. --bui-bg-neutral-1 replaces the deprecated --bui-bg-app,
and --bui-bg-neutral-2..5 extend the scale. The old bare --bui-bg-neutral-1..4
entries are removed from the deprecated section since their names are now
reused; the hover/pressed/disabled variants remain deprecated.

Updates colors.stories.tsx, the ESLint rule and tests, and all migration
documentation and the PR description accordingly.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-27 13:11:38 +02:00
Fredrik Adelöw 826788803e Revert "try to remove protojs pins"
This reverts commit b15f74b62f.

Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-27 12:29:38 +02:00
Charles de Dreuille c2966d6a84 Update tokens.css
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-26 22:06:28 +02:00
Charles de Dreuille 9c3b5ef2bd Update no-deprecated-bui-tokens.js
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-26 21:45:34 +02:00
Charles de Dreuille 27891fda91 docs(eslint-plugin): use ### headings for migration sections in no-deprecated-bui-tokens docs
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-26 21:45:02 +02:00
Charles de Dreuille 53388ccb5e docs(eslint-plugin): fix migration table in no-deprecated-bui-tokens docs
Group migrations by family (Surfaces, Foreground, Accent, Positive,
Negative, Warning, Announcement) and correct the surface token mappings
to match the full --bui-surface-1 through --bui-surface-5 scale.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-26 21:43:50 +02:00
Charles de Dreuille 5d80f77e43 chore: add changesets and fix colors story layout
- Add patch changeset for @backstage/ui (new semantic color token families)
- Add patch changeset for @backstage/eslint-plugin (no-deprecated-bui-tokens rule)
- Remove redundant wrapper div in the Colors story and drop minHeight
  that was preventing scroll in the Storybook canvas

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-26 21:25:52 +02:00
Patrik Oldsberg ada73f2ba4 Merge pull request #31466 from jescalada/31624-fix-autologout-bug
fix: auto-logout not working when closing tabs and reopening
2026-05-26 18:13:26 +02:00
github-actions[bot] 68db890456 Version Packages (next) 2026-05-26 15:26:38 +00:00
Fredrik Adelöw 72db53e9fb Remove stale credsManager field from conflict resolution
The field was accidentally kept from master during the rebase
conflict resolution but doesn't belong in this PR's version of
the file.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-26 17:18:31 +02:00
Fredrik Adelöw 8dae41216d chore: update API report for AzureBlobStorageUrlReader
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-26 17:18:31 +02:00
Fredrik Adelöw 843f71caf4 fix: adapt tests for Azure SDK upgrade to ESM-style exports
The Azure SDK monorepo upgrade (storage-blob 12.26→12.31, identity
4.5→4.9) adds "type": "module" to package.json, making jest.mock()
unable to intercept imports from production code.

- AzureBlobStorageUrlReader: accept createContainerClient as an
  optional dependency, letting tests pass a mock directly instead
  of trying to mock the @azure/storage-blob module
- AzureUrlReader: provide PAT credentials in all test cases so
  DefaultAzureCredential is never instantiated — the Bearer auth
  flow is already covered by the integration package's own tests
- DefaultAzureDevOpsCredentialsProvider: use expect.any() for
  mock instance comparison instead of new DefaultAzureCredential()

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-26 17:18:31 +02:00
Charles de Dreuille d80062d18e docs(eslint-plugin): add docs page for no-deprecated-bui-tokens rule
Adds the missing documentation page at the URL referenced in the rule
meta, consistent with all other rules in the plugin. Includes incorrect/
correct code examples and a migration table mapping each deprecated token
to its semantic replacement.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-26 15:49:06 +02:00
Charles de Dreuille ae87db249a test(eslint-plugin): add RuleTester tests for no-deprecated-bui-tokens
Covers plain string literals, template literals, multiple tokens in one
string, non-deprecated --bui-* tokens (valid cases), and JSX inline
style attribute usage.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-26 15:46:15 +02:00
Charles de Dreuille d38977c7b4 feat(ui): introduce semantic color token families and deprecate legacy tokens
Redesigns the BUI color token system in `@backstage/ui`:

- Adds a gray scale (`--bui-gray-1` through `--bui-gray-11`)
- Adds new foreground tokens with explicit hex values (primary, secondary, disabled, positive, negative, warning, announcement)
- Introduces five new semantic color families — Accent, Announcement, Warning, Negative, Positive — each with bg-base, bg-subdued, border, fg-on-base, and fg-on-subdued variants, for both light and dark themes
- Moves all legacy tokens (`--bui-bg-solid-*`, `--bui-bg-neutral-*`, `--bui-bg-danger/warning/success/info`, `--bui-fg-solid`, `--bui-fg-danger/success/info`, `--bui-border-*`, `--bui-shadow`) into a clearly marked `/* Deprecated tokens */` section in both light and dark themes
- Updates the Spotify theme overrides to use the new accent tokens and mark legacy overrides as deprecated
- Rewrites the `Colors` Storybook story to display all token families as a live, theme-aware reference grid
- Adds a new `@backstage/no-deprecated-bui-tokens` ESLint rule to `@backstage/eslint-plugin` that warns when any deprecated BUI token is referenced in JS/TS string literals; the rule is included in the `recommended` config so it applies to all plugin authors automatically

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-05-26 15:08:53 +02:00
Fredrik Adelöw 40e3e0e24d Merge pull request #34214 from backstage/freben/queryentities-total-items
catalog-backend: split queryEntities list + count, add totalItems mode
2026-05-26 14:47:46 +02:00
Robin Gileborg 241d359913 Bitbucket username should not be treated as a secret
Signed-off-by: Robin Gileborg <robin@gileborg.com>
2026-05-26 13:19:08 +02:00
Fredrik Adelöw eca61bc02e fix(cli): narrow protobufjs warning suppression to specific message
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-26 12:04:56 +02:00
Fredrik Adelöw c069132a86 fix(cli): suppress protobufjs/inquire dynamic require warning in bundler
Since protobufjs 7.5.9, the @protobufjs/inquire utility is no longer
called with dynamic module names (replaced by bundler-safe lookups in
protobufjs/protobuf.js#2254). However, webpack/rspack still statically
analyzes the inquire source and emits a "Critical dependency" warning
for its require(moduleName) pattern. This is a false positive — the
code path is dead in practice.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-26 11:23:14 +02:00
Fredrik Adelöw b15f74b62f try to remove protojs pins
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-26 10:29:17 +02:00
Andre Wanlin 850f7c2ce5 Merge pull request #33359 from awanlin/topic/typos-cli
Added `typos` to CI and fixed all findings
2026-05-25 15:23:38 -05:00
Fredrik Adelöw 9af020191e Merge pull request #34317 from backstage/freben/fix-entity-page-test-flake
fix(catalog): fix flaky entity page test
2026-05-25 16:00:49 +02:00
Fredrik Adelöw b304686e03 Merge pull request #34353 from officialasishkumar/fix-rate-limit-ipv6-key-generator
fix(backend-defaults): use ipKeyGenerator for rate limiter keys
2026-05-25 15:40:43 +02:00
Fredrik Adelöw 7efdc27464 Remove mountPath → initialRouteEntries defaulting
Don't auto-default initialRouteEntries from mountPath — for
parameterized paths this silently produces wrong params (literal
':name' values). Require callers to set both explicitly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-25 15:18:11 +02:00
Fredrik Adelöw 4b0ad7b0b5 Merge pull request #34351 from backstage/dependabot/npm_and_yarn/qs-6.15.2
chore(deps): bump qs from 6.15.1 to 6.15.2
2026-05-25 13:29:33 +02:00
Fredrik Adelöw 17cce350b3 Merge pull request #34219 from backstage/renovate/embedded-postgres-18.x
Update dependency embedded-postgres to v18.3.0-beta.17
2026-05-25 12:09:39 +02:00
Asish Kumar 8add9b992d fix(core-components): decode url-safe base64 tokens in proxy sign-in
The proxy-based sign-in page derived the session expiry from the JWT by
decoding its payload with `window.atob`, which only accepts the standard
base64 alphabet. JWTs are encoded using base64url (RFC 7515), so any
token whose payload contained '-' or '_' raised a decoding error and
broke sign-in. Translate the payload back to the standard alphabet and
restore its padding before decoding.

Signed-off-by: Asish Kumar <officialasishkumar@gmail.com>
2026-05-25 05:30:56 +05:30
Asish Kumar def82d4d5e fix(backend-defaults): use ipKeyGenerator for rate limiter keys
The built-in rate limiter derived its key directly from `req.ip`, which
express-rate-limit 8.x rejects with an ERR_ERL_KEY_GEN_IPV6 validation
error. A raw IPv6 address used as a rate limiting key would let a client
bypass the limit by rotating through addresses in its allotted block, so
the library now requires its `ipKeyGenerator` helper to normalize the
address. Wrap the resolved client address in that helper so the limiter
starts cleanly and groups IPv6 clients by their address block.

Signed-off-by: Asish Kumar <officialasishkumar@gmail.com>
2026-05-25 05:21:28 +05:30
dependabot[bot] e0889a3f8e chore(deps): bump qs from 6.15.1 to 6.15.2
Bumps [qs](https://github.com/ljharb/qs) from 6.15.1 to 6.15.2.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.15.1...v6.15.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.15.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-23 12:27:32 +00:00
Fredrik Adelöw 8f20cc2f52 Add totalItems mode, sort key lowercasing, and simplified ordering
Layer the remaining concepts from the original PR on top of the
split-query foundation:

- totalItems parameter on REST API (GET and POST) and CatalogApi
- TotalItemsMode type replacing internal skipTotalItems boolean
- Sort field key lowercasing for search table comparison
- whereNotNull(search.value) on the list CTE to exclude truncated values
- Simplified ORDER BY (NULLS LAST removed since NULL values are
  already excluded by whereNotNull)
- New tests for NULL sort field values and multi-valued sort field
  totalItems accuracy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 16:52:47 +02:00
Fredrik Adelöw fcde31d871 Address review: remove fallback route, handle trailing splat, extract shared path
- Remove the path="*" fallback Route so mismatches between mountPath
  and initialRouteEntries surface as test failures instead of silently
  rendering without params
- Handle mountPath values that already end with /* to avoid double splat
- Extract repeated entity path string into a shared constant

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 15:49:36 +02:00
Fredrik Adelöw bc1b4263c9 Update API report for frontend-test-utils
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 15:40:39 +02:00
Fredrik Adelöw 5dca781385 Replace mountedRoutes-based wrapping with mountPath option
Address review feedback: mountedRoutes are for abstract route targets
the test subject links to, not for the subject itself. Add a dedicated
mountPath option that wraps the test element in a single Route with
the given path pattern, enabling useParams(). When mountPath is set
and initialRouteEntries is not, the initial entry defaults to mountPath.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 13:39:52 +02:00
1337 9929df3d8c Merge branch 'backstage:master' into feature/catalog-export 2026-05-20 20:32:27 +02:00