74233 Commits

Author SHA1 Message Date
Fredrik Adelöw 6cc48113fc remove some cli deprecation warnings
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-30 09:44:30 +02:00
Patrik Oldsberg 4a01a66da3 docs: document app/routes redirect configuration
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-30 01:36:07 +02:00
Patrik Oldsberg e5baa20a1b plugin-app: add redirect config to app/routes extension
Allow users to configure URL redirects on the app/routes extension
through app-config. Redirects are specified as an array of {from, to}
path pairs in the extension config schema.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-30 00:34:56 +02:00
Patrik Oldsberg 3c0b453d7e Revert NFS page variants, keep only title and icon additions
Roll back the NFS page component changes (BuiHeader, headerVariant,
NfsCatalogGraphPage, NfsDefaultImportPage) from catalog-graph and
catalog-import plugins. Only the title and icon metadata additions to the
new frontend system plugin definitions are retained.

For the kubernetes plugin, replace the generic RiShipLine icon with a
proper Kubernetes helm wheel SVG icon from Simple Icons.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-30 00:19:41 +02:00
Patrik Oldsberg c9132c223c docs: improve new frontend system docs for techdocs, scaffolder, and catalog
Expand the TechDocs home page customization section with concrete examples
showing how to override the page:techdocs extension using a frontend module.

Replace the incorrect scaffolder custom step layouts guide with a note that
this feature is not yet supported in the new frontend system.

Restore missing catalog customization docs for columns, actions, table
options, removing filters, and fully custom catalog pages to ensure parity
with the old frontend system guide.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 23:04:08 +02:00
Patrik Oldsberg 15ab64be96 docs: fix relative link depth in customize-theme guide
The previous fix overshot the directory traversal — three levels up
escapes the docs root. Use two levels (`../../`) to correctly reach the
frontend-system migration guide from golden-path/create-app/.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 22:49:58 +02:00
Patrik Oldsberg a7aedb4f0a scaffolder: restore schema title rendering and fix toolbar test
The migration to the table-based RenderSchema dropped rendering of the
JSON Schema `title` field. Restore it in the ValueCell. Also update the
TemplateEditorToolbar test to select an action before asserting on its
schema details, matching the new list+detail UI.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 22:49:04 +02:00
Patrik Oldsberg 0a7ec8e7c9 scaffolder: widen schema name column to 300px
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 22:41:15 +02:00
Patrik Oldsberg 93cb19813f fix: correct broken link to extension overrides documentation
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 22:40:19 +02:00
Patrik Oldsberg dce631e6f7 docs: fix broken relative link in customize-theme guide
Fix the relative path to the sidebar customization section in the
migration guide, which was missing two levels of directory traversal.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 22:39:53 +02:00
Patrik Oldsberg 8ec254cd4b docs: migrate feature docs to new frontend system as primary content
Rewrite documentation for TechDocs, Software Templates, Software Catalog,
Search, and Kubernetes features to use the new frontend system as the
primary installation and configuration instructions. Old frontend system
instructions are moved to separate `--old` suffixed files for pages with
substantial legacy content, or updated inline for pages with minimal
old-system content.

Files migrated:
- techdocs/getting-started.md
- techdocs/how-to-guides.md
- software-templates/writing-custom-step-layouts.md
- software-templates/writing-custom-field-extensions.md
- software-templates/index.md
- software-catalog/catalog-customization.md
- search/getting-started.md
- search/how-to-guides.md
- kubernetes/installation.md

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 21:47:46 +02:00
Patrik Oldsberg 7c1b319e74 docs: migrate getting-started docs to new frontend system
Migrate four documentation pages to use the new frontend system as the
primary content, moving the old frontend system instructions to --old
files following the established convention:

- configure-app-with-plugins: rewrite for auto-discovered plugins
- customize-theme: rewrite for ThemeBlueprint/extension-based theming
- enable-public-entry: make new frontend system the primary content
- quickstart-app-plugin: remove manual sidebar wiring instructions

Each main file gets an info banner linking to the --old variant, and
each --old file gets a banner linking back to the current guide.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 21:35:17 +02:00
Patrik Oldsberg 23f731118d docs: migrate OIDC auth docs to new frontend system
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 21:32:52 +02:00
Patrik Oldsberg 2ad2771944 docs: migrate notifications docs to new frontend system
Rewrite the notifications documentation pages to target the new
frontend system as the primary content, and move the old frontend
system instructions to --old files following the established convention.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 21:30:48 +02:00
Patrik Oldsberg 1d94f0f9f7 fix: prevent actions list from expanding beyond screen edge
Add minWidth and overflow constraints to the List component so long
descriptions are truncated with ellipsis instead of overflowing the
grid column.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-29 21:24:37 +02:00
Fredrik Adelöw 0336f92de8 Merge pull request #33658 from backstage/freben/clarify-fetch-failures
Add FetchMiddlewares.clarifyFailures and improve permission error handling
2026-03-29 12:51:04 +02:00
Fredrik Adelöw 0eb8d1a31f Merge pull request #33290 from backstage/freben/catalog-exists-query-optimization
catalog-backend: optimize entity filter queries with EXISTS
2026-03-29 12:48:38 +02:00
Fredrik Adelöw 4538f05b24 Address PR review: extract shared searchExists helper and rename strategy
- Extract shared `searchExists` helper into `searchSubquery.ts` to avoid
  duplicate EXISTS subquery logic between the two filter modules
