From 495ac85e469ae553583222172298c8fbb22ccb60 Mon Sep 17 00:00:00 2001 From: Ashraf Masarwa Date: Thu, 17 Sep 2026 13:43:30 +0300 Subject: [PATCH] v1.55.0 version bump Use backstage-cli versions:bump for the DCM workspace and re-apply breaking-change fixes for catalog cards, backend plugin typing, and agents health filter UI. Co-authored-by: Cursor --- .../dcm/.changeset/version-bump-1-55-0.md | 7 + workspaces/dcm/backstage.json | 4 +- workspaces/dcm/package.json | 10 +- workspaces/dcm/packages/app/package.json | 48 +- .../packages/app/src/components/Root/Root.tsx | 20 +- .../app/src/components/catalog/EntityPage.tsx | 41 +- workspaces/dcm/packages/backend/package.json | 34 +- .../dcm/plugins/dcm-backend/package.json | 12 +- .../dcm/plugins/dcm-backend/src/plugin.ts | 3 +- .../dcm/plugins/dcm-common/package.json | 6 +- workspaces/dcm/plugins/dcm/package.json | 14 +- .../plugins/dcm/src/components/dcmStyles.ts | 2 + .../pages/agents/AgentsTabContent.test.tsx | 29 + .../dcm/src/pages/agents/AgentsTabContent.tsx | 24 +- workspaces/dcm/yarn.lock | 13417 ++++++---------- 15 files changed, 5443 insertions(+), 8228 deletions(-) create mode 100644 workspaces/dcm/.changeset/version-bump-1-55-0.md diff --git a/workspaces/dcm/.changeset/version-bump-1-55-0.md b/workspaces/dcm/.changeset/version-bump-1-55-0.md new file mode 100644 index 00000000000..2b67ef1a94a --- /dev/null +++ b/workspaces/dcm/.changeset/version-bump-1-55-0.md @@ -0,0 +1,7 @@ +--- +'@red-hat-developer-hub/backstage-plugin-dcm': minor +'@red-hat-developer-hub/backstage-plugin-dcm-backend': minor +'@red-hat-developer-hub/backstage-plugin-dcm-common': minor +--- + +Backstage version bump to v1.55.0 diff --git a/workspaces/dcm/backstage.json b/workspaces/dcm/backstage.json index 42c516cb16e..5b961b0f5dc 100644 --- a/workspaces/dcm/backstage.json +++ b/workspaces/dcm/backstage.json @@ -1 +1,3 @@ -{ "version": "1.47.0" } +{ + "version": "1.55.0" +} diff --git a/workspaces/dcm/package.json b/workspaces/dcm/package.json index 06107b91d9d..b40acd53d2f 100644 --- a/workspaces/dcm/package.json +++ b/workspaces/dcm/package.json @@ -44,9 +44,9 @@ }, "packageManager": "yarn@4.15.0", "devDependencies": { - "@backstage/cli": "^0.35.2", - "@backstage/e2e-test-utils": "^0.1.1", - "@backstage/repo-tools": "^0.16.2", + "@backstage/cli": "^0.36.6", + "@backstage/e2e-test-utils": "^0.1.2", + "@backstage/repo-tools": "^0.19.1", "@changesets/cli": "^2.27.1", "@playwright/test": "1.60.0", "@types/jest": "^29.5.12", @@ -56,7 +56,7 @@ "knip": "^5.27.4", "node-gyp": "^9.0.0", "prettier": "^2.3.2", - "typescript": "~5.3.0" + "typescript": "~5.8.0" }, "dependenciesMeta": { "better-sqlite3": { @@ -69,8 +69,6 @@ "@types/react": "^18", "@types/react-dom": "^18", "fsevents": "~2.3.2", - "@backstage/backend-app-api": "1.4.1", - "@backstage/backend-plugin-api": "1.6.2", "basic-ftp": "^5.3.1", "js-cookie": "^3.0.7" }, diff --git a/workspaces/dcm/packages/app/package.json b/workspaces/dcm/packages/app/package.json index db2cf449441..53e41739e51 100644 --- a/workspaces/dcm/packages/app/package.json +++ b/workspaces/dcm/packages/app/package.json @@ -19,29 +19,29 @@ "lint": "backstage-cli package lint" }, "dependencies": { - "@backstage/app-defaults": "^1.5.16", - "@backstage/catalog-model": "^1.7.3", - "@backstage/cli": "^0.35.2", - "@backstage/core-app-api": "^1.19.4", - "@backstage/core-components": "^0.18.6", - "@backstage/core-plugin-api": "^1.12.2", - "@backstage/integration-react": "^1.2.3", - "@backstage/plugin-api-docs": "^0.12.3", - "@backstage/plugin-catalog": "^1.26.1", - "@backstage/plugin-catalog-common": "^1.1.3", - "@backstage/plugin-catalog-graph": "^0.4.15", - "@backstage/plugin-catalog-import": "^0.12.9", - "@backstage/plugin-catalog-react": "^1.15.1", - "@backstage/plugin-org": "^0.6.35", - "@backstage/plugin-permission-react": "^0.4.30", - "@backstage/plugin-scaffolder": "^1.27.5", - "@backstage/plugin-search": "^1.4.22", - "@backstage/plugin-search-react": "^1.8.5", - "@backstage/plugin-techdocs": "^1.12.2", - "@backstage/plugin-techdocs-module-addons-contrib": "^1.1.20", - "@backstage/plugin-techdocs-react": "^1.2.13", - "@backstage/plugin-user-settings": "^0.8.18", - "@backstage/theme": "^0.7.1", + "@backstage/app-defaults": "^1.7.12", + "@backstage/catalog-model": "^1.10.1", + "@backstage/cli": "^0.36.6", + "@backstage/core-app-api": "^1.20.5", + "@backstage/core-components": "^0.18.14", + "@backstage/core-plugin-api": "^1.12.10", + "@backstage/integration-react": "^1.2.22", + "@backstage/plugin-api-docs": "^0.14.5", + "@backstage/plugin-catalog": "^2.0.9", + "@backstage/plugin-catalog-common": "^1.2.0", + "@backstage/plugin-catalog-graph": "^0.6.8", + "@backstage/plugin-catalog-import": "^0.13.18", + "@backstage/plugin-catalog-react": "^3.2.3", + "@backstage/plugin-org": "^0.7.9", + "@backstage/plugin-permission-react": "^0.5.5", + "@backstage/plugin-scaffolder": "^1.39.0", + "@backstage/plugin-search": "^1.7.8", + "@backstage/plugin-search-react": "^1.11.8", + "@backstage/plugin-techdocs": "^1.18.1", + "@backstage/plugin-techdocs-module-addons-contrib": "^1.1.40", + "@backstage/plugin-techdocs-react": "^1.3.15", + "@backstage/plugin-user-settings": "^0.9.7", + "@backstage/theme": "^0.7.3", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@patternfly/patternfly": "^6.3.0", @@ -55,7 +55,7 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/test-utils": "^1.7.14", + "@backstage/test-utils": "^1.7.22", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", diff --git a/workspaces/dcm/packages/app/src/components/Root/Root.tsx b/workspaces/dcm/packages/app/src/components/Root/Root.tsx index 33e668dd589..441f2a25b44 100644 --- a/workspaces/dcm/packages/app/src/components/Root/Root.tsx +++ b/workspaces/dcm/packages/app/src/components/Root/Root.tsx @@ -82,13 +82,19 @@ const useSidebarItemStyles = makeStyles(theme => { }, submenuItem: { marginBottom: 4, + alignItems: 'center', + boxSizing: 'border-box', '& .MuiSvgIcon-root': { fontSize: '20px', + display: 'block', }, '& .MuiTypography-root': { marginLeft: 8, fontWeight: 400, fontSize: 14, + lineHeight: 1, + display: 'flex', + alignItems: 'center', }, }, submenuItemActive: { @@ -97,6 +103,12 @@ const useSidebarItemStyles = makeStyles(theme => { dark ? 'rgba(255,255,255,0.2)' : 'rgba(0,0,0,0.12)' }`, backgroundColor: dark ? 'rgba(255,255,255,0.12)' : 'rgba(0,0,0,0.06)', + borderLeft: `1px solid ${ + dark ? 'rgba(255,255,255,0.2)' : 'rgba(0,0,0,0.12)' + }`, + '& .BackstageSidebarItem-iconContainer': { + marginLeft: 0, + }, }, inactiveItem: { backgroundColor: 'transparent', @@ -104,7 +116,7 @@ const useSidebarItemStyles = makeStyles(theme => { // Scoped so sidebar item styles win over upstream without !important administrationGroup: { '& $submenuItem': { - '& .MuiSvgIcon-root': { fontSize: '20px' }, + '& .MuiSvgIcon-root': { fontSize: '14px' }, }, '& $submenuItemActive': { borderRadius: 6, @@ -112,6 +124,12 @@ const useSidebarItemStyles = makeStyles(theme => { dark ? 'rgba(255,255,255,0.2)' : 'rgba(0,0,0,0.12)' }`, backgroundColor: dark ? 'rgba(255,255,255,0.12)' : 'rgba(0,0,0,0.06)', + borderLeft: `1px solid ${ + dark ? 'rgba(255,255,255,0.2)' : 'rgba(0,0,0,0.12)' + }`, + '& .BackstageSidebarItem-iconContainer': { + marginLeft: 0, + }, }, '& $inactiveItem': { backgroundColor: 'transparent', diff --git a/workspaces/dcm/packages/app/src/components/catalog/EntityPage.tsx b/workspaces/dcm/packages/app/src/components/catalog/EntityPage.tsx index f650da63861..68981cf9bd3 100644 --- a/workspaces/dcm/packages/app/src/components/catalog/EntityPage.tsx +++ b/workspaces/dcm/packages/app/src/components/catalog/EntityPage.tsx @@ -128,16 +128,16 @@ const overviewContent = ( {entityWarningContent} - + - + - + ); @@ -163,10 +163,10 @@ const serviceEntityPage = ( - + - + @@ -187,10 +187,10 @@ const websiteEntityPage = ( - + - + @@ -232,7 +232,7 @@ const apiPage = ( - + @@ -263,10 +263,10 @@ const userPage = ( {entityWarningContent} - + - + @@ -279,10 +279,10 @@ const groupPage = ( {entityWarningContent} - + - + @@ -301,28 +301,27 @@ const systemPage = ( {entityWarningContent} - + - + - + - + - + {entityWarningContent} - + - + - + diff --git a/workspaces/dcm/packages/backend/package.json b/workspaces/dcm/packages/backend/package.json index 40c7db1bc2e..512d0ef7e28 100644 --- a/workspaces/dcm/packages/backend/package.json +++ b/workspaces/dcm/packages/backend/package.json @@ -21,28 +21,28 @@ }, "dependencies": { "@backstage-community/plugin-rbac-backend": "5.6.1", - "@backstage/backend-defaults": "^0.15.1", - "@backstage/config": "^1.3.2", - "@backstage/plugin-app-backend": "^0.4.4", - "@backstage/plugin-auth-backend": "^0.24.2", - "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.4", - "@backstage/plugin-catalog-backend": "^1.30.0", - "@backstage/plugin-catalog-backend-module-logs": "^0.1.8", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.2.4", - "@backstage/plugin-events-backend": "^0.5.0", - "@backstage/plugin-permission-backend": "^0.5.53", - "@backstage/plugin-proxy-backend": "^0.5.10", - "@backstage/plugin-scaffolder-backend": "^1.29.0", - "@backstage/plugin-search-backend": "^1.8.1", - "@backstage/plugin-search-backend-module-catalog": "^0.3.0", - "@backstage/plugin-search-backend-module-techdocs": "^0.3.5", - "@backstage/plugin-techdocs-backend": "^1.11.5", + "@backstage/backend-defaults": "^0.18.0", + "@backstage/config": "^1.3.9", + "@backstage/plugin-app-backend": "^0.5.18", + "@backstage/plugin-auth-backend": "^0.30.1", + "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.23", + "@backstage/plugin-catalog-backend": "^4.0.0", + "@backstage/plugin-catalog-backend-module-logs": "^0.1.26", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^0.2.24", + "@backstage/plugin-events-backend": "^0.6.6", + "@backstage/plugin-permission-backend": "^0.7.16", + "@backstage/plugin-proxy-backend": "^0.6.18", + "@backstage/plugin-scaffolder-backend": "^4.2.0", + "@backstage/plugin-search-backend": "^2.1.7", + "@backstage/plugin-search-backend-module-catalog": "^0.3.19", + "@backstage/plugin-search-backend-module-techdocs": "^0.4.18", + "@backstage/plugin-techdocs-backend": "^2.3.0", "@red-hat-developer-hub/backstage-plugin-dcm-backend": "workspace:^", "better-sqlite3": "^9.0.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.35.2", + "@backstage/cli": "^0.36.6", "@types/express": "^4.17.21" }, "files": [ diff --git a/workspaces/dcm/plugins/dcm-backend/package.json b/workspaces/dcm/plugins/dcm-backend/package.json index 9f62553243b..5f86b082c9b 100644 --- a/workspaces/dcm/plugins/dcm-backend/package.json +++ b/workspaces/dcm/plugins/dcm-backend/package.json @@ -34,17 +34,17 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-defaults": "^0.15.1", - "@backstage/backend-plugin-api": "^1.6.2", - "@backstage/plugin-permission-common": "^0.8.4", - "@backstage/plugin-permission-node": "^0.8.7", + "@backstage/backend-defaults": "^0.18.0", + "@backstage/backend-plugin-api": "^1.10.1", + "@backstage/plugin-permission-common": "^0.9.11", + "@backstage/plugin-permission-node": "^0.11.4", "@red-hat-developer-hub/backstage-plugin-dcm-common": "workspace:^", "express": "^4.17.1", "express-promise-router": "^4.1.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^1.10.4", - "@backstage/cli": "^0.35.2", + "@backstage/backend-test-utils": "^1.11.7", + "@backstage/cli": "^0.36.6", "@types/express": "^4.17.6", "@types/supertest": "^2.0.12", "supertest": "^6.2.4" diff --git a/workspaces/dcm/plugins/dcm-backend/src/plugin.ts b/workspaces/dcm/plugins/dcm-backend/src/plugin.ts index 51febf36c75..9cfbd82633b 100644 --- a/workspaces/dcm/plugins/dcm-backend/src/plugin.ts +++ b/workspaces/dcm/plugins/dcm-backend/src/plugin.ts @@ -16,6 +16,7 @@ import { coreServices, createBackendPlugin, + type BackendFeature, } from '@backstage/backend-plugin-api'; import { createRouter } from './router'; @@ -24,7 +25,7 @@ import { createRouter } from './router'; * * @public */ -export const dcmPlugin = createBackendPlugin({ +export const dcmPlugin: BackendFeature = createBackendPlugin({ pluginId: 'dcm', register(env) { env.registerInit({ diff --git a/workspaces/dcm/plugins/dcm-common/package.json b/workspaces/dcm/plugins/dcm-common/package.json index 208e5758730..aeb737ce3b2 100644 --- a/workspaces/dcm/plugins/dcm-common/package.json +++ b/workspaces/dcm/plugins/dcm-common/package.json @@ -46,10 +46,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-plugin-api": "^1.12.2", - "@backstage/plugin-permission-common": "^0.8.4" + "@backstage/core-plugin-api": "^1.12.10", + "@backstage/plugin-permission-common": "^0.9.11" }, "devDependencies": { - "@backstage/cli": "^0.35.2" + "@backstage/cli": "^0.36.6" } } diff --git a/workspaces/dcm/plugins/dcm/package.json b/workspaces/dcm/plugins/dcm/package.json index c5780689321..0abb291a92e 100644 --- a/workspaces/dcm/plugins/dcm/package.json +++ b/workspaces/dcm/plugins/dcm/package.json @@ -35,9 +35,9 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.18.6", - "@backstage/core-plugin-api": "^1.12.2", - "@backstage/theme": "^0.7.1", + "@backstage/core-components": "^0.18.14", + "@backstage/core-plugin-api": "^1.12.10", + "@backstage/theme": "^0.7.3", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", @@ -53,10 +53,10 @@ "react-router-dom": "^6.0.0" }, "devDependencies": { - "@backstage/cli": "^0.35.2", - "@backstage/core-app-api": "^1.19.4", - "@backstage/dev-utils": "^1.1.19", - "@backstage/test-utils": "^1.7.14", + "@backstage/cli": "^0.36.6", + "@backstage/core-app-api": "^1.20.5", + "@backstage/dev-utils": "^1.1.27", + "@backstage/test-utils": "^1.7.22", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", diff --git a/workspaces/dcm/plugins/dcm/src/components/dcmStyles.ts b/workspaces/dcm/plugins/dcm/src/components/dcmStyles.ts index e220f37d09c..0b812a0d04c 100644 --- a/workspaces/dcm/plugins/dcm/src/components/dcmStyles.ts +++ b/workspaces/dcm/plugins/dcm/src/components/dcmStyles.ts @@ -127,7 +127,9 @@ export const useDcmStyles = makeStyles(theme => ({ toolbarRow: { display: 'flex', + alignItems: 'center', justifyContent: 'flex-end', + gap: theme.spacing(2), marginBottom: theme.spacing(2), }, diff --git a/workspaces/dcm/plugins/dcm/src/pages/agents/AgentsTabContent.test.tsx b/workspaces/dcm/plugins/dcm/src/pages/agents/AgentsTabContent.test.tsx index 4e3ad892adc..69e21ba9ddd 100644 --- a/workspaces/dcm/plugins/dcm/src/pages/agents/AgentsTabContent.test.tsx +++ b/workspaces/dcm/plugins/dcm/src/pages/agents/AgentsTabContent.test.tsx @@ -275,5 +275,34 @@ describe('AgentsTabContent', () => { ), ); }); + + it('displays translated "All" label when no filter is selected', async () => { + await renderAgentsTab(); + + await waitFor(() => + expect(screen.getByText('env-agent-west-1')).toBeInTheDocument(), + ); + + expect(screen.getByText('All')).toBeInTheDocument(); + }); + + it('displays the selected option label after choosing a filter', async () => { + const listAgents = jest + .fn() + .mockResolvedValue({ agents: [MOCK_AGENT], next_page_token: '' }); + const apis = buildApis({ listAgents }); + await renderAgentsTab(apis); + + await waitFor(() => expect(listAgents).toHaveBeenCalledTimes(1)); + + const filterInput = document.querySelector( + '[data-testid="health-filter"]', + ) as HTMLInputElement; + fireEvent.change(filterInput, { target: { value: 'ready' } }); + + await waitFor(() => + expect(screen.getByText('Ready')).toBeInTheDocument(), + ); + }); }); }); diff --git a/workspaces/dcm/plugins/dcm/src/pages/agents/AgentsTabContent.tsx b/workspaces/dcm/plugins/dcm/src/pages/agents/AgentsTabContent.tsx index a606b89d132..c7ec149f707 100644 --- a/workspaces/dcm/plugins/dcm/src/pages/agents/AgentsTabContent.tsx +++ b/workspaces/dcm/plugins/dcm/src/pages/agents/AgentsTabContent.tsx @@ -23,6 +23,7 @@ import { FormControl, InputLabel, MenuItem, + OutlinedInput, Select, Tooltip, Typography, @@ -252,6 +253,7 @@ export function AgentsTabContent() { [classes, t], ); + const healthFilterLabel = t('agents.filter.healthLabel'); const healthFilterControl = ( - {t('agents.filter.healthLabel')} + {healthFilterLabel}