74233 Commits

Author SHA1 Message Date
aramissennyeydd 25b7ddd664 feat: allow dynamically enabling and disabling extensions
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
2026-03-17 13:00:29 +01:00
Patrik Oldsberg 00381fa7b2 frontend-app-api: add session boundary app initialization
Instantiate the app shell up to app/root.children during sign-in, then rebuild the full tree after sign-in without cloning the app tree.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 13:00:19 +01:00
Patrik Oldsberg d8d8b6a7f3 frontend-app-api: update ExtensionFactoryMiddleware imports
Align the specialized app wiring and generated API reports with the current ExtensionFactoryMiddleware type location.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 13:00:09 +01:00
Patrik Oldsberg 805e7cc688 frontend-app-api: remove reintroduced allowUnknownExtensionConfig
Keep createApp and createSpecializedApp aligned with the breaking change that removed this no-op option, and drop the stale test coverage for it.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 12:59:59 +01:00
Patrik Oldsberg 904841dd84 frontend-app-api: halfway implementation of app preparation split
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-17 12:59:59 +01:00
Patrik Oldsberg fc08a9b4dd plugin-app: keep identity proxy in prepared finalize flow
This fixes the prepare/finalize sign-in flow so finalized apps continue to use AppIdentityProxy, including protected-mode cookie auth behavior. It also avoids setting guest identity in protected mode when no sign-in page is configured, which lets pre-captured identities remain intact.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 12:59:58 +01:00
Patrik Oldsberg 925e0895b3 frontend-app-api: add prepareSpecializedApp two-phase app wiring
This adds a new prepare/finalize app wiring flow that renders sign-in first and finalizes the full app after identity capture, while keeping createSpecializedApp as a deprecated wrapper. It also updates frontend-defaults/createApp to use the same flow and includes test and API report updates.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 12:59:58 +01:00
Patrik Oldsberg e9eb585978 Merge pull request #33392 from backstage/rugvip/fix-api-review-items-1-3-5
frontend-plugin-api, frontend-app-api: API review cleanup
2026-03-17 12:46:03 +01:00
Patrik Oldsberg 2185cb2577 Merge pull request #33381 from backstage/blam/actions-cli
feat(cli): add actions CLI module for distributed actions registry
2026-03-17 12:41:15 +01:00
Patrik Oldsberg 38bca59990 Merge pull request #33365 from backstage/rugvip/opaque-api-ref-type
frontend-plugin-api: convert ApiRef to an opaque type
2026-03-17 12:15:05 +01:00
Patrik Oldsberg 3048708aed Merge pull request #33391 from backstage/rugvip/add-cli-module-template
cli-module-new: add template for CLI module packages
2026-03-17 12:10:21 +01:00
Patrik Oldsberg ed3483e560 Merge remote-tracking branch 'origin/master' into bui-toast
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor

# Conflicts:
#	packages/frontend-defaults/src/createPublicSignInApp.test.tsx
#	yarn.lock
2026-03-17 12:05:59 +01:00
Patrik Oldsberg 59752a25d9 Fix CI: add missing toast-forwarder to snapshot and add changesets
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 12:02:00 +01:00
Charles de Dreuille 693f1c59d7 Merge pull request #33358 from backstage/charlesdedreuille/bacui-42-code-listboxlistrow-component
feat(ui): add List and ListRow components
2026-03-17 11:01:09 +00:00
Patrik Oldsberg f6f53a282f chore: retrigger CI for flaky test failure
The `plugins/api-docs/src/alpha.test.tsx` test failure in Test 24.x
was a flaky failure (passes locally and on Node 22.x).

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 11:44:46 +01:00
Patrik Oldsberg 5fd78ba82f frontend-plugin-api, frontend-app-api: API review cleanup
Remove @backstage/core-plugin-api leakage from the
@backstage/frontend-app-api public API surface. Rename PluginOptions
to CreateFrontendPluginOptions with a deprecated alias. Remove
ResolvedExtensionInputs from the main @backstage/frontend-plugin-api
entry point.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 11:37:13 +01:00
Patrik Oldsberg 0f30e2b886 docs: remove broken link to non-existent search integration doc
The caution block referenced a new frontend system version of the
search integration doc that was never created. Remove the dead link
while keeping the rest of the legacy notice intact.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 11:36:49 +01:00
Patrik Oldsberg b73a0d3832 Merge pull request #33303 from backstage/blam/actions-permissions
`feat(actions)`: Add support for defining permissions at the action level
2026-03-17 11:33:13 +01:00
Patrik Oldsberg ac560a24cb Regenerate API reports
Update downstream app plugin API reports after the ApiRef type changes affected generated union output.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 11:27:46 +01:00
Patrik Oldsberg f8161a67fa docs: address review feedback on migrated plugin docs
- Update internationalization page to use new frontend system patterns
  (TranslationBlueprint from @backstage/plugin-app-react instead of
  createApp __experimentalTranslations)
