74233 Commits

Author SHA1 Message Date
Charles de Dreuille 7b0c998fea fix(ui): remove unused root class name from HeaderDefinition
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 20:57:57 +01:00
Charles de Dreuille 84f151c5ee fix(ui): simplify HeaderTop padding-top to always use space-6
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 20:52:54 +01:00
Charles de Dreuille 8a0a5c9553 feat(ui): improve Header layout with tag-aware padding and renamed sections
- Add data-has-tags attribute to reduce header padding-top when tags are present
- Rename beforeSticky/afterSticky classes to headerTop/headerBottom
- Always render headerBottom for consistent bottom margin
- Inline JSX sections into a single return statement

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 20:36:24 +01:00
Charles de Dreuille 0e71545ee6 Preserve Header className target
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 17:36:18 +01:00
Charles de Dreuille 68d1f91c91 Avoid hidden duplicate Header links
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 16:07:50 +01:00
Charles de Dreuille aa56d03cd2 Unify Header landmark structure
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 15:43:41 +01:00
Charles de Dreuille fc6f0d98e0 Remove display contents from sticky Header
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 15:29:36 +01:00
Charles de Dreuille 6b05c0a4de Address sticky Header review feedback
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 15:20:12 +01:00
Charles de Dreuille 6c4606a71c Polish sticky Header implementation
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 15:05:45 +01:00
Charles de Dreuille dceca05fb4 Fix non-sticky Header title duplication
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 14:16:09 +01:00
Charles de Dreuille eb1fabae6b Refine sticky Header title transition
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 09:26:12 +01:00
Charles de Dreuille 5351d8ac63 Add sticky Header support
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-26 09:04:51 +01:00
Raphael Torquato 096be8b8ea docs(techdocs): fix incorrect S3 permission in AWS configuration
Changed s3:PutBucketAcl to s3:PutObjectAcl in the migration permissions
section, as PutObjectAcl is the correct permission for copying objects.

Fixes #32925

Signed-off-by: Raphael Torquato <raphael.martini@live.com>
2026-04-25 21:13:09 -03:00
dependabot[bot] 3611aae3b2 chore(deps): Bump postcss from 8.5.6 to 8.5.10 in /microsite
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.6 to 8.5.10.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.6...8.5.10)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.10
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-25 11:37:46 +00:00
Andre Wanlin ad7d51bfec Merge pull request #33968 from maxwoerner/fix-techdocs-gitlab-url
docs: Fix TechDocs url location reference for GitLab
2026-04-25 06:37:07 -05:00
Andre Wanlin d04ab67227 Merge pull request #33967 from backstage/dependabot/npm_and_yarn/protobufjs-7.5.5
chore(deps): bump protobufjs from 7.5.4 to 7.5.5
2026-04-25 06:36:15 -05:00
Andre Wanlin 3a8f077ec5 Merge pull request #33931 from backstage/dependabot/npm_and_yarn/hono-4.12.14
build(deps): bump hono from 4.12.7 to 4.12.14
2026-04-25 06:36:04 -05:00
Andre Wanlin f60c531990 Merge pull request #33889 from backstage/dependabot/npm_and_yarn/follow-redirects-1.16.0
chore(deps): bump follow-redirects from 1.15.11 to 1.16.0
2026-04-25 06:35:55 -05:00
pillaris 758bfaa356 fix: address Copilot review comments on msgraph-incremental provider
- Use undefined instead of null for MSGraphCursor.nextLink (repo style)
- Avoid mutating caller-provided query object in requestOnePage
- Improve error handling for non-JSON Graph API error responses
- Build entity spec immutably instead of mutating entity.spec directly
- Log debug message when a sparse group member cannot be transformed
- Warn when schedule.frequency is a cron expression (restLength falls back to 8h)
- Use proper MSGraphContext generic instead of unknown in addProvider

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: pillaris <pillaris@adobe.com>
2026-04-25 12:40:42 +05:30
pillaris 02859a1db9 fix(catalog): fix lint and type errors in msgraph-incremental plugin
- Use node:crypto import protocol
- Add @backstage/backend-test-utils to devDependencies
- Use template literal instead of string concatenation
- Add non-null assertions on result.entities in tests
- Remove unused rootGroup variable
Signed-off-by: pillaris <pillaris@adobe.com>
2026-04-25 10:13:23 +05:30
pillaris 5126adb17a chore: update yarn.lock for msgraph-incremental workspace entry
Add workspace:^ alias for the new plugin so the lockfile is consistent
with the packages/backend dependency reference. Remove stale pg@^8.11.0
range no longer referenced by any workspace package.
Signed-off-by: pillaris <pillaris@adobe.com>
2026-04-25 09:56:42 +05:30
Andre Wanlin e22aabe5ce Merge pull request #33300 from letthem/feat/aws-cost-insights-plugin
feat(plugins): Add AWS Cost Insights plugin to marketplace
2026-04-24 13:09:50 -05:00
Andre Wanlin 2f873ba2a4 Merge pull request #33270 from xoscar/chore/testkube-plugin
chore(plugins): Adding testkube plugin data
2026-04-24 13:09:32 -05:00
Eric Peterson 2f6d3ed2f9 Address review feedback
Signed-off-by: Eric Peterson <ericpeterson@spotify.com>
2026-04-24 15:13:58 +02:00
Charles de Dreuille 030fb311aa Merge pull request #33997 from backstage/charlesdedreuille/act-355-header-improvements
feat(ui): add description, tags, and metadata props to Header
2026-04-24 13:59:56 +01:00
Eric Peterson 774c29f12d Backport new hints from agent skill to human documentation
Signed-off-by: Eric Peterson <ericpeterson@spotify.com>
2026-04-24 14:53:45 +02:00
Eric Peterson 0cf9e2cb3a Add a plugin analytics instrumentation skill to well-known skills
Signed-off-by: Eric Peterson <ericpeterson@spotify.com>
2026-04-24 14:53:21 +02:00
Charles de Dreuille 10728b562e refactor(ui): rename HeaderMetadataStatusItem to HeaderMetadataStatusProps
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-24 13:47:06 +01:00
Charles de Dreuille 9e71172bfd perf(ui): memoize inline markdown rendering in Header description
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-24 12:43:03 +01:00
Fredrik Adelöw 8212ff75c5 Merge pull request #34049 from officialasishkumar/devtools/refresh-after-trigger-task 2026-04-24 11:44:42 +02:00
Johan Persson 2da0b663bc Replace useHref with useResolvedPath in useDefinition
useResolvedPath returns the resolved path without the router basename,
eliminating the need for manual basename detection and stripping.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-04-24 10:27:33 +02:00
pillaris 70adee104e fix(catalog): always pair \$count=true with ConsistencyLevel: eventual in advanced mode
Microsoft Graph requires \$count=true whenever the ConsistencyLevel: eventual
header is present, including plain listing requests with no \$filter or \$search.
The previous condition only added \$count when a filter or search was present,
causing the /groups endpoint to silently return an empty value array when
queryMode is set to advanced without a group filter.
Signed-off-by: pillaris <pillaris@adobe.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 12:21:00 +05:30
Asish Kumar b15ef55be1 devtools: refresh scheduled tasks after trigger or cancel
Closes #32861

