Adds the ability to cancel currently running scheduled tasks via a new
cancelTask method on the SchedulerService interface. For global (distributed)
tasks, the database lock is released and a periodic liveness check detects
the lost ticket and aborts the task function's AbortSignal. For local tasks,
the abort signal is triggered directly. Also adds a REST endpoint at
POST /.backstage/scheduler/v1/tasks/:id/cancel.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
* Deprecate HeaderPage in favor of Header in @backstage/ui
Rename the HeaderPage component to Header, keeping HeaderPage as a
deprecated alias for backwards compatibility. Also deprecate
HeaderPageProps, HeaderPageOwnProps, HeaderPageBreadcrumb, and
HeaderPageDefinition with new Header* equivalents. Update all internal
usages, stories, and docs-ui documentation to use the new names.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
* Rename HeaderPage files and directories to Header
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
* Add changeset for mui-to-bui Header rename
Document the plugin release impact of switching the MUI to BUI theme converter page to the renamed Header component.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
---------
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
* feat(org): migrate MembersListCard to BUI EntityInfoCard
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* feat(org)!: migrate OwnershipCard to BUI EntityInfoCard
Replaced MUI InfoCard with BUI EntityInfoCard in OwnershipCard.
Removed the `variant` and `maxScrollHeight` props since card sizing
and scrolling are now handled by the BUI layout. Wrapped body content
in a flex column div to keep the relations toggle pinned while the
grid scrolls. Updated app-legacy and create-app templates to remove
the dropped `variant` prop.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* feat(catalog-graph)!: migrate CatalogGraphCard to BUI EntityInfoCard
Replace MUI InfoCard with BUI EntityInfoCard in CatalogGraphCard.
The `variant` prop is removed — card sizing is now handled by the
BUI layout system. The deep link is replaced with a footer Link.
Remove `variant="gridItem"` from all EntityCatalogGraphCard usages
in app-legacy and create-app templates.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* feat(catalog-react): export useEntityRoute hook
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(cli): update translation extraction test for renamed org keys
Signed-off-by: Johan Persson <johanopersson@gmail.com>
---------
Signed-off-by: Johan Persson <johanopersson@gmail.com>
Log a warning to stderr when users pass the camelCase form of flags
that now have kebab-case as the canonical spelling. The old forms
still work (type-flag handles both natively) but users should migrate.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
type-flag natively supports both camelCase and kebab-case for all
flags, so no deprecation warnings or normalization are needed for
casing variants. Only the --alwaysYarnPack alias (a genuinely
different name) still requires normalization in buildWorkspace.
Also inlined flagDefs at each call site and updated the changeset
to reflect that both flag forms work transparently.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Remove unused active_ticket column and rename latest_ticket back to
stitch_ticket. Use knex.batchInsert in the up migration. Fix the down
migration to restore stitch_ticket on final_entities without a server-side
default, matching the original schema exactly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Replace the single stitch_ticket column in final_entities with a two-ticket
model (latest_ticket + active_ticket) in stitch_queue for optimistic
concurrency control. When picking up stitch work, active_ticket is set to
latest_ticket. Before writing results, the stitcher checks that latest_ticket
hasn't changed. This fully decouples stitching concurrency from final_entities.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
* refactor(ui): rename CardOverlay to CardTrigger
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* refactor(ui): replace Card overlay with visually-hidden trigger and focus ring
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* feat(ui): implement hybrid click delegation for interactive cards
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* docs(ui): add story for interactive scrollable card
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* chore: add changeset for interactive card scroll fix
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(ui): fix bottom scroll shadow showing when CardBody has no overflow
The reversed scroll-driven animation used `both` fill mode, causing the
backwards fill to show opacity: 1 when no scroll timeline was active.
Replace with two stacked animations using `forwards` fill only.
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* docs(ui): update InteractiveScrollable story to use onPress
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* style: format Card.module.css
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(ui): guard against Text node target in Card click handler
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* feat(ui): render Card as article element for better semantics
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* chore(ui): update API report
Signed-off-by: Johan Persson <johanopersson@gmail.com>
* fix(ui): prevent synthetic click from double-bubbling and exclude onClick from Card types
Signed-off-by: Johan Persson <johanopersson@gmail.com>
---------
Signed-off-by: Johan Persson <johanopersson@gmail.com>