Drop the deprecated NavItemBlueprint from the public API and migrate core
plugins to set title and icon on PageBlueprint instead. AppNav keeps
backward compatibility for legacy nav-item extensions via an internal
core.nav-item.target data ref.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
The license changed in 4.9.0, so we need to cap the allowed version
range across all packages that depend on it.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
The helper is no longer used internally and has been replaced by
the `configSchema` option with direct Standard Schema values.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
- Add `entityRef` field to all Location API responses, carrying the stable
entity ref (e.g. `location:default/generated-<sha1hex>`) that was
already persisted to the `location_entity_ref` column.
- Make `entityRef` filterable via `POST /locations/by-query`.
- Add `PUT /locations/:id` endpoint that updates the `type`/`target` of
an existing location and issues the corresponding delta mutation so the
catalog entity is updated in-place without changing its entity ref.
- Wire `updateLocation` through `CatalogApi`, `CatalogService`,
`CatalogClient`, `LocationService`, `LocationStore`, and their
implementations and mocks.
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
The test assertions for lazy-loaded extension components used the
default 1000ms RTL timeout, which is insufficient under CI load.
Increased to 10000ms to match the pattern in createDevApp.test.tsx.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Add each plugin and package translation ref to the corresponding stable
entry point, changing the JSDoc tag from @alpha to @public. The alpha
entry points now re-export with a @deprecated annotation so existing
consumers continue to work.
Affected packages: core-components, api-docs, catalog, catalog-graph,
catalog-import, catalog-react, home, home-react, kubernetes,
kubernetes-cluster, kubernetes-react, notifications, org, scaffolder,
scaffolder-react, search, search-react, user-settings.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
* feat(catalog-react): add EntityDataTable and EntityRelationCard components
Add EntityDataTable (BUI Table wrapper for entity data) and
EntityRelationCard (card shell + data fetching + table) as shared
building blocks for entity relation table cards. Includes BUI column
factories, column presets for common entity types, and a new
translation key for the empty state help link.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* refactor(catalog): migrate 8 entity table cards to EntityRelationCard
Rewrite HasComponentsCard, HasResourcesCard, HasSubcomponentsCard,
HasSubdomainsCard, HasSystemsCard, DependsOnComponentsCard,
DependsOnResourcesCard, and DependencyOfComponentsCard as thin
wrappers around EntityRelationCard from catalog-react. Remove variant
and tableOptions props.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* refactor(api-docs): migrate 5 entity table cards to EntityRelationCard
Rewrite ConsumedApisCard, ProvidedApisCard, HasApisCard,
ConsumingComponentsCard, and ProvidingComponentsCard to use
EntityRelationCard from catalog-react. Add BUI column presets for
API-specific columns alongside existing MUI presets. Remove variant
and tableOptions props.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* chore: add API reports and changesets for entity table card migration
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(catalog-react,api-docs): refine entity card migration
Use BUI Alert for error states and BUI Link for empty state help
links in EntityRelationCard instead of core-components. Replace MUI
ToggleButton with BUI ButtonIcon for the API definition column.
Add trailing periods to empty state translation messages. Fix tests
asserting on removed external link icon SVG.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* feat(catalog-react): add column sorting to EntityDataTable
Introduce EntityColumnConfig extending ColumnConfig with an optional
sortValue getter. EntityDataTable now uses useTable with a sortFn
that reads sortValue from each column, restoring the per-column
sorting that the old core-components Table provided by default. All
built-in column factories set isSortable and sortValue.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(api-docs): use dynamic entity kind in empty state messages
Restore entity.kind interpolation in ConsumedApisCard, ProvidedApisCard,
and HasApisCard empty state translations instead of hardcoded strings.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(catalog-react): use data length for useTable pageSize
Replace pageSize: Infinity with tableData.length to avoid potential
edge cases in pagination math.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(catalog-react): avoid this binding in column factories
Use columnFactories.createEntityRelationColumn instead of
this.createEntityRelationColumn so the methods work when
destructured.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* chore: update alpha API reports
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(create-app): remove variant prop from migrated entity cards in template
The create-app template EntityPage still passed variant="gridItem"
to cards that no longer accept it.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* test(catalog-react): add tests for EntityDataTable and EntityRelationCard
Cover rendering with data, empty state, error state, and column
sorting for EntityDataTable. Cover title rendering, empty state
with help link, related entity display, and error state for
EntityRelationCard.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* refactor(catalog,api-docs): add backwards compatibility for legacy props
Support both old (variant, columns, tableOptions) and new (columnConfig)
props via a discriminated union type. When legacy props are detected the
old MUI-based implementation is used; otherwise the new BUI-based
EntityRelationCard renders. This avoids immediate breaking changes and
provides a migration path. Changesets downgraded from major/minor to
minor/patch accordingly.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* refactor(catalog-react,catalog,api-docs): address review feedback
Remove BaseProps types and use inline union in component signatures.
Move EntityDataTable, EntityRelationCard, and related types to alpha
exports. Group column presets and help links into entityColumnPresets
object. Update all consumers and API reports.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
---------
Signed-off-by: Johan Persson <johanopersson@gmail.com>
Update migrated NFS pages to use the existing HeaderPage contract instead of extending Backstage UI, and move DevTools to real subpages with the legacy DevTools content blueprint removed.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Always render the plugin header for page blueprints and move page-level actions into the Backstage UI header pattern for affected NFS pages.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
- Apply freben's suggested wording for old frontend system sections to
clarify they can be skipped on the new frontend system
- Fix scaffolder README: add missing imports (AnyApiFactory,
scmIntegrationsApiRef), closing bracket, and update link text
- Fix devtools README: correct closing tag from `</ FlatRoutes>` to
`</FlatRoutes>`
- Fix kubernetes README: reword "must be explicitly added" to avoid
conflicting with feature discovery paragraph
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
It was originally added due to missing peer dependency in `graphql-language-service`, but that also used it only for type imports
Signed-off-by: Timo Sand <timo.sand@f-secure.com>
The `defaultPath` param was a compile-time migration artifact typed to
produce an error, guiding users to use `path` instead. The migration
period is over, so this removes it from the public API surface.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Rename "package discovery" to "feature discovery" across all plugin
READMEs and docs to match the established terminology. Slim down the
Feature Discovery section in the architecture docs to avoid duplicating
the configuration details now covered in the installing plugins page.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Add new frontend system installation as the default path with package
discovery. Move old frontend system wiring to an "Old Frontend System"
section. Update README-alpha.md to be an extension reference rather
than experimental documentation.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor