Skip to content

feat: Complete Migration to New Front End#367

Open
tfhartmann wants to merge 5 commits intomainfrom
new-frontend
Open

feat: Complete Migration to New Front End#367
tfhartmann wants to merge 5 commits intomainfrom
new-frontend

Conversation

@tfhartmann
Copy link
Copy Markdown
Collaborator

This is a pretty large change and includes a number of plugin updates and adds some docs.

This PR completes the migration to the new backstage frontend, and migrates as many pluins as I was able.

This changes the way backstage looks and how a number of pages are laid out.

This change includes a number of plugin updates and adds some docs.
This changes the way backstage looks and how a number of pages are
laid out.
Copilot AI review requested due to automatic review settings April 9, 2026 16:44
@tfhartmann tfhartmann requested a review from a team as a code owner April 9, 2026 16:44
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Completes the migration of this Backstage instance to the new frontend system by updating plugin dependencies, swapping legacy route/plugin wiring to alpha frontend plugins + modules, and updating documentation to reflect the current plugin set and removed plugins.

Changes:

  • Update Backstage/third-party plugin versions (notably Copilot, GitHub Actions/PR board, Tech Radar, Spotify plugins) and remove Cloud Build.
  • Migrate the app to the new frontend architecture (alpha plugins + frontend modules), including a new navigation module/sidebar.
  • Refresh plugin documentation and repository ignores.

Reviewed changes

Copilot reviewed 8 out of 10 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
docs/plugins.md Rewrites plugin inventory/notes and documents removed plugins.
backstage/yarn.lock Large dependency graph update reflecting plugin/version migration and removals.
backstage/packages/backend/package.json Bumps backend plugin dependencies (Copilot backend + Spotify/Roadie modules).
backstage/packages/app/src/plugins.ts Removes Cloud Build plugin export.
backstage/packages/app/src/modules/nav/Sidebar.tsx Adds new sidebar implementation for the migrated frontend.
backstage/packages/app/src/modules/nav/index.ts Registers the nav frontend module extension.
backstage/packages/app/src/components/catalog/EntityPage.tsx Removes Cloud Build + Roadie PR views; switches PR routing and updates Soundcheck imports.
backstage/packages/app/src/App.tsx Switches to @backstage/frontend-defaults app creation and registers alpha plugin features + modules.
backstage/packages/app/package.json Updates app plugin dependency versions and mermaid addon version.
.gitignore Ignores .backstage-tmp.
Comments suppressed due to low confidence (2)