Triggering or cancelling a scheduled task from the DevTools Scheduled
Tasks page previously left the table showing the pre-action state, so
users had to refresh the browser (which also reset the plugin selector)
to see the new status.

Switch `useScheduledTasks` to `useAsyncRetry` so it exposes a `refresh`
function, and call it after each trigger/cancel action in
`ScheduledTasksContent`. The refresh happens in a `finally` block so the
table also updates when the action itself fails, reflecting whatever the
backend ended up recording.

Signed-off-by: Asish Kumar <officialasishkumar@gmail.com>
2026-04-24 02:47:49 +05:30
Marat Dyatko 6b171fa5f1 Merge pull request #34041 from dyatko/fix/self-package-imports
Fix circular self-imports and add no-self-package-imports lint rule
2026-04-23 20:28:26 +02:00
Patrik Oldsberg 9d7ffe5200 Merge pull request #34045 from backstage/rugvip/limit-remix-icon-version
deps: limit @remixicon/react to < 4.9.0
2026-04-23 18:55:00 +02:00
Patrik Oldsberg f635139ebc Limit @remixicon/react to versions below 4.9.0
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
2026-04-23 16:42:38 +02:00
Marat Dyatko f1e26b8ed7 Address review feedback on no-self-package-imports rule
- `visitImports` now also reads `exportKind` so `export type { … } from`
  statements are classified as type-only, fixing a false positive in the
  self-import rule (and correctly skipping them in `no-undeclared-imports`
  too).
- The reachability-graph regex in `no-self-package-imports` skips
  `import type` / `export type` edges so files reachable only via
  type-only re-exports aren't pulled into a runtime bundle and no longer
  get false-positive same-entry errors.
- `SOURCE_EXTENSIONS` now includes `.mts` and `.cts` so entries and
  barrels using those extensions are followed correctly.
- The ESLint plugin changeset wording matches the `error` severity of
  the recommended config.
- Adds regression fixtures and RuleTester cases for `export type …` at
  both entries and for a file only reachable via a type-only edge.