- Rename `applyInStrategy` to `applyExistsStrategy` to reflect the actual
  query shape
- Update block comment with correct EXISTS SQL examples
- Remove unused `strategy` parameter from `applyEntityFilterToQuery`

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-29 12:31:01 +02:00
Patrik Oldsberg 9f3affb864 Merge pull request #33601 from thomvaill/github-provider-fix-validateLocationsExist-with-branch-filter
fix(github-provider): `validateLocationsExist: true` + `filters.branch` bug [contribfest]
2026-03-29 12:14:23 +02:00
Fredrik Adelöw d19e32ccad Use duck-typing for Request check and make clarification best-effort
Replace instanceof Request with a duck-type isRequestLike helper to
avoid cross-realm issues, and wrap the clarification logic in a
try/catch so it can never mask the original error.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-29 10:30:22 +02:00
Fredrik Adelöw 741d367817 Merge pull request #33659 from backstage/freben/parallelize-cli-reports 2026-03-29 08:23:49 +02:00
Fredrik Adelöw 688481429c catalog-backend: optimize entity filter queries with EXISTS
Switch filter query builders from IN (subquery) to EXISTS (correlated
subquery) patterns. This enables PostgreSQL semi-join optimizations
(stops at first match) and replaces NOT IN with NOT EXISTS (faster,
no NULL-semantics pitfalls).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 22:45:48 +01:00
Patrik Oldsberg 693c6e8277 scaffolder: refine schema table cell styling
Style the name column with monospace text and widen it slightly. Add a
neutral background badge style to type labels in the value column.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 21:26:57 +01:00
Patrik Oldsberg 881d586722 scaffolder: use high-level Table component with column configs
Replace manual composition of TableRoot/TableHeader/TableBody/Row/Column
primitives with the top-level Table component and ColumnConfig-based
column definitions.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 21:20:06 +01:00
Patrik Oldsberg 648d2b9e51 scaffolder: use fixed width for name column in schema table
Use a fixed pixel width for the name column instead of a fractional
unit, preventing it from growing too wide with longer property names.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 21:05:26 +01:00
Patrik Oldsberg daa7bdc7b0 scaffolder: adjust table column widths for better proportions
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 20:55:56 +01:00
Patrik Oldsberg 7daa71fdc6 scaffolder: merge description and type into a single value column
Combine the description and type columns into a single "Value" column
that shows the type, description, and nested content inline. This
avoids the broken layout where expanded rows were rendered as siblings
below the table, decoupled from their row context.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 19:20:55 +01:00
Patrik Oldsberg 7936e5c917 scaffolder: use single table for schema properties and widen description column
Consolidate the per-property tables into a single table with one header
row, eliminating the repeated table headers for each property. Give the
description column 3x the width of name/type columns so longer
descriptions get more room.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 19:08:03 +01:00
Patrik Oldsberg 22c00fd011 scaffolder: render each property as its own table and make subschemas collapsible
Restructure schema rendering so each property row is wrapped in its own
table, enabling inline expansion of nested schemas. Remove the title
column since it duplicated the name. Make subschema sections (oneOf etc.)
collapsible behind toggle buttons instead of rendering them expanded.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 18:47:57 +01:00
Patrik Oldsberg 80d4b26a29 scaffolder: fix detail panel grid column placement
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 18:32:25 +01:00
Patrik Oldsberg 9a6d9969a6 scaffolder: use CSS grid layout to fix search field focus loss
The search field was being rendered in two separate conditional branches
(empty state vs list state), causing React to remount it when toggling
between them and losing focus. Restructure to a CSS grid layout where
the search field is always in a stable tree position.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 18:28:41 +01:00
Fredrik Adelöw 8278540c60 Fix pLimit type and remove trailing comma in error message
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 18:27:53 +01:00
Patrik Oldsberg 8d03040306 scaffolder: fix actions page layout alignment
Add `alignItems="start"` to the top-level Flex container so the sidebar
and detail panels align to the top rather than stretching to equal height.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 18:21:56 +01:00
Fredrik Adelöw 8e9679b3eb Parallelize CLI report generation in repo-tools
Converts createBinRunner from spawnSync to async spawn, and processes
all CLI packages concurrently with a shared p-limit limiter bounded
by CPU count. Reduces wall-clock time from ~50s to ~12s.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 17:48:33 +01:00
Patrik Oldsberg 16a15f276e scaffolder: fix actions page list and schema rendering issues
Always show descriptions in the action list regardless of selection
state, use MarkdownContent for the detail description, fix the
isRowHeader error by always marking the first column, and move schema
expansion content outside of the table to avoid broken nesting and
scroll-jump issues. Subschemas (anyOf/oneOf) now render at full width
inside a Flex column layout.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 17:42:02 +01:00
Patrik Oldsberg 338f7e01f4 scaffolder: use sidebar layout for actions page detail view
Replace accordion groups with plain titled sections for action
input/output/examples, and switch to a sidebar layout where the
action list remains visible when viewing action details.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 17:32:57 +01:00
Fredrik Adelöw c38610bd9d Address review feedback: add cast rationale, drop redundant assertError
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 17:07:00 +01:00
Fredrik Adelöw cba19b13de Avoid new Request() in catch to prevent disturbed body errors
Extracts method/url directly from the input instead of constructing
a new Request in the catch block, which could fail if the body was
already consumed. Also adds a test with Request object input.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 17:04:02 +01:00
Fredrik Adelöw 18c3dbadd6 Update packages/core-app-api/src/apis/implementations/FetchApi/ClarifyFailuresFetchMiddleware.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-03-28 17:01:07 +01:00
Fredrik Adelöw 9f1ac04765 Update packages/core-app-api/src/apis/implementations/FetchApi/ClarifyFailuresFetchMiddleware.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-03-28 17:00:56 +01:00
Fredrik Adelöw 400aa2313a Add FetchMiddlewares.clarifyFailures and improve permission error handling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-28 16:55:33 +01:00
Patrik Oldsberg 52c18c1f9a scaffolder: migrate RenderSchema and ActionsPage to @backstage/ui components
Replace all @material-ui imports in RenderSchema with @backstage/ui
equivalents (TableRoot, TableHeader, TableBody, Row, Column, Cell,
CellText, Button, Text, Flex, Tooltip). Simplify SchemaRenderContext
by removing the classes and headings fields that were only needed
for @material-ui styling.