- Fix AnalyticsImplementationBlueprint import to use @backstage/plugin-app-react
- Remove search integration page from frontend-system section as it
  belongs in the core feature search docs

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 11:26:12 +01:00
Patrik Oldsberg aac778ba8c docs: adapt cross-cutting plugin docs into the frontend system section
Instead of just referencing the legacy docs/plugins documentation, adapt
and add them as new pages under frontend-system/building-plugins/ with
updated imports and examples for the new frontend system.

Also moves the OpenAPI sidebar entry under Framework instead of top-level.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 11:05:09 +01:00
Patrik Oldsberg cc0693ec40 api-ref: move opaque helper to frontend-internal
Share the internal ApiRef opaque helper through frontend-internal and fail fast when ApiRef-shaped values have an unsupported opaque version.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 11:05:00 +01:00
Patrik Oldsberg aba94d2b27 Merge pull request #33385 from drodil/auth_mem_leaks
fix(auth): memory leaks
2026-03-17 11:03:20 +01:00
Patrik Oldsberg 7f05f5759b Use --name flag in example command template
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 10:59:07 +01:00
Patrik Oldsberg 54f30c6c91 docs: simplify visibilityPermission docs to match type constraints
Since visibilityPermission is typed as BasicPermission and authorize()
returns DefinitivePolicyDecision (ALLOW/DENY only), remove misleading
references to CONDITIONAL decisions which can never occur.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 10:55:51 +01:00
Patrik Oldsberg edf2b77581 cli-module-new: add template for CLI module packages
Add a new `cli-module` template to the Backstage CLI that scaffolds
CLI module packages. This includes adding the `cli-module` role to the
template system, with proper naming conventions and prompts.

The generated package includes:
- A bin entry point for standalone execution
- An index.ts with createCliModule setup
- An example command using cleye
- Standard package.json with cli-module role

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 10:54:26 +01:00
Patrik Oldsberg abc12cd8e1 fix: address review feedback for actions CLI module
Fix argument parsing bugs in the execute command where actionId at index 0
was incorrectly skipped when --instance was absent, and flag values matching
the actionId string were erroneously removed. Add --help support to the
execute command for CLI report generation. Add missing bin script and
cli-report.md for cli-module-actions. Add resolveAuth tests. Bump
backend-defaults changeset to minor for the security-relevant auth change.
Replace cross-fetch with native fetch in cli-module-auth to avoid punycode
deprecation warnings during CLI report generation.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 10:54:11 +01:00
Jonathan Roebuck bf41231deb Merge pull request #33387 from backstage/fix/table-complete-mode-loading
Fix Table complete mode loading state for data prop variant
2026-03-17 09:50:48 +00:00
Patrik Oldsberg 35e130c601 docs: sunset the docs/plugins section as legacy documentation
Mark all pages in docs/plugins/ with legacy admonition banners pointing
to the appropriate new frontend system and backend system documentation.
Rename the sidebar section to "Plugins (Legacy)" and move it lower in
the navigation hierarchy. Add cross-references from the new frontend
system building-plugins guide to relevant cross-cutting topics (i18n,
analytics, feature flags, search) that still live in the legacy section.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 10:49:54 +01:00
Patrik Oldsberg 90c3a9d1c0 api-ref: preserve const ids in builder types
Use a const type parameter for createApiRef().with(...) so literal API ref ids stay narrow instead of widening to string.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 10:46:42 +01:00
Patrik Oldsberg 4690f20880 api-ref: use opaque metadata for owner lookup
Read ApiRef plugin ownership through the internal opaque type helper and gracefully fall back to legacy ID inference for unsupported ref shapes.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 10:30:59 +01:00
Hellgren Heikki 634ededdc9 fix(auth): memory leaks
alb-provider: JWT verification block was wrapped in generic error
that turned 401 to 500 causing clients to retry the login