Signed-off-by: Marat Dyatko <maratd@spotify.com>
Made-with: Cursor
2026-04-23 16:28:20 +02:00
Johan Persson 1a8de99d1d Add test suite for useDefinition hook in @backstage/ui (#34042)
* Add test infrastructure to @backstage/ui

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

* Add resolveResponsiveValue tests

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

* Add useDefinition prop resolution and classes tests

Fixed a bug in useDefinition where passing null for classNameTarget or
utilityTarget was incorrectly defaulted to 'root' due to the nullish
coalescing operator treating null as falsy.

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

* Add useDefinition data attributes tests

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

* Add resolveDefinitionProps tests

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

* Add processUtilityProps tests

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

* Add useDefinition bg system tests

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

* Add useDefinition utility style and analytics tests

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

* Add useDefinition href resolution tests

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

* Add useDefinition options tests

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

* Wrap all useDefinition tests with BUIProvider

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

* Fix type errors in useDefinition tests

Use `as const satisfies ComponentConfig<any, any>` instead of
`as ComponentConfig<any, any>` to preserve literal types needed
by the conditional type machinery (DataAttributes, ResolveBgProps,
analytics intersection).

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

* Address review feedback in useDefinition tests

- Rename shadowed Wrapper to RouterWrapper in createRouterWrapper
- Fix inaccurate comment about splat vs non-splat routes
- Clarify misleading test name for provider data-bg behavior

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

---------

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-04-23 16:00:09 +02:00
Patrik Oldsberg 564697a8dd Merge pull request #34031 from backstage/rugvip/isolate-invalid-feature-flag-registration
frontend-app-api: isolate invalid feature flag registrations
2026-04-23 15:57:32 +02:00
Patrik Oldsberg 482cc5900a Address review feedback for feature flag isolation
Deduplicate the plugin/module feature flag registration loops and
distinguish the error source (Plugin vs Module). Treat
FEATURE_FLAG_INVALID as a warning in frontend-defaults.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-04-23 14:47:52 +02:00
Marat Dyatko ab1cdbb9db Fix circular self-imports and add no-self-package-imports lint rule
- Fixes the `Cannot access '_AppRootElementBlueprintesm' before
  initialization` crash in `@backstage/frontend-plugin-api` caused by a
  self-referential import in the packaged ESM.
- Cleans up similar self-imports in `@backstage/catalog-model`,
  `@backstage/core-plugin-api`, `@backstage/plugin-catalog-node`,
  `@backstage/plugin-kubernetes-common`, and
  `@backstage/plugin-kubernetes-node`. Value imports switch to relative
  paths; type-only imports use `import type` so they're erased at
  runtime.
- Adds a new `@backstage/no-self-package-imports` ESLint rule. It reads
  each package's `exports` map, traverses the relative import graph from
  every entry's source file, and only reports imports where the current
  file is in the same bundle as the target entry (same-entry). Files
  that aren't reachable from any entry (tests, scripts, orphans) are
  skipped. `import type`, `package.json` imports, and cross-entry
  self-imports are allowed by default; cross-entry can be opted into
  with `allowCrossEntry: false`.

Signed-off-by: Marat Dyatko <maratd@spotify.com>
Made-with: Cursor
2026-04-23 14:43:01 +02:00
Fredrik Adelöw 427d5219a6 Merge pull request #34035 from backstage/freben/remove-uuid-dependency
Remove uuid dependency in favor of crypto.randomUUID()
2026-04-23 14:19:33 +02:00
Patrik Oldsberg 3009b62ad5 Merge pull request #34025 from etienne-napoleone/patch-2
fix(ui): disable card content scroll shadow on unsuported browsers
2026-04-23 12:53:24 +02:00
pillaris f1279ea2d6 feat(catalog): add catalog-backend-module-msgraph-incremental plugin
Introduces a new Backstage backend module that incrementally ingests
users and groups from Microsoft Graph one page at a time, using the
incremental ingestion framework.
Unlike MicrosoftGraphOrgEntityProvider, this module never holds the
full dataset in memory. Each burst processes a single page (up to 999
items), making it suitable for large Azure AD tenants where the
full-scan provider causes memory pressure or OOM failures.
The @odata.nextLink cursor is persisted in the incremental ingestion
marks table, so a pod restart during ingestion resumes from the last
completed page rather than starting over.
Signed-off-by: pillaris <pillaris@adobe.com>
2026-04-23 15:56:43 +05:30
Etienne Napoleone 2da5a0af3b docs(changeset): update fix-scroll-card-shadow wording
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Etienne Napoleone <etienne.napoleone@gmail.com>
2026-04-23 11:25:51 +02:00
Fredrik Adelöw e9b78e9698 Remove uuid dependency in favor of crypto.randomUUID()
The uuid package dropped its CommonJS entry point in v14, making it
incompatible with Backstage's CJS build output and Jest test runner.
Rather than working around the ESM-only issue, replace all usage with
the built-in crypto.randomUUID() which has been available in Node.js
since v16.7 and in all major browsers since March 2022.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
2026-04-23 10:51:43 +02:00
Charles de Dreuille 5a7495d072 chore: merge master and resolve package.json conflict
Both @braintree/sanitize-url (this branch) and @internationalized/date
(master) were added to packages/ui dependencies; keeping both.

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-23 08:53:44 +01:00
Johan Persson 76635ae005 Rename fix-card-scroll-shadow to fix-card-scroll-shadow.md
Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-04-23 09:52:39 +02:00
Charles de Dreuille 251acf38d6 fix(ui): address further PR review comments
- Replace custom UNSAFE_HREF_RE with @braintree/sanitize-url for robust XSS prevention
- Shorten renderInlineMarkdown JSDoc
- Single-user with href: collapse two adjacent links into one wrapping avatar + name
- Multi-user list: use href ?? index:name as key to avoid collisions on duplicate names
- Status dot: replace role="img"/aria-label with aria-hidden (text label is sufficient)

Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-04-23 08:52:08 +01:00
Johan Persson 9632e903eb Update .changeset/mean-monkeys-create.md
Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-04-23 09:37:35 +02:00