docs/plugins.md:158

  • The document still contains a placeholder section header (## todo). This looks like unfinished documentation and will likely confuse readers; either remove it or replace it with a proper ## TODO section that explains what remains and tracks actionable items (ideally with links/issues).
### Removed Plugins

- Google Cloud Build: This plugin has been removed from the app and is no longer
  in use.

## todo

Configuration as Data (kpt)

backstage/packages/backend/package.json:76

  • @backstage/backend-defaults (current lockfile versions) declares an optional peer dependency on better-sqlite3@^12.0.0, but this package.json still pins better-sqlite3 to ^11.8.0. Even if optional, this will produce peer dependency warnings and may break SQLite-backed deployments; consider upgrading better-sqlite3 to ^12 (or aligning Backstage package versions) to match the peer range.
    "@spotify/backstage-plugin-soundcheck-backend-module-github": "^0.8.8",
    "@spotify/backstage-plugin-soundcheck-backend-module-http": "^0.1.18",
    "@spotify/backstage-plugin-soundcheck-backend-module-scm": "^0.11.8",
    "app": "link:../app",
    "better-sqlite3": "^11.8.0",
    "dockerode": "^4.0.3",
    "express": "^5.1.0",
    "express-promise-router": "^4.1.0",

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +76 to +85
// Search and primary pages are placed in fixed groups below.
nav.take('page:search');
nav.take('page:catalog');
nav.take('page:api-docs');
nav.take('page:techdocs');
nav.take('page:scaffolder');
nav.take('page:insights');
nav.take('page:rbac');
nav.take('page:pagerduty');
nav.take('page:user-settings');
Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nav.take('page:insights') and nav.take('page:pagerduty') remove those pages from nav.rest(...), but this sidebar implementation doesn't render replacement items/links for them. If those plugins are intended to be user-accessible (they’re installed/enabled elsewhere), this effectively hides them from navigation; either stop taking them here or add explicit SidebarItem entries for their routes.

Copilot uses AI. Check for mistakes.
Comment on lines +143 to +145
icon={ExtensionIcon}
to="/rbac"
text="RBAC"
Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The RBAC SidebarItem block is mis-indented compared to the rest of the file (and will likely fail prettier --check / make future diffs noisy). Run Prettier (or adjust indentation) so this JSX matches the surrounding formatting.

Suggested change
icon={ExtensionIcon}
to="/rbac"
text="RBAC"
icon={ExtensionIcon}
to="/rbac"
text="RBAC"

Copilot uses AI. Check for mistakes.
Comment on lines 69 to 88
@@ -84,11 +83,6 @@ const techdocsContent = (
</EntityTechdocsContent>
);
import { SkillExchangeUserEntitySkillsCard } from '@spotify/backstage-plugin-skill-exchange';
import {
EntitySoundcheckContent,
EntitySoundcheckCard,
} from '@spotify/backstage-plugin-soundcheck';
import { GroupSoundcheckContent } from '@spotify/backstage-plugin-soundcheck';
import { Mermaid } from 'backstage-plugin-techdocs-addon-mermaid';
import elkLayouts from '@mermaid-js/layout-elk';

Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are import ... statements after executable code (const techdocsContent = ...). While valid ESM, it’s inconsistent with the rest of the codebase and makes the module harder to scan/maintain; please move these imports up with the other imports at the top of the file.

Copilot uses AI. Check for mistakes.
Comment on lines 56 to +67
"@material-ui/icons": "^4.9.1",
"@mermaid-js/layout-elk": "^0.1.8",
"@pagerduty/backstage-plugin": "^0.18.0",
"@pagerduty/backstage-plugin-backend": "^0.11.0",
"@pagerduty/backstage-plugin-common": "^0.2.3",
"@roadiehq/backstage-plugin-github-pull-requests": "^3.6.0",
"@roadiehq/backstage-plugin-github-pull-requests": "^3.7.0",
"@roadiehq/plugin-scaffolder-frontend-module-http-request-field": "^2.3.0",
"@spotify/backstage-plugin-analytics-module-insights": "^0.10.1",
"@spotify/backstage-plugin-insights": "^0.8.2",
"@spotify/backstage-plugin-rbac": "^0.8.1",
"@spotify/backstage-plugin-skill-exchange": "^0.12.14",
"@spotify/backstage-plugin-soundcheck": "^0.19.6",
"@spotify/backstage-plugin-analytics-module-insights": "^0.10.6",
"@spotify/backstage-plugin-insights": "^0.9.0",
"@spotify/backstage-plugin-rbac": "^0.8.6",
"@spotify/backstage-plugin-skill-exchange": "^0.12.19",
"@spotify/backstage-plugin-soundcheck": "^0.23.2",
Copy link

Copilot AI Apr 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@roadiehq/backstage-plugin-github-pull-requests is still listed as a dependency, but it no longer appears to be imported/used anywhere in the app code after switching entity pull requests to @backstage-community/plugin-github-pull-requests-board. Consider removing this dependency to reduce install size and avoid carrying unused transitive deps.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates numerous Backstage plugin dependencies and migrates the application frontend toward the new Backstage frontend system. Key changes include the removal of the Google Cloud Build plugin, the introduction of a new sidebar module using the NavContentBlueprint, and the registration of several plugins (Catalog, Search, TechDocs, etc.) via the new features array in createApp. Feedback highlights potential route collisions in App.tsx where legacy route definitions for API Docs and other migrated plugins overlap with automatic route registration in the new system.

{searchPage}
</Route>
<Route path="/settings" element={<UserSettingsPage />} />
<Route path="/api-docs" element={<ApiExplorerPage />} />
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

This route is redundant because the apiDocsPlugin is already included in the features array (line 180). In the new frontend system, the alpha version of this plugin automatically registers the /api-docs route. Defining it here in the legacy routes object will cause a route collision.


const app = createApp({
features: [...convertedRootFeatures, convertedOptionsModule],
features: [
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Several plugins added here (homePlugin, searchPlugin, techdocsPlugin, scaffolderPlugin, and catalogImportPlugin) still have legacy route definitions in the routes constant. To complete the migration and avoid route conflicts, these legacy routes should be removed. Any custom logic (such as Scaffolder groups at line 118 or TechDocs addons at line 100) should be moved to the new extension system using the appropriate blueprints or extension creators.

@tfhartmann tfhartmann added the work in progress don't merge yet label Apr 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants