Commit Graph

391 Commits

Author SHA1 Message Date
Ben Lambert d09c21cb84 feat(scaffolder): config-driven template groups and swappable TemplateCard (#34147)
* feat(scaffolder): config-driven template groups and swappable TemplateCard

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

* refactor(scaffolder): keep createGroupsWithOther internal

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

* docs(scaffolder): fix sub-page extension ID in changeset

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

* address PR review feedback

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

* split TemplateCard swappable contract from legacy props

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

* address review feedback: dedupe tags, defensive groups copy, doc clarifications

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

* regenerate api reports

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

* align docs and changeset with actual default group titles

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

* regen api reports after rebase

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

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-12 12:29:44 +02:00
Ben Lambert dbeb7aab3e feat(scaffolder): add BUI theme for scaffolder forms (#33053)
* feat(scaffolder): add BUI theme for scaffolder forms

Add a Backstage UI (BUI) form theme as an alternative to the Material
UI theme. Toggled via formProps.theme or enableBackstageUi page config.

Includes BUI widgets, templates, field extension variants, and a ported
React Aria Autocomplete component.

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

* refactor(scaffolder): use BUI Combobox and CheckboxGroup for form widgets

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

* chore(scaffolder): enable BUI form flag and add kitchen sink demo template

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

* fix(scaffolder): use outlined input style for BUI form widgets

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

* fix(scaffolder): address BUI form PR feedback

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

* fix(scaffolder): format CSS and regen API reports

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

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-12 10:35:21 +02:00
Ben Lambert 8006acf89a feat(scaffolder): promote formDecorators out of experimental (#34180)
* feat(scaffolder): promote formDecorators out of experimental

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

* fix(scaffolder): parse form decorator input through the configured zod schema

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

* refactor(scaffolder-backend): emit single formDecorators field on the parameter-schema response

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

* feat(scaffolder): promote form decorator blueprints to public API

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

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-11 11:29:36 +02:00
Andre Wanlin 2f33a9f63f Fixes for non-breaking typos and typos configuration
Signed-off-by: Andre Wanlin <awanlin@spotify.com>

More

Signed-off-by: Andre Wanlin <awanlin@spotify.com>
2026-04-29 16:54:05 -05:00
Patrik Oldsberg 717bbaf075 Fix alpha entry point translation ref re-exports to use @alpha instead of @public
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-17 17:50:25 +01:00
Patrik Oldsberg 0be2541b5c Promote translation refs from alpha to stable entry points
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
2026-03-17 17:50:25 +01:00
Gabriel Dugny 49171c9de4 chore: Update all imports to zod/v3
Signed-off-by: Gabriel Dugny <gabriel.dugny@believe.com>
2026-03-17 16:48:42 +01:00
Fredrik Adelöw 26fa44767a Merge pull request #31989 from 0xts/feat/scaffolder-logs-btn
feat: add log download btn for LogViewer
2026-03-10 16:24:26 +01:00
Ben Lambert f598909f0f feat(scaffolder): implement scaffolderServiceRef for credentials aware communication (#33044)
* add scaffolderServiceRef to scaffolder-node

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

* make ScaffolderApi methods required, add tests

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

* use request objects for single-string params in ScaffolderService

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

* add scaffolderServiceMock test utility

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

* adjust review comments

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

* add scaffolderApiMock test utility to scaffolder-react

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

* use items/totalItems response shape for listTasks

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

* pass credentials through for autocomplete

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

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-02-27 16:24:49 +00:00
Patrik Oldsberg 004b5c1208 Move formFieldsApiRef and ScaffolderFormFieldsApi to scaffolder-react
The formFieldsApiRef and ScaffolderFormFieldsApi type are now defined and
exported from @backstage/plugin-scaffolder-react/alpha, and re-exported
from @backstage/plugin-scaffolder/alpha for backwards compatibility.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-02-26 18:06:57 +01:00
Patrik Oldsberg 3843732b73 scaffolder-react: update useTemplateSchema test to use new test utils
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-02-09 19:53:32 +01:00
Patrik Oldsberg 36fb574fff use new mockApis
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-02-05 23:50:28 +01:00
Tanish Sharma 470f72d835 feat: add log download btn for LogViewer
Signed-off-by: Tanish Sharma <tanish.sharma@siemens.com>
2026-02-05 12:02:16 +00:00
Patrik Oldsberg 2eeca031c4 scaffolder: migrate nfs form fields to utility API
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-01-26 16:53:04 +01:00
Johan Persson cd0b8a11a3 chore: make jest a peer dependency with v29/v30 support
Move jest from dependencies to peer dependencies, allowing users to
choose between Jest 29 and Jest 30.

The CLI now detects the Jest version at runtime and uses the
appropriate environment:
- Jest 29: Uses standard jest-environment-jsdom
- Jest 30: Uses a custom environment based on @jest/environment-jsdom-abstract
  with fixes for Web API globals (fetch, streams, Error, etc.)

The cross-fetch polyfill is only injected for Jest 29, as with Jest 30+
our patched Jest environment is used. The network request blocker is made
MSW-compatible by checking if fetch was wrapped before blocking.

Jest 30 (with jsdom v27) fixes `Could not parse CSS stylesheet`
warnings/errors when testing components from @backstage/ui or other
packages using CSS `@layer` declarations.

New peer dependencies (install based on your Jest version):
- jest (required, ^29 or ^30)
- Jest 29 requires: jest-environment-jsdom
- Jest 30 requires: @jest/environment-jsdom-abstract, jsdom

Production code changes for jsdom 27 testability:
- AppIdentityProxy: extract navigateToUrl method for spying
- LiveReloadAddon: export utils.reloadPage for spying
- collect.ts: export internal.resolvePackagePath for mocking

MockFetchApi: evaluate global.fetch at call time instead of construction
time, allowing MSW to patch fetch after MockFetchApi is constructed.

Test adaptations for jsdom 27:
- Use RGB values instead of named colors in CSS assertions
- Update error format expectations (hyphenated type names, SyntaxError
  instead of FetchError for JSON parse errors)
- Simplify URL error assertions for cross-version compatibility
- Fix accessible name whitespace handling for external links
- Use history.replaceState for location mocking (non-configurable)
- Use fireEvent.blur for contentEditable elements
- Move async assertions inside waitFor for race conditions
- Remove Blob.prototype.text polyfill (now native)
- Remove test case using credentials in plugin:// URLs

Test adaptations for Jest 30:
- Replace `expect.objectContaining([...])` with direct array equality
- Replace `expect.objectContaining({ length: N })` with
  `expect.any(Array)` + separate `toHaveLength()` assertions
- Use child process for native Node.js module resolution in
  collect.test.ts to work around Jest 30's resolver behavior
- Update snapshot headers for new Jest format

Also removes the jest-haste-map patch which is no longer needed.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2025-12-11 18:06:55 +01:00
ambulgm 275a57d772 don't format custom names
Signed-off-by: ambulgm <mukul.ambulgekar@autodesk.com>
2025-11-25 17:35:54 +01:00
Patrik Oldsberg b436f73803 Merge pull request #31166 from schultzp2020/constructor-parameters
refactor: convert constructor parameter properties for erasableSyntaxOnly compatibility
2025-10-15 18:56:42 +02:00
Paul Schultz 05f60e1e0a refactor: convert constructor parameter properties for erasableSyntaxOnly compatibility
Signed-off-by: Paul Schultz <pschultz@pobox.com>
2025-10-14 08:29:21 -05:00
Iain van der Wiel 5a33f640c2 fix: Fixed bug in template parsing in the useTemplateSchema hook by completely removing title from step instead of setting it to undefined
Signed-off-by: Iain van der Wiel <iain.vanderwiel@gmail.com>
2025-10-10 13:51:11 +02:00
benjdlambert 48df0d0e32 chore: fixing loading state
Signed-off-by: benjdlambert <ben@blam.sh>
2025-09-26 12:50:15 +02:00
Stephen Glass 58fc108846 Set a minimum height for scaffolder task log stream
Signed-off-by: Stephen Glass <stephen@stephen.glass>
2025-08-20 23:16:24 -04:00
Patrik Oldsberg 147482b700 frontend-plugin-api: switch naming recommendation from define to defineParams
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-04 17:17:05 +02:00
Ben Lambert 1315a825cf Merge pull request #27771 from solimant/23819_scaffolder_openapi
Move Scaffolder API to OpenAPI
2025-07-29 14:36:47 +02:00
Ben Lambert cf6fb4b5aa Merge pull request #30670 from backstage/export
Export `FormField` type from Scaffolder
2025-07-29 14:08:29 +02:00
benjdlambert c48a43fe53 chore: small refactor and moving types around
Signed-off-by: benjdlambert <ben@blam.sh>
2025-07-29 13:45:11 +02:00
solimant d2da49c568 Deprecate and re-export
Signed-off-by: solimant <solimant@users.noreply.github.com>
2025-07-28 20:59:34 +00:00
Patrik Oldsberg f2f133ce8d update all usages of ApiBlueprint
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-07-28 22:27:13 +02:00
Ben Lambert d95621b1ee Merge pull request #29202 from 04kash/scaffolder-task-granular-permissions
Scaffolder task granular permissions
2025-07-08 12:54:43 +02:00
Stephen Glass 7f650756b1 Fix scroll to on step change test
Signed-off-by: Stephen Glass <stephen@stephen.glass>
2025-07-06 00:57:12 -04:00
Stephen Glass 428b4349f4 Add test for form template scroll to top on step change
Signed-off-by: Stephen Glass <stephen@stephen.glass>
2025-07-06 00:31:17 -04:00
Stephen Glass 94c11a5d7f Scroll to the top of the page when navigating between template form steps
Signed-off-by: Stephen Glass <stephen@stephen.glass>
2025-07-06 00:24:27 -04:00
Kashish Mittal 152ae1e3c5 feat: initial implementation of scaffolder granular permissions
Signed-off-by: Kashish Mittal <kmittal@redhat.com>
Co-authored-by: Frank Kong <frkong@redhat.com>
2025-06-18 16:18:33 -04:00
Vincenzo Scamporlino 2c77bd52d7 scaffolder: track steps
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
2025-06-13 10:30:49 +02:00
Vincenzo Scamporlino bea4f7f368 scaffolder: do not error on render method
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
2025-06-13 10:01:33 +02:00
Vincenzo Scamporlino 2da89d1289 scaffolder: refine analytics events data
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
2025-06-13 10:00:42 +02:00
Gabriel Dugny 72d019d663 chore(typos): Fix low-impact typos
Signed-off-by: Gabriel Dugny <gabriel.dugny@believe.com>
2025-04-23 17:56:22 +02:00
Matt Benson 4235e87d2f add templating extensions page
Signed-off-by: Matt Benson <gudnabrsam@gmail.com>
2025-04-21 10:07:41 -05:00
benjdlambert dc949c8073 templateExtensions -> templatingExtensions
Signed-off-by: benjdlambert <ben@blam.sh>
2025-04-17 10:18:40 +02:00
Ben Lambert aee08a7aa1 Merge pull request #29416 from Vity01/scaffolding-detail-button-color-fix
Scaffolding detail button color fix
2025-04-15 11:26:49 +02:00
Paul Schultz 2e26579e06 chore: update react imports
Signed-off-by: Paul Schultz <pschultz@pobox.com>
2025-04-08 07:35:24 -05:00
Ladislav Vitásek 7ae999684a feat: add customizable className prop to TemplateDetailButton and update CardHeader to use it
Signed-off-by: Ladislav Vitásek <ladislav.vitasek@gendigital.com>
2025-03-28 15:54:48 +01:00
Matt Benson 5890016e8a add api to retrieve template extensions info from scaffolder-backend
Signed-off-by: Matt Benson <gudnabrsam@gmail.com>
2025-03-24 13:25:43 -05:00
Ladislav Vitásek 609a3a123e test fix + button system icon as default
Signed-off-by: Ladislav Vitásek <ladislav.vitasek@gendigital.com>
2025-03-18 12:28:30 +01:00
Ladislav Vitásek 6ed42b764c feat: add TemplateDetailButton to CardHeader and update tests
Signed-off-by: Ladislav Vitásek <ladislav.vitasek@gendigital.com>
2025-03-18 11:26:20 +01:00
JounQin 3db64ba50f feat(scaffolder): disable the submit button on creating
close #29054

Signed-off-by: JounQin <admin@1stg.me>
2025-03-08 02:28:26 +08:00
JounQin 48aab132f6 feat: add i18n support for scaffolder-react plugin
Signed-off-by: JounQin <admin@1stg.me>
2025-03-05 15:11:44 +08:00
Ben Lambert a22c38e5f5 Merge pull request #28944 from acierto/issue-28239-fix
Fix field extension validation not working when field is in dependencies in an array field
2025-02-28 11:25:28 +01:00
bnechyporenko 4d26652893 Fix field extension validation not working when field is in dependencies in an array field
Signed-off-by: bnechyporenko <bnechyporenko@bol.com>
2025-02-23 11:05:53 +01:00
Patrik Oldsberg b3b7c9c99b scaffolder: attach form field extensions to page instead
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-02-12 10:06:30 +01:00
Ben Lambert 8688bcc40d Merge pull request #28521 from yu-kkurii/optional-text-output-button
Hide text output button if only one text output is defined
2025-02-04 11:02:12 +01:00