19202 Commits

Author SHA1 Message Date
Patrik Oldsberg 86509de5c8 Fix CI failures: dependencies, API reports, and create-app versions
- Move runtime dependencies from devDependencies to dependencies in
  cli-module-build, cli-module-auth, cli-module-migrate, cli-module-new,
  cli-module-test-jest, and cli-module-translations
- Fix relative package.json paths in cli-module-build
- Downgrade rollup in cli-module-build to ^4.27.3 to match the CLI
- Downgrade eslint-webpack-plugin to ^4.2.0 to prevent @types/eslint v9
- Add CLI module packages to create-app version helper
- Add allow-warnings for CLI module packages in API reports
- Generate API report files for all CLI module packages

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 16:44:50 +01:00
Patrik Oldsberg 506da6b8be Fix rollup version in cli-module-build to prevent API report breakage
Downgrade rollup from ^4.59.0 to ^4.27.3 to match the main CLI package
and avoid the dedupe upgrading all rollup instances to 4.59.0, which
breaks API report generation.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 16:14:54 +01:00
Patrik Oldsberg 72457cfe98 Fix incorrect relative package.json paths in cli-module-build
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 16:06:33 +01:00
Patrik Oldsberg 7c8bb02ffe Fix eslint-webpack-plugin version and regenerate lockfile
Downgrade eslint-webpack-plugin in cli-module-build from ^5.0.3 to
^4.2.0 to match the main CLI package, preventing @types/eslint from
being resolved to v9 which breaks the eslint-plugin TypeScript checks.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 15:59:28 +01:00
Patrik Oldsberg f51e4df2d1 Fix Prettier formatting and run yarn dedupe
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 15:44:54 +01:00
Charles de Dreuille 04d9d8df40 feat(ui): add ListBox and ListBoxItem components
Adds standalone `ListBox` and `ListBoxItem` components to `@backstage/ui`,
built on top of React Aria's ListBox primitives. Items support icons,
descriptions, and single or multiple selection modes.

Includes Storybook stories and docs-ui documentation page.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
Made-with: Cursor
2026-03-14 14:37:33 +00:00
Patrik Oldsberg 329f394d82 Start CLI module packages at version 0.0.0 with introductory changeset
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:46:37 +01:00
Patrik Oldsberg d806b0cc9f Add automatic discovery of CLI modules from project dependencies
The CLI now scans the project root's dependencies and devDependencies
for packages with the cli-module role, loading them automatically.
Falls back to the built-in set with a deprecation warning when no
modules are found. Updated create-app templates and the monorepo root
to include all CLI modules as explicit devDependencies.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:43 +01:00
Patrik Oldsberg 64a96d9d9f Add bin entry points for standalone CLI module execution
Each CLI module package now includes a bin script and cli.ts entry
point, allowing modules to be executed directly via npx without
being wired into the main @backstage/cli package.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:43 +01:00
Patrik Oldsberg 401c1f7e24 Resolve CLI version dynamically in info module
The info command now tries to resolve the @backstage/cli version at
runtime instead of using a hardcoded relative path. This allows the
module to work standalone when the CLI package is not present. The
module's own version is always reported as infoModuleVersion.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:43 +01:00
Patrik Oldsberg c95a130f52 Add runCliModule helper for standalone module execution
Add a public `runCliModule` function to `@backstage/cli-node` that
allows CLI module packages to be executed directly as standalone
programs, without needing to be wired into a larger CLI host.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:43 +01:00
Patrik Oldsberg a151ad0814 Split CLI modules into separate packages
Extract each CLI module from packages/cli/src/modules/ into its own
package under packages/cli-module-*. This enables independent versioning
and clearer dependency boundaries for each CLI capability.

