19202 Commits

Author SHA1 Message Date
Patrik Oldsberg 1097f68579 Merge pull request #33181 from backstage/rugvip/cli-boolean-flag-negation
cli: enable --no- prefix negation for boolean flags
2026-03-10 18:27:53 +01:00
Fredrik Adelöw bed58405ab Merge pull request #33263 from backstage/freben/notar
remove @types/tar
2026-03-10 17:27:11 +01:00
Patrik Oldsberg feaf449008 cli: enable --no- prefix negation for boolean flags
Bump cleye to ^2.3.0 (which pulls in type-flag 4.1.0) and enable
booleanFlagNegation: true in all cli() invocations so that boolean
flags automatically support --no-<flag> prefix negation.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-10 17:20:38 +01:00
Ben Lambert fa6dd7a611 chore: fix build (#33264)
Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-10 17:19:29 +01:00
Fredrik Adelöw dbb7f0017a Merge pull request #33176 from backstage/freben/xml
bump aws-sdk to get rid of critical fast-xml-parser warning
2026-03-10 17:04:33 +01:00
Johan Persson d4d52fb13c fix(ui): ensure disabled rows override pointer cursor
Move the disabled rule after the pointer cursor rules so that
disabled rows always show cursor: not-allowed, even when they
have data-href or data-selection-mode.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-10 17:00:38 +01:00
Johan Persson f42f4cc055 fix(ui): truncate Table column headers with ellipsis on overflow
Wrap column header text in a label span with text-overflow: ellipsis
so that long headers truncate instead of wrapping to multiple lines.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-10 17:00:38 +01:00
Johan Persson fbd5c5a93d fix(ui): only show pointer cursor on interactive Table rows
Row always passed onAction to React Aria even when no handler or
href was set, causing all rows to appear interactive. Now onAction
is only passed when there is an actual interaction. CSS explicitly
sets cursor: default on rows and scopes cursor: pointer to rows
with href, selection mode, or pressable state.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-10 17:00:38 +01:00
Fredrik Adelöw 1fd15249ad remove @types/tar
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 16:44:41 +01:00
Fredrik Adelöw da2a0f974c Merge pull request #33242 from backstage/renovate/react-monorepo
fix(deps): update dependency react-refresh to ^0.18.0
2026-03-10 16:39:28 +01:00
Fredrik Adelöw c07c27d2b1 Merge pull request #33258 from backstage/freben/fix-e2e
fix end to end tests
2026-03-10 16:27:40 +01:00
Fredrik Adelöw 26fa44767a Merge pull request #31989 from 0xts/feat/scaffolder-logs-btn
feat: add log download btn for LogViewer
2026-03-10 16:24:26 +01:00
Fredrik Adelöw 294f9fe17f Merge pull request #32377 from samarthsinh2660/fix/table-filters-title-layout
fix(core-components): fix Table layout when filters and title are used together
2026-03-10 16:19:10 +01:00
Fredrik Adelöw a302ac285c fix end to end tests
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 16:16:12 +01:00
AmbrishRamachandiran 2e00fb7e70 Fix review comments added single slider
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-10 20:37:15 +05:30
root ea82e08f4a Merge branch 'master' into range-slider-component 2026-03-10 20:29:25 +05:30
Fredrik Adelöw 3b38dd0249 fix: mock fromTemporaryCredentials at module boundary instead of nested STS client
Replace the @aws-sdk/nested-clients/sts mock with a mock of
fromTemporaryCredentials itself. This avoids depending on AWS SDK
internal implementation details while still verifying that the correct
role ARN, session name, and external ID are passed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 15:29:30 +01:00
Fredrik Adelöw 63746129b2 reports
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 15:18:11 +01:00
Fredrik Adelöw 32e9499caf Add onConflict query parameter to POST /locations endpoint
Adds an optional `onConflict` query parameter to the location creation
endpoint. When set to 'refresh', a conflict due to an already-registered
location triggers a refresh of the existing location entity instead of
returning a 409 error. The default behavior ('reject') is unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 14:35:04 +01:00
Fredrik Adelöw 6c865dbd1d fix: use AWS_SHARED_CREDENTIALS_FILE instead of smithy internals in tests
Replace the brittle @smithy/shared-ini-file-loader internals hack with
temp credential files and AWS_SHARED_CREDENTIALS_FILE/AWS_CONFIG_FILE
env vars, which is the official AWS SDK mechanism for this.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 14:29:39 +01:00
Fredrik Adelöw d3cb061c5f Update packages/integration-aws-node/src/DefaultAwsCredentialsManager.test.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-03-10 14:29:39 +01:00
Fredrik Adelöw f3f5cac4d1 fix: update DefaultAwsCredentialsManager tests for new AWS SDK internals
The AWS SDK now uses @aws-sdk/nested-clients/sts internally in
fromTemporaryCredentials, so the tests need to mock both the regular
and nested STS clients. Also adapts to the new $source metadata on
credentials and the new @smithy/shared-ini-file-loader for ini profile
mocking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 14:29:39 +01:00
Ben Lambert d0f4cd215b feat(cli): add auth commands for OIDC login (#32920)
* feat(cli): add auth commands for OIDC login

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

* address PR review feedback

- move CIMD check before callback server start
- add try/finally for callback server cleanup
- validate URLs with human-readable errors
- deduplicate config URL candidates
- preserve selected flag on re-authentication
- delete accessToken on logout
- log token refresh to stderr in show command
- fix command descriptions to reference CIMD not DCR
- type keytar as optionalDependency, rename storage paths
- add auth-backend changeset

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

* migrate auth module from yargs to cleye pattern

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

* address PR review feedback

- consolidate storage imports in auth.ts
- add withMetadataLock to setSelectedInstance
- skip file permission tests on Windows
- clarify changeset endpoint path

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

* address review feedback from Rugvip and Copilot

- use stdout for user-facing messages instead of stderr
- remove clientSecret remnants from logout
- make refresh_token optional in token response schema
- add timeout to CIMD metadata fetch
- pass same state to callback server and authorize URL
- remove inaccurate test comment

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

* validate state in callback server, add CIMD endpoint tests

- localServer now validates the OAuth state parameter in the request
  handler and returns 400 on mismatch
- Added tests for the CIMD metadata endpoint in OidcRouter covering
  both disabled and enabled cases

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

* revert validateRequest to use Zod error details

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

* fix callback server hanging by closing keep-alive connections

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

* rename secret store service prefix to backstage-cli:auth-instance

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

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-10 13:28:25 +00:00
Fredrik Adelöw c0b9c63be4 Fix TypeScript error in MockSchedulerService test
Use non-null assertion for resolveBlock since TypeScript cannot track
the async reassignment across the setTimeout boundary.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 13:59:40 +01:00
Fredrik Adelöw 25157bec8d Fix AbortController reuse after cancel and prevent overlapping liveness checks
Reset AbortController in MockSchedulerService after cancelTask so
subsequent triggerTask calls receive a fresh signal. Replace setInterval
with a self-scheduling setTimeout loop for liveness checks in TaskWorker
to prevent overlapping DB queries when a check takes longer than the
polling interval.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 13:49:38 +01:00
Fredrik Adelöw 0899cb2cee Fix cancelTask to reschedule next run instead of permanently stopping task
The static cancel() now reads task settings from the DB and computes
the next_run_start_at, so cancelled tasks get picked up again on their
normal schedule. Also stops the liveness check polling immediately on
first detection of a cancelled task.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-10 11:47:51 +01:00
AmbrishRamachandiran 993e272418 Fix review comments added single slider
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-10 14:00:22 +05:30
AmbrishRamachandiran 37b7ca137c Fix review comments added single slider
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-10 13:03:06 +05:30
AmbrishRamachandiran 41ec1e20e2 Fix review comments added single slider
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-10 12:41:34 +05:30
AmbrishRamachandiran 62cf259d80 Fix review comments added single slider
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-10 11:59:38 +05:30
AmbrishRamachandiran 5d4094c785 Fix review comments added single slider
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-10 11:43:42 +05:30
AmbrishRamachandiran 3ae5a679b2 Fix review comments added single slider
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-10 10:51:16 +05:30
renovate[bot] 9599697048 chore(deps): update dependency globals to v17
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-10 03:44:26 +00:00
renovate[bot] f1bfd351cd chore(deps): update dependency @types/jquery to v4
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-09 22:10:33 +00:00
Fredrik Adelöw 3e4b372955 Implement cancelTask in MockSchedulerService with proper error types
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-09 22:37:08 +01:00
Fredrik Adelöw 60eec59601 Fix missing cancelTask in mock SchedulerService implementations
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-09 22:16:33 +01:00
renovate[bot] 4a75544809 fix(deps): update dependency react-refresh to ^0.18.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-09 21:06:46 +00:00
Fredrik 015668c5d2 Add cancelTask to SchedulerService for cancelling running tasks
Adds the ability to cancel currently running scheduled tasks via a new
cancelTask method on the SchedulerService interface. For global (distributed)
tasks, the database lock is released and a periodic liveness check detects
the lost ticket and aborts the task function's AbortSignal. For local tasks,
the abort signal is triggered directly. Also adds a REST endpoint at
POST /.backstage/scheduler/v1/tasks/:id/cancel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-09 22:00:44 +01:00
AmbrishRamachandiran bc19197570 Fix prettier and api report
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-09 23:11:33 +05:30
renovate[bot] b4e14b6f89 chore(deps): update dependency react-aria-components to v1.16.0 (#32783)
* chore(deps): update dependency react-aria-components to v1.16.0

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(ui): fix selectedKey type mismatch in Tabs component

Change `selectedId` initialization from `null` to `undefined` to
match React Aria's `selectedKey` prop type (`Key | undefined`).

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

---------

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Johan Persson <johanopersson@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Johan Persson <johanopersson@gmail.com>
2026-03-09 15:50:29 +00:00
Fredrik Adelöw 76f3250544 Merge pull request #32669 from backstage/renovate/opentelemetry-js-contrib-monorepo
fix(deps): update dependency @opentelemetry/auto-instrumentations-node to ^0.71.0
2026-03-09 14:15:33 +01:00
Fredrik Adelöw 133d5ebe33 Merge pull request #33182 from backstage/renovate/npm-express-rate-limit-vulnerability
fix(deps): update dependency express-rate-limit to v8 [security]
2026-03-09 11:59:49 +01:00
Patrik Oldsberg ad7c883dee Deprecate HeaderPage in favor of Header in @backstage/ui (#33188)
* Deprecate HeaderPage in favor of Header in @backstage/ui

Rename the HeaderPage component to Header, keeping HeaderPage as a
deprecated alias for backwards compatibility. Also deprecate
HeaderPageProps, HeaderPageOwnProps, HeaderPageBreadcrumb, and
HeaderPageDefinition with new Header* equivalents. Update all internal
usages, stories, and docs-ui documentation to use the new names.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor

* Rename HeaderPage files and directories to Header

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor

* Add changeset for mui-to-bui Header rename

Document the plugin release impact of switching the MUI to BUI theme converter page to the renamed Header component.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor

---------

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-09 11:52:19 +01:00
Fredrik Adelöw a085401235 Update packages/backend-defaults/package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-03-09 11:15:59 +01:00
Andre Wanlin 1eaf17a276 Merge pull request #32061 from elaine-mattos/feat/add-description-plugin-feature-flags
feat(core-plugin-api): add optional description to plugin feature flags
2026-03-07 12:47:26 -06:00
renovate[bot] b399668fc2 fix(deps): update dependency @opentelemetry/auto-instrumentations-node to ^0.71.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-07 18:30:25 +00:00
renovate[bot] 5fcbef2627 fix(deps): update dependency express-rate-limit to v8 [security]
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-06 19:49:03 +00:00
Johan Persson d14b6e07f1 feat(org,catalog-graph)!: migrate MembersListCard, OwnershipCard, and CatalogGraphCard to BUI (#33177)
* feat(org): migrate MembersListCard to BUI EntityInfoCard

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

* feat(org)!: migrate OwnershipCard to BUI EntityInfoCard

Replaced MUI InfoCard with BUI EntityInfoCard in OwnershipCard.
Removed the `variant` and `maxScrollHeight` props since card sizing
and scrolling are now handled by the BUI layout. Wrapped body content
in a flex column div to keep the relations toggle pinned while the
grid scrolls. Updated app-legacy and create-app templates to remove
the dropped `variant` prop.

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

* feat(catalog-graph)!: migrate CatalogGraphCard to BUI EntityInfoCard

Replace MUI InfoCard with BUI EntityInfoCard in CatalogGraphCard.
The `variant` prop is removed — card sizing is now handled by the
BUI layout system. The deep link is replaced with a footer Link.

Remove `variant="gridItem"` from all EntityCatalogGraphCard usages
in app-legacy and create-app templates.

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

* feat(catalog-react): export useEntityRoute hook

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

* fix(cli): update translation extraction test for renamed org keys

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

---------

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-06 16:19:31 +01:00
Fredrik Adelöw 7dc54e2267 Fix crypto mock in Cache.test.ts to preserve full module
The jest.mock('crypto') was replacing the entire module, causing
@smithy/uuid to fail with "Cannot read properties of undefined
(reading 'bind')" when @backstage/backend-test-utils was imported.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-06 16:14:23 +01:00
Patrik Oldsberg d9fb094376 Merge pull request #33061 from backstage/rugvip/migrate-cli-to-cleye
cli: migrate remaining commands from commander to cleye
2026-03-06 15:59:09 +01:00