feat(quay): migrate plugin to the new frontend system#9441
Conversation
Co-Authored-By: Claude <noreply@anthropic.com>
ec37a01 to
ac34ab9
Compare
Missing ChangesetsThe following package(s) are changed by this PR but do not have a changeset:
See CONTRIBUTING.md for more information about how to add changesets. Changed Packages
|
There was a problem hiding this comment.
Pull request overview
This PR migrates the Quay frontend plugin in the workspaces/quay example workspace to Backstage’s new frontend system (NFS) by introducing an NFS createFrontendPlugin entry point, while keeping the legacy frontend system available via a /legacy subpath and a dedicated legacy dev entrypoint.
Changes:
- Added an NFS-based Quay plugin entry (
createFrontendPlugin) and updated exports to make it the default plugin export. - Preserved legacy frontend system exports under
@backstage-community/plugin-quay/legacyand added a legacy dev start script/entry. - Updated the Quay workspace/app wiring and bumped Backstage package versions to align with NFS dependencies.
Reviewed changes
Copilot reviewed 16 out of 17 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| workspaces/quay/yarn.lock | Updates lockfile to newer Backstage/NFS-related dependencies. |
| workspaces/quay/plugins/quay/src/plugin.tsx | Adds NFS createFrontendPlugin implementation for Quay. |
| workspaces/quay/plugins/quay/src/plugin.test.tsx | Adjusts test import to match default export. |
| workspaces/quay/plugins/quay/src/legacy.ts | Marks legacy exports deprecated and clarifies legacy usage. |
| workspaces/quay/plugins/quay/src/index.ts | Switches package root exports to default NFS plugin export. |
| workspaces/quay/plugins/quay/src/components/QuayWidget/QuayWidget.tsx | Updates isQuayAvailable import source. |
| workspaces/quay/plugins/quay/package.json | Adds /legacy export + NFS dev deps + legacy start script. |
| workspaces/quay/plugins/quay/dev/legacy.tsx | Adds legacy dev app entrypoint. |
| workspaces/quay/plugins/quay/dev/index.tsx | Replaces legacy dev app with an NFS createApp dev setup. |
| workspaces/quay/plugins/quay-common/package.json | Bumps permission common peer/dev deps. |
| workspaces/quay/plugins/quay-backend/package.json | Bumps backend dependencies to newer Backstage versions. |
| workspaces/quay/plugins/quay-actions/package.json | Bumps scaffolder module deps to newer Backstage versions. |
| workspaces/quay/packages/app/src/components/EntityPage.tsx | Updates Quay imports to use /legacy subpath. |
| workspaces/quay/package.json | Bumps workspace-level Backstage tooling versions. |
| workspaces/quay/backstage.json | Bumps Backstage version for the Quay workspace. |
| workspaces/quay/app-config.yaml | Adds an NFS route redirect from / to /catalog. |
| workspaces/quay/.changeset/migrate-quay-to-nfs.md | Adds changeset describing NFS migration + legacy subpath. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| import { | ||
| ApiBlueprint, | ||
| configApiRef, | ||
| createFrontendPlugin, | ||
| discoveryApiRef, | ||
| identityApiRef, | ||
| } from '@backstage/frontend-plugin-api'; | ||
| import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha'; |
| path: '/quay', | ||
| title: 'Quay', | ||
| routeRef: rootRouteRef, | ||
| filter: isQuayAvailable, | ||
| loader: async () => import('./components/Router').then(m => <m.Router />), | ||
| }, |
| export default createFrontendPlugin({ | ||
| pluginId: 'quay', | ||
| extensions: [quayApi, quayEntityContent], | ||
| routes: { | ||
| root: rootRouteRef, | ||
| tag: tagRouteRef, | ||
| }, | ||
| }); |
Co-Authored-By: Claude <noreply@anthropic.com>
| --- | ||
| '@backstage-community/plugin-quay': minor | ||
| --- | ||
|
|
||
| Migrate Quay plugin to the new frontend system (NFS). The legacy frontend system exports are now available under the `/legacy` subpath. |
| import { | ||
| ApiBlueprint, | ||
| configApiRef, | ||
| createFrontendPlugin, | ||
| discoveryApiRef, | ||
| identityApiRef, | ||
| } from '@backstage/frontend-plugin-api'; | ||
| import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha'; | ||
|
|
| path: '/quay', | ||
| title: 'Quay', | ||
| routeRef: rootRouteRef, | ||
| filter: isQuayAvailable, | ||
| loader: async () => import('./components/Router').then(m => <m.Router />), |
| routes: { | ||
| root: rootRouteRef, | ||
| tag: tagRouteRef, | ||
| }, | ||
| }); |
| "@backstage/catalog-model": "^1.9.0", | ||
| "@backstage/core-components": "^0.18.10", | ||
| "@backstage/core-plugin-api": "^1.12.6", | ||
| "@backstage/frontend-plugin-api": "^0.17.1", | ||
| "@backstage/plugin-catalog-react": "^3.0.0", | ||
| "@backstage/plugin-permission-react": "^0.5.1", |
|
Thanks for the contribution! |
Summary
createFrontendPlugin,ApiBlueprint, andEntityContentBlueprint/legacysubpath for backwards compatibilitypackages/appandpackages/backendand started using dev app as primary testing mechanism.Test plan
yarn startyarn start:legacyquay.io/repository-slugannotation🤖 Generated with Claude Code