Module mapping:
- auth → @backstage/cli-module-auth
- build → @backstage/cli-module-build
- config → @backstage/cli-module-config
- create-github-app → @backstage/cli-module-create-github-app
- info → @backstage/cli-module-info
- lint → @backstage/cli-module-lint
- maintenance → @backstage/cli-module-maintenance
- migrate → @backstage/cli-module-migrate
- new → @backstage/cli-module-new
- test → @backstage/cli-module-test-jest
- translations → @backstage/cli-module-translations

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:43 +01:00
Patrik Oldsberg 18012b5802 Rename CliPlugin to CliModule and cli-plugin role to cli-module
Rename createCliPlugin to createCliModule, CliPlugin to CliModule, and
the cli-plugin package role to cli-module to better distinguish CLI
modules from other plugin types.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:43 +01:00
Patrik Oldsberg 1929a95b97 Rename BackstageCommand to CliCommand and CommandContext to CliCommandContext
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:43 +01:00
Patrik Oldsberg 7d055ef0c4 Merge cli-plugin-api into cli-node
Move createCliPlugin and related types from the standalone
@backstage/cli-plugin-api package into @backstage/cli-node and
remove the now-empty package.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:43 +01:00
Patrik Oldsberg a90939e138 Use opaque types for command graph nodes
Switch CommandGraph and CliInitializer to use OpaqueCommandTreeNode and
OpaqueCommandLeafNode from @internal/cli instead of raw $$type markers.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:42 +01:00
Patrik Oldsberg 28a438a9f2 Add documentation to cli-plugin-api and remove CliFeature type
Add thorough TSDoc comments to createCliPlugin, BackstageCommand,
CommandContext, and CliPlugin. Remove the CliFeature type alias in
favor of using CliPlugin directly.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:42 +01:00
Patrik Oldsberg 7e6ad01a21 Refine cli-plugin-api: use packageJson, inline types, rename context fields
Replace pluginId with packageJson input for createCliPlugin, remove
CommandExecuteFn type alias by inlining it, and rename
CommandContext.info.description to info.name.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:42 +01:00
Patrik Oldsberg 2e5f189cfa Add @internal/cli package for opaque CLI types
Move OpaqueCliPlugin to a new @internal/cli inline package, following the
same pattern as @internal/frontend. Both cli-plugin-api and cli import it
directly, and it gets bundled into their dists at build time.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:42 +01:00
Patrik Oldsberg d6caf7f13b Slim cli-plugin-api to only export createCliPlugin
Move error handling and lazy utilities back to @backstage/cli since they
are host-only concerns. The cli-plugin-api internals subpath provides
isCliPlugin and initializeCliPlugin for the CLI host.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:42 +01:00
Patrik Oldsberg 0be3eab18b cli: initial cli-plugin-api
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-14 12:40:42 +01:00
Patrik Oldsberg 94a885a2ef Add cli-plugin package role
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-14 12:39:21 +01:00
Charles de Dreuille 0733b76b75 Update Row.tsx
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-14 10:44:22 +00:00
Charles de Dreuille 421641b0f5 Update Header.module.css
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-14 10:41:32 +00:00
Charles de Dreuille 612c217c1f fix(ui): open external Table row hrefs in a new tab
Automatically apply `target="_blank"` and `rel="noopener noreferrer"` on
`Row` when `href` is an external link, so external links in default BUI
Table rows open in a new tab instead of navigating the current page.

`rel` tokens are merged rather than replaced, so consumer-provided tokens
(e.g. `rel="nofollow"`) are preserved while `noopener noreferrer` is
always enforced whenever `target="_blank"` is in effect.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-14 10:37:13 +00:00
Charles de Dreuille 4ebcde9826 Update Header.tsx
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-14 10:31:24 +00:00
Charles de Dreuille 17d6398e22 fix(ui): fix Container bottom margin clash in Header
- Changed Container default bottom spacing from padding-bottom to margin-bottom
- Prevented the Container margin-bottom from applying when used as the Header root element via mb="0"
- Renamed Header CSS classes from bui-HeaderPage* to bui-Header* to match the component name