Redesign the ActionsPage to use a List with selectable rows instead
of a Table with a separate detail Card. When an action is selected,
all descriptions are hidden from the list and the action detail is
shown below with input/output schemas and examples in accordions.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 16:43:22 +01:00
Patrik Oldsberg dae4e6ef09 scaffolder: improve actions page UX with pagination and card detail view
Replace the unpaginated action list with a paginated table showing 20
items per page, giving users a clear count and navigation controls.
Consolidate the two-column layout into a single column with the
description shown as subtitle text in each row.

Revamp the action detail view using Backstage UI Card and Accordion
components for a structured, collapsible layout of input/output schemas
and usage examples.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 16:03:46 +01:00
Patrik Oldsberg 0cb1189130 workflows: add Discord notification for ready PRs (#33655)
* workflows: add Discord notification for ready PRs

Adds a new workflow that posts to Discord whenever a pull request is
opened as non-draft or marked as ready for review. Uses jq to safely
construct the JSON payload and sends it via curl to a webhook URL
stored in repository secrets.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor

* workflows: harden Discord webhook notification

Add early guard for missing webhook secret, disable Discord mention
parsing to prevent abuse via PR titles/bodies, and check the HTTP
response to surface webhook failures.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor

* workflows: upgrade github-script to v8 and truncate embed title

Align actions/github-script pin with the rest of the repo (v8.0.0)
and truncate the Discord embed title to the 256-character limit to
prevent webhook failures on long PR titles.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor

---------

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-28 15:44:47 +01:00
Patrik Oldsberg 34f5dc5ae1 Update catalog-graph alpha API report
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 15:02:28 +01:00
Patrik Oldsberg e923ff1485 Remove unnecessary NFS page component exports
Page components without props don't need to be exported from the
package API surface. Import directly from the component file in
the alpha entry points instead.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 14:50:59 +01:00
Patrik Oldsberg 31c460da83 scaffolder: use table layout for actions page
Replace the accordion-based actions list with a Table component from
@backstage/ui, providing aligned columns for action name and description
with click-to-expand detail view.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 14:50:00 +01:00
Patrik Oldsberg 5d8112e8f1 scaffolder: migrate actions page to accordion layout
Replace the table-based actions page with an accordion layout using
@backstage/ui components. Each action is listed as an expandable
accordion, letting users browse the full list while expanding
individual actions to see their schema details inline. This avoids
the need to scroll between a table and a detail section.

The search field is kept for filtering actions by name or description.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 14:18:30 +01:00
Patrik Oldsberg 3cf1950a3f plugin-catalog-import: move NFS page export to alpha entry point
Move NfsDefaultImportPage out of the public API and export it as
DefaultImportPage from the alpha entry point instead.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 14:03:00 +01:00
Patrik Oldsberg 18c928175d workflows: replace Ilshidur/action-discord with inline github-script
Replace the third-party Discord notification action with inline
`actions/github-script@v8` steps that post to the Discord webhook
directly using fetch. This removes a third-party action dependency
and adds explicit error handling for missing secrets and failed
webhook requests.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-28 13:07:38 +01:00