Commit Graph

73833 Commits

Author SHA1 Message Date
benjdlambert 2a640474c2 chore: add invalid mcp-server example for validation demo
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 664d1da60f refactor(catalog-model): move mcp-server to v1alpha1 specType, drop v1alpha2
Registers mcp-server as a specType on v1alpha1/v1beta1 instead of
introducing a new v1alpha2 apiVersion. Adds addKindVersion to the
builder so separate layers can extend existing kinds.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 421af6a8d1 chore: add example MCP server API entity
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 8dd6dce9ed feat(catalog-model): add addKindVersion builder method and move v1alpha2 to own layer
Adds addKindVersion to CatalogModelLayerBuilder so layers can add
versions to an existing kind without re-declaring its metadata.
Moves v1alpha2 API registration into ApiEntityV1alpha2.ts as a
separate model layer using the new method.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert fc407b805e chore: remove explanatory comments from apiEntityModel test
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 2cf453f328 refactor(catalog-model): rename API v1beta2 to v1alpha2
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert dddcc0b382 chore(catalog-model): regenerate API report for v1beta2 additions
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:33 +02:00
benjdlambert 27aee3a9b1 feat(catalog-model): add API v1beta2 with mcp-server subtype
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:33 +02:00
benjdlambert 163561085b feat(catalog-model): add API v1beta2 default and mcp-server schemas
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:33 +02:00
benjdlambert 9e0572b88c refactor: move AiResource types to @backstage/catalog-model alpha
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:33 +02:00
benjdlambert 19f9330073 docs: document source-location annotation for skill/rule content
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:14:58 +02:00
benjdlambert a185d7e0f8 feat: restore per-type guards for union narrowing
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 12:14:25 +02:00
benjdlambert e5671e44c0 refactor: extend default type and remove per-type guards
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 12:09:21 +02:00
benjdlambert 9c7cb8f232 fix: set initial package version to 0.0.0
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 11:05:59 +02:00
benjdlambert 21835f6f52 feat: add rule specType with disciplines, category, and rationale
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:48:59 +02:00
benjdlambert 333b10c2ab refactor: move AiResource types to @backstage/catalog-model alpha
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:49 +02:00
benjdlambert 46fbd60aef refactor: rename package to @backstage/plugin-catalog-backend-module-ai-model
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:49 +02:00
benjdlambert cf29736923 refactor: rename AIResource to AiResource for PascalCase consistency
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert 07a2ece671 feat: install AIResource module in example backend with test entities
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert 8e1e1bb06e fix: use CatalogModelSources.static for model registration
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert 65c8533ba1 refactor: extract shared relation fields and fix type guard safety
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert c41b6d09f7 docs: add README for ai-resource-entity-model module
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert 37267be659 fix: clarify type guard test names
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:42 +02:00
benjdlambert 3170784f18 feat: add specType dispatch with skill-specific schema
Adds discriminated union on spec.type with specType dispatch in the
model layer. The skill type adds disciplines, categories, agents,
and dependsOn fields. Fixes model source to not duplicate the default
catalog entity model.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:41 +02:00
benjdlambert 3664148c2e feat: add AIResource catalog entity kind as opt-in module
Introduces @backstage/plugin-catalog-backend-module-ai-resource-entity-model,
a new backend module that registers the AIResource kind with the catalog.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:41 +02:00
Patrik Oldsberg 05f13d50c0 Merge pull request #34296 from backstage/worktree-fix-e2e-tests
fix(create-app): remove disabled nav-item config that breaks custom sidebar
2026-05-19 10:40:58 +02:00
MT Lewis 2bd0450cb4 feat(catalog-backend-module-msgraph): filter out disabled users by default (#34165)
* feat(catalog-backend-module-msgraph): filter out disabled users by default

The Microsoft Graph provider now always applies an `accountEnabled eq true`
base filter when fetching users. Any custom `user.filter` is combined with
the base filter using `and`, so adopters no longer need to manually add
`accountEnabled eq true` to their configuration.

Also removes the legacy mutual exclusivity check between `userFilter` and
`userGroupMemberFilter` — these serve orthogonal purposes (user-level
filtering vs group selection) and the downstream code already handles
both being set.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>

* chore: mark msgraph disabled-user filtering as breaking change

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>

* docs(catalog-backend-module-msgraph): clarify automatic accountEnabled filter in docs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>

---------

Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-19 10:30:30 +02:00
Fredrik Adelöw a29edc58fb Merge pull request #34267 from backstage/freben/describe-each-databases
tests: use describe.each for database test iteration
2026-05-19 10:24:00 +02:00
Fredrik Adelöw 98f496a1ad Merge pull request #34265 from backstage/freben/stable-multi-org-order
github: stabilize entity order in multi-org provider
2026-05-19 10:23:43 +02:00
Ben Lambert 782a819e4d fix: correct changeset bump level for scaffolder-backend (#34297)
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:05:53 +02:00
Ben Lambert 29d398b57c fix(auth-backend): harden default allowed patterns for CIMD and DCR (#34260)
* fix(auth-backend): harden default allowed patterns for CIMD and DCR

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

* address PR review feedback for OIDC defaults

- narrow CLI client ID pattern to exact cli.json path
- add BREAKING prefix to changeset
- add IPv6 [::1] to docs examples
- add loopback redirect URI tests for IPv6 and 127.0.0.1

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

* remove dead ['*'] fallback when features are disabled

The restrictive defaults are now always used regardless of the enabled
flag, since the patterns are only consulted on code paths that require
the feature to be enabled.

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

* add default pattern tests and fix docs cli example

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

* use URL constructor for CLI client ID

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

* use string templating for cliClientId to match OidcRouter

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

* fix docs: remove misleading CLI client_id URL example

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

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 09:45:31 +02:00
Fredrik Adelöw 50d97e714e Merge pull request #34258 from backstage/freben/mock-credentials-version
backend-test-utils: add version field to mock credentials
2026-05-19 09:24:41 +02:00
Fredrik Adelöw d325ee31d0 Merge pull request #34225 from backstage/fix/filter-predicate-mixed-operator-keys
fix(filter-predicates): reject operator keys mixed with other keys
2026-05-19 09:24:31 +02:00
benjdlambert 219cc05885 fix(create-app): remove disabled nav-item config that breaks custom sidebar
The nav-item extensions were disabled in the template config to prevent
duplicate rendering, but the custom sidebar already handles this via
nav.take(). After #33788 added filtering of disabled nav items from page
discovery, disabling them causes nav.take('page:catalog') to return
nothing, breaking the sidebar navigation.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 09:08:02 +02:00
Patrik Oldsberg 5f14aba359 Merge pull request #34285 from backstage/rugvip/cimd-metadata-size-cap
auth-backend: cap CIMD metadata response size
2026-05-18 17:53:32 +02:00
Ben Lambert 07ec25de2c fix(catalog-backend): move generateStableHash out of shared util to fix Storybook build (#34284)
* fix(catalog-backend): move generateStableHash out of shared util to fix Storybook build

The util.ts file mixed Node.js-only code (createHash from node:crypto)
with pure constants. Since InMemoryCatalogClient reaches into
buildEntitySearch via a relative import, and buildEntitySearch imports
from util.ts, the node:crypto dependency leaked into Vite's browser
bundle causing the Storybook build to fail.

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

* add changeset

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

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-18 16:57:26 +02:00
Patrik Oldsberg 9f269d73ed auth-backend: cap CIMD metadata response size
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-18 16:38:46 +02:00
Fredrik Adelöw 97515d8356 Merge pull request #33788 from benjidotsh/app/fix-disabled-nav-items
fix(app): add check for disabled nav items to discovery of pages
2026-05-18 16:04:24 +02:00
backstage-goalie[bot] a9eb2d98f3 Merge pull request #34243 from backstage/renovate/vite-7.x-lockfile
chore(deps): update dependency vite to v7.3.3
2026-05-18 11:54:11 +00:00
backstage-goalie[bot] b698610324 Merge pull request #34226 from backstage/renovate/fs-extra-11.x-lockfile
chore(deps): update dependency fs-extra to v11.3.5
2026-05-18 11:54:06 +00:00
renovate[bot] 03a4aec17e chore(deps): update dependency vite to v7.3.3
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-18 10:02:07 +00:00
renovate[bot] 2b81167736 chore(deps): update dependency fs-extra to v11.3.5
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-18 10:00:50 +00:00
Fredrik Adelöw aa313f099c github: stabilize entity order in multi-org provider
When using GithubMultiOrgEntityProvider with alwaysUseDefaultNamespace
and teams with identical slugs across orgs, the emitted entity order
was non-deterministic. Since the catalog's upsert path uses last-write-
wins for duplicate entity refs, this caused the winning org to flip
randomly on every refresh cycle, producing constant unnecessary
stitching and flickering entity data.

Sort the emitted entities by entity ref (primary) and location
annotation (tiebreaker) so that the same org consistently wins when
duplicate refs exist.

Fixes #34263

Signed-off-by: Fredrik Adelöw <freben@gmail.com>

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-18 11:36:30 +02:00
Patrik Oldsberg 735af6c8c0 Merge pull request #34142 from backstage/session/suspicious-heron-9w2p
feat(auth-backend): validate catalog user existence on refresh token usage
2026-05-18 11:17:21 +02:00
Fredrik Adelöw ada7df7929 backend-test-utils: add version field to mock credentials
The mock credentials created by mockCredentials.none(), .user(), and
.service() were missing the internal version: 'v1' field. This caused
toInternalBackstageCredentials() to throw when used with mock
credentials in tests.

Signed-off-by: Fredrik Adelöw <freben@gmail.com>

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-16 17:39:31 +02:00
Fredrik Adelöw eab8f7a510 Merge pull request #34256 from backstage/cursor/ui-field-flex
fix(ui): allow fields to grow in flex layouts
2026-05-16 16:53:46 +02:00
Fredrik Adelöw e51af8cced Merge pull request #33602 from elaine-mattos/feat/allow-empty-commits 2026-05-16 10:13:59 +02:00
Fredrik Adelöw 379c3a8264 Merge pull request #34113 from its-mitesh-kumar/fix/user-settings-theme-toggle-i18n-priority
fix(user-settings): Prioritize i18n translation for built-in theme names
2026-05-15 20:31:13 +02:00
Fredrik Adelöw 8165184fba tests: use describe.each for database test iteration
Refactors all test files that use TestDatabases/TestCaches with
it.each(databases.eachSupportedId()) to instead use describe.each at
the outer level. This ensures that all tests for one database engine
complete before moving to the next, rather than interleaving engines
across individual tests. This reduces the number of concurrent database
connections and should help with test timeout issues in CI.

The TestDatabases.create() call is hoisted to module scope so the
describe.each can iterate over supported IDs at the top level.

40 files changed across packages/backend-defaults,
packages/backend-test-utils, and multiple plugins.

Signed-off-by: Fredrik Adelöw <freben@gmail.com>

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-15 20:27:43 +02:00
Fredrik Adelöw c667c2bf90 Merge pull request #34262 from backstage/chore/upgrade-storybook-10.4 2026-05-15 19:10:05 +02:00