Fixes https://linear.app/spotify/issue/BACUI-249

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
Made-with: Cursor
2026-03-14 10:22:13 +00:00
Charles de Dreuille b99f6d5a93 fix(ui): fix Dialog content overflowing when no height prop is set
Replaces the invalid `min(auto, calc(100vh - 3rem))` CSS pattern with a
flex-based layout. The dialog now grows with its content by default and
scrolls when the content exceeds the viewport height. A fixed height can
still be applied via the `height` prop.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
Made-with: Cursor
2026-03-14 07:20:04 +00:00
dependabot[bot] 638e6c73ac chore(deps): bump yauzl from 3.2.0 to 3.2.1
Bumps [yauzl](https://github.com/thejoshwolfe/yauzl) from 3.2.0 to 3.2.1.
- [Commits](https://github.com/thejoshwolfe/yauzl/compare/3.2.0...3.2.1)

---
updated-dependencies:
- dependency-name: yauzl
  dependency-version: 3.2.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-14 01:44:53 +00:00
Jonathan Roebuck 3ace9c54db feat(ui): add separate loading prop to TableRoot
Use spread for conditional selection props. Add a dedicated loading
prop and data-loading data attribute to TableRoot, distinct from
stale. Both set aria-busy and default to the same opacity, but
consumers can now style them independently.

Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
2026-03-13 18:29:27 +00:00
Jonathan Roebuck a688c806bc refactor(ui): consolidate live region label logic
Move initial loading label into useLiveRegionLabel so all live
region logic is in one place.

Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
2026-03-13 18:29:27 +00:00
Jonathan Roebuck ddf90ae1fe chore(ui): remove Table tests and test setup
Removed per reviewer feedback — BUI Table relies on Storybook visual
tests rather than unit tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
2026-03-13 18:29:26 +00:00
Jonathan Roebuck 6f56a0c0b0 fix(ui): address review feedback for Table skeleton loading
- Add @testing-library/jest-dom and @testing-library/react as explicit
  devDependencies for @backstage/ui
- Disable selection on TableRoot during initial loading to prevent
  interaction with skeleton rows
- Clarify test comment about aria-busy vs data-stale behavior

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
2026-03-13 18:29:26 +00:00
Jonathan Roebuck 690786f84d feat(ui): replace Table loading text with skeleton rows
Add a skeleton loading state to the BUI Table component that shows the
table header with animated skeleton rows instead of plain "Loading..."
text. Includes accessibility support via aria-busy and live region
announcements.

BUCKS-2919

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Jonathan Roebuck <jroebuck@spotify.com>
2026-03-13 18:29:25 +00:00
Charles de Dreuille fcaac3b8bd Fix Card onPress event
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-13 17:07:52 +00:00
renovate[bot] 79453c0e46 chore(deps): update dependency wait-for-expect to v4
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-13 11:15:06 +00:00
renovate[bot] 361285a870 fix(deps): update opentelemetry-js monorepo to ^0.213.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-13 11:10:06 +00:00
Charles de Dreuille 27c2c24a1a Add migration notes
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-12 16:27:40 +00:00
Charles de Dreuille 9d5f3baf1e Update styles and types on Checkbox
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-12 16:11:56 +00:00
benjdlambert 97c917ea1c refactor: rename permission to visibilityPermission
Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-12 15:07:32 +01:00
benjdlambert 5f739e1312 fix: address PR feedback for actions permissions
Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-12 15:00:36 +01:00
Fredrik Adelöw a8ff4ad8c7 Merge pull request #33245 from backstage/renovate/jquery-4.x
chore(deps): update dependency @types/jquery to v4
2026-03-12 10:32:23 +01:00
Fredrik Adelöw de44367824 Merge pull request #33294 from backstage/renovate/snyk-nodejs-lockfile-parser-2.x
chore(deps): update dependency snyk-nodejs-lockfile-parser to v2
2026-03-12 10:29:29 +01:00
Fredrik Adelöw a41eff026f Merge pull request #33251 from backstage/renovate/globals-17.x
chore(deps): update dependency globals to v17
2026-03-12 10:25:46 +01:00
benjdlambert d504478c1e docs: add permissions documentation for actions registry
Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-12 10:06:40 +01:00
benjdlambert cc8348ef2e feat: add permissions integration to actions registry
Signed-off-by: benjdlambert <ben@blam.sh>
2026-03-12 09:58:04 +01:00
AmbrishRamachandiran 4776d564ce Fix review comments
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-11 21:47:18 +05:30
renovate[bot] 2bc7595dfa chore(deps): update dependency snyk-nodejs-lockfile-parser to v2
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-11 12:41:43 +00:00
Vivek Hipparkar 29ca39bd52 Merge branch 'fix/scaffolder-markdown-links-new-tab' of https://github.com/Vivek1819/backstage into fix/scaffolder-markdown-links-new-tab
Signed-off-by: Vivek Hipparkar <vivekhipparkar@gmail.com>
2026-03-11 12:06:10 +05:30
github-actions[bot] ed7c4e3bef Version Packages (next) 2026-03-10 17:34:12 +00:00