feat: upgrade Backstage from 1.51.1 to 1.53.1 - #94
Conversation
- Add MISE_PYTHON_GITHUB_ATTESTATIONS=false to Dockerfile (both build and run stages) to bypass mise Python 3.10.12 attestation failures in mise 2026.5.16+ - Copy .yarn/plugins/ and backstage.json before yarn install in build stage - the Backstage Yarn plugin requires these to resolve backstage:^ version ranges - Remove yarn tsc from Dockerfile - type checking is already covered by backstage-cli repo lint in CI - Copy .yarn/plugins/ and backstage.json before yarn workspaces focus in run stage for the same reason - Run mise install locally to rebuild native modules (better-sqlite3, isolated-vm, cpu-features) for Node 22 ABI
- Fix GitHub Light/Dark themes missing text colors and component overrides
- Import styles.css into GitHub theme package
- Add MuiGrid, MuiTypography, MuiCard overrides to GitHub themes
- Remove negative marginBottom from catalog Grid items
- Add consistent spacing={2} to all catalog Grid containers
- Increase default theme MuiGrid padding from .5rem to 1rem
- Fix missing item prop on nested Grid in apiPage
- Remove MuiGrid overrides from both default and GitHub themes The overrides broke MUI's spacing prop by zeroing out item padding - Add global CSS fix for Backstage's v5-MuiGrid class name prefix Backstage's UnifiedThemeProvider adds 'v5-' prefix to MUI classes, but Grid's internal CSS still targets .MuiGrid-item selectors. This mismatch caused all Grid items to have 0 padding, making cards touch each other across all pages. - Import grid-fix.css in index.tsx so it applies globally
- Bumped backstage version to 1.53.1 (latest stable as of 2026-07-29) - Updated yarn backstage plugin checksum and spec to 1.53.1 - Yarn install pulled in updated @backstage/* packages (cli 0.36.4, core-plugin-api 1.12.8, plugin-catalog 2.0.7, plugin-scaffolder 1.38.1, plugin-auth-backend 0.29.2, frontend-plugin-api 0.17.3, ui 0.17.0, backend-defaults 0.17.6, plugin-notifications 0.5.19, plugin-signals 0.0.33) Verified locally: - yarn lint:all passes (54 files across 5 packages) - yarn test passes (9 tests, 1 skipped pre-existing) - yarn build:all succeeds for app and backend - yarn workspace backend start boots cleanly, all 10 plugins initialise, catalog processes all 73 entities - yarn workspace app start compiles with Rspack No breaking changes required for this codebase. Notable v1.52 / v1.53 breaking changes (discovery.endpoints object form, ComboboxProps union, PolicyQueryUser.token removal, immediate stitching removal, etc.) were checked against the current code and app-config and are not in use.
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
|
Replaced by PR on chore/upgrade-backstage-1.53.1-clean — this branch was 11 commits behind main with redundant padding-fix commits that conflict on rebase. Opening a clean single-commit PR on top of main. |
Summary
backstage.jsonand the yarn backstage plugin spec from 1.51.1 to 1.53.1 (latest stable, released 2026-07-29)@backstage/*packages (e.g.cli0.36.2 → 0.36.4,plugin-catalog2.0.5 → 2.0.7,plugin-scaffolder1.37.0 → 1.38.1,plugin-auth-backend0.29.0 → 0.29.2,frontend-plugin-api0.17.1 → 0.17.3,ui0.15.0 → 0.17.0,backend-defaults0.17.2 → 0.17.6,plugin-notifications0.5.17 → 0.5.19,plugin-signals0.0.31 → 0.0.33)Consequences
None for this codebase. Notable v1.52 / v1.53 breaking changes were checked against current code and
app-config.yaml:discovery.endpointsobject form — not configuredComboboxProps/SelectPropsunion types — not extendedPolicyQueryUser.token/expiresInSecondsremoval — module already usesinfocatalog.stitchingStrategy.mode: 'immediate'removal — not configured/kubernetespage removal — not usedbootstrapEnvProxyAgentsremoval — not usedThe 1.53.1
legacy-apptemplate additionally adds@backstage/plugin-user-settings-backend, which is optional (database-backed user settings — we use browser local storage via the frontendplugin-user-settings).Testing
Local verification on macOS (mise-managed toolchain, Node 22.11.0, Yarn 4.3.1):
yarn lint:all— passes across all 5 packagesyarn test --watchAll=false— 9 tests pass, 1 skipped (pre-existingApp.test.tsx)yarn build:all— frontend (Rspack) and backend bundles build cleanyarn dev(full stack) — backend initialises all 10 plugins (app,auth,catalog,notifications,permission,proxy,scaffolder,search,signals,techdocs), guest auth issues tokens, catalog returns 73 entities across 7 kinds, frontend compiles and serves on:3000CI will pick this up via the existing
build.ymlworkflow.