Commit Graph

72949 Commits

Author SHA1 Message Date
Jonathan Roebuck ca3ef847f5 fix(auth0): use stable sub claim as cache key instead of refresh token
Auth0 rotates refresh tokens on each use, causing cache misses every
time. Use the user's sub claim from the ID token as the cache key
instead, which is stable per user.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
2026-04-07 14:05:41 +01:00
Jack Palmer b3bbd42f91 auth0: cache profile API responses during token refresh
Every page refresh triggers the auth0 authenticator to fetch the user
profile from Auth0's /userinfo API. Auth0 enforces strict rate limits on
this endpoint, causing failures at scale.

Add a createAuth0Authenticator factory that accepts an optional
CacheService to cache profile responses with a 1-minute TTL. The module
now uses the cached variant by default. The existing auth0Authenticator
export remains available for use without caching.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jack Palmer <jackpalmer@spotify.com>
2026-04-07 14:05:41 +01:00
Johan Persson 386972f871 fix(ui): hide Tabs active indicator when no tab matches route
Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-04-07 15:05:23 +02:00
Fredrik Adelöw 587981973c Merge pull request #33576 from backstage/maratd/replace-humanize-entity-ref
Replace deprecated humanizeEntityRef with Catalog Presentation API
2026-04-07 14:28:39 +02:00
Patrik Oldsberg 972edbc0eb Merge pull request #33747 from backstage/freben/migrate-techdocs-from-alpha-catalog-service-ref
Migrate techdocs plugins from alpha to stable catalogServiceRef
2026-04-07 13:54:08 +02:00
Patrik Oldsberg 43627fde49 Merge pull request #33775 from yuhanwwu/master
add incident.io plugin to the marketplace
2026-04-07 13:44:11 +02:00
Fredrik Adelöw 64663ede75 Merge pull request #33773 from koalaty-code/fix-mcp-actions-middleware
fix(backend-defaults): fixes actions registry http middleware conflicts
2026-04-07 13:02:57 +02:00
Fredrik Adelöw 5917638dcd Merge pull request #33753 from backstage/freben/locationlocation
catalog-backend: persist location_entity_ref in locations table
2026-04-07 12:59:38 +02:00
Marat Dyatko b32ab39670 Fix unsafe type casts via shared entityPresentationSnapshot utility
Extract entityPresentationSnapshot helper to eliminate unsafe `as Entity`
casts when passing CompoundEntityRef to EntityPresentationApi.forEntity(),
which only accepts Entity | string. The helper safely discriminates input
types and stringifies CompoundEntityRef before calling the API.

- Add entityPresentationSnapshot as a public export from catalog-react
- Remove duplicated getEntityTitle/getTitle helpers across 5 files
- Fix useAsync dependency array in TemplateFormPreviewer
- Update TSDoc across all presentation API surfaces to reference the
  new helper
- Update entity-presentation.md docs with usage guidance and migration
  table

Made-with: Cursor
Signed-off-by: Marat Dyatko <maratd@spotify.com>
2026-04-07 12:41:29 +02:00
Patrik Oldsberg 9718e62c2d Merge pull request #33667 from backstage/docs-features-new-frontend-migration
docs: migrate feature documentation to new frontend system as primary content
2026-04-07 12:01:07 +02:00
Patrik Oldsberg adf228cb16 Merge pull request #33720 from backstage/rugvip/add-to-error-utility
errors: add `toError` utility and migrate usages
2026-04-07 12:00:01 +02:00
Patrik Oldsberg a07127d4ba Merge pull request #33774 from backstage/blam/pathcy
Add some patches for release
2026-04-07 11:25:12 +02:00
deepthi-28 aa47a370eb Add CheckboxGroup story and initial implementation (#33051)
* Add CheckboxGroup story and initial implementation

Signed-off-by: Deepthi Ajith <deepthi.ajith@infosys.com>

* Add CheckboxGroup implementation and docs coverage

Signed-off-by: Deepthi Ajith <deepthi.ajith@infosys.com>

* update api-reports

Signed-off-by: Deepthi Ajith <deepthi.ajith@infosys.com>

* fix: add more story variations, docs page, and fix JSDoc comments

Signed-off-by: Deepthi Ajith <deepthi.ajith@infosys.com>

* fix: address review feedback for CheckboxGroup component

Signed-off-by: Deepthi Ajith <deepthi.ajith@infosys.com>

---------

Signed-off-by: Deepthi Ajith <deepthi.ajith@infosys.com>
2026-04-07 10:58:29 +02:00
Yuhan Wu 5734a25545 format
Signed-off-by: Yuhan Wu <yuhanwu@DN66YYQWHX.local>
2026-04-07 09:51:35 +01:00
Yuhan Wu f132217505 run prettier and add status
Signed-off-by: Yuhan Wu <yuhanwu@DN66YYQWHX.local>
2026-04-07 09:19:35 +01:00
Yuhan Wu 1b5afabb12 add incident.io plugin to the marketplace
Signed-off-by: Yuhan Wu <yuhanwu@DN66YYQWHX.local>
2026-04-07 09:19:35 +01:00
backstage-goalie[bot] 38950237e3 Merge pull request #33780 from backstage/renovate/rspack-monorepo
chore(deps): update dependency @rspack/core to v1.7.11
2026-04-06 23:29:28 +00:00
renovate[bot] d2a724010c chore(deps): update dependency @rspack/core to v1.7.11
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-06 22:42:07 +00:00
backstage-goalie[bot] 1efbb7938a Merge pull request #33779 from backstage/renovate/npm-vite-vulnerability
chore(deps): update dependency vite to v7.3.2 [security]
2026-04-06 22:36:59 +00:00
renovate[bot] 9404b50a7e chore(deps): update dependency vite to v7.3.2 [security]
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-06 21:53:30 +00:00
Aramis Sennyey 9bca597026 fix: prevent backend server from hanging during e2e test (#32494)
* fix: prevent backend server from hanging during e2e test

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* add changeset

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* delete changeset

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

---------

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
2026-04-06 14:09:52 -04:00
benjdlambert f289cd4e74 chore: woops naming
Signed-off-by: benjdlambert <ben@blam.sh>
2026-04-06 19:20:24 +02:00
benjdlambert 7aaa947c7a chore: fix
Signed-off-by: benjdlambert <ben@blam.sh>

Signed-off-by: benjdlambert <ben@blam.sh>
2026-04-06 19:20:18 +02:00
Ben Lambert 5af48e77af feat(scaffolder): Migrate scaffolder to use permissions registry (#33740)
* feat(scaffolder-node): add PermissionResourceRef definitions for scaffolder resource types

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

* feat(scaffolder-backend): migrate to PermissionsRegistryService with fallback

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

* feat(scaffolder-backend): wire permissionsRegistry in ScaffolderPlugin

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

* test(scaffolder-backend): verify permissions metadata endpoint returns all scaffolder permissions

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

* chore: add changesets for scaffolder permissions registry migration

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

* chore: format scaffolder-node alpha exports

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

* fix: correct scaffolder-node changeset to patch for sub-1.0 package

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

* refactor(scaffolder-backend): simplify by removing fallback path and making permissionsRegistry required

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

* chore: update scaffolder-node API report

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

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-04-06 19:10:43 +02:00
Gabriel Dugny 282c11475f fix: OAuth 2.0 Protected Resource Metadata returning local endpoint (fix #33062) (#33092)
* fix: OAuth 2.0 Protected Resource Metadata returning local endpoint (fix #33062)

Signed-off-by: Gabriel Dugny <gabriel.dugny@believe.com>

* chore: add basic regression test

Signed-off-by: Gabriel Dugny <gabriel.dugny@believe.com>

---------

Signed-off-by: Gabriel Dugny <gabriel.dugny@believe.com>
2026-04-06 19:04:12 +02:00
Adam Letizia 85c5a4643b fix(backend-defaults): fixes actions registry http middleware conflicts
Signed-off-by: Adam Letizia <LetiziaAdam@JohnDeere.com>
2026-04-06 10:52:29 -05:00
Fredrik Adelöw dd48192606 Merge pull request #33410 from lokeshkaki/feat/bitbucket-cloud-scm-events
feat(catalog-backend-module-bitbucket-cloud): add Bitbucket Cloud SCM event translation and bridge wiring
2026-04-06 11:15:13 +02:00
Patrik Oldsberg d8976ea648 Merge pull request #33723 from Parsifal-M/docs/update-fe-migration-skill
Edit the SubPageBluepring instructions section
2026-04-05 22:11:52 +02:00
Patrik Oldsberg 5c9b621ffb Merge pull request #33760 from backstage/rugvip/parter-cleanup
docs: update commercial partners and FAQ
2026-04-05 21:59:29 +02:00
Patrik Oldsberg f0fb2aec37 microsite: prettier fix
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-04-05 21:49:16 +02:00
Patrik Oldsberg 76fdf2cb31 docs: update FAQ about commercial Backstage offerings
Update the question about hosted/commercial versions of Backstage
to be vendor-neutral and link to the commercial partners page.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-04-05 19:38:20 +02:00
Patrik Oldsberg ee18ff20c5 microsite: update commercial partners list
Remove solo.io, VMware, and Alauda as commercial partners due to
broken/irrelevant landing pages. Add Spotify for Backstage as a
partner. Sort partners alphabetically and normalize logo sizes
with per-partner height control.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-04-05 19:26:33 +02:00
Fredrik Adelöw 42d0a2749a Clarify migration comment: nullable-first is about NOT NULL without DEFAULT
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-05 14:22:09 +02:00
Patrik Oldsberg 262bc296a4 Merge pull request #33754 from kurtaking/migrate-google-pubsub-alpha-metrics
Migrate to MetricsService
2026-04-05 12:04:14 +02:00
Fredrik Adelöw 6941ae10f3 Add literal-value assertion for location_entity_ref in store test
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-05 10:37:32 +02:00
Patrik Oldsberg b592810c5f Fix duplicate frontmatter IDs in old-system doc pages
Prefix the frontmatter `id` in the --old variants with their
feature area (techdocs-/search-) so Docusaurus no longer reports
duplicate doc ID collisions.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-04-04 23:51:04 +02:00
Fredrik Adelöw 2514e30734 Fix misleading comment about bootstrap row in migration test
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-04 22:57:11 +02:00
Fredrik Adelöw 51c45e7ae3 Remove per-batch round trips for Postgres unnest migration
The Postgres unnest UPDATE uses a fixed-size SQL string; only the array
bindings grow. The planner executes it with an index nested-loop (O(N)),
so batching only adds network round trips without reducing work. Run the
entire backfill in a single statement.

MySQL keeps its MYSQL_BATCH_SIZE=1000 because the UNION ALL SQL text
grows linearly with batch size, so smaller packets are important there.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-04 22:41:29 +02:00
Fredrik Adelöw b21576575d Use string column and stringifyEntityRef for location_entity_ref
Switch the migration column type from text to string (varchar(255)),
since entity refs are always short. Also use stringifyEntityRef in
computeLocationEntityRef to handle lowercasing canonically.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-04 22:24:36 +02:00
Fredrik Adelöw d16311f310 catalog-backend: persist location_entity_ref in locations table
Adds a migration that populates a new `location_entity_ref` column on the
`locations` table with the full entity ref of the corresponding
`kind: Location` entity (e.g. `location:default/generated-<sha1hex>`).
Postgres uses an unnest-based batch UPDATE; other engines use a
transaction-wrapped per-row loop.

All code paths in DefaultLocationStore that previously recomputed the hash
from type+target now read `location_entity_ref` directly from the DB row
instead. New rows written by `createLocation` and `#createLocationsByExactUrl`
have the column populated at insert time.

This is step 1 of migrating Location entity names to be based on the stable
row UUID rather than a hash of the mutable target URL.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-04 22:19:26 +02:00
Kurt King ea0d31a1bc Merge branch 'master' of https://github.com/backstage/backstage into migrate-google-pubsub-alpha-metrics 2026-04-04 13:33:39 -06:00
Fredrik Adelöw 98d9a75dc2 Merge pull request #33632 from wpessers/feat/github-catalog-backend-extensiont/add-retry-to-github-client
feat(catalog): add retries to octokit client
2026-04-04 17:20:22 +02:00
Patrik Oldsberg 7f6b88783b docs: address review feedback on route refs, typos, and installation steps
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-04-04 16:15:01 +02:00
Fredrik Adelöw 323da94780 Use mockCredentials in CachedEntityLoader tests and simplify cache key
Replace hand-crafted BackstageCredentials objects with mockCredentials
from @backstage/backend-test-utils, which have proper toString() methods.
Simplify getCacheKey to use String(credentials) directly and remove the
auth service dependency from CachedEntityLoader.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-04 13:52:58 +02:00
Patrik Oldsberg fb571af4ee fix: correct broken doc links in search getting-started guides
Update links to removed how-to-guides anchors (#how-to-index-techdocs-documents
and #how-to-limit-what-can-be-searched-in-the-software-catalog) to point to the
existing #how-to-customize-fields-in-the-software-catalog-or-techdocs-index
anchor instead. Also update the old frontend system guide to link to the
--old variants of how-to-guides.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-04-04 12:47:25 +02:00
Patrik Oldsberg 18fde07e06 docs: address review feedback on code style in examples
Replace `Promise.resolve(...)` with `async` functions in scaffolder
FormFieldBlueprint.make examples, and switch the TechDocs custom home
page example to use the `plugin.withOverrides` pattern instead of
`createFrontendModule`.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-04-04 12:34:50 +02:00
Fredrik Adelöw e7fdf2997f Address Copilot review: fix pagination test and add credentials assertion
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-03 23:23:42 +02:00
Fredrik Adelöw 999f308ad5 Call getOwnServiceCredentials per request, not once per loop
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-03 23:06:47 +02:00
Fredrik Adelöw 52a45c308b Address review feedback
- Move getOwnServiceCredentials() before the pagination loop in DefaultTechDocsCollatorFactory
- Fix stale test comment that referenced the deleted MSW /entities handler

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-03 23:05:02 +02:00
Fredrik Adelöw 7d9d185654 Inline catalog from options directly in createRouter
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-03 22:58:20 +02:00