From ea6871d2d907dfa8cb6fca3973d233044449ba58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 20 Jul 2021 20:12:31 +0200 Subject: [PATCH 01/56] simplify isOwnerOf using stringifyEntityRef MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/catalog-react/src/utils/isOwnerOf.ts | 25 +++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) 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; } } From 5b98e2ba312574c92ed51681f74c4bc6cdb125b8 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Thu, 22 Jul 2021 18:57:54 +0200 Subject: [PATCH 02/56] Shows entity processing errors Signed-off-by: Nicolas Torres --- .../app/src/components/catalog/EntityPage.tsx | 9 ++ .../EntityProcessErrors.test.tsx | 91 +++++++++++++++++++ .../EntityProcessErrors.tsx | 43 +++++++++ .../components/EntityProcessErrors/index.ts | 17 ++++ plugins/catalog/src/index.ts | 1 + 5 files changed, 161 insertions(+) create mode 100644 plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.test.tsx create mode 100644 plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.tsx create mode 100644 plugins/catalog/src/components/EntityProcessErrors/index.ts diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 16107a6cc0..549c4569cf 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, + EntityProcessErrors, + hasErrors, isOrphan, } from '@backstage/plugin-catalog'; import { @@ -223,6 +225,13 @@ const overviewContent = ( + + + + + + + diff --git a/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.test.tsx b/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.test.tsx new file mode 100644 index 0000000000..28f4f92a27 --- /dev/null +++ b/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.test.tsx @@ -0,0 +1,91 @@ +/* + * 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 { EntityProcessErrors } from './EntityProcessErrors'; +import { Entity } from '@backstage/catalog-model'; +import { waitFor } from '@testing-library/react'; + +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: '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 } = await renderInTestApp( + + + , + ); + + await waitFor(() => { + expect( + getByText( + 'Error: Policy check failed; caused by Error: Malformed envelope, /metadata/labels should be object', + ), + ).toBeInTheDocument(); + expect(getByText('Error: Foo')).toBeInTheDocument(); + }); + }); +}); diff --git a/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.tsx b/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.tsx new file mode 100644 index 0000000000..3d1210290a --- /dev/null +++ b/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.tsx @@ -0,0 +1,43 @@ +/* + * 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 } 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'; + +export const hasErrors = (entity: Entity) => entity?.status?.items?.length! > 0; + +/** + * Displays a list of errors if the entity is invalid. + */ +export const EntityProcessErrors = () => { + const { entity } = useEntity(); + + return ( + <> + {entity?.status?.items?.map( + ({ error }, index) => + error && ( + + + + ), + )} + + ); +}; diff --git a/plugins/catalog/src/components/EntityProcessErrors/index.ts b/plugins/catalog/src/components/EntityProcessErrors/index.ts new file mode 100644 index 0000000000..10d6d04ed2 --- /dev/null +++ b/plugins/catalog/src/components/EntityProcessErrors/index.ts @@ -0,0 +1,17 @@ +/* + * 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 { EntityProcessErrors, hasErrors } from './EntityProcessErrors'; diff --git a/plugins/catalog/src/index.ts b/plugins/catalog/src/index.ts index 4bef0950a2..d3f5d8e36b 100644 --- a/plugins/catalog/src/index.ts +++ b/plugins/catalog/src/index.ts @@ -23,6 +23,7 @@ export type { EntityRow as CatalogTableRow } from './components/CatalogTable'; export { CreateComponentButton } from './components/CreateComponentButton'; export { EntityLayout } from './components/EntityLayout'; export * from './components/EntityOrphanWarning'; +export * from './components/EntityProcessErrors'; export { EntityPageLayout } from './components/EntityPageLayout'; export * from './components/EntitySwitch'; export { Router } from './components/Router'; From 32dee9bbd0eb95f4a851ac15cfb1bcb6222307a3 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Thu, 22 Jul 2021 19:01:09 +0200 Subject: [PATCH 03/56] Error panel should have severity "error" Signed-off-by: Nicolas Torres --- .../core-components/src/components/ErrorPanel/ErrorPanel.tsx | 1 + 1 file changed, 1 insertion(+) 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 ( From 80aa32e162d7bb35f00dd1626ed5ad5038b98742 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Thu, 22 Jul 2021 19:02:02 +0200 Subject: [PATCH 04/56] Changes warning panel appearance according to severity Signed-off-by: Nicolas Torres --- .../components/WarningPanel/WarningPanel.tsx | 68 ++++++++++++++----- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx index 37ae5b2c62..23bd825787 100644 --- a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx +++ b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx @@ -27,25 +27,55 @@ import ErrorOutline from '@material-ui/icons/ErrorOutline'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import React from 'react'; +const getWarningTextColor = ( + severity: Props['severity'], + theme: BackstageTheme, +) => { + switch (severity) { + case 'error': + return theme.palette.errorText; + case 'info': + return theme.palette.infoText; + default: + return theme.palette.warningText; + } +}; + +const getWarningBackgroundColor = ( + severity: Props['severity'], + theme: BackstageTheme, +) => { + switch (severity) { + case 'error': + return theme.palette.errorBackground; + case 'info': + return theme.palette.infoBackground; + default: + return theme.palette.warningBackground; + } +}; + const useErrorOutlineStyles = makeStyles(theme => ({ root: { marginRight: theme.spacing(1), - fill: theme.palette.warningText, + fill: ({ severity }: Props) => getWarningTextColor(severity, 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 }: Props) => + getWarningBackgroundColor(severity, theme), + color: ({ severity }: Props) => getWarningTextColor(severity, theme), verticalAlign: 'middle', }, summary: { @@ -53,14 +83,15 @@ const useStyles = makeStyles(theme => ({ flexDirection: 'row', }, summaryText: { - color: theme.palette.warningText, + color: ({ severity }: Props) => getWarningTextColor(severity, theme), fontWeight: 'bold', }, message: { width: '100%', display: 'block', - color: theme.palette.warningText, - backgroundColor: theme.palette.warningBackground, + color: ({ severity }: Props) => getWarningTextColor(severity, theme), + backgroundColor: ({ severity }: Props) => + getWarningBackgroundColor(severity, theme), }, details: { width: '100%', @@ -89,7 +120,7 @@ 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. @@ -97,11 +128,16 @@ const capitalize = (s: string) => { */ export const WarningPanel = (props: Props) => { const classes = useStyles(props); - const { severity, title, message, children, defaultExpanded } = props; + const { + severity = 'warning', + title, + message, + children, + defaultExpanded, + } = props; // 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} From 224e54484beb3f8c86a50e682f0573874026d55c Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Thu, 22 Jul 2021 19:09:00 +0200 Subject: [PATCH 05/56] Adds changelog Signed-off-by: Nicolas Torres --- .changeset/tricky-trains-change.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/tricky-trains-change.md diff --git a/.changeset/tricky-trains-change.md b/.changeset/tricky-trains-change.md new file mode 100644 index 0000000000..95fa8e3398 --- /dev/null +++ b/.changeset/tricky-trains-change.md @@ -0,0 +1,8 @@ +--- +'example-app': minor +'@backstage/core-components': minor +'@backstage/plugin-catalog': minor +--- + +Displays errors in the entity page if the entity yaml is malformed +WarningPanel changes color depending on the severity From 128e57e077ace1746b26552432fd212adb1f5689 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Thu, 22 Jul 2021 19:21:17 +0200 Subject: [PATCH 06/56] Merge remote-tracking branch 'upstream/master' into feature/show-catalog-errors Signed-off-by: Nicolas Torres --- .changeset/clever-pigs-drum.md | 5 - .changeset/forty-singers-look.md | 5 - .changeset/honest-ghosts-listen.md | 5 - .changeset/nasty-worms-approve.md | 5 - .changeset/spotty-pandas-deny.md | 5 - .changeset/techdocs-young-gorillas-share.md | 5 - .changeset/wicked-emus-deny.md | 8 - .github/styles/vocab.txt | 1 + ADOPTERS.md | 1 + .../software-catalog/catalog-customization.md | 52 ++- .../software-templates/configuration.md | 9 +- docs/getting-started/index.md | 8 +- docs/overview/roadmap.md | 233 ++++++++----- docs/plugins/structure-of-a-plugin.md | 7 +- microsite/package.json | 2 +- microsite/yarn.lock | 8 +- packages/app/package.json | 2 + .../app/src/components/catalog/EntityPage.tsx | 31 +- .../app/src/components/search/SearchPage.tsx | 91 +++-- packages/backend-common/CHANGELOG.md | 17 + packages/backend-common/api-report.md | 11 + packages/backend-common/package.json | 6 +- .../src/reading/FetchUrlReader.test.ts | 88 +++++ .../src/reading/FetchUrlReader.ts | 34 +- packages/backend-common/src/service/index.ts | 2 +- .../src/service/lib/ServiceBuilderImpl.ts | 16 +- packages/backend-common/src/service/types.ts | 13 + packages/backend/CHANGELOG.md | 13 + packages/backend/package.json | 18 +- packages/backend/src/plugins/search.ts | 6 + packages/catalog-client/CHANGELOG.md | 6 + packages/catalog-client/package.json | 4 +- packages/cli/CHANGELOG.md | 6 + packages/cli/package.json | 12 +- packages/codemods/CHANGELOG.md | 8 + packages/codemods/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 8 + packages/core-app-api/package.json | 8 +- packages/core-components/CHANGELOG.md | 15 + packages/core-components/api-report.md | 10 + packages/core-components/package.json | 8 +- .../src/components/EmptyState/EmptyState.tsx | 20 +- .../components/EmptyState/EmptyStateImage.tsx | 2 +- .../SupportButton/SupportButton.tsx | 26 +- .../layout/ContentHeader/ContentHeader.tsx | 18 +- .../src/layout/Header/Header.tsx | 28 +- .../src/layout/HeaderLabel/HeaderLabel.tsx | 28 +- .../src/layout/Page/PageWithHeader.tsx | 37 +- .../core-components/src/layout/Page/index.ts | 1 + .../src/layout/Sidebar/Items.tsx | 7 +- packages/create-app/CHANGELOG.md | 17 + packages/create-app/package.json | 2 +- .../app/src/components/catalog/EntityPage.tsx | 7 + packages/dev-utils/CHANGELOG.md | 11 + packages/dev-utils/api-report.md | 1 + packages/dev-utils/package.json | 12 +- packages/dev-utils/src/devApp/render.tsx | 11 + packages/techdocs-common/CHANGELOG.md | 95 +++++ packages/techdocs-common/api-report.md | 28 +- packages/techdocs-common/package.json | 10 +- packages/techdocs-common/src/helpers.test.ts | 166 ++++++++- packages/techdocs-common/src/helpers.ts | 84 ++++- .../__fixtures__/mkdocs_valid_doc_dir.yml | 3 + .../src/stages/generate/helpers.test.ts | 10 + .../src/stages/generate/helpers.ts | 6 +- .../src/stages/generate/techdocs.test.ts | 3 +- .../src/stages/generate/techdocs.ts | 3 +- .../src/stages/prepare/dir.test.ts | 18 +- .../techdocs-common/src/stages/prepare/dir.ts | 96 ++---- packages/test-utils/CHANGELOG.md | 8 + packages/test-utils/api-report.md | 15 +- packages/test-utils/package.json | 6 +- .../src/testUtils/mockBreakpoint.ts | 102 ++---- plugins/api-docs/CHANGELOG.md | 10 + plugins/api-docs/README.md | 16 +- plugins/api-docs/api-report.md | 6 +- plugins/api-docs/package.json | 16 +- .../ApiExplorerPage/ApiExplorerPage.tsx | 68 ++-- plugins/auth-backend/CHANGELOG.md | 10 + plugins/auth-backend/api-report.md | 13 +- plugins/auth-backend/package.json | 10 +- plugins/auth-backend/src/index.ts | 1 + plugins/badges/package.json | 10 +- plugins/bitrise/package.json | 10 +- plugins/catalog-import/CHANGELOG.md | 10 + plugins/catalog-import/package.json | 16 +- .../src/components/ImportComponentPage.tsx | 34 +- plugins/catalog-react/CHANGELOG.md | 10 + plugins/catalog-react/api-report.md | 1 + plugins/catalog-react/package.json | 14 +- plugins/catalog-react/src/hooks/useEntity.ts | 12 +- .../catalog-react/src/testUtils/providers.tsx | 4 +- plugins/catalog/CHANGELOG.md | 21 ++ plugins/catalog/api-report.md | 33 +- plugins/catalog/package.json | 16 +- .../components/CatalogPage/CatalogLayout.tsx | 42 --- .../CatalogPage/CatalogPage.test.tsx | 10 + .../components/CatalogPage/CatalogPage.tsx | 85 ++--- .../src/components/CatalogPage/index.ts | 1 - .../CreateComponentButton.tsx | 6 +- .../components/CreateComponentButton/index.ts | 1 + .../components/EntityLayout/EntityLayout.tsx | 39 ++- .../EntityLoaderProvider.tsx | 4 +- .../EntityListContainer.tsx | 24 ++ .../FilteredEntityLayout/FilterContainer.tsx | 71 ++++ .../FilteredEntityLayout.tsx | 24 ++ .../components/FilteredEntityLayout/index.ts | 19 + plugins/catalog/src/index.ts | 16 +- plugins/circleci/package.json | 10 +- plugins/cloudbuild/package.json | 10 +- plugins/code-coverage/package.json | 10 +- plugins/config-schema/package.json | 10 +- plugins/cost-insights/package.json | 10 +- plugins/explore/package.json | 10 +- plugins/fossa/package.json | 10 +- plugins/gcp-projects/package.json | 10 +- plugins/git-release-manager/CHANGELOG.md | 13 + plugins/git-release-manager/api-report.md | 1 + plugins/git-release-manager/dev/index.tsx | 76 +++- plugins/git-release-manager/package.json | 17 +- .../src/GitReleaseManager.tsx | 35 +- .../CreateReleaseCandidate.tsx | 4 +- .../hooks/useCreateReleaseCandidate.ts | 16 +- .../src/features/Features.tsx | 8 + .../src/features/Patch/Patch.tsx | 4 +- .../src/features/Patch/PatchBody.tsx | 4 +- .../src/features/Patch/hooks/usePatch.ts | 28 +- .../src/features/PromoteRc/PromoteRc.tsx | 4 +- .../src/features/PromoteRc/PromoteRcBody.tsx | 4 +- .../features/PromoteRc/hooks/usePromoteRc.ts | 22 +- .../git-release-manager/src/types/types.ts | 26 +- plugins/github-actions/package.json | 10 +- plugins/github-deployments/package.json | 10 +- plugins/gitops-profiles/package.json | 10 +- plugins/graphiql/package.json | 10 +- plugins/ilert/package.json | 10 +- plugins/jenkins-backend/CHANGELOG.md | 10 + plugins/jenkins-backend/package.json | 8 +- plugins/jenkins/package.json | 10 +- plugins/kafka/package.json | 10 +- plugins/kubernetes-backend/CHANGELOG.md | 8 + plugins/kubernetes-backend/api-report.md | 24 +- plugins/kubernetes-backend/package.json | 10 +- .../ConfigClusterLocator.test.ts | 44 +++ .../cluster-locator/ConfigClusterLocator.ts | 23 +- .../src/cluster-locator/GkeClusterLocator.ts | 4 +- .../AwsIamKubernetesAuthTranslator.test.ts | 100 +++++- .../AwsIamKubernetesAuthTranslator.ts | 89 ++++- .../GoogleKubernetesAuthTranslator.ts | 8 +- .../ServiceAccountKubernetesAuthTranslator.ts | 6 +- plugins/kubernetes-backend/src/types/types.ts | 12 +- plugins/kubernetes/package.json | 10 +- plugins/lighthouse/package.json | 10 +- plugins/newrelic/package.json | 10 +- plugins/org/package.json | 10 +- plugins/pagerduty/package.json | 10 +- plugins/register-component/package.json | 10 +- plugins/rollbar/package.json | 10 +- plugins/scaffolder-backend/CHANGELOG.md | 14 + plugins/scaffolder-backend/api-report.md | 7 + plugins/scaffolder-backend/package.json | 10 +- .../__mocks__/@octokit/rest/index.ts | 5 + .../actions/builtin/createBuiltinActions.ts | 4 + .../github/githubActionsDispatch.test.ts | 117 +++++++ .../builtin/github/githubActionsDispatch.ts | 115 ++++++ .../actions/builtin/github/index.ts | 17 + .../src/scaffolder/actions/builtin/index.ts | 1 + plugins/scaffolder/package.json | 10 +- plugins/search/CHANGELOG.md | 9 + plugins/search/api-report.md | 11 + plugins/search/package.json | 14 +- .../components/SearchType/SearchType.test.tsx | 231 +++++++++++++ .../src/components/SearchType/SearchType.tsx | 110 ++++++ .../search/src/components/SearchType/index.ts | 17 + plugins/search/src/components/index.tsx | 1 + plugins/search/src/index.ts | 1 + plugins/sentry/package.json | 10 +- plugins/shortcuts/package.json | 10 +- plugins/sonarqube/package.json | 10 +- plugins/splunk-on-call/package.json | 10 +- plugins/tech-radar/package.json | 10 +- plugins/techdocs-backend/CHANGELOG.md | 96 ++++++ plugins/techdocs-backend/api-report.md | 51 +++ plugins/techdocs-backend/package.json | 15 +- .../src/DocsBuilder/builder.ts | 10 +- plugins/techdocs-backend/src/index.ts | 1 + .../search/DefaultTechDocsCollator.test.ts | 149 ++++++++ .../src/search/DefaultTechDocsCollator.ts | 149 ++++++++ plugins/techdocs-backend/src/search/index.ts | 17 + .../src/service/DocsSynchronizer.test.ts | 2 + .../src/service/DocsSynchronizer.ts | 26 +- .../techdocs-backend/src/service/router.ts | 11 +- plugins/techdocs/CHANGELOG.md | 23 ++ plugins/techdocs/api-report.md | 11 + plugins/techdocs/package.json | 15 +- .../DocsResultListItem.test.tsx | 50 +++ .../DocsResultListItem/DocsResultListItem.tsx | 60 ++++ .../components/DocsResultListItem/index.ts | 17 + plugins/techdocs/src/index.ts | 1 + .../techdocs/src/reader/components/Reader.tsx | 312 ++++++++++------- .../reader/components/useReaderState.test.tsx | 199 +++++++++-- .../src/reader/components/useReaderState.ts | 44 ++- .../reader/transformers/addBaseUrl.test.ts | 35 +- .../src/reader/transformers/addBaseUrl.ts | 30 +- .../transformers/addGitFeedbackLink.test.ts | 20 +- .../transformers/addLinkClickListener.test.ts | 8 +- .../src/reader/transformers/index.test.ts | 4 +- .../src/reader/transformers/injectCss.test.ts | 6 +- .../reader/transformers/onCssReady.test.ts | 21 +- .../src/reader/transformers/onCssReady.ts | 6 +- .../transformers/removeMkdocsHeader.test.ts | 26 +- .../transformers/rewriteDocLinks.test.ts | 12 +- .../transformers/sanitizeDOM/index.test.ts | 55 +-- .../transformers/simplifyMkdocsFooter.test.ts | 26 +- .../src/reader/transformers/transformer.ts | 12 +- plugins/techdocs/src/test-utils/shadowDom.ts | 8 +- plugins/todo/package.json | 10 +- plugins/user-settings/CHANGELOG.md | 8 + plugins/user-settings/package.json | 12 +- .../FeatureFlags/FeatureFlagsItem.tsx | 19 +- plugins/welcome/package.json | 10 +- plugins/xcmetrics/package.json | 10 +- yarn.lock | 326 +++++++++++++----- 223 files changed, 4361 insertions(+), 1492 deletions(-) delete mode 100644 .changeset/clever-pigs-drum.md delete mode 100644 .changeset/forty-singers-look.md delete mode 100644 .changeset/honest-ghosts-listen.md delete mode 100644 .changeset/nasty-worms-approve.md delete mode 100644 .changeset/spotty-pandas-deny.md delete mode 100644 .changeset/techdocs-young-gorillas-share.md delete mode 100644 .changeset/wicked-emus-deny.md rename plugins/api-docs/src/components/ApiExplorerPage/ApiExplorerLayout.tsx => packages/core-components/src/layout/Page/PageWithHeader.tsx (50%) create mode 100644 packages/techdocs-common/src/stages/generate/__fixtures__/mkdocs_valid_doc_dir.yml delete mode 100644 plugins/catalog/src/components/CatalogPage/CatalogLayout.tsx create mode 100644 plugins/catalog/src/components/FilteredEntityLayout/EntityListContainer.tsx create mode 100644 plugins/catalog/src/components/FilteredEntityLayout/FilterContainer.tsx create mode 100644 plugins/catalog/src/components/FilteredEntityLayout/FilteredEntityLayout.tsx create mode 100644 plugins/catalog/src/components/FilteredEntityLayout/index.ts create mode 100644 plugins/jenkins-backend/CHANGELOG.md create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubActionsDispatch.test.ts create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubActionsDispatch.ts create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/index.ts create mode 100644 plugins/search/src/components/SearchType/SearchType.test.tsx create mode 100644 plugins/search/src/components/SearchType/SearchType.tsx create mode 100644 plugins/search/src/components/SearchType/index.ts create mode 100644 plugins/techdocs-backend/src/search/DefaultTechDocsCollator.test.ts create mode 100644 plugins/techdocs-backend/src/search/DefaultTechDocsCollator.ts create mode 100644 plugins/techdocs-backend/src/search/index.ts create mode 100644 plugins/techdocs/src/components/DocsResultListItem/DocsResultListItem.test.tsx create mode 100644 plugins/techdocs/src/components/DocsResultListItem/DocsResultListItem.tsx create mode 100644 plugins/techdocs/src/components/DocsResultListItem/index.ts diff --git a/.changeset/clever-pigs-drum.md b/.changeset/clever-pigs-drum.md deleted file mode 100644 index bbc8ee5f90..0000000000 --- a/.changeset/clever-pigs-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-client': patch ---- - -Export `CatalogRequestOptions` type diff --git a/.changeset/forty-singers-look.md b/.changeset/forty-singers-look.md deleted file mode 100644 index 1b3919e214..0000000000 --- a/.changeset/forty-singers-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Fix a bug in `FlatRoutes` that prevented outlets from working with the root route, as well as matching root routes too broadly. diff --git a/.changeset/honest-ghosts-listen.md b/.changeset/honest-ghosts-listen.md deleted file mode 100644 index 411a7e8908..0000000000 --- a/.changeset/honest-ghosts-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -chore: bump `eslint` to `7.30.0` diff --git a/.changeset/nasty-worms-approve.md b/.changeset/nasty-worms-approve.md deleted file mode 100644 index c3ed7c1b35..0000000000 --- a/.changeset/nasty-worms-approve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Export `CatalogClientWrapper` class diff --git a/.changeset/spotty-pandas-deny.md b/.changeset/spotty-pandas-deny.md deleted file mode 100644 index c3da6afe2b..0000000000 --- a/.changeset/spotty-pandas-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -- Move out the `cookiecutter` templating to its own module that is depended on by the `scaffolder-backend` plugin. No breaking change yet, but we will drop first class support for `cookiecutter` in the future and it will become an opt-in feature. diff --git a/.changeset/techdocs-young-gorillas-share.md b/.changeset/techdocs-young-gorillas-share.md deleted file mode 100644 index 6b1d3f03da..0000000000 --- a/.changeset/techdocs-young-gorillas-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Handle error responses in `getTechDocsMetadata` and `getEntityMetadata` such that `` doesn't throw errors. diff --git a/.changeset/wicked-emus-deny.md b/.changeset/wicked-emus-deny.md deleted file mode 100644 index ff6788dbb2..0000000000 --- a/.changeset/wicked-emus-deny.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/create-app': patch -'@backstage/plugin-scaffolder-backend': patch ---- - -Moved sample software templates to the [backstage/software-templates](https://github.com/backstage/software-templates) repository. If you previously referenced the sample templates straight from `scaffolder-backend` plugin in the main [backstage/backstage](https://github.com/backstage/backstage) repository in your `app-config.yaml`, these references will need to be updated. - -See https://github.com/backstage/software-templates diff --git a/.github/styles/vocab.txt b/.github/styles/vocab.txt index e6af881f1e..186207041e 100644 --- a/.github/styles/vocab.txt +++ b/.github/styles/vocab.txt @@ -212,6 +212,7 @@ repos rerender Reusability reusability +roadmaps rollbar Rollbar Rollup diff --git a/ADOPTERS.md b/ADOPTERS.md index 9845f1a929..041242c083 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -38,3 +38,4 @@ | [Workrise](https://www.workrise.com/) | [Michael Rode](https://github.com/michaelrode) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | | [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. | diff --git a/docs/features/software-catalog/catalog-customization.md b/docs/features/software-catalog/catalog-customization.md index e0228bf7d0..0c11d8f476 100644 --- a/docs/features/software-catalog/catalog-customization.md +++ b/docs/features/software-catalog/catalog-customization.md @@ -27,27 +27,33 @@ default catalog page and create a component in a ```tsx // imports, etc omitted for brevity. for full source see: // https://github.com/backstage/backstage/blob/master/plugins/catalog/src/components/CatalogPage/CatalogPage.tsx -export const CustomCatalogPage = () => { +export const CustomCatalogPage = ({ + columns, + actions, + initiallySelectedFilter = 'owned', +}: CatalogPageProps) => { return ( - + All your software catalog entities -
- -
+ + +
- -
-
+ + + + + +
-
+ ); }; ``` @@ -137,19 +143,27 @@ export const EntitySecurityTierPicker = () => { Now we can add the component to `CustomCatalogPage`: ```diff -export const CustomCatalogPage = () => { +export const CustomCatalogPage = ({ + columns, + actions, + initiallySelectedFilter = 'owned', +}: CatalogPageProps) => { return ( ... - -
+ + +
- -
+ + + + + + ... }; ``` diff --git a/docs/features/software-templates/configuration.md b/docs/features/software-templates/configuration.md index cdd8166889..737f77f67b 100644 --- a/docs/features/software-templates/configuration.md +++ b/docs/features/software-templates/configuration.md @@ -33,9 +33,12 @@ scaffolder: ### Disabling Docker in Docker situation (Optional) -Software Templates use -[Cookiecutter](https://github.com/cookiecutter/cookiecutter) as a templating -library. By default it will use the +Software templates use the `fetch:template` action by default, which requires no +external dependencies and offers a +[Cookiecutter-compatible mode](https://backstage.io/docs/features/software-templates/builtin-actions#using-cookiecuttercompat-mode). +There is also a `fetch:cookiecutter` action, which uses +[Cookiecutter](https://github.com/cookiecutter/cookiecutter) directly for +templating. By default, the `fetch:cookiecutter` action will use the [scaffolder-backend/Cookiecutter](https://github.com/backstage/backstage/blob/master/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile) docker image. diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index 13b52181df..b01afac5c3 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -24,11 +24,9 @@ an easier path to make Pull Requests. Backstage provides the `@backstage/create-app` package to scaffold standalone instances of Backstage. You will need to have [Node.js](https://nodejs.org/en/download/) Active LTS Release installed -(currently v14), [Yarn](https://classic.yarnpkg.com/en/docs/install) and -[Python](https://www.python.org/downloads/) (although you likely have it -already). You will also need to have -[Docker](https://docs.docker.com/engine/install/) installed to use some features -like Software Templates and TechDocs. +(currently v14) and [Yarn](https://classic.yarnpkg.com/en/docs/install). You +will also need to have [Docker](https://docs.docker.com/engine/install/) +installed to use some features like Software Templates and TechDocs. Using `npx` you can then run the following to create an app in a chosen subdirectory of your current working directory: diff --git a/docs/overview/roadmap.md b/docs/overview/roadmap.md index 0013c99c6b..fa34ca3d9a 100644 --- a/docs/overview/roadmap.md +++ b/docs/overview/roadmap.md @@ -1,116 +1,185 @@ --- id: roadmap -title: Project roadmap -description: Roadmap of Backstage Project +title: Roadmap +description: Roadmap of Backstage --- -## Current status +## The Backstage Roadmap -> Backstage is currently under rapid development. This means that you can expect -> APIs and features to evolve. It is also recommended that teams who adopt -> Backstage today [upgrade their installation](../cli/commands.md#versionsbump) -> as new [releases](https://github.com/backstage/backstage/releases) become -> available, as Backwards compatibility is not yet guaranteed. +Backstage is currently under rapid development. This page details the project’s +public roadmap, the result of ongoing collaboration between the core maintainers +and the broader Backstage community. Treat the roadmap as an ever-evolving guide +to keep us aligned as a community on: -## Phases +- Upcoming enhancements and benefits, +- Planning contributions and support, +- Planning the project’s adoption, +- Understanding what things are coming soon, +- Avoiding duplication of work -We have divided the project into three high-level _phases_: +### How to influence the roadmap -- 🐣 **Phase 1:** Extensible frontend platform (Done ✅) - You will be able to - easily create a single consistent UI layer for your internal infrastructure - and tools. A set of reusable - [UX patterns and components](https://backstage.io/storybook) help ensure a - consistent experience between tools. +As we evolve Backstage, we want you to contribute actively in the journey to +define the most effective developer experience in the world. -- 🐢 **Phase 2:** Software Catalog - ([alpha released](https://backstage.io/blog/2020/06/22/backstage-service-catalog-alpha)) - - With a single catalog, Backstage makes it easy for a team to manage ten - services — and makes it possible for your company to manage thousands of them. +A roadmap is only useful if it captures real needs. If you have success stories, +feedback, or ideas, we want to hear from you! If you plan to work (or are +already working) on a new or existing feature, please let us know, so that we +can update the roadmap accordingly. We are also happy to share knowledge and +context that will help your feature land successfully. -- 🐇 **Phase 3:** Ecosystem (ongoing, see - [Plugin Marketplace](https://backstage.io/plugins)) - Everyone's - infrastructure stack is different. By fostering a vibrant community of - contributors we hope to provide an ecosystem of Open Source - plugins/integrations that allows you to pick the tools that match your stack. - -## Detailed roadmap - -If you have questions about the roadmap or want to provide feedback, we would -love to hear from you! Please create an -[Issue](https://github.com/backstage/backstage/issues/new/choose), ping us on -[Discord](https://discord.gg/EBHEGzX) or reach out directly at -[backstage-interest@spotify.com](mailto:backstage-interest@spotify.com). - -Want to help out? Awesome ❤️ Head over to +You can also head over to the [CONTRIBUTING](https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md) guidelines to get started. -### Ongoing work 🚧 +If you have specific questions about the roadmap, please create an +[issue](https://github.com/backstage/backstage/issues/new/choose), ping us on +[Discord](https://discord.gg/awD6SxgQ), or +[book time](http://calendly.com/spotify-backstage) with the Spotify team. -- **[Platform stabilization](https://github.com/backstage/backstage/milestone/19)** - - Stabilize the core of Backstage, including its core features, so that the - platform can be depended on for production use. After this, plugins will - require little-to-no maintenance. +### How to read the roadmap -- **[Kubernetes plugin for service owners](https://github.com/backstage/backstage/issues/2857)** - - Improve native support for Kubernetes, making it easier for service owners to - see and manage their services running in K8s, regardless if that's locally, in - AWS, GCS, Azure, or elsewhere. +The Backstage roadmap lays out both [“what’s next”](#whats-next) and +[“future work”](#future-work). With "next" we mean features planned for release +within the ongoing quarter starting in July until September 2021 included. With +"future" we mean features in the radar, but not yet scheduled. -- **[Search platform](../features/search/README.md)** - Evolve the basic search - functionality currently available into a platform that **a)** enables search - across the software catalog, TechDocs, and any other information exposed by - plugins, and **b)** supports a variety of search engine technologies. +The long-term roadmap (12 - 36 months) is not detailed in the public roadmap. +Third-party contributions are also not currently included in the roadmap. Let us +know about any ongoing developments and we’re happy to include it here as well. -- **[Software Templates V2](https://github.com/backstage/backstage/issues/2771)** - - Expand the templates to make the steps more composable by adding the ability - to add more steps for custom logic, including webhooks and using authorization - from integrations. +### Roadmap evolution -### Future work 🔮 +Will this roadmap change? Obviously! -- **Golden Path for Plugin Development** - Create an easy, standardized way for - developers to build plugins that will encourage contributions and lead to a - richer ecosystem for everyone. +Roadmap are always evolving and ours is no different; you can expect to see this +updated roughly every month. -- **[GraphQL API](https://github.com/backstage/backstage/milestone/13)** - A - GraphQL API will open up the rich metadata provided by Backstage in a single - query. Plugins can easily query this API as well as extend the model where - needed. +## What’s next -- **Inter-Plugin Communication** - **[Under consideration]** Establish more - clearly defined patterns for plugins to communicate. +The feature set below is planned for the ongoing quarter, and grouped by theme. +The list order doesn’t necessarily reflect priority, and the development/release +cycle will vary based on maintainer schedules. -- **Improved Access Control** - **[Under consideration]** Provide finer grained - access controls and management for better control of the platform user - experience. +### Backstage Core -### Plugins +The following features are planned for release: -Building and maintaining [plugins](https://backstage.io/plugins) is the work of -the entire Backstage community. +- **Composable homepage:** We’re seeing lots of interest from the community in + reusable components to build a homepage experience where users can easily + surface what they might find useful to start their tasks. Check out the + [milestone](https://github.com/backstage/backstage/milestone/34) for further + details. +- **Improved responsiveness:** Check out the + [RFC here](https://github.com/backstage/backstage/issues/6318) for further + details on how to improve the responsiveness for Backstage's UI. -A list of plugins that are in development is -[available here](https://github.com/backstage/backstage/issues?q=is%3Aissue+is%3Aopen+label%3Aplugin+sort%3Areactions-%2B1-desc). -We strongly recommend to upvote 👍 plugins you are interested in. This helps us -and the community prioritize what plugins to build. +### Software Templates -Are you missing a plugin for your favorite tool? Please -[suggest a new one](https://github.com/backstage/backstage/issues/new?labels=plugin&template=plugin_template.md&title=%5BPlugin%5D+THE+PLUGIN+NAME). -Chances are that someone will jump in and help build it. +The following features are planned for release:: -### Community Initiatives 🧑‍🤝‍🧑 +- **Re-creation/resubmission in case of failure:** Speed up productivity by + allowing developers to relaunch a project after a failure or any unexpected + problem. In the current version, this task requires retyping and a full + re-creation from scratch. +- **Performance and usability improvements for contributors:** Reach a relevant + improvement in templating's performance through the replacement of + [handlebars](https://handlebarsjs.com/). Other replacements will be considered + as part of this task (possibly + [cookiecutter](https://cookiecutter.readthedocs.io/)) for easier software + template creation, allowing more contributors to reach their goals without + having to learn new tooling. +- **Improved extensibility through inclusion:** Make software templates more + maintainable and extensible by adding `$include` support for parameters. +- **Authenticated job creation:** Created jobs will be able to run with an + authenticated user with all actions tracked for future consumption and + evidence. Track users creating jobs and make “jobs created by me” reporting + available. -- [**Backstage Community Sessions**](https://github.com/backstage/community#meetups) - - A monthly meetup for the community to come together to share and learn about - the latest happenings in Backstage. +### Software Catalog -- **Backstage Hackathons** - (Coming soon) Open to everyone in our Backstage - community, a celebration of you, the project and building awesome things - together +The following features are planned for release: -### Completed milestones ✅ +- **Request For Comments (RFC) for composability improvements (routing):** + Enable plugins to be auto-added and make plugin installation and upgrades + easier for all Backstage users. This includes information card layouts, entity + pages containing content and hooking the external header, considering the + support of a separate deployment, and configuration for plugins. +- **Removing duplicated entities in catalog:** As any adopter knows, a software + catalog can contain thousands or more entities and it is very important to + avoid duplications in naming to prevent failures. With this development task, + two entities with the same name won't be allowed as described + [here](https://github.com/backstage/backstage/issues/4760). +- **Connecting identity to ownership to prepare for role-based access control + ([RBAC](https://en.wikipedia.org/wiki/Role-based_access_control)):** This is a + first step to supporting RBAC for the software catalog (see the + [future work section](#future-work) for further details). Provide each entity + within the software catalog with a recognized owner. +- **Catalog performance improvements through improved caching:** Fix the + performance gaps in the catalog processor, which currently doesn’t have a + strong caching mechanism. The current version often requires fetching a + relevant amount of data, especially at scale. +### Search + +The following features are planned for release: + +- ElasticSearch integration: Add ElasticSearch to the Search Platform as the + underlying search engine. Check out the + [milestone here](https://github.com/backstage/backstage/milestone/27) for + further details. + +### TechDocs + +The following features are planned for release: + +- **TechDocs beta release:** Fix remaining bugs to get TechDocs to Beta. Check + out the [milestone here](https://github.com/backstage/backstage/milestone/29) + for further details. + +## Future work + +The following feature list doesn’t represent a commitment to develop and the +list order doesn’t reflect any priority or importance. But these features are on +the maintainers’ radar, with clear interest expressed by the community. + +- **Improved UX design:** Provide a better Backstage user experience through + visual guidelines and templates, especially navigation across plug-ins and + portal functionalities. +- **Catalog composability (routing):** Follow up development after the RFC + planned for the ongoing quarter (see [what’s next](#whats-next) for further + details). +- **Catalog-import improvements:** Provide a faster (scalability) and better + (more features like move/rename) way to import entities into the Software + Catalog. Importing items in the Software Catalog is crucial for creating a + Backstage proof-of-concept or testing/planning for broader organizational + adoption. This enhancement better supports getting developers to use Backstage + with less effort and customization. +- **Catalog improvements:** Add pagination and sourcing to Software Catalog. +- **[GraphQL](https://graphql.org/) support:** Introduce the ability to query + Backstage backend services with a standard query language for APIs. +- **Software templates performance improvements through decoupling a separate + worker:** Improve performance through decoupling resource-consuming services + and making them asynchronous. In the current version, project auto-creation + through the Software Templating system can consume a lot of resources and + bottleneck many concurrent projects created simultaneously. +- **API discovery and documentation:** Add better support for the + [gRPC](https://grpc.io/). +- **Adding TechDocs search to the Search Platform:** Having this capability in + place will provide a better and new major version of the Search Platform + (v3.0). You can refer to the + [milestone here](https://github.com/backstage/backstage/milestone/28) for + further details. +- **TechDocs GA release:** Work toward enhancements necessary to get TechDocs to + general availability. Check out the + [milestone here](https://github.com/backstage/backstage/milestone/30) for + further details. + +## Completed milestones + +Read more about the completed (and released) features for reference. + +- [[Search] Out-of-the-Box Implementation (Alpha)](https://github.com/backstage/backstage/milestone/26) - [Deploy a product demo at `demo.backstage.io`](https://demo.backstage.io) - [Kubernetes plugin - v1](https://github.com/backstage/backstage/tree/master/plugins/kubernetes) - [Helm charts](https://github.com/backstage/backstage/tree/master/contrib/chart/backstage) diff --git a/docs/plugins/structure-of-a-plugin.md b/docs/plugins/structure-of-a-plugin.md index beffcdb313..99a55745c5 100644 --- a/docs/plugins/structure-of-a-plugin.md +++ b/docs/plugins/structure-of-a-plugin.md @@ -99,15 +99,14 @@ You may tweak these components, rename them and/or replace them completely. ## Connecting the plugin to the Backstage app -There are three things needed for a Backstage app to start making use of a -plugin. +There are two things needed for a Backstage app to start making use of a plugin. 1. Add plugin as dependency in `app/package.json` 2. Import and use one or more plugin extensions, for example in `app/src/App.tsx`. -Luckily these three steps happen automatically when you create a plugin with the -Backstage CLI. +Luckily both of these steps happen automatically when you create a plugin with +the Backstage CLI. ## Talking to the outside world diff --git a/microsite/package.json b/microsite/package.json index eee549fb70..532bb62d15 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -16,7 +16,7 @@ "lock:check": "yarn-lock-check" }, "devDependencies": { - "@spotify/prettier-config": "^10.0.0", + "@spotify/prettier-config": "^11.0.0", "docusaurus": "^2.0.0-alpha.70", "js-yaml": "^4.1.0", "prettier": "^2.3.2", diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 1da9288808..0f7ddb9c60 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -909,10 +909,10 @@ resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -"@spotify/prettier-config@^10.0.0": - version "10.0.0" - resolved "https://registry.npmjs.org/@spotify/prettier-config/-/prettier-config-10.0.0.tgz#fa076d98d2e7e6c53dd3d86a696307a7010bd056" - integrity sha512-VYOdo8P7lIScAkl02nB9KpUAuOYMManryBIBuKJkAw5D3aVtLobfmdIKvdV6MqEmGMEQPbn7w/UpnjJYhUH+IA== +"@spotify/prettier-config@^11.0.0": + version "11.0.0" + resolved "https://registry.npmjs.org/@spotify/prettier-config/-/prettier-config-11.0.0.tgz#d91e0546a8c1c0f7299e2edc7e44306e9be210f6" + integrity sha512-dOI13j1uHMZkRxhZuge/ugOE7Aqcg7Nxki932lDZuXyY4G8CGxkc/66PeQ8pR4PCzThHORXo7Ptvau6bh101lQ== "@types/cheerio@^0.22.8": version "0.22.23" diff --git a/packages/app/package.json b/packages/app/package.json index 9d18064717..388635e56b 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -39,9 +39,11 @@ "@backstage/plugin-techdocs": "^0.10.0", "@backstage/plugin-todo": "^0.1.5", "@backstage/plugin-user-settings": "^0.3.0", + "@backstage/search-common": "^0.1.2", "@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", "@octokit/rest": "^18.5.3", "@roadiehq/backstage-plugin-buildkite": "^1.0.6", "@roadiehq/backstage-plugin-github-insights": "^1.1.20", diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 549c4569cf..a793c20b86 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -137,6 +137,13 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { ); }; +/** + * 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. + * https://material-ui.com/components/grid/#basic-grid. + */ + export const cicdContent = ( @@ -301,10 +308,10 @@ const serviceEntityPage = ( - + - + @@ -312,10 +319,10 @@ const serviceEntityPage = ( - + - + @@ -440,15 +447,17 @@ const apiPage = ( - + - - - - - - + + + + + + + + diff --git a/packages/app/src/components/search/SearchPage.tsx b/packages/app/src/components/search/SearchPage.tsx index 35c4a4ac1c..6fe02de837 100644 --- a/packages/app/src/components/search/SearchPage.tsx +++ b/packages/app/src/components/search/SearchPage.tsx @@ -14,17 +14,20 @@ * limitations under the License. */ -import React from 'react'; +import React, { useState } from 'react'; import { makeStyles, Theme, Grid, List, Paper } from '@material-ui/core'; - +import Pagination from '@material-ui/lab/Pagination'; import { CatalogResultListItem } from '@backstage/plugin-catalog'; import { SearchBar, SearchFilter, SearchResult, + SearchType, DefaultResultListItem, } from '@backstage/plugin-search'; import { Content, Header, Lifecycle, Page } from '@backstage/core-components'; +import { DocsResultListItem } from '@backstage/plugin-techdocs'; +import { SearchResultSet } from '@backstage/search-common'; const useStyles = makeStyles((theme: Theme) => ({ bar: { @@ -34,15 +37,63 @@ const useStyles = makeStyles((theme: Theme) => ({ padding: theme.spacing(2), }, filter: { - '& + &': { - marginTop: theme.spacing(2.5), - }, + marginTop: theme.spacing(2.5), }, })); +// TODO: Move this into the search plugin once pagination is natively supported. +// See: https://github.com/backstage/backstage/issues/6062 +const SearchResultList = ({ results }: SearchResultSet) => { + const pageSize = 10; + const [page, setPage] = useState(1); + const changePage = (_: any, pageIndex: number) => { + setPage(pageIndex); + }; + const pageAmount = Math.ceil((results.length || 0) / pageSize); + return ( + <> + + {results + .slice(pageSize * (page - 1), pageSize * page) + .map(({ type, document }) => { + switch (type) { + case 'software-catalog': + return ( + + ); + case 'techdocs': + return ( + + ); + default: + return ( + + ); + } + })} + + + + ); +}; + const SearchPage = () => { const classes = useStyles(); - return (
} /> @@ -55,6 +106,11 @@ const SearchPage = () => { + { - {({ results }) => ( - - {results.map(({ type, document }) => { - switch (type) { - case 'software-catalog': - return ( - - ); - default: - return ( - - ); - } - })} - - )} + {({ results }) => } diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 13601fb8b3..582badb685 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-common +## 0.8.7 + +### Patch Changes + +- f25357273: Implement the etag functionality in the `readUrl` method of `FetchUrlReader`. +- bdd6ab5f1: It's possible to customize the request logging handler when building the service. For example in your `backend` + + ``` + const service = createServiceBuilder(module) + .loadConfig(config) + .setRequestLoggingHandler((logger?: Logger): RequestHandler => { + const actualLogger = (logger || getRootLogger()).child({ + type: 'incomingRequest', + }); + return expressWinston.logger({ ... + ``` + ## 0.8.6 ### Patch Changes diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index 571a26e5dc..2652dad122 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -439,6 +439,13 @@ export type ReadTreeResponseFile = { // @public export function requestLoggingHandler(logger?: Logger_2): RequestHandler; +// Warning: (ae-missing-release-tag) "RequestLoggingHandlerFactory" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type RequestLoggingHandlerFactory = ( + logger?: Logger_2, +) => RequestHandler; + // Warning: (ae-missing-release-tag) "resolvePackagePath" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -492,6 +499,9 @@ export type ServiceBuilder = { enableCors(options: cors.CorsOptions): ServiceBuilder; setHttpsSettings(settings: HttpsSettings): ServiceBuilder; addRouter(root: string, router: Router | RequestHandler): ServiceBuilder; + setRequestLoggingHandler( + requestLoggingHandler: RequestLoggingHandlerFactory, + ): ServiceBuilder; start(): Promise; }; @@ -593,6 +603,7 @@ export function useHotMemoize(_module: NodeModule, valueFactory: () => T): T; // src/service/types.d.ts:57:5 - (ae-forgotten-export) The symbol "HttpsSettings" needs to be exported by the entry point index.d.ts // src/service/types.d.ts:61:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen // src/service/types.d.ts:62:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen +// src/service/types.d.ts:70:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 739e372857..51ef8128e7 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.8.6", + "version": "0.8.7", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -76,8 +76,8 @@ } }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/test-utils": "^0.1.12", + "@backstage/cli": "^0.7.5", + "@backstage/test-utils": "^0.1.15", "@types/archiver": "^5.1.0", "@types/compression": "^1.7.0", "@types/concat-stream": "^1.6.0", diff --git a/packages/backend-common/src/reading/FetchUrlReader.test.ts b/packages/backend-common/src/reading/FetchUrlReader.test.ts index 169cbfbf66..e8c16c5f0a 100644 --- a/packages/backend-common/src/reading/FetchUrlReader.test.ts +++ b/packages/backend-common/src/reading/FetchUrlReader.test.ts @@ -15,12 +15,16 @@ */ import { ConfigReader } from '@backstage/config'; +import { NotFoundError, NotModifiedError } from '@backstage/errors'; import { msw } from '@backstage/test-utils'; +import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { getVoidLogger } from '../logging'; import { FetchUrlReader } from './FetchUrlReader'; import { DefaultReadTreeResponseFactory } from './tree'; +const fetchUrlReader = new FetchUrlReader(); + describe('FetchUrlReader', () => { const worker = setupServer(); @@ -30,6 +34,39 @@ describe('FetchUrlReader', () => { jest.clearAllMocks(); }); + beforeEach(() => { + worker.use( + rest.get('https://backstage.io/some-resource', (req, res, ctx) => { + if (req.headers.get('if-none-match') === 'foo') { + return res( + ctx.status(304), + ctx.set('Content-Type', 'text/plain'), + ctx.set('etag', 'foo'), + ); + } + + return res( + ctx.status(200), + ctx.set('Content-Type', 'text/plain'), + ctx.set('etag', 'foo'), + ctx.body('content foo'), + ); + }), + ); + + worker.use( + rest.get('https://backstage.io/not-exists', (_req, res, ctx) => { + return res(ctx.status(404)); + }), + ); + + worker.use( + rest.get('https://backstage.io/error', (_req, res, ctx) => { + return res(ctx.status(500), ctx.body('An internal error occured')); + }), + ); + }); + it('factory should create a single entry with a predicate that matches config', async () => { const entries = FetchUrlReader.factory({ config: new ConfigReader({ @@ -70,4 +107,55 @@ describe('FetchUrlReader', () => { expect(predicate(new URL('https://a.examples.org:700/test'))).toBe(true); expect(predicate(new URL('https://a.b.examples.org:700/test'))).toBe(true); }); + + describe('read', () => { + it('should return etag from the response', async () => { + const buffer = await fetchUrlReader.read( + 'https://backstage.io/some-resource', + ); + expect(buffer.toString()).toBe('content foo'); + }); + + it('should throw NotFound if server responds with 404', async () => { + await expect( + fetchUrlReader.read('https://backstage.io/not-exists'), + ).rejects.toThrow(NotFoundError); + }); + + it('should throw Error if server responds with 500', async () => { + await expect( + fetchUrlReader.read('https://backstage.io/error'), + ).rejects.toThrow(Error); + }); + }); + + describe('readUrl', () => { + it('should throw NotModified if server responds with 304', async () => { + await expect( + fetchUrlReader.readUrl('https://backstage.io/some-resource', { + etag: 'foo', + }), + ).rejects.toThrow(NotModifiedError); + }); + + it('should return etag from the response', async () => { + const response = await fetchUrlReader.readUrl( + 'https://backstage.io/some-resource', + ); + expect(response.etag).toBe('foo'); + expect((await response.buffer()).toString()).toEqual('content foo'); + }); + + it('should throw NotFound if server responds with 404', async () => { + await expect( + fetchUrlReader.readUrl('https://backstage.io/not-exists'), + ).rejects.toThrow(NotFoundError); + }); + + it('should throw Error if server responds with 500', async () => { + await expect( + fetchUrlReader.readUrl('https://backstage.io/error'), + ).rejects.toThrow(Error); + }); + }); }); diff --git a/packages/backend-common/src/reading/FetchUrlReader.ts b/packages/backend-common/src/reading/FetchUrlReader.ts index 30468158aa..3177ee1f8e 100644 --- a/packages/backend-common/src/reading/FetchUrlReader.ts +++ b/packages/backend-common/src/reading/FetchUrlReader.ts @@ -14,8 +14,8 @@ * limitations under the License. */ +import { NotFoundError, NotModifiedError } from '@backstage/errors'; import fetch from 'cross-fetch'; -import { NotFoundError } from '@backstage/errors'; import { ReaderFactory, ReadTreeResponse, @@ -57,15 +57,34 @@ export class FetchUrlReader implements UrlReader { }; async read(url: string): Promise { + const response = await this.readUrl(url); + return response.buffer(); + } + + async readUrl( + url: string, + options?: ReadUrlOptions, + ): Promise { let response: Response; try { - response = await fetch(url); + response = await fetch(url, { + headers: { + ...(options?.etag && { 'If-None-Match': options.etag }), + }, + }); } catch (e) { throw new Error(`Unable to read ${url}, ${e}`); } + if (response.status === 304) { + throw new NotModifiedError(); + } + if (response.ok) { - return Buffer.from(await response.text()); + return { + buffer: async () => Buffer.from(await response.text()), + etag: response.headers.get('ETag') ?? undefined, + }; } const message = `could not read ${url}, ${response.status} ${response.statusText}`; @@ -75,15 +94,6 @@ export class FetchUrlReader implements UrlReader { throw new Error(message); } - async readUrl( - url: string, - _options?: ReadUrlOptions, - ): Promise { - // TODO etag is not implemented yet. - const buffer = await this.read(url); - return { buffer: async () => buffer }; - } - async readTree(): Promise { throw new Error('FetchUrlReader does not implement readTree'); } diff --git a/packages/backend-common/src/service/index.ts b/packages/backend-common/src/service/index.ts index 4eb0bf4a5a..d01f25fad3 100644 --- a/packages/backend-common/src/service/index.ts +++ b/packages/backend-common/src/service/index.ts @@ -16,4 +16,4 @@ export { createServiceBuilder } from './createServiceBuilder'; export { createStatusCheckRouter } from './createStatusCheckRouter'; -export type { ServiceBuilder } from './types'; +export type { ServiceBuilder, RequestLoggingHandlerFactory } from './types'; diff --git a/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts b/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts index 380d61abc8..7a3ebfed70 100644 --- a/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts +++ b/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts @@ -27,9 +27,9 @@ import { getRootLogger } from '../../logging'; import { errorHandler, notFoundHandler, - requestLoggingHandler, + requestLoggingHandler as defaultRequestLoggingHandler, } from '../../middleware'; -import { ServiceBuilder } from '../types'; +import { RequestLoggingHandlerFactory, ServiceBuilder } from '../types'; import { CspOptions, HttpsSettings, @@ -65,6 +65,7 @@ export class ServiceBuilderImpl implements ServiceBuilder { private cspOptions: Record | undefined; private httpsSettings: HttpsSettings | undefined; private routers: [string, Router][]; + private requestLoggingHandler: RequestLoggingHandlerFactory | undefined; // Reference to the module where builder is created - needed for hot module // reloading private module: NodeModule; @@ -144,6 +145,13 @@ export class ServiceBuilderImpl implements ServiceBuilder { return this; } + setRequestLoggingHandler( + requestLoggingHandler: RequestLoggingHandlerFactory, + ) { + this.requestLoggingHandler = requestLoggingHandler; + return this; + } + async start(): Promise { const app = express(); const { @@ -160,7 +168,9 @@ export class ServiceBuilderImpl implements ServiceBuilder { app.use(cors(corsOptions)); } app.use(compression()); - app.use(requestLoggingHandler(logger)); + app.use( + (this.requestLoggingHandler ?? defaultRequestLoggingHandler)(logger), + ); for (const [root, route] of this.routers) { app.use(root, route); } diff --git a/packages/backend-common/src/service/types.ts b/packages/backend-common/src/service/types.ts index 70f62acfca..f845397ca2 100644 --- a/packages/backend-common/src/service/types.ts +++ b/packages/backend-common/src/service/types.ts @@ -85,8 +85,21 @@ export type ServiceBuilder = { */ addRouter(root: string, router: Router | RequestHandler): ServiceBuilder; + /** + * Set the request logging handler + * + * If no handler is given the default one is used + * + * @param requestLoggingHandler a factory function that given a logger returns an handler + */ + setRequestLoggingHandler( + requestLoggingHandler: RequestLoggingHandlerFactory, + ): ServiceBuilder; + /** * Starts the server using the given settings. */ start(): Promise; }; + +export type RequestLoggingHandlerFactory = (logger?: Logger) => RequestHandler; diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 56f6f2da72..a3e08db6b3 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,18 @@ # example-backend +## 0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.3.11 + - @backstage/catalog-client@0.3.17 + - @backstage/plugin-auth-backend@0.3.18 + - @backstage/plugin-jenkins-backend@0.1.2 + - @backstage/backend-common@0.8.7 + - @backstage/plugin-techdocs-backend@0.9.0 + - @backstage/plugin-scaffolder-backend@0.14.1 + ## 0.2.37 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 315c966a07..9fc455801b 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.37", + "version": "0.2.38", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -27,27 +27,27 @@ "migrate:create": "knex migrate:make -x ts" }, "dependencies": { - "@backstage/backend-common": "^0.8.6", - "@backstage/catalog-client": "^0.3.16", + "@backstage/backend-common": "^0.8.7", + "@backstage/catalog-client": "^0.3.17", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@backstage/integration": "^0.5.8", "@backstage/plugin-app-backend": "^0.3.15", - "@backstage/plugin-auth-backend": "^0.3.17", + "@backstage/plugin-auth-backend": "^0.3.18", "@backstage/plugin-badges-backend": "^0.1.8", "@backstage/plugin-catalog-backend": "^0.13.0", "@backstage/plugin-code-coverage-backend": "^0.1.8", "@backstage/plugin-graphql-backend": "^0.1.8", - "@backstage/plugin-jenkins-backend": "^0.1.1", - "@backstage/plugin-kubernetes-backend": "^0.3.10", + "@backstage/plugin-jenkins-backend": "^0.1.2", + "@backstage/plugin-kubernetes-backend": "^0.3.11", "@backstage/plugin-kafka-backend": "^0.2.8", "@backstage/plugin-proxy-backend": "^0.2.9", "@backstage/plugin-rollbar-backend": "^0.1.13", - "@backstage/plugin-scaffolder-backend": "^0.14.0", + "@backstage/plugin-scaffolder-backend": "^0.14.1", "@backstage/plugin-scaffolder-backend-module-rails": "^0.1.3", "@backstage/plugin-search-backend": "^0.2.3", "@backstage/plugin-search-backend-node": "^0.4.0", - "@backstage/plugin-techdocs-backend": "^0.8.7", + "@backstage/plugin-techdocs-backend": "^0.9.0", "@backstage/plugin-todo-backend": "^0.1.8", "@gitbeaker/node": "^30.2.0", "@octokit/rest": "^18.5.3", @@ -63,7 +63,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.7.4", + "@backstage/cli": "^0.7.5", "@types/dockerode": "^3.2.1", "@types/express": "^4.17.6", "@types/express-serve-static-core": "^4.17.5" diff --git a/packages/backend/src/plugins/search.ts b/packages/backend/src/plugins/search.ts index 4a1e415c74..7e7f6ae400 100644 --- a/packages/backend/src/plugins/search.ts +++ b/packages/backend/src/plugins/search.ts @@ -21,6 +21,7 @@ import { } from '@backstage/plugin-search-backend-node'; import { PluginEnvironment } from '../types'; import { DefaultCatalogCollator } from '@backstage/plugin-catalog-backend'; +import { DefaultTechDocsCollator } from '@backstage/plugin-techdocs-backend'; export default async function createPlugin({ logger, @@ -37,6 +38,11 @@ export default async function createPlugin({ collator: new DefaultCatalogCollator({ discovery }), }); + indexBuilder.addCollator({ + defaultRefreshIntervalSeconds: 600, + collator: new DefaultTechDocsCollator({ discovery, logger }), + }); + // The scheduler controls when documents are gathered from collators and sent // to the search engine for indexing. const { scheduler } = await indexBuilder.build(); diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 70b79b961f..d417f74f96 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/catalog-client +## 0.3.17 + +### Patch Changes + +- 71c936eb6: Export `CatalogRequestOptions` type + ## 0.3.16 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index fbb37d2449..a114871a6e 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/catalog-client", - "version": "0.3.16", + "version": "0.3.17", "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.3", + "@backstage/cli": "^0.7.5", "@types/jest": "^26.0.7", "msw": "^0.29.0" }, diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 3dba2e4ec7..b2877572fe 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/cli +## 0.7.5 + +### Patch Changes + +- 9a96b5da7: chore: bump `eslint` to `7.30.0` + ## 0.7.4 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index c539b1a382..1adaeaf725 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.4", + "version": "0.7.5", "private": false, "publishConfig": { "access": "public" @@ -118,13 +118,13 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-common": "^0.8.6", + "@backstage/backend-common": "^0.8.7", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.4", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@backstage/theme": "^0.2.8", "@types/diff": "^5.0.0", "@types/express": "^4.17.6", diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index dc1f694dca..0c104d6c33 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/codemods +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.1.6 + - @backstage/core-app-api@0.1.5 + ## 0.1.5 ### Patch Changes diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 9cf5730126..19c71c843c 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.5", + "version": "0.1.6", "private": false, "publishConfig": { "access": "public", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 4f09f231c3..8e188a6577 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/core-app-api +## 0.1.5 + +### Patch Changes + +- ea249c6e6: Fix a bug in `FlatRoutes` that prevented outlets from working with the root route, as well as matching root routes too broadly. +- Updated dependencies + - @backstage/core-components@0.1.6 + ## 0.1.4 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 0f6773497b..41e7c52393 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.4", + "version": "0.1.5", "private": false, "publishConfig": { "access": "public", @@ -29,7 +29,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.4", + "@backstage/core-components": "^0.1.6", "@backstage/config": "^0.1.3", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.8", @@ -44,8 +44,8 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.3", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/test-utils": "^0.1.15", "@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 1536cf3fb2..8372b25563 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/core-components +## 0.1.6 + +### Patch Changes + +- 9a751bb28: Increase the vertical padding of the sidebar search input field to match the height of the parent anchor tag. This prevents users from accidentally navigating to the search page when they actually wanted to use the search input directly. +- 45b5fc3a8: Updated the layout of catalog and API index pages to handle smaller screen sizes. This adds responsive wrappers to the entity tables, and switches filters to a drawer when width-constrained. If you have created a custom catalog or API index page, you will need to update the page structure to match the updated [catalog customization](https://backstage.io/docs/features/software-catalog/catalog-customization) documentation. +- 03bf17e9b: Improve the responsiveness of the EntityPage UI. With this the Header component should scale with the screen size & wrapping should not cause overflowing/blocking of links. Additionally enforce the Pages using the Grid Layout to use it across all screen sizes & to wrap as intended. + + To benefit from the improved responsive layout, the `EntityPage` in existing Backstage applications should be updated to set the `xs` column size on each grid item in the page, as this does not default. For example: + + ```diff + - + + + ``` + ## 0.1.5 ### Patch Changes diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index e915e004ee..ccafa4cfa7 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -1202,6 +1202,16 @@ export const Page: ({ children, }: 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) +// +// @public (undocumented) +export const PageWithHeader: ({ + themeId, + children, + ...props +}: PropsWithChildren) => JSX.Element; + // Warning: (ae-missing-release-tag) "Progress" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 0bd4b95134..944002c74f 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.5", + "version": "0.1.6", "private": false, "publishConfig": { "access": "public", @@ -70,9 +70,9 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/core-app-api": "^0.1.4", - "@backstage/cli": "^0.7.3", - "@backstage/test-utils": "^0.1.13", + "@backstage/core-app-api": "^0.1.5", + "@backstage/cli": "^0.7.5", + "@backstage/test-utils": "^0.1.15", "@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/EmptyState/EmptyState.tsx b/packages/core-components/src/components/EmptyState/EmptyState.tsx index 1d8d5a798f..5d55c5da93 100644 --- a/packages/core-components/src/components/EmptyState/EmptyState.tsx +++ b/packages/core-components/src/components/EmptyState/EmptyState.tsx @@ -49,15 +49,17 @@ export const EmptyState = ({ title, description, missing, action }: Props) => { className={classes.root} spacing={2} > - - - {title} - - - {description} - - - {action} + + + + {title} + + + {description} + + + {action} + diff --git a/packages/core-components/src/components/EmptyState/EmptyStateImage.tsx b/packages/core-components/src/components/EmptyState/EmptyStateImage.tsx index a76f0863f7..660e7fc947 100644 --- a/packages/core-components/src/components/EmptyState/EmptyStateImage.tsx +++ b/packages/core-components/src/components/EmptyState/EmptyStateImage.tsx @@ -29,7 +29,7 @@ const useStyles = makeStyles({ generalImg: { width: '95%', zIndex: 2, - position: 'absolute', + position: 'relative', left: '50%', top: '50%', transform: 'translate(-50%, 15%)', diff --git a/packages/core-components/src/components/SupportButton/SupportButton.tsx b/packages/core-components/src/components/SupportButton/SupportButton.tsx index 2ffef89878..3e719acb95 100644 --- a/packages/core-components/src/components/SupportButton/SupportButton.tsx +++ b/packages/core-components/src/components/SupportButton/SupportButton.tsx @@ -28,7 +28,7 @@ import { makeStyles, Popover, } from '@material-ui/core'; -import React, { Fragment, MouseEventHandler, useState } from 'react'; +import React, { MouseEventHandler, useState } from 'react'; import { SupportItem, SupportItemLink, useSupportConfig } from '../../hooks'; import { Link } from '../Link'; @@ -94,17 +94,17 @@ export const SupportButton = ({ title, children }: SupportButtonProps) => { }; return ( - - + <> + + + { - + ); }; diff --git a/packages/core-components/src/layout/ContentHeader/ContentHeader.tsx b/packages/core-components/src/layout/ContentHeader/ContentHeader.tsx index 1e2ad0b5d4..62cb80cffa 100644 --- a/packages/core-components/src/layout/ContentHeader/ContentHeader.tsx +++ b/packages/core-components/src/layout/ContentHeader/ContentHeader.tsx @@ -18,7 +18,7 @@ * TODO favoriteable capability */ -import React, { ComponentType, Fragment, PropsWithChildren } from 'react'; +import React, { ComponentType, PropsWithChildren } from 'react'; import { Typography, makeStyles } from '@material-ui/core'; import { Helmet } from 'react-helmet'; @@ -57,15 +57,15 @@ const useStyles = (props: ContentHeaderProps) => }, })); -type DefaultTitleProps = { +type ContentHeaderTitleProps = { title?: string; - className: string; + className?: string; }; -const DefaultTitle = ({ +const ContentHeaderTitle = ({ title = 'Unknown page', className, -}: DefaultTitleProps) => ( +}: ContentHeaderTitleProps) => ( ) : ( - + ); return ( - + <>
@@ -111,6 +111,6 @@ export const ContentHeader = ({
{children}
-
+ ); }; diff --git a/packages/core-components/src/layout/Header/Header.tsx b/packages/core-components/src/layout/Header/Header.tsx index 96d024f524..227c6d1a60 100644 --- a/packages/core-components/src/layout/Header/Header.tsx +++ b/packages/core-components/src/layout/Header/Header.tsx @@ -16,17 +16,20 @@ import { useApi, configApiRef } from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; -import { makeStyles, Tooltip, Typography } from '@material-ui/core'; +import { Box, Grid, makeStyles, Tooltip, Typography } from '@material-ui/core'; import React, { CSSProperties, PropsWithChildren, ReactNode } from 'react'; import { Helmet } from 'react-helmet'; import { Link } from '../../components/Link'; import { Breadcrumbs } from '../Breadcrumbs'; +const minHeaderHeight = 118; + const useStyles = makeStyles(theme => ({ header: { gridArea: 'pageHeader', padding: theme.spacing(3), - minHeight: 118, + height: 'fit-content', + minHeight: minHeaderHeight, width: '100%', boxShadow: '0 0 8px 3px rgba(20, 20, 20, 0.3)', position: 'relative', @@ -34,26 +37,21 @@ const useStyles = makeStyles(theme => ({ display: 'flex', flexDirection: 'row', flexWrap: 'wrap', - justifyContent: 'flex-end', alignItems: 'center', backgroundImage: theme.page.backgroundImage, backgroundPosition: 'center', backgroundSize: 'cover', }, leftItemsBox: { - flex: '1 1 auto', + maxWidth: '100%', + flexGrow: 1, + marginBottom: theme.spacing(1), }, rightItemsBox: { - flex: '0 1 auto', - display: 'flex', - flexDirection: 'row', - flexWrap: 'wrap', - alignItems: 'center', - marginRight: theme.spacing(1), + width: 'auto', }, title: { color: theme.palette.bursts.fontColor, - lineHeight: '1.0em', wordBreak: 'break-all', fontSize: 'calc(24px + 6 * ((100vw - 320px) / 680))', marginBottom: theme.spacing(1), @@ -199,7 +197,7 @@ export const Header = ({ <>
-
+ -
-
{children}
+ + + {children} +
); diff --git a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx index 1534656f24..8557ceddf7 100644 --- a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx +++ b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx @@ -14,29 +14,25 @@ * limitations under the License. */ -import { Link, makeStyles, Typography } from '@material-ui/core'; +import { Link, makeStyles, Typography, Grid } from '@material-ui/core'; import React from 'react'; const useStyles = makeStyles(theme => ({ root: { textAlign: 'left', - margin: theme.spacing(2), - display: 'inline-block', }, label: { - color: '#FFFFFF', + color: theme.palette.common.white, fontWeight: 'bold', - lineHeight: '16px', letterSpacing: 0, - fontSize: 14, - height: '16px', - marginBottom: 2, + fontSize: theme.typography.fontSize, + marginBottom: theme.spacing(1) / 2, + lineHeight: 1, }, value: { color: 'rgba(255, 255, 255, 0.8)', - lineHeight: '16px', - fontSize: 14, - height: '16px', + fontSize: theme.typography.fontSize, + lineHeight: 1, }, })); @@ -64,9 +60,11 @@ export const HeaderLabel = ({ label, value, url }: HeaderLabelProps) => { /> ); return ( - - {label} - {url ? {content} : content} - + + + {label} + {url ? {content} : content} + + ); }; diff --git a/plugins/api-docs/src/components/ApiExplorerPage/ApiExplorerLayout.tsx b/packages/core-components/src/layout/Page/PageWithHeader.tsx similarity index 50% rename from plugins/api-docs/src/components/ApiExplorerPage/ApiExplorerLayout.tsx rename to packages/core-components/src/layout/Page/PageWithHeader.tsx index 5638c23634..70a6c1f693 100644 --- a/plugins/api-docs/src/components/ApiExplorerPage/ApiExplorerLayout.tsx +++ b/packages/core-components/src/layout/Page/PageWithHeader.tsx @@ -14,27 +14,22 @@ * limitations under the License. */ -import React from 'react'; +import React, { PropsWithChildren, ComponentProps } from 'react'; -import { Header, Page } from '@backstage/core-components'; -import { useApi, configApiRef } from '@backstage/core-plugin-api'; +import { Header } from '../Header'; +import { Page } from './Page'; -type Props = { - children?: React.ReactNode; -}; -export const ApiExplorerLayout = ({ children }: Props) => { - const configApi = useApi(configApiRef); - const generatedSubtitle = `${ - configApi.getOptionalString('organization.name') ?? 'Backstage' - } API Explorer`; - return ( - -
- {children} - - ); +type PageWithHeaderProps = ComponentProps & { + themeId: string; }; + +export const PageWithHeader = ({ + themeId, + children, + ...props +}: PropsWithChildren) => ( + +
+ {children} + +); diff --git a/packages/core-components/src/layout/Page/index.ts b/packages/core-components/src/layout/Page/index.ts index d2523e8467..91db73657e 100644 --- a/packages/core-components/src/layout/Page/index.ts +++ b/packages/core-components/src/layout/Page/index.ts @@ -15,3 +15,4 @@ */ export { Page } from './Page'; +export { PageWithHeader } from './PageWithHeader'; diff --git a/packages/core-components/src/layout/Sidebar/Items.tsx b/packages/core-components/src/layout/Sidebar/Items.tsx index 28abbce53c..3944df0b50 100644 --- a/packages/core-components/src/layout/Sidebar/Items.tsx +++ b/packages/core-components/src/layout/Sidebar/Items.tsx @@ -44,7 +44,6 @@ const useStyles = makeStyles(theme => { drawerWidthOpen, iconContainerWidth, } = sidebarConfig; - return { root: { color: theme.palette.navigation.color, @@ -97,6 +96,9 @@ const useStyles = makeStyles(theme => { fontWeight: 'bold', fontSize: theme.typography.fontSize, }, + searchFieldHTMLInput: { + padding: `${theme.spacing(2)} 0 ${theme.spacing(2)}`, + }, searchContainer: { width: drawerWidthOpen - iconContainerWidth, }, @@ -271,6 +273,9 @@ export const SidebarSearchField = (props: SidebarSearchFieldProps) => { disableUnderline: true, className: classes.searchField, }} + inputProps={{ + className: classes.searchFieldHTMLInput, + }} /> diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 86a7c3e3fe..1bbb66710b 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/create-app +## 0.3.32 + +### Patch Changes + +- 03bf17e9b: Improve the responsiveness of the EntityPage UI. With this the Header component should scale with the screen size & wrapping should not cause overflowing/blocking of links. Additionally enforce the Pages using the Grid Layout to use it across all screen sizes & to wrap as intended. + + To benefit from the improved responsive layout, the `EntityPage` in existing Backstage applications should be updated to set the `xs` column size on each grid item in the page, as this does not default. For example: + + ```diff + - + + + ``` + +- eb740ee24: Moved sample software templates to the [backstage/software-templates](https://github.com/backstage/software-templates) repository. If you previously referenced the sample templates straight from `scaffolder-backend` plugin in the main [backstage/backstage](https://github.com/backstage/backstage) repository in your `app-config.yaml`, these references will need to be updated. + + See https://github.com/backstage/software-templates + ## 0.3.31 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 52fa3f7237..cedcba42c7 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.31", + "version": "0.3.32", "private": false, "publishConfig": { "access": "public" 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 e3dd5be3c7..2074a2712c 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 @@ -157,6 +157,13 @@ 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. + * https://material-ui.com/components/grid/#basic-grid. + */ + const defaultEntityPage = ( diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index af3a283a04..ea620350ef 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/dev-utils +## 0.2.3 + +### Patch Changes + +- 01001a324: Allow custom theme for dev app. +- Updated dependencies + - @backstage/core-components@0.1.6 + - @backstage/plugin-catalog-react@0.3.1 + - @backstage/core-app-api@0.1.5 + - @backstage/test-utils@0.1.15 + ## 0.2.2 ### Patch Changes diff --git a/packages/dev-utils/api-report.md b/packages/dev-utils/api-report.md index 6790992ecf..5f58b297d5 100644 --- a/packages/dev-utils/api-report.md +++ b/packages/dev-utils/api-report.md @@ -6,6 +6,7 @@ /// import { ApiFactory } from '@backstage/core-plugin-api'; +import { AppTheme } from '@backstage/core-plugin-api'; import { ComponentType } from 'react'; import { createPlugin } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 2825a53822..a80745284c 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.2", + "version": "0.2.3", "private": false, "publishConfig": { "access": "public", @@ -29,13 +29,13 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-app-api": "^0.1.3", - "@backstage/core-components": "^0.1.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/catalog-model": "^0.9.0", "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/test-utils": "^0.1.14", + "@backstage/plugin-catalog-react": "^0.3.1", + "@backstage/test-utils": "^0.1.15", "@backstage/theme": "^0.2.8", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -50,7 +50,7 @@ "react-router-dom": "6.0.0-beta.0" }, "devDependencies": { - "@backstage/cli": "^0.7.4", + "@backstage/cli": "^0.7.5", "@types/jest": "^26.0.7", "@types/node": "^14.14.32" }, diff --git a/packages/dev-utils/src/devApp/render.tsx b/packages/dev-utils/src/devApp/render.tsx index 508eb105f1..e6338cd467 100644 --- a/packages/dev-utils/src/devApp/render.tsx +++ b/packages/dev-utils/src/devApp/render.tsx @@ -37,6 +37,7 @@ import { import { AnyApiFactory, ApiFactory, + AppTheme, attachComponentData, configApiRef, createApiFactory, @@ -79,6 +80,7 @@ class DevAppBuilder { private readonly sidebarItems = new Array(); private defaultPage?: string; + private themes?: Array; /** * Register one or more plugins to render in the dev app @@ -144,6 +146,14 @@ class DevAppBuilder { return this; } + /** + * Adds an array of themes to overide the default theme. + */ + addThemes(themes: AppTheme[]) { + this.themes = themes; + return this; + } + /** * Build a DevApp component using the resources registered so far */ @@ -166,6 +176,7 @@ class DevAppBuilder { const app = createApp({ apis, plugins: this.plugins, + themes: this.themes, bindRoutes: ({ bind }) => { for (const plugin of this.plugins ?? []) { const targets: Record> = {}; diff --git a/packages/techdocs-common/CHANGELOG.md b/packages/techdocs-common/CHANGELOG.md index c26be7fa7c..ab5eff10e3 100644 --- a/packages/techdocs-common/CHANGELOG.md +++ b/packages/techdocs-common/CHANGELOG.md @@ -1,5 +1,100 @@ # @backstage/techdocs-common +## 0.7.0 + +### Minor Changes + +- d32d01e5b: Improve the annotation `backstage.io/techdocs-ref: dir:` that links to a path that is relative to the source of the annotated entity. + This annotation works with the basic and the recommended flow, however, it will be most useful with the basic approach. + + This change remove the deprecation of the `dir` reference and provides first-class support for it. + In addition, this change removes the support of the deprecated `github`, `gitlab`, and `azure/api` locations from the `dir` reference preparer. + + #### Example Usage + + The annotation is convenient if the documentation is stored in the same location, i.e. the same git repository, as the `catalog-info.yaml`. + While it is still supported to add full URLs such as `backstage.io/techdocs-ref: url:https://...` for custom setups, documentation is mostly stored in the same repository as the entity definition. + By automatically resolving the target relative to the registration location of the entity, the configuration overhead for this default setup is minimized. + Since it leverages the `@backstage/integrations` package for the URL resolution, this is compatible with every supported source. + + Consider the following examples: + + 1. "I have a repository with a single `catalog-info.yaml` and a TechDocs page in the root folder!" + + ``` + https://github.com/backstage/example/tree/main/ + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Component + | > metadata: + | > name: example + | > annotations: + | > backstage.io/techdocs-ref: dir:. # -> same folder + | > spec: {} + |- docs/ + |- mkdocs.yml + ``` + + 2. "I have a repository with a single `catalog-info.yaml` and my TechDocs page in located in a folder!" + + ``` + https://bitbucket.org/my-owner/my-project/src/master/ + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Component + | > metadata: + | > name: example + | > annotations: + | > backstage.io/techdocs-ref: dir:./some-folder # -> subfolder + | > spec: {} + |- some-folder/ + |- docs/ + |- mkdocs.yml + ``` + + 3. "I have a mono repository that hosts multiple components!" + + ``` + https://dev.azure.com/organization/project/_git/repository + |- my-1st-module/ + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Component + | > metadata: + | > name: my-1st-module + | > annotations: + | > backstage.io/techdocs-ref: dir:. # -> same folder + | > spec: {} + |- docs/ + |- mkdocs.yml + |- my-2nd-module/ + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Component + | > metadata: + | > name: my-2nd-module + | > annotations: + | > backstage.io/techdocs-ref: dir:. # -> same folder + | > spec: {} + |- docs/ + |- mkdocs.yml + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Location + | > metadata: + | > name: example + | > spec: + | > targets: + | > - ./*/catalog-info.yaml + ``` + +### Patch Changes + +- 6e5aed1c9: Fix validation of mkdocs.yml docs_dir +- 250984333: Add link to https://backstage.io/docs/features/techdocs/configuration in the log warning message about updating techdocs.generate key. +- Updated dependencies + - @backstage/backend-common@0.8.7 + ## 0.6.8 ### Patch Changes diff --git a/packages/techdocs-common/api-report.md b/packages/techdocs-common/api-report.md index 7c44dc5484..6e845c9797 100644 --- a/packages/techdocs-common/api-report.md +++ b/packages/techdocs-common/api-report.md @@ -15,6 +15,7 @@ import { GitHubIntegrationConfig } from '@backstage/integration'; import { GitLabIntegrationConfig } from '@backstage/integration'; import { Logger as Logger_2 } from 'winston'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { ScmIntegrationRegistry } from '@backstage/integration'; import { UrlReader } from '@backstage/backend-common'; import { Writable } from 'stream'; @@ -47,9 +48,15 @@ export class CommonGitPreparer implements PreparerBase { // // @public (undocumented) export class DirectoryPreparer implements PreparerBase { - constructor(config: Config, logger: Logger_2, reader: UrlReader); + constructor(config: Config, _logger: Logger_2, reader: UrlReader); // (undocumented) - prepare(entity: Entity): Promise; + prepare( + entity: Entity, + options?: { + logger?: Logger_2; + etag?: string; + }, + ): Promise; } // Warning: (ae-missing-release-tag) "GeneratorBase" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -189,7 +196,10 @@ export const getLastCommitTimestamp: ( // Warning: (ae-missing-release-tag) "getLocationForEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const getLocationForEntity: (entity: Entity) => ParsedLocationAnnotation; +export const getLocationForEntity: ( + entity: Entity, + scmIntegration: ScmIntegrationRegistry, +) => ParsedLocationAnnotation; // Warning: (ae-missing-release-tag) "getTokenForGitRepo" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -355,6 +365,18 @@ export type TechDocsMetadata = { etag: string; }; +// Warning: (ae-missing-release-tag) "transformDirLocation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export const transformDirLocation: ( + entity: Entity, + dirAnnotation: ParsedLocationAnnotation, + scmIntegrations: ScmIntegrationRegistry, +) => { + type: 'dir' | 'url'; + target: string; +}; + // Warning: (ae-missing-release-tag) "UrlPreparer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/packages/techdocs-common/package.json b/packages/techdocs-common/package.json index 5240e527e7..bb81c875fd 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.6.8", + "version": "0.7.0", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -36,9 +36,9 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { - "@azure/identity": "^1.2.2", - "@azure/storage-blob": "^12.4.0", - "@backstage/backend-common": "^0.8.6", + "@azure/identity": "^1.5.0", + "@azure/storage-blob": "^12.5.0", + "@backstage/backend-common": "^0.8.7", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@backstage/errors": "^0.1.1", @@ -60,7 +60,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.7.4", + "@backstage/cli": "^0.7.5", "@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/helpers.test.ts b/packages/techdocs-common/src/helpers.test.ts index b94cbba572..69f09d92ed 100644 --- a/packages/techdocs-common/src/helpers.test.ts +++ b/packages/techdocs-common/src/helpers.test.ts @@ -19,14 +19,26 @@ import { SearchResponse, UrlReader, } from '@backstage/backend-common'; -import { Entity } from '@backstage/catalog-model'; +import { Entity, getEntitySourceLocation } from '@backstage/catalog-model'; +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import os from 'os'; +import path from 'path'; import { Readable } from 'stream'; import { getDocFilesFromRepository, getLocationForEntity, parseReferenceAnnotation, + transformDirLocation, } from './helpers'; +jest.mock('@backstage/catalog-model', () => ({ + ...jest.requireActual('@backstage/catalog-model'), + getEntitySourceLocation: jest.fn(), +})); + +const rootDir = os.platform() === 'win32' ? 'C:\\rootDir' : '/rootDir'; + const entityBase: Entity = { metadata: { namespace: 'default', @@ -81,6 +93,10 @@ const mockEntityWithBadAnnotation: Entity = { }, }; +const scmIntegrations = ScmIntegrations.fromConfig(new ConfigReader({})); + +afterEach(() => jest.resetAllMocks()); + describe('parseReferenceAnnotation', () => { it('should parse annotation', () => { const parsedLocationAnnotation = parseReferenceAnnotation( @@ -109,10 +125,158 @@ describe('parseReferenceAnnotation', () => { }); }); +describe('transformDirLocation', () => { + it.each` + techdocsRef | target + ${'dir:.'} | ${'https://my-url/folder/'} + ${'dir:./sub-folder'} | ${'https://my-url/folder/sub-folder'} + `( + 'should transform "$techdocsRef" for url type locations', + ({ techdocsRef, target }) => { + (getEntitySourceLocation as jest.Mock).mockReturnValue({ + type: 'url', + target: 'https://my-url/folder/', + }); + + const entity = { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'test', + annotations: { + 'backstage.io/techdocs-ref': techdocsRef, + }, + }, + }; + + const result = transformDirLocation( + entity, + parseReferenceAnnotation('backstage.io/techdocs-ref', entity), + scmIntegrations, + ); + + expect(result).toEqual({ type: 'url', target }); + }, + ); + + it.each` + techdocsRef | target + ${'dir:.'} | ${path.join(rootDir, 'working-copy')} + ${'dir:./sub-folder'} | ${path.join(rootDir, 'working-copy', 'sub-folder')} + `( + 'should transform "$techdocsRef" for file type locations', + ({ techdocsRef, target }) => { + (getEntitySourceLocation as jest.Mock).mockReturnValue({ + type: 'file', + target: path.join(rootDir, 'working-copy', 'catalog-info.yaml'), + }); + + const entity = { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'test', + annotations: { + 'backstage.io/techdocs-ref': techdocsRef, + }, + }, + }; + + const result = transformDirLocation( + entity, + parseReferenceAnnotation('backstage.io/techdocs-ref', entity), + scmIntegrations, + ); + + expect(result).toEqual({ type: 'dir', target }); + }, + ); + + it('should reject unsafe file location', () => { + (getEntitySourceLocation as jest.Mock).mockReturnValue({ + type: 'file', + target: '/tmp/catalog-info.yaml', + }); + + const entity = { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'test', + annotations: { + 'backstage.io/techdocs-ref': 'dir:..', + }, + }, + }; + + expect(() => + transformDirLocation( + entity, + parseReferenceAnnotation('backstage.io/techdocs-ref', entity), + scmIntegrations, + ), + ).toThrow( + /Relative path is not allowed to refer to a directory outside its parent/, + ); + }); + + it('should reject other location types', () => { + (getEntitySourceLocation as jest.Mock).mockReturnValue({ + type: 'other', + target: '/', + }); + + const entity = { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'test', + annotations: { + 'backstage.io/techdocs-ref': 'dir:.', + }, + }, + }; + + expect(() => + transformDirLocation( + entity, + parseReferenceAnnotation('backstage.io/techdocs-ref', entity), + scmIntegrations, + ), + ).toThrow(/Unable to resolve location type other/); + }); +}); + describe('getLocationForEntity', () => { + it('should handle dir locations', () => { + (getEntitySourceLocation as jest.Mock).mockReturnValue({ + type: 'url', + target: 'https://my-url/folder/', + }); + + const entity = { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'test', + annotations: { + 'backstage.io/techdocs-ref': 'dir:.', + }, + }, + }; + + const parsedLocationAnnotation = getLocationForEntity( + entity, + scmIntegrations, + ); + expect(parsedLocationAnnotation.type).toBe('url'); + expect(parsedLocationAnnotation.target).toBe('https://my-url/folder/'); + }); + it('should get location for entity', () => { const parsedLocationAnnotation = getLocationForEntity( mockEntityWithAnnotation, + scmIntegrations, ); expect(parsedLocationAnnotation.type).toBe('url'); expect(parsedLocationAnnotation.target).toBe( diff --git a/packages/techdocs-common/src/helpers.ts b/packages/techdocs-common/src/helpers.ts index cac8a7047f..bb6461a37c 100644 --- a/packages/techdocs-common/src/helpers.ts +++ b/packages/techdocs-common/src/helpers.ts @@ -14,10 +14,19 @@ * limitations under the License. */ -import { Git, UrlReader } from '@backstage/backend-common'; -import { InputError } from '@backstage/errors'; -import { Entity, parseLocationReference } from '@backstage/catalog-model'; +import { + Git, + resolveSafeChildPath, + UrlReader, +} from '@backstage/backend-common'; +import { + Entity, + getEntitySourceLocation, + parseLocationReference, +} from '@backstage/catalog-model'; import { Config } from '@backstage/config'; +import { InputError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; import fs from 'fs-extra'; import parseGitUrl from 'git-url-parse'; import os from 'os'; @@ -50,30 +59,77 @@ export const parseReferenceAnnotation = ( }; }; +/** + * TechDocs references of type `dir` are relative the source location of the entity. + * This function transforms relative references to absolute ones, based on the + * location the entity was ingested from. If the entity was registered by a `url` + * location, it returns a `url` location with a resolved target that points to the + * targeted subfolder. If the entity was registered by a `file` location, it returns + * an absolute `dir` location. + * + * @param entity - the entity with annotations + * @param dirAnnotation - the parsed techdocs-ref annotation of type 'dir' + * @param scmIntegrations - access to the scmIntegration to do url transformations + * @throws if the entity doesn't specify a `dir` location or is ingested from an unsupported location. + * @returns the transformed location with an absolute target. + */ +export const transformDirLocation = ( + entity: Entity, + dirAnnotation: ParsedLocationAnnotation, + scmIntegrations: ScmIntegrationRegistry, +): { type: 'dir' | 'url'; target: string } => { + const location = getEntitySourceLocation(entity); + + switch (location.type) { + case 'url': { + const target = scmIntegrations.resolveUrl({ + url: dirAnnotation.target, + base: location.target, + }); + + return { + type: 'url', + target, + }; + } + + case 'file': { + // only permit targets in the same folder as the target of the `file` location! + const target = resolveSafeChildPath( + path.dirname(location.target), + dirAnnotation.target, + ); + + return { + type: 'dir', + target, + }; + } + + default: + throw new InputError(`Unable to resolve location type ${location.type}`); + } +}; + export const getLocationForEntity = ( entity: Entity, + scmIntegration: ScmIntegrationRegistry, ): ParsedLocationAnnotation => { - const { type, target } = parseReferenceAnnotation( + const annotation = parseReferenceAnnotation( 'backstage.io/techdocs-ref', entity, ); - switch (type) { + switch (annotation.type) { case 'github': case 'gitlab': case 'azure/api': case 'url': - return { type, target }; + return annotation; case 'dir': - if (path.isAbsolute(target)) { - return { type, target }; - } - return parseReferenceAnnotation( - 'backstage.io/managed-by-location', - entity, - ); + return transformDirLocation(entity, annotation, scmIntegration); default: - throw new Error(`Invalid reference annotation ${type}`); + throw new Error(`Invalid reference annotation ${annotation.type}`); } }; diff --git a/packages/techdocs-common/src/stages/generate/__fixtures__/mkdocs_valid_doc_dir.yml b/packages/techdocs-common/src/stages/generate/__fixtures__/mkdocs_valid_doc_dir.yml new file mode 100644 index 0000000000..e75b06ada7 --- /dev/null +++ b/packages/techdocs-common/src/stages/generate/__fixtures__/mkdocs_valid_doc_dir.yml @@ -0,0 +1,3 @@ +site_name: Test site name +site_description: Test site description +docs_dir: docs/ diff --git a/packages/techdocs-common/src/stages/generate/helpers.test.ts b/packages/techdocs-common/src/stages/generate/helpers.test.ts index b6b71e3e2b..a5a6d99c29 100644 --- a/packages/techdocs-common/src/stages/generate/helpers.test.ts +++ b/packages/techdocs-common/src/stages/generate/helpers.test.ts @@ -47,6 +47,9 @@ const mkdocsYmlWithExtensions = fs.readFileSync( const mkdocsYmlWithRepoUrl = fs.readFileSync( resolvePath(__filename, '../__fixtures__/mkdocs_with_repo_url.yml'), ); +const mkdocsYmlWithValidDocDir = fs.readFileSync( + resolvePath(__filename, '../__fixtures__/mkdocs_valid_doc_dir.yml'), +); const mkdocsYmlWithInvalidDocDir = fs.readFileSync( resolvePath(__filename, '../__fixtures__/mkdocs_invalid_doc_dir.yml'), ); @@ -336,6 +339,7 @@ describe('helpers', () => { mockFs({ '/mkdocs.yml': mkdocsYml, '/mkdocs_with_extensions.yml': mkdocsYmlWithExtensions, + '/mkdocs_valid_doc_dir.yml': mkdocsYmlWithValidDocDir, '/mkdocs_invalid_doc_dir.yml': mkdocsYmlWithInvalidDocDir, }); }); @@ -351,6 +355,12 @@ describe('helpers', () => { ).resolves.toBeUndefined(); }); + it('should return true on when a valid docs_dir is present', async () => { + await expect( + validateMkdocsYaml(inputDir, '/mkdocs_valid_doc_dir.yml'), + ).resolves.toBeUndefined(); + }); + it('should return false on absolute doc_dir path', async () => { await expect( validateMkdocsYaml(inputDir, '/mkdocs_invalid_doc_dir.yml'), diff --git a/packages/techdocs-common/src/stages/generate/helpers.ts b/packages/techdocs-common/src/stages/generate/helpers.ts index 086377b4ef..590e75e7b2 100644 --- a/packages/techdocs-common/src/stages/generate/helpers.ts +++ b/packages/techdocs-common/src/stages/generate/helpers.ts @@ -19,6 +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 { PassThrough, Writable } from 'stream'; import { Logger } from 'winston'; import { ParsedLocationAnnotation } from '../../helpers'; @@ -178,7 +179,10 @@ export const validateMkdocsYaml = async ( schema: MKDOCS_SCHEMA, }); - if (mkdocsYml.docs_dir && !isChildPath(inputDir, mkdocsYml.docs_dir)) { + if ( + mkdocsYml.docs_dir && + !isChildPath(inputDir, resolvePath(inputDir, mkdocsYml.docs_dir)) + ) { throw new Error( `docs_dir configuration value in mkdocs can't be an absolute directory or start with ../ for security reasons. Use relative paths instead which are resolved relative to your mkdocs.yml file location.`, diff --git a/packages/techdocs-common/src/stages/generate/techdocs.test.ts b/packages/techdocs-common/src/stages/generate/techdocs.test.ts index f8d5128adc..f3a91657e1 100644 --- a/packages/techdocs-common/src/stages/generate/techdocs.test.ts +++ b/packages/techdocs-common/src/stages/generate/techdocs.test.ts @@ -132,7 +132,8 @@ describe('readGeneratorConfig', () => { runIn: 'local', }); expect(logger.warn).toHaveBeenCalledWith( - `The 'techdocs.generators.techdocs' configuration key is deprecated and will be removed in the future. Please use 'techdocs.generator' instead.`, + `The 'techdocs.generators.techdocs' configuration key is deprecated and will be removed in the future. Please use 'techdocs.generator' instead. ` + + `See here https://backstage.io/docs/features/techdocs/configuration`, ); }); }); diff --git a/packages/techdocs-common/src/stages/generate/techdocs.ts b/packages/techdocs-common/src/stages/generate/techdocs.ts index 6847a74300..9d6bf38c54 100644 --- a/packages/techdocs-common/src/stages/generate/techdocs.ts +++ b/packages/techdocs-common/src/stages/generate/techdocs.ts @@ -168,7 +168,8 @@ export function readGeneratorConfig( if (legacyGeneratorType) { logger.warn( - `The 'techdocs.generators.techdocs' configuration key is deprecated and will be removed in the future. Please use 'techdocs.generator' instead.`, + `The 'techdocs.generators.techdocs' configuration key is deprecated and will be removed in the future. Please use 'techdocs.generator' instead. ` + + `See here https://backstage.io/docs/features/techdocs/configuration`, ); } diff --git a/packages/techdocs-common/src/stages/prepare/dir.test.ts b/packages/techdocs-common/src/stages/prepare/dir.test.ts index 6992a35c65..019bf51fe9 100644 --- a/packages/techdocs-common/src/stages/prepare/dir.test.ts +++ b/packages/techdocs-common/src/stages/prepare/dir.test.ts @@ -15,7 +15,6 @@ */ import { getVoidLogger, UrlReader } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; -import { checkoutGitRepository } from '../../helpers'; import { DirectoryPreparer } from './dir'; function normalizePath(path: string) { @@ -27,8 +26,6 @@ function normalizePath(path: string) { jest.mock('../../helpers', () => ({ ...jest.requireActual<{}>('../../helpers'), - checkoutGitRepository: jest.fn(() => '/tmp/backstage-repo/org/name/branch/'), - getLastCommitTimestamp: jest.fn(() => 12345678), })); const logger = getVoidLogger(); @@ -71,7 +68,7 @@ describe('directory preparer', () => { expect(normalizePath(preparedDir)).toEqual('/directory/our-documentation'); }); - it('should merge managed-by-location and techdocs-ref when techdocs-ref is absolute', async () => { + it('should reject when techdocs-ref is absolute', async () => { const directoryPreparer = new DirectoryPreparer( mockConfig, logger, @@ -84,11 +81,12 @@ describe('directory preparer', () => { 'backstage.io/techdocs-ref': 'dir:/our-documentation/techdocs', }); - const { preparedDir } = await directoryPreparer.prepare(mockEntity); - expect(normalizePath(preparedDir)).toEqual('/our-documentation/techdocs'); + await expect(directoryPreparer.prepare(mockEntity)).rejects.toThrow( + /Relative path is not allowed to refer to a directory outside its parent/, + ); }); - it('should merge managed-by-location and techdocs-ref when managed-by-location is a git repository', async () => { + it('should reject when managed-by-location is a git repository', async () => { const directoryPreparer = new DirectoryPreparer( mockConfig, logger, @@ -101,10 +99,8 @@ describe('directory preparer', () => { 'backstage.io/techdocs-ref': 'dir:./docs', }); - const { preparedDir } = await directoryPreparer.prepare(mockEntity); - expect(normalizePath(preparedDir)).toEqual( - '/tmp/backstage-repo/org/name/branch/docs', + await expect(directoryPreparer.prepare(mockEntity)).rejects.toThrow( + /Unable to resolve location type github/, ); - expect(checkoutGitRepository).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/techdocs-common/src/stages/prepare/dir.ts b/packages/techdocs-common/src/stages/prepare/dir.ts index 9ec4b4d37a..ade0b00162 100644 --- a/packages/techdocs-common/src/stages/prepare/dir.ts +++ b/packages/techdocs-common/src/stages/prepare/dir.ts @@ -15,104 +15,68 @@ */ import { UrlReader } from '@backstage/backend-common'; -import { InputError, NotModifiedError } from '@backstage/errors'; import { Entity } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; -import parseGitUrl from 'git-url-parse'; -import path from 'path'; -import { Logger } from 'winston'; +import { InputError } from '@backstage/errors'; import { - checkoutGitRepository, - getLastCommitTimestamp, - parseReferenceAnnotation, -} from '../../helpers'; + ScmIntegrationRegistry, + ScmIntegrations, +} from '@backstage/integration'; +import { Logger } from 'winston'; +import { parseReferenceAnnotation, transformDirLocation } from '../../helpers'; import { PreparerBase, PreparerResponse } from './types'; export class DirectoryPreparer implements PreparerBase { - constructor( - private readonly config: Config, - private readonly logger: Logger, - private readonly reader: UrlReader, - ) { - this.config = config; - this.logger = logger; + private readonly scmIntegrations: ScmIntegrationRegistry; + private readonly reader: UrlReader; + + constructor(config: Config, _logger: Logger, reader: UrlReader) { this.reader = reader; + this.scmIntegrations = ScmIntegrations.fromConfig(config); } - private async resolveManagedByLocationToDir( + async prepare( entity: Entity, - options?: { etag?: string }, + options?: { logger?: Logger; etag?: string }, ): Promise { - const { type, target } = parseReferenceAnnotation( - 'backstage.io/managed-by-location', + const annotation = parseReferenceAnnotation( + 'backstage.io/techdocs-ref', entity, ); - - this.logger.debug( - `Building docs for entity with type 'dir' and managed-by-location '${type}'`, + const { type, target } = transformDirLocation( + entity, + annotation, + this.scmIntegrations, ); + switch (type) { case 'url': { + options?.logger?.debug(`Reading files from ${target}`); + // the target is an absolute url since it has already been transformed const response = await this.reader.readTree(target, { etag: options?.etag, }); const preparedDir = await response.dir(); + + options?.logger?.debug(`Tree downloaded and stored at ${preparedDir}`); + return { preparedDir, etag: response.etag, }; } - case 'github': - case 'gitlab': - case 'azure/api': { - const parsedGitLocation = parseGitUrl(target); - const repoLocation = await checkoutGitRepository( - target, - this.config, - this.logger, - ); - // Check if etag has changed for cache invalidation. - const etag = await getLastCommitTimestamp(repoLocation, this.logger); - if (options?.etag === etag.toString()) { - throw new NotModifiedError(); - } + case 'dir': { return { - preparedDir: path.dirname( - path.join(repoLocation, parsedGitLocation.filepath), - ), - etag: etag.toString(), - }; - } - case 'file': - return { - preparedDir: path.dirname(target), + // the transformation already validated that the target is in a safe location + preparedDir: target, // Instead of supporting caching on local sources, use techdocs-cli for local development and debugging. etag: '', }; + } + default: throw new InputError(`Unable to resolve location type ${type}`); } } - - async prepare(entity: Entity): Promise { - this.logger.warn( - 'You are using the legacy dir preparer in TechDocs which will be removed in near future (March 2021). ' + - 'Migrate to URL reader by updating `backstage.io/techdocs-ref` annotation in `catalog-info.yaml` ' + - 'to be prefixed with `url:`. Read the migration guide and benefits at https://github.com/backstage/backstage/issues/4409 ', - ); - - const { target } = parseReferenceAnnotation( - 'backstage.io/techdocs-ref', - entity, - ); - - // This will throw NotModified error if etag has not changed. - const response = await this.resolveManagedByLocationToDir(entity); - - return { - preparedDir: path.resolve(response.preparedDir, target), - etag: response.etag, - }; - } } diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 68e45cd831..12627e55a0 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/test-utils +## 0.1.15 + +### Patch Changes + +- 45b5fc3a8: Updated the layout of catalog and API index pages to handle smaller screen sizes. This adds responsive wrappers to the entity tables, and switches filters to a drawer when width-constrained. If you have created a custom catalog or API index page, you will need to update the page structure to match the updated [catalog customization](https://backstage.io/docs/features/software-catalog/catalog-customization) documentation. +- Updated dependencies + - @backstage/core-app-api@0.1.5 + ## 0.1.14 ### Patch Changes diff --git a/packages/test-utils/api-report.md b/packages/test-utils/api-report.md index d85db1feb7..187867d24f 100644 --- a/packages/test-utils/api-report.md +++ b/packages/test-utils/api-report.md @@ -15,16 +15,15 @@ import { RouteRef } from '@backstage/core-plugin-api'; import { StorageApi } from '@backstage/core-plugin-api'; import { StorageValueChange } from '@backstage/core-plugin-api'; -// Warning: (ae-forgotten-export) The symbol "Breakpoint" needs to be exported by the entry point index.d.ts +// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen // Warning: (ae-missing-release-tag) "mockBreakpoint" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // -// @public (undocumented) -export function mockBreakpoint( - initialBreakpoint?: Breakpoint, -): { - set(breakpoint: Breakpoint): void; - remove(): void; -}; +// @public +export function mockBreakpoint({ + matches, +}: { + matches?: boolean | undefined; +}): void; // Warning: (ae-missing-release-tag) "MockErrorApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 797a23b17f..cfe4f2198e 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.14", + "version": "0.1.15", "private": false, "publishConfig": { "access": "public", @@ -29,7 +29,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-app-api": "^0.1.3", + "@backstage/core-app-api": "^0.1.5", "@backstage/core-plugin-api": "^0.1.3", "@backstage/test-utils-core": "^0.1.1", "@backstage/theme": "^0.2.8", @@ -46,7 +46,7 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.2", + "@backstage/cli": "^0.7.5", "@types/jest": "^26.0.7", "@types/node": "^14.14.32" }, diff --git a/packages/test-utils/src/testUtils/mockBreakpoint.ts b/packages/test-utils/src/testUtils/mockBreakpoint.ts index 37f0e761b6..3335284f88 100644 --- a/packages/test-utils/src/testUtils/mockBreakpoint.ts +++ b/packages/test-utils/src/testUtils/mockBreakpoint.ts @@ -14,80 +14,30 @@ * limitations under the License. */ -import { act } from '@testing-library/react'; - -type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl'; - -const queryToBreakpoint = { - '(min-width:1920px)': 'xl', - '(min-width:1280px)': 'lg', - '(min-width:960px)': 'md', - '(min-width:600px)': 'sm', - '(min-width:0px)': 'xs', -} as Record; - -function toBreakpoint(query: string) { - const breakpoint = queryToBreakpoint[query]; - if (!breakpoint) { - throw new Error( - `received unknown media query in breakpoint mock: '${query}'`, - ); - } - return breakpoint; -} - -type Listener = (event: { matches: boolean }) => void; - -interface QueryList { - addListener(listener: Listener): void; - removeListener(listener: Listener): void; - matches: boolean; -} - -interface Query { - query: string; - queryList: QueryList; - listeners: Set; -} - -export default function mockBreakpoint(initialBreakpoint: Breakpoint = 'xl') { - let currentBreakpoint = initialBreakpoint; - const queries = Array(); - - const previousMatchMedia: any = (window as any).matchMedia; - - (window as any).matchMedia = (query: string): QueryList => { - const listeners = new Set(); - - const queryList: QueryList = { - addListener(listener) { - listeners.add(listener); - }, - removeListener(listener) { - listeners.delete(listener); - }, - matches: toBreakpoint(query) === currentBreakpoint, - }; - - queries.push({ query, queryList, listeners }); - - return queryList; - }; - - return { - set(breakpoint: Breakpoint) { - currentBreakpoint = breakpoint; - - act(() => { - queries.forEach(({ query, queryList, listeners }) => { - const matches = toBreakpoint(query) === breakpoint; - queryList.matches = matches; - listeners.forEach(listener => listener({ matches })); - }); - }); - }, - remove() { - (window as any).matchMedia = previousMatchMedia; - }, - }; +/** + * This is a mocking method suggested in the Jest Doc's, as it is not implemented in JSDOM yet. + * It can be used to mock values when the MUI `useMediaQuery` hook if it is used in a tested component. + * + * For issues checkout the documentation: + * https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom + * + * If there are any updates from MUI React on testing `useMediaQuery` this mock should be replaced + * https://material-ui.com/components/use-media-query/#testing + * + * @param matchMediaOptions + */ +export default function mockBreakpoint({ matches = false }) { + Object.defineProperty(window, 'matchMedia', { + writable: true, + value: jest.fn().mockImplementation(query => ({ + matches: matches, + media: query, + onchange: null, + addListener: jest.fn(), // deprecated + removeListener: jest.fn(), // deprecated + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + dispatchEvent: jest.fn(), + })), + }); } diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index bcb21865c1..dfa9130b4d 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-api-docs +## 0.6.3 + +### Patch Changes + +- 45b5fc3a8: Updated the layout of catalog and API index pages to handle smaller screen sizes. This adds responsive wrappers to the entity tables, and switches filters to a drawer when width-constrained. If you have created a custom catalog or API index page, you will need to update the page structure to match the updated [catalog customization](https://backstage.io/docs/features/software-catalog/catalog-customization) documentation. +- Updated dependencies + - @backstage/core-components@0.1.6 + - @backstage/plugin-catalog@0.6.8 + - @backstage/plugin-catalog-react@0.3.1 + ## 0.6.2 ### Patch Changes diff --git a/plugins/api-docs/README.md b/plugins/api-docs/README.md index 60d8986d9b..d5ed198dc1 100644 --- a/plugins/api-docs/README.md +++ b/plugins/api-docs/README.md @@ -59,15 +59,17 @@ const apiPage = ( - + - - - - - - + + + + + + + + diff --git a/plugins/api-docs/api-report.md b/plugins/api-docs/api-report.md index a368cf5675..639485a42d 100644 --- a/plugins/api-docs/api-report.md +++ b/plugins/api-docs/api-report.md @@ -52,14 +52,16 @@ const apiDocsPlugin: BackstagePlugin< export { apiDocsPlugin }; export { apiDocsPlugin as plugin }; -// Warning: (ae-forgotten-export) The symbol "ApiExplorerPageProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "ApiExplorerPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export const ApiExplorerPage: ({ initiallySelectedFilter, columns, -}: ApiExplorerPageProps) => JSX.Element; +}: { + initiallySelectedFilter?: UserListFilterKind | undefined; + columns?: TableColumn[] | undefined; +}) => JSX.Element; // Warning: (ae-missing-release-tag) "ApiTypeTitle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 7d4edc41f8..f02945c14c 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.2", + "version": "0.6.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,10 +31,10 @@ "dependencies": { "@asyncapi/react-component": "^0.23.0", "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", - "@backstage/plugin-catalog": "^0.6.7", - "@backstage/plugin-catalog-react": "^0.3.0", + "@backstage/plugin-catalog": "^0.6.8", + "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/theme": "^0.2.8", "@material-icons/font": "^1.0.2", "@material-ui/core": "^4.11.0", @@ -51,10 +51,10 @@ "swagger-ui-react": "^3.37.2" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/api-docs/src/components/ApiExplorerPage/ApiExplorerPage.tsx b/plugins/api-docs/src/components/ApiExplorerPage/ApiExplorerPage.tsx index 9a8b725ffc..361ce7b55b 100644 --- a/plugins/api-docs/src/components/ApiExplorerPage/ApiExplorerPage.tsx +++ b/plugins/api-docs/src/components/ApiExplorerPage/ApiExplorerPage.tsx @@ -14,6 +14,21 @@ * limitations under the License. */ +import { + Content, + ContentHeader, + PageWithHeader, + SupportButton, + TableColumn, +} from '@backstage/core-components'; +import { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { + CatalogTable, + CatalogTableRow, + FilteredEntityLayout, + EntityListContainer, + FilterContainer, +} from '@backstage/plugin-catalog'; import { EntityKindPicker, EntityLifecyclePicker, @@ -24,29 +39,10 @@ import { UserListFilterKind, UserListPicker, } from '@backstage/plugin-catalog-react'; -import { CatalogTable, CatalogTableRow } from '@backstage/plugin-catalog'; -import { Button, makeStyles } from '@material-ui/core'; +import { Button } from '@material-ui/core'; import React from 'react'; import { Link as RouterLink } from 'react-router-dom'; import { createComponentRouteRef } from '../../routes'; -import { ApiExplorerLayout } from './ApiExplorerLayout'; - -import { - Content, - ContentHeader, - SupportButton, - TableColumn, -} from '@backstage/core-components'; -import { useRouteRef } from '@backstage/core-plugin-api'; - -const useStyles = makeStyles(theme => ({ - contentWrapper: { - display: 'grid', - gridTemplateAreas: "'filters' 'table'", - gridTemplateColumns: '250px 1fr', - gridColumnGap: theme.spacing(2), - }, -})); const defaultColumns: TableColumn[] = [ CatalogTable.columns.createNameColumn({ defaultKind: 'API' }), @@ -58,7 +54,7 @@ const defaultColumns: TableColumn[] = [ CatalogTable.columns.createTagsColumn(), ]; -export type ApiExplorerPageProps = { +type ApiExplorerPageProps = { initiallySelectedFilter?: UserListFilterKind; columns?: TableColumn[]; }; @@ -67,11 +63,19 @@ export const ApiExplorerPage = ({ initiallySelectedFilter = 'all', columns, }: ApiExplorerPageProps) => { - const styles = useStyles(); const createComponentLink = useRouteRef(createComponentRouteRef); + const configApi = useApi(configApiRef); + const generatedSubtitle = `${ + configApi.getOptionalString('organization.name') ?? 'Backstage' + } API Explorer`; return ( - + {createComponentLink && ( @@ -86,20 +90,22 @@ export const ApiExplorerPage = ({ )} All your APIs -
- -
+ + +
- -
-
+ + + + + +
-
+ ); }; diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 362eda35a7..218e20cd0e 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend +## 0.3.18 + +### Patch Changes + +- 2567c066d: TokenIssuer is now exported so it may be used by auth providers that are not bundled with Backstage +- Updated dependencies + - @backstage/catalog-client@0.3.17 + - @backstage/backend-common@0.8.7 + - @backstage/test-utils@0.1.15 + ## 0.3.17 ### Patch Changes diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index 174d640031..1ada822262 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -346,6 +346,16 @@ export interface RouterOptions { providerFactories?: ProviderFactories; } +// Warning: (ae-missing-release-tag) "TokenIssuer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type TokenIssuer = { + issueToken(params: TokenParams): Promise; + listPublicKeys(): Promise<{ + keys: AnyJWK[]; + }>; +}; + // Warning: (ae-missing-release-tag) "verifyNonce" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -366,9 +376,10 @@ export type WebMessageResponse = // Warnings were encountered during analysis: // +// src/identity/types.d.ts:25:5 - (ae-forgotten-export) The symbol "TokenParams" needs to be exported by the entry point index.d.ts +// src/identity/types.d.ts:31:9 - (ae-forgotten-export) The symbol "AnyJWK" needs to be exported by the entry point index.d.ts // src/providers/google/provider.d.ts:36:5 - (ae-forgotten-export) The symbol "AuthHandler" needs to be exported by the entry point index.d.ts // src/providers/types.d.ts:105:5 - (ae-forgotten-export) The symbol "AuthProviderConfig" needs to be exported by the entry point index.d.ts -// src/providers/types.d.ts:108:5 - (ae-forgotten-export) The symbol "TokenIssuer" needs to be exported by the entry point index.d.ts // src/providers/types.d.ts:111:5 - (ae-forgotten-export) The symbol "ExperimentalIdentityResolver" needs to be exported by the entry point index.d.ts // src/providers/types.d.ts:128:8 - (tsdoc-missing-deprecation-message) The @deprecated block must include a deprecation message, e.g. describing the recommended alternative diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 6e2e35997e..07097a880f 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.17", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,12 +29,12 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.8.6", - "@backstage/catalog-client": "^0.3.16", + "@backstage/backend-common": "^0.8.7", + "@backstage/catalog-client": "^0.3.17", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@backstage/errors": "^0.1.1", - "@backstage/test-utils": "^0.1.14", + "@backstage/test-utils": "^0.1.15", "@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.4", + "@backstage/cli": "^0.7.5", "@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/index.ts b/plugins/auth-backend/src/index.ts index d3ea83efd6..6b15b1fc81 100644 --- a/plugins/auth-backend/src/index.ts +++ b/plugins/auth-backend/src/index.ts @@ -16,6 +16,7 @@ export * from './service/router'; export { IdentityClient } from './identity'; +export type { TokenIssuer } from './identity'; export * from './providers'; // flow package provides 2 functions diff --git a/plugins/badges/package.json b/plugins/badges/package.json index 2009457705..3d38bc6d92 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", @@ -35,10 +35,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/bitrise/package.json index cf7a5d33e1..00eb35f055 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -38,10 +38,10 @@ "recharts": "^1.8.5" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index df4bd02cb9..ad1a05da5e 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-import +## 0.5.14 + +### Patch Changes + +- 903f3323c: Fix heading that wrongly implied catalog-import supports entity discovery for multiple integrations. +- Updated dependencies + - @backstage/core-components@0.1.6 + - @backstage/catalog-client@0.3.17 + - @backstage/plugin-catalog-react@0.3.1 + ## 0.5.13 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 857dc0a837..d6f371bc65 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.13", + "version": "0.5.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,13 +30,13 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-client": "^0.3.16", + "@backstage/catalog-client": "^0.3.17", "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/integration": "^0.5.8", "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.0", + "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/theme": "^0.2.8", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -54,10 +54,10 @@ "yaml": "^1.10.0" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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-import/src/components/ImportComponentPage.tsx b/plugins/catalog-import/src/components/ImportComponentPage.tsx index 6bf5af24ef..f4ca144165 100644 --- a/plugins/catalog-import/src/components/ImportComponentPage.tsx +++ b/plugins/catalog-import/src/components/ImportComponentPage.tsx @@ -14,12 +14,12 @@ * limitations under the License. */ -import { Grid, Typography } from '@material-ui/core'; +import { Chip, Grid, Typography } from '@material-ui/core'; import React from 'react'; import { ImportStepper } from './ImportStepper'; import { StepperProviderOpts } from './ImportStepper/defaults'; -import { ConfigApi, configApiRef, useApi } from '@backstage/core-plugin-api'; +import { configApiRef, useApi } from '@backstage/core-plugin-api'; import { Content, ContentHeader, @@ -29,30 +29,12 @@ import { SupportButton, } from '@backstage/core-components'; -function repositories(configApi: ConfigApi): string[] { - const integrations = configApi.getConfig('integrations'); - const repos = []; - if (integrations.has('github')) { - repos.push('GitHub'); - } - if (integrations.has('bitbucket')) { - repos.push('Bitbucket'); - } - if (integrations.has('gitlab')) { - repos.push('GitLab'); - } - if (integrations.has('azure')) { - repos.push('Azure'); - } - return repos; -} - export const ImportComponentPage = (opts: StepperProviderOpts) => { const configApi = useApi(configApiRef); const appTitle = configApi.getOptional('app.title') || 'Backstage'; - const repos = repositories(configApi); - const repositoryString = repos.join(', ').replace(/, (\w*)$/, ' or $1'); + const integrations = configApi.getConfig('integrations'); + const hasGithubIntegration = integrations.has('github'); return ( @@ -76,7 +58,8 @@ export const ImportComponentPage = (opts: StepperProviderOpts) => { }} > - Enter the URL to your SCM repository to add it to {appTitle}. + Enter the URL to your source code repository to add it to{' '} + {appTitle}. Link to an existing entity file @@ -91,10 +74,11 @@ export const ImportComponentPage = (opts: StepperProviderOpts) => { The wizard analyzes the file, previews the entities, and adds them to the {appTitle} catalog. - {repos.length > 0 && ( + {hasGithubIntegration && ( <> - Link to a {repositoryString} repository + Link to a repository{' '} + (): { entity: T; loading: boolean; error: Error | undefined; + refresh: VoidFunction | undefined; }; // Warning: (ae-missing-release-tag) "useEntityCompoundName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index e1b3beda4e..d0cb5ac947 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.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,10 +28,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-client": "^0.3.16", + "@backstage/catalog-client": "^0.3.17", "@backstage/catalog-model": "^0.9.0", - "@backstage/core-app-api": "^0.1.4", - "@backstage/core-components": "^0.1.5", + "@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", @@ -46,9 +46,9 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/src/hooks/useEntity.ts b/plugins/catalog-react/src/hooks/useEntity.ts index 465cffcf9b..6fe25fb115 100644 --- a/plugins/catalog-react/src/hooks/useEntity.ts +++ b/plugins/catalog-react/src/hooks/useEntity.ts @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { errorApiRef, useApi } from '@backstage/core-plugin-api'; import { createContext, useContext, useEffect } from 'react'; import { useNavigate } from 'react-router'; -import { useAsync } from 'react-use'; +import { useAsyncRetry } from 'react-use'; import { catalogApiRef } from '../api'; import { useEntityCompoundName } from './useEntityCompoundName'; @@ -25,12 +25,14 @@ type EntityLoadingStatus = { entity?: Entity; loading: boolean; error?: Error; + refresh?: VoidFunction; }; export const EntityContext = createContext({ entity: undefined, loading: true, error: undefined, + refresh: () => {}, }); export const useEntityFromUrl = (): EntityLoadingStatus => { @@ -39,7 +41,7 @@ export const useEntityFromUrl = (): EntityLoadingStatus => { const errorApi = useApi(errorApiRef); const catalogApi = useApi(catalogApiRef); - const { value: entity, error, loading } = useAsync( + const { value: entity, error, loading, retry: refresh } = useAsyncRetry( () => catalogApi.getEntityByName({ kind, namespace, name }), [catalogApi, kind, namespace, name], ); @@ -51,13 +53,13 @@ export const useEntityFromUrl = (): EntityLoadingStatus => { } }, [errorApi, navigate, error, loading, entity, name]); - return { entity, loading, error }; + return { entity, loading, error, refresh }; }; /** * Grab the current entity from the context and its current loading state. */ export function useEntity() { - const { entity, loading, error } = useContext(EntityContext); - return { entity: entity as T, loading, error }; + const { entity, loading, error, refresh } = useContext(EntityContext); + return { entity: entity as T, loading, error, refresh }; } diff --git a/plugins/catalog-react/src/testUtils/providers.tsx b/plugins/catalog-react/src/testUtils/providers.tsx index 3639715da2..1f9e4f40d6 100644 --- a/plugins/catalog-react/src/testUtils/providers.tsx +++ b/plugins/catalog-react/src/testUtils/providers.tsx @@ -52,8 +52,8 @@ export const MockEntityListContextProvider = ({ const defaultContext: EntityListContextProps = { entities: [], backendEntities: [], - updateFilters: updateFilters, - filters: filters, + updateFilters, + filters, loading: false, queryParameters: {}, }; diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 2255aae527..295c1fe15c 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog +## 0.6.8 + +### Patch Changes + +- 221d7d060: added retry callback to useEntity hook +- 45b5fc3a8: Updated the layout of catalog and API index pages to handle smaller screen sizes. This adds responsive wrappers to the entity tables, and switches filters to a drawer when width-constrained. If you have created a custom catalog or API index page, you will need to update the page structure to match the updated [catalog customization](https://backstage.io/docs/features/software-catalog/catalog-customization) documentation. +- 71c936eb6: Export `CatalogClientWrapper` class +- 03bf17e9b: Improve the responsiveness of the EntityPage UI. With this the Header component should scale with the screen size & wrapping should not cause overflowing/blocking of links. Additionally enforce the Pages using the Grid Layout to use it across all screen sizes & to wrap as intended. + + To benefit from the improved responsive layout, the `EntityPage` in existing Backstage applications should be updated to set the `xs` column size on each grid item in the page, as this does not default. For example: + + ```diff + - + + + ``` + +- Updated dependencies + - @backstage/core-components@0.1.6 + - @backstage/catalog-client@0.3.17 + - @backstage/plugin-catalog-react@0.3.1 + ## 0.6.7 ### Patch Changes diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index ec8bd66385..a416e70038 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -39,7 +39,7 @@ export function AboutCard({ variant }: AboutCardProps): JSX.Element; // Warning: (ae-missing-release-tag) "AboutContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const AboutContent: ({ entity }: Props_2) => JSX.Element; +export const AboutContent: ({ entity }: Props) => 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) "AboutField" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -50,7 +50,7 @@ export const AboutField: ({ value, gridSizes, children, -}: Props_3) => JSX.Element; +}: Props_2) => JSX.Element; // Warning: (ae-missing-release-tag) "CatalogClientWrapper" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -109,17 +109,11 @@ export const CatalogEntityPage: () => JSX.Element; // // @public (undocumented) export const CatalogIndexPage: ({ - initiallySelectedFilter, columns, actions, + initiallySelectedFilter, }: CatalogPageProps) => 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) "CatalogLayout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const CatalogLayout: ({ children }: Props) => JSX.Element; - // Warning: (ae-missing-release-tag) "catalogPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -305,6 +299,13 @@ export const EntityLinksCard: ({ variant?: 'gridItem' | undefined; }) => JSX.Element; +// Warning: (ae-missing-release-tag) "EntityListContainer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const EntityListContainer: ({ + children, +}: PropsWithChildren<{}>) => JSX.Element; + // Warning: (ae-missing-release-tag) "EntityOrphanWarning" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -343,6 +344,20 @@ export const EntitySwitch: { // @public (undocumented) export const EntitySystemDiagramCard: SystemDiagramCard; +// Warning: (ae-missing-release-tag) "FilterContainer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const FilterContainer: ({ + children, +}: PropsWithChildren<{}>) => JSX.Element; + +// Warning: (ae-missing-release-tag) "FilteredEntityLayout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const FilteredEntityLayout: ({ + children, +}: PropsWithChildren<{}>) => JSX.Element; + // 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 e89b368474..821e029616 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog", - "version": "0.6.7", + "version": "0.6.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,14 +30,14 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-client": "^0.3.16", + "@backstage/catalog-client": "^0.3.17", "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/integration": "^0.5.8", "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.0", + "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/theme": "^0.2.8", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -54,10 +54,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/CatalogLayout.tsx b/plugins/catalog/src/components/CatalogPage/CatalogLayout.tsx deleted file mode 100644 index 2471ac9df2..0000000000 --- a/plugins/catalog/src/components/CatalogPage/CatalogLayout.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 React from 'react'; - -import { configApiRef, useApi } from '@backstage/core-plugin-api'; -import { Header, Page } from '@backstage/core-components'; - -type Props = { - children?: React.ReactNode; -}; - -export const CatalogLayout = ({ children }: Props) => { - const orgName = - useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage'; - - return ( - -
- {children} - - ); -}; - -export default CatalogLayout; diff --git a/plugins/catalog/src/components/CatalogPage/CatalogPage.test.tsx b/plugins/catalog/src/components/CatalogPage/CatalogPage.test.tsx index 584eea0850..e09aec55e7 100644 --- a/plugins/catalog/src/components/CatalogPage/CatalogPage.test.tsx +++ b/plugins/catalog/src/components/CatalogPage/CatalogPage.test.tsx @@ -26,6 +26,7 @@ import { MockStorageApi, renderWithEffects, wrapInTestApp, + mockBreakpoint, } from '@backstage/test-utils'; import { fireEvent, screen } from '@testing-library/react'; import React from 'react'; @@ -244,4 +245,13 @@ describe('CatalogPage', () => { screen.findByText(/Starred \(1\)/), ).resolves.toBeInTheDocument(); }); + + it('should wrap filter in drawer on smaller screens', async () => { + mockBreakpoint({ matches: true }); + const { getByRole } = await renderWrapped(); + const button = getByRole('button', { name: 'Filters' }); + expect(getByRole('presentation', { hidden: true })).toBeInTheDocument(); + fireEvent.click(button); + expect(getByRole('presentation')).toBeVisible(); + }); }); diff --git a/plugins/catalog/src/components/CatalogPage/CatalogPage.tsx b/plugins/catalog/src/components/CatalogPage/CatalogPage.tsx index 089e61f0fb..963e04e5e2 100644 --- a/plugins/catalog/src/components/CatalogPage/CatalogPage.tsx +++ b/plugins/catalog/src/components/CatalogPage/CatalogPage.tsx @@ -14,8 +14,15 @@ * limitations under the License. */ -import React from 'react'; -import { Grid } from '@material-ui/core'; +import { + Content, + ContentHeader, + PageWithHeader, + SupportButton, + TableColumn, + TableProps, +} from '@backstage/core-components'; +import { configApiRef, useApi } from '@backstage/core-plugin-api'; import { EntityKindPicker, EntityLifecyclePicker, @@ -26,18 +33,15 @@ import { UserListFilterKind, UserListPicker, } from '@backstage/plugin-catalog-react'; +import React from 'react'; import { CatalogTable } from '../CatalogTable'; - import { EntityRow } from '../CatalogTable/types'; -import CatalogLayout from './CatalogLayout'; import { CreateComponentButton } from '../CreateComponentButton'; import { - Content, - ContentHeader, - SupportButton, - TableColumn, - TableProps, -} from '@backstage/core-components'; + FilteredEntityLayout, + EntityListContainer, + FilterContainer, +} from '../FilteredEntityLayout'; export type CatalogPageProps = { initiallySelectedFilter?: UserListFilterKind; @@ -46,39 +50,36 @@ export type CatalogPageProps = { }; export const CatalogPage = ({ - initiallySelectedFilter = 'owned', columns, actions, -}: CatalogPageProps) => ( - - - - - All your software catalog entities - - + initiallySelectedFilter = 'owned', +}: CatalogPageProps) => { + const orgName = + useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage'; + + return ( + + + + + All your software catalog entities + - - - - - - - - - - - - - - - - - + + + + + + + - - - -); + + + ); +}; diff --git a/plugins/catalog/src/components/CatalogPage/index.ts b/plugins/catalog/src/components/CatalogPage/index.ts index 66c3c2f4b3..dc7ed68229 100644 --- a/plugins/catalog/src/components/CatalogPage/index.ts +++ b/plugins/catalog/src/components/CatalogPage/index.ts @@ -13,5 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { CatalogLayout } from './CatalogLayout'; export { CatalogPage } from './CatalogPage'; diff --git a/plugins/catalog/src/components/CreateComponentButton/CreateComponentButton.tsx b/plugins/catalog/src/components/CreateComponentButton/CreateComponentButton.tsx index 482a0c0a3c..ae2fc4b718 100644 --- a/plugins/catalog/src/components/CreateComponentButton/CreateComponentButton.tsx +++ b/plugins/catalog/src/components/CreateComponentButton/CreateComponentButton.tsx @@ -23,9 +23,7 @@ import { useRouteRef } from '@backstage/core-plugin-api'; export const CreateComponentButton = () => { const createComponentLink = useRouteRef(createComponentRouteRef); - if (!createComponentLink) return null; - - return ( + return createComponentLink ? ( - ); + ) : null; }; diff --git a/plugins/catalog/src/components/CreateComponentButton/index.ts b/plugins/catalog/src/components/CreateComponentButton/index.ts index e525bef782..edf59d18a6 100644 --- a/plugins/catalog/src/components/CreateComponentButton/index.ts +++ b/plugins/catalog/src/components/CreateComponentButton/index.ts @@ -13,4 +13,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + export { CreateComponentButton } from './CreateComponentButton'; diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx index 9cb0b7c961..a5b85082cc 100644 --- a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx +++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx @@ -20,9 +20,17 @@ import { RELATION_OWNED_BY, } from '@backstage/catalog-model'; import { - useElementFilter, + Content, + Header, + HeaderLabel, + Page, + Progress, + RoutedTabs, +} from '@backstage/core-components'; +import { attachComponentData, IconComponent, + useElementFilter, } from '@backstage/core-plugin-api'; import { EntityContext, @@ -37,14 +45,6 @@ import { useNavigate } from 'react-router'; import { EntityContextMenu } from '../EntityContextMenu/EntityContextMenu'; import { FavouriteEntity } from '../FavouriteEntity/FavouriteEntity'; import { UnregisterEntityDialog } from '../UnregisterEntityDialog/UnregisterEntityDialog'; -import { - Content, - Header, - HeaderLabel, - Page, - Progress, - RoutedTabs, -} from '@backstage/core-components'; type SubRoute = { path: string; @@ -68,12 +68,21 @@ const EntityLayoutTitle = ({ }: { title: string; entity: Entity | undefined; -}) => ( - - {title} - {entity && } - -); +}) => { + return ( + + + {title} + + {entity && } + + ); +}; const headerProps = ( paramKind: string | undefined, diff --git a/plugins/catalog/src/components/EntityLoaderProvider/EntityLoaderProvider.tsx b/plugins/catalog/src/components/EntityLoaderProvider/EntityLoaderProvider.tsx index 7f9f728161..8d2feae7da 100644 --- a/plugins/catalog/src/components/EntityLoaderProvider/EntityLoaderProvider.tsx +++ b/plugins/catalog/src/components/EntityLoaderProvider/EntityLoaderProvider.tsx @@ -20,10 +20,10 @@ import { import React, { ReactNode } from 'react'; export const EntityLoaderProvider = ({ children }: { children: ReactNode }) => { - const { entity, loading, error } = useEntityFromUrl(); + const { entity, loading, error, refresh } = useEntityFromUrl(); return ( - + {children} ); diff --git a/plugins/catalog/src/components/FilteredEntityLayout/EntityListContainer.tsx b/plugins/catalog/src/components/FilteredEntityLayout/EntityListContainer.tsx new file mode 100644 index 0000000000..a39ef76b87 --- /dev/null +++ b/plugins/catalog/src/components/FilteredEntityLayout/EntityListContainer.tsx @@ -0,0 +1,24 @@ +/* + * 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 { Grid } from '@material-ui/core'; +import React, { PropsWithChildren } from 'react'; + +export const EntityListContainer = ({ children }: PropsWithChildren<{}>) => ( + + {children} + +); diff --git a/plugins/catalog/src/components/FilteredEntityLayout/FilterContainer.tsx b/plugins/catalog/src/components/FilteredEntityLayout/FilterContainer.tsx new file mode 100644 index 0000000000..683dbf8b40 --- /dev/null +++ b/plugins/catalog/src/components/FilteredEntityLayout/FilterContainer.tsx @@ -0,0 +1,71 @@ +/* + * 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 { BackstageTheme } from '@backstage/theme'; +import { + Box, + Button, + Drawer, + Grid, + Typography, + useMediaQuery, + useTheme, +} from '@material-ui/core'; +import FilterListIcon from '@material-ui/icons/FilterList'; +import React, { useState, PropsWithChildren } from 'react'; + +export const FilterContainer = ({ children }: PropsWithChildren<{}>) => { + const isMidSizeScreen = useMediaQuery(theme => + theme.breakpoints.down('md'), + ); + const theme = useTheme(); + const [filterDrawerOpen, setFilterDrawerOpen] = useState(false); + + return isMidSizeScreen ? ( + <> + + setFilterDrawerOpen(false)} + anchor="left" + disableAutoFocus + keepMounted + variant="temporary" + > + + + Filters + + {children} + + + + ) : ( + + {children} + + ); +}; diff --git a/plugins/catalog/src/components/FilteredEntityLayout/FilteredEntityLayout.tsx b/plugins/catalog/src/components/FilteredEntityLayout/FilteredEntityLayout.tsx new file mode 100644 index 0000000000..628ad9fee6 --- /dev/null +++ b/plugins/catalog/src/components/FilteredEntityLayout/FilteredEntityLayout.tsx @@ -0,0 +1,24 @@ +/* + * 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 { Grid } from '@material-ui/core'; +import React, { PropsWithChildren } from 'react'; + +export const FilteredEntityLayout = ({ children }: PropsWithChildren<{}>) => ( + + {children} + +); diff --git a/plugins/catalog/src/components/FilteredEntityLayout/index.ts b/plugins/catalog/src/components/FilteredEntityLayout/index.ts new file mode 100644 index 0000000000..ded61a4edc --- /dev/null +++ b/plugins/catalog/src/components/FilteredEntityLayout/index.ts @@ -0,0 +1,19 @@ +/* + * 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 { FilteredEntityLayout } from './FilteredEntityLayout'; +export { FilterContainer } from './FilterContainer'; +export { EntityListContainer } from './EntityListContainer'; diff --git a/plugins/catalog/src/index.ts b/plugins/catalog/src/index.ts index d3f5d8e36b..6934843228 100644 --- a/plugins/catalog/src/index.ts +++ b/plugins/catalog/src/index.ts @@ -14,18 +14,19 @@ * limitations under the License. */ -export * from './components/AboutCard'; export { CatalogClientWrapper } from './CatalogClientWrapper'; -export { CatalogLayout } from './components/CatalogPage'; -export { CatalogResultListItem } from './components/CatalogResultListItem'; +export * from './components/AboutCard'; +export * from './components/CatalogResultListItem'; export { CatalogTable } from './components/CatalogTable'; export type { EntityRow as CatalogTableRow } from './components/CatalogTable'; -export { CreateComponentButton } from './components/CreateComponentButton'; -export { EntityLayout } from './components/EntityLayout'; +export * from './components/CatalogTable/columns'; +export * from './components/CreateComponentButton'; +export * from './components/EntityLayout'; export * from './components/EntityOrphanWarning'; export * from './components/EntityProcessErrors'; -export { EntityPageLayout } from './components/EntityPageLayout'; +export * from './components/EntityPageLayout'; export * from './components/EntitySwitch'; +export * from './components/FilteredEntityLayout'; export { Router } from './components/Router'; export { CatalogEntityPage, @@ -33,8 +34,8 @@ export { catalogPlugin, catalogPlugin as plugin, EntityAboutCard, - EntityDependsOnComponentsCard, EntityDependencyOfComponentsCard, + EntityDependsOnComponentsCard, EntityDependsOnResourcesCard, EntityHasComponentsCard, EntityHasResourcesCard, @@ -43,4 +44,3 @@ export { EntityLinksCard, EntitySystemDiagramCard, } from './plugin'; -export * from './components/CatalogTable/columns'; diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index caee4585f3..52aae08b57 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -50,10 +50,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/cloudbuild/package.json index da5c749378..ee9f8a4e0c 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 11844beebb..bd632972df 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -22,7 +22,7 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.4", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", @@ -40,10 +40,10 @@ "recharts": "^1.8.5" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/config-schema/package.json index 5fe1d3a612..7ef279f123 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@backstage/config": "^0.1.4", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/theme": "^0.2.8", @@ -35,10 +35,10 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/cost-insights/package.json index feb6d4122c..2f6fac1479 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "@backstage/config": "^0.1.5", - "@backstage/core-components": "^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", @@ -54,10 +54,10 @@ "yup": "^0.29.3" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/explore/package.json index 7da4fe89fd..2059632c08 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^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-explore-react": "^0.0.6", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/fossa/package.json index 7cb5b5febf..cc4a27a5c0 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 3e37832e46..1d04d7f1d5 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -30,7 +30,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^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", @@ -42,10 +42,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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 19538e822a..6f2eaae984 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-git-release-manager +## 0.2.0 + +### Minor Changes + +- a2d8922c9: Enable users to add custom features + + Add more metadata to success callbacks + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.1.6 + ## 0.1.3 ### Patch Changes diff --git a/plugins/git-release-manager/api-report.md b/plugins/git-release-manager/api-report.md index 2497fed470..018a0f4be8 100644 --- a/plugins/git-release-manager/api-report.md +++ b/plugins/git-release-manager/api-report.md @@ -7,6 +7,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; // Warning: (ae-forgotten-export) The symbol "GitReleaseApi" needs to be exported by the entry point index.d.ts diff --git a/plugins/git-release-manager/dev/index.tsx b/plugins/git-release-manager/dev/index.tsx index 2a0170a61e..1876995bf1 100644 --- a/plugins/git-release-manager/dev/index.tsx +++ b/plugins/git-release-manager/dev/index.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { createDevApp } from '@backstage/dev-utils'; -import { Box, Typography } from '@material-ui/core'; +import { Box, Button, Typography } from '@material-ui/core'; import { gitReleaseManagerPlugin, GitReleaseManagerPage } from '../src/plugin'; import { InfoCardPlus } from '../src/components/InfoCardPlus'; @@ -44,10 +44,16 @@ createDevApp() Dev notes + Configure plugin statically by passing props to the `GitHubReleaseManagerPage` component + + + Note that the static configuration points towards private + repositories and will thus not work for everyone. + Dev notes - Each feature can be omitted - Success callbacks can also be added + + Each feature can be individually omitted as well as have success + callback attached to them + { + onSuccess: args => { // eslint-disable-next-line no-console console.log( - 'Custom success callback for Create RC', - comparisonUrl, - createdTag, - gitReleaseName, - gitReleaseUrl, - previousTag, + 'Custom success callback for Create RC with the following args', ); + console.log(JSON.stringify(args, null, 2)); // eslint-disable-line no-console }, }, promoteRc: { @@ -108,4 +106,50 @@ createDevApp() ), }) + .addPage({ + title: 'Custom', + path: '/custom', + element: ( + + + Dev notes + + The custom feature's return value can either be a React Element or + an array of React Elements. + + + + { + return ( + + I'm a custom feature + + + + ); + }, + }, + }} + /> + + ), + }) .render(); diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 35c5056904..5598fcd6ef 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.1.3", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,7 +20,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/integration": "^0.5.6", "@backstage/theme": "^0.2.8", @@ -28,22 +28,23 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@octokit/rest": "^18.5.3", + "@types/react": "^16.9", "luxon": "^1.26.0", "qs": "^6.10.1", - "react": "^16.13.1", "react-dom": "^16.13.1", "react-router": "6.0.0-beta.0", "react-use": "^17.2.4", + "react": "^16.13.1", "recharts": "^1.8.5" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@testing-library/jest-dom": "^5.10.1", - "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.4.2", + "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", "@types/jest": "^26.0.7", "@types/node": "^14.14.32", diff --git a/plugins/git-release-manager/src/GitReleaseManager.tsx b/plugins/git-release-manager/src/GitReleaseManager.tsx index 44669f9bc7..bca19b9b13 100644 --- a/plugins/git-release-manager/src/GitReleaseManager.tsx +++ b/plugins/git-release-manager/src/GitReleaseManager.tsx @@ -18,12 +18,14 @@ import React from 'react'; import { useAsync } from 'react-use'; import { Alert } from '@material-ui/lab'; import { Box } from '@material-ui/core'; +import { useApi } from '@backstage/core-plugin-api'; +import { ContentHeader, Progress } from '@backstage/core-components'; import { ComponentConfig, - ComponentConfigCreateRc, - ComponentConfigPatch, - ComponentConfigPromoteRc, + CreateRcOnSuccessArgs, + PatchOnSuccessArgs, + PromoteRcOnSuccessArgs, } from './types/types'; import { Features } from './features/Features'; import { gitReleaseManagerApiRef } from './api/serviceApiRef'; @@ -33,18 +35,33 @@ import { ProjectContext, Project } from './contexts/ProjectContext'; import { RepoDetailsForm } from './features/RepoDetailsForm/RepoDetailsForm'; import { useQueryHandler } from './hooks/useQueryHandler'; import { UserContext } from './contexts/UserContext'; - -import { useApi } from '@backstage/core-plugin-api'; -import { ContentHeader, Progress } from '@backstage/core-components'; +import { + GetBranchResult, + GetLatestReleaseResult, + GetRepositoryResult, +} from './api/GitReleaseClient'; interface GitReleaseManagerProps { project?: Omit; features?: { info?: Pick, 'omit'>; stats?: Pick, 'omit'>; - createRc?: ComponentConfigCreateRc; - promoteRc?: ComponentConfigPromoteRc; - patch?: ComponentConfigPatch; + createRc?: ComponentConfig; + promoteRc?: ComponentConfig; + patch?: ComponentConfig; + custom?: { + factory: ({ + latestRelease, + project, + releaseBranch, + repository, + }: { + latestRelease: GetLatestReleaseResult['latestRelease'] | null; + project: Project; + releaseBranch: GetBranchResult['branch'] | null; + repository: GetRepositoryResult['repository']; + }) => React.ReactElement | React.ReactElement[]; + }; }; } diff --git a/plugins/git-release-manager/src/features/CreateReleaseCandidate/CreateReleaseCandidate.tsx b/plugins/git-release-manager/src/features/CreateReleaseCandidate/CreateReleaseCandidate.tsx index e99fd9267e..7f24241e66 100644 --- a/plugins/git-release-manager/src/features/CreateReleaseCandidate/CreateReleaseCandidate.tsx +++ b/plugins/git-release-manager/src/features/CreateReleaseCandidate/CreateReleaseCandidate.tsx @@ -31,7 +31,7 @@ import { GetLatestReleaseResult, GetRepositoryResult, } from '../../api/GitReleaseClient'; -import { ComponentConfigCreateRc } from '../../types/types'; +import { ComponentConfig, CreateRcOnSuccessArgs } from '../../types/types'; import { Differ } from '../../components/Differ'; import { getReleaseCandidateGitInfo } from '../../helpers/getReleaseCandidateGitInfo'; import { InfoCardPlus } from '../../components/InfoCardPlus'; @@ -45,7 +45,7 @@ interface CreateReleaseCandidateProps { defaultBranch: GetRepositoryResult['repository']['defaultBranch']; latestRelease: GetLatestReleaseResult['latestRelease']; releaseBranch: GetBranchResult['branch'] | null; - onSuccess?: ComponentConfigCreateRc['onSuccess']; + onSuccess?: ComponentConfig['onSuccess']; } const InfoCardPlusWrapper = ({ children }: { children: React.ReactNode }) => { diff --git a/plugins/git-release-manager/src/features/CreateReleaseCandidate/hooks/useCreateReleaseCandidate.ts b/plugins/git-release-manager/src/features/CreateReleaseCandidate/hooks/useCreateReleaseCandidate.ts index 0d6d4ebb4f..9a89d59c54 100644 --- a/plugins/git-release-manager/src/features/CreateReleaseCandidate/hooks/useCreateReleaseCandidate.ts +++ b/plugins/git-release-manager/src/features/CreateReleaseCandidate/hooks/useCreateReleaseCandidate.ts @@ -21,7 +21,11 @@ import { GetRepositoryResult, } from '../../../api/GitReleaseClient'; -import { CardHook, ComponentConfigCreateRc } from '../../../types/types'; +import { + CardHook, + ComponentConfig, + CreateRcOnSuccessArgs, +} from '../../../types/types'; import { getReleaseCandidateGitInfo } from '../../../helpers/getReleaseCandidateGitInfo'; import { gitReleaseManagerApiRef } from '../../../api/serviceApiRef'; import { GitReleaseManagerError } from '../../../errors/GitReleaseManagerError'; @@ -31,12 +35,12 @@ import { useResponseSteps } from '../../../hooks/useResponseSteps'; import { useUserContext } from '../../../contexts/UserContext'; import { useApi } from '@backstage/core-plugin-api'; -interface UseCreateReleaseCandidate { +export interface UseCreateReleaseCandidate { defaultBranch: GetRepositoryResult['repository']['defaultBranch']; latestRelease: GetLatestReleaseResult['latestRelease']; releaseCandidateGitInfo: ReturnType; project: Project; - onSuccess?: ComponentConfigCreateRc['onSuccess']; + onSuccess?: ComponentConfig['onSuccess']; } export function useCreateReleaseCandidate({ @@ -266,6 +270,12 @@ export function useCreateReleaseCandidate({ try { await onSuccess({ + input: { + defaultBranch, + latestRelease, + releaseCandidateGitInfo, + project, + }, comparisonUrl: getComparisonRes.value.htmlUrl, createdTag: createReleaseRes.value.tagName, gitReleaseName: createReleaseRes.value.name, diff --git a/plugins/git-release-manager/src/features/Features.tsx b/plugins/git-release-manager/src/features/Features.tsx index 4014f26f73..b8386c41cc 100644 --- a/plugins/git-release-manager/src/features/Features.tsx +++ b/plugins/git-release-manager/src/features/Features.tsx @@ -142,6 +142,14 @@ export function Features({ onSuccess={features?.patch?.onSuccess} /> )} + + {features?.custom?.factory && + features.custom.factory({ + latestRelease: gitBatchInfo.value.latestRelease, + project, + releaseBranch: gitBatchInfo.value.releaseBranch, + repository: gitBatchInfo.value.repository, + })} ); diff --git a/plugins/git-release-manager/src/features/Patch/Patch.tsx b/plugins/git-release-manager/src/features/Patch/Patch.tsx index 53fc901da7..c902ab0dc5 100644 --- a/plugins/git-release-manager/src/features/Patch/Patch.tsx +++ b/plugins/git-release-manager/src/features/Patch/Patch.tsx @@ -22,7 +22,7 @@ import { GetBranchResult, GetLatestReleaseResult, } from '../../api/GitReleaseClient'; -import { ComponentConfigPatch } from '../../types/types'; +import { ComponentConfig, PatchOnSuccessArgs } from '../../types/types'; import { getBumpedTag } from '../../helpers/getBumpedTag'; import { InfoCardPlus } from '../../components/InfoCardPlus'; import { NoLatestRelease } from '../../components/NoLatestRelease'; @@ -32,7 +32,7 @@ import { useProjectContext } from '../../contexts/ProjectContext'; interface PatchProps { latestRelease: GetLatestReleaseResult['latestRelease']; releaseBranch: GetBranchResult['branch'] | null; - onSuccess?: ComponentConfigPatch['onSuccess']; + onSuccess?: ComponentConfig['onSuccess']; } export const Patch = ({ diff --git a/plugins/git-release-manager/src/features/Patch/PatchBody.tsx b/plugins/git-release-manager/src/features/Patch/PatchBody.tsx index b4e705fa58..01f5bc9fed 100644 --- a/plugins/git-release-manager/src/features/Patch/PatchBody.tsx +++ b/plugins/git-release-manager/src/features/Patch/PatchBody.tsx @@ -38,7 +38,7 @@ import { GetLatestReleaseResult, } from '../../api/GitReleaseClient'; import { CalverTagParts } from '../../helpers/tagParts/getCalverTagParts'; -import { ComponentConfigPatch } from '../../types/types'; +import { ComponentConfig, PatchOnSuccessArgs } from '../../types/types'; import { Differ } from '../../components/Differ'; import { getPatchCommitSuffix } from './helpers/getPatchCommitSuffix'; import { gitReleaseManagerApiRef } from '../../api/serviceApiRef'; @@ -56,7 +56,7 @@ interface PatchBodyProps { bumpedTag: string; latestRelease: NonNullable; releaseBranch: GetBranchResult['branch']; - onSuccess?: ComponentConfigPatch['onSuccess']; + onSuccess?: ComponentConfig['onSuccess']; tagParts: NonNullable; } diff --git a/plugins/git-release-manager/src/features/Patch/hooks/usePatch.ts b/plugins/git-release-manager/src/features/Patch/hooks/usePatch.ts index 5d3f9829ad..a2cbb7aefb 100644 --- a/plugins/git-release-manager/src/features/Patch/hooks/usePatch.ts +++ b/plugins/git-release-manager/src/features/Patch/hooks/usePatch.ts @@ -22,7 +22,11 @@ import { } from '../../../api/GitReleaseClient'; import { CalverTagParts } from '../../../helpers/tagParts/getCalverTagParts'; -import { ComponentConfigPatch, CardHook } from '../../../types/types'; +import { + CardHook, + ComponentConfig, + PatchOnSuccessArgs, +} from '../../../types/types'; import { getPatchCommitSuffix } from '../helpers/getPatchCommitSuffix'; import { gitReleaseManagerApiRef } from '../../../api/serviceApiRef'; import { Project } from '../../../contexts/ProjectContext'; @@ -32,12 +36,12 @@ import { useResponseSteps } from '../../../hooks/useResponseSteps'; import { useUserContext } from '../../../contexts/UserContext'; import { useApi } from '@backstage/core-plugin-api'; -interface Patch { +export interface UsePatch { bumpedTag: string; latestRelease: NonNullable; project: Project; tagParts: NonNullable; - onSuccess?: ComponentConfigPatch['onSuccess']; + onSuccess?: ComponentConfig['onSuccess']; } // Inspiration: https://stackoverflow.com/questions/53859199/how-to-cherry-pick-through-githubs-api @@ -47,7 +51,7 @@ export function usePatch({ project, tagParts, onSuccess, -}: Patch): CardHook { +}: UsePatch): CardHook { const pluginApiClient = useApi(gitReleaseManagerApiRef); const { user } = useUserContext(); const { @@ -337,13 +341,19 @@ ${selectedPatchCommit.commit.message}`, try { await onSuccess?.({ - updatedReleaseUrl: updatedReleaseRes.value.htmlUrl, - updatedReleaseName: updatedReleaseRes.value.name, - previousTag: latestRelease.tagName, - patchedTag: updatedReleaseRes.value.tagName, - patchCommitUrl: releaseBranchRes.value.selectedPatchCommit.htmlUrl, + input: { + bumpedTag, + latestRelease, + project, + tagParts, + }, patchCommitMessage: releaseBranchRes.value.selectedPatchCommit.commit.message, + patchCommitUrl: releaseBranchRes.value.selectedPatchCommit.htmlUrl, + patchedTag: updatedReleaseRes.value.tagName, + previousTag: latestRelease.tagName, + updatedReleaseName: updatedReleaseRes.value.name, + updatedReleaseUrl: updatedReleaseRes.value.htmlUrl, }); } catch (error) { asyncCatcher(error); diff --git a/plugins/git-release-manager/src/features/PromoteRc/PromoteRc.tsx b/plugins/git-release-manager/src/features/PromoteRc/PromoteRc.tsx index 8d42119748..341ecbbce4 100644 --- a/plugins/git-release-manager/src/features/PromoteRc/PromoteRc.tsx +++ b/plugins/git-release-manager/src/features/PromoteRc/PromoteRc.tsx @@ -18,7 +18,7 @@ import React from 'react'; import { Alert, AlertTitle } from '@material-ui/lab'; import { Box, Typography } from '@material-ui/core'; -import { ComponentConfigPromoteRc } from '../../types/types'; +import { ComponentConfig, PromoteRcOnSuccessArgs } from '../../types/types'; import { GetLatestReleaseResult } from '../../api/GitReleaseClient'; import { InfoCardPlus } from '../../components/InfoCardPlus'; import { NoLatestRelease } from '../../components/NoLatestRelease'; @@ -27,7 +27,7 @@ import { TEST_IDS } from '../../test-helpers/test-ids'; interface PromoteRcProps { latestRelease: GetLatestReleaseResult['latestRelease']; - onSuccess?: ComponentConfigPromoteRc['onSuccess']; + onSuccess?: ComponentConfig['onSuccess']; } export const PromoteRc = ({ latestRelease, onSuccess }: PromoteRcProps) => { diff --git a/plugins/git-release-manager/src/features/PromoteRc/PromoteRcBody.tsx b/plugins/git-release-manager/src/features/PromoteRc/PromoteRcBody.tsx index d3ce5e4a70..3ca4518bbc 100644 --- a/plugins/git-release-manager/src/features/PromoteRc/PromoteRcBody.tsx +++ b/plugins/git-release-manager/src/features/PromoteRc/PromoteRcBody.tsx @@ -17,7 +17,7 @@ import React from 'react'; import { Button, Typography, Box } from '@material-ui/core'; -import { ComponentConfigPromoteRc } from '../../types/types'; +import { ComponentConfig, PromoteRcOnSuccessArgs } from '../../types/types'; import { Differ } from '../../components/Differ'; import { GetLatestReleaseResult } from '../../api/GitReleaseClient'; import { ResponseStepDialog } from '../../components/ResponseStepDialog/ResponseStepDialog'; @@ -26,7 +26,7 @@ import { usePromoteRc } from './hooks/usePromoteRc'; interface PromoteRcBodyProps { rcRelease: NonNullable; - onSuccess?: ComponentConfigPromoteRc['onSuccess']; + onSuccess?: ComponentConfig['onSuccess']; } export const PromoteRcBody = ({ rcRelease, onSuccess }: PromoteRcBodyProps) => { diff --git a/plugins/git-release-manager/src/features/PromoteRc/hooks/usePromoteRc.ts b/plugins/git-release-manager/src/features/PromoteRc/hooks/usePromoteRc.ts index 357ba1e0a6..f3a87d3c74 100644 --- a/plugins/git-release-manager/src/features/PromoteRc/hooks/usePromoteRc.ts +++ b/plugins/git-release-manager/src/features/PromoteRc/hooks/usePromoteRc.ts @@ -16,7 +16,11 @@ import { useState, useEffect } from 'react'; import { useAsync, useAsyncFn } from 'react-use'; -import { CardHook, ComponentConfigPromoteRc } from '../../../types/types'; +import { + CardHook, + ComponentConfig, + PromoteRcOnSuccessArgs, +} from '../../../types/types'; import { GetLatestReleaseResult } from '../../../api/GitReleaseClient'; import { gitReleaseManagerApiRef } from '../../../api/serviceApiRef'; @@ -27,17 +31,17 @@ import { useResponseSteps } from '../../../hooks/useResponseSteps'; import { useUserContext } from '../../../contexts/UserContext'; import { useApi } from '@backstage/core-plugin-api'; -interface PromoteRc { +export interface UsePromoteRc { rcRelease: NonNullable; releaseVersion: string; - onSuccess?: ComponentConfigPromoteRc['onSuccess']; + onSuccess?: ComponentConfig['onSuccess']; } export function usePromoteRc({ rcRelease, releaseVersion, onSuccess, -}: PromoteRc): CardHook { +}: UsePromoteRc): CardHook { const pluginApiClient = useApi(gitReleaseManagerApiRef); const { user } = useUserContext(); const { project } = useProjectContext(); @@ -170,12 +174,16 @@ export function usePromoteRc({ try { await onSuccess?.({ - gitReleaseUrl: promotedReleaseRes.value.htmlUrl, + input: { + rcRelease, + releaseVersion, + }, gitReleaseName: promotedReleaseRes.value.name, - previousTagUrl: rcRelease.htmlUrl, + gitReleaseUrl: promotedReleaseRes.value.htmlUrl, previousTag: rcRelease.tagName, - updatedTagUrl: promotedReleaseRes.value.htmlUrl, + previousTagUrl: rcRelease.htmlUrl, updatedTag: promotedReleaseRes.value.tagName, + updatedTagUrl: promotedReleaseRes.value.htmlUrl, }); } catch (error) { asyncCatcher(error); diff --git a/plugins/git-release-manager/src/types/types.ts b/plugins/git-release-manager/src/types/types.ts index fd45e55ba2..39418fa9d3 100644 --- a/plugins/git-release-manager/src/types/types.ts +++ b/plugins/git-release-manager/src/types/types.ts @@ -14,21 +14,26 @@ * limitations under the License. */ -export type ComponentConfig = { +import { UseCreateReleaseCandidate } from '../features/CreateReleaseCandidate/hooks/useCreateReleaseCandidate'; +import { UsePatch } from '../features/Patch/hooks/usePatch'; +import { UsePromoteRc } from '../features/PromoteRc/hooks/usePromoteRc'; + +export type ComponentConfig = { omit?: boolean; - onSuccess?: (args: Args) => Promise | void; + onSuccess?: (args: OnSuccessArgs) => Promise | void; }; -interface CreateRcOnSuccessArgs { - gitReleaseUrl: string; - gitReleaseName: string | null; +export interface CreateRcOnSuccessArgs { + input: Omit; comparisonUrl: string; - previousTag?: string; createdTag: string; + gitReleaseName: string | null; + gitReleaseUrl: string; + previousTag?: string; } -export type ComponentConfigCreateRc = ComponentConfig; -interface PromoteRcOnSuccessArgs { +export interface PromoteRcOnSuccessArgs { + input: Omit; gitReleaseUrl: string; gitReleaseName: string | null; previousTagUrl: string; @@ -36,9 +41,9 @@ interface PromoteRcOnSuccessArgs { updatedTagUrl: string; updatedTag: string; } -export type ComponentConfigPromoteRc = ComponentConfig; -interface PatchOnSuccessArgs { +export interface PatchOnSuccessArgs { + input: Omit; updatedReleaseUrl: string; updatedReleaseName: string | null; previousTag: string; @@ -46,7 +51,6 @@ interface PatchOnSuccessArgs { patchCommitUrl: string; patchCommitMessage: string; } -export type ComponentConfigPatch = ComponentConfig; export interface ResponseStep { message: string | React.ReactNode; diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 383f880f2b..d85d1e53fe 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/integration": "^0.5.8", "@backstage/plugin-catalog-react": "^0.3.0", @@ -51,10 +51,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/github-deployments/package.json index 07973b1a03..9561083063 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/integration": "^0.5.8", @@ -38,10 +38,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index 246a703d95..e7e45ee2a6 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -31,7 +31,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^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", @@ -43,10 +43,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/graphiql/package.json index c289761bc3..46f44cdcf4 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -31,7 +31,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^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", @@ -44,10 +44,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/ilert/package.json index e5bde7eca7..01a8e7b013 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", @@ -38,10 +38,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md new file mode 100644 index 0000000000..8f2a4bc576 --- /dev/null +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -0,0 +1,10 @@ +# @backstage/plugin-jenkins-backend + +## 0.1.2 + +### Patch Changes + +- eee05803a: Update `@backstage/backend-common` to `^0.8.6` +- Updated dependencies + - @backstage/catalog-client@0.3.17 + - @backstage/backend-common@0.8.7 diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 408d714aaa..6f7beb9444 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-jenkins-backend", - "version": "0.1.1", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,8 +21,8 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.8.5s", - "@backstage/catalog-client": "^0.3.16", + "@backstage/backend-common": "^0.8.7", + "@backstage/catalog-client": "^0.3.17", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@types/express": "^4.17.6", @@ -34,7 +34,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.7.3", + "@backstage/cli": "^0.7.5", "@types/jenkins": "^0.23.1", "@types/supertest": "^2.0.8", "msw": "^0.29.0", diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index e4f3c6e9d8..6030beee8e 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -47,10 +47,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^13.1.8", diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 3e74e9e374..a7328b0c0c 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -34,10 +34,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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 7925c8bf4e..b5870c43e3 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-kubernetes-backend +## 0.3.11 + +### Patch Changes + +- 5bd57f8f5: Support assume role on kubernetes api configuration for AWS. +- Updated dependencies + - @backstage/backend-common@0.8.7 + ## 0.3.10 ### Patch Changes diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 1592f20880..72d80050d8 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -10,6 +10,14 @@ import { KubernetesFetchError } from '@backstage/plugin-kubernetes-common'; import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { Logger as Logger_2 } from 'winston'; +// Warning: (ae-missing-release-tag) "AWSClusterDetails" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AWSClusterDetails extends ClusterDetails { + // (undocumented) + assumeRole?: string; +} + // Warning: (ae-missing-release-tag) "ClusterDetails" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -53,6 +61,11 @@ export interface FetchResponseWrapper { responses: FetchResponse[]; } +// Warning: (ae-missing-release-tag) "GKEClusterDetails" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface GKEClusterDetails extends ClusterDetails {} + // Warning: (ae-missing-release-tag) "KubernetesClustersSupplier" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -107,7 +120,11 @@ export const makeRouter: ( // @public (undocumented) export interface ObjectFetchParams { // (undocumented) - clusterDetails: ClusterDetails; + clusterDetails: + | AWSClusterDetails + | GKEClusterDetails + | ServiceAccountClusterDetails + | ClusterDetails; // (undocumented) customResources: CustomResource[]; // (undocumented) @@ -130,6 +147,11 @@ export interface RouterOptions { logger: Logger_2; } +// Warning: (ae-missing-release-tag) "ServiceAccountClusterDetails" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ServiceAccountClusterDetails extends ClusterDetails {} + // Warning: (ae-missing-release-tag) "ServiceLocatorMethod" 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 6bc7382f54..b76fb0a442 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.10", + "version": "0.3.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,7 +31,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.8.6", + "@backstage/backend-common": "^0.8.7", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@backstage/plugin-kubernetes-common": "^0.1.2", @@ -53,9 +53,11 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.7.4", + "@backstage/cli": "^0.7.5", "@types/aws4": "^1.5.1", - "supertest": "^6.1.3" + "supertest": "^6.1.3", + "aws-sdk-mock": "^5.2.1", + "bdd-lazy-var": "^2.6.0" }, "files": [ "dist", diff --git a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts index ac4a742828..1642ca5580 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts @@ -97,4 +97,48 @@ describe('ConfigClusterLocator', () => { }, ]); }); + + it('one aws cluster with assumeRole and one without', async () => { + const config: Config = new ConfigReader({ + clusters: [ + { + name: 'cluster1', + serviceAccountToken: 'token', + url: 'http://localhost:8080', + authProvider: 'aws', + skipTLSVerify: false, + }, + { + assumeRole: 'SomeRole', + name: 'cluster2', + url: 'http://localhost:8081', + authProvider: 'aws', + skipTLSVerify: true, + }, + ], + }); + + const sut = ConfigClusterLocator.fromConfig(config); + + const result = await sut.getClusters(); + + expect(result).toStrictEqual([ + { + assumeRole: undefined, + name: 'cluster1', + serviceAccountToken: 'token', + url: 'http://localhost:8080', + authProvider: 'aws', + skipTLSVerify: false, + }, + { + assumeRole: 'SomeRole', + name: 'cluster2', + serviceAccountToken: undefined, + url: 'http://localhost:8081', + authProvider: 'aws', + skipTLSVerify: true, + }, + ]); + }); }); diff --git a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts index 268cca0193..2899445b2a 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts @@ -29,13 +29,32 @@ export class ConfigClusterLocator implements KubernetesClustersSupplier { // is required if authProvider is serviceAccount return new ConfigClusterLocator( config.getConfigArray('clusters').map(c => { - return { + const authProvider = c.getString('authProvider'); + const clusterDetails = { name: c.getString('name'), url: c.getString('url'), serviceAccountToken: c.getOptionalString('serviceAccountToken'), skipTLSVerify: c.getOptionalBoolean('skipTLSVerify') ?? false, - authProvider: c.getString('authProvider'), + authProvider: authProvider, }; + + switch (authProvider) { + case 'google': { + return clusterDetails; + } + case 'aws': { + const assumeRole = c.getOptionalString('assumeRole'); + return { assumeRole, ...clusterDetails }; + } + case 'serviceAccount': { + return clusterDetails; + } + default: { + throw new Error( + `authProvider "${authProvider}" has no config associated with it`, + ); + } + } }), ); } diff --git a/plugins/kubernetes-backend/src/cluster-locator/GkeClusterLocator.ts b/plugins/kubernetes-backend/src/cluster-locator/GkeClusterLocator.ts index 92212d0224..3cc6c216ae 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/GkeClusterLocator.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/GkeClusterLocator.ts @@ -16,7 +16,7 @@ import { Config } from '@backstage/config'; import * as container from '@google-cloud/container'; -import { ClusterDetails, KubernetesClustersSupplier } from '../types/types'; +import { GKEClusterDetails, KubernetesClustersSupplier } from '../types/types'; type GkeClusterLocatorOptions = { projectId: string; @@ -49,7 +49,7 @@ export class GkeClusterLocator implements KubernetesClustersSupplier { ); } - async getClusters(): Promise { + async getClusters(): Promise { const { projectId, region, skipTLSVerify } = this.options; const request = { parent: `projects/${projectId}/locations/${region}`, diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts index 348ad541d5..9060ce9239 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts @@ -14,15 +14,58 @@ * limitations under the License. */ import AWS from 'aws-sdk'; +import AWSMock from 'aws-sdk-mock'; import { AwsIamKubernetesAuthTranslator } from './AwsIamKubernetesAuthTranslator'; +import { get, def } from 'bdd-lazy-var'; describe('AwsIamKubernetesAuthTranslator tests', () => { + let role: any = undefined; + const credentials: any = { + accessKeyId: 'bloop', + secretAccessKey: 'omg-so-secret', + sessionToken: 'token', + }; + + let assumeResponse: any = { + Credentials: { + AccessKeyId: credentials.accessKeyId, + SecretAccessKey: credentials.secretAccessKey, + SessionToken: credentials.sessionToken, + }, + }; + + let credentialsResponse: any = new AWS.Credentials(credentials); + + AWSMock.setSDKInstance(AWS); + beforeEach(() => { jest.resetAllMocks(); }); - it('returns a signed url for aws credentials', async () => { + + afterAll(() => { + jest.resetAllMocks(); + }); + + def('subject', () => { + AWSMock.mock('STS', 'assumeRole', (_params: any, callback: Function) => { + callback(null, assumeResponse); + }); + const authTranslator = new AwsIamKubernetesAuthTranslator(); + jest + .spyOn(authTranslator, 'awsGetCredentials') + .mockImplementation(async () => credentialsResponse); + + return authTranslator.decorateClusterDetailsWithAuth({ + assumeRole: role, + name: 'test-cluster', + url: '', + authProvider: 'aws', + }); + }); + + it('returns a signed url for aws credentials', async () => { // These credentials are not real. // Pulled from example in docs: https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html AWS.config.credentials = new AWS.Credentials( @@ -30,24 +73,47 @@ describe('AwsIamKubernetesAuthTranslator tests', () => { 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', ); - const clusterDetails = await authTranslator.decorateClusterDetailsWithAuth({ - name: 'test-cluster', - url: '', - authProvider: 'aws', - }); - expect(clusterDetails.serviceAccountToken).toBeDefined(); + const subject = await get('subject'); + expect(subject.serviceAccountToken).toBeDefined(); }); - it('throws when unable to get aws credentials', async () => { - AWS.config.credentials = undefined; - const authTranslator = new AwsIamKubernetesAuthTranslator(); - const promise = authTranslator.decorateClusterDetailsWithAuth({ - name: 'test-cluster', - url: '', - authProvider: 'aws', - }); - await expect(promise).rejects.toThrow( - 'Could not load credentials from any providers', + describe('When the role is assumed', () => { + // These credentials are not real. + // Pulled from example in docs: https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html + AWS.config.credentials = new AWS.Credentials( + 'AKIAIOSFODNN7EXAMPLE', + 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', ); + role = 'SomeRole'; + + describe('When the role is valid', () => { + it('returns a signed url for aws credentials', async () => { + const subject = await get('subject'); + expect(subject.serviceAccountToken).toBeDefined(); + }); + }); + + describe('When the role is invalid', () => { + it('returns the original AWS credentials', async () => { + assumeResponse = undefined; + await expect(get('subject')).rejects.toThrow(/Unable to assume role:/); + }); + }); + }); + + describe('When no creds are returned from AWS', () => { + it('throws unable to get aws credentials', async () => { + credentialsResponse = new Error(); + await expect(get('subject')).rejects.toThrow('No AWS credentials found.'); + }); + }); + + describe('When invalid creds are returned from AWS', () => { + it('throws credentials are invalid to get aws credentials', async () => { + credentialsResponse = new AWS.Credentials(credentialsResponse); + await expect(get('subject')).rejects.toThrow( + 'Invalid AWS credentials found.', + ); + }); }); }); diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts index 0909926d0d..101bed32a3 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts @@ -15,7 +15,7 @@ */ import AWS, { Credentials } from 'aws-sdk'; import { sign } from 'aws4'; -import { ClusterDetails } from '../types/types'; +import { AWSClusterDetails } from '../types/types'; import { KubernetesAuthTranslator } from './types'; const base64 = (str: string) => @@ -29,23 +29,78 @@ const pipe = (fns: ReadonlyArray) => (thing: string): string => const removePadding = replace(/=+$/, ''); const makeUrlSafe = pipe([replace('+', '-'), replace('/', '_')]); +type SigningCreds = { + accessKeyId: string | undefined; + secretAccessKey: string | undefined; + sessionToken: string | undefined; +}; + export class AwsIamKubernetesAuthTranslator implements KubernetesAuthTranslator { - async getBearerToken(clusterName: string): Promise { - const credentials = await new Promise((resolve, reject) => { + validCredentials(creds: SigningCreds): boolean { + return ((creds?.accessKeyId && + creds?.secretAccessKey && + creds?.sessionToken) as unknown) as boolean; + } + + awsGetCredentials = async (): Promise => { + return new Promise((resolve, reject) => { AWS.config.getCredentials(err => { if (err) { - reject(err); - } else { - resolve(AWS.config.credentials); + return reject(err); } + + return resolve(AWS.config.credentials as Credentials); }); }); + }; + + async getCredentials(assumeRole: string | undefined): Promise { + return new Promise(async (resolve, reject) => { + const awsCreds = await this.awsGetCredentials(); + + if (!(awsCreds instanceof Credentials)) + return reject(Error('No AWS credentials found.')); + + let creds: SigningCreds = { + accessKeyId: awsCreds.accessKeyId, + secretAccessKey: awsCreds.secretAccessKey, + sessionToken: awsCreds.sessionToken, + }; + + if (!this.validCredentials(creds)) + return reject(Error('Invalid AWS credentials found.')); + if (!assumeRole) return resolve(creds); + + try { + const params = { + RoleArn: assumeRole, + RoleSessionName: 'backstage-login', + }; + const assumedRole = await new AWS.STS().assumeRole(params).promise(); + + if (!assumedRole.Credentials) { + throw new Error(`No credentials returned for role ${assumeRole}`); + } + + creds = { + accessKeyId: assumedRole.Credentials.AccessKeyId, + secretAccessKey: assumedRole.Credentials.SecretAccessKey, + sessionToken: assumedRole.Credentials.SessionToken, + }; + } catch (e) { + console.warn(`There was an error assuming the role: ${e}`); + return reject(Error(`Unable to assume role: ${e}`)); + } + return resolve(creds); + }); + } + async getBearerToken( + clusterName: string, + assumeRole: string | undefined, + ): Promise { + const credentials = await this.getCredentials(assumeRole); - if (!(credentials instanceof Credentials)) { - throw new Error('no AWS credentials found.'); - } - await credentials.getPromise(); const request = { host: `sts.amazonaws.com`, path: `/?Action=GetCallerIdentity&Version=2011-06-15&X-Amz-Expires=60`, @@ -54,11 +109,8 @@ export class AwsIamKubernetesAuthTranslator }, signQuery: true, }; - const signedRequest = sign(request, { - accessKeyId: credentials.accessKeyId, - secretAccessKey: credentials.secretAccessKey, - sessionToken: credentials.sessionToken, - }); + + const signedRequest = sign(request, credentials); return pipe([ (signed: any) => `https://${signed.host}${signed.path}`, @@ -70,15 +122,16 @@ export class AwsIamKubernetesAuthTranslator } async decorateClusterDetailsWithAuth( - clusterDetails: ClusterDetails, - ): Promise { - const clusterDetailsWithAuthToken: ClusterDetails = Object.assign( + clusterDetails: AWSClusterDetails, + ): Promise { + const clusterDetailsWithAuthToken: AWSClusterDetails = Object.assign( {}, clusterDetails, ); clusterDetailsWithAuthToken.serviceAccountToken = await this.getBearerToken( clusterDetails.name, + clusterDetails.assumeRole, ); return clusterDetailsWithAuthToken; } diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts index 02a7f314af..eacba4d3e1 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/GoogleKubernetesAuthTranslator.ts @@ -15,16 +15,16 @@ */ import { KubernetesAuthTranslator } from './types'; -import { ClusterDetails } from '../types/types'; +import { GKEClusterDetails } from '../types/types'; import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export class GoogleKubernetesAuthTranslator implements KubernetesAuthTranslator { async decorateClusterDetailsWithAuth( - clusterDetails: ClusterDetails, + clusterDetails: GKEClusterDetails, requestBody: KubernetesRequestBody, - ): Promise { - const clusterDetailsWithAuthToken: ClusterDetails = Object.assign( + ): Promise { + const clusterDetailsWithAuthToken: GKEClusterDetails = Object.assign( {}, clusterDetails, ); diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/ServiceAccountKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/ServiceAccountKubernetesAuthTranslator.ts index c433abf4de..1c3add3c0d 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/ServiceAccountKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/ServiceAccountKubernetesAuthTranslator.ts @@ -15,18 +15,18 @@ */ import { KubernetesAuthTranslator } from './types'; -import { ClusterDetails } from '../types/types'; +import { ServiceAccountClusterDetails } from '../types/types'; import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; export class ServiceAccountKubernetesAuthTranslator implements KubernetesAuthTranslator { async decorateClusterDetailsWithAuth( - clusterDetails: ClusterDetails, + clusterDetails: ServiceAccountClusterDetails, // To ignore TS6133 linting error where it detects 'requestBody' is declared but its value is never read. // @ts-ignore-start requestBody: KubernetesRequestBody, // eslint-disable-line @typescript-eslint/no-unused-vars // @ts-ignore-end - ): Promise { + ): Promise { return clusterDetails; } } diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index c6e1668a5a..6409229968 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -27,7 +27,11 @@ export interface CustomResource { export interface ObjectFetchParams { serviceId: string; - clusterDetails: ClusterDetails; + clusterDetails: + | AWSClusterDetails + | GKEClusterDetails + | ServiceAccountClusterDetails + | ClusterDetails; objectTypesToFetch: Set; labelSelector: string; customResources: CustomResource[]; @@ -77,3 +81,9 @@ export interface ClusterDetails { serviceAccountToken?: string | undefined; skipTLSVerify?: boolean; } + +export interface GKEClusterDetails extends ClusterDetails {} +export interface ServiceAccountClusterDetails extends ClusterDetails {} +export interface AWSClusterDetails extends ClusterDetails { + assumeRole?: string; +} diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 2319f08087..ac9675bcf7 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -32,7 +32,7 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^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", @@ -50,10 +50,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/lighthouse/package.json index f66ea35cff..8ceaa35d20 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -33,7 +33,7 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.4", - "@backstage/core-components": "^0.1.5", + "@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", @@ -47,10 +47,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/newrelic/package.json index e3fa37faeb..e927cf6eef 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -31,7 +31,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^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", @@ -42,10 +42,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/org/package.json index 2fa17a28de..f721675584 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -35,10 +35,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/pagerduty/package.json index 2f02cce9b3..2a5c086e50 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -47,10 +47,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/register-component/package.json index d763924b69..c9a4ca161b 100644 --- a/plugins/register-component/package.json +++ b/plugins/register-component/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -46,10 +46,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/rollbar/package.json index 92a338079c..f95bba8076 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 39d68a6f1d..8e55ca4b59 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-scaffolder-backend +## 0.14.1 + +### Patch Changes + +- c73f53bc2: Add new built-in action ci:github-actions-dispatch +- 7cea90592: - Move out the `cookiecutter` templating to its own module that is depended on by the `scaffolder-backend` plugin. No breaking change yet, but we will drop first class support for `cookiecutter` in the future and it will become an opt-in feature. +- eb740ee24: Moved sample software templates to the [backstage/software-templates](https://github.com/backstage/software-templates) repository. If you previously referenced the sample templates straight from `scaffolder-backend` plugin in the main [backstage/backstage](https://github.com/backstage/backstage) repository in your `app-config.yaml`, these references will need to be updated. + + See https://github.com/backstage/software-templates + +- Updated dependencies + - @backstage/catalog-client@0.3.17 + - @backstage/backend-common@0.8.7 + ## 0.14.0 ### Minor Changes diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 0e7a25534c..baf85bce63 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -107,6 +107,13 @@ export const createFilesystemDeleteAction: () => TemplateAction; // @public (undocumented) export const createFilesystemRenameAction: () => TemplateAction; +// Warning: (ae-missing-release-tag) "createGithubActionsDispatchAction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function createGithubActionsDispatchAction(options: { + integrations: ScmIntegrationRegistry; +}): TemplateAction; + // Warning: (ae-missing-release-tag) "createPublishAzureAction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index e44a22403c..490c7cc0d2 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend", - "version": "0.14.0", + "version": "0.14.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,8 +29,8 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.8.6", - "@backstage/catalog-client": "^0.3.16", + "@backstage/backend-common": "^0.8.7", + "@backstage/catalog-client": "^0.3.17", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@backstage/errors": "^0.1.1", @@ -66,8 +66,8 @@ "yaml": "^1.10.0" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/test-utils": "^0.1.15", "@types/command-exists": "^1.2.0", "@types/fs-extra": "^9.0.1", "@types/git-url-parse": "^9.0.0", diff --git a/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts b/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts index 75cdfc208f..7505c3a30e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts @@ -15,6 +15,11 @@ */ export const mockGithubClient = { + rest: { + actions: { + createWorkflowDispatch: jest.fn(), + }, + }, repos: { createInOrg: jest.fn(), createForAuthenticatedUser: jest.fn(), diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts index ae5a7d0697..b3d1460270 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts @@ -37,6 +37,7 @@ import { createPublishGithubPullRequestAction, createPublishGitlabAction, } from './publish'; +import { createGithubActionsDispatchAction } from './github'; export const createBuiltinActions = (options: { reader: UrlReader; @@ -91,5 +92,8 @@ export const createBuiltinActions = (options: { createCatalogWriteAction(), createFilesystemDeleteAction(), createFilesystemRenameAction(), + createGithubActionsDispatchAction({ + integrations, + }), ]; }; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubActionsDispatch.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubActionsDispatch.test.ts new file mode 100644 index 0000000000..29e4338a39 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubActionsDispatch.test.ts @@ -0,0 +1,117 @@ +/* + * 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. + */ + +jest.mock('@octokit/rest'); + +import { createGithubActionsDispatchAction } from './githubActionsDispatch'; +import { ScmIntegrations } from '@backstage/integration'; +import { ConfigReader } from '@backstage/config'; +import { getVoidLogger } from '@backstage/backend-common'; +import { PassThrough } from 'stream'; + +describe('github:actions:dispatch', () => { + const config = new ConfigReader({ + integrations: { + github: [ + { host: 'github.com', token: 'tokenlols' }, + { host: 'ghe.github.com' }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createGithubActionsDispatchAction({ integrations }); + + const mockContext = { + input: { + repoUrl: 'github.com?repo=repo&owner=owner', + workflowId: 'a-workflow-id', + branchOrTagName: 'main', + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + + const { mockGithubClient } = require('@octokit/rest'); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('should throw an error when the repoUrl is not well formed', async () => { + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: 'github.com?repo=bob' }, + }), + ).rejects.toThrow(/missing owner/); + + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: 'github.com?owner=owner' }, + }), + ).rejects.toThrow(/missing repo/); + }); + + it('should throw if there is no integration config provided', async () => { + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: 'missing.com?repo=bob&owner=owner' }, + }), + ).rejects.toThrow(/No matching integration configuration/); + }); + + it('should throw if there is no token in the integration config that is returned', async () => { + await expect( + action.handler({ + ...mockContext, + input: { + repoUrl: 'ghe.github.com?repo=bob&owner=owner', + }, + }), + ).rejects.toThrow(/No token available for host/); + }); + + it('should call the githubApis for creating WorkflowDispatch', async () => { + mockGithubClient.rest.actions.createWorkflowDispatch.mockResolvedValue({ + data: { + foo: 'bar', + }, + }); + + const repoUrl = 'github.com?repo=repo&owner=owner'; + const workflowId = 'dispatch_workflow'; + const branchOrTagName = 'main'; + const ctx = Object.assign({}, mockContext, { + input: { repoUrl, workflowId, branchOrTagName }, + }); + await action.handler(ctx); + + expect( + mockGithubClient.rest.actions.createWorkflowDispatch, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repo', + workflow_id: workflowId, + ref: branchOrTagName, + }); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubActionsDispatch.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubActionsDispatch.ts new file mode 100644 index 0000000000..7f48a155ed --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubActionsDispatch.ts @@ -0,0 +1,115 @@ +/* + * 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 { InputError } from '@backstage/errors'; +import { + GithubCredentialsProvider, + ScmIntegrationRegistry, +} from '@backstage/integration'; +import { Octokit } from '@octokit/rest'; +import { parseRepoUrl } from '../publish/util'; +import { createTemplateAction } from '../../createTemplateAction'; + +export function createGithubActionsDispatchAction(options: { + integrations: ScmIntegrationRegistry; +}) { + const { integrations } = options; + + const credentialsProviders = new Map( + integrations.github.list().map(integration => { + const provider = GithubCredentialsProvider.create(integration.config); + return [integration.config.host, provider]; + }), + ); + + return createTemplateAction<{ + repoUrl: string; + workflowId: string; + branchOrTagName: string; + }>({ + id: 'github:actions:dispatch', + description: + 'Dispatches a GitHub Action workflow for a given branch or tag', + schema: { + input: { + type: 'object', + required: ['repoUrl', 'workflowId', 'branchOrTagName'], + properties: { + repoUrl: { + title: 'Repository Location', + description: `Accepts the format 'github.com?repo=reponame&owner=owner' where 'reponame' is the new repository name and 'owner' is an organization or username`, + type: 'string', + }, + workflowId: { + title: 'Workflow ID', + description: 'The GitHub Action Workflow filename', + type: 'string', + }, + branchOrTagName: { + title: 'Branch or Tag name', + description: + 'The git branch or tag name used to dispatch the workflow', + type: 'string', + }, + }, + }, + }, + async handler(ctx) { + const { repoUrl, workflowId, branchOrTagName } = ctx.input; + + const { owner, repo, host } = parseRepoUrl(repoUrl); + + ctx.logger.info( + `Dispatching workflow ${workflowId} for repo ${repoUrl} on ${branchOrTagName}`, + ); + + const credentialsProvider = credentialsProviders.get(host); + const integrationConfig = integrations.github.byHost(host); + + if (!credentialsProvider || !integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const { token } = await credentialsProvider.getCredentials({ + url: `https://${host}/${encodeURIComponent(owner)}/${encodeURIComponent( + repo, + )}`, + }); + + if (!token) { + throw new InputError( + `No token available for host: ${host}, with owner ${owner}, and repo ${repo}`, + ); + } + + const client = new Octokit({ + auth: token, + baseUrl: integrationConfig.config.apiBaseUrl, + previews: ['nebula-preview'], + }); + + await client.rest.actions.createWorkflowDispatch({ + owner, + repo, + workflow_id: workflowId, + ref: branchOrTagName, + }); + + ctx.logger.info(`Workflow ${workflowId} dispatched successfully`); + }, + }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/index.ts new file mode 100644 index 0000000000..50abd2c3dc --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/index.ts @@ -0,0 +1,17 @@ +/* + * 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 { createGithubActionsDispatchAction } from './githubActionsDispatch'; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts index 2a583f369a..2265f9b4f7 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts @@ -20,6 +20,7 @@ export * from './debug'; export * from './fetch'; export * from './filesystem'; export * from './publish'; +export * from './github'; export { createFetchCookiecutterAction } from '@backstage/plugin-scaffolder-backend-module-cookiecutter'; export { runCommand } from './helpers'; diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 78f9c269d9..edb2f44d94 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -33,7 +33,7 @@ "@backstage/catalog-client": "^0.3.16", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/integration": "^0.5.8", @@ -63,10 +63,10 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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 af6cd39e94..0e19f854bd 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search +## 0.4.4 + +### Patch Changes + +- 9266b80ab: Adding a type filter to new search +- Updated dependencies + - @backstage/core-components@0.1.6 + - @backstage/plugin-catalog-react@0.3.1 + ## 0.4.3 ### Patch Changes diff --git a/plugins/search/api-report.md b/plugins/search/api-report.md index 505a8989b6..525136713d 100644 --- a/plugins/search/api-report.md +++ b/plugins/search/api-report.md @@ -143,6 +143,17 @@ export const SearchResult: ({ children: (results: { results: SearchResult_2[] }) => JSX.Element; }) => JSX.Element; +// Warning: (ae-forgotten-export) The symbol "SearchTypeProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "SearchType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const SearchType: ({ + values, + className, + name, + defaultValue, +}: SearchTypeProps) => JSX.Element; + // Warning: (ae-missing-release-tag) "SidebarSearch" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/search/package.json b/plugins/search/package.json index 9f394f616b..a6ca45497a 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search", - "version": "0.4.3", + "version": "0.4.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,10 +31,10 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", - "@backstage/plugin-catalog-react": "^0.3.0", + "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/search-common": "^0.1.2", "@backstage/theme": "^0.2.8", "@material-ui/core": "^4.11.0", @@ -49,10 +49,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", "@testing-library/react-hooks": "^3.4.2", diff --git a/plugins/search/src/components/SearchType/SearchType.test.tsx b/plugins/search/src/components/SearchType/SearchType.test.tsx new file mode 100644 index 0000000000..1ca032e41d --- /dev/null +++ b/plugins/search/src/components/SearchType/SearchType.test.tsx @@ -0,0 +1,231 @@ +/* + * 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 React from 'react'; +import { screen, render, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { SearchType } from './SearchType'; + +import { SearchContextProvider } from '../SearchContext'; +import { useApi } from '@backstage/core-plugin-api'; + +jest.mock('@backstage/core-plugin-api', () => ({ + ...jest.requireActual('@backstage/core-plugin-api'), + useApi: jest.fn().mockReturnValue({}), +})); + +describe('SearchType', () => { + const initialState = { + term: '', + filters: {}, + types: [], + pageCursor: '', + }; + + const name = 'field'; + const values = ['value1', 'value2']; + const typeValues = ['preselected']; + + const query = jest.fn().mockResolvedValue({}); + (useApi as jest.Mock).mockReturnValue({ query: query }); + + afterAll(() => { + jest.resetAllMocks(); + }); + + describe('Type Filter', () => { + it('Renders field name and values when provided as props', async () => { + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByText(name)).toBeInTheDocument(); + }); + + userEvent.click(screen.getByRole('button')); + + await waitFor(() => { + expect(screen.getByRole('listbox')).toBeInTheDocument(); + }); + + expect( + screen.getByRole('option', { name: values[0] }), + ).toBeInTheDocument(); + expect( + screen.getByRole('option', { name: values[1] }), + ).toBeInTheDocument(); + }); + + it('Renders correctly based on type filter state', async () => { + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByText(name)).toBeInTheDocument(); + }); + + userEvent.click(screen.getByRole('button')); + + await waitFor(() => { + expect(screen.getByRole('listbox')).toBeInTheDocument(); + }); + + expect(screen.getByRole('option', { name: values[0] })).toHaveAttribute( + 'aria-selected', + 'true', + ); + expect( + screen.getByRole('option', { name: values[1] }), + ).not.toHaveAttribute('aria-selected'); + expect(screen.getByRole('option', { name: 'All' })).not.toHaveAttribute( + 'aria-selected', + ); + }); + + it('Renders correctly based on type filter defaultValue', async () => { + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByText(name)).toBeInTheDocument(); + }); + + userEvent.click(screen.getByRole('button')); + + await waitFor(() => { + expect(screen.getByRole('listbox')).toBeInTheDocument(); + }); + + expect(screen.getByRole('option', { name: values[0] })).toHaveAttribute( + 'aria-selected', + 'true', + ); + expect( + screen.getByRole('option', { name: values[1] }), + ).not.toHaveAttribute('aria-selected'); + expect(screen.getByRole('option', { name: 'All' })).not.toHaveAttribute( + 'aria-selected', + ); + }); + + it('Selecting a value sets type filter state', async () => { + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByText(name)).toBeInTheDocument(); + }); + + const button = screen.getByRole('button'); + + userEvent.click(button); + + await waitFor(() => { + expect(screen.getByRole('listbox')).toBeInTheDocument(); + }); + + userEvent.click(screen.getByRole('option', { name: values[0] })); + + await waitFor(() => { + expect(query).toHaveBeenLastCalledWith( + expect.objectContaining({ + types: [values[0]], + }), + ); + }); + + userEvent.click(button); + + await waitFor(() => { + expect(screen.getByRole('listbox')).toBeInTheDocument(); + }); + + userEvent.click(screen.getByRole('option', { name: 'All' })); + + await waitFor(() => { + expect(query).toHaveBeenLastCalledWith( + expect.objectContaining({ + types: [], + }), + ); + }); + }); + + it('Selecting a value maintains unrelated filter state, selecting All defaults to default empty state', async () => { + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByText(name)).toBeInTheDocument(); + }); + + const button = screen.getByRole('button'); + + userEvent.click(button); + + await waitFor(() => { + expect(screen.getByRole('listbox')).toBeInTheDocument(); + }); + + userEvent.click(screen.getByRole('option', { name: values[0] })); + + await waitFor(() => { + expect(query).toHaveBeenLastCalledWith( + expect.objectContaining({ + types: [...typeValues, values[0]], + }), + ); + }); + + userEvent.click(button); + + await waitFor(() => { + expect(screen.getByRole('listbox')).toBeInTheDocument(); + }); + + userEvent.click(screen.getByRole('option', { name: 'All' })); + + await waitFor(() => { + expect(query).toHaveBeenLastCalledWith(expect.objectContaining([])); + }); + }); + }); +}); diff --git a/plugins/search/src/components/SearchType/SearchType.tsx b/plugins/search/src/components/SearchType/SearchType.tsx new file mode 100644 index 0000000000..6e57879064 --- /dev/null +++ b/plugins/search/src/components/SearchType/SearchType.tsx @@ -0,0 +1,110 @@ +/* + * 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 { useSearch } from '../SearchContext'; +import { useEffectOnce } from 'react-use'; +import React, { ChangeEvent } from 'react'; +import { + Chip, + FormControl, + InputLabel, + makeStyles, + MenuItem, + Select, +} from '@material-ui/core'; + +const useStyles = makeStyles({ + label: { + textTransform: 'capitalize', + }, + chips: { + display: 'flex', + flexWrap: 'wrap', + }, + chip: { + margin: 2, + }, +}); + +export type SearchTypeProps = { + className?: string; + name: string; + values?: string[]; + defaultValue?: string[] | string | null; +}; + +const SearchType = ({ + values = [], + className, + name, + defaultValue, +}: SearchTypeProps) => { + const classes = useStyles(); + const { types, setTypes } = useSearch(); + + useEffectOnce(() => { + if (defaultValue && Array.isArray(defaultValue)) { + setTypes(defaultValue); + } else if (defaultValue) { + setTypes([defaultValue]); + } + }); + + const handleChange = (e: ChangeEvent<{ value: unknown }>) => { + const value = e.target.value as string[]; + if (!value || value.includes('*')) { + setTypes([]); + } else { + setTypes(value.filter(it => it !== 'All')); + } + }; + + return ( + + + {name} + + + + ); +}; + +export { SearchType }; diff --git a/plugins/search/src/components/SearchType/index.ts b/plugins/search/src/components/SearchType/index.ts new file mode 100644 index 0000000000..400f3d2a46 --- /dev/null +++ b/plugins/search/src/components/SearchType/index.ts @@ -0,0 +1,17 @@ +/* + * 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 { SearchType } from './SearchType'; diff --git a/plugins/search/src/components/index.tsx b/plugins/search/src/components/index.tsx index 245c31598d..889eb36334 100644 --- a/plugins/search/src/components/index.tsx +++ b/plugins/search/src/components/index.tsx @@ -16,6 +16,7 @@ export * from './Filters'; export * from './SearchFilter'; +export * from './SearchType'; export * from './SearchBar'; export * from './SearchPage'; export * from './SearchResult'; diff --git a/plugins/search/src/index.ts b/plugins/search/src/index.ts index ecd6015b1c..f09ba739bd 100644 --- a/plugins/search/src/index.ts +++ b/plugins/search/src/index.ts @@ -32,6 +32,7 @@ export { useSearch, SearchPage as Router, SearchFilter, + SearchType, SearchFilterNext, SidebarSearch, } from './components'; diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index cfc10baf24..989a18a6d9 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -47,10 +47,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/shortcuts/package.json index b3b03c4205..293d71eeb9 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -20,7 +20,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^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", @@ -36,10 +36,10 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/sonarqube/package.json index 34e70fe1e1..a132da5702 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -48,10 +48,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/splunk-on-call/package.json index ed2ce923b0..d779df3f97 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@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", @@ -46,10 +46,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/tech-radar/package.json index 05b6689100..305061087b 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -30,7 +30,7 @@ "start": "backstage-cli plugin:serve" }, "dependencies": { - "@backstage/core-components": "^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", @@ -44,10 +44,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 85acec31f9..4acab08f26 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,101 @@ # @backstage/plugin-techdocs-backend +## 0.9.0 + +### Minor Changes + +- d32d01e5b: Improve the annotation `backstage.io/techdocs-ref: dir:` that links to a path that is relative to the source of the annotated entity. + This annotation works with the basic and the recommended flow, however, it will be most useful with the basic approach. + + This change remove the deprecation of the `dir` reference and provides first-class support for it. + In addition, this change removes the support of the deprecated `github`, `gitlab`, and `azure/api` locations from the `dir` reference preparer. + + #### Example Usage + + The annotation is convenient if the documentation is stored in the same location, i.e. the same git repository, as the `catalog-info.yaml`. + While it is still supported to add full URLs such as `backstage.io/techdocs-ref: url:https://...` for custom setups, documentation is mostly stored in the same repository as the entity definition. + By automatically resolving the target relative to the registration location of the entity, the configuration overhead for this default setup is minimized. + Since it leverages the `@backstage/integrations` package for the URL resolution, this is compatible with every supported source. + + Consider the following examples: + + 1. "I have a repository with a single `catalog-info.yaml` and a TechDocs page in the root folder!" + + ``` + https://github.com/backstage/example/tree/main/ + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Component + | > metadata: + | > name: example + | > annotations: + | > backstage.io/techdocs-ref: dir:. # -> same folder + | > spec: {} + |- docs/ + |- mkdocs.yml + ``` + + 2. "I have a repository with a single `catalog-info.yaml` and my TechDocs page in located in a folder!" + + ``` + https://bitbucket.org/my-owner/my-project/src/master/ + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Component + | > metadata: + | > name: example + | > annotations: + | > backstage.io/techdocs-ref: dir:./some-folder # -> subfolder + | > spec: {} + |- some-folder/ + |- docs/ + |- mkdocs.yml + ``` + + 3. "I have a mono repository that hosts multiple components!" + + ``` + https://dev.azure.com/organization/project/_git/repository + |- my-1st-module/ + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Component + | > metadata: + | > name: my-1st-module + | > annotations: + | > backstage.io/techdocs-ref: dir:. # -> same folder + | > spec: {} + |- docs/ + |- mkdocs.yml + |- my-2nd-module/ + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Component + | > metadata: + | > name: my-2nd-module + | > annotations: + | > backstage.io/techdocs-ref: dir:. # -> same folder + | > spec: {} + |- docs/ + |- mkdocs.yml + |- catalog-info.yaml + | > apiVersion: backstage.io/v1alpha1 + | > kind: Location + | > metadata: + | > name: example + | > spec: + | > targets: + | > - ./*/catalog-info.yaml + ``` + +### Patch Changes + +- 9266b80ab: Implements tech docs collator to retrieve and expose search indexes for entities that have tech docs configured +- Updated dependencies + - @backstage/techdocs-common@0.7.0 + - @backstage/catalog-client@0.3.17 + - @backstage/backend-common@0.8.7 + ## 0.8.7 ### Patch Changes diff --git a/plugins/techdocs-backend/api-report.md b/plugins/techdocs-backend/api-report.md index 3d1738cb12..f617b796aa 100644 --- a/plugins/techdocs-backend/api-report.md +++ b/plugins/techdocs-backend/api-report.md @@ -3,9 +3,12 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; +import { DocumentCollator } from '@backstage/search-common'; import express from 'express'; import { GeneratorBuilder } from '@backstage/techdocs-common'; +import { IndexableDocument } from '@backstage/search-common'; import { Knex } from 'knex'; import { Logger as Logger_2 } from 'winston'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; @@ -18,6 +21,54 @@ import { PublisherBase } from '@backstage/techdocs-common'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; +// Warning: (ae-missing-release-tag) "DefaultTechDocsCollator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class DefaultTechDocsCollator implements DocumentCollator { + constructor({ + discovery, + locationTemplate, + logger, + catalogClient, + parallelismLimit, + }: { + discovery: PluginEndpointDiscovery; + logger: Logger_2; + locationTemplate?: string; + catalogClient?: CatalogApi; + parallelismLimit?: number; + }); + // (undocumented) + protected applyArgsToFormat( + format: string, + args: Record, + ): string; + // (undocumented) + protected discovery: PluginEndpointDiscovery; + // (undocumented) + execute(): Promise; + // (undocumented) + protected locationTemplate: string; + // (undocumented) + readonly type: string; +} + +// Warning: (ae-missing-release-tag) "TechDocsDocument" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface TechDocsDocument extends IndexableDocument { + // (undocumented) + kind: string; + // (undocumented) + lifecycle: string; + // (undocumented) + name: string; + // (undocumented) + namespace: string; + // (undocumented) + owner: string; +} + export * from '@backstage/techdocs-common'; // (No @packageDocumentation comment for this package) diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 76aadc79cf..a6a4fbe46a 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-backend", - "version": "0.8.7", + "version": "0.9.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,12 +30,14 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.8.6", - "@backstage/catalog-client": "^0.3.16", + "@backstage/backend-common": "^0.8.7", + "@backstage/catalog-client": "^0.3.17", "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", "@backstage/errors": "^0.1.1", - "@backstage/techdocs-common": "^0.6.8", + "@backstage/integration": "^0.5.8", + "@backstage/search-common": "^0.1.2", + "@backstage/techdocs-common": "^0.7.0", "@types/express": "^4.17.6", "cross-fetch": "^3.0.6", "dockerode": "^3.2.1", @@ -43,10 +45,13 @@ "express-promise-router": "^4.1.0", "fs-extra": "9.1.0", "knex": "^0.95.1", + "lodash": "^4.17.21", + "p-limit": "^3.1.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.7.4", + "@backstage/cli": "^0.7.5", + "@backstage/test-utils": "^0.1.15", "@types/dockerode": "^3.2.1", "msw": "^0.29.0", "supertest": "^6.1.3" diff --git a/plugins/techdocs-backend/src/DocsBuilder/builder.ts b/plugins/techdocs-backend/src/DocsBuilder/builder.ts index 2cd6f57154..5327062233 100644 --- a/plugins/techdocs-backend/src/DocsBuilder/builder.ts +++ b/plugins/techdocs-backend/src/DocsBuilder/builder.ts @@ -20,6 +20,7 @@ import { } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { NotModifiedError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; import { GeneratorBase, GeneratorBuilder, @@ -43,6 +44,7 @@ type DocsBuilderArguments = { entity: Entity; logger: Logger; config: Config; + scmIntegrations: ScmIntegrationRegistry; logStream?: Writable; }; @@ -53,6 +55,7 @@ export class DocsBuilder { private entity: Entity; private logger: Logger; private config: Config; + private scmIntegrations: ScmIntegrationRegistry; private logStream: Writable | undefined; constructor({ @@ -62,6 +65,7 @@ export class DocsBuilder { entity, logger, config, + scmIntegrations, logStream, }: DocsBuilderArguments) { this.preparer = preparers.get(entity); @@ -70,6 +74,7 @@ export class DocsBuilder { this.entity = entity; this.logger = logger; this.config = config; + this.scmIntegrations = scmIntegrations; this.logStream = logStream; } @@ -166,7 +171,10 @@ export class DocsBuilder { path.join(tmpdirResolvedPath, 'techdocs-tmp-'), ); - const parsedLocationAnnotation = getLocationForEntity(this.entity); + const parsedLocationAnnotation = getLocationForEntity( + this.entity, + this.scmIntegrations, + ); await this.generator.run({ inputDir: preparedDir, outputDir, diff --git a/plugins/techdocs-backend/src/index.ts b/plugins/techdocs-backend/src/index.ts index 6d1e551629..e2a89237db 100644 --- a/plugins/techdocs-backend/src/index.ts +++ b/plugins/techdocs-backend/src/index.ts @@ -15,4 +15,5 @@ */ export { createRouter } from './service/router'; +export * from './search'; export * from '@backstage/techdocs-common'; diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.test.ts b/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.test.ts new file mode 100644 index 0000000000..618bb54d60 --- /dev/null +++ b/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.test.ts @@ -0,0 +1,149 @@ +/* + * 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 { + PluginEndpointDiscovery, + getVoidLogger, +} from '@backstage/backend-common'; +import { Entity } from '@backstage/catalog-model'; +import { DefaultTechDocsCollator } from './DefaultTechDocsCollator'; +import { msw } from '@backstage/test-utils'; +import { setupServer } from 'msw/node'; +import { rest } from 'msw'; + +const logger = getVoidLogger(); + +const mockSearchDocIndex = { + config: { + lang: ['en'], + min_search_length: 3, + prebuild_index: false, + separator: '[\\s\\-]+', + }, + docs: [ + { + location: '', + text: 'docs docs docs', + title: 'Home', + }, + { + location: 'local-development/', + text: 'Docs for first subtitle', + title: 'Local development', + }, + { + location: 'local-development/#development', + text: 'Docs for sub-subtitle', + title: 'Development', + }, + ], +}; + +const expectedEntities: Entity[] = [ + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'test-entity-with-docs', + description: 'Documented description', + annotations: { + 'backstage.io/techdocs-ref': './', + }, + }, + spec: { + type: 'dog', + lifecycle: 'experimental', + owner: 'someone', + }, + }, + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'test-entity', + description: 'The expected description', + }, + spec: { + type: 'some-type', + lifecycle: 'experimental', + }, + }, +]; + +describe('DefaultTechDocsCollator', () => { + let mockDiscoveryApi: jest.Mocked; + let collator: DefaultTechDocsCollator; + + const worker = setupServer(); + msw.setupDefaultHandlers(worker); + beforeEach(() => { + mockDiscoveryApi = { + getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'), + getExternalBaseUrl: jest.fn(), + }; + collator = new DefaultTechDocsCollator({ + discovery: mockDiscoveryApi, + logger, + }); + + worker.use( + rest.get( + 'http://test-backend/static/docs/default/Component/test-entity-with-docs/search/search_index.json', + (_, res, ctx) => res(ctx.status(200), ctx.json(mockSearchDocIndex)), + ), + rest.get('http://test-backend/entities', (_, res, ctx) => + res(ctx.status(200), ctx.json(expectedEntities)), + ), + ); + }); + + it('fetches from the configured catalog and tech docs services', async () => { + const documents = await collator.execute(); + expect(mockDiscoveryApi.getBaseUrl).toHaveBeenCalledWith('catalog'); + expect(mockDiscoveryApi.getBaseUrl).toHaveBeenCalledWith('techdocs'); + expect(documents).toHaveLength(mockSearchDocIndex.docs.length); + }); + + it('should create documents for each tech docs search index', async () => { + const documents = await collator.execute(); + const entity = expectedEntities[0]; + documents.forEach((document, idx) => { + expect(document).toMatchObject({ + title: mockSearchDocIndex.docs[idx].title, + location: `/docs/default/Component/${entity.metadata.name}/${mockSearchDocIndex.docs[idx].location}`, + text: mockSearchDocIndex.docs[idx].text, + namespace: 'default', + componentType: entity!.spec!.type, + lifecycle: entity!.spec!.lifecycle, + owner: '', + }); + }); + }); + + it('maps a returned entity with a custom locationTemplate', async () => { + // Provide an alternate location template. + collator = new DefaultTechDocsCollator({ + discovery: mockDiscoveryApi, + locationTemplate: '/software/:name', + logger, + }); + + const documents = await collator.execute(); + expect(documents[0]).toMatchObject({ + location: '/software/test-entity-with-docs', + }); + }); +}); diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.ts b/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.ts new file mode 100644 index 0000000000..7c176da9fb --- /dev/null +++ b/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.ts @@ -0,0 +1,149 @@ +/* + * 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 { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model'; +import { IndexableDocument, DocumentCollator } from '@backstage/search-common'; +import fetch from 'cross-fetch'; +import unescape from 'lodash/unescape'; +import { Logger } from 'winston'; +import pLimit from 'p-limit'; +import { CatalogApi, CatalogClient } from '@backstage/catalog-client'; + +interface MkSearchIndexDoc { + title: string; + text: string; + location: string; +} + +export interface TechDocsDocument extends IndexableDocument { + kind: string; + namespace: string; + name: string; + lifecycle: string; + owner: string; +} + +export class DefaultTechDocsCollator implements DocumentCollator { + protected discovery: PluginEndpointDiscovery; + protected locationTemplate: string; + private readonly logger: Logger; + private readonly catalogClient: CatalogApi; + private readonly parallelismLimit: number; + public readonly type: string = 'techdocs'; + + constructor({ + discovery, + locationTemplate, + logger, + catalogClient, + parallelismLimit = 10, + }: { + discovery: PluginEndpointDiscovery; + logger: Logger; + locationTemplate?: string; + catalogClient?: CatalogApi; + parallelismLimit?: number; + }) { + this.discovery = discovery; + this.locationTemplate = + locationTemplate || '/docs/:namespace/:kind/:name/:path'; + this.logger = logger; + this.catalogClient = + catalogClient || new CatalogClient({ discoveryApi: discovery }); + this.parallelismLimit = parallelismLimit; + } + + async execute() { + const limit = pLimit(this.parallelismLimit); + const techDocsBaseUrl = await this.discovery.getBaseUrl('techdocs'); + const entities = await this.catalogClient.getEntities({ + fields: [ + 'kind', + 'namespace', + 'metadata.annotations', + 'metadata.name', + 'metadata.namespace', + 'spec.type', + 'spec.lifecycle', + 'relations', + ], + }); + const docPromises = entities.items + .filter(it => it.metadata?.annotations?.['backstage.io/techdocs-ref']) + .map((entity: Entity) => + limit( + async (): Promise => { + const entityInfo = { + kind: entity.kind, + namespace: entity.metadata.namespace || 'default', + name: entity.metadata.name, + }; + + try { + const searchIndexResponse = await fetch( + DefaultTechDocsCollator.constructDocsIndexUrl( + techDocsBaseUrl, + entityInfo, + ), + ); + const searchIndex = await searchIndexResponse.json(); + + return searchIndex.docs.map((doc: MkSearchIndexDoc) => ({ + title: unescape(doc.title), + text: unescape(doc.text || ''), + location: this.applyArgsToFormat(this.locationTemplate, { + ...entityInfo, + path: doc.location, + }), + ...entityInfo, + componentType: entity.spec?.type?.toString() || 'other', + lifecycle: (entity.spec?.lifecycle as string) || '', + owner: + entity.relations?.find(r => r.type === RELATION_OWNED_BY) + ?.target?.name || '', + })); + } catch (e) { + this.logger.warn( + `Failed to retrieve tech docs search index for entity ${entityInfo.namespace}/${entityInfo.kind}/${entityInfo.name}`, + e, + ); + return []; + } + }, + ), + ); + return (await Promise.all(docPromises)).flat(); + } + + protected applyArgsToFormat( + format: string, + args: Record, + ): string { + let formatted = format; + for (const [key, value] of Object.entries(args)) { + formatted = formatted.replace(`:${key}`, value); + } + return formatted; + } + + private static constructDocsIndexUrl( + techDocsBaseUrl: string, + entityInfo: { kind: string; namespace: string; name: string }, + ) { + return `${techDocsBaseUrl}/static/docs/${entityInfo.namespace}/${entityInfo.kind}/${entityInfo.name}/search/search_index.json`; + } +} diff --git a/plugins/techdocs-backend/src/search/index.ts b/plugins/techdocs-backend/src/search/index.ts new file mode 100644 index 0000000000..74f348d769 --- /dev/null +++ b/plugins/techdocs-backend/src/search/index.ts @@ -0,0 +1,17 @@ +/* + * 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 { DefaultTechDocsCollator } from './DefaultTechDocsCollator'; +export type { TechDocsDocument } from './DefaultTechDocsCollator'; diff --git a/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts b/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts index 409dc6e128..ac60f3da3a 100644 --- a/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts +++ b/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts @@ -19,6 +19,7 @@ import { PluginEndpointDiscovery, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; import { GeneratorBuilder, PreparerBuilder, @@ -69,6 +70,7 @@ describe('DocsSynchronizer', () => { publisher, config: new ConfigReader({}), logger: getVoidLogger(), + scmIntegrations: ScmIntegrations.fromConfig(new ConfigReader({})), }); }); diff --git a/plugins/techdocs-backend/src/service/DocsSynchronizer.ts b/plugins/techdocs-backend/src/service/DocsSynchronizer.ts index 9b51381748..463b895564 100644 --- a/plugins/techdocs-backend/src/service/DocsSynchronizer.ts +++ b/plugins/techdocs-backend/src/service/DocsSynchronizer.ts @@ -17,6 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { NotFoundError } from '@backstage/errors'; +import { ScmIntegrationRegistry } from '@backstage/integration'; import { GeneratorBuilder, PreparerBuilder, @@ -36,19 +37,23 @@ export class DocsSynchronizer { private readonly publisher: PublisherBase; private readonly logger: winston.Logger; private readonly config: Config; + private readonly scmIntegrations: ScmIntegrationRegistry; constructor({ publisher, logger, config, + scmIntegrations, }: { publisher: PublisherBase; logger: winston.Logger; config: Config; + scmIntegrations: ScmIntegrationRegistry; }) { this.config = config; this.logger = logger; this.publisher = publisher; + this.scmIntegrations = scmIntegrations; } async doSync({ @@ -87,19 +92,20 @@ export class DocsSynchronizer { return; } - const docsBuilder = new DocsBuilder({ - preparers, - generators, - publisher: this.publisher, - logger: taskLogger, - entity, - config: this.config, - logStream, - }); - let foundDocs = false; try { + const docsBuilder = new DocsBuilder({ + preparers, + generators, + publisher: this.publisher, + logger: taskLogger, + entity, + config: this.config, + scmIntegrations: this.scmIntegrations, + logStream, + }); + const updated = await docsBuilder.build(); if (!updated) { diff --git a/plugins/techdocs-backend/src/service/router.ts b/plugins/techdocs-backend/src/service/router.ts index b889312abd..e560a895b6 100644 --- a/plugins/techdocs-backend/src/service/router.ts +++ b/plugins/techdocs-backend/src/service/router.ts @@ -29,6 +29,7 @@ import express, { Response } from 'express'; import Router from 'express-promise-router'; import { Knex } from 'knex'; import { Logger } from 'winston'; +import { ScmIntegrations } from '@backstage/integration'; import { DocsSynchronizer, DocsSynchronizerSyncOpts } from './DocsSynchronizer'; /** @@ -79,10 +80,12 @@ export async function createRouter( const router = Router(); const { publisher, config, logger, discovery } = options; const catalogClient = new CatalogClient({ discoveryApi: discovery }); + const scmIntegrations = ScmIntegrations.fromConfig(config); const docsSynchronizer = new DocsSynchronizer({ - publisher: publisher, - logger: logger, - config: config, + publisher, + logger, + config, + scmIntegrations, }); router.get('/metadata/techdocs/:namespace/:kind/:name', async (req, res) => { @@ -126,7 +129,7 @@ export async function createRouter( ) ).json()) as Entity; - const locationMetadata = getLocationForEntity(entity); + const locationMetadata = getLocationForEntity(entity, scmIntegrations); res.json({ ...entity, locationMetadata }); } catch (err) { logger.info( diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index c89f9dc01c..89c0ee04fd 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-techdocs +## 0.10.1 + +### Patch Changes + +- 9266b80ab: Add search list item to display tech docs search results +- 03bf17e9b: Improve the responsiveness of the EntityPage UI. With this the Header component should scale with the screen size & wrapping should not cause overflowing/blocking of links. Additionally enforce the Pages using the Grid Layout to use it across all screen sizes & to wrap as intended. + + To benefit from the improved responsive layout, the `EntityPage` in existing Backstage applications should be updated to set the `xs` column size on each grid item in the page, as this does not default. For example: + + ```diff + - + + + ``` + +- 378cc6a54: Only update the `path` when the content is updated. + If content and path are updated independently, the frontend rendering is triggered twice on each navigation: Once for the `path` change (with the old content) and once for the new content. + This might result in a flickering rendering that is caused by the async frontend preprocessing, and the fact that replacing the shadow dom content is expensive. +- 214e7c52d: Refactor the techdocs transformers to return `Promise`s and await all transformations. +- e35b13afa: Handle error responses in `getTechDocsMetadata` and `getEntityMetadata` such that `` doesn't throw errors. +- Updated dependencies + - @backstage/core-components@0.1.6 + - @backstage/plugin-catalog-react@0.3.1 + ## 0.10.0 ### Minor Changes diff --git a/plugins/techdocs/api-report.md b/plugins/techdocs/api-report.md index 10e338c89a..8364263f42 100644 --- a/plugins/techdocs/api-report.md +++ b/plugins/techdocs/api-report.md @@ -25,6 +25,17 @@ export const DocsCardGrid: ({ entities: Entity[] | undefined; }) => JSX.Element | null; +// Warning: (ae-missing-release-tag) "DocsResultListItem" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DocsResultListItem: ({ + result, + lineClamp, +}: { + result: any; + lineClamp?: number | undefined; +}) => JSX.Element; + // Warning: (ae-missing-release-tag) "DocsTable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 140be7d886..c1f8954b6c 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs", - "version": "0.10.0", + "version": "0.10.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,12 +33,12 @@ "dependencies": { "@backstage/catalog-model": "^0.9.0", "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/integration": "^0.5.8", "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.0", + "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/theme": "^0.2.8", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -51,13 +51,14 @@ "react-router": "6.0.0-beta.0", "react-router-dom": "6.0.0-beta.0", "react-use": "^17.2.4", + "react-text-truncate": "^0.16.0", "sanitize-html": "^2.3.2" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/components/DocsResultListItem/DocsResultListItem.test.tsx b/plugins/techdocs/src/components/DocsResultListItem/DocsResultListItem.test.tsx new file mode 100644 index 0000000000..41de2fefe4 --- /dev/null +++ b/plugins/techdocs/src/components/DocsResultListItem/DocsResultListItem.test.tsx @@ -0,0 +1,50 @@ +/* + * 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 React from 'react'; +import { render } from '@testing-library/react'; +import { DocsResultListItem } from './DocsResultListItem'; + +// Using canvas to render text.. +jest.mock('react-text-truncate', () => { + return ({ text }: { text: string }) => {text}; +}); + +const validResult = { + location: 'https://backstage.io/docs', + title: 'Documentation', + text: + 'Backstage is an open-source developer portal that puts the developer experience first.', + kind: 'library', + namespace: '', + name: 'Backstage', + lifecycle: 'production', +}; + +describe('DocsResultListItem test', () => { + it('should render search doc passed in', async () => { + const { findByText } = render(); + + expect( + await findByText('Documentation | Backstage docs'), + ).toBeInTheDocument(); + expect( + await findByText( + 'Backstage is an open-source developer portal that puts the developer experience first.', + ), + ).toBeInTheDocument(); + }); +}); diff --git a/plugins/techdocs/src/components/DocsResultListItem/DocsResultListItem.tsx b/plugins/techdocs/src/components/DocsResultListItem/DocsResultListItem.tsx new file mode 100644 index 0000000000..52aa45a97e --- /dev/null +++ b/plugins/techdocs/src/components/DocsResultListItem/DocsResultListItem.tsx @@ -0,0 +1,60 @@ +/* + * 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 React from 'react'; +import { Divider, ListItem, ListItemText, makeStyles } from '@material-ui/core'; +import { Link } from '@backstage/core-components'; +import TextTruncate from 'react-text-truncate'; + +const useStyles = makeStyles({ + flexContainer: { + flexWrap: 'wrap', + }, + itemText: { + width: '100%', + marginBottom: '1rem', + }, +}); + +export const DocsResultListItem = ({ + result, + lineClamp = 5, +}: { + result: any; + lineClamp?: number; +}) => { + const classes = useStyles(); + return ( + + + + } + /> + + + + ); +}; diff --git a/plugins/techdocs/src/components/DocsResultListItem/index.ts b/plugins/techdocs/src/components/DocsResultListItem/index.ts new file mode 100644 index 0000000000..4e1e511ea1 --- /dev/null +++ b/plugins/techdocs/src/components/DocsResultListItem/index.ts @@ -0,0 +1,17 @@ +/* + * 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 { DocsResultListItem } from './DocsResultListItem'; diff --git a/plugins/techdocs/src/index.ts b/plugins/techdocs/src/index.ts index d645d128f7..66502a4585 100644 --- a/plugins/techdocs/src/index.ts +++ b/plugins/techdocs/src/index.ts @@ -19,6 +19,7 @@ export { techdocsApiRef, techdocsStorageApiRef } from './api'; export type { TechDocsApi, TechDocsStorageApi } from './api'; export { TechDocsClient, TechDocsStorageClient } from './client'; export type { PanelType } from './home/components/TechDocsCustomHome'; +export * from './components/DocsResultListItem'; export { DocsCardGrid, DocsTable, diff --git a/plugins/techdocs/src/reader/components/Reader.tsx b/plugins/techdocs/src/reader/components/Reader.tsx index d63ddf8125..ce72da4bf6 100644 --- a/plugins/techdocs/src/reader/components/Reader.tsx +++ b/plugins/techdocs/src/reader/components/Reader.tsx @@ -19,7 +19,12 @@ import { Progress } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; import { scmIntegrationsApiRef } from '@backstage/integration-react'; import { BackstageTheme } from '@backstage/theme'; -import { Button, CircularProgress, useTheme } from '@material-ui/core'; +import { + Button, + CircularProgress, + makeStyles, + useTheme, +} from '@material-ui/core'; import { Alert } from '@material-ui/lab'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; @@ -45,19 +50,29 @@ type Props = { onReady?: () => void; }; +const useStyles = makeStyles(() => ({ + message: { + // `word-break: break-word` is deprecated, but gives legacy support to browsers not supporting `overflow-wrap` yet + // https://developer.mozilla.org/en-US/docs/Web/CSS/word-break + wordBreak: 'break-word', + overflowWrap: 'anywhere', + }, +})); + export const Reader = ({ entityId, onReady }: Props) => { const { kind, namespace, name } = entityId; - const { '*': path } = useParams(); const theme = useTheme(); + const classes = useStyles(); const { state, + path, contentReload, content: rawPage, contentErrorMessage, syncErrorMessage, buildLog, - } = useReaderState(kind, namespace, name, path); + } = useReaderState(kind, namespace, name, useParams()['*']); const techdocsStorageApi = useApi(techdocsStorageApiRef); const [sidebars, setSidebars] = useState(); @@ -94,31 +109,26 @@ export const Reader = ({ entityId, onReady }: Props) => { // an update to "state" might lead to an updated UI so we include it as a trigger }, [updateSidebarPosition, state]); - useEffect(() => { - if (!rawPage || !shadowDomRef.current) { - return; - } - if (onReady) { - onReady(); - } - // Pre-render - const transformedElement = transformer(rawPage, [ - sanitizeDOM(), - addBaseUrl({ - techdocsStorageApi, - entityId: { - kind, - name, - namespace, - }, - path, - }), - rewriteDocLinks(), - removeMkdocsHeader(), - simplifyMkdocsFooter(), - addGitFeedbackLink(scmIntegrationsApi), - injectCss({ - css: ` + // a function that performs transformations that are executed prior to adding it to the DOM + const preRender = useCallback( + (rawContent: string, contentPath: string) => + transformer(rawContent, [ + sanitizeDOM(), + addBaseUrl({ + techdocsStorageApi, + entityId: { + kind, + name, + namespace, + }, + path: contentPath, + }), + rewriteDocLinks(), + removeMkdocsHeader(), + simplifyMkdocsFooter(), + addGitFeedbackLink(scmIntegrationsApi), + injectCss({ + css: ` body { font-family: ${theme.typography.fontFamily}; --md-text-color: ${theme.palette.text.primary}; @@ -175,21 +185,21 @@ export const Reader = ({ entityId, onReady }: Props) => { } } `, - }), - injectCss({ - // Disable CSS animations on link colors as they lead to issues in dark - // mode. The dark mode color theme is applied later and theirfore there - // is always an animation from light to dark mode when navigation - // between pages. - css: ` + }), + injectCss({ + // Disable CSS animations on link colors as they lead to issues in dark + // mode. The dark mode color theme is applied later and theirfore there + // is always an animation from light to dark mode when navigation + // between pages. + css: ` .md-nav__link, .md-typeset a, .md-typeset a::before, .md-typeset .headerlink { transition: none; } `, - }), - injectCss({ - // Properly style code blocks. - css: ` + }), + injectCss({ + // Properly style code blocks. + css: ` .md-typeset pre > code::-webkit-scrollbar-thumb { background-color: hsla(0, 0%, 0%, 0.32); } @@ -197,17 +207,17 @@ export const Reader = ({ entityId, onReady }: Props) => { background-color: hsla(0, 0%, 0%, 0.87); } `, - }), - injectCss({ - // Admonitions and others are using SVG masks to define icons. These - // masks are defined as CSS variables. - // As the MkDocs output is rendered in shadow DOM, the CSS variable - // definitions on the root selector are not applied. Instead, the have - // to be applied on :host. - // As there is no way to transform the served main*.css yet (for - // example in the backend), we have to copy from main*.css and modify - // them. - css: ` + }), + injectCss({ + // Admonitions and others are using SVG masks to define icons. These + // masks are defined as CSS variables. + // As the MkDocs output is rendered in shadow DOM, the CSS variable + // definitions on the root selector are not applied. Instead, the have + // to be applied on :host. + // As there is no way to transform the served main*.css yet (for + // example in the backend), we have to copy from main*.css and modify + // them. + css: ` :host { --md-admonition-icon--note: url('data:image/svg+xml;charset=utf-8,'); --md-admonition-icon--abstract: url('data:image/svg+xml;charset=utf-8,'); @@ -233,97 +243,129 @@ export const Reader = ({ entityId, onReady }: Props) => { --md-tasklist-icon--checked: url('data:image/svg+xml;charset=utf-8,'); } `, - }), - ]); + }), + ]), + [ + kind, + name, + namespace, + scmIntegrationsApi, + techdocsStorageApi, + theme.palette.background.default, + theme.palette.background.paper, + theme.palette.primary.main, + theme.palette.text.primary, + theme.typography.fontFamily, + ], + ); - if (!transformedElement) { - return; // An unexpected error occurred + // a function that performs transformations that are executed after adding it to the DOM + const postRender = useCallback( + async (shadowRoot: ShadowRoot) => + transformer(shadowRoot.children[0], [ + dom => { + setTimeout(() => { + // Scoll to the desired anchor on initial navigation + if (window.location.hash) { + const hash = window.location.hash.slice(1); + shadowRoot?.getElementById(hash)?.scrollIntoView(); + } + }, 200); + return dom; + }, + addLinkClickListener({ + baseUrl: window.location.origin, + onClick: (_: MouseEvent, url: string) => { + const parsedUrl = new URL(url); + + if (parsedUrl.hash) { + navigate(`${parsedUrl.pathname}${parsedUrl.hash}`); + + // Scroll to hash if it's on the current page + shadowRoot + ?.getElementById(parsedUrl.hash.slice(1)) + ?.scrollIntoView(); + } else { + navigate(parsedUrl.pathname); + } + }, + }), + onCssReady({ + docStorageUrl: await techdocsStorageApi.getApiOrigin(), + onLoading: (dom: Element) => { + (dom as HTMLElement).style.setProperty('opacity', '0'); + }, + onLoaded: (dom: Element) => { + (dom as HTMLElement).style.removeProperty('opacity'); + // disable MkDocs drawer toggling ('for' attribute => checkbox mechanism) + (dom as HTMLElement) + .querySelector('.md-nav__title') + ?.removeAttribute('for'); + const sideDivs: HTMLElement[] = Array.from( + shadowRoot!.querySelectorAll('.md-sidebar'), + ); + setSidebars(sideDivs); + // set sidebar height so they don't initially render in wrong position + const docTopPosition = (dom as HTMLElement).getBoundingClientRect() + .top; + const mdTabs = dom.querySelector('.md-container > .md-tabs'); + sideDivs!.forEach(sidebar => { + sidebar.style.top = mdTabs + ? `${docTopPosition + mdTabs.getBoundingClientRect().height}px` + : `${docTopPosition}px`; + }); + }, + }), + ]), + [navigate, techdocsStorageApi], + ); + + useEffect(() => { + if (!rawPage || !shadowDomRef.current) { + // clear the shadow dom if no content is available + if (shadowDomRef.current?.shadowRoot) { + shadowDomRef.current.shadowRoot.innerHTML = ''; + } + return () => {}; + } + if (onReady) { + onReady(); } - const shadowDiv: HTMLElement = shadowDomRef.current!; - const shadowRoot = - shadowDiv.shadowRoot || shadowDiv.attachShadow({ mode: 'open' }); - Array.from(shadowRoot.children).forEach(child => - shadowRoot.removeChild(child), - ); - shadowRoot.appendChild(transformedElement); + // if false, there is already a newer execution of this effect + let shouldReplaceContent = true; - // Scroll to top after render - window.scroll({ top: 0 }); + // Pre-render + preRender(rawPage, path).then(async transformedElement => { + if (!transformedElement?.innerHTML) { + return; // An unexpected error occurred + } - // Post-render - transformer(shadowRoot.children[0], [ - dom => { - setTimeout(() => { - // Scoll to the desired anchor on initial navigation - if (window.location.hash) { - const hash = window.location.hash.slice(1); - shadowRoot?.getElementById(hash)?.scrollIntoView(); - } - }, 200); - return dom; - }, - addLinkClickListener({ - baseUrl: window.location.origin, - onClick: (_: MouseEvent, url: string) => { - const parsedUrl = new URL(url); + // don't manipulate the shadow dom if this isn't the latest effect execution + if (!shouldReplaceContent) { + return; + } - if (parsedUrl.hash) { - navigate(`${parsedUrl.pathname}${parsedUrl.hash}`); + const shadowDiv: HTMLElement = shadowDomRef.current!; + const shadowRoot = + shadowDiv.shadowRoot || shadowDiv.attachShadow({ mode: 'open' }); + Array.from(shadowRoot.children).forEach(child => + shadowRoot.removeChild(child), + ); + shadowRoot.appendChild(transformedElement); - // Scroll to hash if it's on the current page - shadowRoot - ?.getElementById(parsedUrl.hash.slice(1)) - ?.scrollIntoView(); - } else { - navigate(parsedUrl.pathname); - } - }, - }), - onCssReady({ - docStorageUrl: techdocsStorageApi.getApiOrigin(), - onLoading: (dom: Element) => { - (dom as HTMLElement).style.setProperty('opacity', '0'); - }, - onLoaded: (dom: Element) => { - (dom as HTMLElement).style.removeProperty('opacity'); - // disable MkDocs drawer toggling ('for' attribute => checkbox mechanism) - (dom as HTMLElement) - .querySelector('.md-nav__title') - ?.removeAttribute('for'); - const sideDivs: HTMLElement[] = Array.from( - shadowRoot!.querySelectorAll('.md-sidebar'), - ); - setSidebars(sideDivs); - // set sidebar height so they don't initially render in wrong position - const docTopPosition = (dom as HTMLElement).getBoundingClientRect() - .top; - const mdTabs = dom.querySelector('.md-container > .md-tabs'); - sideDivs!.forEach(sidebar => { - sidebar.style.top = mdTabs - ? `${docTopPosition + mdTabs.getBoundingClientRect().height}px` - : `${docTopPosition}px`; - }); - }, - }), - ]); - }, [ - path, - kind, - namespace, - name, - rawPage, - navigate, - onReady, - shadowDomRef, - techdocsStorageApi, - theme.typography.fontFamily, - theme.palette.text.primary, - theme.palette.primary.main, - theme.palette.background.paper, - theme.palette.background.default, - scmIntegrationsApi, - ]); + // Scroll to top after render + window.scroll({ top: 0 }); + + // Post-render + await postRender(shadowRoot); + }); + + // cancel this execution + return () => { + shouldReplaceContent = false; + }; + }, [onReady, path, postRender, preRender, rawPage]); return ( <> @@ -369,6 +411,7 @@ export const Reader = ({ entityId, onReady }: Props) => { variant="outlined" severity="error" action={} + classes={{ message: classes.message }} > Building a newer version of this documentation failed.{' '} {syncErrorMessage} @@ -381,6 +424,7 @@ export const Reader = ({ entityId, onReady }: Props) => { variant="outlined" severity="error" action={} + classes={{ message: classes.message }} > Building a newer version of this documentation failed.{' '} {syncErrorMessage} diff --git a/plugins/techdocs/src/reader/components/useReaderState.test.tsx b/plugins/techdocs/src/reader/components/useReaderState.test.tsx index 9d9a8e2b1a..b0d4e0326a 100644 --- a/plugins/techdocs/src/reader/components/useReaderState.test.tsx +++ b/plugins/techdocs/src/reader/components/useReaderState.test.tsx @@ -86,7 +86,7 @@ describe('useReaderState', () => { }; it('should return a copy of the state', () => { - expect(reducer(oldState, { type: 'navigate', path: '/' })).toEqual({ + expect(reducer(oldState, { type: 'content', path: '/' })).toEqual({ activeSyncState: 'CHECKING', contentLoading: false, path: '/', @@ -102,13 +102,13 @@ describe('useReaderState', () => { }); it.each` - type | oldActiveSyncState | newActiveSyncState - ${'content'} | ${'BUILD_READY'} | ${'UP_TO_DATE'} - ${'content'} | ${'BUILD_READY_RELOAD'} | ${'UP_TO_DATE'} - ${'navigate'} | ${'BUILD_READY'} | ${'UP_TO_DATE'} - ${'navigate'} | ${'BUILD_READY_RELOAD'} | ${'UP_TO_DATE'} - ${'sync'} | ${'BUILD_READY'} | ${undefined} - ${'sync'} | ${'BUILD_READY_RELOAD'} | ${undefined} + type | oldActiveSyncState | newActiveSyncState + ${'contentLoading'} | ${'BUILD_READY'} | ${'UP_TO_DATE'} + ${'contentLoading'} | ${'BUILD_READY_RELOAD'} | ${'UP_TO_DATE'} + ${'content'} | ${'BUILD_READY'} | ${'UP_TO_DATE'} + ${'content'} | ${'BUILD_READY_RELOAD'} | ${'UP_TO_DATE'} + ${'sync'} | ${'BUILD_READY'} | ${undefined /* undefined, because we don't set an input */} + ${'sync'} | ${'BUILD_READY_RELOAD'} | ${undefined /* undefined, because we don't set an input */} `( 'should, when type=$type and activeSyncState=$oldActiveSyncState, set activeSyncState=$newActiveSyncState', ({ type, oldActiveSyncState, newActiveSyncState }) => { @@ -124,18 +124,45 @@ describe('useReaderState', () => { }, ); - describe('"content" action', () => { + describe('"contentLoading" action', () => { it('should set loading', () => { + expect( + reducer(oldState, { + type: 'contentLoading', + }), + ).toEqual({ + ...oldState, + contentLoading: true, + }); + }); + + it('should keep content', () => { expect( reducer( { ...oldState, content: 'some-old-content', + }, + { + type: 'contentLoading', + }, + ), + ).toEqual({ + ...oldState, + contentLoading: true, + content: 'some-old-content', + }); + }); + + it('should reset errors', () => { + expect( + reducer( + { + ...oldState, contentError: new Error(), }, { - type: 'content', - contentLoading: true, + type: 'contentLoading', }, ), ).toEqual({ @@ -143,7 +170,9 @@ describe('useReaderState', () => { contentLoading: true, }); }); + }); + describe('"content" action', () => { it('should set content', () => { expect( reducer( @@ -164,6 +193,27 @@ describe('useReaderState', () => { }); }); + it('should set content and update path', () => { + expect( + reducer( + { + ...oldState, + contentLoading: true, + }, + { + type: 'content', + content: 'asdf', + path: '/new-path', + }, + ), + ).toEqual({ + ...oldState, + contentLoading: false, + content: 'asdf', + path: '/new-path', + }); + }); + it('should set error', () => { expect( reducer( @@ -185,20 +235,6 @@ describe('useReaderState', () => { }); }); - describe('"navigate" action', () => { - it('should work', () => { - expect( - reducer(oldState, { - type: 'navigate', - path: '/', - }), - ).toEqual({ - ...oldState, - path: '/', - }); - }); - }); - describe('"sync" action', () => { it('should update state', () => { expect( @@ -256,6 +292,7 @@ describe('useReaderState', () => { expect(result.current).toEqual({ state: 'CHECKING', + path: '/example', content: undefined, contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -267,6 +304,7 @@ describe('useReaderState', () => { expect(result.current).toEqual({ state: 'CONTENT_FRESH', + path: '/example', content: 'my content', contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -313,6 +351,7 @@ describe('useReaderState', () => { expect(result.current).toEqual({ state: 'CHECKING', + path: '/example', content: undefined, contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -324,6 +363,7 @@ describe('useReaderState', () => { expect(result.current).toEqual({ state: 'INITIAL_BUILD', + path: '/example', content: undefined, contentErrorMessage: 'NotFoundError: Page Not Found', syncErrorMessage: undefined, @@ -335,6 +375,7 @@ describe('useReaderState', () => { expect(result.current).toEqual({ state: 'CHECKING', + path: '/example', content: undefined, contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -346,6 +387,7 @@ describe('useReaderState', () => { expect(result.current).toEqual({ state: 'CONTENT_FRESH', + path: '/example', content: 'my content', contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -394,6 +436,7 @@ describe('useReaderState', () => { expect(result.current).toEqual({ state: 'CHECKING', + path: '/example', content: undefined, contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -405,6 +448,7 @@ describe('useReaderState', () => { await waitForValueToChange(() => result.current.state); expect(result.current).toEqual({ state: 'CONTENT_FRESH', + path: '/example', content: 'my content', contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -416,6 +460,7 @@ describe('useReaderState', () => { await waitForValueToChange(() => result.current.state); expect(result.current).toEqual({ state: 'CONTENT_STALE_REFRESHING', + path: '/example', content: 'my content', contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -427,6 +472,7 @@ describe('useReaderState', () => { await waitForValueToChange(() => result.current.state); expect(result.current).toEqual({ state: 'CONTENT_STALE_READY', + path: '/example', content: 'my content', contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -441,7 +487,8 @@ describe('useReaderState', () => { await waitForValueToChange(() => result.current.state); expect(result.current).toEqual({ state: 'CHECKING', - content: undefined, + path: '/example', + content: 'my content', contentErrorMessage: undefined, syncErrorMessage: undefined, buildLog: [], @@ -452,6 +499,7 @@ describe('useReaderState', () => { await waitForValueToChange(() => result.current.state); expect(result.current).toEqual({ state: 'CONTENT_FRESH', + path: '/example', content: 'my new content', contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -475,6 +523,103 @@ describe('useReaderState', () => { }); }); + it('should handle navigation', async () => { + techdocsStorageApi.getEntityDocs + .mockResolvedValueOnce('my content') + .mockImplementationOnce(async () => { + await new Promise(resolve => setTimeout(resolve, 1100)); + return 'my new content'; + }) + .mockRejectedValueOnce(new NotFoundError('Some error description')); + techdocsStorageApi.syncEntityDocs.mockResolvedValue('cached'); + + await act(async () => { + const { result, waitForValueToChange, rerender } = await renderHook( + ({ path }: { path: string }) => + useReaderState('Component', 'default', 'backstage', path), + { initialProps: { path: '/example' }, wrapper: Wrapper as any }, + ); + + expect(result.current).toEqual({ + state: 'CHECKING', + path: '/example', + content: undefined, + contentErrorMessage: undefined, + syncErrorMessage: undefined, + buildLog: [], + contentReload: expect.any(Function), + }); + + // show the content + await waitForValueToChange(() => result.current.state); + expect(result.current).toEqual({ + state: 'CONTENT_FRESH', + path: '/example', + content: 'my content', + contentErrorMessage: undefined, + syncErrorMessage: undefined, + buildLog: [], + contentReload: expect.any(Function), + }); + + // navigate + rerender({ path: '/new' }); + + await waitForValueToChange(() => result.current.state); + expect(result.current).toEqual({ + state: 'CHECKING', + path: '/example', + content: 'my content', + contentErrorMessage: undefined, + syncErrorMessage: undefined, + buildLog: [], + contentReload: expect.any(Function), + }); + + await waitForValueToChange(() => result.current.state); + expect(result.current).toEqual({ + state: 'CONTENT_FRESH', + path: '/new', + content: 'my new content', + contentErrorMessage: undefined, + syncErrorMessage: undefined, + buildLog: [], + contentReload: expect.any(Function), + }); + + // navigate + rerender({ path: '/missing' }); + + await waitForValueToChange(() => result.current.state); + expect(result.current).toEqual({ + state: 'CONTENT_NOT_FOUND', + path: '/missing', + content: undefined, + contentErrorMessage: 'NotFoundError: Some error description', + syncErrorMessage: undefined, + buildLog: [], + contentReload: expect.any(Function), + }); + + expect(techdocsStorageApi.getEntityDocs).toBeCalledWith( + { kind: 'Component', namespace: 'default', name: 'backstage' }, + '/example', + ); + expect(techdocsStorageApi.getEntityDocs).toBeCalledWith( + { kind: 'Component', namespace: 'default', name: 'backstage' }, + '/new', + ); + expect(techdocsStorageApi.syncEntityDocs).toBeCalledWith( + { + kind: 'Component', + namespace: 'default', + name: 'backstage', + }, + expect.any(Function), + ); + }); + }); + it('should handle content error', async () => { techdocsStorageApi.getEntityDocs.mockRejectedValue( new NotFoundError('Some error description'), @@ -489,6 +634,7 @@ describe('useReaderState', () => { expect(result.current).toEqual({ state: 'CHECKING', + path: '/example', content: undefined, contentErrorMessage: undefined, syncErrorMessage: undefined, @@ -500,6 +646,7 @@ describe('useReaderState', () => { await waitForValueToChange(() => result.current.state); expect(result.current).toEqual({ state: 'CONTENT_NOT_FOUND', + path: '/example', content: undefined, contentErrorMessage: 'NotFoundError: Some error description', syncErrorMessage: undefined, diff --git a/plugins/techdocs/src/reader/components/useReaderState.ts b/plugins/techdocs/src/reader/components/useReaderState.ts index 178c0746bf..07bd338de9 100644 --- a/plugins/techdocs/src/reader/components/useReaderState.ts +++ b/plugins/techdocs/src/reader/components/useReaderState.ts @@ -15,7 +15,7 @@ */ import { useApi } from '@backstage/core-plugin-api'; -import { useEffect, useMemo, useReducer, useRef } from 'react'; +import { useMemo, useReducer, useRef } from 'react'; import { useAsync, useAsyncRetry } from 'react-use'; import { techdocsStorageApiRef } from '../../api'; @@ -131,13 +131,13 @@ type ReducerActions = state: SyncStates; syncError?: Error; } + | { type: 'contentLoading' } | { type: 'content'; + path?: string; content?: string; - contentLoading?: true; contentError?: Error; } - | { type: 'navigate'; path: string } | { type: 'buildLog'; log: string }; type ReducerState = { @@ -186,14 +186,22 @@ export function reducer( newState.syncError = action.syncError; break; - case 'content': - newState.content = action.content; - newState.contentLoading = action.contentLoading ?? false; - newState.contentError = action.contentError; + case 'contentLoading': + newState.contentLoading = true; + + // only reset errors but keep the old content until it is replaced by the 'content' action + newState.contentError = undefined; break; - case 'navigate': - newState.path = action.path; + case 'content': + // only override the path if it is part of the action + if (typeof action.path === 'string') { + newState.path = action.path; + } + + newState.contentLoading = false; + newState.content = action.content; + newState.contentError = action.contentError; break; case 'buildLog': @@ -204,10 +212,10 @@ export function reducer( throw new Error(); } - // a navigation or a content update loads fresh content so the build is updated to being up-to-date + // a content update loads fresh content so the build is updated to being up-to-date if ( ['BUILD_READY', 'BUILD_READY_RELOAD'].includes(newState.activeSyncState) && - ['content', 'navigate'].includes(action.type) + ['contentLoading', 'content'].includes(action.type) ) { newState.activeSyncState = 'UP_TO_DATE'; newState.buildLog = []; @@ -223,6 +231,7 @@ export function useReaderState( path: string, ): { state: ContentStateTypes; + path: string; contentReload: () => void; content?: string; contentErrorMessage?: string; @@ -238,14 +247,9 @@ export function useReaderState( const techdocsStorageApi = useApi(techdocsStorageApiRef); - // convert all path changes into actions - useEffect(() => { - dispatch({ type: 'navigate', path }); - }, [path]); - // try to load the content. the function will fire events and we don't care for the return values const { retry: contentReload } = useAsyncRetry(async () => { - dispatch({ type: 'content', contentLoading: true }); + dispatch({ type: 'contentLoading' }); try { const entityDocs = await techdocsStorageApi.getEntityDocs( @@ -253,11 +257,12 @@ export function useReaderState( path, ); - dispatch({ type: 'content', content: entityDocs }); + // update content and path at the same time + dispatch({ type: 'content', content: entityDocs, path }); return entityDocs; } catch (e) { - dispatch({ type: 'content', contentError: e }); + dispatch({ type: 'content', contentError: e, path }); } return undefined; @@ -335,6 +340,7 @@ export function useReaderState( return { state: displayState, contentReload, + path: state.path, content: state.content, contentErrorMessage: state.contentError?.toString(), syncErrorMessage: state.syncError?.toString(), diff --git a/plugins/techdocs/src/reader/transformers/addBaseUrl.test.ts b/plugins/techdocs/src/reader/transformers/addBaseUrl.test.ts index f04c9963f0..11e8375420 100644 --- a/plugins/techdocs/src/reader/transformers/addBaseUrl.test.ts +++ b/plugins/techdocs/src/reader/transformers/addBaseUrl.test.ts @@ -15,9 +15,9 @@ */ import { waitFor } from '@testing-library/react'; -import { createTestShadowDom } from '../../test-utils'; -import { addBaseUrl } from '../transformers'; import { TechDocsStorageApi } from '../../api'; +import { createTestShadowDom } from '../../test-utils'; +import { addBaseUrl } from './addBaseUrl'; const DOC_STORAGE_URL = 'https://example-host.storage.googleapis.com'; const API_ORIGIN_URL = 'https://backstage.example.com/api/techdocs'; @@ -62,8 +62,8 @@ describe('addBaseUrl', () => { global.fetch = originalFetch; }); - it('contains relative paths', () => { - createTestShadowDom(fixture, { + it('contains relative paths', async () => { + await createTestShadowDom(fixture, { preTransformers: [ addBaseUrl({ techdocsStorageApi, @@ -110,7 +110,7 @@ describe('addBaseUrl', () => { text: jest.fn().mockResolvedValue(svgContent), }); - const root = createTestShadowDom('', { + const root = await createTestShadowDom('', { preTransformers: [ addBaseUrl({ techdocsStorageApi, @@ -137,7 +137,7 @@ describe('addBaseUrl', () => { text: jest.fn().mockResolvedValue(svgContent), }); - const root = createTestShadowDom( + const root = await createTestShadowDom( ``, { preTransformers: [ @@ -162,16 +162,19 @@ describe('addBaseUrl', () => { it('does not inline external svgs', async () => { const expectedSrc = 'https://example.com/test.svg'; - const root = createTestShadowDom(``, { - preTransformers: [ - addBaseUrl({ - techdocsStorageApi, - entityId: mockEntityId, - path: '', - }), - ], - postTransformers: [], - }); + const root = await createTestShadowDom( + ``, + { + preTransformers: [ + addBaseUrl({ + techdocsStorageApi, + entityId: mockEntityId, + path: '', + }), + ], + postTransformers: [], + }, + ); await new Promise(done => { process.nextTick(() => { diff --git a/plugins/techdocs/src/reader/transformers/addBaseUrl.ts b/plugins/techdocs/src/reader/transformers/addBaseUrl.ts index f21cb8c47a..8f08ec83a6 100644 --- a/plugins/techdocs/src/reader/transformers/addBaseUrl.ts +++ b/plugins/techdocs/src/reader/transformers/addBaseUrl.ts @@ -14,8 +14,8 @@ * limitations under the License. */ import { EntityName } from '@backstage/catalog-model'; -import type { Transformer } from './transformer'; import { TechDocsStorageApi } from '../../api'; +import type { Transformer } from './transformer'; type AddBaseUrlOptions = { techdocsStorageApi: TechDocsStorageApi; @@ -44,14 +44,15 @@ export const addBaseUrl = ({ entityId, path, }: AddBaseUrlOptions): Transformer => { - return dom => { - const updateDom = ( + return async dom => { + const apiOrigin = await techdocsStorageApi.getApiOrigin(); + + const updateDom = async ( list: HTMLCollectionOf | NodeListOf, attributeName: string, - ): void => { - Array.from(list) - .filter(elem => !!elem.getAttribute(attributeName)) - .forEach(async (elem: T) => { + ) => { + for (const elem of list) { + if (elem.hasAttribute(attributeName)) { const elemAttribute = elem.getAttribute(attributeName); if (!elemAttribute) return; @@ -61,7 +62,7 @@ export const addBaseUrl = ({ entityId, path, ); - const apiOrigin = await techdocsStorageApi.getApiOrigin(); + if (isSvgNeedingInlining(attributeName, elemAttribute, apiOrigin)) { try { const svg = await fetch(newValue, { credentials: 'include' }); @@ -76,13 +77,16 @@ export const addBaseUrl = ({ } else { elem.setAttribute(attributeName, newValue); } - }); + } + } }; - updateDom(dom.querySelectorAll('img'), 'src'); - updateDom(dom.querySelectorAll('script'), 'src'); - updateDom(dom.querySelectorAll('link'), 'href'); - updateDom(dom.querySelectorAll('a[download]'), 'href'); + await Promise.all([ + updateDom(dom.querySelectorAll('img'), 'src'), + updateDom(dom.querySelectorAll('script'), 'src'), + updateDom(dom.querySelectorAll('link'), 'href'), + updateDom(dom.querySelectorAll('a[download]'), 'href'), + ]); return dom; }; diff --git a/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.test.ts b/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.test.ts index 2165afac98..0b8e431781 100644 --- a/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.test.ts +++ b/plugins/techdocs/src/reader/transformers/addGitFeedbackLink.test.ts @@ -28,8 +28,8 @@ const integrations = ScmIntegrations.fromConfig( ); describe('addGitFeedbackLink', () => { - it('adds a feedback link when a Gitlab source edit link is available', () => { - const shadowDom = createTestShadowDom( + it('adds a feedback link when a Gitlab source edit link is available', async () => { + const shadowDom = await createTestShadowDom( ` @@ -53,8 +53,8 @@ describe('addGitFeedbackLink', () => { ); }); - it('adds a feedback link when a Github source edit link is available', () => { - const shadowDom = createTestShadowDom( + it('adds a feedback link when a Github source edit link is available', async () => { + const shadowDom = await createTestShadowDom( ` @@ -78,8 +78,8 @@ describe('addGitFeedbackLink', () => { ); }); - it('does not add a feedback link when no source edit link is available', () => { - const shadowDom = createTestShadowDom( + it('does not add a feedback link when no source edit link is available', async () => { + const shadowDom = await createTestShadowDom( ` @@ -97,8 +97,8 @@ describe('addGitFeedbackLink', () => { expect(shadowDom.querySelector('#git-feedback-link')).toBeFalsy(); }); - it('does not add a feedback link when a Gitlab or Github source edit link is not available', () => { - const shadowDom = createTestShadowDom( + it('does not add a feedback link when a Gitlab or Github source edit link is not available', async () => { + const shadowDom = await createTestShadowDom( ` @@ -117,8 +117,8 @@ describe('addGitFeedbackLink', () => { expect(shadowDom.querySelector('#git-feedback-link')).toBeFalsy(); }); - it('adds a feedback link when a Gitlab or Github source edit link is not available but hostname matches an integrations host', () => { - const shadowDom = createTestShadowDom( + it('adds a feedback link when a Gitlab or Github source edit link is not available but hostname matches an integrations host', async () => { + const shadowDom = await createTestShadowDom( ` diff --git a/plugins/techdocs/src/reader/transformers/addLinkClickListener.test.ts b/plugins/techdocs/src/reader/transformers/addLinkClickListener.test.ts index 2d2d54a31c..fe3a6e557c 100644 --- a/plugins/techdocs/src/reader/transformers/addLinkClickListener.test.ts +++ b/plugins/techdocs/src/reader/transformers/addLinkClickListener.test.ts @@ -18,9 +18,9 @@ import { createTestShadowDom } from '../../test-utils'; import { addLinkClickListener } from './addLinkClickListener'; describe('addLinkClickListener', () => { - it('calls onClick when a link has been clicked', () => { + it('calls onClick when a link has been clicked', async () => { const fn = jest.fn(); - const shadowDom = createTestShadowDom( + const shadowDom = await createTestShadowDom( ` @@ -45,9 +45,9 @@ describe('addLinkClickListener', () => { expect(fn).toHaveBeenCalledTimes(1); }); - it('does not call onClick when a link links to another baseUrl', () => { + it('does not call onClick when a link links to another baseUrl', async () => { const fn = jest.fn(); - const shadowDom = createTestShadowDom( + const shadowDom = await createTestShadowDom( ` diff --git a/plugins/techdocs/src/reader/transformers/index.test.ts b/plugins/techdocs/src/reader/transformers/index.test.ts index 30607aedcd..16b42266df 100644 --- a/plugins/techdocs/src/reader/transformers/index.test.ts +++ b/plugins/techdocs/src/reader/transformers/index.test.ts @@ -17,14 +17,14 @@ import { Transformer, transform } from './transformer'; describe('transform', () => { - it('calls the transformers', () => { + it('calls the transformers', async () => { const fn = jest.fn(); const mockTransformer = (): Transformer => (dom: Element) => { fn(dom); return dom; }; - transform('', [mockTransformer()]); + await transform('', [mockTransformer()]); expect(fn).toHaveBeenCalledTimes(1); expect(fn).toHaveBeenCalledWith(expect.any(Element)); diff --git a/plugins/techdocs/src/reader/transformers/injectCss.test.ts b/plugins/techdocs/src/reader/transformers/injectCss.test.ts index 368d077b43..6d0eb8daa9 100644 --- a/plugins/techdocs/src/reader/transformers/injectCss.test.ts +++ b/plugins/techdocs/src/reader/transformers/injectCss.test.ts @@ -15,10 +15,10 @@ */ import { createTestShadowDom } from '../../test-utils'; -import { injectCss } from '../transformers'; +import { injectCss } from './injectCss'; describe('injectCss', () => { - it('should inject style with passed css in head', () => { + it('should inject style with passed css in head', async () => { const html = ` @@ -27,7 +27,7 @@ describe('injectCss', () => { `; const injectedCss = '* {background-color: #fff}'; - const shadowDom = createTestShadowDom(html, { + const shadowDom = await createTestShadowDom(html, { preTransformers: [injectCss({ css: injectedCss })], postTransformers: [], }); diff --git a/plugins/techdocs/src/reader/transformers/onCssReady.test.ts b/plugins/techdocs/src/reader/transformers/onCssReady.test.ts index 3174e23f5c..b2a5aa9760 100644 --- a/plugins/techdocs/src/reader/transformers/onCssReady.test.ts +++ b/plugins/techdocs/src/reader/transformers/onCssReady.test.ts @@ -15,16 +15,15 @@ */ import { - createTestShadowDom, - mockStylesheetEventListener, - executeStylesheetEventListeners, clearStylesheetEventListeners, + createTestShadowDom, + executeStylesheetEventListeners, + mockStylesheetEventListener, } from '../../test-utils'; -import { onCssReady } from '../transformers'; +import { onCssReady } from './onCssReady'; -const docStorageUrl: Promise = Promise.resolve( - 'https://techdocs-mock-sites.storage.googleapis.com', -); +const docStorageUrl: string = + 'https://techdocs-mock-sites.storage.googleapis.com'; const fixture = ` @@ -48,11 +47,11 @@ describe('onCssReady', () => { clearStylesheetEventListeners(); }); - it('does not call onLoading and onLoaded without the onCssReady transformer', () => { + it('does not call onLoading and onLoaded without the onCssReady transformer', async () => { const onLoading = jest.fn(); const onLoaded = jest.fn(); - createTestShadowDom(fixture, { + await createTestShadowDom(fixture, { preTransformers: [], postTransformers: [], }); @@ -62,11 +61,11 @@ describe('onCssReady', () => { expect(onLoaded).not.toHaveBeenCalled(); }); - it('calls the onLoading and onLoaded correctly', () => { + it('calls the onLoading and onLoaded correctly', async () => { const onLoading = jest.fn(); const onLoaded = jest.fn(); - createTestShadowDom(fixture, { + await createTestShadowDom(fixture, { preTransformers: [], postTransformers: [ onCssReady({ diff --git a/plugins/techdocs/src/reader/transformers/onCssReady.ts b/plugins/techdocs/src/reader/transformers/onCssReady.ts index 936c4306a7..e9406ba632 100644 --- a/plugins/techdocs/src/reader/transformers/onCssReady.ts +++ b/plugins/techdocs/src/reader/transformers/onCssReady.ts @@ -17,7 +17,7 @@ import type { Transformer } from './transformer'; type OnCssReadyOptions = { - docStorageUrl: Promise; + docStorageUrl: string; onLoading: (dom: Element) => void; onLoaded: (dom: Element) => void; }; @@ -30,9 +30,7 @@ export const onCssReady = ({ return dom => { const cssPages = Array.from( dom.querySelectorAll('head > link[rel="stylesheet"]'), - ).filter(async elem => - elem.getAttribute('href')?.startsWith(await docStorageUrl), - ); + ).filter(elem => elem.getAttribute('href')?.startsWith(docStorageUrl)); let count = cssPages.length; diff --git a/plugins/techdocs/src/reader/transformers/removeMkdocsHeader.test.ts b/plugins/techdocs/src/reader/transformers/removeMkdocsHeader.test.ts index 70d6b2fa4a..60f0b9ca30 100644 --- a/plugins/techdocs/src/reader/transformers/removeMkdocsHeader.test.ts +++ b/plugins/techdocs/src/reader/transformers/removeMkdocsHeader.test.ts @@ -18,20 +18,26 @@ import { createTestShadowDom, FIXTURES } from '../../test-utils'; import { removeMkdocsHeader } from '../transformers'; describe('removeMkdocsHeader', () => { - it('does not remove mkdocs header', () => { - const shadowDom = createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE, { - preTransformers: [], - postTransformers: [], - }); + it('does not remove mkdocs header', async () => { + const shadowDom = await createTestShadowDom( + FIXTURES.FIXTURE_STANDARD_PAGE, + { + preTransformers: [], + postTransformers: [], + }, + ); expect(shadowDom.querySelector('.md-header')).toBeTruthy(); }); - it('does remove mkdocs header', () => { - const shadowDom = createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE, { - preTransformers: [removeMkdocsHeader()], - postTransformers: [], - }); + it('does remove mkdocs header', async () => { + const shadowDom = await createTestShadowDom( + FIXTURES.FIXTURE_STANDARD_PAGE, + { + preTransformers: [removeMkdocsHeader()], + postTransformers: [], + }, + ); expect(shadowDom.querySelector('.md-header')).toBeFalsy(); }); diff --git a/plugins/techdocs/src/reader/transformers/rewriteDocLinks.test.ts b/plugins/techdocs/src/reader/transformers/rewriteDocLinks.test.ts index 62b80cd514..66fc5f29c1 100644 --- a/plugins/techdocs/src/reader/transformers/rewriteDocLinks.test.ts +++ b/plugins/techdocs/src/reader/transformers/rewriteDocLinks.test.ts @@ -19,8 +19,8 @@ import { rewriteDocLinks } from '../transformers'; import { normalizeUrl } from './rewriteDocLinks'; describe('rewriteDocLinks', () => { - it('should not do anything', () => { - const shadowDom = createTestShadowDom(` + it('should not do anything', async () => { + const shadowDom = await createTestShadowDom(` Test Test Test @@ -35,8 +35,8 @@ describe('rewriteDocLinks', () => { ]); }); - it('should transform a href with localhost as baseUrl', () => { - const shadowDom = createTestShadowDom( + it('should transform a href with localhost as baseUrl', async () => { + const shadowDom = await createTestShadowDom( ` Test Test @@ -57,9 +57,9 @@ describe('rewriteDocLinks', () => { ]); }); - it('should rewrite non-parseable URLs as text', () => { + it('should rewrite non-parseable URLs as text', async () => { const expectedText = `www.my-internet.[top-level-domain]/pathname/[URLkey]`; - const shadowDom = createTestShadowDom( + const shadowDom = await createTestShadowDom( `${expectedText}`, { preTransformers: [rewriteDocLinks()], diff --git a/plugins/techdocs/src/reader/transformers/sanitizeDOM/index.test.ts b/plugins/techdocs/src/reader/transformers/sanitizeDOM/index.test.ts index 8456cf7c23..6296793e2a 100644 --- a/plugins/techdocs/src/reader/transformers/sanitizeDOM/index.test.ts +++ b/plugins/techdocs/src/reader/transformers/sanitizeDOM/index.test.ts @@ -16,7 +16,7 @@ import { createTestShadowDom, FIXTURES } from '../../../test-utils'; import { Transformer } from '../index'; -import { sanitizeDOM } from '../sanitizeDOM'; +import { sanitizeDOM } from './index'; const injectMaliciousLink = (): Transformer => dom => { const link = document.createElement('a'); @@ -27,55 +27,64 @@ const injectMaliciousLink = (): Transformer => dom => { }; describe('sanitizeDOM', () => { - it('contains a script tag', () => { - const shadowDom = createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE); + it('contains a script tag', async () => { + const shadowDom = await createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE); expect(shadowDom.querySelectorAll('script').length).toBeGreaterThan(0); }); - it('does not contain a script tag', () => { - const shadowDom = createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE, { - preTransformers: [sanitizeDOM()], - postTransformers: [], - }); + it('does not contain a script tag', async () => { + const shadowDom = await createTestShadowDom( + FIXTURES.FIXTURE_STANDARD_PAGE, + { + preTransformers: [sanitizeDOM()], + postTransformers: [], + }, + ); expect(shadowDom.querySelectorAll('script').length).toBe(0); }); - it('contains link with a onClick attribute', () => { - const shadowDom = createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE, { - preTransformers: [injectMaliciousLink()], - postTransformers: [], - }); + it('contains link with a onClick attribute', async () => { + const shadowDom = await createTestShadowDom( + FIXTURES.FIXTURE_STANDARD_PAGE, + { + preTransformers: [injectMaliciousLink()], + postTransformers: [], + }, + ); expect( shadowDom.querySelector('#test-malicious-link')?.hasAttribute('onclick'), ).toBeTruthy(); }); - it('does not contain link with a onClick attribute', () => { - const shadowDom = createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE, { - preTransformers: [sanitizeDOM()], - postTransformers: [], - }); + it('does not contain link with a onClick attribute', async () => { + const shadowDom = await createTestShadowDom( + FIXTURES.FIXTURE_STANDARD_PAGE, + { + preTransformers: [sanitizeDOM()], + postTransformers: [], + }, + ); expect( shadowDom.querySelector('#test-malicious-link')?.hasAttribute('onclick'), ).toBeFalsy(); }); - it('removes style tags', () => { + it('removes style tags', async () => { const html = ` - `; - const shadowDom = createTestShadowDom(html, { + const shadowDom = await createTestShadowDom(html, { preTransformers: [sanitizeDOM()], postTransformers: [], }); @@ -83,7 +92,7 @@ describe('sanitizeDOM', () => { expect(shadowDom.querySelectorAll('style').length).toEqual(0); }); - it('does not remove link tags', () => { + it('does not remove link tags', async () => { const html = ` @@ -94,7 +103,7 @@ describe('sanitizeDOM', () => { `; - const shadowDom = createTestShadowDom(html, { + const shadowDom = await createTestShadowDom(html, { preTransformers: [sanitizeDOM()], postTransformers: [], }); diff --git a/plugins/techdocs/src/reader/transformers/simplifyMkdocsFooter.test.ts b/plugins/techdocs/src/reader/transformers/simplifyMkdocsFooter.test.ts index dbc3761e80..020befd522 100644 --- a/plugins/techdocs/src/reader/transformers/simplifyMkdocsFooter.test.ts +++ b/plugins/techdocs/src/reader/transformers/simplifyMkdocsFooter.test.ts @@ -18,20 +18,26 @@ import { createTestShadowDom, FIXTURES } from '../../test-utils'; import { simplifyMkdocsFooter } from './simplifyMkdocsFooter'; describe('simplifyMkdocsFooter', () => { - it('does not remove mkdocs copyright', () => { - const shadowDom = createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE, { - preTransformers: [], - postTransformers: [], - }); + it('does not remove mkdocs copyright', async () => { + const shadowDom = await createTestShadowDom( + FIXTURES.FIXTURE_STANDARD_PAGE, + { + preTransformers: [], + postTransformers: [], + }, + ); expect(shadowDom.querySelector('.md-footer-copyright')).toBeTruthy(); }); - it('does remove mkdocs copyright', () => { - const shadowDom = createTestShadowDom(FIXTURES.FIXTURE_STANDARD_PAGE, { - preTransformers: [simplifyMkdocsFooter()], - postTransformers: [], - }); + it('does remove mkdocs copyright', async () => { + const shadowDom = await createTestShadowDom( + FIXTURES.FIXTURE_STANDARD_PAGE, + { + preTransformers: [simplifyMkdocsFooter()], + postTransformers: [], + }, + ); expect(shadowDom.querySelector('.md-footer-copyright')).toBeFalsy(); }); diff --git a/plugins/techdocs/src/reader/transformers/transformer.ts b/plugins/techdocs/src/reader/transformers/transformer.ts index 7b440befbf..fc52f42b5c 100644 --- a/plugins/techdocs/src/reader/transformers/transformer.ts +++ b/plugins/techdocs/src/reader/transformers/transformer.ts @@ -14,12 +14,12 @@ * limitations under the License. */ -export type Transformer = (dom: Element) => Element; +export type Transformer = (dom: Element) => Element | Promise; -export const transform = ( +export const transform = async ( html: string | Element, transformers: Transformer[], -): Element => { +): Promise => { let dom: Element; if (typeof html === 'string') { @@ -30,9 +30,9 @@ export const transform = ( throw new Error('dom is not a recognized type'); } - transformers.forEach(transformer => { - dom = transformer(dom); - }); + for (const transformer of transformers) { + dom = await transformer(dom); + } return dom; }; diff --git a/plugins/techdocs/src/test-utils/shadowDom.ts b/plugins/techdocs/src/test-utils/shadowDom.ts index 61055a87bd..f8289bf6d9 100644 --- a/plugins/techdocs/src/test-utils/shadowDom.ts +++ b/plugins/techdocs/src/test-utils/shadowDom.ts @@ -22,13 +22,13 @@ export type CreateTestShadowDomOptions = { postTransformers: Transformer[]; }; -export const createTestShadowDom = ( +export const createTestShadowDom = async ( fixture: string, opts: CreateTestShadowDomOptions = { preTransformers: [], postTransformers: [], }, -): ShadowRoot => { +): Promise => { const divElement = document.createElement('div'); divElement.attachShadow({ mode: 'open' }); document.body.appendChild(divElement); @@ -39,7 +39,7 @@ export const createTestShadowDom = ( 'text/html', ).documentElement; if (opts.preTransformers) { - dom = transformer(dom, opts.preTransformers); + dom = await transformer(dom, opts.preTransformers); } // Mount the UI @@ -47,7 +47,7 @@ export const createTestShadowDom = ( // Transformers after the UI is rendered if (opts.postTransformers) { - transformer(dom, opts.postTransformers); + await transformer(dom, opts.postTransformers); } return divElement.shadowRoot!; diff --git a/plugins/todo/package.json b/plugins/todo/package.json index cac45bcd0a..ece2509882 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -27,7 +27,7 @@ }, "dependencies": { "@backstage/catalog-model": "^0.9.0", - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", @@ -40,10 +40,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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 0a4194cc29..94324eed10 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-user-settings +## 0.3.1 + +### Patch Changes + +- b5953c1df: Aligns switch left and allows clicking on rows +- Updated dependencies + - @backstage/core-components@0.1.6 + ## 0.3.0 ### Minor Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 8a6480182e..7a450a188e 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.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,7 +30,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^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", @@ -42,11 +42,11 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", "@backstage/core-plugin-api": "^0.1.3", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/src/components/FeatureFlags/FeatureFlagsItem.tsx b/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx index 62861d99a9..e97b33cd92 100644 --- a/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx +++ b/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx @@ -17,8 +17,8 @@ import React from 'react'; import { ListItem, - ListItemSecondaryAction, ListItemText, + ListItemIcon, Switch, Tooltip, } from '@material-ui/core'; @@ -31,20 +31,15 @@ type Props = { }; export const FlagItem = ({ flag, enabled, toggleHandler }: Props) => ( - + toggleHandler(flag.name)}> + + + + + - - - toggleHandler(flag.name)} - name={flag.name} - /> - - ); diff --git a/plugins/welcome/package.json b/plugins/welcome/package.json index 50ab900e7f..68cb992e40 100644 --- a/plugins/welcome/package.json +++ b/plugins/welcome/package.json @@ -30,7 +30,7 @@ "start": "backstage-cli plugin:serve" }, "dependencies": { - "@backstage/core-components": "^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", @@ -42,10 +42,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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/package.json b/plugins/xcmetrics/package.json index 07275dbba7..b939c3e5bf 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -20,7 +20,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.5", + "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/theme": "^0.2.8", @@ -33,10 +33,10 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.7.4", - "@backstage/core-app-api": "^0.1.4", - "@backstage/dev-utils": "^0.2.2", - "@backstage/test-utils": "^0.1.14", + "@backstage/cli": "^0.7.5", + "@backstage/core-app-api": "^0.1.5", + "@backstage/dev-utils": "^0.2.3", + "@backstage/test-utils": "^0.1.15", "@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 8cd71b039e..949f9c5729 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,6 +129,26 @@ "@azure/abort-controller" "^1.0.0" tslib "^2.0.0" +"@azure/core-auth@^1.3.0": + version "1.3.2" + resolved "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz#6a2c248576c26df365f6c7881ca04b7f6d08e3d0" + integrity sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + +"@azure/core-client@^1.0.0": + version "1.2.2" + resolved "https://registry.npmjs.org/@azure/core-client/-/core-client-1.2.2.tgz#29c781e5ccd4da968cea89d3b909ab573a3a7bec" + integrity sha512-VYFR2qiczjBrSfpQSbo5s8FJhXaJFz2tP01MOrpNJaOqnSNEKcY35I79b1Ty7s8qHGvc5/YMJ745l3B7abncFQ== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-asynciterator-polyfill" "^1.0.0" + "@azure/core-auth" "^1.3.0" + "@azure/core-rest-pipeline" "^1.1.0" + "@azure/core-tracing" "1.0.0-preview.12" + tslib "^2.2.0" + "@azure/core-http@^1.2.0": version "1.2.2" resolved "https://registry.npmjs.org/@azure/core-http/-/core-http-1.2.2.tgz#a6f7717184fd2657d3acabd1d64dfdc0bd531ce3" @@ -167,6 +187,38 @@ dependencies: "@azure/core-asynciterator-polyfill" "^1.0.0" +"@azure/core-rest-pipeline@^1.1.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.1.1.tgz#53b4278f5c417c3da9f133511064375362b68a12" + integrity sha512-ObF8iTEDXIG7/NlL28ni9bR3XLJwgm2S3GWO4aNW6CsTCFVoY9HMdbBtN7xOB+pUQwifehifXNnootbzzuwJnw== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-auth" "^1.3.0" + "@azure/core-tracing" "1.0.0-preview.12" + "@azure/logger" "^1.0.0" + form-data "^3.0.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + tslib "^2.2.0" + uuid "^8.3.0" + +"@azure/core-tracing@1.0.0-preview.10": + version "1.0.0-preview.10" + resolved "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.10.tgz#e7060272145dddad4486765030d1b037cd52a8ea" + integrity sha512-iIwjtMwQnsxB7cYkugMx+s4W1nfy3+pT/ceo+uW1fv4YDgYe84nh+QP0fEC9IH/3UATLSWbIBemdMHzk2APUrw== + dependencies: + "@opencensus/web-types" "0.0.7" + "@opentelemetry/api" "^0.10.2" + tslib "^2.0.0" + +"@azure/core-tracing@1.0.0-preview.12": + version "1.0.0-preview.12" + resolved "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.12.tgz#f53ff452c0742ad981c244f97d93d37ca2b5e139" + integrity sha512-nvo2Wc4EKZGN6eFu9n3U7OXmASmL8VxoPIH7xaD6OlQqi44bouF0YIi9ID5rEsKLiAU59IYx6M297nqWVMWPDg== + dependencies: + "@opentelemetry/api" "^1.0.0" + tslib "^2.2.0" + "@azure/core-tracing@1.0.0-preview.9": version "1.0.0-preview.9" resolved "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.9.tgz#84f3b85572013f9d9b85e1e5d89787aa180787eb" @@ -176,26 +228,29 @@ "@opentelemetry/api" "^0.10.2" tslib "^2.0.0" -"@azure/identity@^1.2.2": - version "1.2.2" - resolved "https://registry.npmjs.org/@azure/identity/-/identity-1.2.2.tgz#00d673c8881778c55777fcc76e822b42466d3fc7" - integrity sha512-aYkeNXl52aEHW1iOZQJb3SC7Vvbu87f01iNT+pSVHwj09LpN9+gP/Lb9uoWy36Fgv9WlukM55LbjLSbb1Renqw== +"@azure/identity@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@azure/identity/-/identity-1.5.0.tgz#0ac832b95adaac00b4718d92b43b2c9c5ab42d2d" + integrity sha512-djgywuWtX6720seqNOPmGM1hY54oHnjRT0MLIOzacMARTZuEtAIaFFvMPBlUIMQdtSGhdjH+/MS1/9PE8j83eA== dependencies: - "@azure/core-http" "^1.2.0" - "@azure/core-tracing" "1.0.0-preview.9" + "@azure/core-auth" "^1.3.0" + "@azure/core-client" "^1.0.0" + "@azure/core-rest-pipeline" "^1.1.0" + "@azure/core-tracing" "1.0.0-preview.12" "@azure/logger" "^1.0.0" - "@azure/msal-node" "1.0.0-beta.3" - "@opentelemetry/api" "^0.10.2" + "@azure/msal-node" "1.0.0-beta.6" + "@types/stoppable" "^1.1.0" axios "^0.21.1" events "^3.0.0" jws "^4.0.0" msal "^1.0.2" open "^7.0.0" qs "^6.7.0" + stoppable "^1.1.0" tslib "^2.0.0" uuid "^8.3.0" optionalDependencies: - keytar "^5.4.0" + keytar "^7.3.0" "@azure/logger@^1.0.0": version "1.0.1" @@ -204,50 +259,43 @@ dependencies: tslib "^2.0.0" -"@azure/msal-common@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@azure/msal-common/-/msal-common-2.1.0.tgz#a4bc17e254d6ec524016f13267947dd4ff4a624d" - integrity sha512-Y1Id+jG59S3eY2ZQQtUA/lxwbRcgjcWaiib9YX+SwV3zeRauKfEiZT7l3z+lwV+T+Sst20F6l1mJsfQcfE7CEQ== +"@azure/msal-common@^4.0.0", "@azure/msal-common@^4.4.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@azure/msal-common/-/msal-common-4.4.0.tgz#818526042f78838ebc332fb735e7de64d8bccb45" + integrity sha512-Qrs33Ctt2KM7NxArFPIUKc8UbIcm7zYxJFdJeQ9k7HKBhVk3e88CUz1Mw33cS/Jr+YA1H02OAzHg++bJ+4SFyQ== dependencies: debug "^4.1.1" -"@azure/msal-common@^4.3.0": - version "4.3.0" - resolved "https://registry.npmjs.org/@azure/msal-common/-/msal-common-4.3.0.tgz#b540e92748656724088bf77192e59943a93135bc" - integrity sha512-jFqUWe83wVb6O8cNGGBFg2QlKvqM1ezUgJTEV7kIsAPX0RXhGFE4B1DLNt6hCnkTXDbw+KGW0zgxOEr4MJQwLw== +"@azure/msal-node@1.0.0-beta.6": + version "1.0.0-beta.6" + resolved "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.0.0-beta.6.tgz#da6bc3a3a861057c85586055960e069f162548ee" + integrity sha512-ZQI11Uz1j0HJohb9JZLRD8z0moVcPks1AFW4Q/Gcl67+QvH4aKEJti7fjCcipEEZYb/qzLSO8U6IZgPYytsiJQ== dependencies: - debug "^4.1.1" - -"@azure/msal-node@1.0.0-beta.3": - version "1.0.0-beta.3" - resolved "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.0.0-beta.3.tgz#c84c7948028b39e48b901f5fac35bdedcbc8772e" - integrity sha512-/KfYRfrsOIrZONvo/0Vi5umuqbPBtCWNtmRvkse64uI0C4CP/W4WXwRD42VMws/8LtKvr1I5rYlYgFzt5zDz/A== - dependencies: - "@azure/msal-common" "^2.1.0" + "@azure/msal-common" "^4.0.0" axios "^0.21.1" jsonwebtoken "^8.5.1" uuid "^8.3.0" "@azure/msal-node@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.1.0.tgz#e472cfadead169f8832066ae6c2d6b8eef4e89e4" - integrity sha512-gMO9aZdWOzufp1PcdD5ID25DdS9eInxgeCqx4Tk8PVU6Z7RxJQhoMzS64cJhGdpYgeIQwKljtF0CLCcPFxew/w== + version "1.2.0" + resolved "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.2.0.tgz#d08a5fb3391436715cb37c6eb44816013bdfa11e" + integrity sha512-79o5n483vslc7Qegh9+0BsxODRmlk6YYjVdl9jvwmAuF+i+oylq57e7RVhTVocKCbLCIMOKARI14JyKdDbW0WA== dependencies: - "@azure/msal-common" "^4.3.0" + "@azure/msal-common" "^4.4.0" axios "^0.21.1" jsonwebtoken "^8.5.1" uuid "^8.3.0" -"@azure/storage-blob@^12.4.0": - version "12.4.0" - resolved "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.4.0.tgz#7127ddd9f413105e2c3688691bc4c6245d0806b3" - integrity sha512-OnhVSoKD1HzBB79/rFzPbC4w9TdzFXeoOwkX+aIu3rb8qvN0VaqvUqZXSrBCyG2LcLyVkY4MPCJQBrmEUm9kvw== +"@azure/storage-blob@^12.5.0": + version "12.5.0" + resolved "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.5.0.tgz#1ddd8837d9a15ebe355e795375d13b406f2cb496" + integrity sha512-DgoefgODst2IPkkQsNdhtYdyJgSsAZC1pEujO6aD5y7uFy5GnzhYliobSrp204jYRyK5XeJ9iiePmy/SPtTbLA== dependencies: "@azure/abort-controller" "^1.0.0" "@azure/core-http" "^1.2.0" "@azure/core-lro" "^1.0.2" "@azure/core-paging" "^1.1.1" - "@azure/core-tracing" "1.0.0-preview.9" + "@azure/core-tracing" "1.0.0-preview.10" "@azure/logger" "^1.0.0" "@opentelemetry/api" "^0.10.2" events "^3.0.0" @@ -3900,6 +3948,11 @@ dependencies: "@opentelemetry/context-base" "^0.10.2" +"@opentelemetry/api@^1.0.0": + version "1.0.1" + resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.1.tgz#03c72f548431da5820a0c8864d1401e348e7e79f" + integrity sha512-H5Djcc2txGAINgf3TNaq4yFofYSIK3722PM89S/3R8FuI/eqi1UscajlXk7EBkG9s2pxss/q6SHlpturaavXaw== + "@opentelemetry/context-base@^0.10.2": version "0.10.2" resolved "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.10.2.tgz#55bea904b2b91aa8a8675df9eaba5961bddb1def" @@ -4228,6 +4281,13 @@ resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== +"@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.8.3": + version "1.8.3" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + "@sinonjs/commons@^1.7.0": version "1.7.1" resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" @@ -4242,6 +4302,27 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@sinonjs/fake-timers@^7.0.4", "@sinonjs/fake-timers@^7.1.0": + version "7.1.2" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@sinonjs/samsam@^6.0.2": + version "6.0.2" + resolved "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz#a0117d823260f282c04bff5f8704bdc2ac6910bb" + integrity sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ== + dependencies: + "@sinonjs/commons" "^1.6.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" + +"@sinonjs/text-encoding@^0.7.1": + version "0.7.1" + resolved "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" + integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== + "@spotify/eslint-config-base@^9.0.0": version "9.0.2" resolved "https://registry.npmjs.org/@spotify/eslint-config-base/-/eslint-config-base-9.0.2.tgz#a4830f610f40de935de795d3def486c3e5064ee4" @@ -5846,9 +5927,9 @@ "@types/istanbul-lib-report" "*" "@types/jenkins@^0.23.1": - version "0.23.1" - resolved "https://registry.npmjs.org/@types/jenkins/-/jenkins-0.23.1.tgz#d0f0ef5511beff975c91cbd2365e580d700ca7f9" - integrity sha512-3oGxVCq+5esbjb0BQXUv0Iz0/7ogJxmzaxKtxwwMik5vGtRvfjWf/sXGA1RzkVAG0+rJUZNKStjKRdtqJfEyRg== + version "0.23.2" + resolved "https://registry.npmjs.org/@types/jenkins/-/jenkins-0.23.2.tgz#96736a2be4904efdfe7fe2650569479fd77dc48e" + integrity sha512-BELmIZ6brxwGFqBHfLjLTjYRWAUqcT1d2BydH1CcRTZEjCYw3DRVfZkXU7BVlyIsKXm2ZMIKVkEjKKtVDvPiXA== dependencies: "@types/node" "*" @@ -7825,6 +7906,15 @@ autoprefixer@^9.7.2: postcss "^7.0.32" postcss-value-parser "^4.1.0" +aws-sdk-mock@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/aws-sdk-mock/-/aws-sdk-mock-5.2.1.tgz#126d4d5362c96b7d1d0bd87708a99d626c19ffd4" + integrity sha512-dY7zA1p/lX335V4/aOJ2L8ggXC3a5zokTJFZlZVW3uU+Zej7u+V7WrEcN5TVaJAnk4auT263T6EK/OHW4WjKhw== + dependencies: + aws-sdk "^2.928.0" + sinon "^11.1.1" + traverse "^0.6.6" + aws-sdk@^2.382.0, aws-sdk@^2.840.0: version "2.922.0" resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.922.0.tgz#4568be067dceaaeda5d2d5a7e2f22666687f0b32" @@ -7840,6 +7930,21 @@ aws-sdk@^2.382.0, aws-sdk@^2.840.0: uuid "3.3.2" xml2js "0.4.19" +aws-sdk@^2.928.0: + version "2.951.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.951.0.tgz#3cd8c0a4610407623ae8f1724f431fd328441033" + integrity sha512-YPqhdESUzd4+pSuGJcfMnG1qNVbmZjnmsa85Z9jofR1ilIpuV31onIiFHv8iubM59ETok/+zy3QOmxRSLYzFmQ== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -8380,6 +8485,11 @@ bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: dependencies: tweetnacl "^0.14.3" +bdd-lazy-var@^2.6.0: + version "2.6.1" + resolved "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz#ca03fb36d68c5a507c0ba9a4d53160b899e6b7cb" + integrity sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A== + before-after-hook@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" @@ -11727,10 +11837,10 @@ endent@^2.0.1: fast-json-parse "^1.0.3" objectorarray "^1.0.4" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" - integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== +enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" @@ -14745,9 +14855,9 @@ immer@8.0.1: integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== immer@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/immer/-/immer-9.0.1.tgz#1116368e051f9a0fd188c5136b6efb74ed69c57f" - integrity sha512-7CCw1DSgr8kKYXTYOI1qMM/f5qxT5vIVMeGLDCDX8CSxsggr1Sjdoha4OhsP0AZ1UvWbyZlILHvLjaynuu02Mg== + version "9.0.5" + resolved "https://registry.npmjs.org/immer/-/immer-9.0.5.tgz#a7154f34fe7064f15f00554cc94c66cc0bf453ec" + integrity sha512-2WuIehr2y4lmYz9gaQzetPR2ECniCifk4ORaQbU3g5EalLt+0IVTosEPJ5BoYl/75ky2mivzdRzV8wWgQGOSYQ== immutable@>=3.8.2, immutable@^3.8.1, immutable@^3.8.2, immutable@^3.x.x: version "3.8.2" @@ -15636,6 +15746,11 @@ is-yarn-global@^0.3.0: resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -15689,9 +15804,9 @@ isomorphic-form-data@~2.0.0: form-data "^2.3.2" isomorphic-git@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.8.0.tgz#50440650a64706a321cbea1af955c1cf1110b238" - integrity sha512-TWJvQh+++eFrEG0IFS/jLhMwsBoCOX1/Dsw9q8no59Mp1K0jEjSHXFWv2P04PwkxcIpePkXVBI5YFcFT2nkuQg== + version "1.9.2" + resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.9.2.tgz#0e492dbcd9873070b2a57eef257a45b90020ed72" + integrity sha512-puCXcGgtkDXdMYLZlAEGbpkbmHn/Q4Lsl2uMFwMLOKmmr8Qe7Fe3+c6k2+aHW3rMdJYg9xTv95BJ+PRzR8Ydww== dependencies: async-lock "^1.1.0" clean-git-ref "^2.0.1" @@ -16765,6 +16880,11 @@ junk@^3.1.0: resolved "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== +just-extend@^4.0.2: + version "4.2.1" + resolved "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" + integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== + jwa@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -16809,13 +16929,13 @@ kafkajs@^1.16.0-beta.6: resolved "https://registry.npmjs.org/kafkajs/-/kafkajs-1.16.0-beta.21.tgz#5736bcef7b505714642a82d6dc0d1507fc0ae817" integrity sha512-6iarOOnKTaei0EK+a+K2V/bBA7YgvpA69tZwnVF85PxGlvoG/wqKpfRNh2Mb04uiNTEwBYNEIO7hAFElEM6/AA== -keytar@^5.4.0: - version "5.6.0" - resolved "https://registry.npmjs.org/keytar/-/keytar-5.6.0.tgz#7b5d4bd043d17211163640be6c4a27a49b12bb39" - integrity sha512-ueulhshHSGoryfRXaIvTj0BV1yB0KddBGhGoqCxSN9LR1Ks1GKuuCdVhF+2/YOs5fMl6MlTI9On1a4DHDXoTow== +keytar@^7.3.0: + version "7.7.0" + resolved "https://registry.npmjs.org/keytar/-/keytar-7.7.0.tgz#3002b106c01631aa79b1aa9ee0493b94179bbbd2" + integrity sha512-YEY9HWqThQc5q5xbXbRwsZTh2PJ36OSYRjSv3NN2xf5s5dpLTjEZnC2YikR29OaVybf9nQ0dJ/80i40RS97t/A== dependencies: - nan "2.14.1" - prebuild-install "5.3.3" + node-addon-api "^3.0.0" + prebuild-install "^6.0.0" keyv-memcache@^1.2.5: version "1.2.5" @@ -17363,7 +17483,7 @@ lodash.flattendeep@^4.0.0: resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= -lodash.get@^4, lodash.get@^4.0.0: +lodash.get@^4, lodash.get@^4.0.0, lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= @@ -18396,6 +18516,11 @@ mkdirp-classic@^0.5.2: resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b" integrity sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g== +mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" @@ -18603,7 +18728,7 @@ named-placeholders@^1.1.2: dependencies: lru-cache "^4.1.3" -nan@2.14.1, nan@^2.12.1, nan@^2.14.0: +nan@^2.12.1, nan@^2.14.0: version "2.14.1" resolved "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== @@ -18705,6 +18830,17 @@ nice-try@^1.0.4: resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +nise@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz#713ef3ed138252daef20ec035ab62b7a28be645c" + integrity sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@sinonjs/fake-timers" "^7.0.4" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + path-to-regexp "^1.7.0" + no-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -18713,10 +18849,10 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-abi@^2.7.0: - version "2.19.3" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz#252f5dcab12dad1b5503b2d27eddd4733930282d" - integrity sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg== +node-abi@^2.21.0: + version "2.30.0" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz#8be53bf3e7945a34eea10e0fc9a5982776cf550b" + integrity sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg== dependencies: semver "^5.4.1" @@ -18899,9 +19035,9 @@ node-releases@^1.1.52, node-releases@^1.1.61, node-releases@^1.1.71: integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== nodemon@^2.0.2: - version "2.0.7" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" - integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== + version "2.0.12" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz#5dae4e162b617b91f1873b3bfea215dd71e144d5" + integrity sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA== dependencies: chokidar "^3.2.2" debug "^3.2.6" @@ -18914,11 +19050,6 @@ nodemon@^2.0.2: undefsafe "^2.0.3" update-notifier "^4.1.0" -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= - "nopt@2 || 3": version "3.0.6" resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -20018,6 +20149,13 @@ path-to-regexp@0.1.7: resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -20773,26 +20911,24 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" -prebuild-install@5.3.3: - version "5.3.3" - resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e" - integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g== +prebuild-install@^6.0.0: + version "6.1.3" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.3.tgz#8ea1f9d7386a0b30f7ef20247e36f8b2b82825a2" + integrity sha512-iqqSR84tNYQUQHRXalSKdIaM8Ov1QxOVuBNWI7+BzZWv6Ih9k75wOnH1rGQ9WWTaaLkTpxWKIciOF0KyfM74+Q== dependencies: detect-libc "^1.0.3" expand-template "^2.0.3" github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" napi-build-utils "^1.0.1" - node-abi "^2.7.0" - noop-logger "^0.1.1" + node-abi "^2.21.0" npmlog "^4.0.1" pump "^3.0.0" rc "^1.2.7" simple-get "^3.0.3" tar-fs "^2.0.0" tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" precond@0.2: version "0.2.3" @@ -23211,6 +23347,18 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +sinon@^11.1.1: + version "11.1.1" + resolved "https://registry.npmjs.org/sinon/-/sinon-11.1.1.tgz#99a295a8b6f0fadbbb7e004076f3ae54fc6eab91" + integrity sha512-ZSSmlkSyhUWbkF01Z9tEbxZLF/5tRC9eojCdFh33gtQaP7ITQVaMWQHGuFM7Cuf/KEfihuh1tTl3/ABju3AQMg== + dependencies: + "@sinonjs/commons" "^1.8.3" + "@sinonjs/fake-timers" "^7.1.0" + "@sinonjs/samsam" "^6.0.2" + diff "^5.0.0" + nise "^5.1.0" + supports-color "^7.2.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -24195,6 +24343,13 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + supports-color@^8.1.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -24858,7 +25013,7 @@ tr46@^2.0.2: resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= -traverse@~0.6.6: +traverse@^0.6.6, traverse@~0.6.6: version "0.6.6" resolved "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= @@ -24999,7 +25154,7 @@ tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@~2.3.0: +tslib@^2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@~2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== @@ -25074,7 +25229,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -25978,9 +26133,9 @@ webpack-virtual-modules@^0.2.2: debug "^3.0.0" webpack@^4.41.6, webpack@^4.44.2: - version "4.44.2" - resolved "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" - integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + version "4.46.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" @@ -25990,7 +26145,7 @@ webpack@^4.41.6, webpack@^4.44.2: ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.3.0" + enhanced-resolve "^4.5.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" @@ -26097,11 +26252,6 @@ which-module@^2.0.0: resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - which-pm@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" From c23f526a8e37d53a00a0d7e73158ba5486bf38d6 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Thu, 22 Jul 2021 19:35:49 +0200 Subject: [PATCH 07/56] Adds api-report Signed-off-by: Nicolas Torres --- plugins/catalog/api-report.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index a416e70038..9deda407d7 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) "EntityProcessErrors" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export const EntityProcessErrors: () => 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) "hasErrors" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const hasErrors: (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) From 8cf1918ad15abc3b6b04688370780c27a32518cc Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Thu, 22 Jul 2021 19:10:20 +0200 Subject: [PATCH 08/56] Make objectTypes configurable from app-config.yaml Signed-off-by: Miklos Kiss --- plugins/kubernetes-backend/schema.d.ts | 9 +++++++ .../src/service/KubernetesFanOutHandler.ts | 26 +++++++++---------- .../kubernetes-backend/src/service/router.ts | 10 ++++--- 3 files changed, 29 insertions(+), 16 deletions(-) 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/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 3039560aad..94e84440b6 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([ +const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [ 'pods', 'services', 'configmaps', @@ -34,44 +34,44 @@ const DEFAULT_OBJECTS = new Set([ 'replicasets', 'horizontalpodautoscalers', 'ingresses', -]); +]; 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[], + objectTypesToFetch: KubernetesObjectTypes[] = DEFAULT_OBJECTS, ) { 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' ] || requestBody.entity?.metadata?.name; - const clusterDetails: ClusterDetails[] = await this.serviceLocator.getClustersByServiceId( - entityName, - ); + const clusterDetails: ClusterDetails[] = + await this.serviceLocator.getClustersByServiceId(entityName); // Execute all of these async actions simultaneously/without blocking sequentially as no common object is modified by them const promises: Promise[] = clusterDetails.map(cd => { - const kubernetesAuthTranslator: KubernetesAuthTranslator = KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( - cd.authProvider, - ); + const kubernetesAuthTranslator: KubernetesAuthTranslator = + KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( + cd.authProvider, + ); return kubernetesAuthTranslator.decorateClusterDetailsWithAuth( cd, requestBody, @@ -98,7 +98,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..027faf03ae 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, @@ -70,9 +71,8 @@ export const makeRouter = ( const serviceId = req.params.serviceId; const requestBody: KubernetesRequestBody = req.body; try { - const response = await kubernetesFanOutHandler.getKubernetesObjectsByEntity( - requestBody, - ); + const response = + await kubernetesFanOutHandler.getKubernetesObjectsByEntity(requestBody); res.json(response); } catch (e) { logger.error( @@ -133,12 +133,16 @@ export async function createRouter( ); const serviceLocator = getServiceLocator(options.config, clusterDetails); + const objectTypes = options.config.getOptionalStringArray( + 'kubernetes.objectTypes', + ) as KubernetesObjectTypes[]; const kubernetesFanOutHandler = new KubernetesFanOutHandler( logger, fetcher, serviceLocator, customResources, + objectTypes, ); return makeRouter(logger, kubernetesFanOutHandler, clusterDetails); From a0a8d357176c98d68f4d43852ea2943657ee5d8a Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Fri, 23 Jul 2021 09:31:33 +0200 Subject: [PATCH 09/56] add changeset Signed-off-by: Miklos Kiss --- .changeset/purple-comics-fold.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/purple-comics-fold.md 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'] From 638a376f5360dfe97921b1c822061cd410b108ec Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Fri, 23 Jul 2021 10:03:30 +0200 Subject: [PATCH 10/56] use the correct prettier config Signed-off-by: Miklos Kiss --- .../src/service/KubernetesFanOutHandler.ts | 12 ++++++------ plugins/kubernetes-backend/src/service/router.ts | 5 +++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 94e84440b6..5e27dac770 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -63,15 +63,15 @@ export class KubernetesFanOutHandler { 'backstage.io/kubernetes-id' ] || requestBody.entity?.metadata?.name; - const clusterDetails: ClusterDetails[] = - await this.serviceLocator.getClustersByServiceId(entityName); + const clusterDetails: ClusterDetails[] = await this.serviceLocator.getClustersByServiceId( + entityName, + ); // Execute all of these async actions simultaneously/without blocking sequentially as no common object is modified by them const promises: Promise[] = clusterDetails.map(cd => { - const kubernetesAuthTranslator: KubernetesAuthTranslator = - KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( - cd.authProvider, - ); + const kubernetesAuthTranslator: KubernetesAuthTranslator = KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( + cd.authProvider, + ); return kubernetesAuthTranslator.decorateClusterDetailsWithAuth( cd, requestBody, diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 027faf03ae..13094cf6ed 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -71,8 +71,9 @@ export const makeRouter = ( const serviceId = req.params.serviceId; const requestBody: KubernetesRequestBody = req.body; try { - const response = - await kubernetesFanOutHandler.getKubernetesObjectsByEntity(requestBody); + const response = await kubernetesFanOutHandler.getKubernetesObjectsByEntity( + requestBody, + ); res.json(response); } catch (e) { logger.error( From c5cb55803dda36ccb52fa51a6f9b4317ead10e3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 21 Jul 2021 19:05:55 +0200 Subject: [PATCH 11/56] Implement useEntityOwnership MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/strong-spies-begin.md | 22 ++ plugins/catalog-react/api-report.md | 14 +- plugins/catalog-react/package.json | 2 + .../UserListPicker/UserListPicker.test.tsx | 48 ++-- .../UserListPicker/UserListPicker.tsx | 40 +-- plugins/catalog-react/src/filters.ts | 14 +- plugins/catalog-react/src/hooks/index.ts | 1 + .../src/hooks/useEntityListProvider.test.tsx | 53 ++-- .../src/hooks/useEntityOwnership.test.tsx | 255 ++++++++++++++++++ .../src/hooks/useEntityOwnership.ts | 148 ++++++++++ .../CatalogPage/CatalogPage.test.tsx | 7 +- .../CatalogTable/CatalogTable.test.tsx | 6 +- 12 files changed, 529 insertions(+), 81 deletions(-) create mode 100644 .changeset/strong-spies-begin.md create mode 100644 plugins/catalog-react/src/hooks/useEntityOwnership.test.tsx create mode 100644 plugins/catalog-react/src/hooks/useEntityOwnership.ts diff --git a/.changeset/strong-spies-begin.md b/.changeset/strong-spies-begin.md new file mode 100644 index 0000000000..6ec2fb58d4 --- /dev/null +++ b/.changeset/strong-spies-begin.md @@ -0,0 +1,22 @@ +--- +'@backstage/plugin-catalog-react': minor +--- + +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, ...); +``` diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 03ee9a391a..990e562ffc 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -720,6 +720,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) // @@ -755,18 +763,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 e1b3beda4e..0ed3ac7d70 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -38,6 +38,7 @@ "@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", @@ -54,6 +55,7 @@ "@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/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, + ), }, }} > From 11c370af20440dc69739cf6efba12297d23c8e70 Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Mon, 12 Jul 2021 16:39:24 -0400 Subject: [PATCH 12/56] feat(catalog-backend): support filtering on property existence Signed-off-by: Phil Kuang --- .changeset/chilly-frogs-kiss.md | 5 + .changeset/five-dolls-complain.md | 5 + .changeset/lucky-boats-rescue.md | 5 + .changeset/selfish-phones-double.md | 5 + packages/catalog-client/api-report.md | 9 +- .../catalog-client/src/CatalogClient.test.ts | 10 +- packages/catalog-client/src/CatalogClient.ts | 11 ++- packages/catalog-client/src/types/api.ts | 6 +- packages/catalog-client/src/types/index.ts | 1 + plugins/catalog-backend/api-report.md | 19 ++-- .../src/database/CommonDatabase.test.ts | 92 +++++++++++++++++++ .../src/database/CommonDatabase.ts | 15 ++- plugins/catalog-backend/src/database/types.ts | 5 + .../src/next/NextEntitiesCatalog.ts | 15 ++- .../request/parseEntityFilterParams.test.ts | 14 +-- .../request/parseEntityFilterParams.ts | 27 +++--- plugins/catalog-react/api-report.md | 3 + plugins/catalog-react/src/index.ts | 1 + .../home/components/TechDocsCustomHome.tsx | 4 + 19 files changed, 205 insertions(+), 47 deletions(-) create mode 100644 .changeset/chilly-frogs-kiss.md create mode 100644 .changeset/five-dolls-complain.md create mode 100644 .changeset/lucky-boats-rescue.md create mode 100644 .changeset/selfish-phones-double.md diff --git a/.changeset/chilly-frogs-kiss.md b/.changeset/chilly-frogs-kiss.md new file mode 100644 index 0000000000..bd1c7c7f1b --- /dev/null +++ b/.changeset/chilly-frogs-kiss.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +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. diff --git a/.changeset/five-dolls-complain.md b/.changeset/five-dolls-complain.md new file mode 100644 index 0000000000..1d614019a3 --- /dev/null +++ b/.changeset/five-dolls-complain.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Export `CATALOG_FILTER_EXISTS` symbol diff --git a/.changeset/lucky-boats-rescue.md b/.changeset/lucky-boats-rescue.md new file mode 100644 index 0000000000..748f0cccb3 --- /dev/null +++ b/.changeset/lucky-boats-rescue.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-client': patch +--- + +Support filtering entities via property existence diff --git a/.changeset/selfish-phones-double.md b/.changeset/selfish-phones-double.md new file mode 100644 index 0000000000..ad4880c983 --- /dev/null +++ b/.changeset/selfish-phones-double.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Optimize load times by only fetching entities with the `backstage.io/techdocs-ref` annotation 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/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..ab5193e38e 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(); + 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/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/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-react/api-report.md b/plugins/catalog-react/api-report.md index 2555cc7c0c..01c88be089 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) 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/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', From 2d2d05c4b068d37f6ad3deadbc88fc50d14dadbd Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Sun, 25 Jul 2021 10:04:14 -0400 Subject: [PATCH 13/56] Update packages/catalog-client/src/types/api.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Phil Kuang --- packages/catalog-client/src/types/api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index ab5193e38e..d30caa50d6 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -16,7 +16,7 @@ import { Entity, EntityName, Location } from '@backstage/catalog-model'; -export const CATALOG_FILTER_EXISTS = Symbol(); +export const CATALOG_FILTER_EXISTS = Symbol('CATALOG_FILTER_EXISTS'); export type CatalogEntitiesRequest = { filter?: From 5948fd8fce3975f311961905ef285b4b89df228c Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Tue, 27 Jul 2021 11:19:30 +0200 Subject: [PATCH 14/56] Warning panel uses darkmode properly Updates related tests Signed-off-by: Nicolas Torres --- .../WarningPanel/WarningPanel.test.tsx | 61 ++++++++++--- .../components/WarningPanel/WarningPanel.tsx | 88 +++++++++++-------- .../GroupsExplorerContent.test.tsx | 4 +- .../components/FossaCard/FossaCard.test.tsx | 4 +- 4 files changed, 100 insertions(+), 57 deletions(-) diff --git a/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx b/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx index 36b5372900..5a6f49b689 100644 --- a/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx +++ b/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx @@ -17,22 +17,39 @@ import React from 'react'; import { fireEvent, screen } from '@testing-library/react'; import { renderInTestApp } from '@backstage/test-utils'; -import { Typography } from '@material-ui/core'; +import { ThemeProvider, Typography } from '@material-ui/core'; -import { WarningPanel } from './WarningPanel'; +import { WarningPanel, WarningProps } from './WarningPanel'; +import { lightTheme } from '@backstage/theme'; -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 () => { - await renderInTestApp(); + await renderInTestApp( + + + , + ); expect(screen.getByText('Warning: Mock title')).toBeInTheDocument(); }); it('renders title', async () => { - await renderInTestApp(); + await renderInTestApp( + + + , + ); const expandIcon = await screen.getByText('Warning: Mock title'); fireEvent.click(expandIcon); expect(screen.getByText('Warning: Mock title')).toBeInTheDocument(); @@ -41,27 +58,43 @@ describe('', () => { it('renders title and children', async () => { await renderInTestApp( - - Java stacktrace - , + + + Java stacktrace + + , ); expect(screen.getByText('Java stacktrace')).toBeInTheDocument(); }); it('renders message', async () => { - await renderInTestApp(); + await renderInTestApp( + + + , + ); expect(screen.getByText('Warning')).toBeInTheDocument(); expect(screen.getByText('Some more info')).toBeInTheDocument(); }); it('renders title, message, and children', async () => { await renderInTestApp( - - Java stacktrace - , + + + Java stacktrace + + , ); expect(screen.getByText('Warning: Mock title')).toBeInTheDocument(); 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 23bd825787..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,60 +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: Props['severity'], + severity: NonNullable, theme: BackstageTheme, ) => { - switch (severity) { - case 'error': - return theme.palette.errorText; - case 'info': - return theme.palette.infoText; - default: - return theme.palette.warningText; - } + const getColor = theme.palette.type === 'light' ? darken : lighten; + return getColor(theme.palette[severity].light, 0.6); }; const getWarningBackgroundColor = ( - severity: Props['severity'], + severity: NonNullable, theme: BackstageTheme, ) => { - switch (severity) { - case 'error': - return theme.palette.errorBackground; - case 'info': - return theme.palette.infoBackground; - default: - return theme.palette.warningBackground; - } + 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: ({ severity }: Props) => getWarningTextColor(severity, theme), + fill: ({ severity }: WarningProps) => + getWarningTextColor( + severity as NonNullable, + theme, + ), }, })); -const ErrorOutlineStyled = ({ severity }: Pick) => { +const ErrorOutlineStyled = ({ severity }: Pick) => { const classes = useErrorOutlineStyles({ severity }); return ; }; -const ExpandMoreIconStyled = ({ severity }: Pick) => { +const ExpandMoreIconStyled = ({ severity }: Pick) => { const classes = useErrorOutlineStyles({ severity }); return ; }; const useStyles = makeStyles(theme => ({ panel: { - backgroundColor: ({ severity }: Props) => - getWarningBackgroundColor(severity, theme), - color: ({ severity }: Props) => getWarningTextColor(severity, theme), + backgroundColor: ({ severity }: WarningProps) => + getWarningBackgroundColor( + severity as NonNullable, + theme, + ), + color: ({ severity }: WarningProps) => + getWarningTextColor( + severity as NonNullable, + theme, + ), verticalAlign: 'middle', }, summary: { @@ -83,15 +83,26 @@ const useStyles = makeStyles(theme => ({ flexDirection: 'row', }, summaryText: { - color: ({ severity }: Props) => getWarningTextColor(severity, theme), + color: ({ severity }: WarningProps) => + getWarningTextColor( + severity as NonNullable, + theme, + ), fontWeight: 'bold', }, message: { width: '100%', display: 'block', - color: ({ severity }: Props) => getWarningTextColor(severity, theme), - backgroundColor: ({ severity }: Props) => - getWarningBackgroundColor(severity, theme), + color: ({ severity }: WarningProps) => + getWarningTextColor( + severity as NonNullable, + theme, + ), + backgroundColor: ({ severity }: WarningProps) => + getWarningBackgroundColor( + severity as NonNullable, + theme, + ), }, details: { width: '100%', @@ -104,7 +115,7 @@ const useStyles = makeStyles(theme => ({ }, })); -type Props = { +export type WarningProps = { title?: string; severity?: 'warning' | 'error' | 'info'; message?: React.ReactNode; @@ -126,15 +137,14 @@ const capitalize = (s: string) => { * @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 = 'warning', - 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 = capitalize(severity) + (title ? `: ${title}` : ''); 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/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 () => { From 53d2b8038efcdefb1933f172933a9f1494422feb Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Tue, 27 Jul 2021 11:21:02 +0200 Subject: [PATCH 15/56] Renames component to EntityProcessingErrorsPanel Only checks for catalog processing type of errors now Signed-off-by: Nicolas Torres --- .../EntityProcessingErrorsPanel.test.tsx} | 36 ++++++++++++------- .../EntityProcessingErrorsPanel.tsx} | 30 ++++++++++------ .../index.ts | 5 ++- plugins/catalog/src/index.ts | 2 +- 4 files changed, 48 insertions(+), 25 deletions(-) rename plugins/catalog/src/components/{EntityProcessErrors/EntityProcessErrors.test.tsx => EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.test.tsx} (72%) rename plugins/catalog/src/components/{EntityProcessErrors/EntityProcessErrors.tsx => EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx} (53%) rename plugins/catalog/src/components/{EntityProcessErrors => EntityProcessingErrorsPanel}/index.ts (84%) diff --git a/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.test.tsx b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.test.tsx similarity index 72% rename from plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.test.tsx rename to plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.test.tsx index 28f4f92a27..a4e284a0eb 100644 --- a/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.test.tsx +++ b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.test.tsx @@ -18,9 +18,8 @@ import { EntityProvider } from '@backstage/plugin-catalog-react'; import { renderInTestApp } from '@backstage/test-utils'; import React from 'react'; -import { EntityProcessErrors } from './EntityProcessErrors'; +import { EntityProcessingErrorsPanel } from './EntityProcessingErrorsPanel'; import { Entity } from '@backstage/catalog-model'; -import { waitFor } from '@testing-library/react'; describe('', () => { it('renders EntityProcessErrors if the entity has errors', async () => { @@ -55,6 +54,20 @@ describe('', () => { }, }, }, + { + 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', @@ -73,19 +86,18 @@ describe('', () => { }, }; - const { getByText } = await renderInTestApp( + const { getByText, queryByText } = await renderInTestApp( - + , ); - await waitFor(() => { - expect( - getByText( - 'Error: Policy check failed; caused by Error: Malformed envelope, /metadata/labels should be object', - ), - ).toBeInTheDocument(); - expect(getByText('Error: Foo')).toBeInTheDocument(); - }); + 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/EntityProcessErrors/EntityProcessErrors.tsx b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx similarity index 53% rename from plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.tsx rename to plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx index 3d1210290a..565ffc30e3 100644 --- a/plugins/catalog/src/components/EntityProcessErrors/EntityProcessErrors.tsx +++ b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx @@ -14,30 +14,38 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; +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 '../../../../../packages/catalog-client/src'; -export const hasErrors = (entity: Entity) => entity?.status?.items?.length! > 0; +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 EntityProcessErrors = () => { +export const EntityProcessingErrorsPanel = () => { const { entity } = useEntity(); + const catalogProcessingErrors = + (entity?.status?.items?.filter( + errorfilter, + ) as Required[]) || []; return ( <> - {entity?.status?.items?.map( - ({ error }, index) => - error && ( - - - - ), - )} + {catalogProcessingErrors.map(({ error }, index) => ( + + + + ))} ); }; diff --git a/plugins/catalog/src/components/EntityProcessErrors/index.ts b/plugins/catalog/src/components/EntityProcessingErrorsPanel/index.ts similarity index 84% rename from plugins/catalog/src/components/EntityProcessErrors/index.ts rename to plugins/catalog/src/components/EntityProcessingErrorsPanel/index.ts index 10d6d04ed2..1af2c80484 100644 --- a/plugins/catalog/src/components/EntityProcessErrors/index.ts +++ b/plugins/catalog/src/components/EntityProcessingErrorsPanel/index.ts @@ -14,4 +14,7 @@ * limitations under the License. */ -export { EntityProcessErrors, hasErrors } from './EntityProcessErrors'; +export { + EntityProcessingErrorsPanel, + hasCatalogProcessingErrors, +} from './EntityProcessingErrorsPanel'; diff --git a/plugins/catalog/src/index.ts b/plugins/catalog/src/index.ts index 6934843228..fd542fafa3 100644 --- a/plugins/catalog/src/index.ts +++ b/plugins/catalog/src/index.ts @@ -23,7 +23,7 @@ export * from './components/CatalogTable/columns'; export * from './components/CreateComponentButton'; export * from './components/EntityLayout'; export * from './components/EntityOrphanWarning'; -export * from './components/EntityProcessErrors'; +export * from './components/EntityProcessingErrorsPanel'; export * from './components/EntityPageLayout'; export * from './components/EntitySwitch'; export * from './components/FilteredEntityLayout'; From e45382c2df452b497af3b1cb8d5e95ab3d068292 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Tue, 27 Jul 2021 11:23:07 +0200 Subject: [PATCH 16/56] Adds EntityOrphanWarning and EntityProcessingErrorsPanel to create-app Signed-off-by: Nicolas Torres --- .../app/src/components/catalog/EntityPage.tsx | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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..9a4659c65a 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 = ( + + + + + + + + + + + + + + + + From 39ab9a4150d0a27d19879b6a0395190beae9b8f7 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Tue, 27 Jul 2021 11:24:28 +0200 Subject: [PATCH 17/56] Updates changeset and adds EntityProcessingErrorsPanel to entitypage Signed-off-by: Nicolas Torres --- .changeset/tricky-trains-change.md | 29 +++++++++++++++---- .../app/src/components/catalog/EntityPage.tsx | 9 +++--- plugins/catalog/api-report.md | 2 +- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/.changeset/tricky-trains-change.md b/.changeset/tricky-trains-change.md index 95fa8e3398..391dee0eb1 100644 --- a/.changeset/tricky-trains-change.md +++ b/.changeset/tricky-trains-change.md @@ -1,8 +1,27 @@ --- -'example-app': minor -'@backstage/core-components': minor -'@backstage/plugin-catalog': minor +'@backstage/core-components': patch +'@backstage/plugin-catalog': patch --- -Displays errors in the entity page if the entity yaml is malformed -WarningPanel changes color depending on the severity +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 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. diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index a793c20b86..d84a7341bc 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -40,8 +40,8 @@ import { isKind, EntityHasResourcesCard, EntityOrphanWarning, - EntityProcessErrors, - hasErrors, + EntityProcessingErrorsPanel, + hasCatalogProcessingErrors, isOrphan, } from '@backstage/plugin-catalog'; import { @@ -232,10 +232,11 @@ const overviewContent = ( + - + - + diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 9deda407d7..b7aece991b 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -366,7 +366,7 @@ export const FilteredEntityLayout: ({ // Warning: (ae-missing-release-tag) "hasErrors" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const hasErrors: (entity: Entity) => boolean; +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) // From e005199de405e67b757bfc356de5820a27bc302f Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Tue, 27 Jul 2021 11:44:30 +0200 Subject: [PATCH 18/56] adds api-report Signed-off-by: Nicolas Torres --- packages/core-components/api-report.md | 26 ++++++++++++++++---------- plugins/catalog/api-report.md | 6 +++--- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index ccafa4cfa7..993f3a7e84 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -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/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index b7aece991b..c030882bca 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -327,10 +327,10 @@ export const EntityPageLayout: { }) => null; }; -// Warning: (ae-missing-release-tag) "EntityProcessErrors" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// 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 EntityProcessErrors: () => JSX.Element; +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) // @@ -363,7 +363,7 @@ export const FilteredEntityLayout: ({ children, }: PropsWithChildren<{}>) => JSX.Element; -// Warning: (ae-missing-release-tag) "hasErrors" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// 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; From 23951608ba408184d5f8acba9a2541e8f1736717 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 22 Jul 2021 13:27:20 +0200 Subject: [PATCH 19/56] chore: use the new maintained library instead of the older one Signed-off-by: blam --- packages/core-components/package.json | 2 +- .../src/components/Table/Table.tsx | 2 +- yarn.lock | 21 +++++++++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 944002c74f..c8f96537f9 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -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", diff --git a/packages/core-components/src/components/Table/Table.tsx b/packages/core-components/src/components/Table/Table.tsx index d8db602e93..f7ddb2d218 100644 --- a/packages/core-components/src/components/Table/Table.tsx +++ b/packages/core-components/src/components/Table/Table.tsx @@ -47,7 +47,7 @@ import MTable, { MTableHeader, MTableToolbar, Options, -} from 'material-table'; +} from '@material-table/core'; import React, { forwardRef, MutableRefObject, diff --git a/yarn.lock b/yarn.lock index c2dde8f4c4..c839327ef3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1730,7 +1730,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== @@ -3445,6 +3445,23 @@ resolved "https://registry.npmjs.org/@material-icons/font/-/font-1.0.3.tgz#f722e5a69a03f20ef47d015cb69420bebeeaabe5" integrity sha512-aIRd0Z9b/HJ/O24KOaP7dNsXypMnXhpWrpLVYvQB/JesVqXYSbioYND200sR+C14a0LSCp+qWnWCnSXmN1hWGw== +"@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": version "4.11.4" resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.11.4.tgz#4fb9fe5dec5dcf780b687e3a40cff78b2b9640a4" @@ -3492,7 +3509,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== From a9ce6d88924f7d313d3818fc52fc966dad4feffa Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 22 Jul 2021 17:06:12 +0200 Subject: [PATCH 20/56] chore: updating typescript and api-reports Signed-off-by: blam --- packages/core-components/api-report.md | 4 ++-- .../BitriseBuildsTableComponent.tsx | 4 ++-- .../src/components/BuildsPage/lib/CITable/CITable.tsx | 4 ++-- .../src/components/WorkflowRunsTable/WorkflowRunsTable.tsx | 4 ++-- .../src/components/WorkflowRunsTable/WorkflowRunsTable.tsx | 4 ++-- plugins/ilert/src/components/IncidentsPage/IncidentsTable.tsx | 4 ++-- .../src/components/UptimeMonitorsPage/UptimeMonitorsTable.tsx | 4 ++-- .../jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index ccafa4cfa7..ee75877b1d 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'; 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/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/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/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/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/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 From 9ed40d1152494ca41a256ba2965e340298832f41 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 27 Jul 2021 14:13:14 +0200 Subject: [PATCH 21/56] chore: removing the toolbarRef, not sure what this did in the first place but it's ni loinger suypported Signed-off-by: blam --- .../src/components/Table/Table.tsx | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/packages/core-components/src/components/Table/Table.tsx b/packages/core-components/src/components/Table/Table.tsx index f7ddb2d218..6eda4e01cc 100644 --- a/packages/core-components/src/components/Table/Table.tsx +++ b/packages/core-components/src/components/Table/Table.tsx @@ -212,7 +212,6 @@ export interface TableProps } export function TableToolbar(toolbarProps: { - toolbarRef: MutableRefObject; setSearch: (value: string) => void; onSearchChanged: (value: string) => void; toggleFilters: () => void; @@ -220,7 +219,6 @@ export function TableToolbar(toolbarProps: { selectedFiltersLength: number; }) { const { - toolbarRef, setSearch, hasFilters, selectedFiltersLength, @@ -248,7 +246,6 @@ export function TableToolbar(toolbarProps: { @@ -256,11 +253,7 @@ export function TableToolbar(toolbarProps: { } return ( - + ); } @@ -298,13 +291,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 +426,6 @@ export function Table({ toolbarProps => { return ( ({ /> ); }, - [toggleFilters, hasFilters, selectedFiltersLength, setSearch, toolbarRef], + [toggleFilters, hasFilters, selectedFiltersLength, setSearch], ); const hasNoRows = typeof data !== 'function' && data.length === 0; From b05210593de275cd3f51df2e06efcc560907e52e Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 27 Jul 2021 14:15:42 +0200 Subject: [PATCH 22/56] chore: bump the version of material-ui core to 4.12.2 Signed-off-by: blam --- docs/getting-started/app-custom-theme.md | 2 +- packages/app/package.json | 2 +- .../templates/default-plugin/package.json.hbs | 2 +- packages/core-app-api/package.json | 2 +- packages/core-components/package.json | 1 - packages/core-plugin-api/package.json | 2 +- .../default-app/packages/app/package.json.hbs | 2 +- packages/dev-utils/package.json | 2 +- packages/integration-react/package.json | 2 +- packages/test-utils/package.json | 2 +- packages/theme/package.json | 2 +- packages/theme/src/baseTheme.ts | 2 +- plugins/api-docs/package.json | 2 +- plugins/badges/package.json | 2 +- plugins/bitrise/package.json | 2 +- plugins/catalog-import/package.json | 2 +- plugins/catalog-react/package.json | 2 +- plugins/catalog/package.json | 2 +- plugins/circleci/package.json | 2 +- plugins/cloudbuild/package.json | 2 +- plugins/code-coverage/package.json | 2 +- plugins/config-schema/package.json | 2 +- plugins/cost-insights/package.json | 2 +- plugins/explore/package.json | 2 +- plugins/fossa/package.json | 2 +- plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/package.json | 2 +- plugins/github-actions/package.json | 2 +- plugins/github-deployments/package.json | 2 +- plugins/gitops-profiles/package.json | 2 +- plugins/graphiql/package.json | 2 +- plugins/ilert/package.json | 2 +- plugins/jenkins/package.json | 2 +- plugins/kafka/package.json | 2 +- plugins/kubernetes/package.json | 2 +- plugins/lighthouse/package.json | 2 +- plugins/newrelic/package.json | 2 +- plugins/org/package.json | 2 +- plugins/pagerduty/package.json | 2 +- plugins/register-component/package.json | 2 +- plugins/rollbar/package.json | 2 +- plugins/scaffolder/package.json | 2 +- plugins/search/package.json | 2 +- plugins/sentry/package.json | 2 +- plugins/shortcuts/package.json | 2 +- plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/package.json | 2 +- plugins/tech-radar/package.json | 2 +- plugins/techdocs/package.json | 2 +- plugins/todo/package.json | 2 +- plugins/user-settings/package.json | 2 +- plugins/welcome/package.json | 2 +- plugins/xcmetrics/package.json | 2 +- yarn.lock | 18 +++++++++--------- 54 files changed, 61 insertions(+), 62 deletions(-) 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/packages/app/package.json b/packages/app/package.json index 388635e56b..4bd94adfc3 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -41,7 +41,7 @@ "@backstage/plugin-user-settings": "^0.3.0", "@backstage/search-common": "^0.1.2", "@backstage/theme": "^0.2.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", "@octokit/rest": "^18.5.3", 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/core-app-api/package.json b/packages/core-app-api/package.json index 41e7c52393..ec00580332 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -33,7 +33,7 @@ "@backstage/config": "^0.1.3", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@types/react": "^16.9", "@types/prop-types": "^15.7.3", diff --git a/packages/core-components/package.json b/packages/core-components/package.json index c8f96537f9..9921f20ccb 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -33,7 +33,6 @@ "@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", diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 7b2aa3deea..e382adfeef 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -31,7 +31,7 @@ "dependencies": { "@backstage/config": "^0.1.3", "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@material-ui/core": "^4.12.2", "@types/react": "^16.9", "history": "^5.0.0", "prop-types": "^15.7.2", 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/dev-utils/package.json b/packages/dev-utils/package.json index a80745284c..c8466b0aa3 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -37,7 +37,7 @@ "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/test-utils": "^0.1.15", "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@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", diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index e0161cb5ab..85077778f6 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -25,7 +25,7 @@ "@backstage/core-plugin-api": "^0.1.3", "@backstage/integration": "^0.5.6", "@backstage/theme": "^0.2.3", - "@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/test-utils/package.json b/packages/test-utils/package.json index cfe4f2198e..8624b71d89 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -33,7 +33,7 @@ "@backstage/core-plugin-api": "^0.1.3", "@backstage/test-utils-core": "^0.1.1", "@backstage/theme": "^0.2.8", - "@material-ui/core": "^4.11.0", + "@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", diff --git a/packages/theme/package.json b/packages/theme/package.json index d433be4648..3b34dc84b3 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -28,7 +28,7 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@material-ui/core": "^4.11.0" + "@material-ui/core": "^4.12.2" }, "devDependencies": { "@backstage/cli": "^0.7.0" 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/package.json b/plugins/api-docs/package.json index 4294daea20..06297e7be0 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -37,7 +37,7 @@ "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/theme": "^0.2.8", "@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", diff --git a/plugins/badges/package.json b/plugins/badges/package.json index 3d38bc6d92..53c3a9f639 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -26,7 +26,7 @@ "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/theme": "^0.2.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", "react": "^16.13.1", diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 00eb35f055..45eaf94771 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -25,7 +25,7 @@ "@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", + "@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", diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index d6f371bc65..c9b5022116 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -38,7 +38,7 @@ "@backstage/integration-react": "^0.1.4", "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/theme": "^0.2.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", "@octokit/rest": "^18.5.3", diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index d0cb5ac947..6ae75197af 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -34,7 +34,7 @@ "@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/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/react": "^16.9", diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 821e029616..356ad1b0ab 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -39,7 +39,7 @@ "@backstage/integration-react": "^0.1.4", "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/theme": "^0.2.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", diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 52aae08b57..9a9c7e9b3d 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -36,7 +36,7 @@ "@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", + "@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", diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index ee9f8a4e0c..aa661b7789 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -35,7 +35,7 @@ "@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", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "moment": "^2.27.0", diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index bd632972df..8405466cd1 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -27,7 +27,7 @@ "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/theme": "^0.2.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", "@material-ui/styles": "^4.11.0", diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 7ef279f123..46e3f8c8b6 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -25,7 +25,7 @@ "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/theme": "^0.2.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", "jsonschema": "^1.2.6", diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 2f6fac1479..f73850af38 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -34,7 +34,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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", "@material-ui/styles": "^4.9.6", diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 2059632c08..0ee534cf1c 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -36,7 +36,7 @@ "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/plugin-explore-react": "^0.0.6", "@backstage/theme": "^0.2.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", diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index cc4a27a5c0..d826ba12d4 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -37,7 +37,7 @@ "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/theme": "^0.2.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", "cross-fetch": "^3.0.6", diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 1d04d7f1d5..1089c0f15b 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -33,7 +33,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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", "react": "^16.13.1", diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 5598fcd6ef..488c763e55 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -24,7 +24,7 @@ "@backstage/core-plugin-api": "^0.1.3", "@backstage/integration": "^0.5.6", "@backstage/theme": "^0.2.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", "@octokit/rest": "^18.5.3", diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index d85d1e53fe..bc96173252 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -38,7 +38,7 @@ "@backstage/integration": "^0.5.8", "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/theme": "^0.2.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", "@octokit/rest": "^18.5.3", diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 9561083063..a93241dc42 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -28,7 +28,7 @@ "@backstage/integration-react": "^0.1.4", "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/theme": "^0.2.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", "@octokit/graphql": "^4.5.8", diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index e7e45ee2a6..343c6ba569 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -34,7 +34,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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", "react": "^16.13.1", diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 46f44cdcf4..5c99b8c201 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -34,7 +34,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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", "graphiql": "^1.0.0-alpha.10", diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 01a8e7b013..d74d8dc107 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -27,7 +27,7 @@ "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/theme": "^0.2.8", "@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", diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 6030beee8e..69555e3f01 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -36,7 +36,7 @@ "@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", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "luxon": "^1.25.0", diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index a7328b0c0c..6b12cd2421 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -25,7 +25,7 @@ "@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", + "@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/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index ee58c6b222..a4ea3a7522 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -38,7 +38,7 @@ "@backstage/plugin-kubernetes-common": "^0.1.2", "@backstage/theme": "^0.2.8", "@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", diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 8ceaa35d20..a0fd092134 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -37,7 +37,7 @@ "@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", + "@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", diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index e927cf6eef..7fa4c558dc 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -34,7 +34,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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", "react": "^16.13.1", diff --git a/plugins/org/package.json b/plugins/org/package.json index f721675584..2cd0a8a072 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -25,7 +25,7 @@ "@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", + "@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/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 2a5c086e50..ba21218150 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -35,7 +35,7 @@ "@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", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "@types/react": "^16.9", diff --git a/plugins/register-component/package.json b/plugins/register-component/package.json index c9a4ca161b..1fb1e483c6 100644 --- a/plugins/register-component/package.json +++ b/plugins/register-component/package.json @@ -35,7 +35,7 @@ "@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", + "@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/plugins/rollbar/package.json b/plugins/rollbar/package.json index f95bba8076..85ba3f8e21 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -36,7 +36,7 @@ "@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", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "lodash": "^4.17.15", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index edb2f44d94..4bcfc05353 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -40,7 +40,7 @@ "@backstage/integration-react": "^0.1.4", "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/theme": "^0.2.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", "@rjsf/core": "^3.0.0", diff --git a/plugins/search/package.json b/plugins/search/package.json index a6ca45497a..982a26bdd2 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -37,7 +37,7 @@ "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/search-common": "^0.1.2", "@backstage/theme": "^0.2.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", diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 989a18a6d9..94fcd0d300 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -36,7 +36,7 @@ "@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", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "luxon": "^1.27.0", diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 293d71eeb9..21cfed0354 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -23,7 +23,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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/zen-observable": "^0.8.2", diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index a132da5702..186cb4dd0a 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -37,7 +37,7 @@ "@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", + "@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", diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index d779df3f97..feba99c516 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -35,7 +35,7 @@ "@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", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", "classnames": "^2.2.6", diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 305061087b..ce467581e5 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -33,7 +33,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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", "color": "^3.1.2", diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 2621be9cee..ce01652c09 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -40,7 +40,7 @@ "@backstage/integration-react": "^0.1.4", "@backstage/plugin-catalog-react": "^0.3.1", "@backstage/theme": "^0.2.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", "@material-ui/styles": "^4.10.0", diff --git a/plugins/todo/package.json b/plugins/todo/package.json index ece2509882..a3850c4da5 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -32,7 +32,7 @@ "@backstage/errors": "^0.1.1", "@backstage/plugin-catalog-react": "^0.3.0", "@backstage/theme": "^0.2.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", "react": "^16.13.1", diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 7a450a188e..7ebb1b120f 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -33,7 +33,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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", "react": "^16.13.1", diff --git a/plugins/welcome/package.json b/plugins/welcome/package.json index 68cb992e40..afec6a65c0 100644 --- a/plugins/welcome/package.json +++ b/plugins/welcome/package.json @@ -33,7 +33,7 @@ "@backstage/core-components": "^0.1.6", "@backstage/core-plugin-api": "^0.1.3", "@backstage/theme": "^0.2.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", "react": "^16.13.1", diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index b939c3e5bf..5b1fe61e10 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -24,7 +24,7 @@ "@backstage/core-plugin-api": "^0.1.3", "@backstage/errors": "^0.1.1", "@backstage/theme": "^0.2.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", "luxon": "^1.27.0", diff --git a/yarn.lock b/yarn.lock index c839327ef3..52d4c7b351 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3462,14 +3462,14 @@ react-beautiful-dnd "^13.0.0" react-double-scrollbar "0.0.15" -"@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-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" @@ -3543,10 +3543,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" From e7e3f1d53eaf3dfbd74d07f6b070d5b8ba0bde69 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 27 Jul 2021 14:18:04 +0200 Subject: [PATCH 23/56] chore: bump core to latest Signed-off-by: blam --- packages/core-components/package.json | 1 + .../core-components/src/components/Table/Table.tsx | 10 ++++++++-- .../CostInsightsPage/CostInsightsThemeProvider.tsx | 5 ++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 9921f20ccb..4548e1003d 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -33,6 +33,7 @@ "@backstage/core-plugin-api": "^0.1.2", "@backstage/errors": "^0.1.1", "@backstage/theme": "^0.2.8", + "@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", diff --git a/packages/core-components/src/components/Table/Table.tsx b/packages/core-components/src/components/Table/Table.tsx index 6eda4e01cc..7e3dc7346a 100644 --- a/packages/core-components/src/components/Table/Table.tsx +++ b/packages/core-components/src/components/Table/Table.tsx @@ -54,7 +54,6 @@ import React, { ReactNode, useCallback, useEffect, - useRef, useState, } from 'react'; import { CheckboxTreeProps } from '../CheckboxTree/CheckboxTree'; @@ -212,6 +211,7 @@ export interface TableProps } export function TableToolbar(toolbarProps: { + toolbarRef: MutableRefObject; setSearch: (value: string) => void; onSearchChanged: (value: string) => void; toggleFilters: () => void; @@ -219,6 +219,7 @@ export function TableToolbar(toolbarProps: { selectedFiltersLength: number; }) { const { + toolbarRef, setSearch, hasFilters, selectedFiltersLength, @@ -246,6 +247,7 @@ export function TableToolbar(toolbarProps: { @@ -253,7 +255,11 @@ export function TableToolbar(toolbarProps: { } return ( - + ); } 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, From 9d40fcb1eaada94aa0d766fbd0d05a6a1a01f69f Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 27 Jul 2021 14:27:19 +0200 Subject: [PATCH 24/56] chore: added a huge changeset for all the packages affected by the material-ui changes Signed-off-by: blam --- .changeset/lazy-colts-help.md | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .changeset/lazy-colts-help.md diff --git a/.changeset/lazy-colts-help.md b/.changeset/lazy-colts-help.md new file mode 100644 index 0000000000..007dcf7ffd --- /dev/null +++ b/.changeset/lazy-colts-help.md @@ -0,0 +1,56 @@ +--- +'@backstage/cli': patch +'@backstage/core-app-api': patch +'@backstage/core-components': patch +'@backstage/core-plugin-api': patch +'@backstage/create-app': patch +'@backstage/dev-utils': patch +'@backstage/integration-react': patch +'@backstage/test-utils': patch +'@backstage/theme': patch +'@backstage/plugin-api-docs': patch +'@backstage/plugin-badges': patch +'@backstage/plugin-bitrise': patch +'@backstage/plugin-catalog': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-circleci': patch +'@backstage/plugin-cloudbuild': patch +'@backstage/plugin-code-coverage': patch +'@backstage/plugin-config-schema': patch +'@backstage/plugin-cost-insights': patch +'@backstage/plugin-explore': patch +'@backstage/plugin-fossa': patch +'@backstage/plugin-gcp-projects': patch +'@backstage/plugin-git-release-manager': patch +'@backstage/plugin-github-actions': patch +'@backstage/plugin-github-deployments': patch +'@backstage/plugin-gitops-profiles': patch +'@backstage/plugin-graphiql': patch +'@backstage/plugin-ilert': patch +'@backstage/plugin-jenkins': patch +'@backstage/plugin-kafka': patch +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-lighthouse': patch +'@backstage/plugin-newrelic': patch +'@backstage/plugin-org': patch +'@backstage/plugin-pagerduty': patch +'@backstage/plugin-register-component': patch +'@backstage/plugin-rollbar': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-search': patch +'@backstage/plugin-sentry': patch +'@backstage/plugin-shortcuts': patch +'@backstage/plugin-sonarqube': patch +'@backstage/plugin-splunk-on-call': patch +'@backstage/plugin-tech-radar': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-todo': patch +'@backstage/plugin-user-settings': patch +'@backstage/plugin-welcome': patch +'@backstage/plugin-xcmetrics': patch +--- + +- 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` From dfccf47ba66546e28ace5bf176acd908da9d80b5 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 28 Jul 2021 09:44:52 +0200 Subject: [PATCH 25/56] imports const from the package Signed-off-by: Nicolas Torres --- .../EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx index 565ffc30e3..833ca74daa 100644 --- a/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx +++ b/plugins/catalog/src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx @@ -19,7 +19,7 @@ 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 '../../../../../packages/catalog-client/src'; +import { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from '@backstage/catalog-client'; const errorfilter = (i: UNSTABLE_EntityStatusItem) => i.error && From a11d33e4913b7c81b28722b8d4b1f5e52f36838d Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 28 Jul 2021 09:45:20 +0200 Subject: [PATCH 26/56] removes unnecessary themeprovider Signed-off-by: Nicolas Torres --- .../WarningPanel/WarningPanel.test.tsx | 43 +++++-------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx b/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx index 5a6f49b689..4ae6423333 100644 --- a/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx +++ b/packages/core-components/src/components/WarningPanel/WarningPanel.test.tsx @@ -17,10 +17,9 @@ import React from 'react'; import { fireEvent, screen } from '@testing-library/react'; import { renderInTestApp } from '@backstage/test-utils'; -import { ThemeProvider, Typography } from '@material-ui/core'; +import { Typography } from '@material-ui/core'; import { WarningPanel, WarningProps } from './WarningPanel'; -import { lightTheme } from '@backstage/theme'; const propsTitle: WarningProps = { title: 'Mock title' }; const propsTitleMessage: WarningProps = { @@ -36,20 +35,12 @@ const propsErrorMessage: WarningProps = { describe('', () => { it('renders without exploding', async () => { - await renderInTestApp( - - - , - ); + await renderInTestApp(); expect(screen.getByText('Warning: Mock title')).toBeInTheDocument(); }); it('renders title', async () => { - await renderInTestApp( - - - , - ); + await renderInTestApp(); const expandIcon = await screen.getByText('Warning: Mock title'); fireEvent.click(expandIcon); expect(screen.getByText('Warning: Mock title')).toBeInTheDocument(); @@ -58,43 +49,31 @@ describe('', () => { it('renders title and children', async () => { await renderInTestApp( - - - Java stacktrace - - , + + Java stacktrace + , ); expect(screen.getByText('Java stacktrace')).toBeInTheDocument(); }); it('renders message', async () => { - await renderInTestApp( - - - , - ); + await renderInTestApp(); expect(screen.getByText('Warning')).toBeInTheDocument(); expect(screen.getByText('Some more info')).toBeInTheDocument(); }); it('renders title, message, and children', async () => { await renderInTestApp( - - - Java stacktrace - - , + + Java stacktrace + , ); expect(screen.getByText('Warning: Mock title')).toBeInTheDocument(); expect(screen.getByText('Some more info')).toBeInTheDocument(); expect(screen.getByText('Java stacktrace')).toBeInTheDocument(); }); it('renders message using severity', async () => { - await renderInTestApp( - - - , - ); + await renderInTestApp(); expect(screen.getByText('Error: Mock title')).toBeInTheDocument(); }); }); From e4161fcb04f4e5153ccd8643ddaafd6177d4c547 Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Wed, 28 Jul 2021 10:23:19 +0200 Subject: [PATCH 27/56] Update lazy-colts-help.md Signed-off-by: Ben Lambert --- .changeset/lazy-colts-help.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.changeset/lazy-colts-help.md b/.changeset/lazy-colts-help.md index 007dcf7ffd..1a932ecc19 100644 --- a/.changeset/lazy-colts-help.md +++ b/.changeset/lazy-colts-help.md @@ -54,3 +54,5 @@ - 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` + +- For anyone not using our `Table` component and relying on `material-table` directly, please update to use `@material-table/core` and follow this migration guide https://material-table-core.com/docs/breaking-changes#onchangerowsperpage From 1f9e626047ec9c8e3d7c3494edbf987ba9c6db9b Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Wed, 28 Jul 2021 10:55:47 +0200 Subject: [PATCH 28/56] fix changeset and make core-components minor Signed-off-by: Ben Lambert --- .changeset/lazy-colts-help.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.changeset/lazy-colts-help.md b/.changeset/lazy-colts-help.md index 1a932ecc19..18bc47e046 100644 --- a/.changeset/lazy-colts-help.md +++ b/.changeset/lazy-colts-help.md @@ -1,7 +1,7 @@ --- '@backstage/cli': patch '@backstage/core-app-api': patch -'@backstage/core-components': patch +'@backstage/core-components': minor '@backstage/core-plugin-api': patch '@backstage/create-app': patch '@backstage/dev-utils': patch @@ -51,8 +51,10 @@ '@backstage/plugin-xcmetrics': patch --- -- 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. - +- 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` +- Information on migraiton guide here: https://material-table-core.com/docs/breaking-changes -- For anyone not using our `Table` component and relying on `material-table` directly, please update to use `@material-table/core` and follow this migration guide https://material-table-core.com/docs/breaking-changes#onchangerowsperpage From 45df260a38a48e7a372a89fdf3e57780882037f4 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 28 Jul 2021 11:02:16 +0200 Subject: [PATCH 29/56] Updates tests because not the tag is Error not Warning Signed-off-by: Nicolas Torres --- .../src/components/GithubDeploymentsCard.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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(); }); From a5864a50bf7d982cf9793f2633f9e7b32e01fa46 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 28 Jul 2021 11:55:44 +0200 Subject: [PATCH 30/56] chore: udpate changeset formatting to make linting happy Signed-off-by: blam --- .changeset/lazy-colts-help.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.changeset/lazy-colts-help.md b/.changeset/lazy-colts-help.md index 18bc47e046..202a628526 100644 --- a/.changeset/lazy-colts-help.md +++ b/.changeset/lazy-colts-help.md @@ -56,5 +56,4 @@ - 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` -- Information on migraiton guide here: https://material-table-core.com/docs/breaking-changes - +- Migration guide is here: https://material-table-core.com/docs/breaking-changes From 93b689486b71977f99f6e1dcfdee3c0eaa90d560 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Wed, 28 Jul 2021 14:51:46 +0200 Subject: [PATCH 31/56] Add explicit support for mkdocs.yaml files when present. Co-authored-by: Camila Loiola Signed-off-by: Eric Peterson --- .../src/stages/generate/helpers.test.ts | 54 +++++++++++++------ .../src/stages/generate/helpers.ts | 48 ++++++++++++----- .../src/stages/generate/techdocs.ts | 14 ++--- 3 files changed, 79 insertions(+), 37 deletions(-) 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..13bb63ca44 100644 --- a/packages/techdocs-common/src/stages/generate/techdocs.ts +++ b/packages/techdocs-common/src/stages/generate/techdocs.ts @@ -16,10 +16,10 @@ import { ContainerRunner } from '@backstage/backend-common'; import { Config } from '@backstage/config'; -import path from 'path'; import { Logger } from 'winston'; import { addBuildTimestampMetadata, + getMkdocsYml, patchMkdocsYmlPreBuild, runCommand, storeEtagMetadata, @@ -71,19 +71,13 @@ 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, content } = await getMkdocsYml(inputDir); if (parsedLocationAnnotation) { - await patchMkdocsYmlPreBuild( - mkdocsYmlPath, - childLogger, - parsedLocationAnnotation, - ); + await patchMkdocsYmlPreBuild(path, childLogger, parsedLocationAnnotation); } - await validateMkdocsYaml(inputDir, mkdocsYmlPath); + await validateMkdocsYaml(inputDir, content); // Directories to bind on container const mountDirs = { From 54356336e2d23271cb23b8523e293aed61be8ec1 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Wed, 28 Jul 2021 14:54:50 +0200 Subject: [PATCH 32/56] Changeset! Co-authored-by: Camila Loiola Signed-off-by: Eric Peterson --- .changeset/techdocs-you-say-yaml.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/techdocs-you-say-yaml.md diff --git a/.changeset/techdocs-you-say-yaml.md b/.changeset/techdocs-you-say-yaml.md new file mode 100644 index 0000000000..fef2ab3eb9 --- /dev/null +++ b/.changeset/techdocs-you-say-yaml.md @@ -0,0 +1,7 @@ +--- +'@backstage/techdocs-common': patch +--- + +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). From 45ac7995379c11afe8f23777a2afb1113159bc91 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Wed, 28 Jul 2021 15:14:11 +0200 Subject: [PATCH 33/56] Fix path Signed-off-by: Eric Peterson --- packages/techdocs-common/src/stages/generate/techdocs.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/techdocs-common/src/stages/generate/techdocs.ts b/packages/techdocs-common/src/stages/generate/techdocs.ts index 13bb63ca44..1a6577cad9 100644 --- a/packages/techdocs-common/src/stages/generate/techdocs.ts +++ b/packages/techdocs-common/src/stages/generate/techdocs.ts @@ -16,6 +16,7 @@ import { ContainerRunner } from '@backstage/backend-common'; import { Config } from '@backstage/config'; +import path from 'path'; import { Logger } from 'winston'; import { addBuildTimestampMetadata, @@ -72,9 +73,13 @@ export class TechdocsGenerator implements GeneratorBase { logStream, }: GeneratorRunOptions): Promise { // Do some updates to mkdocs.yml before generating docs e.g. adding repo_url - const { path, content } = await getMkdocsYml(inputDir); + const { path: mkdocsYmlPath, content } = await getMkdocsYml(inputDir); if (parsedLocationAnnotation) { - await patchMkdocsYmlPreBuild(path, childLogger, parsedLocationAnnotation); + await patchMkdocsYmlPreBuild( + mkdocsYmlPath, + childLogger, + parsedLocationAnnotation, + ); } await validateMkdocsYaml(inputDir, content); From a85d6df823bbd7c43ee0a704bc0c604023825282 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Tue, 27 Jul 2021 16:15:32 +0200 Subject: [PATCH 34/56] Use verbose level when migrating docs so that techdocs-cli will display when --verbose flag is used. Signed-off-by: Eric Peterson --- packages/techdocs-common/src/stages/publish/awsS3.ts | 2 +- packages/techdocs-common/src/stages/publish/azureBlobStorage.ts | 2 +- packages/techdocs-common/src/stages/publish/local.ts | 2 +- .../src/stages/publish/migrations/GoogleMigration.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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}`), From 59a5fa319e905c074302dee297ad49afe4f8ebe3 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Tue, 27 Jul 2021 16:18:14 +0200 Subject: [PATCH 35/56] Changeset Signed-off-by: Eric Peterson --- .changeset/techdocs-blink-of-an-eye.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/techdocs-blink-of-an-eye.md diff --git a/.changeset/techdocs-blink-of-an-eye.md b/.changeset/techdocs-blink-of-an-eye.md new file mode 100644 index 0000000000..e5bc60f0c7 --- /dev/null +++ b/.changeset/techdocs-blink-of-an-eye.md @@ -0,0 +1,6 @@ +--- +'@backstage/techdocs-common': patch +--- + +Migrated files are now printed when `techdocs-cli migrate` is run with the +`--verbose` flag set. From 07410d1e9b4bcaa07c2922dfdaf04810827b41c3 Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Tue, 27 Jul 2021 11:38:25 +0200 Subject: [PATCH 36/56] make KubernetesFanOutHandler params an object Signed-off-by: Miklos Kiss --- plugins/kubernetes-backend/src/index.ts | 2 ++ .../src/service/KubernetesFanOutHandler.ts | 24 ++++++++++++------- .../kubernetes-backend/src/service/router.ts | 8 +++---- 3 files changed, 22 insertions(+), 12 deletions(-) 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.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 5e27dac770..0774a015a1 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: KubernetesObjectTypes[] = [ +export const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [ 'pods', 'services', 'configmaps', @@ -36,6 +36,14 @@ const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [ '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; @@ -43,13 +51,13 @@ export class KubernetesFanOutHandler { private readonly customResources: CustomResource[]; private readonly objectTypesToFetch: KubernetesObjectTypes[]; - constructor( - logger: Logger, - fetcher: KubernetesFetcher, - serviceLocator: KubernetesServiceLocator, - customResources: CustomResource[], - objectTypesToFetch: KubernetesObjectTypes[] = DEFAULT_OBJECTS, - ) { + constructor({ + logger, + fetcher, + serviceLocator, + customResources, + objectTypesToFetch = DEFAULT_OBJECTS, + }: KubernetesFanOutHandlerOptions) { this.logger = logger; this.fetcher = fetcher; this.serviceLocator = serviceLocator; diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 13094cf6ed..8a1f2fe627 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -134,17 +134,17 @@ export async function createRouter( ); const serviceLocator = getServiceLocator(options.config, clusterDetails); - const objectTypes = options.config.getOptionalStringArray( + const objectTypesToFetch = options.config.getOptionalStringArray( 'kubernetes.objectTypes', ) as KubernetesObjectTypes[]; - const kubernetesFanOutHandler = new KubernetesFanOutHandler( + const kubernetesFanOutHandler = new KubernetesFanOutHandler({ logger, fetcher, serviceLocator, customResources, - objectTypes, - ); + objectTypesToFetch, + }); return makeRouter(logger, kubernetesFanOutHandler, clusterDetails); } From 0a2481b607ce7a578bd3657cae289f8f401f9fe7 Mon Sep 17 00:00:00 2001 From: Guille Vigil Date: Wed, 28 Jul 2021 21:20:59 +0200 Subject: [PATCH 37/56] Adding empathy.co as adopter Signed-off-by: Guille Vigil --- ADOPTERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 041242c083..3461b54ef3 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. | \ No newline at end of file From a4da32330ee3555fa7843868875d582e0601a970 Mon Sep 17 00:00:00 2001 From: Guille Vigil Date: Wed, 28 Jul 2021 21:31:51 +0200 Subject: [PATCH 38/56] Prettier to adopters Signed-off-by: Guille Vigil --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 3461b54ef3..3291abc346 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -39,4 +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. | \ No newline at end of file +| [empathy.co](https://empathy.co/) | [@guillermotti](https://github.com/guillermotti) | Developer portal for tech docs, service catalog, plugin discovery and much more. | From 83c551f48fcb604f52bec2d0be2a099361719a7d Mon Sep 17 00:00:00 2001 From: ImgBotApp Date: Wed, 28 Jul 2021 20:57:01 +0000 Subject: [PATCH 39/56] [ImgBot] Optimize images /plugins/xcmetrics/docs/XCMetrics-overview.png -- 860.08kb -> 560.38kb (34.85%) Signed-off-by: ImgBotApp --- plugins/xcmetrics/docs/XCMetrics-overview.png | Bin 880719 -> 573826 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/plugins/xcmetrics/docs/XCMetrics-overview.png b/plugins/xcmetrics/docs/XCMetrics-overview.png index 3ee4b1915a6bfc9131eed2eebb730daec8343e90..b778461120d8e50bc35f6d6a5da68ff5fd806baf 100644 GIT binary patch literal 573826 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∓ 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≥B3{nOtTf>B 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�+JfD84mO=zaKVWXyIqe&%$7dq^Jm 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 (?Ot+arBmY+#+^IQ&XB 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 z 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�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 M~X83Bav$Vr|rRhV^&Hu?~a?2WoYbUZi%1RF$ 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

nF#9fh#=Ipr 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 z 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

$AZgv$>g*(pDf9qkf`TC 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∨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õ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

da_ZdVD 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 Iy{E4IAB;D|LjV8( From c4cb0b06de9b5c06bda78a497b71ecc8875b0b6c Mon Sep 17 00:00:00 2001 From: Jos Craw Date: Thu, 29 Jul 2021 11:18:34 +1200 Subject: [PATCH 40/56] feat: added optional disableRefesh config for OAuth2 Signed-off-by: Jos Craw --- plugins/auth-backend/src/providers/oauth2/provider.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/auth-backend/src/providers/oauth2/provider.ts b/plugins/auth-backend/src/providers/oauth2/provider.ts index f174543a63..934e0a19d8 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: disableRefresh, providerId, tokenIssuer, }); From b68f2c83cfeae9fdc22b5ceeb337d865290eb77b Mon Sep 17 00:00:00 2001 From: Jos Craw Date: Thu, 29 Jul 2021 11:20:32 +1200 Subject: [PATCH 41/56] added changeset Signed-off-by: Jos Craw --- .changeset/witty-donuts-learn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/witty-donuts-learn.md diff --git a/.changeset/witty-donuts-learn.md b/.changeset/witty-donuts-learn.md new file mode 100644 index 0000000000..d5b291ec97 --- /dev/null +++ b/.changeset/witty-donuts-learn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': minor +--- + +Added the disableRefresh option to the OAuth2 config From cd0a49fd6bb19b64ec7ffae92e43b2f4ff199c96 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 29 Jul 2021 10:13:25 +0200 Subject: [PATCH 42/56] chore: tidying up a little bit ready for release Signed-off-by: blam --- .changeset/witty-donuts-learn.md | 4 ++-- plugins/auth-backend/config.d.ts | 1 + plugins/auth-backend/src/providers/oauth2/provider.ts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.changeset/witty-donuts-learn.md b/.changeset/witty-donuts-learn.md index d5b291ec97..55bc38845f 100644 --- a/.changeset/witty-donuts-learn.md +++ b/.changeset/witty-donuts-learn.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-auth-backend': minor +'@backstage/plugin-auth-backend': patch --- -Added the disableRefresh option to the OAuth2 config +Added the `disableRefresh` option to the `OAuth2` config 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/src/providers/oauth2/provider.ts b/plugins/auth-backend/src/providers/oauth2/provider.ts index 934e0a19d8..6b1f92a2d5 100644 --- a/plugins/auth-backend/src/providers/oauth2/provider.ts +++ b/plugins/auth-backend/src/providers/oauth2/provider.ts @@ -190,7 +190,7 @@ export const createOAuth2Provider = ( }); return OAuthAdapter.fromConfig(globalConfig, provider, { - disableRefresh: disableRefresh, + disableRefresh, providerId, tokenIssuer, }); From 3787e7460987d94536968db673634844ad486320 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 29 Jul 2021 10:20:26 +0200 Subject: [PATCH 43/56] chore: updating changeset, needed a create-app release in here too Signed-off-by: blam --- .changeset/tricky-trains-change.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.changeset/tricky-trains-change.md b/.changeset/tricky-trains-change.md index 391dee0eb1..d8c3263cb9 100644 --- a/.changeset/tricky-trains-change.md +++ b/.changeset/tricky-trains-change.md @@ -1,9 +1,12 @@ --- '@backstage/core-components': patch '@backstage/plugin-catalog': patch +'@backstage/create-app': patch --- -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 EntityPage in your Backstage application: +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 @@ -24,4 +27,4 @@ const overviewContent = ( ``` -Additionally, WarningPanel now changes color based on the provided severity. +Additionally, `WarningPanel` now changes color based on the provided severity. From 32b48219ceea629a3cde5aee37510bc5e75b0a86 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 29 Jul 2021 10:32:54 +0000 Subject: [PATCH 44/56] Version Packages --- .changeset/chilly-frogs-kiss.md | 5 -- .changeset/eighty-snakes-melt.md | 5 -- .changeset/famous-pillows-love.md | 7 -- .changeset/five-dolls-complain.md | 5 -- .changeset/kind-needles-appear.md | 5 -- .changeset/lazy-apples-scream.md | 5 -- .changeset/lazy-colts-help.md | 59 --------------- .changeset/lucky-boats-rescue.md | 5 -- .changeset/pink-glasses-type.md | 5 -- .changeset/pink-plants-reflect.md | 5 -- .changeset/selfish-phones-double.md | 5 -- .changeset/slimy-elephants-sell.md | 7 -- .changeset/small-emus-sin.md | 5 -- .changeset/strong-spies-begin.md | 22 ------ .changeset/techdocs-blink-of-an-eye.md | 6 -- .changeset/techdocs-she-was-gone.md | 5 -- .changeset/techdocs-you-say-yaml.md | 7 -- .changeset/tricky-trains-change.md | 30 -------- .changeset/weak-toes-agree.md | 5 -- .changeset/witty-donuts-learn.md | 5 -- packages/app/CHANGELOG.md | 41 ++++++++++ packages/app/package.json | 74 +++++++++---------- packages/catalog-client/CHANGELOG.md | 6 ++ packages/catalog-client/package.json | 4 +- packages/cli/CHANGELOG.md | 11 +++ packages/cli/package.json | 14 ++-- packages/codemods/CHANGELOG.md | 9 +++ packages/codemods/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 15 ++++ packages/core-app-api/package.json | 12 +-- packages/core-components/CHANGELOG.md | 43 +++++++++++ packages/core-components/package.json | 12 +-- packages/core-plugin-api/CHANGELOG.md | 13 ++++ packages/core-plugin-api/package.json | 10 +-- packages/create-app/CHANGELOG.md | 36 +++++++++ packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 19 +++++ packages/dev-utils/package.json | 18 ++--- packages/integration-react/CHANGELOG.md | 15 ++++ packages/integration-react/package.json | 14 ++-- packages/techdocs-common/CHANGELOG.md | 10 +++ packages/techdocs-common/package.json | 4 +- packages/test-utils/CHANGELOG.md | 15 ++++ packages/test-utils/package.json | 10 +-- packages/theme/CHANGELOG.md | 11 +++ packages/theme/package.json | 4 +- plugins/api-docs/CHANGELOG.md | 18 +++++ plugins/api-docs/package.json | 20 ++--- plugins/auth-backend/CHANGELOG.md | 10 +++ plugins/auth-backend/package.json | 8 +- plugins/badges/CHANGELOG.md | 16 ++++ plugins/badges/package.json | 18 ++--- plugins/bitrise/CHANGELOG.md | 16 ++++ plugins/bitrise/package.json | 18 ++--- .../catalog-backend-module-ldap/CHANGELOG.md | 8 ++ .../catalog-backend-module-ldap/package.json | 8 +- plugins/catalog-backend/CHANGELOG.md | 8 ++ plugins/catalog-backend/package.json | 8 +- plugins/catalog-import/CHANGELOG.md | 18 +++++ plugins/catalog-import/package.json | 22 +++--- plugins/catalog-react/CHANGELOG.md | 40 ++++++++++ plugins/catalog-react/package.json | 16 ++-- plugins/catalog/CHANGELOG.md | 44 +++++++++++ plugins/catalog/package.json | 22 +++--- plugins/circleci/CHANGELOG.md | 16 ++++ plugins/circleci/package.json | 18 ++--- plugins/cloudbuild/CHANGELOG.md | 16 ++++ plugins/cloudbuild/package.json | 18 ++--- plugins/code-coverage/CHANGELOG.md | 16 ++++ plugins/code-coverage/package.json | 18 ++--- plugins/config-schema/CHANGELOG.md | 15 ++++ plugins/config-schema/package.json | 16 ++-- plugins/cost-insights/CHANGELOG.md | 15 ++++ plugins/cost-insights/package.json | 16 ++-- plugins/explore/CHANGELOG.md | 16 ++++ plugins/explore/package.json | 18 ++--- plugins/fossa/CHANGELOG.md | 16 ++++ plugins/fossa/package.json | 18 ++--- plugins/gcp-projects/CHANGELOG.md | 15 ++++ plugins/gcp-projects/package.json | 16 ++-- plugins/git-release-manager/CHANGELOG.md | 15 ++++ plugins/git-release-manager/package.json | 16 ++-- plugins/github-actions/CHANGELOG.md | 16 ++++ plugins/github-actions/package.json | 18 ++--- plugins/github-deployments/CHANGELOG.md | 17 +++++ plugins/github-deployments/package.json | 20 ++--- plugins/gitops-profiles/CHANGELOG.md | 15 ++++ plugins/gitops-profiles/package.json | 16 ++-- plugins/graphiql/CHANGELOG.md | 15 ++++ plugins/graphiql/package.json | 16 ++-- plugins/ilert/CHANGELOG.md | 16 ++++ plugins/ilert/package.json | 18 ++--- plugins/jenkins/CHANGELOG.md | 16 ++++ plugins/jenkins/package.json | 18 ++--- plugins/kafka/CHANGELOG.md | 16 ++++ plugins/kafka/package.json | 18 ++--- plugins/kubernetes-backend/CHANGELOG.md | 8 ++ plugins/kubernetes-backend/package.json | 6 +- plugins/kubernetes-common/CHANGELOG.md | 6 ++ plugins/kubernetes-common/package.json | 4 +- plugins/kubernetes/CHANGELOG.md | 18 +++++ plugins/kubernetes/package.json | 20 ++--- plugins/lighthouse/CHANGELOG.md | 16 ++++ plugins/lighthouse/package.json | 18 ++--- plugins/newrelic/CHANGELOG.md | 15 ++++ plugins/newrelic/package.json | 16 ++-- plugins/org/CHANGELOG.md | 16 ++++ plugins/org/package.json | 18 ++--- plugins/pagerduty/CHANGELOG.md | 16 ++++ plugins/pagerduty/package.json | 18 ++--- plugins/register-component/CHANGELOG.md | 16 ++++ plugins/register-component/package.json | 18 ++--- plugins/rollbar/CHANGELOG.md | 16 ++++ plugins/rollbar/package.json | 18 ++--- plugins/scaffolder/CHANGELOG.md | 19 +++++ plugins/scaffolder/package.json | 22 +++--- plugins/search/CHANGELOG.md | 16 ++++ plugins/search/package.json | 18 ++--- plugins/sentry/CHANGELOG.md | 16 ++++ plugins/sentry/package.json | 18 ++--- plugins/shortcuts/CHANGELOG.md | 15 ++++ plugins/shortcuts/package.json | 16 ++-- plugins/sonarqube/CHANGELOG.md | 16 ++++ plugins/sonarqube/package.json | 18 ++--- plugins/splunk-on-call/CHANGELOG.md | 16 ++++ plugins/splunk-on-call/package.json | 18 ++--- plugins/tech-radar/CHANGELOG.md | 15 ++++ plugins/tech-radar/package.json | 16 ++-- plugins/techdocs/CHANGELOG.md | 19 +++++ plugins/techdocs/package.json | 20 ++--- plugins/todo/CHANGELOG.md | 16 ++++ plugins/todo/package.json | 18 ++--- plugins/user-settings/CHANGELOG.md | 15 ++++ plugins/user-settings/package.json | 18 ++--- plugins/welcome/CHANGELOG.md | 15 ++++ plugins/welcome/package.json | 16 ++-- plugins/xcmetrics/CHANGELOG.md | 20 +++++ plugins/xcmetrics/package.json | 16 ++-- yarn.lock | 67 +++++++++++++++++ 139 files changed, 1539 insertions(+), 677 deletions(-) delete mode 100644 .changeset/chilly-frogs-kiss.md delete mode 100644 .changeset/eighty-snakes-melt.md delete mode 100644 .changeset/famous-pillows-love.md delete mode 100644 .changeset/five-dolls-complain.md delete mode 100644 .changeset/kind-needles-appear.md delete mode 100644 .changeset/lazy-apples-scream.md delete mode 100644 .changeset/lazy-colts-help.md delete mode 100644 .changeset/lucky-boats-rescue.md delete mode 100644 .changeset/pink-glasses-type.md delete mode 100644 .changeset/pink-plants-reflect.md delete mode 100644 .changeset/selfish-phones-double.md delete mode 100644 .changeset/slimy-elephants-sell.md delete mode 100644 .changeset/small-emus-sin.md delete mode 100644 .changeset/strong-spies-begin.md delete mode 100644 .changeset/techdocs-blink-of-an-eye.md delete mode 100644 .changeset/techdocs-she-was-gone.md delete mode 100644 .changeset/techdocs-you-say-yaml.md delete mode 100644 .changeset/tricky-trains-change.md delete mode 100644 .changeset/weak-toes-agree.md delete mode 100644 .changeset/witty-donuts-learn.md create mode 100644 plugins/xcmetrics/CHANGELOG.md diff --git a/.changeset/chilly-frogs-kiss.md b/.changeset/chilly-frogs-kiss.md deleted file mode 100644 index bd1c7c7f1b..0000000000 --- a/.changeset/chilly-frogs-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -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. 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/five-dolls-complain.md b/.changeset/five-dolls-complain.md deleted file mode 100644 index 1d614019a3..0000000000 --- a/.changeset/five-dolls-complain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Export `CATALOG_FILTER_EXISTS` symbol 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/lazy-colts-help.md b/.changeset/lazy-colts-help.md deleted file mode 100644 index 202a628526..0000000000 --- a/.changeset/lazy-colts-help.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -'@backstage/cli': patch -'@backstage/core-app-api': patch -'@backstage/core-components': minor -'@backstage/core-plugin-api': patch -'@backstage/create-app': patch -'@backstage/dev-utils': patch -'@backstage/integration-react': patch -'@backstage/test-utils': patch -'@backstage/theme': patch -'@backstage/plugin-api-docs': patch -'@backstage/plugin-badges': patch -'@backstage/plugin-bitrise': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-catalog-import': patch -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-circleci': patch -'@backstage/plugin-cloudbuild': patch -'@backstage/plugin-code-coverage': patch -'@backstage/plugin-config-schema': patch -'@backstage/plugin-cost-insights': patch -'@backstage/plugin-explore': patch -'@backstage/plugin-fossa': patch -'@backstage/plugin-gcp-projects': patch -'@backstage/plugin-git-release-manager': patch -'@backstage/plugin-github-actions': patch -'@backstage/plugin-github-deployments': patch -'@backstage/plugin-gitops-profiles': patch -'@backstage/plugin-graphiql': patch -'@backstage/plugin-ilert': patch -'@backstage/plugin-jenkins': patch -'@backstage/plugin-kafka': patch -'@backstage/plugin-kubernetes': patch -'@backstage/plugin-lighthouse': patch -'@backstage/plugin-newrelic': patch -'@backstage/plugin-org': patch -'@backstage/plugin-pagerduty': patch -'@backstage/plugin-register-component': patch -'@backstage/plugin-rollbar': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-search': patch -'@backstage/plugin-sentry': patch -'@backstage/plugin-shortcuts': patch -'@backstage/plugin-sonarqube': patch -'@backstage/plugin-splunk-on-call': patch -'@backstage/plugin-tech-radar': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-todo': patch -'@backstage/plugin-user-settings': patch -'@backstage/plugin-welcome': patch -'@backstage/plugin-xcmetrics': patch ---- - -- 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 diff --git a/.changeset/lucky-boats-rescue.md b/.changeset/lucky-boats-rescue.md deleted file mode 100644 index 748f0cccb3..0000000000 --- a/.changeset/lucky-boats-rescue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-client': patch ---- - -Support filtering entities via property existence 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/selfish-phones-double.md b/.changeset/selfish-phones-double.md deleted file mode 100644 index ad4880c983..0000000000 --- a/.changeset/selfish-phones-double.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Optimize load times by only fetching entities with the `backstage.io/techdocs-ref` annotation 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/strong-spies-begin.md b/.changeset/strong-spies-begin.md deleted file mode 100644 index 6ec2fb58d4..0000000000 --- a/.changeset/strong-spies-begin.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -'@backstage/plugin-catalog-react': minor ---- - -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, ...); -``` diff --git a/.changeset/techdocs-blink-of-an-eye.md b/.changeset/techdocs-blink-of-an-eye.md deleted file mode 100644 index e5bc60f0c7..0000000000 --- a/.changeset/techdocs-blink-of-an-eye.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/techdocs-common': patch ---- - -Migrated files are now printed when `techdocs-cli migrate` is run with the -`--verbose` flag set. 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/techdocs-you-say-yaml.md b/.changeset/techdocs-you-say-yaml.md deleted file mode 100644 index fef2ab3eb9..0000000000 --- a/.changeset/techdocs-you-say-yaml.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/techdocs-common': patch ---- - -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). diff --git a/.changeset/tricky-trains-change.md b/.changeset/tricky-trains-change.md deleted file mode 100644 index d8c3263cb9..0000000000 --- a/.changeset/tricky-trains-change.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-catalog': patch -'@backstage/create-app': patch ---- - -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. 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/.changeset/witty-donuts-learn.md b/.changeset/witty-donuts-learn.md deleted file mode 100644 index 55bc38845f..0000000000 --- a/.changeset/witty-donuts-learn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Added the `disableRefresh` option to the `OAuth2` config 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 4bd94adfc3..abba8492da 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,46 +1,46 @@ { "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", + "@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", @@ -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/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/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/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/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 ec00580332..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,10 +29,10 @@ "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", + "@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", @@ -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/package.json b/packages/core-components/package.json index 4548e1003d..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,9 +30,9 @@ }, "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", + "@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", @@ -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-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 e382adfeef..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,7 +30,7 @@ }, "dependencies": { "@backstage/config": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@backstage/theme": "^0.2.9", "@material-ui/core": "^4.12.2", "@types/react": "^16.9", "history": "^5.0.0", @@ -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/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 c8466b0aa3..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,14 +29,14 @@ "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", + "@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", @@ -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 85077778f6..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,10 +21,10 @@ }, "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", + "@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", @@ -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/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 8624b71d89..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,10 +29,10 @@ "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", + "@backstage/theme": "^0.2.9", "@material-ui/core": "^4.12.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^11.2.5", @@ -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 3b34dc84b3..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", @@ -31,7 +31,7 @@ "@material-ui/core": "^4.12.2" }, "devDependencies": { - "@backstage/cli": "^0.7.0" + "@backstage/cli": "^0.7.6" }, "files": [ "dist" 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 06297e7be0..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,11 +31,11 @@ "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.12.2", "@material-ui/icons": "^4.9.1", @@ -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/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/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 53c3a9f639..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,11 +21,11 @@ }, "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", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", @@ -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 45eaf94771..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,10 +21,10 @@ }, "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", + "@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", @@ -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/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/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-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 c9b5022116..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,14 +30,14 @@ "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", + "@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", @@ -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/package.json b/plugins/catalog-react/package.json index b7df4f3450..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,11 +28,11 @@ "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.12.2", "@material-ui/icons": "^4.9.1", @@ -47,9 +47,9 @@ "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", 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/package.json b/plugins/catalog/package.json index 356ad1b0ab..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,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/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", + "@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", @@ -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/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 9a9c7e9b3d..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,10 +32,10 @@ }, "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", + "@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", @@ -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/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 aa661b7789..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,10 +31,10 @@ }, "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", + "@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", @@ -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/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 8405466cd1..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,11 +22,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/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", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", @@ -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 46e3f8c8b6..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,10 +21,10 @@ }, "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", + "@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", @@ -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 f73850af38..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,9 +31,9 @@ }, "dependencies": { "@backstage/config": "^0.1.5", - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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/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 0ee534cf1c..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,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/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", + "@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", @@ -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/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 d826ba12d4..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,11 +32,11 @@ }, "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", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", @@ -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/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 1089c0f15b..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,9 +30,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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 488c763e55..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,10 +20,10 @@ "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", + "@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", @@ -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 bc96173252..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,11 +33,11 @@ }, "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", + "@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", @@ -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-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 a93241dc42..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,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/integration": "^0.5.8", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.0", - "@backstage/theme": "^0.2.8", + "@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", @@ -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/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 343c6ba569..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,9 +31,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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 5c99b8c201..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,9 +31,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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 d74d8dc107..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,11 +21,11 @@ }, "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.12.2", "@material-ui/icons": "^4.9.1", @@ -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/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 69555e3f01..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,10 +32,10 @@ }, "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", + "@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", @@ -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/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 6b12cd2421..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,10 +21,10 @@ }, "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", + "@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", @@ -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/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-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 a4ea3a7522..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,11 +32,11 @@ "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.12.2", "@material-ui/icons": "^4.9.1", @@ -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 a0fd092134..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,10 +33,10 @@ "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", + "@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", @@ -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 7fa4c558dc..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,9 +31,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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 2cd0a8a072..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,10 +21,10 @@ }, "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", + "@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", @@ -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 ba21218150..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,10 +31,10 @@ }, "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", + "@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", @@ -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 1fb1e483c6..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,10 +31,10 @@ }, "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", + "@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", @@ -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 85ba3f8e21..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,10 +32,10 @@ }, "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", + "@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", @@ -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/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 4bcfc05353..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,16 +30,16 @@ "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", + "@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", @@ -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 982a26bdd2..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,12 +31,12 @@ "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", + "@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", @@ -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 94fcd0d300..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,10 +32,10 @@ }, "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", + "@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", @@ -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 21cfed0354..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,9 +20,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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 186cb4dd0a..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,10 +33,10 @@ }, "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", + "@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", @@ -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 feba99c516..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,10 +31,10 @@ }, "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", + "@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", @@ -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 ce467581e5..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,9 +30,9 @@ "start": "backstage-cli plugin:serve" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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 ce01652c09..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,13 +33,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/integration": "^0.5.8", - "@backstage/integration-react": "^0.1.4", - "@backstage/plugin-catalog-react": "^0.3.1", - "@backstage/theme": "^0.2.8", + "@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", @@ -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/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 a3850c4da5..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,11 +27,11 @@ }, "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", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", @@ -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 7ebb1b120f..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,9 +30,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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 afec6a65c0..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,9 +30,9 @@ "start": "backstage-cli plugin:serve" }, "dependencies": { - "@backstage/core-components": "^0.1.6", - "@backstage/core-plugin-api": "^0.1.3", - "@backstage/theme": "^0.2.8", + "@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", @@ -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 5b1fe61e10..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,10 +20,10 @@ "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", + "@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", @@ -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 d0dfbe3c0f..e5d2ebabfe 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" From 1401985eb1a64e3b3bf072cf81f6b89c12e6bc93 Mon Sep 17 00:00:00 2001 From: Mike Lewis Date: Thu, 29 Jul 2021 10:14:51 +0100 Subject: [PATCH 45/56] Update version of ws in yarn.lock to fix Snyk error Signed-off-by: Mike Lewis --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index d0dfbe3c0f..661daf4126 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26572,9 +26572,9 @@ ws@7.4.5: integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== 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" @@ -26584,9 +26584,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" From b1369cfa93f749dc00d8dd91af720f060c1001d1 Mon Sep 17 00:00:00 2001 From: Mike Lewis Date: Thu, 29 Jul 2021 12:08:30 +0100 Subject: [PATCH 46/56] Use resolution to force ws@7.4.6 inside url-loader Fixes Snyk warning by avoiding v7.4.5 of ws. https://snyk.io/vuln/SNYK-JS-WS-1296835 Signed-off-by: Mike Lewis --- package.json | 1 + yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 93517d3374..04177f798e 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ ] }, "resolutions": { + "**/@graphql-tools/url-loader/**/ws": "^7.4.6", "**/@roadiehq/**/@backstage/core": "*", "**/@roadiehq/**/@backstage/plugin-catalog": "*", "**/@roadiehq/**/@backstage/catalog-model": "*", diff --git a/yarn.lock b/yarn.lock index 661daf4126..981907d84d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26566,10 +26566,10 @@ 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.3" From 6fa92ba6910da4cf751991d11591080e835b079d Mon Sep 17 00:00:00 2001 From: Mike Lewis Date: Thu, 29 Jul 2021 14:10:20 +0100 Subject: [PATCH 47/56] Switch to referencing @graphql-codegen/cli in ws resolution Signed-off-by: Mike Lewis --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04177f798e..ea1cf0c9b4 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ ] }, "resolutions": { - "**/@graphql-tools/url-loader/**/ws": "^7.4.6", + "**/@graphql-codegen/cli/**/ws": "^7.4.6", "**/@roadiehq/**/@backstage/core": "*", "**/@roadiehq/**/@backstage/plugin-catalog": "*", "**/@roadiehq/**/@backstage/catalog-model": "*", From fa6c6e07253ddf2c72710fc2f9c7a82c58b62907 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 29 Jul 2021 17:00:40 +0200 Subject: [PATCH 48/56] Adjust docs navigation background color for smaller screens Signed-off-by: Philipp Hugenroth --- microsite/static/css/custom.css | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index 2c8b46ff00..ab70be3197 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 */ From 0e03b840310826d9021536d3b17e46c2de534f8e Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 29 Jul 2021 17:14:02 +0200 Subject: [PATCH 49/56] Fix formatting issue Signed-off-by: Philipp Hugenroth --- microsite/static/css/custom.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index ab70be3197..393a5af118 100644 --- a/microsite/static/css/custom.css +++ b/microsite/static/css/custom.css @@ -289,12 +289,12 @@ td { display: none; } - .docsSliderActive .toc section .navGroups{ + .docsSliderActive .toc section .navGroups { padding-top: 0; padding-bottom: 0; } - .docsSliderActive.docsNavContainer{ + .docsSliderActive.docsNavContainer { background-color: #121212; padding-bottom: 0; } From 6cf48c609835299360bcc0c60f66a9bf85a7f20e Mon Sep 17 00:00:00 2001 From: Andrew Ellis Date: Thu, 29 Jul 2021 15:28:07 -0600 Subject: [PATCH 50/56] feat(plugin-scaffolder-backend): add defaultCommitMessage config option Signed-off-by: Andrew Ellis --- .changeset/soft-news-float.md | 5 ++ app-config.yaml | 2 + plugins/scaffolder-backend/config.d.ts | 4 ++ .../src/scaffolder/actions/builtin/helpers.ts | 4 +- .../actions/builtin/publish/azure.test.ts | 38 +++++++++++ .../actions/builtin/publish/azure.ts | 3 + .../actions/builtin/publish/bitbucket.test.ts | 68 +++++++++++++++++++ .../actions/builtin/publish/bitbucket.ts | 3 + .../actions/builtin/publish/github.test.ts | 45 ++++++++++++ .../actions/builtin/publish/github.ts | 3 + .../actions/builtin/publish/gitlab.test.ts | 46 +++++++++++++ .../actions/builtin/publish/gitlab.ts | 3 + 12 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 .changeset/soft-news-float.md diff --git a/.changeset/soft-news-float.md b/.changeset/soft-news-float.md new file mode 100644 index 0000000000..ae79c63a06 --- /dev/null +++ b/.changeset/soft-news-float.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Add the `scaffolder.defaultCommitMessage`, which defaults to `Initial commit`, so it can be customized. 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/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, }); From 7bbd7820691bf03c29f92b10f9093472a97fef10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Jul 2021 04:15:39 +0000 Subject: [PATCH 51/56] chore(deps): bump @google-cloud/storage from 5.8.5 to 5.11.0 Bumps [@google-cloud/storage](https://github.com/googleapis/nodejs-storage) from 5.8.5 to 5.11.0. - [Release notes](https://github.com/googleapis/nodejs-storage/releases) - [Changelog](https://github.com/googleapis/nodejs-storage/blob/master/CHANGELOG.md) - [Commits](https://github.com/googleapis/nodejs-storage/compare/v5.8.5...v5.11.0) --- updated-dependencies: - dependency-name: "@google-cloud/storage" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index e5d2ebabfe..4c32ab6f02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1993,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" @@ -2005,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": @@ -2081,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" @@ -2094,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" @@ -13677,10 +13676,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" @@ -22903,13 +22902,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" From 903b7db70a40516c6cdf5a867f2bdfcaf295a736 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Jul 2021 04:17:48 +0000 Subject: [PATCH 52/56] chore(deps): bump circleci-api from 4.1.3 to 4.1.4 Bumps [circleci-api](https://github.com/worldturtlemedia/circleci-api) from 4.1.3 to 4.1.4. - [Release notes](https://github.com/worldturtlemedia/circleci-api/releases) - [Commits](https://github.com/worldturtlemedia/circleci-api/compare/v4.1.3...v4.1.4) --- updated-dependencies: - dependency-name: circleci-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index e5d2ebabfe..89aed008c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8150,13 +8150,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" @@ -9568,11 +9561,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" From 2e2a77813d774ed2f2f66413bb59157f5d9b01c3 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 30 Jul 2021 11:21:02 +0200 Subject: [PATCH 53/56] chore: update changeset Signed-off-by: blam --- .changeset/soft-news-float.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/soft-news-float.md b/.changeset/soft-news-float.md index ae79c63a06..03eaf792c7 100644 --- a/.changeset/soft-news-float.md +++ b/.changeset/soft-news-float.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder-backend': minor +'@backstage/plugin-scaffolder-backend': patch --- Add the `scaffolder.defaultCommitMessage`, which defaults to `Initial commit`, so it can be customized. From 7b46caff47ce9fc90d2c4a385402bc5563c10669 Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Fri, 30 Jul 2021 12:08:28 +0200 Subject: [PATCH 54/56] use object as params Signed-off-by: Miklos Kiss --- .../service/KubernetesFanOutHandler.test.ts | 48 +++++++++---------- .../src/service/KubernetesFanOutHandler.ts | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) 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 0774a015a1..0931d775d3 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -41,7 +41,7 @@ export interface KubernetesFanOutHandlerOptions { fetcher: KubernetesFetcher; serviceLocator: KubernetesServiceLocator; customResources: CustomResource[]; - objectTypesToFetch: KubernetesObjectTypes[]; + objectTypesToFetch?: KubernetesObjectTypes[]; } export class KubernetesFanOutHandler { From 12174412923256ac9dc39c8f2b358cb4f1b75229 Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Fri, 30 Jul 2021 12:28:30 +0200 Subject: [PATCH 55/56] update api-report Signed-off-by: Miklos Kiss --- plugins/kubernetes-backend/api-report.md | 5 +++++ 1 file changed, 5 insertions(+) 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) From c189c5da5d58d2fa40bdef8c4bd67dc5691cf9ee Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 30 Jul 2021 12:47:17 +0200 Subject: [PATCH 56/56] chore: fix typo in EntityPage Signed-off-by: Himanshu Mishra --- .changeset/fluffy-cats-approve.md | 5 +++++ .../packages/app/src/components/catalog/EntityPage.tsx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/fluffy-cats-approve.md 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/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..252b538f4e 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 @@ -160,7 +160,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. */