diff --git a/.changeset/eighty-snakes-melt.md b/.changeset/eighty-snakes-melt.md deleted file mode 100644 index f980d1c02e..0000000000 --- a/.changeset/eighty-snakes-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -chore: set the lifecycle as beta logo diff --git a/.changeset/famous-pillows-love.md b/.changeset/famous-pillows-love.md deleted file mode 100644 index 972a2b10b4..0000000000 --- a/.changeset/famous-pillows-love.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-catalog-react': patch ---- - -Improve accessibility of core & catalog components by adjusting them with non-breaking changes. diff --git a/.changeset/fluffy-cats-approve.md b/.changeset/fluffy-cats-approve.md new file mode 100644 index 0000000000..dff0972249 --- /dev/null +++ b/.changeset/fluffy-cats-approve.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +fix typo in the comments of EntityPage component diff --git a/.changeset/kind-needles-appear.md b/.changeset/kind-needles-appear.md deleted file mode 100644 index 9a8f56bf48..0000000000 --- a/.changeset/kind-needles-appear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-ldap': patch ---- - -chore(deps): bump `@types/ldapjs` from 1.0.10 to 2.2.0 diff --git a/.changeset/lazy-apples-scream.md b/.changeset/lazy-apples-scream.md deleted file mode 100644 index b666c3498a..0000000000 --- a/.changeset/lazy-apples-scream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Allow to configure SAML auth `acceptedClockSkewMs` diff --git a/.changeset/pink-glasses-type.md b/.changeset/pink-glasses-type.md deleted file mode 100644 index 45eb01987d..0000000000 --- a/.changeset/pink-glasses-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Add explicit import for `isomorphic-form-data` needed for `swagger-ui-react` diff --git a/.changeset/pink-plants-reflect.md b/.changeset/pink-plants-reflect.md deleted file mode 100644 index 7b0069644b..0000000000 --- a/.changeset/pink-plants-reflect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Update the `software-templates` to point to `main` branch instead of `master` diff --git a/.changeset/purple-comics-fold.md b/.changeset/purple-comics-fold.md new file mode 100644 index 0000000000..f5e02d64db --- /dev/null +++ b/.changeset/purple-comics-fold.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Add configuration option to the kubernetes object types. Config option is under `kubernetes.resources`. Defaults to ['pods', 'services', 'configmaps', 'deployments', 'replicasets', 'horizontalpodautoscalers', 'ingresses'] diff --git a/.changeset/slimy-elephants-sell.md b/.changeset/slimy-elephants-sell.md deleted file mode 100644 index c002e8e950..0000000000 --- a/.changeset/slimy-elephants-sell.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-kubernetes-common': patch -'@backstage/plugin-kubernetes': patch ---- - -chore(deps): bump `@kubernetes/client-node` from 0.14.3 to 0.15.0 diff --git a/.changeset/small-emus-sin.md b/.changeset/small-emus-sin.md deleted file mode 100644 index e5683d18f9..0000000000 --- a/.changeset/small-emus-sin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Fix `EntityListProvider` to not update url if unmounted diff --git a/.changeset/soft-news-float.md b/.changeset/soft-news-float.md new file mode 100644 index 0000000000..03eaf792c7 --- /dev/null +++ b/.changeset/soft-news-float.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Add the `scaffolder.defaultCommitMessage`, which defaults to `Initial commit`, so it can be customized. diff --git a/.changeset/techdocs-she-was-gone.md b/.changeset/techdocs-she-was-gone.md deleted file mode 100644 index a6821abcf6..0000000000 --- a/.changeset/techdocs-she-was-gone.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -TechDocs now uses a "safe by default" sanitization library, rather than relying on its own, hard-coded list of allowable tags and attributes. diff --git a/.changeset/weak-toes-agree.md b/.changeset/weak-toes-agree.md deleted file mode 100644 index 8bdcf46fa2..0000000000 --- a/.changeset/weak-toes-agree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-xcmetrics': minor ---- - -New data in form of trend lines, status timeline and other is added to the dashboard of XCMetrics to give a better understanding of how the build system is behaving. diff --git a/ADOPTERS.md b/ADOPTERS.md index 041242c083..3291abc346 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -39,3 +39,4 @@ | [RedVentures](https://www.redventures.com/) | [Chris Diaz](https://github.com/codingdiaz) | Developer portal that brings everything an engineer needs to provide value into a single pane of glass. | | [MavTek](https://www.mavtek.com/) | [@fgascon](https://github.com/fgascon) | Developer portal focused on standardizing practices, centralizing documentation and streamlining developer practices. | | [QuintoAndar](https://www.quintoandar.com.br/) | [@quintoandar](https://github.com/quintoandar) | Developer portal, services catalog and centralization of service metrics. | +| [empathy.co](https://empathy.co/) | [@guillermotti](https://github.com/guillermotti) | Developer portal for tech docs, service catalog, plugin discovery and much more. | diff --git a/app-config.yaml b/app-config.yaml index 074e28c086..f2df97b7b2 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -256,6 +256,8 @@ scaffolder: # defaultAuthor: # name: Scaffolder # email: scaffolder@backstage.io + # Use to customize the default commit message when new components are created + # defaultCommitMessage: 'Initial commit' github: token: ${GITHUB_TOKEN} visibility: public # or 'internal' or 'private' diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md index aa3851463f..7973a54ab6 100644 --- a/docs/getting-started/app-custom-theme.md +++ b/docs/getting-started/app-custom-theme.md @@ -35,7 +35,7 @@ If you want more control over the theme, and for example customize font sizes and margins, you can use the lower-level `createThemeOverrides` function exported by [@backstage/theme](https://www.npmjs.com/package/@backstage/theme) in combination with -[createMuiTheme](https://material-ui.com/customization/theming/#createmuitheme-options-args-theme) +[createTheme](https://material-ui.com/customization/theming/#createmuitheme-options-args-theme) from [@material-ui/core](https://www.npmjs.com/package/@material-ui/core). See the [@backstage/theme source](https://github.com/backstage/backstage/tree/master/packages/theme/src) diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index 2c8b46ff00..393a5af118 100644 --- a/microsite/static/css/custom.css +++ b/microsite/static/css/custom.css @@ -288,6 +288,16 @@ td { .tocToggler { display: none; } + + .docsSliderActive .toc section .navGroups { + padding-top: 0; + padding-bottom: 0; + } + + .docsSliderActive.docsNavContainer { + background-color: #121212; + padding-bottom: 0; + } } /* content */ diff --git a/package.json b/package.json index 93517d3374..ea1cf0c9b4 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ ] }, "resolutions": { + "**/@graphql-codegen/cli/**/ws": "^7.4.6", "**/@roadiehq/**/@backstage/core": "*", "**/@roadiehq/**/@backstage/plugin-catalog": "*", "**/@roadiehq/**/@backstage/catalog-model": "*", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 494e7dbad2..af4e604a1b 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,46 @@ # example-app +## 0.2.39 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@0.10.2 + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog@0.6.9 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/cli@0.7.6 + - @backstage/core-app-api@0.1.6 + - @backstage/core-plugin-api@0.1.4 + - @backstage/integration-react@0.1.5 + - @backstage/theme@0.2.9 + - @backstage/plugin-api-docs@0.6.4 + - @backstage/plugin-badges@0.2.6 + - @backstage/plugin-catalog-import@0.5.15 + - @backstage/plugin-circleci@0.2.20 + - @backstage/plugin-cloudbuild@0.2.20 + - @backstage/plugin-code-coverage@0.1.8 + - @backstage/plugin-cost-insights@0.11.2 + - @backstage/plugin-explore@0.3.11 + - @backstage/plugin-gcp-projects@0.3.1 + - @backstage/plugin-github-actions@0.4.14 + - @backstage/plugin-graphiql@0.2.13 + - @backstage/plugin-jenkins@0.5.1 + - @backstage/plugin-kafka@0.2.12 + - @backstage/plugin-kubernetes@0.4.9 + - @backstage/plugin-lighthouse@0.2.21 + - @backstage/plugin-newrelic@0.3.1 + - @backstage/plugin-org@0.3.18 + - @backstage/plugin-pagerduty@0.3.9 + - @backstage/plugin-rollbar@0.3.10 + - @backstage/plugin-search@0.4.5 + - @backstage/plugin-sentry@0.3.16 + - @backstage/plugin-shortcuts@0.1.5 + - @backstage/plugin-tech-radar@0.4.3 + - @backstage/plugin-techdocs@0.10.2 + - @backstage/plugin-todo@0.1.6 + - @backstage/plugin-user-settings@0.3.2 + ## 0.2.37 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 388635e56b..abba8492da 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,47 +1,47 @@ { "name": "example-app", - "version": "0.2.37", + "version": "0.2.39", "private": true, "bundled": true, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.3", - "@backstage/core-components": "^0.1.5", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-api-docs": "^0.6.2", - "@backstage/plugin-badges": "^0.2.5", - "@backstage/plugin-catalog": "^0.6.7", - "@backstage/plugin-catalog-import": "^0.5.13", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/plugin-circleci": "^0.2.19", - "@backstage/plugin-cloudbuild": "^0.2.19", - "@backstage/plugin-code-coverage": "^0.1.7", - "@backstage/plugin-cost-insights": "^0.11.0", - "@backstage/plugin-explore": "^0.3.10", - "@backstage/plugin-gcp-projects": "^0.3.0", - "@backstage/plugin-github-actions": "^0.4.13", - "@backstage/plugin-graphiql": "^0.2.12", - "@backstage/plugin-jenkins": "^0.5.0", - "@backstage/plugin-kafka": "^0.2.11", - "@backstage/plugin-kubernetes": "^0.4.8", - "@backstage/plugin-lighthouse": "^0.2.20", - "@backstage/plugin-newrelic": "^0.3.0", - "@backstage/plugin-org": "^0.3.17", - "@backstage/plugin-pagerduty": "0.3.8", - "@backstage/plugin-rollbar": "^0.3.9", - "@backstage/plugin-scaffolder": "^0.10.1", - "@backstage/plugin-search": "^0.4.3", - "@backstage/plugin-sentry": "^0.3.15", - "@backstage/plugin-shortcuts": "^0.1.4", - "@backstage/plugin-tech-radar": "^0.4.1", - "@backstage/plugin-techdocs": "^0.10.0", - "@backstage/plugin-todo": "^0.1.5", - "@backstage/plugin-user-settings": "^0.3.0", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/integration-react": "^0.1.5", + "@backstage/plugin-api-docs": "^0.6.4", + "@backstage/plugin-badges": "^0.2.6", + "@backstage/plugin-catalog": "^0.6.9", + "@backstage/plugin-catalog-import": "^0.5.15", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/plugin-circleci": "^0.2.20", + "@backstage/plugin-cloudbuild": "^0.2.20", + "@backstage/plugin-code-coverage": "^0.1.8", + "@backstage/plugin-cost-insights": "^0.11.2", + "@backstage/plugin-explore": "^0.3.11", + "@backstage/plugin-gcp-projects": "^0.3.1", + "@backstage/plugin-github-actions": "^0.4.14", + "@backstage/plugin-graphiql": "^0.2.13", + "@backstage/plugin-jenkins": "^0.5.1", + "@backstage/plugin-kafka": "^0.2.12", + "@backstage/plugin-kubernetes": "^0.4.9", + "@backstage/plugin-lighthouse": "^0.2.21", + "@backstage/plugin-newrelic": "^0.3.1", + "@backstage/plugin-org": "^0.3.18", + "@backstage/plugin-pagerduty": "0.3.9", + "@backstage/plugin-rollbar": "^0.3.10", + "@backstage/plugin-scaffolder": "^0.10.2", + "@backstage/plugin-search": "^0.4.5", + "@backstage/plugin-sentry": "^0.3.16", + "@backstage/plugin-shortcuts": "^0.1.5", + "@backstage/plugin-tech-radar": "^0.4.3", + "@backstage/plugin-techdocs": "^0.10.2", + "@backstage/plugin-todo": "^0.1.6", + "@backstage/plugin-user-settings": "^0.3.2", "@backstage/search-common": "^0.1.2", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@octokit/rest": "^18.5.3", @@ -60,7 +60,7 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/test-utils": "^0.1.14", + "@backstage/test-utils": "^0.1.16", "@testing-library/cypress": "^7.0.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 4e2e32cc86..d84a7341bc 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -40,6 +40,8 @@ import { isKind, EntityHasResourcesCard, EntityOrphanWarning, + EntityProcessingErrorsPanel, + hasCatalogProcessingErrors, isOrphan, } from '@backstage/plugin-catalog'; import { @@ -231,6 +233,14 @@ const overviewContent = ( + + + + + + + + diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index d417f74f96..d04d1dc936 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/catalog-client +## 0.3.18 + +### Patch Changes + +- 11c370af2: Support filtering entities via property existence + ## 0.3.17 ### Patch Changes diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index c356deed4f..173af9aef3 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -25,6 +25,11 @@ export type AddLocationResponse = { entities: Entity[]; }; +// Warning: (ae-missing-release-tag) "CATALOG_FILTER_EXISTS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const CATALOG_FILTER_EXISTS: unique symbol; + // Warning: (ae-missing-release-tag) "CatalogApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -123,8 +128,8 @@ export class CatalogClient implements CatalogApi { // @public (undocumented) export type CatalogEntitiesRequest = { filter?: - | Record[] - | Record + | Record[] + | Record | undefined; fields?: string[] | undefined; }; diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index a114871a6e..cdbee32305 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/catalog-client", - "version": "0.3.17", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,7 +35,7 @@ "cross-fetch": "^3.0.6" }, "devDependencies": { - "@backstage/cli": "^0.7.5", + "@backstage/cli": "^0.7.6", "@types/jest": "^26.0.7", "msw": "^0.29.0" }, diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 4e3d95f99f..d2db98bb25 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -18,7 +18,7 @@ import { Entity } from '@backstage/catalog-model'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { CatalogClient } from './CatalogClient'; -import { CatalogListResponse } from './types/api'; +import { CATALOG_FILTER_EXISTS, CatalogListResponse } from './types/api'; import { DiscoveryApi } from './types/discovery'; const server = setupServer(); @@ -83,7 +83,7 @@ describe('CatalogClient', () => { server.use( rest.get(`${mockBaseUrl}/entities`, (req, res, ctx) => { expect(req.url.search).toBe( - '?filter=a=1,b=2,b=3,%C3%B6=%3D&filter=a=2', + '?filter=a=1,b=2,b=3,%C3%B6=%3D&filter=a=2&filter=c', ); return res(ctx.json([])); }), @@ -100,6 +100,9 @@ describe('CatalogClient', () => { { a: '2', }, + { + c: CATALOG_FILTER_EXISTS, + }, ], }, { token }, @@ -113,7 +116,7 @@ describe('CatalogClient', () => { server.use( rest.get(`${mockBaseUrl}/entities`, (req, res, ctx) => { - expect(req.url.search).toBe('?filter=a=1,b=2,b=3,%C3%B6=%3D'); + expect(req.url.search).toBe('?filter=a=1,b=2,b=3,%C3%B6=%3D,c'); return res(ctx.json([])); }), ); @@ -124,6 +127,7 @@ describe('CatalogClient', () => { a: '1', b: ['2', '3'], รถ: '=', + c: CATALOG_FILTER_EXISTS, }, }, { token }, diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index 5dfcddde0c..ef90287c37 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -26,6 +26,7 @@ import { import { ResponseError } from '@backstage/errors'; import fetch from 'cross-fetch'; import { + CATALOG_FILTER_EXISTS, AddLocationRequest, AddLocationResponse, CatalogApi, @@ -69,9 +70,13 @@ export class CatalogClient implements CatalogApi { const filterParts: string[] = []; for (const [key, value] of Object.entries(filterItem)) { for (const v of [value].flat()) { - filterParts.push( - `${encodeURIComponent(key)}=${encodeURIComponent(v)}`, - ); + if (v === CATALOG_FILTER_EXISTS) { + filterParts.push(encodeURIComponent(key)); + } else if (typeof v === 'string') { + filterParts.push( + `${encodeURIComponent(key)}=${encodeURIComponent(v)}`, + ); + } } } diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index ae3fd7b514..d30caa50d6 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -16,10 +16,12 @@ import { Entity, EntityName, Location } from '@backstage/catalog-model'; +export const CATALOG_FILTER_EXISTS = Symbol('CATALOG_FILTER_EXISTS'); + export type CatalogEntitiesRequest = { filter?: - | Record[] - | Record + | Record[] + | Record | undefined; fields?: string[] | undefined; }; diff --git a/packages/catalog-client/src/types/index.ts b/packages/catalog-client/src/types/index.ts index 6ec17fbae1..3bfcdd7fba 100644 --- a/packages/catalog-client/src/types/index.ts +++ b/packages/catalog-client/src/types/index.ts @@ -22,4 +22,5 @@ export type { CatalogListResponse, CatalogRequestOptions, } from './api'; +export { CATALOG_FILTER_EXISTS } from './api'; export { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from './status'; diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index b2877572fe..226712d209 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/cli +## 0.7.6 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes + ## 0.7.5 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 1adaeaf725..91bb94d43b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.7.5", + "version": "0.7.6", "private": false, "publishConfig": { "access": "public" @@ -120,12 +120,12 @@ "devDependencies": { "@backstage/backend-common": "^0.8.7", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", - "@backstage/theme": "^0.2.8", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", + "@backstage/theme": "^0.2.9", "@types/diff": "^5.0.0", "@types/express": "^4.17.6", "@types/fs-extra": "^9.0.1", diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index dbba628055..fdac5a0c67 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -27,7 +27,7 @@ "@backstage/core-components": "^{{version '@backstage/core-components'}}", "@backstage/core-plugin-api": "^{{version '@backstage/core-plugin-api'}}", "@backstage/theme": "^{{version '@backstage/theme'}}", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index 0c104d6c33..820780ced3 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/codemods +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-app-api@0.1.6 + - @backstage/core-plugin-api@0.1.4 + ## 0.1.6 ### Patch Changes diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 19c71c843c..18c621a523 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/codemods", "description": "A collection of codemods for Backstage projects", - "version": "0.1.6", + "version": "0.1.7", "private": false, "publishConfig": { "access": "public", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 8e188a6577..904932a9b5 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/core-app-api +## 0.1.6 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.5 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 41e7c52393..d49d89eab6 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "0.1.5", + "version": "0.1.6", "private": false, "publishConfig": { "access": "public", @@ -29,11 +29,11 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", + "@backstage/core-components": "^0.2.0", "@backstage/config": "^0.1.3", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@types/react": "^16.9", "@types/prop-types": "^15.7.3", @@ -44,8 +44,8 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/test-utils": "^0.1.16", "@backstage/test-utils-core": "^0.1.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 8372b25563..a7d2715f3e 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/core-components +## 0.2.0 + +### Minor Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes + +### Patch Changes + +- 19d9995b6: Improve accessibility of core & catalog components by adjusting them with non-breaking changes. +- 224e54484: Added an `EntityProcessingErrorsPanel` component to show any errors that occurred when refreshing an entity from its source location. + + If upgrading, this should be added to your `EntityPage` in your Backstage application: + + ```diff + // packages/app/src/components/catalog/EntityPage.tsx + + const overviewContent = ( + ... + + + + + + + + + + + + + + + + + + + + ``` + + Additionally, `WarningPanel` now changes color based on the provided severity. + +- Updated dependencies + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.6 ### Patch Changes diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index ccafa4cfa7..5ce289d8d8 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -11,7 +11,7 @@ import { Breadcrumbs as Breadcrumbs_2 } from '@material-ui/core'; import { ButtonProps } from '@material-ui/core'; import { ButtonTypeMap } from '@material-ui/core'; import { CardHeaderProps } from '@material-ui/core'; -import { Column } from 'material-table'; +import { Column } from '@material-table/core'; import { CommonProps } from '@material-ui/core/OverridableComponent'; import { ComponentClass } from 'react'; import { ComponentProps } from 'react'; @@ -26,7 +26,7 @@ import { IconComponent } from '@backstage/core-plugin-api'; import { LinearProgressProps } from '@material-ui/core'; import { LinkProps as LinkProps_2 } from '@material-ui/core'; import { LinkProps as LinkProps_3 } from 'react-router-dom'; -import { MaterialTableProps } from 'material-table'; +import { MaterialTableProps } from '@material-table/core'; import { NavLinkProps } from 'react-router-dom'; import { ProfileInfoApi } from '@backstage/core-plugin-api'; import { PropsWithChildren } from 'react'; @@ -80,7 +80,7 @@ export const Avatar: ({ // Warning: (ae-missing-release-tag) "Breadcrumbs" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const Breadcrumbs: ({ children, ...props }: Props_25) => JSX.Element; +export const Breadcrumbs: ({ children, ...props }: Props_24) => JSX.Element; // Warning: (ae-missing-release-tag) "BrokenImageIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -441,7 +441,7 @@ export const Content: ({ noPadding, children, ...props -}: PropsWithChildren) => JSX.Element; +}: PropsWithChildren) => JSX.Element; // Warning: (ae-forgotten-export) The symbol "ContentHeaderProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "ContentHeader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -695,7 +695,7 @@ export const Header: ({ tooltip, type, typeLink, -}: PropsWithChildren) => JSX.Element; +}: PropsWithChildren) => JSX.Element; // Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "HeaderIconLinkRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -777,7 +777,7 @@ export const InfoCard: ({ className, noPadding, titleTypographyProps, -}: Props_20) => JSX.Element; +}: Props_19) => JSX.Element; // Warning: (ae-missing-release-tag) "InfoCardVariants" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1200,7 +1200,7 @@ export const OverflowTooltip: (props: Props_12) => JSX.Element; export const Page: ({ themeId, children, -}: PropsWithChildren) => JSX.Element; +}: PropsWithChildren) => JSX.Element; // Warning: (ae-forgotten-export) The symbol "PageWithHeaderProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "PageWithHeader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -1291,7 +1291,7 @@ export const Sidebar: ({ openDelayMs, closeDelayMs, children, -}: PropsWithChildren) => JSX.Element; +}: PropsWithChildren) => JSX.Element; // Warning: (ae-missing-release-tag) "SIDEBAR_INTRO_LOCAL_STORAGE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -2448,7 +2448,7 @@ export const SidebarSpacer: React_2.ComponentType< // Warning: (ae-missing-release-tag) "SignInPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const SignInPage: (props: Props_23) => JSX.Element; +export const SignInPage: (props: Props_22) => JSX.Element; // Warning: (ae-missing-release-tag) "SignInProviderConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -2592,7 +2592,7 @@ export const TabbedCard: ({ deepLink, value, onChange, -}: PropsWithChildren) => JSX.Element; +}: PropsWithChildren) => JSX.Element; // Warning: (ae-missing-release-tag) "TabbedLayout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -2715,11 +2715,17 @@ export const WarningIcon: IconComponent; // Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen // Warning: (tsdoc-param-tag-with-invalid-optional-name) The @param should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets. // Warning: (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}' -// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "WarningProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "WarningPanel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public -export const WarningPanel: (props: Props_17) => JSX.Element; +export const WarningPanel: ({ + severity, + title, + message, + children, + defaultExpanded, +}: WarningProps) => JSX.Element; // Warnings were encountered during analysis: // diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 944002c74f..d28d8a177e 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.1.6", + "version": "0.2.0", "private": false, "publishConfig": { "access": "public", @@ -30,10 +30,10 @@ }, "dependencies": { "@backstage/config": "^0.1.5", - "@backstage/core-plugin-api": "^0.1.2", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@testing-library/react-hooks": "^3.4.2", @@ -50,7 +50,7 @@ "dagre": "^0.8.5", "immer": "^9.0.1", "lodash": "^4.17.15", - "material-table": "^1.69.1", + "@material-table/core": "^3.1.0", "pluralize": "^8.0.0", "prop-types": "^15.7.2", "qs": "^6.9.4", @@ -70,9 +70,9 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/core-app-api": "^0.1.5", - "@backstage/cli": "^0.7.5", - "@backstage/test-utils": "^0.1.15", + "@backstage/core-app-api": "^0.1.6", + "@backstage/cli": "^0.7.6", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/packages/core-components/src/components/ErrorPanel/ErrorPanel.tsx b/packages/core-components/src/components/ErrorPanel/ErrorPanel.tsx index 14b5d50325..f9996b9b1f 100644 --- a/packages/core-components/src/components/ErrorPanel/ErrorPanel.tsx +++ b/packages/core-components/src/components/ErrorPanel/ErrorPanel.tsx @@ -100,6 +100,7 @@ export const ErrorPanel = ({ }: PropsWithChildren) => { return ( diff --git a/packages/core-components/src/components/Table/Table.tsx b/packages/core-components/src/components/Table/Table.tsx index f518a84d52..6e049d1b6a 100644 --- a/packages/core-components/src/components/Table/Table.tsx +++ b/packages/core-components/src/components/Table/Table.tsx @@ -47,14 +47,13 @@ import MTable, { MTableHeader, MTableToolbar, Options, -} from 'material-table'; +} from '@material-table/core'; import React, { forwardRef, MutableRefObject, ReactNode, useCallback, useEffect, - useRef, useState, } from 'react'; import { CheckboxTreeProps } from '../CheckboxTree/CheckboxTree'; @@ -298,13 +297,6 @@ export function Table({ const MTColumns = convertColumns(columns, theme); const [search, setSearch] = useState(calculatedInitialState.search); - const toolbarRef = useRef(); - - useEffect(() => { - if (toolbarRef.current) { - toolbarRef.current.onSearchChange(search); - } - }, [search, toolbarRef]); useEffect(() => { if (onStateChange) { @@ -440,7 +432,6 @@ export function Table({ toolbarProps => { return ( ({ /> ); }, - [toggleFilters, hasFilters, selectedFiltersLength, setSearch, toolbarRef], + [toggleFilters, hasFilters, selectedFiltersLength, setSearch], ); const hasNoRows = typeof data !== 'function' && data.length === 0; diff --git a/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx b/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx index 36b5372900..4ae6423333 100644 --- a/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx +++ b/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx @@ -19,11 +19,19 @@ import { fireEvent, screen } from '@testing-library/react'; import { renderInTestApp } from '@backstage/test-utils'; import { Typography } from '@material-ui/core'; -import { WarningPanel } from './WarningPanel'; +import { WarningPanel, WarningProps } from './WarningPanel'; -const propsTitle = { title: 'Mock title' }; -const propsTitleMessage = { title: 'Mock title', message: 'Some more info' }; -const propsMessage = { message: 'Some more info' }; +const propsTitle: WarningProps = { title: 'Mock title' }; +const propsTitleMessage: WarningProps = { + title: 'Mock title', + message: 'Some more info', +}; +const propsMessage: WarningProps = { message: 'Some more info' }; +const propsErrorMessage: WarningProps = { + severity: 'error', + title: 'Mock title', + message: 'Some more info', +}; describe('', () => { it('renders without exploding', async () => { @@ -64,4 +72,8 @@ describe('', () => { expect(screen.getByText('Some more info')).toBeInTheDocument(); expect(screen.getByText('Java stacktrace')).toBeInTheDocument(); }); + it('renders message using severity', async () => { + await renderInTestApp(); + expect(screen.getByText('Error: Mock title')).toBeInTheDocument(); + }); }); diff --git a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx index 37ae5b2c62..e6188172b7 100644 --- a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx +++ b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import { BackstageTheme } from '@backstage/theme'; import { Accordion, @@ -22,30 +21,61 @@ import { Grid, makeStyles, Typography, + darken, + lighten, } from '@material-ui/core'; import ErrorOutline from '@material-ui/icons/ErrorOutline'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import React from 'react'; +const getWarningTextColor = ( + severity: NonNullable, + theme: BackstageTheme, +) => { + const getColor = theme.palette.type === 'light' ? darken : lighten; + return getColor(theme.palette[severity].light, 0.6); +}; + +const getWarningBackgroundColor = ( + severity: NonNullable, + theme: BackstageTheme, +) => { + const getBackgroundColor = theme.palette.type === 'light' ? lighten : darken; + return getBackgroundColor(theme.palette[severity].light, 0.9); +}; + const useErrorOutlineStyles = makeStyles(theme => ({ root: { marginRight: theme.spacing(1), - fill: theme.palette.warningText, + fill: ({ severity }: WarningProps) => + getWarningTextColor( + severity as NonNullable, + theme, + ), }, })); -const ErrorOutlineStyled = () => { - const classes = useErrorOutlineStyles(); + +const ErrorOutlineStyled = ({ severity }: Pick) => { + const classes = useErrorOutlineStyles({ severity }); return ; }; -const ExpandMoreIconStyled = () => { - const classes = useErrorOutlineStyles(); +const ExpandMoreIconStyled = ({ severity }: Pick) => { + const classes = useErrorOutlineStyles({ severity }); return ; }; const useStyles = makeStyles(theme => ({ panel: { - backgroundColor: theme.palette.warningBackground, - color: theme.palette.warningText, + backgroundColor: ({ severity }: WarningProps) => + getWarningBackgroundColor( + severity as NonNullable, + theme, + ), + color: ({ severity }: WarningProps) => + getWarningTextColor( + severity as NonNullable, + theme, + ), verticalAlign: 'middle', }, summary: { @@ -53,14 +83,26 @@ const useStyles = makeStyles(theme => ({ flexDirection: 'row', }, summaryText: { - color: theme.palette.warningText, + color: ({ severity }: WarningProps) => + getWarningTextColor( + severity as NonNullable, + theme, + ), fontWeight: 'bold', }, message: { width: '100%', display: 'block', - color: theme.palette.warningText, - backgroundColor: theme.palette.warningBackground, + color: ({ severity }: WarningProps) => + getWarningTextColor( + severity as NonNullable, + theme, + ), + backgroundColor: ({ severity }: WarningProps) => + getWarningBackgroundColor( + severity as NonNullable, + theme, + ), }, details: { width: '100%', @@ -73,7 +115,7 @@ const useStyles = makeStyles(theme => ({ }, })); -type Props = { +export type WarningProps = { title?: string; severity?: 'warning' | 'error' | 'info'; message?: React.ReactNode; @@ -89,19 +131,23 @@ const capitalize = (s: string) => { * WarningPanel. Show a user friendly error message to a user similar to ErrorPanel except that the warning panel * only shows the warning message to the user. * - * @param {string} [severity=warning] Ability to change the severity of the alert. Not fully implemented. (error, warning, info) + * @param {string} [severity=warning] Ability to change the severity of the alert. * @param {string} [title] A title for the warning. If not supplied, "Warning" will be used. * @param {Object} [message] Optional more detailed user-friendly message elaborating on the cause of the error. * @param {Object} [children] Objects to provide context, such as a stack trace or detailed error reporting. * Will be available inside an unfolded accordion. */ -export const WarningPanel = (props: Props) => { - const classes = useStyles(props); - const { severity, title, message, children, defaultExpanded } = props; +export const WarningPanel = ({ + severity = 'warning', + title, + message, + children, + defaultExpanded, +}: WarningProps) => { + const classes = useStyles({ severity }); // If no severity or title provided, the heading will read simply "Warning" - const subTitle = - (severity ? capitalize(severity) : 'Warning') + (title ? `: ${title}` : ''); + const subTitle = capitalize(severity) + (title ? `: ${title}` : ''); return ( { role="alert" > } + expandIcon={} className={classes.summary} > - + {subTitle} diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index 740f42708f..cd3b2a9a59 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/core-plugin-api +## 0.1.4 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/theme@0.2.9 + ## 0.1.3 ### Patch Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 7b2aa3deea..374c158d57 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-plugin-api", "description": "Core API used by Backstage plugins", - "version": "0.1.3", + "version": "0.1.4", "private": false, "publishConfig": { "access": "public", @@ -30,8 +30,8 @@ }, "dependencies": { "@backstage/config": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@types/react": "^16.9", "history": "^5.0.0", "prop-types": "^15.7.2", @@ -41,9 +41,9 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.2", - "@backstage/core-app-api": "^0.1.3", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/test-utils": "^0.1.16", "@backstage/test-utils-core": "^0.1.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 1bbb66710b..ba2fbeebfc 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,41 @@ # @backstage/create-app +## 0.3.33 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- d50c9e7c0: Update the `software-templates` to point to `main` branch instead of `master` +- 224e54484: Added an `EntityProcessingErrorsPanel` component to show any errors that occurred when refreshing an entity from its source location. + + If upgrading, this should be added to your `EntityPage` in your Backstage application: + + ```diff + // packages/app/src/components/catalog/EntityPage.tsx + + const overviewContent = ( + ... + + + + + + + + + + + + + + + + + + + + ``` + + Additionally, `WarningPanel` now changes color based on the provided severity. + ## 0.3.32 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index cedcba42c7..4a5d7b18f1 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "Create app package for Backstage", - "version": "0.3.32", + "version": "0.3.33", "private": false, "publishConfig": { "access": "public" diff --git a/packages/create-app/templates/default-app/packages/app/package.json.hbs b/packages/create-app/templates/default-app/packages/app/package.json.hbs index 71cc86ba34..219f503aa0 100644 --- a/packages/create-app/templates/default-app/packages/app/package.json.hbs +++ b/packages/create-app/templates/default-app/packages/app/package.json.hbs @@ -23,7 +23,7 @@ "@backstage/plugin-user-settings": "^{{version '@backstage/plugin-user-settings'}}", "@backstage/test-utils": "^{{version '@backstage/test-utils'}}", "@backstage/theme": "^{{version '@backstage/theme'}}", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "history": "^5.0.0", "react": "^16.13.1", diff --git a/packages/create-app/templates/default-app/packages/app/src/components/catalog/EntityPage.tsx b/packages/create-app/templates/default-app/packages/app/src/components/catalog/EntityPage.tsx index 2074a2712c..6b285aff92 100644 --- a/packages/create-app/templates/default-app/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/create-app/templates/default-app/packages/app/src/components/catalog/EntityPage.tsx @@ -35,8 +35,12 @@ import { EntityLayout, EntityLinksCard, EntitySwitch, + EntityOrphanWarning, + EntityProcessingErrorsPanel, isComponentType, isKind, + hasCatalogProcessingErrors, + isOrphan, } from '@backstage/plugin-catalog'; import { isGithubActionsAvailable, @@ -80,6 +84,22 @@ const cicdContent = ( const overviewContent = ( + + + + + + + + + + + + + + + + @@ -160,7 +180,7 @@ const websiteEntityPage = ( /** * NOTE: This page is designed to work on small screens such as mobile devices. * This is based on Material UI Grid. If breakpoints are used, each grid item must set the `xs` prop to a column size or to `true`, - * since this does not default. If no breakpoints are used, the items will equitably share the asvailable space. + * since this does not default. If no breakpoints are used, the items will equitably share the available space. * https://material-ui.com/components/grid/#basic-grid. */ diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index ea620350ef..e8fbab1d6f 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/dev-utils +## 0.2.4 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-app-api@0.1.6 + - @backstage/core-plugin-api@0.1.4 + - @backstage/integration-react@0.1.5 + - @backstage/test-utils@0.1.16 + - @backstage/theme@0.2.9 + ## 0.2.3 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index a80745284c..b211c67f44 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "0.2.3", + "version": "0.2.4", "private": false, "publishConfig": { "access": "public", @@ -29,15 +29,15 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-app-api": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-app-api": "^0.1.6", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/catalog-model": "^0.9.0", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.1", - "@backstage/test-utils": "^0.1.15", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/integration-react": "^0.1.5", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/test-utils": "^0.1.16", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", @@ -50,7 +50,7 @@ "react-router-dom": "6.0.0-beta.0" }, "devDependencies": { - "@backstage/cli": "^0.7.5", + "@backstage/cli": "^0.7.6", "@types/jest": "^26.0.7", "@types/node": "^14.14.32" }, diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 48c0260fc5..8dc9742651 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/integration-react +## 0.1.5 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.4 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index e0161cb5ab..e285462539 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/integration-react", - "version": "0.1.4", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,11 +21,11 @@ }, "dependencies": { "@backstage/config": "^0.1.2", - "@backstage/core-components": "^0.1.3", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/integration": "^0.5.6", - "@backstage/theme": "^0.2.3", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -33,9 +33,9 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.2", - "@backstage/dev-utils": "^0.2.0", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/packages/techdocs-common/CHANGELOG.md b/packages/techdocs-common/CHANGELOG.md index ab5eff10e3..d548d84409 100644 --- a/packages/techdocs-common/CHANGELOG.md +++ b/packages/techdocs-common/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/techdocs-common +## 0.7.1 + +### Patch Changes + +- 59a5fa319: Migrated files are now printed when `techdocs-cli migrate` is run with the + `--verbose` flag set. +- 54356336e: TechDocs generator stage now supports `mkdocs.yaml` file, in addition to `.yml` + depending on whichever is present at the time of generation. (Assumes the + latest `spotify/techdocs` container, running mkdocs `v1.2.2` or greater). + ## 0.7.0 ### Minor Changes diff --git a/packages/techdocs-common/package.json b/packages/techdocs-common/package.json index bb81c875fd..e9cdade22f 100644 --- a/packages/techdocs-common/package.json +++ b/packages/techdocs-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/techdocs-common", "description": "Common functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "0.7.0", + "version": "0.7.1", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -60,7 +60,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.7.5", + "@backstage/cli": "^0.7.6", "@types/fs-extra": "^9.0.5", "@types/git-url-parse": "^9.0.0", "@types/js-yaml": "^4.0.0", diff --git a/packages/techdocs-common/src/stages/generate/helpers.test.ts b/packages/techdocs-common/src/stages/generate/helpers.test.ts index a5a6d99c29..a267736bd2 100644 --- a/packages/techdocs-common/src/stages/generate/helpers.test.ts +++ b/packages/techdocs-common/src/stages/generate/helpers.test.ts @@ -23,6 +23,7 @@ import { RemoteProtocol } from '../prepare/types'; import { addBuildTimestampMetadata, getGeneratorKey, + getMkdocsYml, getRepoUrlFromLocationAnnotation, isValidRepoUrlForMkdocs, patchMkdocsYmlPreBuild, @@ -53,6 +54,9 @@ const mkdocsYmlWithValidDocDir = fs.readFileSync( const mkdocsYmlWithInvalidDocDir = fs.readFileSync( resolvePath(__filename, '../__fixtures__/mkdocs_invalid_doc_dir.yml'), ); +const mkdocsYmlWithInvalidDocDir2 = fs.readFileSync( + resolvePath(__filename, '../__fixtures__/mkdocs_invalid_doc_dir2.yml'), +); const mockLogger = getVoidLogger(); const rootDir = os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; @@ -334,48 +338,68 @@ describe('helpers', () => { }); }); - describe('validateMkdocsYaml', () => { - beforeEach(() => { - mockFs({ - '/mkdocs.yml': mkdocsYml, - '/mkdocs_with_extensions.yml': mkdocsYmlWithExtensions, - '/mkdocs_valid_doc_dir.yml': mkdocsYmlWithValidDocDir, - '/mkdocs_invalid_doc_dir.yml': mkdocsYmlWithInvalidDocDir, - }); - }); - + describe('getMkdocsYml', () => { afterEach(() => { mockFs.restore(); }); const inputDir = resolvePath(__filename, '../__fixtures__/'); + + it('returns expected contents when .yml file is present', async () => { + const key = path.join(inputDir, 'mkdocs.yml'); + mockFs({ [key]: mkdocsYml }); + const { path: mkdocsPath, content } = await getMkdocsYml(inputDir); + + expect(mkdocsPath).toBe(key); + expect(content).toBe(mkdocsYml.toString()); + }); + + it('returns expected contents when .yaml file is present', async () => { + const key = path.join(inputDir, 'mkdocs.yaml'); + mockFs({ [key]: mkdocsYml }); + const { path: mkdocsPath, content } = await getMkdocsYml(inputDir); + expect(mkdocsPath).toBe(key); + expect(content).toBe(mkdocsYml.toString()); + }); + + it('throws when neither .yml nor .yaml file is present', async () => { + const invalidInputDir = resolvePath(__filename); + await expect(getMkdocsYml(invalidInputDir)).rejects.toThrowError( + /Could not read MkDocs YAML config file mkdocs.yml or mkdocs.yaml for validation/, + ); + }); + }); + + describe('validateMkdocsYaml', () => { + const inputDir = resolvePath(__filename, '../__fixtures__/'); + it('should return true on when no docs_dir present', async () => { await expect( - validateMkdocsYaml(inputDir, '/mkdocs.yml'), + validateMkdocsYaml(inputDir, mkdocsYml.toString()), ).resolves.toBeUndefined(); }); it('should return true on when a valid docs_dir is present', async () => { await expect( - validateMkdocsYaml(inputDir, '/mkdocs_valid_doc_dir.yml'), + validateMkdocsYaml(inputDir, mkdocsYmlWithValidDocDir.toString()), ).resolves.toBeUndefined(); }); it('should return false on absolute doc_dir path', async () => { await expect( - validateMkdocsYaml(inputDir, '/mkdocs_invalid_doc_dir.yml'), + validateMkdocsYaml(inputDir, mkdocsYmlWithInvalidDocDir.toString()), ).rejects.toThrow(); }); it('should return false on doc_dir path that traverses directory structure backwards', async () => { await expect( - validateMkdocsYaml(inputDir, '/mkdocs_invalid_doc_dir2.yml'), + validateMkdocsYaml(inputDir, mkdocsYmlWithInvalidDocDir2.toString()), ).rejects.toThrow(); }); it('should validate files with custom yaml tags', async () => { await expect( - validateMkdocsYaml(inputDir, '/mkdocs_with_extensions.yml'), + validateMkdocsYaml(inputDir, mkdocsYmlWithExtensions.toString()), ).resolves.toBeUndefined(); }); }); diff --git a/packages/techdocs-common/src/stages/generate/helpers.ts b/packages/techdocs-common/src/stages/generate/helpers.ts index 590e75e7b2..c10303f29c 100644 --- a/packages/techdocs-common/src/stages/generate/helpers.ts +++ b/packages/techdocs-common/src/stages/generate/helpers.ts @@ -19,7 +19,7 @@ import { isChildPath } from '@backstage/backend-common'; import { spawn } from 'child_process'; import fs from 'fs-extra'; import yaml, { DEFAULT_SCHEMA, Type } from 'js-yaml'; -import { resolve as resolvePath } from 'path'; +import path, { resolve as resolvePath } from 'path'; import { PassThrough, Writable } from 'stream'; import { Logger } from 'winston'; import { ParsedLocationAnnotation } from '../../helpers'; @@ -155,26 +155,50 @@ const MKDOCS_SCHEMA = DEFAULT_SCHEMA.extend([ }), ]); +/** + * Finds and loads the contents of either an mkdocs.yml or mkdocs.yaml file, + * depending on which is present (MkDocs supports both as of v1.2.2). + * + * @param {string} inputDir base dir to be searched for either an mkdocs.yml or + * mkdocs.yaml file. + */ +export const getMkdocsYml = async ( + inputDir: string, +): Promise<{ path: string; content: string }> => { + let mkdocsYmlPath: string; + let mkdocsYmlFileString: string; + try { + mkdocsYmlPath = path.join(inputDir, 'mkdocs.yaml'); + mkdocsYmlFileString = await fs.readFile(mkdocsYmlPath, 'utf8'); + } catch { + try { + mkdocsYmlPath = path.join(inputDir, 'mkdocs.yml'); + mkdocsYmlFileString = await fs.readFile(mkdocsYmlPath, 'utf8'); + } catch (error) { + throw new Error( + `Could not read MkDocs YAML config file mkdocs.yml or mkdocs.yaml for validation: ${error.message}`, + ); + } + } + + return { + path: mkdocsYmlPath, + content: mkdocsYmlFileString, + }; +}; + /** * Validating mkdocs config file for incorrect/insecure values * Throws on invalid configs * * @param {string} inputDir base dir to be used as a docs_dir path validity check - * @param {string} mkdocsYmlPath Absolute path to mkdocs.yml or equivalent of a docs site + * @param {string} mkdocsYmlFileString The string contents of the loaded + * mkdocs.yml or equivalent of a docs site */ export const validateMkdocsYaml = async ( inputDir: string, - mkdocsYmlPath: string, + mkdocsYmlFileString: string, ) => { - let mkdocsYmlFileString; - try { - mkdocsYmlFileString = await fs.readFile(mkdocsYmlPath, 'utf8'); - } catch (error) { - throw new Error( - `Could not read MkDocs YAML config file ${mkdocsYmlPath} before for validation: ${error.message}`, - ); - } - const mkdocsYml: any = yaml.load(mkdocsYmlFileString, { schema: MKDOCS_SCHEMA, }); diff --git a/packages/techdocs-common/src/stages/generate/techdocs.ts b/packages/techdocs-common/src/stages/generate/techdocs.ts index 9d6bf38c54..1a6577cad9 100644 --- a/packages/techdocs-common/src/stages/generate/techdocs.ts +++ b/packages/techdocs-common/src/stages/generate/techdocs.ts @@ -20,6 +20,7 @@ import path from 'path'; import { Logger } from 'winston'; import { addBuildTimestampMetadata, + getMkdocsYml, patchMkdocsYmlPreBuild, runCommand, storeEtagMetadata, @@ -71,10 +72,8 @@ export class TechdocsGenerator implements GeneratorBase { logger: childLogger, logStream, }: GeneratorRunOptions): Promise { - // TODO: In future mkdocs.yml can be mkdocs.yaml. So, use a config variable here to find out - // the correct file name. // Do some updates to mkdocs.yml before generating docs e.g. adding repo_url - const mkdocsYmlPath = path.join(inputDir, 'mkdocs.yml'); + const { path: mkdocsYmlPath, content } = await getMkdocsYml(inputDir); if (parsedLocationAnnotation) { await patchMkdocsYmlPreBuild( mkdocsYmlPath, @@ -83,7 +82,7 @@ export class TechdocsGenerator implements GeneratorBase { ); } - await validateMkdocsYaml(inputDir, mkdocsYmlPath); + await validateMkdocsYaml(inputDir, content); // Directories to bind on container const mountDirs = { diff --git a/packages/techdocs-common/src/stages/publish/awsS3.ts b/packages/techdocs-common/src/stages/publish/awsS3.ts index 2942e33380..7bdc91ffd4 100644 --- a/packages/techdocs-common/src/stages/publish/awsS3.ts +++ b/packages/techdocs-common/src/stages/publish/awsS3.ts @@ -337,7 +337,7 @@ export class AwsS3Publish implements PublisherBase { } try { - this.logger.debug(`Migrating ${file}`); + this.logger.verbose(`Migrating ${file}`); await this.storageClient .copyObject({ Bucket: this.bucketName, diff --git a/packages/techdocs-common/src/stages/publish/azureBlobStorage.ts b/packages/techdocs-common/src/stages/publish/azureBlobStorage.ts index 7ee67a0016..fe8fe9c2ce 100644 --- a/packages/techdocs-common/src/stages/publish/azureBlobStorage.ts +++ b/packages/techdocs-common/src/stages/publish/azureBlobStorage.ts @@ -323,7 +323,7 @@ export class AzureBlobStoragePublish implements PublisherBase { if (originalPath === newPath) return; try { - this.logger.debug(`Migrating ${originalPath}`); + this.logger.verbose(`Migrating ${originalPath}`); await this.renameBlob(originalPath, newPath, removeOriginal); } catch (e) { this.logger.warn(`Unable to migrate ${originalPath}: ${e.message}`); diff --git a/packages/techdocs-common/src/stages/publish/local.ts b/packages/techdocs-common/src/stages/publish/local.ts index 3414d273dd..24af34932f 100644 --- a/packages/techdocs-common/src/stages/publish/local.ts +++ b/packages/techdocs-common/src/stages/publish/local.ts @@ -196,7 +196,7 @@ export class LocalPublish implements PublisherBase { // Otherwise, copy or move the file. await new Promise(resolve => { const migrate = removeOriginal ? fs.move : fs.copyFile; - this.logger.debug(`Migrating ${relativeFile}`); + this.logger.verbose(`Migrating ${relativeFile}`); migrate(file, newFile, err => { if (err) { this.logger.warn( diff --git a/packages/techdocs-common/src/stages/publish/migrations/GoogleMigration.ts b/packages/techdocs-common/src/stages/publish/migrations/GoogleMigration.ts index cc35b351ea..192cefbfe2 100644 --- a/packages/techdocs-common/src/stages/publish/migrations/GoogleMigration.ts +++ b/packages/techdocs-common/src/stages/publish/migrations/GoogleMigration.ts @@ -64,7 +64,7 @@ export class MigrateWriteStream extends Writable { const migrate = this.removeOriginal ? file.move.bind(file) : file.copy.bind(file); - this.logger.debug(`Migrating ${file.name}`); + this.logger.verbose(`Migrating ${file.name}`); migrate(newFile) .catch(e => this.logger.warn(`Unable to migrate ${file.name}: ${e.message}`), diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 12627e55a0..a16b2a6259 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/test-utils +## 0.1.16 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-app-api@0.1.6 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.15 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index cfe4f2198e..d5c8c505e4 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "0.1.15", + "version": "0.1.16", "private": false, "publishConfig": { "access": "public", @@ -29,11 +29,11 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-app-api": "^0.1.5", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-app-api": "^0.1.6", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/test-utils-core": "^0.1.1", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", @@ -46,7 +46,7 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.5", + "@backstage/cli": "^0.7.6", "@types/jest": "^26.0.7", "@types/node": "^14.14.32" }, diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index e19e044977..8b00be65f5 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/theme +## 0.2.9 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes + ## 0.2.8 ### Patch Changes diff --git a/packages/theme/package.json b/packages/theme/package.json index d433be4648..f041134cd5 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/theme", "description": "material-ui theme for use with Backstage.", - "version": "0.2.8", + "version": "0.2.9", "private": false, "publishConfig": { "access": "public", @@ -28,10 +28,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@material-ui/core": "^4.11.0" + "@material-ui/core": "^4.12.2" }, "devDependencies": { - "@backstage/cli": "^0.7.0" + "@backstage/cli": "^0.7.6" }, "files": [ "dist" diff --git a/packages/theme/src/baseTheme.ts b/packages/theme/src/baseTheme.ts index 93132d8b7a..b2d964c4db 100644 --- a/packages/theme/src/baseTheme.ts +++ b/packages/theme/src/baseTheme.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createMuiTheme } from '@material-ui/core'; +import { createTheme as createMuiTheme } from '@material-ui/core'; import { darken, lighten } from '@material-ui/core/styles/colorManipulator'; import { Overrides } from '@material-ui/core/styles/overrides'; diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index dfa9130b4d..1a12d645c4 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-api-docs +## 0.6.4 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- bebc09fa8: Add explicit import for `isomorphic-form-data` needed for `swagger-ui-react` +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog@0.6.9 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.6.3 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 4294daea20..ffa488de2f 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-api-docs", - "version": "0.6.3", + "version": "0.6.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,13 +31,13 @@ "dependencies": { "@asyncapi/react-component": "^0.23.0", "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog": "^0.6.8", - "@backstage/plugin-catalog-react": "^0.3.1", - "@backstage/theme": "^0.2.8", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog": "^0.6.9", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", "@material-icons/font": "^1.0.2", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/react": "^16.9", @@ -52,10 +52,10 @@ "swagger-ui-react": "^3.37.2" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 218e20cd0e..9183eac0ad 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend +## 0.3.19 + +### Patch Changes + +- 4edca1bd0: Allow to configure SAML auth `acceptedClockSkewMs` +- b68f2c83c: Added the `disableRefresh` option to the `OAuth2` config +- Updated dependencies + - @backstage/test-utils@0.1.16 + - @backstage/catalog-client@0.3.18 + ## 0.3.18 ### Patch Changes diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index ed6417850c..e3d626a9df 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -65,6 +65,7 @@ export interface Config { authorizationUrl: string; tokenUrl: string; scope?: string; + disableRefresh?: boolean; }; }; oidc?: { diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 07097a880f..c9219ddfae 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend", - "version": "0.3.18", + "version": "0.3.19", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,11 +30,11 @@ }, "dependencies": { "@backstage/backend-common": "^0.8.7", - "@backstage/catalog-client": "^0.3.17", + "@backstage/catalog-client": "^0.3.18", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@backstage/errors": "^0.1.1", - "@backstage/test-utils": "^0.1.15", + "@backstage/test-utils": "^0.1.16", "@types/express": "^4.17.6", "@types/passport": "^1.0.3", "compression": "^1.7.4", @@ -68,7 +68,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.7.5", + "@backstage/cli": "^0.7.6", "@types/body-parser": "^1.19.0", "@types/cookie-parser": "^1.4.2", "@types/express-session": "^1.17.2", diff --git a/plugins/auth-backend/src/providers/oauth2/provider.ts b/plugins/auth-backend/src/providers/oauth2/provider.ts index f174543a63..6b1f92a2d5 100644 --- a/plugins/auth-backend/src/providers/oauth2/provider.ts +++ b/plugins/auth-backend/src/providers/oauth2/provider.ts @@ -177,6 +177,8 @@ export const createOAuth2Provider = ( const authorizationUrl = envConfig.getString('authorizationUrl'); const tokenUrl = envConfig.getString('tokenUrl'); const scope = envConfig.getOptionalString('scope'); + const disableRefresh = + envConfig.getOptionalBoolean('disableRefresh') ?? false; const provider = new OAuth2AuthProvider({ clientId, @@ -188,7 +190,7 @@ export const createOAuth2Provider = ( }); return OAuthAdapter.fromConfig(globalConfig, provider, { - disableRefresh: false, + disableRefresh, providerId, tokenIssuer, }); diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index c6f4b82596..db9510015a 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-badges +## 0.2.6 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.5 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index 3d38bc6d92..f2ac4c748b 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-badges", - "version": "0.2.5", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,12 +21,12 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -35,10 +35,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 388f7ecd27..83db6141f3 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-bitrise +## 0.1.8 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.7 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 00eb35f055..12d3b73d4f 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bitrise", - "version": "0.1.7", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,11 +21,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "cross-fetch": "^3.0.6", @@ -38,10 +38,10 @@ "recharts": "^1.8.5" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/bitrise/src/components/BitriseBuildsTableComponent/BitriseBuildsTableComponent.tsx b/plugins/bitrise/src/components/BitriseBuildsTableComponent/BitriseBuildsTableComponent.tsx index d6c7ab166b..0966de3377 100644 --- a/plugins/bitrise/src/components/BitriseBuildsTableComponent/BitriseBuildsTableComponent.tsx +++ b/plugins/bitrise/src/components/BitriseBuildsTableComponent/BitriseBuildsTableComponent.tsx @@ -219,10 +219,10 @@ export const BitriseBuildsTable = ({ }} totalCount={builds.value?.paging?.total_item_count || 0} page={page} - onChangePage={pageIndex => { + onPageChange={pageIndex => { handleChangePage(pageIndex, builds.value?.paging?.next); }} - onChangeRowsPerPage={handleChangeRowsPerPage} + onRowsPerPageChange={handleChangeRowsPerPage} columns={columns} data={builds.value?.data || []} onSearchChange={(searchTerm: string) => diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 8974e896ff..8c6ae136aa 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.2.2 + +### Patch Changes + +- 2a2a2749b: chore(deps): bump `@types/ldapjs` from 1.0.10 to 2.2.0 +- Updated dependencies + - @backstage/plugin-catalog-backend@0.13.1 + ## 0.2.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index e6c8b4e801..d6b521a422 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,15 +30,15 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/plugin-catalog-backend": "^0.13.0", + "@backstage/plugin-catalog-backend": "^0.13.1", "@types/ldapjs": "^2.2.0", "ldapjs": "^2.2.0", "lodash": "^4.17.15", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/test-utils": "^0.1.13", + "@backstage/cli": "^0.7.6", + "@backstage/test-utils": "^0.1.16", "@types/lodash": "^4.14.151", "msw": "^0.29.0" }, diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index daa6c5a0e8..07799cfad4 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-catalog-backend +## 0.13.1 + +### Patch Changes + +- 11c370af2: Support filtering entities via property existence. For example you can now query with `/entities?filter=metadata.annotations.blah` to fetch all entities that has the particular property defined. +- Updated dependencies + - @backstage/catalog-client@0.3.18 + ## 0.13.0 ### Minor Changes diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 0bf7831c6d..b6f2df602a 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -636,6 +636,7 @@ export type EntitiesCatalog = { export type EntitiesSearchFilter = { key: string; matchValueIn?: string[]; + matchValueExists?: boolean; }; // Warning: (ae-missing-release-tag) "entity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -1077,16 +1078,16 @@ export class UrlReaderProcessor implements CatalogProcessor { // src/catalog/types.d.ts:44:8 - (tsdoc-param-tag-with-invalid-name) The @param block should be followed by a valid parameter name: The identifier cannot non-word characters // src/catalog/types.d.ts:45:8 - (tsdoc-param-tag-with-invalid-name) The @param block should be followed by a valid parameter name: The identifier cannot non-word characters // src/catalog/types.d.ts:75:5 - (ae-forgotten-export) The symbol "LocationUpdateLogEvent" needs to be exported by the entry point index.d.ts -// src/database/types.d.ts:121:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen -// src/database/types.d.ts:127:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen -// src/database/types.d.ts:128:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen -// src/database/types.d.ts:142:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen -// src/database/types.d.ts:143:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen -// src/database/types.d.ts:144:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:125:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:131:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:132:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen // src/database/types.d.ts:146:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen -// src/database/types.d.ts:159:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen -// src/database/types.d.ts:160:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen -// src/database/types.d.ts:161:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:147:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:148:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:150:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:163:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:164:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/database/types.d.ts:165:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen // src/ingestion/processors/GithubMultiOrgReaderProcessor.d.ts:23:9 - (ae-forgotten-export) The symbol "GithubMultiOrgConfig" needs to be exported by the entry point index.d.ts // src/ingestion/processors/types.d.ts:7:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen // src/ingestion/processors/types.d.ts:8:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 10d89c41f2..d67cd7553b 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend", - "version": "0.13.0", + "version": "0.13.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,7 +30,7 @@ }, "dependencies": { "@backstage/backend-common": "^0.8.6", - "@backstage/catalog-client": "^0.3.16", + "@backstage/catalog-client": "^0.3.18", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@backstage/errors": "^0.1.1", @@ -62,8 +62,8 @@ }, "devDependencies": { "@backstage/backend-test-utils": "^0.1.4", - "@backstage/cli": "^0.7.4", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.6", + "@backstage/test-utils": "^0.1.16", "@types/core-js": "^2.5.4", "@types/git-url-parse": "^9.0.0", "@types/lodash": "^4.14.151", diff --git a/plugins/catalog-backend/src/database/CommonDatabase.test.ts b/plugins/catalog-backend/src/database/CommonDatabase.test.ts index 2dc3d91465..f459cbc446 100644 --- a/plugins/catalog-backend/src/database/CommonDatabase.test.ts +++ b/plugins/catalog-backend/src/database/CommonDatabase.test.ts @@ -491,6 +491,98 @@ describe('CommonDatabase', () => { ]), ); }); + + it('can get all specific entities for matching existence filters', async () => { + const entities: Entity[] = [ + { + apiVersion: 'A', + kind: 'K1', + metadata: { + name: 'N', + annotations: { + foo: 'bar', + }, + }, + spec: { c: 'SOME' }, + }, + { + apiVersion: 'a', + kind: 'k2', + metadata: { + name: 'N', + annotations: { + foo: 'bar', + }, + }, + spec: { c: 'Some' }, + }, + { + apiVersion: 'a', + kind: 'k3', + metadata: { name: 'n' }, + spec: { c: 'somE' }, + }, + ]; + + await db.transaction(async tx => { + await db.addEntities( + tx, + entities.map(entity => ({ entity, relations: [] })), + ); + }); + + const existRows = await db.transaction(async tx => + db.entities(tx, { + filter: { + anyOf: [ + { + allOf: [ + { key: 'metadata.annotations.foo', matchValueExists: true }, + ], + }, + ], + }, + }), + ); + + expect(existRows.entities.length).toEqual(2); + expect(existRows.entities).toEqual( + expect.arrayContaining([ + { + locationId: undefined, + entity: expect.objectContaining({ kind: 'K1' }), + }, + { + locationId: undefined, + entity: expect.objectContaining({ kind: 'k2' }), + }, + ]), + ); + + const nonExistRows = await db.transaction(async tx => + db.entities(tx, { + filter: { + anyOf: [ + { + allOf: [ + { key: 'metadata.annotations.foo', matchValueExists: false }, + ], + }, + ], + }, + }), + ); + + expect(nonExistRows.entities.length).toEqual(1); + expect(nonExistRows.entities).toEqual( + expect.arrayContaining([ + { + locationId: undefined, + entity: expect.objectContaining({ kind: 'k3' }), + }, + ]), + ); + }); }); describe('setRelations', () => { diff --git a/plugins/catalog-backend/src/database/CommonDatabase.ts b/plugins/catalog-backend/src/database/CommonDatabase.ts index b4f76d5cbc..272ac08c4c 100644 --- a/plugins/catalog-backend/src/database/CommonDatabase.ts +++ b/plugins/catalog-backend/src/database/CommonDatabase.ts @@ -218,7 +218,11 @@ export class CommonDatabase implements Database { for (const singleFilter of request?.filter?.anyOf ?? []) { entitiesQuery = entitiesQuery.orWhere(function singleFilterFn() { - for (const { key, matchValueIn } of singleFilter.allOf) { + for (const { + key, + matchValueIn, + matchValueExists, + } of singleFilter.allOf) { // NOTE(freben): This used to be a set of OUTER JOIN, which may seem to // make a lot of sense. However, it had abysmal performance on sqlite // when datasets grew large, so we're using IN instead. @@ -226,7 +230,7 @@ export class CommonDatabase implements Database { .select('entity_id') .where(function keyFilter() { this.andWhere({ key: key.toLowerCase() }); - if (matchValueIn) { + if (matchValueExists !== false && matchValueIn) { if (matchValueIn.length === 1) { this.andWhere({ value: matchValueIn[0].toLowerCase() }); } else if (matchValueIn.length > 1) { @@ -238,7 +242,12 @@ export class CommonDatabase implements Database { } } }); - this.andWhere('id', 'in', matchQuery); + // Explicitly evaluate matchValueExists as a boolean since it may be undefined + this.andWhere( + 'id', + matchValueExists === false ? 'not in' : 'in', + matchQuery, + ); } }); } diff --git a/plugins/catalog-backend/src/database/types.ts b/plugins/catalog-backend/src/database/types.ts index 3a3bbb7f1e..e1a253decc 100644 --- a/plugins/catalog-backend/src/database/types.ts +++ b/plugins/catalog-backend/src/database/types.ts @@ -118,6 +118,11 @@ export type EntitiesSearchFilter = { * case insensitive. */ matchValueIn?: string[]; + + /** + * Match on existence of key. + */ + matchValueExists?: boolean; }; /** diff --git a/plugins/catalog-backend/src/next/NextEntitiesCatalog.ts b/plugins/catalog-backend/src/next/NextEntitiesCatalog.ts index f3921602e2..7cc99210c9 100644 --- a/plugins/catalog-backend/src/next/NextEntitiesCatalog.ts +++ b/plugins/catalog-backend/src/next/NextEntitiesCatalog.ts @@ -78,7 +78,11 @@ export class NextEntitiesCatalog implements EntitiesCatalog { for (const singleFilter of request?.filter?.anyOf ?? []) { entitiesQuery = entitiesQuery.orWhere(function singleFilterFn() { - for (const { key, matchValueIn } of singleFilter.allOf) { + for (const { + key, + matchValueIn, + matchValueExists, + } of singleFilter.allOf) { // NOTE(freben): This used to be a set of OUTER JOIN, which may seem to // make a lot of sense. However, it had abysmal performance on sqlite // when datasets grew large, so we're using IN instead. @@ -86,7 +90,7 @@ export class NextEntitiesCatalog implements EntitiesCatalog { .select('entity_id') .where(function keyFilter() { this.andWhere({ key: key.toLowerCase() }); - if (matchValueIn) { + if (matchValueExists !== false && matchValueIn) { if (matchValueIn.length === 1) { this.andWhere({ value: matchValueIn[0].toLowerCase() }); } else if (matchValueIn.length > 1) { @@ -98,7 +102,12 @@ export class NextEntitiesCatalog implements EntitiesCatalog { } } }); - this.andWhere('entity_id', 'in', matchQuery); + // Explicitly evaluate matchValueExists as a boolean since it may be undefined + this.andWhere( + 'entity_id', + matchValueExists === false ? 'not in' : 'in', + matchQuery, + ); } }); } diff --git a/plugins/catalog-backend/src/service/request/parseEntityFilterParams.test.ts b/plugins/catalog-backend/src/service/request/parseEntityFilterParams.test.ts index e2b953ddef..fc22a638de 100644 --- a/plugins/catalog-backend/src/service/request/parseEntityFilterParams.test.ts +++ b/plugins/catalog-backend/src/service/request/parseEntityFilterParams.test.ts @@ -69,9 +69,11 @@ describe('parseEntityFilterParams', () => { describe('parseEntityFilterString', () => { it('works for the happy path', () => { expect(parseEntityFilterString('')).toBeUndefined(); - expect(parseEntityFilterString('a=1,b=2,a=3')).toEqual([ + expect(parseEntityFilterString('a=1,b=2,a=3,c,d=')).toEqual([ { key: 'a', matchValueIn: ['1', '3'] }, { key: 'b', matchValueIn: ['2'] }, + { key: 'c', matchValueExists: true }, + { key: 'd', matchValueIn: [''] }, ]); }); @@ -83,17 +85,11 @@ describe('parseEntityFilterString', () => { }); it('rejects malformed strings', () => { - expect(() => parseEntityFilterString('x=2,a=')).toThrow( - "Invalid filter, 'a=' is not a valid statement (expected a string on the form a=b)", - ); expect(() => parseEntityFilterString('x=2,=a')).toThrow( - "Invalid filter, '=a' is not a valid statement (expected a string on the form a=b)", + "Invalid filter, '=a' is not a valid statement (expected a string on the form a=b or a= or a)", ); expect(() => parseEntityFilterString('x=2,=')).toThrow( - "Invalid filter, '=' is not a valid statement (expected a string on the form a=b)", - ); - expect(() => parseEntityFilterString('x=2,a')).toThrow( - "Invalid filter, 'a' is not a valid statement (expected a string on the form a=b)", + "Invalid filter, '=' is not a valid statement (expected a string on the form a=b or a= or a)", ); }); }); diff --git a/plugins/catalog-backend/src/service/request/parseEntityFilterParams.ts b/plugins/catalog-backend/src/service/request/parseEntityFilterParams.ts index 154a25c541..c63b366bc7 100644 --- a/plugins/catalog-backend/src/service/request/parseEntityFilterParams.ts +++ b/plugins/catalog-backend/src/service/request/parseEntityFilterParams.ts @@ -61,25 +61,26 @@ export function parseEntityFilterString( for (const statement of statements) { const equalsIndex = statement.indexOf('='); - if (equalsIndex < 1) { - throw new InputError( - `Invalid filter, '${statement}' is not a valid statement (expected a string on the form a=b)`, - ); - } - const key = statement.substr(0, equalsIndex).trim(); - const value = statement.substr(equalsIndex + 1).trim(); - if (!key || !value) { + const key = + equalsIndex === -1 ? statement : statement.substr(0, equalsIndex).trim(); + const value = + equalsIndex === -1 ? undefined : statement.substr(equalsIndex + 1).trim(); + if (!key) { throw new InputError( - `Invalid filter, '${statement}' is not a valid statement (expected a string on the form a=b)`, + `Invalid filter, '${statement}' is not a valid statement (expected a string on the form a=b or a= or a)`, ); } const f = - key in filtersByKey - ? filtersByKey[key] - : (filtersByKey[key] = { key, matchValueIn: [] }); - f.matchValueIn!.push(value); + key in filtersByKey ? filtersByKey[key] : (filtersByKey[key] = { key }); + + if (value === undefined) { + f.matchValueExists = true; + } else { + f.matchValueIn = f.matchValueIn || []; + f.matchValueIn.push(value); + } } return Object.values(filtersByKey); diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index ad1a05da5e..af785b43fb 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-import +## 0.5.15 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/integration-react@0.1.5 + - @backstage/theme@0.2.9 + - @backstage/catalog-client@0.3.18 + ## 0.5.14 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index d6f371bc65..f854bb423f 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-import", - "version": "0.5.14", + "version": "0.5.15", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,15 +30,15 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-client": "^0.3.17", + "@backstage/catalog-client": "^0.3.18", "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/integration": "^0.5.8", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.1", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/integration-react": "^0.1.5", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@octokit/rest": "^18.5.3", @@ -54,10 +54,10 @@ "yaml": "^1.10.0" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.3.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index b0ce191ec8..90736d6c46 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,45 @@ # @backstage/plugin-catalog-react +## 0.4.0 + +### Minor Changes + +- c5cb55803: Introduce the `useEntityOwnership` hook, which implements the full new ownership model. + + This also means a breaking change to the interface of `UserListFilter`. It no longer + accepts a user entity as input, but rather a function that checks ownership of an + entity. This function is taken from the above mentioned hook output. So if you are + instantiating the filter yourself, you will change from something like + + ```ts + const { entity } = useOwnUser(); + const filter = new UserListFilter('owned', user, ...); + ``` + + to + + ```ts + const { isOwnedEntity } = useEntityOwnership(); + const filter = new UserListFilter('owned', isOwnedEntity, ...); + ``` + +### Patch Changes + +- 19d9995b6: Improve accessibility of core & catalog components by adjusting them with non-breaking changes. +- 11c370af2: Export `CATALOG_FILTER_EXISTS` symbol +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- 043a4238f: Fix `EntityListProvider` to not update url if unmounted +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-app-api@0.1.6 + - @backstage/core-plugin-api@0.1.4 + - @backstage/catalog-client@0.3.18 + ## 0.3.1 ### Patch Changes diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 2555cc7c0c..a8175c8ec2 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -7,6 +7,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { AsyncState } from 'react-use/lib/useAsync'; +import { CATALOG_FILTER_EXISTS } from '@backstage/catalog-client'; import { CatalogApi } from '@backstage/catalog-client'; import { ComponentEntity } from '@backstage/catalog-model'; import { Context } from 'react'; @@ -22,6 +23,8 @@ import { SystemEntity } from '@backstage/catalog-model'; import { TableColumn } from '@backstage/core-components'; import { UserEntity } from '@backstage/catalog-model'; +export { CATALOG_FILTER_EXISTS }; + export { CatalogApi }; // Warning: (ae-missing-release-tag) "catalogApiRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -721,6 +724,14 @@ export function useEntityListProvider< EntityFilters extends DefaultEntityFilters = DefaultEntityFilters >(): EntityListContextProps; +// Warning: (ae-missing-release-tag) "useEntityOwnership" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function useEntityOwnership(): { + loading: boolean; + isOwnedEntity: (entity: Entity | EntityName) => boolean; +}; + // Warning: (ae-forgotten-export) The symbol "EntityTypeReturn" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "useEntityTypeFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -756,18 +767,18 @@ export function useRelatedEntities( export class UserListFilter implements EntityFilter { constructor( value: UserListFilterKind, - user: UserEntity | undefined, + isOwnedEntity: (entity: Entity) => boolean, isStarredEntity: (entity: Entity) => boolean, ); // (undocumented) filterEntity(entity: Entity): boolean; // (undocumented) + readonly isOwnedEntity: (entity: Entity) => boolean; + // (undocumented) readonly isStarredEntity: (entity: Entity) => boolean; // (undocumented) toQueryValue(): string; // (undocumented) - readonly user: UserEntity | undefined; - // (undocumented) readonly value: UserListFilterKind; } diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index d0cb5ac947..c8e6b2e604 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-react", - "version": "0.3.1", + "version": "0.4.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,16 +28,17 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-client": "^0.3.17", + "@backstage/catalog-client": "^0.3.18", "@backstage/catalog-model": "^0.9.0", - "@backstage/core-app-api": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-app-api": "^0.1.6", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/integration": "^0.5.8", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/react": "^16.9", + "jwt-decode": "^3.1.0", "lodash": "^4.17.15", "qs": "^6.9.4", "react": "^16.13.1", @@ -46,14 +47,15 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.3.0", "@testing-library/user-event": "^13.1.8", "@types/jest": "^26.0.7", + "@types/jwt-decode": "^3.1.0", "@types/node": "^14.14.32", "cross-fetch": "^3.0.6", "msw": "^0.29.0", diff --git a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx index b54284da36..4662e58dd2 100644 --- a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { fireEvent, render } from '@testing-library/react'; +import { fireEvent, render, waitFor } from '@testing-library/react'; import { Entity, RELATION_OWNED_BY, @@ -58,7 +58,8 @@ const mockCatalogApi = { } as Partial; const mockIdentityApi = { - getUserId: () => '', + getUserId: () => 'testUser', + getIdToken: async () => undefined, } as Partial; const apis = ApiRegistry.from([ @@ -68,6 +69,9 @@ const apis = ApiRegistry.from([ [storageApiRef, MockStorageApi.create()], ]); +const mockIsOwnedEntity = (entity: Entity) => + entity.metadata.name === 'component-1'; + const mockIsStarredEntity = (entity: Entity) => entity.metadata.name === 'component-3'; @@ -75,7 +79,9 @@ jest.mock('../../hooks', () => { const actual = jest.requireActual('../../hooks'); return { ...actual, - useOwnUser: () => ({ value: mockUser }), + useEntityOwnership: () => ({ + isOwnedEntity: mockIsOwnedEntity, + }), useStarredEntities: () => ({ isStarredEntity: mockIsStarredEntity, }), @@ -161,7 +167,7 @@ describe('', () => { ).toEqual(['Owned', 'Starred', 'All']); }); - it('includes counts alongside each filter', () => { + it('includes counts alongside each filter', async () => { const { getAllByRole } = render( @@ -172,14 +178,16 @@ describe('', () => { // Material UI renders ListItemSecondaryActions outside the // menuitem itself, so we pick off the next sibling. - expect( - getAllByRole('menuitem').map( - ({ nextSibling }) => nextSibling?.textContent, - ), - ).toEqual(['2', '1', '4']); + await waitFor(() => { + expect( + getAllByRole('menuitem').map( + ({ nextSibling }) => nextSibling?.textContent, + ), + ).toEqual(['1', '1', '4']); + }); }); - it('respects other frontend filters in counts', () => { + it('respects other frontend filters in counts', async () => { const { getAllByRole } = render( ', () => { , ); - expect( - getAllByRole('menuitem').map( - ({ nextSibling }) => nextSibling?.textContent, - ), - ).toEqual(['1', '0', '2']); + await waitFor(() => { + expect( + getAllByRole('menuitem').map( + ({ nextSibling }) => nextSibling?.textContent, + ), + ).toEqual(['1', '0', '2']); + }); }); it('respects the query parameter filter value', () => { @@ -214,7 +224,7 @@ describe('', () => { ); expect(updateFilters).toHaveBeenLastCalledWith({ - user: new UserListFilter('owned', mockUser, mockIsStarredEntity), + user: new UserListFilter('owned', mockIsOwnedEntity, mockIsStarredEntity), }); }); @@ -233,7 +243,11 @@ describe('', () => { fireEvent.click(getByText('Starred')); expect(updateFilters).toHaveBeenLastCalledWith({ - user: new UserListFilter('starred', mockUser, mockIsStarredEntity), + user: new UserListFilter( + 'starred', + mockIsOwnedEntity, + mockIsStarredEntity, + ), }); }); }); diff --git a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx index 0212c0f0be..0e764507fe 100644 --- a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx @@ -14,15 +14,11 @@ * limitations under the License. */ -import React, { Fragment, useEffect, useMemo, useState } from 'react'; -import { compact } from 'lodash'; -import { UserListFilterKind } from '../../types'; -import { UserListFilter } from '../../filters'; import { - useEntityListProvider, - useOwnUser, - useStarredEntities, -} from '../../hooks'; + configApiRef, + IconComponent, + useApi, +} from '@backstage/core-plugin-api'; import { Card, List, @@ -36,12 +32,16 @@ import { } from '@material-ui/core'; import SettingsIcon from '@material-ui/icons/Settings'; import StarIcon from '@material-ui/icons/Star'; -import { reduceEntityFilters } from '../../utils'; +import { compact } from 'lodash'; +import React, { Fragment, useEffect, useMemo, useState } from 'react'; +import { UserListFilter } from '../../filters'; import { - configApiRef, - IconComponent, - useApi, -} from '@backstage/core-plugin-api'; + useEntityListProvider, + useStarredEntities, + useEntityOwnership, +} from '../../hooks'; +import { UserListFilterKind } from '../../types'; +import { reduceEntityFilters } from '../../utils'; const useStyles = makeStyles(theme => ({ root: { @@ -136,20 +136,20 @@ export const UserListPicker = ({ queryParameters, } = useEntityListProvider(); - const { value: user } = useOwnUser(); const { isStarredEntity } = useStarredEntities(); + const { isOwnedEntity } = useEntityOwnership(); const [selectedUserFilter, setSelectedUserFilter] = useState( [queryParameters.user].flat()[0] ?? initialFilter, ); // Static filters; used for generating counts of potentially unselected kinds const ownedFilter = useMemo( - () => new UserListFilter('owned', user, isStarredEntity), - [user, isStarredEntity], + () => new UserListFilter('owned', isOwnedEntity, isStarredEntity), + [isOwnedEntity, isStarredEntity], ); const starredFilter = useMemo( - () => new UserListFilter('starred', user, isStarredEntity), - [user, isStarredEntity], + () => new UserListFilter('starred', isOwnedEntity, isStarredEntity), + [isOwnedEntity, isStarredEntity], ); useEffect(() => { @@ -157,12 +157,12 @@ export const UserListPicker = ({ user: selectedUserFilter ? new UserListFilter( selectedUserFilter as UserListFilterKind, - user, + isOwnedEntity, isStarredEntity, ) : undefined, }); - }, [selectedUserFilter, user, isStarredEntity, updateFilters]); + }, [selectedUserFilter, isOwnedEntity, isStarredEntity, updateFilters]); // To show proper counts for each section, apply all other frontend filters _except_ the user // filter that's controlled by this picker. diff --git a/plugins/catalog-react/src/filters.ts b/plugins/catalog-react/src/filters.ts index 98c66e0c26..46fb708f93 100644 --- a/plugins/catalog-react/src/filters.ts +++ b/plugins/catalog-react/src/filters.ts @@ -14,14 +14,10 @@ * limitations under the License. */ -import { - Entity, - UserEntity, - RELATION_OWNED_BY, -} from '@backstage/catalog-model'; -import { EntityFilter, UserListFilterKind } from './types'; -import { getEntityRelations, isOwnerOf } from './utils'; +import { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model'; import { formatEntityRefTitle } from './components/EntityRefLink'; +import { EntityFilter, UserListFilterKind } from './types'; +import { getEntityRelations } from './utils'; export class EntityKindFilter implements EntityFilter { constructor(readonly value: string) {} @@ -116,14 +112,14 @@ export class EntityLifecycleFilter implements EntityFilter { export class UserListFilter implements EntityFilter { constructor( readonly value: UserListFilterKind, - readonly user: UserEntity | undefined, + readonly isOwnedEntity: (entity: Entity) => boolean, readonly isStarredEntity: (entity: Entity) => boolean, ) {} filterEntity(entity: Entity): boolean { switch (this.value) { case 'owned': - return this.user !== undefined && isOwnerOf(this.user, entity); + return this.isOwnedEntity(entity); case 'starred': return this.isStarredEntity(entity); default: diff --git a/plugins/catalog-react/src/hooks/index.ts b/plugins/catalog-react/src/hooks/index.ts index 483f1ab787..868e50c852 100644 --- a/plugins/catalog-react/src/hooks/index.ts +++ b/plugins/catalog-react/src/hooks/index.ts @@ -25,3 +25,4 @@ export { useEntityTypeFilter } from './useEntityTypeFilter'; export { useOwnUser } from './useOwnUser'; export { useRelatedEntities } from './useRelatedEntities'; export { useStarredEntities } from './useStarredEntities'; +export { useEntityOwnership } from './useEntityOwnership'; diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx index c66af03da0..815c9e289e 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx @@ -20,7 +20,7 @@ import { MemoryRouter as Router } from 'react-router-dom'; import { act, renderHook } from '@testing-library/react-hooks'; import { MockStorageApi } from '@backstage/test-utils'; import { CatalogApi } from '@backstage/catalog-client'; -import { Entity, UserEntity } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { EntityListProvider, useEntityListProvider, @@ -39,17 +39,6 @@ import { storageApiRef, } from '@backstage/core-plugin-api'; -const mockUser: UserEntity = { - apiVersion: 'backstage.io/v1beta1', - kind: 'User', - metadata: { - name: 'guest', - }, - spec: { - memberOf: [], - }, -}; - const entities: Entity[] = [ { apiVersion: '1', @@ -81,13 +70,12 @@ const mockConfigApi = { getOptionalString: () => '', } as Partial; const mockIdentityApi: Partial = { - getUserId: () => 'guest@example.com', + getUserId: () => 'guest', + getIdToken: async () => undefined, }; const mockCatalogApi: Partial = { - getEntities: jest - .fn() - .mockImplementation(() => Promise.resolve({ items: entities })), - getEntityByName: () => Promise.resolve(mockUser), + getEntities: jest.fn().mockImplementation(async () => ({ items: entities })), + getEntityByName: async () => undefined, }; const apis = ApiRegistry.from([ [configApiRef, mockConfigApi], @@ -117,7 +105,7 @@ const wrapper = ({ ); }; -describe('', () => { +describe('', () => { beforeEach(() => { jest.clearAllMocks(); }); @@ -171,18 +159,26 @@ describe('', () => { const { result, waitFor } = renderHook(() => useEntityListProvider(), { wrapper, }); - await waitFor(() => !!result.current.entities.length); - expect(result.current.entities.length).toBe(2); - expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1); + + await waitFor(() => { + expect(result.current.entities.length).toBe(2); + expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1); + }); act(() => result.current.updateFilters({ - user: new UserListFilter('owned', mockUser, () => true), + user: new UserListFilter( + 'owned', + entity => entity.metadata.name === 'component-1', + () => true, + ), }), ); - await waitFor(() => result.current.entities.length !== 2); - expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1); - expect(result.current.entities.length).toBe(1); + + await waitFor(() => { + expect(result.current.entities.length).toBe(1); + expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1); + }); }); it('debounces multiple filter changes', async () => { @@ -205,7 +201,7 @@ describe('', () => { }); it('returns an error on catalogApi failure', async () => { - const { result, waitForNextUpdate, waitForValueToChange } = renderHook( + const { result, waitForValueToChange, waitFor } = renderHook( () => useEntityListProvider(), { wrapper, @@ -218,7 +214,8 @@ describe('', () => { act(() => { result.current.updateFilters({ kind: new EntityKindFilter('api') }); }); - await waitForNextUpdate(); - expect(result.current.error).toBeDefined(); + await waitFor(() => { + expect(result.current.error).toBeDefined(); + }); }); }); diff --git a/plugins/catalog-react/src/hooks/useEntityOwnership.test.tsx b/plugins/catalog-react/src/hooks/useEntityOwnership.test.tsx new file mode 100644 index 0000000000..f617565e81 --- /dev/null +++ b/plugins/catalog-react/src/hooks/useEntityOwnership.test.tsx @@ -0,0 +1,255 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CatalogApi } from '@backstage/catalog-client'; +import { + ComponentEntity, + RELATION_MEMBER_OF, + RELATION_OWNED_BY, + UserEntity, +} from '@backstage/catalog-model'; +import { ApiProvider, ApiRegistry } from '@backstage/core-app-api'; +import { IdentityApi, identityApiRef } from '@backstage/core-plugin-api'; +import { renderHook } from '@testing-library/react-hooks'; +import React from 'react'; +import { catalogApiRef } from '../api'; +import { + loadCatalogOwnerRefs, + loadIdentityOwnerRefs, + useEntityOwnership, +} from './useEntityOwnership'; + +describe('useEntityOwnership', () => { + type MockIdentityApi = jest.Mocked< + Pick + >; + type MockCatalogApi = jest.Mocked>; + + const mockIdentityApi: MockIdentityApi = { + getUserId: jest.fn(), + getIdToken: jest.fn(), + }; + const mockCatalogApi: MockCatalogApi = { + getEntityByName: jest.fn(), + }; + + const identityApi = (mockIdentityApi as unknown) as IdentityApi; + const catalogApi = (mockCatalogApi as unknown) as CatalogApi; + + const Wrapper = ({ children }: { children?: React.ReactNode }) => ( + + {children} + + ); + + const ownedEntity: ComponentEntity = { + apiVersion: 'backstage.io/v1beta1', + kind: 'Component', + metadata: { + name: 'component1', + namespace: 'default', + }, + spec: { + /* should not be accessed */ + } as any, + relations: [ + { + type: RELATION_OWNED_BY, + target: { kind: 'User', namespace: 'default', name: 'user1' }, + }, + { + type: RELATION_OWNED_BY, + target: { kind: 'Group', namespace: 'default', name: 'group1' }, + }, + ], + }; + + const user2Entity: UserEntity = { + apiVersion: 'backstage.io/v1beta1', + kind: 'User', + metadata: { + name: 'user2', + namespace: 'default', + }, + spec: { + /* should not be accessed */ + } as any, + relations: [ + { + type: RELATION_MEMBER_OF, + target: { kind: 'Group', namespace: 'default', name: 'group1' }, + }, + ], + }; + + // these were generated on https://jwt.io, based off of its default example token + // no ent at all + const tokenNoEnt = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'; + // "ent": [] + const tokenEmptyEnt = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJlbnQiOltdfQ.Khyza2whczkoC4wSCLBhBaBB9-ktIkk7gpXEgQPHhtY'; + // "ent": ["user:default/user1"] + const tokenUserEnt = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJlbnQiOlsidXNlcjpkZWZhdWx0L3VzZXIxIl19.CMCxjwI4rj_TD3uUoBNgFjkZI23LwRTbQnSPBxzncoY'; + // "ent": ["user:default/user1", "group:default/group1"] + const tokenUserAndGroupEnt = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJlbnQiOlsidXNlcjpkZWZhdWx0L3VzZXIxIiwiZ3JvdXA6ZGVmYXVsdC9ncm91cDEiXX0.ZZmZrogbQKx0hnForw63ETkyAhUyeoBE8Hgloi45rdg'; + + afterEach(() => { + jest.resetAllMocks(); + }); + + describe('loadIdentityOwnerRefs', () => { + it('returns the user id when there is no relevant token info', async () => { + mockIdentityApi.getUserId.mockReturnValueOnce('foo'); + mockIdentityApi.getIdToken.mockResolvedValueOnce(undefined); + await expect(loadIdentityOwnerRefs(identityApi)).resolves.toEqual([ + 'user:default/foo', + ]); + + mockIdentityApi.getUserId.mockReturnValueOnce('ns/foo'); + mockIdentityApi.getIdToken.mockResolvedValueOnce(undefined); + await expect(loadIdentityOwnerRefs(identityApi)).resolves.toEqual([ + 'user:ns/foo', + ]); + + mockIdentityApi.getUserId.mockReturnValueOnce('user:ns/foo'); + mockIdentityApi.getIdToken.mockResolvedValueOnce(undefined); + await expect(loadIdentityOwnerRefs(identityApi)).resolves.toEqual([ + 'user:ns/foo', + ]); + + mockIdentityApi.getUserId.mockReturnValueOnce('foo'); + mockIdentityApi.getIdToken.mockResolvedValueOnce(tokenNoEnt); + await expect(loadIdentityOwnerRefs(identityApi)).resolves.toEqual([ + 'user:default/foo', + ]); + + mockIdentityApi.getUserId.mockReturnValueOnce('foo'); + mockIdentityApi.getIdToken.mockResolvedValueOnce(tokenEmptyEnt); + await expect(loadIdentityOwnerRefs(identityApi)).resolves.toEqual([ + 'user:default/foo', + ]); + }); + + it('returns both the user id and the token parts', async () => { + mockIdentityApi.getUserId.mockReturnValueOnce('foo'); + mockIdentityApi.getIdToken.mockResolvedValueOnce(tokenUserEnt); + await expect(loadIdentityOwnerRefs(identityApi)).resolves.toEqual([ + 'user:default/foo', + 'user:default/user1', + ]); + + mockIdentityApi.getUserId.mockReturnValueOnce('foo'); + mockIdentityApi.getIdToken.mockResolvedValueOnce(tokenUserAndGroupEnt); + await expect(loadIdentityOwnerRefs(identityApi)).resolves.toEqual([ + 'user:default/foo', + 'user:default/user1', + 'group:default/group1', + ]); + }); + + it('gracefully ignores broken token', async () => { + mockIdentityApi.getUserId.mockReturnValueOnce('foo'); + mockIdentityApi.getIdToken.mockResolvedValueOnce('not a jwt'); + await expect(loadIdentityOwnerRefs(identityApi)).resolves.toEqual([ + 'user:default/foo', + ]); + }); + }); + + describe('loadCatalogOwnerRefs', () => { + it('loads the first user from the catalog', async () => { + mockCatalogApi.getEntityByName.mockResolvedValueOnce(user2Entity); + await expect( + loadCatalogOwnerRefs(catalogApi, ['user:default/user2']), + ).resolves.toEqual(['group:default/group1']); + expect(mockCatalogApi.getEntityByName).toBeCalledWith({ + kind: 'user', + namespace: 'default', + name: 'user2', + }); + }); + + it('gracefully handles missing user', async () => { + mockCatalogApi.getEntityByName.mockResolvedValueOnce(undefined); + await expect( + loadCatalogOwnerRefs(catalogApi, ['user:default/user2']), + ).resolves.toEqual([]); + expect(mockCatalogApi.getEntityByName).toBeCalledWith({ + kind: 'user', + namespace: 'default', + name: 'user2', + }); + }); + }); + + describe('useEntityOwnership', () => { + it('matches ownership via token claims', async () => { + mockIdentityApi.getUserId.mockReturnValue('foo'); + mockIdentityApi.getIdToken.mockResolvedValue(tokenUserAndGroupEnt); + mockCatalogApi.getEntityByName.mockResolvedValue(undefined); + + const { result, waitForValueToChange } = renderHook( + () => useEntityOwnership(), + { + wrapper: Wrapper, + }, + ); + + expect(result.current.loading).toBe(true); + expect(result.current.isOwnedEntity(ownedEntity)).toBe(false); + + await waitForValueToChange(() => result.current.loading); + + expect(result.current.loading).toBe(false); + expect(result.current.isOwnedEntity(ownedEntity)).toBe(true); + }); + + it('matches ownership via catalog user entity', async () => { + mockIdentityApi.getUserId.mockReturnValue('user2'); + mockIdentityApi.getIdToken.mockResolvedValue(undefined); + mockCatalogApi.getEntityByName.mockResolvedValue(user2Entity); + + const { result, waitForValueToChange } = renderHook( + () => useEntityOwnership(), + { + wrapper: Wrapper, + }, + ); + + expect(result.current.loading).toBe(true); + expect(result.current.isOwnedEntity(ownedEntity)).toBe(false); + + await waitForValueToChange(() => result.current.loading); + + expect(result.current.loading).toBe(false); + expect(result.current.isOwnedEntity(ownedEntity)).toBe(true); + + expect(mockCatalogApi.getEntityByName).toBeCalledWith({ + kind: 'user', + namespace: 'default', + name: 'user2', + }); + }); + }); +}); diff --git a/plugins/catalog-react/src/hooks/useEntityOwnership.ts b/plugins/catalog-react/src/hooks/useEntityOwnership.ts new file mode 100644 index 0000000000..93c79de207 --- /dev/null +++ b/plugins/catalog-react/src/hooks/useEntityOwnership.ts @@ -0,0 +1,148 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CatalogApi } from '@backstage/catalog-client'; +import { + Entity, + EntityName, + parseEntityRef, + RELATION_MEMBER_OF, + RELATION_OWNED_BY, + stringifyEntityRef, +} from '@backstage/catalog-model'; +import { + IdentityApi, + identityApiRef, + useApi, +} from '@backstage/core-plugin-api'; +import jwtDecoder from 'jwt-decode'; +import { useMemo } from 'react'; +import { useAsync } from 'react-use'; +import { catalogApiRef } from '../api'; +import { getEntityRelations } from '../utils/getEntityRelations'; + +// Takes a user ID from the identity, which can be on basically any form, and +// returns an entity ref. E.g. if the input is "foo", it returns +// "user:default/foo" to make sure it's a full ref. +function extendUserId(id: string): string { + try { + const ref = parseEntityRef(id, { + defaultKind: 'User', + defaultNamespace: 'default', + }); + return stringifyEntityRef(ref); + } catch { + return id; + } +} + +// Takes the relevant parts of the Backstage identity, and translates them into +// a list of entity refs on string form that represent the user's ownership +// connections. +export async function loadIdentityOwnerRefs( + identityApi: IdentityApi, +): Promise { + const id = identityApi.getUserId(); + const token = await identityApi.getIdToken(); + const result: string[] = []; + + if (id) { + result.push(extendUserId(id)); + } + + if (token) { + try { + const decoded = jwtDecoder(token) as any; + if (decoded?.ent) { + [decoded.ent] + .flat() + .filter(x => typeof x === 'string') + .map(x => x.toLocaleLowerCase('en-US')) + .forEach(x => result.push(x)); + } + } catch { + // ignore + } + } + + return result; +} + +// Takes the relevant parts of the User entity corresponding to the Backstage +// identity, and translates them into a list of entity refs on string form that +// represent the user's ownership connections. +export async function loadCatalogOwnerRefs( + catalogApi: CatalogApi, + identityOwnerRefs: string[], +): Promise { + const result = new Array(); + + const primaryUserRef = identityOwnerRefs.find(ref => ref.startsWith('user:')); + if (primaryUserRef) { + const entity = await catalogApi.getEntityByName( + parseEntityRef(primaryUserRef), + ); + if (entity) { + const memberOf = getEntityRelations(entity, RELATION_MEMBER_OF, { + kind: 'Group', + }); + for (const group of memberOf) { + result.push(stringifyEntityRef(group)); + } + } + } + + return result; +} + +/** + * Returns a function that checks whether the currently signed-in user is an + * owner of a given entity. When the hook is initially mounted, the loading + * flag will be true and the results returned from the function will always be + * false. + */ +export function useEntityOwnership(): { + loading: boolean; + isOwnedEntity: (entity: Entity | EntityName) => boolean; +} { + const identityApi = useApi(identityApiRef); + const catalogApi = useApi(catalogApiRef); + + // Trigger load only on mount + const { loading, value: refs } = useAsync(async () => { + const identityRefs = await loadIdentityOwnerRefs(identityApi); + const catalogRefs = await loadCatalogOwnerRefs(catalogApi, identityRefs); + return new Set([...identityRefs, ...catalogRefs]); + }, []); + + const isOwnedEntity = useMemo(() => { + const myOwnerRefs = new Set(refs ?? []); + return (entity: Entity | EntityName) => { + const entityOwnerRefs = ('metadata' in entity + ? getEntityRelations(entity, RELATION_OWNED_BY) + : [entity] + ).map(stringifyEntityRef); + for (const ref of entityOwnerRefs) { + if (myOwnerRefs.has(ref)) { + return true; + } + } + return false; + }; + }, [refs]); + + return useMemo(() => ({ loading, isOwnedEntity }), [loading, isOwnedEntity]); +} diff --git a/plugins/catalog-react/src/index.ts b/plugins/catalog-react/src/index.ts index 4ee613012d..4e005c0cdc 100644 --- a/plugins/catalog-react/src/index.ts +++ b/plugins/catalog-react/src/index.ts @@ -14,6 +14,7 @@ * limitations under the License. */ export type { CatalogApi } from '@backstage/catalog-client'; +export { CATALOG_FILTER_EXISTS } from '@backstage/catalog-client'; export { catalogApiRef } from './api'; export * from './components'; export * from './hooks'; diff --git a/plugins/catalog-react/src/utils/isOwnerOf.ts b/plugins/catalog-react/src/utils/isOwnerOf.ts index e62a0db1ba..38ad90e4a6 100644 --- a/plugins/catalog-react/src/utils/isOwnerOf.ts +++ b/plugins/catalog-react/src/utils/isOwnerOf.ts @@ -16,10 +16,10 @@ import { Entity, - EntityName, getEntityName, RELATION_MEMBER_OF, RELATION_OWNED_BY, + stringifyEntityRef, } from '@backstage/catalog-model'; import { getEntityRelations } from './getEntityRelations'; @@ -27,22 +27,19 @@ import { getEntityRelations } from './getEntityRelations'; * Get the related entity references. */ export function isOwnerOf(owner: Entity, owned: Entity) { - const possibleOwners: EntityName[] = [ - ...getEntityRelations(owner, RELATION_MEMBER_OF, { kind: 'group' }), - ...(owner ? [getEntityName(owner)] : []), - ]; + const possibleOwners = new Set( + [ + ...getEntityRelations(owner, RELATION_MEMBER_OF, { kind: 'group' }), + ...(owner ? [getEntityName(owner)] : []), + ].map(stringifyEntityRef), + ); - const owners = getEntityRelations(owned, RELATION_OWNED_BY); + const owners = getEntityRelations(owned, RELATION_OWNED_BY).map( + stringifyEntityRef, + ); for (const ownerItem of owners) { - if ( - possibleOwners.find( - o => - ownerItem.kind.toLowerCase() === o.kind.toLowerCase() && - ownerItem.namespace.toLowerCase() === o.namespace.toLowerCase() && - ownerItem.name.toLowerCase() === o.name.toLowerCase(), - ) !== undefined - ) { + if (possibleOwners.has(ownerItem)) { return true; } } diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 295c1fe15c..c3818a44e7 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,49 @@ # @backstage/plugin-catalog +## 0.6.9 + +### Patch Changes + +- 19d9995b6: Improve accessibility of core & catalog components by adjusting them with non-breaking changes. +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- 224e54484: Added an `EntityProcessingErrorsPanel` component to show any errors that occurred when refreshing an entity from its source location. + + If upgrading, this should be added to your `EntityPage` in your Backstage application: + + ```diff + // packages/app/src/components/catalog/EntityPage.tsx + + const overviewContent = ( + ... + + + + + + + + + + + + + + + + + + + + ``` + + Additionally, `WarningPanel` now changes color based on the provided severity. + +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/integration-react@0.1.5 + - @backstage/theme@0.2.9 + - @backstage/catalog-client@0.3.18 + ## 0.6.8 ### Patch Changes diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index a416e70038..c030882bca 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -327,6 +327,11 @@ export const EntityPageLayout: { }) => null; }; +// Warning: (ae-missing-release-tag) "EntityProcessingErrorsPanel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export const EntityProcessingErrorsPanel: () => JSX.Element; + // Warning: (ae-missing-release-tag) "EntitySwitch" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -358,6 +363,11 @@ export const FilteredEntityLayout: ({ children, }: PropsWithChildren<{}>) => JSX.Element; +// Warning: (ae-missing-release-tag) "hasCatalogProcessingErrors" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const hasCatalogProcessingErrors: (entity: Entity) => boolean; + // Warning: (ae-missing-release-tag) "isComponentType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 821e029616..0935f797fc 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog", - "version": "0.6.8", + "version": "0.6.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,16 +30,16 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-client": "^0.3.17", + "@backstage/catalog-client": "^0.3.18", "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", "@backstage/integration": "^0.5.8", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.1", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/integration-react": "^0.1.5", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/react": "^16.9", @@ -54,10 +54,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.3.0", diff --git a/plugins/catalog/src/components/CatalogPage/CatalogPage.test.tsx b/plugins/catalog/src/components/CatalogPage/CatalogPage.test.tsx index e09aec55e7..8e3c59ffa3 100644 --- a/plugins/catalog/src/components/CatalogPage/CatalogPage.test.tsx +++ b/plugins/catalog/src/components/CatalogPage/CatalogPage.test.tsx @@ -55,7 +55,7 @@ describe('CatalogPage', () => { name: 'Entity1', }, spec: { - owner: 'tools@example.com', + owner: 'tools', type: 'service', }, relations: [ @@ -72,7 +72,7 @@ describe('CatalogPage', () => { name: 'Entity2', }, spec: { - owner: 'not-tools@example.com', + owner: 'not-tools', type: 'service', }, relations: [ @@ -108,7 +108,8 @@ describe('CatalogPage', () => { displayName: 'Display Name', }; const identityApi: Partial = { - getUserId: () => 'tools@example.com', + getUserId: () => 'tools', + getIdToken: async () => undefined, getProfile: () => testProfile, }; diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx index 7867ad6f46..efbd6989e4 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx @@ -73,7 +73,11 @@ describe('CatalogTable component', () => { value={{ entities, filters: { - user: new UserListFilter('owned', undefined, () => false), + user: new UserListFilter( + 'owned', + () => false, + () => false, + ), }, }} > diff --git a/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.test.tsx b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.test.tsx new file mode 100644 index 0000000000..a4e284a0eb --- /dev/null +++ b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.test.tsx @@ -0,0 +1,103 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { EntityProvider } from '@backstage/plugin-catalog-react'; + +import { renderInTestApp } from '@backstage/test-utils'; +import React from 'react'; +import { EntityProcessingErrorsPanel } from './EntityProcessingErrorsPanel'; +import { Entity } from '@backstage/catalog-model'; + +describe('', () => { + it('renders EntityProcessErrors if the entity has errors', async () => { + const entity: Entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + description: 'This is the description', + }, + + spec: { + owner: 'guest', + type: 'service', + lifecycle: 'production', + }, + status: { + items: [ + { + type: 'backstage.io/catalog-processing', + level: 'error', + message: + 'InputError: Policy check failed; caused by Error: Malformed envelope, /metadata/labels should be object', + error: { + name: 'InputError', + message: + 'Policy check failed; caused by Error: Malformed envelope, /metadata/labels should be object', + cause: { + name: 'Error', + message: + 'Malformed envelope, /metadata/labels should be object', + }, + }, + }, + { + type: 'foo', + level: 'error', + message: 'InputError: This should not be rendered', + error: { + name: 'InputError', + message: 'Foo', + cause: { + name: 'Error', + message: + 'Malformed envelope, /metadata/labels should be object', + }, + }, + }, + { + type: 'backstage.io/catalog-processing', + level: 'error', + message: 'InputError: Foo', + error: { + name: 'InputError', + message: 'Foo', + cause: { + name: 'Error', + message: + 'Malformed envelope, /metadata/labels should be object', + }, + }, + }, + ], + }, + }; + + const { getByText, queryByText } = await renderInTestApp( + + + , + ); + + expect( + getByText( + 'Error: Policy check failed; caused by Error: Malformed envelope, /metadata/labels should be object', + ), + ).toBeInTheDocument(); + expect(getByText('Error: Foo')).toBeInTheDocument(); + expect(queryByText('Error: This should not be rendered')).toBeNull(); + }); +}); diff --git a/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx new file mode 100644 index 0000000000..833ca74daa --- /dev/null +++ b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx @@ -0,0 +1,51 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Entity, UNSTABLE_EntityStatusItem } from '@backstage/catalog-model'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import { Box } from '@material-ui/core'; +import React from 'react'; +import { ResponseErrorPanel } from '@backstage/core-components'; +import { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from '@backstage/catalog-client'; + +const errorfilter = (i: UNSTABLE_EntityStatusItem) => + i.error && + i.level === 'error' && + i.type === ENTITY_STATUS_CATALOG_PROCESSING_TYPE; + +export const hasCatalogProcessingErrors = (entity: Entity) => + entity?.status?.items?.filter(errorfilter).length! > 0; + +/** + * Displays a list of errors if the entity is invalid. + */ +export const EntityProcessingErrorsPanel = () => { + const { entity } = useEntity(); + const catalogProcessingErrors = + (entity?.status?.items?.filter( + errorfilter, + ) as Required[]) || []; + + return ( + <> + {catalogProcessingErrors.map(({ error }, index) => ( + + + + ))} + + ); +}; diff --git a/plugins/catalog/src/components/EntityProcessingErrorsPanel/index.ts b/plugins/catalog/src/components/EntityProcessingErrorsPanel/index.ts new file mode 100644 index 0000000000..1af2c80484 --- /dev/null +++ b/plugins/catalog/src/components/EntityProcessingErrorsPanel/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { + EntityProcessingErrorsPanel, + hasCatalogProcessingErrors, +} from './EntityProcessingErrorsPanel'; diff --git a/plugins/catalog/src/index.ts b/plugins/catalog/src/index.ts index 215a18f661..fd542fafa3 100644 --- a/plugins/catalog/src/index.ts +++ b/plugins/catalog/src/index.ts @@ -23,6 +23,7 @@ export * from './components/CatalogTable/columns'; export * from './components/CreateComponentButton'; export * from './components/EntityLayout'; export * from './components/EntityOrphanWarning'; +export * from './components/EntityProcessingErrorsPanel'; export * from './components/EntityPageLayout'; export * from './components/EntitySwitch'; export * from './components/FilteredEntityLayout'; diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 015bd04ca8..32c093228a 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-circleci +## 0.2.20 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.19 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 52aae08b57..a1b43e7e40 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-circleci", - "version": "0.2.19", + "version": "0.2.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,11 +32,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "circleci-api": "^4.0.0", @@ -50,10 +50,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx index 40829e7e66..b33e1b40cc 100644 --- a/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -260,8 +260,8 @@ export const CITable = ({ }, ]} data={builds} - onChangePage={onChangePage} - onChangeRowsPerPage={onChangePageSize} + onPageChange={onChangePage} + onRowsPerPageChange={onChangePageSize} title={ diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index d0c5a647d8..d443e4c09a 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-cloudbuild +## 0.2.20 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.19 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index ee9f8a4e0c..6f0dc1d8af 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-cloudbuild", - "version": "0.2.19", + "version": "0.2.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,11 +31,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "moment": "^2.27.0", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/cloudbuild/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx b/plugins/cloudbuild/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx index acacc8bec5..8fbf89cdce 100644 --- a/plugins/cloudbuild/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx +++ b/plugins/cloudbuild/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx @@ -138,8 +138,8 @@ export const WorkflowRunsTableView = ({ }, ]} data={runs ?? []} - onChangePage={onChangePage} - onChangeRowsPerPage={onChangePageSize} + onPageChange={onChangePage} + onRowsPerPageChange={onChangePageSize} style={{ width: '100%' }} title={ diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index a0b44e590f..96f3569495 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-code-coverage +## 0.1.8 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.7 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index bd632972df..dcbcc181e7 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-coverage", - "version": "0.1.7", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,12 +22,12 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.4", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@material-ui/styles": "^4.11.0", @@ -40,10 +40,10 @@ "recharts": "^1.8.5" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index e594b4dbc6..f531f66122 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-config-schema +## 0.1.4 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.3 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 7ef279f123..0a8d46260d 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-config-schema", - "version": "0.1.3", + "version": "0.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,11 +21,11 @@ }, "dependencies": { "@backstage/config": "^0.1.4", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "jsonschema": "^1.2.6", @@ -35,10 +35,10 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index bfecedcedc..76516fd8bf 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-cost-insights +## 0.11.2 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.11.1 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 2f6fac1479..469cc7075f 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-cost-insights", - "version": "0.11.1", + "version": "0.11.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,10 +31,10 @@ }, "dependencies": { "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@material-ui/styles": "^4.9.6", @@ -54,10 +54,10 @@ "yup": "^0.29.3" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsThemeProvider.tsx b/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsThemeProvider.tsx index e56d72cc09..7c64c41116 100644 --- a/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsThemeProvider.tsx +++ b/plugins/cost-insights/src/components/CostInsightsPage/CostInsightsThemeProvider.tsx @@ -15,7 +15,10 @@ */ import React, { PropsWithChildren } from 'react'; -import { createMuiTheme, ThemeProvider } from '@material-ui/core'; +import { + createTheme as createMuiTheme, + ThemeProvider, +} from '@material-ui/core'; import { BackstageTheme } from '@backstage/theme'; import { costInsightsDarkTheme, diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 2cb7e849d3..a6d473a6e1 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-explore +## 0.3.11 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.10 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 2059632c08..78a51dfbea 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore", - "version": "0.3.10", + "version": "0.3.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,12 +31,12 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", "@backstage/plugin-explore-react": "^0.0.6", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/react": "^16.9", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx index 6953cf57a2..7b3a73673e 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx @@ -100,7 +100,7 @@ describe('', () => { const catalogError = new Error('Network timeout'); catalogApi.getEntities.mockRejectedValueOnce(catalogError); - const { getByText } = await renderInTestApp( + const { getAllByText } = await renderInTestApp( , @@ -108,7 +108,7 @@ describe('', () => { ); await waitFor(() => - expect(getByText(/Warning: Network timeout/)).toBeInTheDocument(), + expect(getAllByText(/Error: Network timeout/).length).not.toBe(0), ); }); }); diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index 8d7faa87f9..0ea7c3a574 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-fossa +## 0.2.12 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.11 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index cc4a27a5c0..f5bd84e763 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-fossa", - "version": "0.2.11", + "version": "0.2.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,12 +32,12 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "cross-fetch": "^3.0.6", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/fossa/src/components/FossaCard/FossaCard.test.tsx b/plugins/fossa/src/components/FossaCard/FossaCard.test.tsx index 3c771bd7d6..79b401e4a8 100644 --- a/plugins/fossa/src/components/FossaCard/FossaCard.test.tsx +++ b/plugins/fossa/src/components/FossaCard/FossaCard.test.tsx @@ -74,7 +74,7 @@ describe('', () => { fossaApi.getFindingSummary.mockRejectedValue(new Error('My Error')); - const { getByText } = await renderInTestApp( + const { getAllByText } = await renderInTestApp( @@ -82,7 +82,7 @@ describe('', () => { , ); - expect(getByText(/Warning: My Error/i)).toBeInTheDocument(); + expect(getAllByText(/Error: My Error/i).length).not.toBe(0); }); it('shows empty', async () => { diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index fc99dcbe09..564453dc1e 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-gcp-projects +## 0.3.1 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.0 ### Minor Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 1d04d7f1d5..f50f125d25 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcp-projects", - "version": "0.3.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,10 +30,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -42,10 +42,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 6f2eaae984..d10213f39b 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-git-release-manager +## 0.2.1 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.0 ### Minor Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 5598fcd6ef..97c22558a9 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-git-release-manager", - "version": "0.2.0", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,11 +20,11 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/integration": "^0.5.6", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@octokit/rest": "^18.5.3", @@ -38,10 +38,10 @@ "recharts": "^1.8.5" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react-hooks": "^3.4.2", "@testing-library/react": "^11.2.5", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 88bc9d08df..0eab743f7c 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-github-actions +## 0.4.14 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.4.13 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index d85d1e53fe..df07695c35 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-actions", - "version": "0.4.13", + "version": "0.4.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,12 +33,12 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/integration": "^0.5.8", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@octokit/rest": "^18.5.3", @@ -51,10 +51,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/github-actions/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx b/plugins/github-actions/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx index 34191bd307..8f1aff780d 100644 --- a/plugins/github-actions/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx +++ b/plugins/github-actions/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx @@ -130,8 +130,8 @@ export const WorkflowRunsTableView = ({ }, ]} data={runs ?? []} - onChangePage={onChangePage} - onChangeRowsPerPage={onChangePageSize} + onPageChange={onChangePage} + onRowsPerPageChange={onChangePageSize} style={{ width: '100%' }} title={ diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 524c1bd86b..68f6aa00b1 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-github-deployments +## 0.1.12 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/integration-react@0.1.5 + - @backstage/theme@0.2.9 + ## 0.1.11 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 9561083063..21f3c5ef10 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-deployments", - "version": "0.1.11", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,14 +21,14 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", "@backstage/integration": "^0.5.8", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/integration-react": "^0.1.5", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@octokit/graphql": "^4.5.8", @@ -38,10 +38,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/github-deployments/src/components/GithubDeploymentsCard.test.tsx b/plugins/github-deployments/src/components/GithubDeploymentsCard.test.tsx index 474b4a5941..4c1b7854c6 100644 --- a/plugins/github-deployments/src/components/GithubDeploymentsCard.test.tsx +++ b/plugins/github-deployments/src/components/GithubDeploymentsCard.test.tsx @@ -311,7 +311,7 @@ describe('github-deployments', () => { expect( await rendered.findByText( - 'Warning: No apiBaseUrl available for host my-github-3.com, please check your integrations config', + 'Error: No apiBaseUrl available for host my-github-3.com, please check your integrations config', ), ).toBeInTheDocument(); }); @@ -336,7 +336,7 @@ describe('github-deployments', () => { expect( await rendered.findByText( - 'Warning: No matching GitHub integration configuration for host my-github-unknown.com, please check your integrations config', + 'Error: No matching GitHub integration configuration for host my-github-unknown.com, please check your integrations config', ), ).toBeInTheDocument(); }); diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index 83cea3c807..796d4ac6ca 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-gitops-profiles +## 0.3.1 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.0 ### Minor Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index e7e45ee2a6..b3f1fd9ad3 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gitops-profiles", - "version": "0.3.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,10 +31,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -43,10 +43,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index cfbc2de00a..e5f168ac55 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-graphiql +## 0.2.13 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.12 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 46f44cdcf4..1b04c3a00b 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.12", + "version": "0.2.13", "private": false, "publishConfig": { "access": "public", @@ -31,10 +31,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "graphiql": "^1.0.0-alpha.10", @@ -44,10 +44,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index b7eef7ed31..331e6db713 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-ilert +## 0.1.7 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.6 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 01a8e7b013..0ecbc15d35 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-ilert", - "version": "0.1.6", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,13 +21,13 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", "@date-io/luxon": "2.x", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@material-ui/pickers": "^3.3.10", @@ -38,10 +38,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/ilert/src/components/IncidentsPage/IncidentsTable.tsx b/plugins/ilert/src/components/IncidentsPage/IncidentsTable.tsx index de819c4cc2..9a938256e9 100644 --- a/plugins/ilert/src/components/IncidentsPage/IncidentsTable.tsx +++ b/plugins/ilert/src/components/IncidentsPage/IncidentsTable.tsx @@ -253,8 +253,8 @@ export const IncidentsTable = ({ } page={tableState.page} totalCount={incidentsCount} - onChangePage={onChangePage} - onChangeRowsPerPage={onChangeRowsPerPage} + onPageChange={onChangePage} + onRowsPerPageChange={onChangeRowsPerPage} // localization={{ header: { actions: undefined } }} columns={columns} data={incidents} diff --git a/plugins/ilert/src/components/UptimeMonitorsPage/UptimeMonitorsTable.tsx b/plugins/ilert/src/components/UptimeMonitorsPage/UptimeMonitorsTable.tsx index 6d93385eb2..3099018e91 100644 --- a/plugins/ilert/src/components/UptimeMonitorsPage/UptimeMonitorsTable.tsx +++ b/plugins/ilert/src/components/UptimeMonitorsPage/UptimeMonitorsTable.tsx @@ -165,8 +165,8 @@ export const UptimeMonitorsTable = ({ } page={tableState.page} - onChangePage={onChangePage} - onChangeRowsPerPage={onChangeRowsPerPage} + onPageChange={onChangePage} + onRowsPerPageChange={onChangeRowsPerPage} localization={{ header: { actions: undefined } }} isLoading={isLoading} columns={columns} diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index db61a470f7..36c79236c1 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-jenkins +## 0.5.1 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.5.0 ### Minor Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 6030beee8e..9560d8d5e6 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-jenkins", - "version": "0.5.0", + "version": "0.5.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,11 +32,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "luxon": "^1.25.0", @@ -47,10 +47,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index 3e5eeffdaa..0519ed3816 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -208,8 +208,8 @@ export const CITableView = ({ }, ]} data={projects ?? []} - onChangePage={onChangePage} - onChangeRowsPerPage={onChangePageSize} + onPageChange={onChangePage} + onRowsPerPageChange={onChangePageSize} title={ Jenkins logo diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index e81a64ef58..348b6768f1 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-kafka +## 0.2.12 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.11 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index a7328b0c0c..860d17434a 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kafka", - "version": "0.2.11", + "version": "0.2.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,11 +21,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -34,10 +34,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.4.2", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index b5870c43e3..4ac6103d94 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-kubernetes-backend +## 0.3.12 + +### Patch Changes + +- 7f24f4088: chore(deps): bump `@kubernetes/client-node` from 0.14.3 to 0.15.0 +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.1.3 + ## 0.3.11 ### Patch Changes diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 72d80050d8..899f1fff00 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -51,6 +51,11 @@ export interface CustomResource { plural: string; } +// Warning: (ae-missing-release-tag) "DEFAULT_OBJECTS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_OBJECTS: KubernetesObjectTypes[]; + // Warning: (ae-missing-release-tag) "FetchResponseWrapper" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 1467dba9d6..e7c4f2606c 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-backend", - "version": "0.3.11", + "version": "0.3.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,7 @@ "@backstage/backend-common": "^0.8.7", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/plugin-kubernetes-common": "^0.1.2", + "@backstage/plugin-kubernetes-common": "^0.1.3", "@google-cloud/container": "^2.2.0", "@kubernetes/client-node": "^0.15.0", "@types/express": "^4.17.6", @@ -53,7 +53,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.7.5", + "@backstage/cli": "^0.7.6", "@types/aws4": "^1.5.1", "supertest": "^6.1.3", "aws-sdk-mock": "^5.2.1", diff --git a/plugins/kubernetes-backend/schema.d.ts b/plugins/kubernetes-backend/schema.d.ts index 9d002670b9..8b96d5ceca 100644 --- a/plugins/kubernetes-backend/schema.d.ts +++ b/plugins/kubernetes-backend/schema.d.ts @@ -16,6 +16,15 @@ export interface Config { kubernetes?: { + objectTypes?: Array< + | 'pods' + | 'services' + | 'configmaps' + | 'deployments' + | 'replicasets' + | 'horizontalpodautoscalers' + | 'ingresses' + >; serviceLocatorMethod: { type: 'multiTenant'; }; diff --git a/plugins/kubernetes-backend/src/index.ts b/plugins/kubernetes-backend/src/index.ts index 155c4967d5..e5eb5e7c62 100644 --- a/plugins/kubernetes-backend/src/index.ts +++ b/plugins/kubernetes-backend/src/index.ts @@ -16,3 +16,5 @@ export * from './service/router'; export * from './types/types'; + +export { DEFAULT_OBJECTS } from './service/KubernetesFanOutHandler'; diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts index 666b441226..a867efaaee 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts @@ -129,16 +129,16 @@ describe('handleGetKubernetesObjectsForService', () => { mockFetch(fetchObjectsForService); - const sut = new KubernetesFanOutHandler( - getVoidLogger(), - { + const sut = new KubernetesFanOutHandler({ + logger: getVoidLogger(), + fetcher: { fetchObjectsForService, }, - { + serviceLocator: { getClustersByServiceId, }, - [], - ); + customResources: [], + }); const result = await sut.getKubernetesObjectsByEntity({ entity: { @@ -221,16 +221,16 @@ describe('handleGetKubernetesObjectsForService', () => { mockFetch(fetchObjectsForService); - const sut = new KubernetesFanOutHandler( - getVoidLogger(), - { + const sut = new KubernetesFanOutHandler({ + logger: getVoidLogger(), + fetcher: { fetchObjectsForService, }, - { + serviceLocator: { getClustersByServiceId, }, - [], - ); + customResources: [], + }); const result = await sut.getKubernetesObjectsByEntity({ auth: { @@ -357,16 +357,16 @@ describe('handleGetKubernetesObjectsForService', () => { mockFetch(fetchObjectsForService); - const sut = new KubernetesFanOutHandler( - getVoidLogger(), - { + const sut = new KubernetesFanOutHandler({ + logger: getVoidLogger(), + fetcher: { fetchObjectsForService, }, - { + serviceLocator: { getClustersByServiceId, }, - [], - ); + customResources: [], + }); const result = await sut.getKubernetesObjectsByEntity({ auth: { @@ -497,16 +497,16 @@ describe('handleGetKubernetesObjectsForService', () => { mockFetch(fetchObjectsForService); - const sut = new KubernetesFanOutHandler( - getVoidLogger(), - { + const sut = new KubernetesFanOutHandler({ + logger: getVoidLogger(), + fetcher: { fetchObjectsForService, }, - { + serviceLocator: { getClustersByServiceId, }, - [], - ); + customResources: [], + }); const result = await sut.getKubernetesObjectsByEntity({ auth: { diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 3039560aad..0931d775d3 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -26,7 +26,7 @@ import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { KubernetesAuthTranslator } from '../kubernetes-auth-translator/types'; import { KubernetesAuthTranslatorGenerator } from '../kubernetes-auth-translator/KubernetesAuthTranslatorGenerator'; -const DEFAULT_OBJECTS = new Set([ +export const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [ 'pods', 'services', 'configmaps', @@ -34,30 +34,38 @@ const DEFAULT_OBJECTS = new Set([ 'replicasets', 'horizontalpodautoscalers', 'ingresses', -]); +]; + +export interface KubernetesFanOutHandlerOptions { + logger: Logger; + fetcher: KubernetesFetcher; + serviceLocator: KubernetesServiceLocator; + customResources: CustomResource[]; + objectTypesToFetch?: KubernetesObjectTypes[]; +} export class KubernetesFanOutHandler { private readonly logger: Logger; private readonly fetcher: KubernetesFetcher; private readonly serviceLocator: KubernetesServiceLocator; private readonly customResources: CustomResource[]; + private readonly objectTypesToFetch: KubernetesObjectTypes[]; - constructor( - logger: Logger, - fetcher: KubernetesFetcher, - serviceLocator: KubernetesServiceLocator, - customResources: CustomResource[], - ) { + constructor({ + logger, + fetcher, + serviceLocator, + customResources, + objectTypesToFetch = DEFAULT_OBJECTS, + }: KubernetesFanOutHandlerOptions) { this.logger = logger; this.fetcher = fetcher; this.serviceLocator = serviceLocator; this.customResources = customResources; + this.objectTypesToFetch = objectTypesToFetch; } - async getKubernetesObjectsByEntity( - requestBody: KubernetesRequestBody, - objectTypesToFetch: Set = DEFAULT_OBJECTS, - ) { + async getKubernetesObjectsByEntity(requestBody: KubernetesRequestBody) { const entityName = requestBody.entity?.metadata?.annotations?.[ 'backstage.io/kubernetes-id' @@ -98,7 +106,7 @@ export class KubernetesFanOutHandler { .fetchObjectsForService({ serviceId: entityName, clusterDetails: clusterDetailsItem, - objectTypesToFetch, + objectTypesToFetch: new Set(this.objectTypesToFetch), labelSelector, customResources: this.customResources, }) diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 984b3f14a0..8a1f2fe627 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -23,6 +23,7 @@ import { MultiTenantServiceLocator } from '../service-locator/MultiTenantService import { ClusterDetails, KubernetesClustersSupplier, + KubernetesObjectTypes, KubernetesServiceLocator, ServiceLocatorMethod, CustomResource, @@ -133,13 +134,17 @@ export async function createRouter( ); const serviceLocator = getServiceLocator(options.config, clusterDetails); + const objectTypesToFetch = options.config.getOptionalStringArray( + 'kubernetes.objectTypes', + ) as KubernetesObjectTypes[]; - const kubernetesFanOutHandler = new KubernetesFanOutHandler( + const kubernetesFanOutHandler = new KubernetesFanOutHandler({ logger, fetcher, serviceLocator, customResources, - ); + objectTypesToFetch, + }); return makeRouter(logger, kubernetesFanOutHandler, clusterDetails); } diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 3f6c1ea7db..49a312fa46 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-kubernetes-common +## 0.1.3 + +### Patch Changes + +- 7f24f4088: chore(deps): bump `@kubernetes/client-node` from 0.14.3 to 0.15.0 + ## 0.1.2 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 5321c48e73..445ba3f7d9 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.1.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -39,7 +39,7 @@ "@kubernetes/client-node": "^0.15.0" }, "devDependencies": { - "@backstage/cli": "^0.7.0" + "@backstage/cli": "^0.7.6" }, "jest": { "roots": [ diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index a370dd9af5..35de89edf9 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-kubernetes +## 0.4.9 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- 7f24f4088: chore(deps): bump `@kubernetes/client-node` from 0.14.3 to 0.15.0 +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + - @backstage/plugin-kubernetes-common@0.1.3 + ## 0.4.8 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index ee58c6b222..3a53806e86 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes", - "version": "0.4.8", + "version": "0.4.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,13 +32,13 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/plugin-kubernetes-common": "^0.1.2", - "@backstage/theme": "^0.2.8", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/plugin-kubernetes-common": "^0.1.3", + "@backstage/theme": "^0.2.9", "@kubernetes/client-node": "^0.15.0", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "js-yaml": "^4.0.0", @@ -50,10 +50,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.4.2", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index ea2d2efac5..a1753f3cdc 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-lighthouse +## 0.2.21 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.20 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 8ceaa35d20..47d816b857 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-lighthouse", - "version": "0.2.20", + "version": "0.2.21", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.4", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@testing-library/react-hooks": "^3.4.2", @@ -47,10 +47,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 9f5d70354a..cc50042740 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-newrelic +## 0.3.1 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.0 ### Minor Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index e927cf6eef..93e495b515 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic", - "version": "0.3.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,10 +31,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -42,10 +42,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index ecf570b6b8..f2fdb0a8db 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-org +## 0.3.18 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.17 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index f721675584..14f655d04a 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org", - "version": "0.3.17", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,11 +21,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -35,10 +35,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index a83afa09f3..ae34b483ce 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-pagerduty +## 0.3.9 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.8 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 2a5c086e50..b5dccba914 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-pagerduty", - "version": "0.3.8", + "version": "0.3.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,11 +31,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/react": "^16.9", @@ -47,10 +47,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/register-component/CHANGELOG.md b/plugins/register-component/CHANGELOG.md index 083f45c321..950ca6fa8f 100644 --- a/plugins/register-component/CHANGELOG.md +++ b/plugins/register-component/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-register-component +## 0.2.21 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.2.20 ### Patch Changes diff --git a/plugins/register-component/package.json b/plugins/register-component/package.json index c9a4ca161b..ba97f8111b 100644 --- a/plugins/register-component/package.json +++ b/plugins/register-component/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-register-component", - "version": "0.2.20", + "version": "0.2.21", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,11 +31,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -46,10 +46,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 5d04f96d6e..d2d1696d8d 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-rollbar +## 0.3.10 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.9 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index f95bba8076..26d4194795 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-rollbar", - "version": "0.3.9", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,11 +32,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "lodash": "^4.17.15", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.3.0", diff --git a/plugins/scaffolder-backend/config.d.ts b/plugins/scaffolder-backend/config.d.ts index 795fe5b112..126c55e166 100644 --- a/plugins/scaffolder-backend/config.d.ts +++ b/plugins/scaffolder-backend/config.d.ts @@ -24,6 +24,10 @@ export interface Config { name?: string; email?: string; }; + /** + * The commit message used when new components are created. + */ + defaultCommitMessage?: string; github?: { [key: string]: string; /** diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts index e2459a8ca7..7a10046fd0 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts @@ -62,6 +62,7 @@ export async function initRepoAndPush({ auth, logger, defaultBranch = 'master', + commitMessage = 'Initial commit', gitAuthorInfo, }: { dir: string; @@ -69,6 +70,7 @@ export async function initRepoAndPush({ auth: { username: string; password: string }; logger: Logger; defaultBranch?: string; + commitMessage?: string; gitAuthorInfo?: { name?: string; email?: string }; }): Promise { const git = Git.fromAuth({ @@ -100,7 +102,7 @@ export async function initRepoAndPush({ await git.commit({ dir, - message: 'Initial commit', + message: commitMessage, author: authorInfo, committer: authorInfo, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts index 30995dee38..a242863ac7 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts @@ -233,6 +233,44 @@ describe('publish:azure', () => { }); }); + it('should call initRepoAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + azure: [ + { host: 'dev.azure.com', token: 'tokenlols' }, + { host: 'myazurehostnotoken.com' }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = ScmIntegrations.fromConfig( + customAuthorConfig, + ); + const customAuthorAction = createPublishAzureAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGitClient.createRepository.mockImplementation(() => ({ + remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', + })); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', + auth: { username: 'notempty', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'Test commit message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + it('should call output with the remoteUrl and the repoContentsUrl', async () => { mockGitClient.createRepository.mockImplementation(() => ({ remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts index c58dd69424..f5c7879fa9 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts @@ -139,6 +139,9 @@ export function createPublishAzureAction(options: { password: integrationConfig.config.token, }, logger: ctx.logger, + commitMessage: config.getOptionalString( + 'scaffolder.defaultCommitMessage', + ), gitAuthorInfo, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.test.ts index 9fe245935b..ebdd28260c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.test.ts @@ -407,6 +407,74 @@ describe('publish:bitbucket', () => { }); }); + it('should call initAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + bitbucket: [ + { + host: 'bitbucket.org', + token: 'tokenlols', + }, + { + host: 'hosted.bitbucket.com', + token: 'thing', + apiBaseUrl: 'https://hosted.bitbucket.com/rest/api/1.0', + }, + { + host: 'notoken.bitbucket.com', + }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = ScmIntegrations.fromConfig( + customAuthorConfig, + ); + const customAuthorAction = createPublishBitbucketAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/owner/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/owner/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/owner/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/owner/cloneurl', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'Test commit message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + it('should call outputs with the correct urls', async () => { server.use( rest.post( diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.ts index ffd2e4d6a7..41d71c9ab5 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.ts @@ -304,6 +304,9 @@ export function createPublishBitbucketAction(options: { }, defaultBranch, logger: ctx.logger, + commitMessage: config.getOptionalString( + 'scaffolder.defaultCommitMessage', + ), gitAuthorInfo, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts index f0725d6e8e..173e44848b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts @@ -260,6 +260,51 @@ describe('publish:github', () => { }); }); + it('should call initRepoAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + github: [ + { host: 'github.com', token: 'tokenlols' }, + { host: 'ghe.github.com' }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = ScmIntegrations.fromConfig( + customAuthorConfig, + ); + const customAuthorAction = createPublishGithubAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGithubClient.users.getByUsername.mockResolvedValue({ + data: { type: 'User' }, + }); + + mockGithubClient.repos.createForAuthenticatedUser.mockResolvedValue({ + data: { + clone_url: 'https://github.com/clone/url.git', + html_url: 'https://github.com/html/url', + }, + }); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://github.com/clone/url.git', + defaultBranch: 'master', + auth: { username: 'x-access-token', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'Test commit message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + it('should add access for the team when it starts with the owner', async () => { mockGithubClient.users.getByUsername.mockResolvedValue({ data: { type: 'User' }, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts index 05301bda85..640ae5dfe5 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts @@ -264,6 +264,9 @@ export function createPublishGithubAction(options: { password: token, }, logger: ctx.logger, + commitMessage: config.getOptionalString( + 'scaffolder.defaultCommitMessage', + ), gitAuthorInfo, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts index 5150205a08..d76f838797 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts @@ -219,6 +219,52 @@ describe('publish:gitlab', () => { }); }); + it('should call initRepoAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = ScmIntegrations.fromConfig( + customAuthorConfig, + ); + const customAuthorAction = createPublishGitlabAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'Test commit message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + it('should call output with the remoteUrl and repoContentsUrl', async () => { mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index b99d40b1f7..fbd2dcaaae 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -137,6 +137,9 @@ export function createPublishGitlabAction(options: { password: integrationConfig.config.token, }, logger: ctx.logger, + commitMessage: config.getOptionalString( + 'scaffolder.defaultCommitMessage', + ), gitAuthorInfo, }); diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 3e80dc993e..a5a3d4a75c 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-scaffolder +## 0.10.2 + +### Patch Changes + +- 0d5d0e2e6: chore: set the lifecycle as beta logo +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/integration-react@0.1.5 + - @backstage/theme@0.2.9 + - @backstage/catalog-client@0.3.18 + ## 0.10.1 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index edb2f44d94..f31be76803 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder", - "version": "0.10.1", + "version": "0.10.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,17 +30,17 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-client": "^0.3.16", + "@backstage/catalog-client": "^0.3.18", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", "@backstage/integration": "^0.5.8", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/integration-react": "^0.1.5", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@rjsf/core": "^3.0.0", @@ -63,10 +63,10 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.3.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 0e19f854bd..2cdb82209f 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search +## 0.4.5 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.4.4 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index a6ca45497a..564e62a6ba 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search", - "version": "0.4.4", + "version": "0.4.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,13 +31,13 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/plugin-catalog-react": "^0.3.1", + "@backstage/plugin-catalog-react": "^0.4.0", "@backstage/search-common": "^0.1.2", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/react": "^16.9", @@ -49,10 +49,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.4.2", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index d341c1803e..47d483fbf1 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-sentry +## 0.3.16 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.15 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 989a18a6d9..648f930fb5 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sentry", - "version": "0.3.15", + "version": "0.3.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,11 +32,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "luxon": "^1.27.0", @@ -47,10 +47,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index 77748cd722..8a75c784a5 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-shortcuts +## 0.1.5 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.4 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 293d71eeb9..bb0fe74778 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-shortcuts", - "version": "0.1.4", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,10 +20,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/zen-observable": "^0.8.2", @@ -36,10 +36,10 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 0da72704da..4976ef10e0 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-sonarqube +## 0.1.23 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.22 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index a132da5702..2be9537d6c 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube", - "version": "0.1.22", + "version": "0.1.23", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@material-ui/styles": "^4.10.0", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 083d5b5749..ae7696a301 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-splunk-on-call +## 0.3.6 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.5 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index d779df3f97..93e05b532d 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-splunk-on-call", - "version": "0.3.5", + "version": "0.3.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,11 +31,11 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "classnames": "^2.2.6", @@ -46,10 +46,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 20602282c6..120684eb53 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-radar +## 0.4.3 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.4.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 305061087b..611c475e64 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-radar", - "version": "0.4.2", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,10 +30,10 @@ "start": "backstage-cli plugin:serve" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "color": "^3.1.2", @@ -44,10 +44,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 89c0ee04fd..132526ce66 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-techdocs +## 0.10.2 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- 11c370af2: Optimize load times by only fetching entities with the `backstage.io/techdocs-ref` annotation +- 2b1ac002d: TechDocs now uses a "safe by default" sanitization library, rather than relying on its own, hard-coded list of allowable tags and attributes. +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/integration-react@0.1.5 + - @backstage/theme@0.2.9 + ## 0.10.1 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 2621be9cee..be6cd4c344 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs", - "version": "0.10.1", + "version": "0.10.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,14 +33,14 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", "@backstage/integration": "^0.5.8", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.1", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/integration-react": "^0.1.5", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@material-ui/styles": "^4.10.0", @@ -55,10 +55,10 @@ "react-text-truncate": "^0.16.0" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.4.2", diff --git a/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx b/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx index c5d05f1474..649d69ed8a 100644 --- a/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx +++ b/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx @@ -19,6 +19,7 @@ import { useAsync } from 'react-use'; import { makeStyles } from '@material-ui/core'; import { CSSProperties } from '@material-ui/styles'; import { + CATALOG_FILTER_EXISTS, catalogApiRef, CatalogApi, isOwnerOf, @@ -125,6 +126,9 @@ export const TechDocsCustomHome = ({ const { value: entities, loading, error } = useAsync(async () => { const response = await catalogApi.getEntities({ + filter: { + 'metadata.annotations.backstage.io/techdocs-ref': CATALOG_FILTER_EXISTS, + }, fields: [ 'apiVersion', 'kind', diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index ef5ad352f4..3e2284fd57 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-todo +## 0.1.6 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/plugin-catalog-react@0.4.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.1.5 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index ece2509882..90c61c1b6c 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-todo", - "version": "0.1.5", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -27,12 +27,12 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/plugin-catalog-react": "^0.4.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -40,10 +40,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 94324eed10..38ecbe227b 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-user-settings +## 0.3.2 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.1 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 7a450a188e..52a4698993 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-user-settings", - "version": "0.3.1", + "version": "0.3.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,10 +30,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -42,11 +42,11 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/welcome/CHANGELOG.md b/plugins/welcome/CHANGELOG.md index 25420009d9..600a5b1141 100644 --- a/plugins/welcome/CHANGELOG.md +++ b/plugins/welcome/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-welcome +## 0.3.1 + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 + ## 0.3.0 ### Minor Changes diff --git a/plugins/welcome/package.json b/plugins/welcome/package.json index 68cb992e40..40bd774459 100644 --- a/plugins/welcome/package.json +++ b/plugins/welcome/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-welcome", - "version": "0.3.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -30,10 +30,10 @@ "start": "backstage-cli plugin:serve" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "react": "^16.13.1", @@ -42,10 +42,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md new file mode 100644 index 0000000000..e3fc7ae3d1 --- /dev/null +++ b/plugins/xcmetrics/CHANGELOG.md @@ -0,0 +1,20 @@ +# @backstage/plugin-xcmetrics + +## 0.2.0 + +### Minor Changes + +- 616e10e94: New data in form of trend lines, status timeline and other is added to the dashboard of XCMetrics to give a better understanding of how the build system is behaving. + +### Patch Changes + +- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. + - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` + - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. + - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` + - `onChangePage` has been renamed to `onPageChange` + - Migration guide is here: https://material-table-core.com/docs/breaking-changes +- Updated dependencies + - @backstage/core-components@0.2.0 + - @backstage/core-plugin-api@0.1.4 + - @backstage/theme@0.2.9 diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index b939c3e5bf..ed74b0dfa6 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-xcmetrics", - "version": "0.1.1", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,11 +20,11 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", + "@backstage/core-components": "^0.2.0", + "@backstage/core-plugin-api": "^0.1.4", "@backstage/errors": "^0.1.1", - "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@backstage/theme": "^0.2.9", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "luxon": "^1.27.0", @@ -33,10 +33,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.5", - "@backstage/core-app-api": "^0.1.5", - "@backstage/dev-utils": "^0.2.3", - "@backstage/test-utils": "^0.1.15", + "@backstage/cli": "^0.7.6", + "@backstage/core-app-api": "^0.1.6", + "@backstage/dev-utils": "^0.2.4", + "@backstage/test-utils": "^0.1.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/yarn.lock b/yarn.lock index c2bdb8af99..1be3dedc16 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1414,6 +1414,51 @@ react-use "^17.2.4" zen-observable "^0.8.15" +"@backstage/core-components@^0.1.3", "@backstage/core-components@^0.1.6": + version "0.1.6" + resolved "https://registry.npmjs.org/@backstage/core-components/-/core-components-0.1.6.tgz#a66d9af3be61e76ed60d1026dec376b2d97e0a8e" + integrity sha512-SdBORocyrMa38B2Y3F4Ju45UUm42hLSums+CV4LlHVHKuINGbZg7JZ/WI7tDGks27MXgtU7mLlMlV7tJMeJgKA== + dependencies: + "@backstage/config" "^0.1.5" + "@backstage/core-plugin-api" "^0.1.2" + "@backstage/errors" "^0.1.1" + "@backstage/theme" "^0.2.8" + "@material-ui/core" "^4.11.0" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.45" + "@testing-library/react-hooks" "^3.4.2" + "@types/dagre" "^0.7.44" + "@types/prop-types" "^15.7.3" + "@types/react" "^16.9" + "@types/react-sparklines" "^1.7.0" + "@types/react-text-truncate" "^0.14.0" + classnames "^2.2.6" + clsx "^1.1.0" + d3-selection "^2.0.0" + d3-shape "^2.0.0" + d3-zoom "^2.0.0" + dagre "^0.8.5" + immer "^9.0.1" + lodash "^4.17.15" + material-table "^1.69.1" + pluralize "^8.0.0" + prop-types "^15.7.2" + qs "^6.9.4" + rc-progress "^3.0.0" + react "^16.12.0" + react-dom "^16.12.0" + react-helmet "6.1.0" + react-hook-form "^6.15.4" + react-markdown "^5.0.2" + react-router "6.0.0-beta.0" + react-router-dom "6.0.0-beta.0" + react-sparklines "^1.7.0" + react-syntax-highlighter "^15.4.3" + react-text-truncate "^0.16.0" + react-use "^17.2.4" + remark-gfm "^1.0.0" + zen-observable "^0.8.15" + "@backstage/core@*": version "0.7.14" resolved "https://registry.npmjs.org/@backstage/core/-/core-0.7.14.tgz#863844fe40bb6a29bcc2d297e42055633b0e886f" @@ -1460,6 +1505,28 @@ remark-gfm "^1.0.0" zen-observable "^0.8.15" +"@backstage/plugin-catalog-react@^0.3.0": + version "0.3.1" + resolved "https://registry.npmjs.org/@backstage/plugin-catalog-react/-/plugin-catalog-react-0.3.1.tgz#d30a063a4ceb4d446310a687d19c987f55824fdb" + integrity sha512-vKNTW3K6cp/G6f/pjcUe8895s3Z13MnXX6aCkOBcxfLnTJ8eNAJj092rbpkCn33YlCARsHrXUqgVJSqB4AnwtA== + dependencies: + "@backstage/catalog-client" "^0.3.17" + "@backstage/catalog-model" "^0.9.0" + "@backstage/core-app-api" "^0.1.5" + "@backstage/core-components" "^0.1.6" + "@backstage/core-plugin-api" "^0.1.3" + "@backstage/integration" "^0.5.8" + "@material-ui/core" "^4.11.0" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.45" + "@types/react" "^16.9" + lodash "^4.17.15" + qs "^6.9.4" + react "^16.13.1" + react-router "6.0.0-beta.0" + react-router-dom "6.0.0-beta.0" + react-use "^17.2.4" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1730,7 +1797,7 @@ resolved "https://registry.npmjs.org/@date-io/core/-/core-2.10.11.tgz#b1a3d57730f3eaaab54d5658be4a71727297e357" integrity sha512-keXQnwH0LM8wyvu+j5Z2KGK56D+eItjy7DnwuWl/oV+DM2UEYl0z5WhdPMpfswSyt/kjuPOzcVF/7u/skMLaoA== -"@date-io/date-fns@^1.1.0": +"@date-io/date-fns@^1.1.0", "@date-io/date-fns@^1.3.13": version "1.3.13" resolved "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-1.3.13.tgz#7798844041640ab393f7e21a7769a65d672f4735" integrity sha512-yXxGzcRUPcogiMj58wVgFjc9qUYrCnnU9eLcyNbsQCmae4jPuZCDoIBR21j8ZURsM7GRtU62VOw5yNd4dDHunA== @@ -1926,10 +1993,10 @@ retry-request "^4.0.0" teeny-request "^3.11.3" -"@google-cloud/common@^3.6.0": - version "3.6.0" - resolved "https://registry.npmjs.org/@google-cloud/common/-/common-3.6.0.tgz#c2f6da5f79279a4a9ac7c71fc02d582beab98e8b" - integrity sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q== +"@google-cloud/common@^3.7.0": + version "3.7.0" + resolved "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.0.tgz#ee3fba75aeaa614978aebf8740380670026592aa" + integrity sha512-oFgpKLjH9JTOAyQd3kB36iSuH8wNSpDKb1TywlB6zcsG0xmJFxLutmfPhz03KUxRMNQOZ1K1Gc9BYvJifVnGVA== dependencies: "@google-cloud/projectify" "^2.0.0" "@google-cloud/promisify" "^2.0.0" @@ -1938,7 +2005,7 @@ ent "^2.2.0" extend "^3.0.2" google-auth-library "^7.0.2" - retry-request "^4.1.1" + retry-request "^4.2.2" teeny-request "^7.0.0" "@google-cloud/container@^2.2.0": @@ -2014,11 +2081,11 @@ xdg-basedir "^3.0.0" "@google-cloud/storage@^5.6.0", "@google-cloud/storage@^5.8.0": - version "5.8.5" - resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.8.5.tgz#2cf1e2e0ef8ca552abc4450301fef3fea4900ef6" - integrity sha512-i0gB9CRwQeOBYP7xuvn14M40LhHCwMjceBjxE4CTvsqL519sVY5yVKxLiAedHWGwUZHJNRa7Q2CmNfkdRwVNPg== + version "5.11.0" + resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.11.0.tgz#f2414358f093034410bb03410176a5dcabc7bdf8" + integrity sha512-UgdAwBelXpQhubYOHw0U/hDxCXIXFT2TqDc0JWUxtg+BeePZC0ohoFM/b/tJffE28AZW0urTQax5xbRNoDA1Sw== dependencies: - "@google-cloud/common" "^3.6.0" + "@google-cloud/common" "^3.7.0" "@google-cloud/paginator" "^3.0.0" "@google-cloud/promisify" "^2.0.0" arrify "^2.0.0" @@ -2027,8 +2094,7 @@ date-and-time "^1.0.0" duplexify "^4.0.0" extend "^3.0.2" - gaxios "^4.0.0" - gcs-resumable-upload "^3.1.4" + gcs-resumable-upload "^3.3.0" get-stream "^6.0.0" hash-stream-validation "^0.2.2" mime "^2.2.0" @@ -3445,14 +3511,31 @@ resolved "https://registry.npmjs.org/@material-icons/font/-/font-1.0.3.tgz#f722e5a69a03f20ef47d015cb69420bebeeaabe5" integrity sha512-aIRd0Z9b/HJ/O24KOaP7dNsXypMnXhpWrpLVYvQB/JesVqXYSbioYND200sR+C14a0LSCp+qWnWCnSXmN1hWGw== -"@material-ui/core@^4.11.0", "@material-ui/core@^4.11.3": - version "4.11.4" - resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.11.4.tgz#4fb9fe5dec5dcf780b687e3a40cff78b2b9640a4" - integrity sha512-oqb+lJ2Dl9HXI9orc6/aN8ZIAMkeThufA5iZELf2LQeBn2NtjVilF5D2w7e9RpntAzDb4jK5DsVhkfOvFY/8fg== +"@material-table/core@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@material-table/core/-/core-3.1.0.tgz#4fc3bd1553359e628413437a4102d8469852c253" + integrity sha512-46vpm1q9v2B5t/VgaEq2JmnftTBYle1yNAX3cfdQsTRZ1iWkpG34qBkNHx/hbOauQPsm5hmeUo1KJJZdwtGL1g== + dependencies: + "@babel/runtime" "^7.12.5" + "@date-io/date-fns" "^1.3.13" + "@material-ui/pickers" "^3.2.10" + "@material-ui/styles" "^4.11.4" + classnames "^2.2.6" + date-fns "^2.16.1" + debounce "^1.2.0" + fast-deep-equal "^3.1.3" + prop-types "^15.7.2" + react-beautiful-dnd "^13.0.0" + react-double-scrollbar "0.0.15" + +"@material-ui/core@^4.11.0", "@material-ui/core@^4.11.3", "@material-ui/core@^4.12.2": + version "4.12.2" + resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.12.2.tgz#59a8b19f16b8c218d912f37f5ae70473c3c82c73" + integrity sha512-Q1npB8V73IC+eV2X6as+g71MpEGQwqKHUI2iujY62npk35V8nMx/bUXAHjv5kKG1BZ8s8XUWoG6s/VkjYPjjQA== dependencies: "@babel/runtime" "^7.4.4" "@material-ui/styles" "^4.11.4" - "@material-ui/system" "^4.11.3" + "@material-ui/system" "^4.12.1" "@material-ui/types" "5.1.0" "@material-ui/utils" "^4.11.2" "@types/react-transition-group" "^4.2.0" @@ -3492,7 +3575,7 @@ prop-types "^15.7.2" react-is "^16.8.0 || ^17.0.0" -"@material-ui/pickers@^3.2.2", "@material-ui/pickers@^3.3.10": +"@material-ui/pickers@^3.2.10", "@material-ui/pickers@^3.2.2", "@material-ui/pickers@^3.3.10": version "3.3.10" resolved "https://registry.npmjs.org/@material-ui/pickers/-/pickers-3.3.10.tgz#f1b0f963348cc191645ef0bdeff7a67c6aa25485" integrity sha512-hS4pxwn1ZGXVkmgD4tpFpaumUaAg2ZzbTrxltfC5yPw4BJV+mGkfnQOB4VpWEYZw2jv65Z0wLwDE/piQiPPZ3w== @@ -3526,10 +3609,10 @@ jss-plugin-vendor-prefixer "^10.5.1" prop-types "^15.7.2" -"@material-ui/system@^4.11.3": - version "4.11.3" - resolved "https://registry.npmjs.org/@material-ui/system/-/system-4.11.3.tgz#466bc14c9986798fd325665927c963eb47cc4143" - integrity sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw== +"@material-ui/system@^4.12.1": + version "4.12.1" + resolved "https://registry.npmjs.org/@material-ui/system/-/system-4.12.1.tgz#2dd96c243f8c0a331b2bb6d46efd7771a399707c" + integrity sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw== dependencies: "@babel/runtime" "^7.4.4" "@material-ui/utils" "^4.11.2" @@ -8066,13 +8149,6 @@ axe-core@^4.2.0: resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.3.1.tgz#0c6a076e4a1c3e0544ba6a9479158f9be7a7928e" integrity sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g== -axios@^0.20.0: - version "0.20.0" - resolved "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd" - integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA== - dependencies: - follow-redirects "^1.10.0" - axios@^0.21.1: version "0.21.1" resolved "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" @@ -9484,11 +9560,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: safe-buffer "^5.0.1" circleci-api@^4.0.0: - version "4.1.3" - resolved "https://registry.npmjs.org/circleci-api/-/circleci-api-4.1.3.tgz#cafd80bc1905c6064724636741b4b5b231ed34d0" - integrity sha512-Km6H8LB3nNbFUjErhI+sNQrcHcU7dCBnQEi4ckBtQMkCXh+2gDvaYchfkeuIaA1hkakQT5sLmdPbYzhKbvsOMg== + version "4.1.4" + resolved "https://registry.npmjs.org/circleci-api/-/circleci-api-4.1.4.tgz#6880a28eb021879d81789b50996640dc6373c5ad" + integrity sha512-49F0P2mhmfqYzJR/V4+oM+1SfI/VjKPcurvkzuuawNqgW5Eo00ZufgpHgdT+qRrvRymk6yt45bWOIP/f0FKhJA== dependencies: - axios "^0.20.0" + axios "^0.21.1" cjs-module-lexer@^0.6.0: version "0.6.0" @@ -13593,10 +13669,10 @@ gcs-resumable-upload@^1.0.0: pumpify "^1.5.1" stream-events "^1.0.4" -gcs-resumable-upload@^3.1.4: - version "3.1.4" - resolved "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.1.4.tgz#2e591889efb02247af26868de300b398346b17b5" - integrity sha512-5dyDfHrrVcIskiw/cPssVD4HRiwoHjhk1Nd6h5W3pQ/qffDvhfy4oNCr1f3ZXFPwTnxkCbibsB+73oOM+NvmJQ== +gcs-resumable-upload@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.3.0.tgz#d1a866173f9b47e045d4406cafaa658dbb01e624" + integrity sha512-MQKWi+9hOSTyg5/SI1NBW4gAjL1wlkoevHefvr1PCBBXH4uKYLsug5qRrcotWKolDPLfWS51cWaHRN0CTtQNZw== dependencies: abort-controller "^3.0.0" configstore "^5.0.0" @@ -22819,13 +22895,21 @@ ret@~0.1.10: resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry-request@^4.0.0, retry-request@^4.1.1: +retry-request@^4.0.0: version "4.1.3" resolved "https://registry.npmjs.org/retry-request/-/retry-request-4.1.3.tgz#d5f74daf261372cff58d08b0a1979b4d7cab0fde" integrity sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ== dependencies: debug "^4.1.1" +retry-request@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz#b7d82210b6d2651ed249ba3497f07ea602f1a903" + integrity sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg== + dependencies: + debug "^4.1.1" + extend "^3.0.2" + retry@0.12.0, retry@^0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -26549,15 +26633,15 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -ws@7.4.5: - version "7.4.5" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== +ws@7.4.5, ws@^7.4.6: + version "7.5.3" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== ws@^5.2.0: - version "5.2.2" - resolved "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + version "5.2.3" + resolved "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== dependencies: async-limiter "~1.0.0" @@ -26567,9 +26651,9 @@ ws@^5.2.0: integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw== ws@^6.1.2, ws@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + version "6.2.2" + resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0"