cimd: cimd clients are not registered in oidc_clients table
so inserting offline sessions for them violates the foreign key
constraint. dropping the fk.

offline: return access token even when refresh token issuing fails.
if the refresh token issue fails for some reason, it will return
500 which will then cause client to retry even it can get valid
access token without refresh token.

closes #33329
Signed-off-by: Hellgren Heikki <heikki.hellgren@op.fi>
2026-03-17 10:52:40 +02:00
Patrik Oldsberg 7bc798c069 Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-17 09:51:36 +01:00
Patrik Oldsberg 980faba560 Merge branch 'master' into blam/actions-permissions
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-17 09:50:34 +01:00
Deepesh123455 320eed3a6c fix(core-components): address layout feedback and add changeset
Signed-off-by: Deepesh123455 <deepeshthakur802@gmail.com>
2026-03-17 14:08:58 +05:30
Patrik Oldsberg ccc6b25f87 api-ref: keep plugin ownership metadata internal
Hide plugin ownership metadata from the public ApiRef type while preserving internal ownership resolution for the builder-based API ref flow.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
Patrik Oldsberg 76b89c7437 api-ref: infer builder ids and plugin ownership
Preserve literal API ref ids in the builder form while keeping the deprecated constructor compatible, and rely on explicit ownership metadata instead of the old core id fallback.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
Patrik Oldsberg 7a960a0d75 Regenerate API reports
Update the frontend plugin API report after removing explicit ApiRef constant annotations from the frontend API ref declarations.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
Patrik Oldsberg cb8a487bde frontend-plugin-api: rely on ApiRef inference
Remove explicit ApiRef constant annotations from frontend API ref declarations and rely on the createApiRef type argument for inference instead.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
Patrik Oldsberg e8d410d915 Regenerate API reports
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
Patrik Oldsberg 29b87812ba Regenerate API reports
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
Patrik Oldsberg 476df5ffd5 Fix changeset frontmatter formatting
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
Patrik Oldsberg d911b72811 frontend-plugin-api: add explicit ApiRef plugin ownership
Add the new frontend ApiRef builder form while preserving compatibility with existing refs, and let frontend apps resolve API ownership through an explicit pluginId when provided.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
Patrik Oldsberg cc459f73a8 frontend-plugin-api: convert ApiRef to an opaque type
Convert the ApiRef type in the new frontend system to an opaque type
with a $$type discriminator, matching the pattern used by route refs
and extension data refs. Add a builder-pattern creation overload
(createApiRef<T>().with({ id })) alongside the existing direct-config
form. Create OpaqueApiRef in frontend-internal for internal type
validation.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 09:35:02 +01:00
James Brooks 05594087b9 Add virtualized prop to Table component (#33246)
Adding a new virtualized prop to the Table component to better support rendering large numbers of rows
2026-03-17 08:31:43 +00:00
Deepesh123455 d48ed2e989 fix(core-components): resolve DOM nesting warning in OAuthRequestDialog
Signed-off-by: Deepesh123455 <deepeshthakur802@gmail.com>
2026-03-17 13:58:56 +05:30
AmbrishRamachandiran da68fd826b Resolve merge conflicts
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-17 13:56:33 +05:30
Jonathan Roebuck d06dd51393 Fix effect firing default getData for data prop variant
The effect was calling the default getData = () => [] even when the
consumer used the data prop, immediately clearing the loading state.
Now detects whether getData was explicitly provided and only runs the
async loading logic for that case. Also clears isLoading when data
transitions from undefined to defined.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
2026-03-17 08:16:50 +00:00
AmbrishRamachandiran 45bedc5eeb Resolve merge conflicts
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-17 13:32:21 +05:30
John Collier 1b42218ca3 feat(scaffolder): implement a get scaffolder task log action (#33185)
* feat(scaffolder): create get scaffolder task log action

Adds a new action to allow retrieving logs from scaffolder tasks, by way of the scaffolderService.getLogs function

Signed-off-by: John Collier <jcollier@redhat.com>

* Fix typo after rename

Signed-off-by: John Collier <jcollier@redhat.com>

* Add to list of known actions

Signed-off-by: John Collier <jcollier@redhat.com>

---------

Signed-off-by: John Collier <jcollier@redhat.com>
2026-03-17 08:48:59 +01:00